Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 25 from a total of 40 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Propose | 2827700 | 75 days ago | IN | 0 ETH | 0.00113545 | ||||
Execute | 2676519 | 97 days ago | IN | 0 ETH | 0.00033118 | ||||
Execute | 2676518 | 97 days ago | IN | 0 ETH | 0.00033118 | ||||
Execute | 2676517 | 97 days ago | IN | 0 ETH | 0.00035246 | ||||
Vote | 2676511 | 97 days ago | IN | 0 ETH | 0.00038958 | ||||
Vote | 2676510 | 97 days ago | IN | 0 ETH | 0.00038958 | ||||
Vote | 2676508 | 97 days ago | IN | 0 ETH | 0.00038958 | ||||
Vote | 2676506 | 97 days ago | IN | 0 ETH | 0.00038958 | ||||
Vote | 2676500 | 97 days ago | IN | 0 ETH | 0.00042378 | ||||
Vote | 2676497 | 97 days ago | IN | 0 ETH | 0.00042378 | ||||
Propose | 2668412 | 98 days ago | IN | 0 ETH | 0.00094118 | ||||
Propose | 2668197 | 98 days ago | IN | 0 ETH | 0.00094116 | ||||
Vote | 2404194 | 138 days ago | IN | 0 ETH | 0.00038958 | ||||
Vote | 2404192 | 138 days ago | IN | 0 ETH | 0.00038958 | ||||
Vote | 2404169 | 138 days ago | IN | 0 ETH | 0.00021189 | ||||
Propose | 2396835 | 139 days ago | IN | 0 ETH | 0.00061054 | ||||
Execute | 2268976 | 159 days ago | IN | 0 ETH | 0.00051923 | ||||
Vote | 2268953 | 159 days ago | IN | 0 ETH | 0.00038958 | ||||
Vote | 2268759 | 159 days ago | IN | 0 ETH | 0.00000973 | ||||
Vote | 2265907 | 159 days ago | IN | 0 ETH | 0.00038958 | ||||
Vote | 2265898 | 159 days ago | IN | 0 ETH | 0.00042378 | ||||
Propose | 2258757 | 161 days ago | IN | 0 ETH | 0.00049067 | ||||
Propose | 2257053 | 161 days ago | IN | 0 ETH | 0.00002367 | ||||
Execute | 2226074 | 166 days ago | IN | 0 ETH | 0.000513 | ||||
Vote | 2226050 | 166 days ago | IN | 0 ETH | 0.00000973 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
RocketDAONodeTrustedProposals
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity Standard Json-Input format)
/** * . * / \ * |.'.| * |'.'| * ,'| |`. * |,-'-|-'-.| * __|_| | _ _ _____ _ * | ___ \| | | | | | ___ \ | | * | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | | * | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| | * | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | | * \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_| * +---------------------------------------------------+ * | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM 2.0 | * +---------------------------------------------------+ * * Rocket Pool is a first-of-its-kind ETH2 Proof of Stake protocol, designed to be community owned, * decentralised, trustless and compatible with staking in Ethereum 2.0. * * For more information about Rocket Pool, visit https://rocketpool.net * * Authors: David Rugendyke, Jake Pospischil, Kane Wallmann, Darren Langley, Joe Clapis, Nick Doherty * */ pragma solidity 0.7.6; // SPDX-License-Identifier: GPL-3.0-only import "../../RocketBase.sol"; import "../../../interface/dao/node/RocketDAONodeTrustedInterface.sol"; import "../../../interface/dao/node/RocketDAONodeTrustedProposalsInterface.sol"; import "../../../interface/dao/node/RocketDAONodeTrustedActionsInterface.sol"; import "../../../interface/dao/node/RocketDAONodeTrustedUpgradeInterface.sol"; import "../../../interface/dao/node/settings/RocketDAONodeTrustedSettingsInterface.sol"; import "../../../interface/dao/node/settings/RocketDAONodeTrustedSettingsProposalsInterface.sol"; import "../../../interface/dao/RocketDAOProposalInterface.sol"; import "@openzeppelin/contracts/math/SafeMath.sol"; // The Trusted Node DAO Proposals contract RocketDAONodeTrustedProposals is RocketBase, RocketDAONodeTrustedProposalsInterface { using SafeMath for uint; // The namespace for any data stored in the trusted node DAO (do not change) string constant daoNameSpace = "dao.trustednodes."; // Only allow certain contracts to execute methods modifier onlyExecutingContracts() { // Methods are either executed by bootstrapping methods in rocketDAONodeTrusted or by people executing passed proposals in rocketDAOProposal require(msg.sender == getContractAddress("rocketDAONodeTrusted") || msg.sender == getContractAddress("rocketDAOProposal"), "Sender is not permitted to access executing methods"); _; } // Construct constructor(RocketStorageInterface _rocketStorageAddress) RocketBase(_rocketStorageAddress) { // Version version = 1; } /*** Proposals **********************/ // Create a DAO proposal with calldata, if successful will be added to a queue where it can be executed // A general message can be passed by the proposer along with the calldata payload that can be executed if the proposal passes function propose(string memory _proposalMessage, bytes memory _payload) override external onlyTrustedNode(msg.sender) onlyLatestContract("rocketDAONodeTrustedProposals", address(this)) returns (uint256) { // Load contracts RocketDAOProposalInterface daoProposal = RocketDAOProposalInterface(getContractAddress("rocketDAOProposal")); RocketDAONodeTrustedInterface daoNodeTrusted = RocketDAONodeTrustedInterface(getContractAddress("rocketDAONodeTrusted")); RocketDAONodeTrustedSettingsProposalsInterface rocketDAONodeTrustedSettingsProposals = RocketDAONodeTrustedSettingsProposalsInterface(getContractAddress("rocketDAONodeTrustedSettingsProposals")); // Check this user can make a proposal now require(daoNodeTrusted.getMemberLastProposalTime(msg.sender).add(rocketDAONodeTrustedSettingsProposals.getCooldownTime()) <= block.timestamp, "Member has not waited long enough to make another proposal"); // Require the min amount of members are in to make a proposal require(daoNodeTrusted.getMemberCount() >= daoNodeTrusted.getMemberMinRequired(), "Min member count not met to allow proposals to be added"); // Record the last time this user made a proposal setUint(keccak256(abi.encodePacked(daoNameSpace, "member.proposal.lasttime", msg.sender)), block.timestamp); // Create the proposal return daoProposal.add(msg.sender, "rocketDAONodeTrustedProposals", _proposalMessage, block.timestamp.add(rocketDAONodeTrustedSettingsProposals.getVoteDelayTime()), rocketDAONodeTrustedSettingsProposals.getVoteTime(), rocketDAONodeTrustedSettingsProposals.getExecuteTime(), daoNodeTrusted.getMemberQuorumVotesRequired(), _payload); } // Vote on a proposal function vote(uint256 _proposalID, bool _support) override external onlyTrustedNode(msg.sender) onlyLatestContract("rocketDAONodeTrustedProposals", address(this)) { // Load contracts RocketDAOProposalInterface daoProposal = RocketDAOProposalInterface(getContractAddress("rocketDAOProposal")); RocketDAONodeTrustedInterface daoNodeTrusted = RocketDAONodeTrustedInterface(getContractAddress("rocketDAONodeTrusted")); // Did they join after this proposal was created? If so, they can't vote or it'll throw off the set proposalVotesRequired require(daoNodeTrusted.getMemberJoinedTime(msg.sender) < daoProposal.getCreated(_proposalID), "Member cannot vote on proposal created before they became a member"); // Vote now, one vote per trusted node member daoProposal.vote(msg.sender, 1 ether, _proposalID, _support); } // Cancel a proposal function cancel(uint256 _proposalID) override external onlyTrustedNode(msg.sender) onlyLatestContract("rocketDAONodeTrustedProposals", address(this)) { // Load contracts RocketDAOProposalInterface daoProposal = RocketDAOProposalInterface(getContractAddress("rocketDAOProposal")); // Cancel now, will succeed if it is the original proposer daoProposal.cancel(msg.sender, _proposalID); } // Execute a proposal function execute(uint256 _proposalID) override external onlyLatestContract("rocketDAONodeTrustedProposals", address(this)) { // Load contracts RocketDAOProposalInterface daoProposal = RocketDAOProposalInterface(getContractAddress("rocketDAOProposal")); // Execute now daoProposal.execute(_proposalID); } /*** Proposal - Members **********************/ // A new DAO member being invited, can only be done via a proposal or in bootstrap mode // Provide an ID that indicates who is running the trusted node and the address of the registered node that they wish to propose joining the dao function proposalInvite(string memory _id, string memory _url, address _nodeAddress) override external onlyExecutingContracts onlyRegisteredNode(_nodeAddress) { // Their proposal executed, record the block setUint(keccak256(abi.encodePacked(daoNameSpace, "member.executed.time", "invited", _nodeAddress)), block.timestamp); // Ok all good, lets get their invitation and member data setup // They are initially only invited to join, so their membership isn't set as true until they accept it in RocketDAONodeTrustedActions _memberInit(_id, _url, _nodeAddress); } // A current member proposes leaving the trusted node DAO, when successful they will be allowed to collect their RPL bond function proposalLeave(address _nodeAddress) override external onlyExecutingContracts onlyTrustedNode(_nodeAddress) { // Load contracts RocketDAONodeTrustedInterface daoNodeTrusted = RocketDAONodeTrustedInterface(getContractAddress("rocketDAONodeTrusted")); // Check this wouldn't dip below the min required trusted nodes (also checked when the node has a successful proposal and attempts to exit) require(daoNodeTrusted.getMemberCount() > daoNodeTrusted.getMemberMinRequired(), "Member count will fall below min required"); // Their proposal to leave has been accepted, record the block setUint(keccak256(abi.encodePacked(daoNameSpace, "member.executed.time", "leave", _nodeAddress)), block.timestamp); } // Propose to kick a current member from the DAO with an optional RPL bond fine function proposalKick(address _nodeAddress, uint256 _rplFine) override external onlyExecutingContracts onlyTrustedNode(_nodeAddress) { // Load contracts RocketDAONodeTrustedInterface daoNodeTrusted = RocketDAONodeTrustedInterface(getContractAddress("rocketDAONodeTrusted")); RocketDAONodeTrustedActionsInterface daoActionsContract = RocketDAONodeTrustedActionsInterface(getContractAddress("rocketDAONodeTrustedActions")); // How much is their RPL bond? uint256 rplBondAmount = daoNodeTrusted.getMemberRPLBondAmount(_nodeAddress); // Check fine amount can be covered require(_rplFine <= rplBondAmount, "RPL Fine must be lower or equal to the RPL bond amount of the node being kicked"); // Set their bond amount minus the fine setUint(keccak256(abi.encodePacked(daoNameSpace, "member.bond.rpl", _nodeAddress)), rplBondAmount.sub(_rplFine)); // Kick them now daoActionsContract.actionKick(_nodeAddress, _rplFine); } /*** Proposal - Settings ***************/ // Change one of the current uint256 settings of the DAO function proposalSettingUint(string memory _settingContractName, string memory _settingPath, uint256 _value) override external onlyExecutingContracts() { // Load contracts RocketDAONodeTrustedSettingsInterface rocketDAONodeTrustedSettings = RocketDAONodeTrustedSettingsInterface(getContractAddress(_settingContractName)); // Lets update rocketDAONodeTrustedSettings.setSettingUint(_settingPath, _value); } // Change one of the current bool settings of the DAO function proposalSettingBool(string memory _settingContractName, string memory _settingPath, bool _value) override external onlyExecutingContracts() { // Load contracts RocketDAONodeTrustedSettingsInterface rocketDAONodeTrustedSettings = RocketDAONodeTrustedSettingsInterface(getContractAddress(_settingContractName)); // Lets update rocketDAONodeTrustedSettings.setSettingBool(_settingPath, _value); } /*** Proposal - Upgrades ***************/ // Upgrade contracts or ABI's if the DAO agrees function proposalUpgrade(string memory _type, string memory _name, string memory _contractAbi, address _contractAddress) override external onlyExecutingContracts() { // Load contracts RocketDAONodeTrustedUpgradeInterface rocketDAONodeTrustedUpgradeInterface = RocketDAONodeTrustedUpgradeInterface(getContractAddress("rocketDAONodeTrustedUpgrade")); // Lets update rocketDAONodeTrustedUpgradeInterface.upgrade(_type, _name, _contractAbi, _contractAddress); } /*** Internal ***************/ // Add a new potential members data, they are not official members yet, just propsective function _memberInit(string memory _id, string memory _url, address _nodeAddress) private onlyRegisteredNode(_nodeAddress) { // Load contracts RocketDAONodeTrustedInterface daoNodeTrusted = RocketDAONodeTrustedInterface(getContractAddress("rocketDAONodeTrusted")); // Check current node status require(!daoNodeTrusted.getMemberIsValid(_nodeAddress), "This node is already part of the trusted node DAO"); // Verify the ID is min 3 chars require(bytes(_id).length >= 3, "The ID for this new member must be at least 3 characters"); // Check URL length require(bytes(_url).length >= 6, "The URL for this new member must be at least 6 characters"); // Member initial data, not official until the bool is flagged as true setBool(keccak256(abi.encodePacked(daoNameSpace, "member", _nodeAddress)), false); setAddress(keccak256(abi.encodePacked(daoNameSpace, "member.address", _nodeAddress)), _nodeAddress); setString(keccak256(abi.encodePacked(daoNameSpace, "member.id", _nodeAddress)), _id); setString(keccak256(abi.encodePacked(daoNameSpace, "member.url", _nodeAddress)), _url); setUint(keccak256(abi.encodePacked(daoNameSpace, "member.bond.rpl", _nodeAddress)), 0); setUint(keccak256(abi.encodePacked(daoNameSpace, "member.joined.time", _nodeAddress)), 0); } }
/** * . * / \ * |.'.| * |'.'| * ,'| |`. * |,-'-|-'-.| * __|_| | _ _ _____ _ * | ___ \| | | | | | ___ \ | | * | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | | * | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| | * | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | | * \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_| * +---------------------------------------------------+ * | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM 2.0 | * +---------------------------------------------------+ * * Rocket Pool is a first-of-its-kind ETH2 Proof of Stake protocol, designed to be community owned, * decentralised, trustless and compatible with staking in Ethereum 2.0. * * For more information about Rocket Pool, visit https://rocketpool.net * * Authors: David Rugendyke, Jake Pospischil, Kane Wallmann, Darren Langley, Joe Clapis, Nick Doherty * */ pragma solidity >0.5.0 <0.9.0; // SPDX-License-Identifier: GPL-3.0-only interface RocketStorageInterface { // Deploy status function getDeployedStatus() external view returns (bool); // Guardian function getGuardian() external view returns(address); function setGuardian(address _newAddress) external; function confirmGuardian() external; // Getters function getAddress(bytes32 _key) external view returns (address); function getUint(bytes32 _key) external view returns (uint); function getString(bytes32 _key) external view returns (string memory); function getBytes(bytes32 _key) external view returns (bytes memory); function getBool(bytes32 _key) external view returns (bool); function getInt(bytes32 _key) external view returns (int); function getBytes32(bytes32 _key) external view returns (bytes32); // Setters function setAddress(bytes32 _key, address _value) external; function setUint(bytes32 _key, uint _value) external; function setString(bytes32 _key, string calldata _value) external; function setBytes(bytes32 _key, bytes calldata _value) external; function setBool(bytes32 _key, bool _value) external; function setInt(bytes32 _key, int _value) external; function setBytes32(bytes32 _key, bytes32 _value) external; // Deleters function deleteAddress(bytes32 _key) external; function deleteUint(bytes32 _key) external; function deleteString(bytes32 _key) external; function deleteBytes(bytes32 _key) external; function deleteBool(bytes32 _key) external; function deleteInt(bytes32 _key) external; function deleteBytes32(bytes32 _key) external; // Arithmetic function addUint(bytes32 _key, uint256 _amount) external; function subUint(bytes32 _key, uint256 _amount) external; // Protected storage function getNodeWithdrawalAddress(address _nodeAddress) external view returns (address); function getNodePendingWithdrawalAddress(address _nodeAddress) external view returns (address); function setWithdrawalAddress(address _nodeAddress, address _newWithdrawalAddress, bool _confirm) external; function confirmWithdrawalAddress(address _nodeAddress) external; }
/** * . * / \ * |.'.| * |'.'| * ,'| |`. * |,-'-|-'-.| * __|_| | _ _ _____ _ * | ___ \| | | | | | ___ \ | | * | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | | * | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| | * | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | | * \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_| * +---------------------------------------------------+ * | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM 2.0 | * +---------------------------------------------------+ * * Rocket Pool is a first-of-its-kind ETH2 Proof of Stake protocol, designed to be community owned, * decentralised, trustless and compatible with staking in Ethereum 2.0. * * For more information about Rocket Pool, visit https://rocketpool.net * * Authors: David Rugendyke, Jake Pospischil, Kane Wallmann, Darren Langley, Joe Clapis, Nick Doherty * */ pragma solidity 0.7.6; // SPDX-License-Identifier: GPL-3.0-only import "../interface/RocketStorageInterface.sol"; /// @title Base settings / modifiers for each contract in Rocket Pool /// @author David Rugendyke abstract contract RocketBase { // Calculate using this as the base uint256 constant calcBase = 1 ether; // Version of the contract uint8 public version; // The main storage contract where primary persistant storage is maintained RocketStorageInterface rocketStorage = RocketStorageInterface(0); /*** Modifiers **********************************************************/ /** * @dev Throws if called by any sender that doesn't match a Rocket Pool network contract */ modifier onlyLatestNetworkContract() { require(getBool(keccak256(abi.encodePacked("contract.exists", msg.sender))), "Invalid or outdated network contract"); _; } /** * @dev Throws if called by any sender that doesn't match one of the supplied contract or is the latest version of that contract */ modifier onlyLatestContract(string memory _contractName, address _contractAddress) { require(_contractAddress == getAddress(keccak256(abi.encodePacked("contract.address", _contractName))), "Invalid or outdated contract"); _; } /** * @dev Throws if called by any sender that isn't a registered node */ modifier onlyRegisteredNode(address _nodeAddress) { require(getBool(keccak256(abi.encodePacked("node.exists", _nodeAddress))), "Invalid node"); _; } /** * @dev Throws if called by any sender that isn't a trusted node DAO member */ modifier onlyTrustedNode(address _nodeAddress) { require(getBool(keccak256(abi.encodePacked("dao.trustednodes.", "member", _nodeAddress))), "Invalid trusted node"); _; } /** * @dev Throws if called by any sender that isn't a registered minipool */ modifier onlyRegisteredMinipool(address _minipoolAddress) { require(getBool(keccak256(abi.encodePacked("minipool.exists", _minipoolAddress))), "Invalid minipool"); _; } /** * @dev Throws if called by any account other than a guardian account (temporary account allowed access to settings before DAO is fully enabled) */ modifier onlyGuardian() { require(msg.sender == rocketStorage.getGuardian(), "Account is not a temporary guardian"); _; } /*** Methods **********************************************************/ /// @dev Set the main Rocket Storage address constructor(RocketStorageInterface _rocketStorageAddress) { // Update the contract address rocketStorage = RocketStorageInterface(_rocketStorageAddress); } /// @dev Get the address of a network contract by name function getContractAddress(string memory _contractName) internal view returns (address) { // Get the current contract address address contractAddress = getAddress(keccak256(abi.encodePacked("contract.address", _contractName))); // Check it require(contractAddress != address(0x0), "Contract not found"); // Return return contractAddress; } /// @dev Get the address of a network contract by name (returns address(0x0) instead of reverting if contract does not exist) function getContractAddressUnsafe(string memory _contractName) internal view returns (address) { // Get the current contract address address contractAddress = getAddress(keccak256(abi.encodePacked("contract.address", _contractName))); // Return return contractAddress; } /// @dev Get the name of a network contract by address function getContractName(address _contractAddress) internal view returns (string memory) { // Get the contract name string memory contractName = getString(keccak256(abi.encodePacked("contract.name", _contractAddress))); // Check it require(bytes(contractName).length > 0, "Contract not found"); // Return return contractName; } /// @dev Get revert error message from a .call method function getRevertMsg(bytes memory _returnData) internal pure returns (string memory) { // If the _res length is less than 68, then the transaction failed silently (without a revert message) if (_returnData.length < 68) return "Transaction reverted silently"; assembly { // Slice the sighash. _returnData := add(_returnData, 0x04) } return abi.decode(_returnData, (string)); // All that remains is the revert string } /*** Rocket Storage Methods ****************************************/ // Note: Unused helpers have been removed to keep contract sizes down /// @dev Storage get methods function getAddress(bytes32 _key) internal view returns (address) { return rocketStorage.getAddress(_key); } function getUint(bytes32 _key) internal view returns (uint) { return rocketStorage.getUint(_key); } function getString(bytes32 _key) internal view returns (string memory) { return rocketStorage.getString(_key); } function getBytes(bytes32 _key) internal view returns (bytes memory) { return rocketStorage.getBytes(_key); } function getBool(bytes32 _key) internal view returns (bool) { return rocketStorage.getBool(_key); } function getInt(bytes32 _key) internal view returns (int) { return rocketStorage.getInt(_key); } function getBytes32(bytes32 _key) internal view returns (bytes32) { return rocketStorage.getBytes32(_key); } /// @dev Storage set methods function setAddress(bytes32 _key, address _value) internal { rocketStorage.setAddress(_key, _value); } function setUint(bytes32 _key, uint _value) internal { rocketStorage.setUint(_key, _value); } function setString(bytes32 _key, string memory _value) internal { rocketStorage.setString(_key, _value); } function setBytes(bytes32 _key, bytes memory _value) internal { rocketStorage.setBytes(_key, _value); } function setBool(bytes32 _key, bool _value) internal { rocketStorage.setBool(_key, _value); } function setInt(bytes32 _key, int _value) internal { rocketStorage.setInt(_key, _value); } function setBytes32(bytes32 _key, bytes32 _value) internal { rocketStorage.setBytes32(_key, _value); } /// @dev Storage delete methods function deleteAddress(bytes32 _key) internal { rocketStorage.deleteAddress(_key); } function deleteUint(bytes32 _key) internal { rocketStorage.deleteUint(_key); } function deleteString(bytes32 _key) internal { rocketStorage.deleteString(_key); } function deleteBytes(bytes32 _key) internal { rocketStorage.deleteBytes(_key); } function deleteBool(bytes32 _key) internal { rocketStorage.deleteBool(_key); } function deleteInt(bytes32 _key) internal { rocketStorage.deleteInt(_key); } function deleteBytes32(bytes32 _key) internal { rocketStorage.deleteBytes32(_key); } /// @dev Storage arithmetic methods function addUint(bytes32 _key, uint256 _amount) internal { rocketStorage.addUint(_key, _amount); } function subUint(bytes32 _key, uint256 _amount) internal { rocketStorage.subUint(_key, _amount); } }
/** * . * / \ * |.'.| * |'.'| * ,'| |`. * |,-'-|-'-.| * __|_| | _ _ _____ _ * | ___ \| | | | | | ___ \ | | * | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | | * | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| | * | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | | * \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_| * +---------------------------------------------------+ * | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM 2.0 | * +---------------------------------------------------+ * * Rocket Pool is a first-of-its-kind ETH2 Proof of Stake protocol, designed to be community owned, * decentralised, trustless and compatible with staking in Ethereum 2.0. * * For more information about Rocket Pool, visit https://rocketpool.net * * Authors: David Rugendyke, Jake Pospischil, Kane Wallmann, Darren Langley, Joe Clapis, Nick Doherty * */ pragma solidity >0.5.0 <0.9.0; // SPDX-License-Identifier: GPL-3.0-only interface RocketDAONodeTrustedInterface { function getBootstrapModeDisabled() external view returns (bool); function getMemberQuorumVotesRequired() external view returns (uint256); function getMemberAt(uint256 _index) external view returns (address); function getMemberCount() external view returns (uint256); function getMemberMinRequired() external view returns (uint256); function getMemberIsValid(address _nodeAddress) external view returns (bool); function getMemberLastProposalTime(address _nodeAddress) external view returns (uint256); function getMemberID(address _nodeAddress) external view returns (string memory); function getMemberUrl(address _nodeAddress) external view returns (string memory); function getMemberJoinedTime(address _nodeAddress) external view returns (uint256); function getMemberProposalExecutedTime(string memory _proposalType, address _nodeAddress) external view returns (uint256); function getMemberRPLBondAmount(address _nodeAddress) external view returns (uint256); function getMemberIsChallenged(address _nodeAddress) external view returns (bool); function getMemberUnbondedValidatorCount(address _nodeAddress) external view returns (uint256); function incrementMemberUnbondedValidatorCount(address _nodeAddress) external; function decrementMemberUnbondedValidatorCount(address _nodeAddress) external; function bootstrapMember(string memory _id, string memory _url, address _nodeAddress) external; function bootstrapSettingUint(string memory _settingContractName, string memory _settingPath, uint256 _value) external; function bootstrapSettingBool(string memory _settingContractName, string memory _settingPath, bool _value) external; function bootstrapUpgrade(string memory _type, string memory _name, string memory _contractAbi, address _contractAddress) external; function bootstrapDisable(bool _confirmDisableBootstrapMode) external; function memberJoinRequired(string memory _id, string memory _url) external; }
/** * . * / \ * |.'.| * |'.'| * ,'| |`. * |,-'-|-'-.| * __|_| | _ _ _____ _ * | ___ \| | | | | | ___ \ | | * | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | | * | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| | * | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | | * \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_| * +---------------------------------------------------+ * | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM 2.0 | * +---------------------------------------------------+ * * Rocket Pool is a first-of-its-kind ETH2 Proof of Stake protocol, designed to be community owned, * decentralised, trustless and compatible with staking in Ethereum 2.0. * * For more information about Rocket Pool, visit https://rocketpool.net * * Authors: David Rugendyke, Jake Pospischil, Kane Wallmann, Darren Langley, Joe Clapis, Nick Doherty * */ pragma solidity >0.5.0 <0.9.0; // SPDX-License-Identifier: GPL-3.0-only interface RocketDAONodeTrustedProposalsInterface { function propose(string memory _proposalMessage, bytes memory _payload) external returns (uint256); function vote(uint256 _proposalID, bool _support) external; function cancel(uint256 _proposalID) external; function execute(uint256 _proposalID) external; function proposalInvite(string memory _id, string memory _url, address _nodeAddress) external; function proposalLeave(address _nodeAddress) external; function proposalKick(address _nodeAddress, uint256 _rplFine) external; function proposalSettingUint(string memory _settingContractName, string memory _settingPath, uint256 _value) external; function proposalSettingBool(string memory _settingContractName, string memory _settingPath, bool _value) external; function proposalUpgrade(string memory _type, string memory _name, string memory _contractAbi, address _contractAddress) external; }
/** * . * / \ * |.'.| * |'.'| * ,'| |`. * |,-'-|-'-.| * __|_| | _ _ _____ _ * | ___ \| | | | | | ___ \ | | * | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | | * | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| | * | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | | * \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_| * +---------------------------------------------------+ * | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM 2.0 | * +---------------------------------------------------+ * * Rocket Pool is a first-of-its-kind ETH2 Proof of Stake protocol, designed to be community owned, * decentralised, trustless and compatible with staking in Ethereum 2.0. * * For more information about Rocket Pool, visit https://rocketpool.net * * Authors: David Rugendyke, Jake Pospischil, Kane Wallmann, Darren Langley, Joe Clapis, Nick Doherty * */ pragma solidity >0.5.0 <0.9.0; // SPDX-License-Identifier: GPL-3.0-only interface RocketDAONodeTrustedActionsInterface { function actionJoin() external; function actionJoinRequired(address _nodeAddress) external; function actionLeave(address _rplBondRefundAddress) external; function actionKick(address _nodeAddress, uint256 _rplFine) external; function actionChallengeMake(address _nodeAddress) external payable; function actionChallengeDecide(address _nodeAddress) external; }
/** * . * / \ * |.'.| * |'.'| * ,'| |`. * |,-'-|-'-.| * __|_| | _ _ _____ _ * | ___ \| | | | | | ___ \ | | * | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | | * | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| | * | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | | * \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_| * +---------------------------------------------------+ * | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM 2.0 | * +---------------------------------------------------+ * * Rocket Pool is a first-of-its-kind ETH2 Proof of Stake protocol, designed to be community owned, * decentralised, trustless and compatible with staking in Ethereum 2.0. * * For more information about Rocket Pool, visit https://rocketpool.net * * Authors: David Rugendyke, Jake Pospischil, Kane Wallmann, Darren Langley, Joe Clapis, Nick Doherty * */ pragma solidity >0.5.0 <0.9.0; // SPDX-License-Identifier: GPL-3.0-only interface RocketDAONodeTrustedUpgradeInterface { function upgrade(string memory _type, string memory _name, string memory _contractAbi, address _contractAddress) external; }
/** * . * / \ * |.'.| * |'.'| * ,'| |`. * |,-'-|-'-.| * __|_| | _ _ _____ _ * | ___ \| | | | | | ___ \ | | * | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | | * | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| | * | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | | * \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_| * +---------------------------------------------------+ * | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM 2.0 | * +---------------------------------------------------+ * * Rocket Pool is a first-of-its-kind ETH2 Proof of Stake protocol, designed to be community owned, * decentralised, trustless and compatible with staking in Ethereum 2.0. * * For more information about Rocket Pool, visit https://rocketpool.net * * Authors: David Rugendyke, Jake Pospischil, Kane Wallmann, Darren Langley, Joe Clapis, Nick Doherty * */ pragma solidity >0.5.0 <0.9.0; // SPDX-License-Identifier: GPL-3.0-only interface RocketDAONodeTrustedSettingsInterface { function getSettingUint(string memory _settingPath) external view returns (uint256); function setSettingUint(string memory _settingPath, uint256 _value) external; function getSettingBool(string memory _settingPath) external view returns (bool); function setSettingBool(string memory _settingPath, bool _value) external; }
/** * . * / \ * |.'.| * |'.'| * ,'| |`. * |,-'-|-'-.| * __|_| | _ _ _____ _ * | ___ \| | | | | | ___ \ | | * | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | | * | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| | * | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | | * \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_| * +---------------------------------------------------+ * | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM 2.0 | * +---------------------------------------------------+ * * Rocket Pool is a first-of-its-kind ETH2 Proof of Stake protocol, designed to be community owned, * decentralised, trustless and compatible with staking in Ethereum 2.0. * * For more information about Rocket Pool, visit https://rocketpool.net * * Authors: David Rugendyke, Jake Pospischil, Kane Wallmann, Darren Langley, Joe Clapis, Nick Doherty * */ pragma solidity >0.5.0 <0.9.0; // SPDX-License-Identifier: GPL-3.0-only interface RocketDAONodeTrustedSettingsProposalsInterface { function getCooldownTime() external view returns(uint256); function getVoteTime() external view returns(uint256); function getVoteDelayTime() external view returns(uint256); function getExecuteTime() external view returns(uint256); function getActionTime() external view returns(uint256); }
/** * . * / \ * |.'.| * |'.'| * ,'| |`. * |,-'-|-'-.| * __|_| | _ _ _____ _ * | ___ \| | | | | | ___ \ | | * | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | | * | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| | * | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | | * \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_| * +---------------------------------------------------+ * | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM 2.0 | * +---------------------------------------------------+ * * Rocket Pool is a first-of-its-kind ETH2 Proof of Stake protocol, designed to be community owned, * decentralised, trustless and compatible with staking in Ethereum 2.0. * * For more information about Rocket Pool, visit https://rocketpool.net * * Authors: David Rugendyke, Jake Pospischil, Kane Wallmann, Darren Langley, Joe Clapis, Nick Doherty * */ pragma solidity >0.5.0 <0.9.0; // SPDX-License-Identifier: GPL-3.0-only interface RocketDAOProposalInterface { // Possible states that a proposal may be in enum ProposalState { Pending, Active, Cancelled, Defeated, Succeeded, Expired, Executed } function getTotal() external view returns (uint256); function getDAO(uint256 _proposalID) external view returns (string memory); function getProposer(uint256 _proposalID) external view returns (address); function getMessage(uint256 _proposalID) external view returns (string memory); function getStart(uint256 _proposalID) external view returns (uint256); function getEnd(uint256 _proposalID) external view returns (uint256); function getExpires(uint256 _proposalID) external view returns (uint256); function getCreated(uint256 _proposalID) external view returns (uint256); function getVotesFor(uint256 _proposalID) external view returns (uint256); function getVotesAgainst(uint256 _proposalID) external view returns (uint256); function getVotesRequired(uint256 _proposalID) external view returns (uint256); function getCancelled(uint256 _proposalID) external view returns (bool); function getExecuted(uint256 _proposalID) external view returns (bool); function getPayload(uint256 _proposalID) external view returns (bytes memory); function getReceiptHasVoted(uint256 _proposalID, address _nodeAddress) external view returns (bool); function getReceiptSupported(uint256 _proposalID, address _nodeAddress) external view returns (bool); function getState(uint256 _proposalID) external view returns (ProposalState); function add(address _member, string memory _dao, string memory _message, uint256 _startBlock, uint256 _durationBlocks, uint256 _expiresBlocks, uint256 _votesRequired, bytes memory _payload) external returns (uint256); function vote(address _member, uint256 _votes, uint256 _proposalID, bool _support) external; function cancel(address _member, uint256 _proposalID) external; function execute(uint256 _proposalID) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { 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) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { 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, reverting 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) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * 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); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } }
{ "optimizer": { "enabled": true, "runs": 15000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
[{"inputs":[{"internalType":"contract RocketStorageInterface","name":"_rocketStorageAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"_proposalID","type":"uint256"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalID","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"},{"internalType":"string","name":"_url","type":"string"},{"internalType":"address","name":"_nodeAddress","type":"address"}],"name":"proposalInvite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nodeAddress","type":"address"},{"internalType":"uint256","name":"_rplFine","type":"uint256"}],"name":"proposalKick","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nodeAddress","type":"address"}],"name":"proposalLeave","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_settingContractName","type":"string"},{"internalType":"string","name":"_settingPath","type":"string"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"proposalSettingBool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_settingContractName","type":"string"},{"internalType":"string","name":"_settingPath","type":"string"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"proposalSettingUint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_type","type":"string"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_contractAbi","type":"string"},{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"proposalUpgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_proposalMessage","type":"string"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalID","type":"uint256"},{"internalType":"bool","name":"_support","type":"bool"}],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260008054610100600160a81b031916905534801561002157600080fd5b50604051613a75380380613a758339818101604052602081101561004457600080fd5b50516000805460ff196001600160a01b0390931661010002610100600160a81b0319909116179190911660011790556139f3806100826000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063c9d27afe11610081578063ed1cd9f71161005b578063ed1cd9f7146105b8578063fe0d94c1146106e7578063fe993dc914610704576100c9565b8063c9d27afe14610295578063d02b8976146102ba578063dfc970ef146103f9576100c9565b80636297e3ad116100b25780636297e3ad1461010b5780638f14a32414610131578063c2cdcc1d14610269576100c9565b806340e58ee5146100ce57806354fd4d50146100ed575b600080fd5b6100eb600480360360208110156100e457600080fd5b5035610833565b005b6100f5610af5565b6040805160ff9092168252519081900360200190f35b6100eb6004803603602081101561012157600080fd5b50356001600160a01b0316610afe565b6100eb6004803603606081101561014757600080fd5b81019060208101813564010000000081111561016257600080fd5b82018360208201111561017457600080fd5b8035906020019184600183028401116401000000008311171561019657600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156101e957600080fd5b8201836020820111156101fb57600080fd5b8035906020019184600183028401116401000000008311171561021d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b03169150610f3e9050565b6100eb6004803603604081101561027f57600080fd5b506001600160a01b0381351690602001356111fa565b6100eb600480360360408110156102ab57600080fd5b5080359060200135151561166e565b6103e7600480360360408110156102d057600080fd5b8101906020810181356401000000008111156102eb57600080fd5b8201836020820111156102fd57600080fd5b8035906020019184600183028401116401000000008311171561031f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561037257600080fd5b82018360208201111561038457600080fd5b803590602001918460018302840111640100000000831117156103a657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611a90945050505050565b60408051918252519081900360200190f35b6100eb6004803603608081101561040f57600080fd5b81019060208101813564010000000081111561042a57600080fd5b82018360208201111561043c57600080fd5b8035906020019184600183028401116401000000008311171561045e57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156104b157600080fd5b8201836020820111156104c357600080fd5b803590602001918460018302840111640100000000831117156104e557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561053857600080fd5b82018360208201111561054a57600080fd5b8035906020019184600183028401116401000000008311171561056c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b031691506123e79050565b6100eb600480360360608110156105ce57600080fd5b8101906020810181356401000000008111156105e957600080fd5b8201836020820111156105fb57600080fd5b8035906020019184600183028401116401000000008311171561061d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561067057600080fd5b82018360208201111561068257600080fd5b803590602001918460018302840111640100000000831117156106a457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250612696915050565b6100eb600480360360208110156106fd57600080fd5b5035612871565b6100eb6004803603606081101561071a57600080fd5b81019060208101813564010000000081111561073557600080fd5b82018360208201111561074757600080fd5b8035906020019184600183028401116401000000008311171561076957600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156107bc57600080fd5b8201836020820111156107ce57600080fd5b803590602001918460018302840111640100000000831117156107f057600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050505035151590506129f2565b604080517f64616f2e747275737465646e6f6465732e0000000000000000000000000000006020808301919091527f6d656d6265720000000000000000000000000000000000000000000000000000603183015233606081901b60378401528351602b818503018152604b90930190935281519101206108b290612b60565b610903576040805162461bcd60e51b815260206004820152601460248201527f496e76616c69642074727573746564206e6f6465000000000000000000000000604482015290519081900360640190fd5b6040518060400160405280601d81526020017f726f636b657444414f4e6f64655472757374656450726f706f73616c73000000815250306109d88260405160200180807f636f6e74726163742e616464726573730000000000000000000000000000000081525060100182805190602001908083835b602083106109985780518252601f199092019160209182019101610979565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120612bec565b6001600160a01b0316816001600160a01b031614610a3d576040805162461bcd60e51b815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015290519081900360640190fd5b6000610a7d6040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b9050806001600160a01b03166398590ef933876040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610ad657600080fd5b505af1158015610aea573d6000803e3d6000fd5b505050505050505050565b60005460ff1681565b610b3c6040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b03161480610ba95750610b946040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b0316145b610be45760405162461bcd60e51b81526004018080602001828103825260338152602001806138316033913960400191505060405180910390fd5b80610c708160405160200180807f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250601101807f6d656d6265720000000000000000000000000000000000000000000000000000815250600601826001600160a01b031660601b815260140191505060405160208183030381529060405280519060200120612b60565b610cc1576040805162461bcd60e51b815260206004820152601460248201527f496e76616c69642074727573746564206e6f6465000000000000000000000000604482015290519081900360640190fd5b6000610d016040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b9050806001600160a01b031663c1eb7b2a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3c57600080fd5b505afa158015610d50573d6000803e3d6000fd5b505050506040513d6020811015610d6657600080fd5b5051604080517f997072f700000000000000000000000000000000000000000000000000000000815290516001600160a01b0384169163997072f7916004808301926020929190829003018186803b158015610dc157600080fd5b505afa158015610dd5573d6000803e3d6000fd5b505050506040513d6020811015610deb57600080fd5b505111610e295760405162461bcd60e51b815260040180806020018281038252602981526020018061395d6029913960400191505060405180910390fd5b610f396040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250846040516020018083805190602001908083835b60208310610e955780518252601f199092019160209182019101610e76565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265722e65786563757465642e74696d65000000000000000000000000815250601401807f6c65617665000000000000000000000000000000000000000000000000000000815250600501826001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012042612d09565b505050565b610f7c6040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b03161480610fe95750610fd46040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b0316145b6110245760405162461bcd60e51b81526004018080602001828103825260338152602001806138316033913960400191505060405180910390fd5b806110888160405160200180807f6e6f64652e657869737473000000000000000000000000000000000000000000815250600b01826001600160a01b031660601b815260140191505060405160208183030381529060405280519060200120612b60565b6110d9576040805162461bcd60e51b815260206004820152600c60248201527f496e76616c6964206e6f64650000000000000000000000000000000000000000604482015290519081900360640190fd5b6111e96040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250836040516020018083805190602001908083835b602083106111455780518252601f199092019160209182019101611126565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265722e65786563757465642e74696d65000000000000000000000000815250601401807f696e766974656400000000000000000000000000000000000000000000000000815250600701826001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012042612d09565b6111f4848484612d91565b50505050565b6112386040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b031614806112a557506112906040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b0316145b6112e05760405162461bcd60e51b81526004018080602001828103825260338152602001806138316033913960400191505060405180910390fd5b8161136c8160405160200180807f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250601101807f6d656d6265720000000000000000000000000000000000000000000000000000815250600601826001600160a01b031660601b815260140191505060405160208183030381529060405280519060200120612b60565b6113bd576040805162461bcd60e51b815260206004820152601460248201527f496e76616c69642074727573746564206e6f6465000000000000000000000000604482015290519081900360640190fd5b60006113fd6040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b9050600061143f6040518060400160405280601b81526020017f726f636b657444414f4e6f646554727573746564416374696f6e730000000000815250612c46565b90506000826001600160a01b03166303c86bbd876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561149057600080fd5b505afa1580156114a4573d6000803e3d6000fd5b505050506040513d60208110156114ba57600080fd5b50519050808511156114fd5760405162461bcd60e51b815260040180806020018281038252604f81526020018061389d604f913960600191505060405180910390fd5b6115f76040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250876040516020018083805190602001908083835b602083106115695780518252601f19909201916020918201910161154a565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265722e626f6e642e72706c0000000000000000000000000000000000815250600f01826001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001206115f2878461353990919063ffffffff16565b612d09565b816001600160a01b03166335dfabd987876040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561164e57600080fd5b505af1158015611662573d6000803e3d6000fd5b50505050505050505050565b604080517f64616f2e747275737465646e6f6465732e0000000000000000000000000000006020808301919091527f6d656d6265720000000000000000000000000000000000000000000000000000603183015233606081901b60378401528351602b818503018152604b90930190935281519101206116ed90612b60565b61173e576040805162461bcd60e51b815260206004820152601460248201527f496e76616c69642074727573746564206e6f6465000000000000000000000000604482015290519081900360640190fd5b6040518060400160405280601d81526020017f726f636b657444414f4e6f64655472757374656450726f706f73616c73000000815250306117d28260405160200180807f636f6e74726163742e61646472657373000000000000000000000000000000008152506010018280519060200190808383602083106109985780518252601f199092019160209182019101610979565b6001600160a01b0316816001600160a01b031614611837576040805162461bcd60e51b815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015290519081900360640190fd5b60006118776040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b905060006118b96040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b9050816001600160a01b0316639cb2b69b886040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156118ff57600080fd5b505afa158015611913573d6000803e3d6000fd5b505050506040513d602081101561192957600080fd5b5051604080517f5987956e00000000000000000000000000000000000000000000000000000000815233600482015290516001600160a01b03841691635987956e916024808301926020929190829003018186803b15801561198a57600080fd5b505afa15801561199e573d6000803e3d6000fd5b505050506040513d60208110156119b457600080fd5b5051106119f25760405162461bcd60e51b81526004018080602001828103825260428152602001806137996042913960600191505060405180910390fd5b604080517f1d318f1b000000000000000000000000000000000000000000000000000000008152336004820152670de0b6b3a7640000602482015260448101899052871515606482015290516001600160a01b03841691631d318f1b91608480830192600092919082900301818387803b158015611a6f57600080fd5b505af1158015611a83573d6000803e3d6000fd5b5050505050505050505050565b604080517f64616f2e747275737465646e6f6465732e0000000000000000000000000000006020808301919091527f6d656d6265720000000000000000000000000000000000000000000000000000603183015233606081901b60378401528351602b818503018152604b909301909352815191012060009190611b1390612b60565b611b64576040805162461bcd60e51b815260206004820152601460248201527f496e76616c69642074727573746564206e6f6465000000000000000000000000604482015290519081900360640190fd5b6040518060400160405280601d81526020017f726f636b657444414f4e6f64655472757374656450726f706f73616c7300000081525030611bf88260405160200180807f636f6e74726163742e61646472657373000000000000000000000000000000008152506010018280519060200190808383602083106109985780518252601f199092019160209182019101610979565b6001600160a01b0316816001600160a01b031614611c5d576040805162461bcd60e51b815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015290519081900360640190fd5b6000611c9d6040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b90506000611cdf6040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b90506000611d0460405180606001604052806025815260200161380c60259139612c46565b905042611e00826001600160a01b0316638f2a02b46040518163ffffffff1660e01b815260040160206040518083038186803b158015611d4357600080fd5b505afa158015611d57573d6000803e3d6000fd5b505050506040513d6020811015611d6d57600080fd5b5051604080517f5155309500000000000000000000000000000000000000000000000000000000815233600482015290516001600160a01b038716916351553095916024808301926020929190829003018186803b158015611dce57600080fd5b505afa158015611de2573d6000803e3d6000fd5b505050506040513d6020811015611df857600080fd5b505190613596565b1115611e3d5760405162461bcd60e51b815260040180806020018281038252603a815260200180613923603a913960400191505060405180910390fd5b816001600160a01b031663c1eb7b2a6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e7657600080fd5b505afa158015611e8a573d6000803e3d6000fd5b505050506040513d6020811015611ea057600080fd5b5051604080517f997072f700000000000000000000000000000000000000000000000000000000815290516001600160a01b0385169163997072f7916004808301926020929190829003018186803b158015611efb57600080fd5b505afa158015611f0f573d6000803e3d6000fd5b505050506040513d6020811015611f2557600080fd5b50511015611f645760405162461bcd60e51b81526004018080602001828103825260378152602001806138ec6037913960400191505060405180910390fd5b61204c6040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250336040516020018083805190602001908083835b60208310611fd05780518252601f199092019160209182019101611fb1565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265722e70726f706f73616c2e6c61737474696d650000000000000000815250601801826001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012042612d09565b826001600160a01b031663c6d95cc8338b6120cc856001600160a01b03166310f664246040518163ffffffff1660e01b815260040160206040518083038186803b15801561209957600080fd5b505afa1580156120ad573d6000803e3d6000fd5b505050506040513d60208110156120c357600080fd5b50514290613596565b856001600160a01b031663a8301dbc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561210557600080fd5b505afa158015612119573d6000803e3d6000fd5b505050506040513d602081101561212f57600080fd5b5051604080517f0a092a4e00000000000000000000000000000000000000000000000000000000815290516001600160a01b03891691630a092a4e916004808301926020929190829003018186803b15801561218a57600080fd5b505afa15801561219e573d6000803e3d6000fd5b505050506040513d60208110156121b457600080fd5b5051604080517f43906fea00000000000000000000000000000000000000000000000000000000815290516001600160a01b038b16916343906fea916004808301926020929190829003018186803b15801561220f57600080fd5b505afa158015612223573d6000803e3d6000fd5b505050506040513d602081101561223957600080fd5b81019080805190602001909291905050508f6040518863ffffffff1660e01b815260040180886001600160a01b031681526020018060200180602001888152602001878152602001868152602001858152602001806020018481038452601d8152602001807f726f636b657444414f4e6f64655472757374656450726f706f73616c7300000081525060200184810383528a818151815260200191508051906020019080838360005b838110156122fa5781810151838201526020016122e2565b50505050905090810190601f1680156123275780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b8381101561235a578181015183820152602001612342565b50505050905090810190601f1680156123875780820380516001836020036101000a031916815260200191505b509a5050505050505050505050602060405180830381600087803b1580156123ae57600080fd5b505af11580156123c2573d6000803e3d6000fd5b505050506040513d60208110156123d857600080fd5b50519998505050505050505050565b6124256040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b03161480612492575061247d6040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b0316145b6124cd5760405162461bcd60e51b81526004018080602001828103825260338152602001806138316033913960400191505060405180910390fd5b600061250d6040518060400160405280601b81526020017f726f636b657444414f4e6f646554727573746564557067726164650000000000815250612c46565b9050806001600160a01b031663accd7d45868686866040518563ffffffff1660e01b815260040180806020018060200180602001856001600160a01b03168152602001848103845288818151815260200191508051906020019080838360005b8381101561258557818101518382015260200161256d565b50505050905090810190601f1680156125b25780820380516001836020036101000a031916815260200191505b50848103835287518152875160209182019189019080838360005b838110156125e55781810151838201526020016125cd565b50505050905090810190601f1680156126125780820380516001836020036101000a031916815260200191505b50848103825286518152865160209182019188019080838360005b8381101561264557818101518382015260200161262d565b50505050905090810190601f1680156126725780820380516001836020036101000a031916815260200191505b50975050505050505050600060405180830381600087803b158015610ad657600080fd5b6126d46040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b03161480612741575061272c6040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b0316145b61277c5760405162461bcd60e51b81526004018080602001828103825260338152602001806138316033913960400191505060405180910390fd5b600061278784612c46565b604080517f5e9d404400000000000000000000000000000000000000000000000000000000815260248101859052600481019182528551604482015285519293506001600160a01b03841692635e9d40449287928792829160640190602086019080838360005b838110156128065781810151838201526020016127ee565b50505050905090810190601f1680156128335780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561285357600080fd5b505af1158015612867573d6000803e3d6000fd5b5050505050505050565b6040518060400160405280601d81526020017f726f636b657444414f4e6f64655472757374656450726f706f73616c73000000815250306129058260405160200180807f636f6e74726163742e61646472657373000000000000000000000000000000008152506010018280519060200190808383602083106109985780518252601f199092019160209182019101610979565b6001600160a01b0316816001600160a01b03161461296a576040805162461bcd60e51b815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015290519081900360640190fd5b60006129aa6040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b9050806001600160a01b031663fe0d94c1856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561285357600080fd5b612a306040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b03161480612a9d5750612a886040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b0316145b612ad85760405162461bcd60e51b81526004018080602001828103825260338152602001806138316033913960400191505060405180910390fd5b6000612ae384612c46565b604080517f2a57d0180000000000000000000000000000000000000000000000000000000081528415156024820152600481019182528551604482015285519293506001600160a01b03841692632a57d01892879287928291606401906020860190808383600083156128065781810151838201526020016127ee565b60008060019054906101000a90046001600160a01b03166001600160a01b0316637ae1cfca836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612bba57600080fd5b505afa158015612bce573d6000803e3d6000fd5b505050506040513d6020811015612be457600080fd5b505192915050565b60008060019054906101000a90046001600160a01b03166001600160a01b03166321f8a721836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612bba57600080fd5b600080612ca68360405160200180807f636f6e74726163742e61646472657373000000000000000000000000000000008152506010018280519060200190808383602083106109985780518252601f199092019160209182019101610979565b90506001600160a01b038116612d03576040805162461bcd60e51b815260206004820152601260248201527f436f6e7472616374206e6f7420666f756e640000000000000000000000000000604482015290519081900360640190fd5b92915050565b60008054604080517fe2a4853a000000000000000000000000000000000000000000000000000000008152600481018690526024810185905290516101009092046001600160a01b03169263e2a4853a9260448084019382900301818387803b158015612d7557600080fd5b505af1158015612d89573d6000803e3d6000fd5b505050505050565b80612df58160405160200180807f6e6f64652e657869737473000000000000000000000000000000000000000000815250600b01826001600160a01b031660601b815260140191505060405160208183030381529060405280519060200120612b60565b612e46576040805162461bcd60e51b815260206004820152600c60248201527f496e76616c6964206e6f64650000000000000000000000000000000000000000604482015290519081900360640190fd5b6000612e866040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b9050806001600160a01b0316635dc33bdd846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612ed557600080fd5b505afa158015612ee9573d6000803e3d6000fd5b505050506040513d6020811015612eff57600080fd5b505115612f3d5760405162461bcd60e51b81526004018080602001828103825260318152602001806137db6031913960400191505060405180910390fd5b600385511015612f7e5760405162461bcd60e51b81526004018080602001828103825260388152602001806139866038913960400191505060405180910390fd5b600684511015612fbf5760405162461bcd60e51b81526004018080602001828103825260398152602001806138646039913960400191505060405180910390fd5b6130a86040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250846040516020018083805190602001908083835b6020831061302b5780518252601f19909201916020918201910161300c565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265720000000000000000000000000000000000000000000000000000815250600601826001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012060006135f7565b6131906040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250846040516020018083805190602001908083835b602083106131145780518252601f1990920191602091820191016130f5565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265722e61646472657373000000000000000000000000000000000000815250600e01826001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012084613664565b6132786040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250846040516020018083805190602001908083835b602083106131fc5780518252601f1990920191602091820191016131dd565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265722e69640000000000000000000000000000000000000000000000815250600901826001600160a01b031660601b81526014019250505060405160208183030381529060405280519060200120866136d3565b6133606040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250846040516020018083805190602001908083835b602083106132e45780518252601f1990920191602091820191016132c5565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265722e75726c00000000000000000000000000000000000000000000815250600a01826001600160a01b031660601b81526014019250505060405160208183030381529060405280519060200120856136d3565b6134496040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250846040516020018083805190602001908083835b602083106133cc5780518252601f1990920191602091820191016133ad565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265722e626f6e642e72706c0000000000000000000000000000000000815250600f01826001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001206000612d09565b6135326040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250846040516020018083805190602001908083835b602083106134b55780518252601f199092019160209182019101613496565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265722e6a6f696e65642e74696d650000000000000000000000000000815250601201826001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001206000612d09565b5050505050565b600082821115613590576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000828201838110156135f0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008054604080517fabfdcced00000000000000000000000000000000000000000000000000000000815260048101869052841515602482015290516101009092046001600160a01b03169263abfdcced9260448084019382900301818387803b158015612d7557600080fd5b60008054604080517fca446dd9000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b03858116602483015291516101009093049091169263ca446dd99260448084019382900301818387803b158015612d7557600080fd5b600060019054906101000a90046001600160a01b03166001600160a01b0316636e89955083836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561374b578181015183820152602001613733565b50505050905090810190601f1680156137785780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015612d7557600080fdfe4d656d6265722063616e6e6f7420766f7465206f6e2070726f706f73616c2063726561746564206265666f7265207468657920626563616d652061206d656d62657254686973206e6f646520697320616c72656164792070617274206f66207468652074727573746564206e6f64652044414f726f636b657444414f4e6f64655472757374656453657474696e677350726f706f73616c7353656e646572206973206e6f74207065726d697474656420746f2061636365737320657865637574696e67206d6574686f64735468652055524c20666f722074686973206e6577206d656d626572206d757374206265206174206c656173742036206368617261637465727352504c2046696e65206d757374206265206c6f776572206f7220657175616c20746f207468652052504c20626f6e6420616d6f756e74206f6620746865206e6f6465206265696e67206b69636b65644d696e206d656d62657220636f756e74206e6f74206d657420746f20616c6c6f772070726f706f73616c7320746f2062652061646465644d656d62657220686173206e6f7420776169746564206c6f6e6720656e6f75676820746f206d616b6520616e6f746865722070726f706f73616c4d656d62657220636f756e742077696c6c2066616c6c2062656c6f77206d696e20726571756972656454686520494420666f722074686973206e6577206d656d626572206d757374206265206174206c6561737420332063686172616374657273a26469706673582212205f79c06214efcd23cf84d2a06362dc6265c5021f12ed3c7c2e51e21aece80d2d64736f6c63430007060033000000000000000000000000594fb75d3dc2dfa0150ad03f99f97817747dd4e1
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100c95760003560e01c8063c9d27afe11610081578063ed1cd9f71161005b578063ed1cd9f7146105b8578063fe0d94c1146106e7578063fe993dc914610704576100c9565b8063c9d27afe14610295578063d02b8976146102ba578063dfc970ef146103f9576100c9565b80636297e3ad116100b25780636297e3ad1461010b5780638f14a32414610131578063c2cdcc1d14610269576100c9565b806340e58ee5146100ce57806354fd4d50146100ed575b600080fd5b6100eb600480360360208110156100e457600080fd5b5035610833565b005b6100f5610af5565b6040805160ff9092168252519081900360200190f35b6100eb6004803603602081101561012157600080fd5b50356001600160a01b0316610afe565b6100eb6004803603606081101561014757600080fd5b81019060208101813564010000000081111561016257600080fd5b82018360208201111561017457600080fd5b8035906020019184600183028401116401000000008311171561019657600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156101e957600080fd5b8201836020820111156101fb57600080fd5b8035906020019184600183028401116401000000008311171561021d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b03169150610f3e9050565b6100eb6004803603604081101561027f57600080fd5b506001600160a01b0381351690602001356111fa565b6100eb600480360360408110156102ab57600080fd5b5080359060200135151561166e565b6103e7600480360360408110156102d057600080fd5b8101906020810181356401000000008111156102eb57600080fd5b8201836020820111156102fd57600080fd5b8035906020019184600183028401116401000000008311171561031f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561037257600080fd5b82018360208201111561038457600080fd5b803590602001918460018302840111640100000000831117156103a657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611a90945050505050565b60408051918252519081900360200190f35b6100eb6004803603608081101561040f57600080fd5b81019060208101813564010000000081111561042a57600080fd5b82018360208201111561043c57600080fd5b8035906020019184600183028401116401000000008311171561045e57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156104b157600080fd5b8201836020820111156104c357600080fd5b803590602001918460018302840111640100000000831117156104e557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561053857600080fd5b82018360208201111561054a57600080fd5b8035906020019184600183028401116401000000008311171561056c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b031691506123e79050565b6100eb600480360360608110156105ce57600080fd5b8101906020810181356401000000008111156105e957600080fd5b8201836020820111156105fb57600080fd5b8035906020019184600183028401116401000000008311171561061d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561067057600080fd5b82018360208201111561068257600080fd5b803590602001918460018302840111640100000000831117156106a457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250612696915050565b6100eb600480360360208110156106fd57600080fd5b5035612871565b6100eb6004803603606081101561071a57600080fd5b81019060208101813564010000000081111561073557600080fd5b82018360208201111561074757600080fd5b8035906020019184600183028401116401000000008311171561076957600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156107bc57600080fd5b8201836020820111156107ce57600080fd5b803590602001918460018302840111640100000000831117156107f057600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050505035151590506129f2565b604080517f64616f2e747275737465646e6f6465732e0000000000000000000000000000006020808301919091527f6d656d6265720000000000000000000000000000000000000000000000000000603183015233606081901b60378401528351602b818503018152604b90930190935281519101206108b290612b60565b610903576040805162461bcd60e51b815260206004820152601460248201527f496e76616c69642074727573746564206e6f6465000000000000000000000000604482015290519081900360640190fd5b6040518060400160405280601d81526020017f726f636b657444414f4e6f64655472757374656450726f706f73616c73000000815250306109d88260405160200180807f636f6e74726163742e616464726573730000000000000000000000000000000081525060100182805190602001908083835b602083106109985780518252601f199092019160209182019101610979565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120612bec565b6001600160a01b0316816001600160a01b031614610a3d576040805162461bcd60e51b815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015290519081900360640190fd5b6000610a7d6040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b9050806001600160a01b03166398590ef933876040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610ad657600080fd5b505af1158015610aea573d6000803e3d6000fd5b505050505050505050565b60005460ff1681565b610b3c6040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b03161480610ba95750610b946040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b0316145b610be45760405162461bcd60e51b81526004018080602001828103825260338152602001806138316033913960400191505060405180910390fd5b80610c708160405160200180807f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250601101807f6d656d6265720000000000000000000000000000000000000000000000000000815250600601826001600160a01b031660601b815260140191505060405160208183030381529060405280519060200120612b60565b610cc1576040805162461bcd60e51b815260206004820152601460248201527f496e76616c69642074727573746564206e6f6465000000000000000000000000604482015290519081900360640190fd5b6000610d016040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b9050806001600160a01b031663c1eb7b2a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3c57600080fd5b505afa158015610d50573d6000803e3d6000fd5b505050506040513d6020811015610d6657600080fd5b5051604080517f997072f700000000000000000000000000000000000000000000000000000000815290516001600160a01b0384169163997072f7916004808301926020929190829003018186803b158015610dc157600080fd5b505afa158015610dd5573d6000803e3d6000fd5b505050506040513d6020811015610deb57600080fd5b505111610e295760405162461bcd60e51b815260040180806020018281038252602981526020018061395d6029913960400191505060405180910390fd5b610f396040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250846040516020018083805190602001908083835b60208310610e955780518252601f199092019160209182019101610e76565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265722e65786563757465642e74696d65000000000000000000000000815250601401807f6c65617665000000000000000000000000000000000000000000000000000000815250600501826001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012042612d09565b505050565b610f7c6040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b03161480610fe95750610fd46040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b0316145b6110245760405162461bcd60e51b81526004018080602001828103825260338152602001806138316033913960400191505060405180910390fd5b806110888160405160200180807f6e6f64652e657869737473000000000000000000000000000000000000000000815250600b01826001600160a01b031660601b815260140191505060405160208183030381529060405280519060200120612b60565b6110d9576040805162461bcd60e51b815260206004820152600c60248201527f496e76616c6964206e6f64650000000000000000000000000000000000000000604482015290519081900360640190fd5b6111e96040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250836040516020018083805190602001908083835b602083106111455780518252601f199092019160209182019101611126565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265722e65786563757465642e74696d65000000000000000000000000815250601401807f696e766974656400000000000000000000000000000000000000000000000000815250600701826001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012042612d09565b6111f4848484612d91565b50505050565b6112386040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b031614806112a557506112906040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b0316145b6112e05760405162461bcd60e51b81526004018080602001828103825260338152602001806138316033913960400191505060405180910390fd5b8161136c8160405160200180807f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250601101807f6d656d6265720000000000000000000000000000000000000000000000000000815250600601826001600160a01b031660601b815260140191505060405160208183030381529060405280519060200120612b60565b6113bd576040805162461bcd60e51b815260206004820152601460248201527f496e76616c69642074727573746564206e6f6465000000000000000000000000604482015290519081900360640190fd5b60006113fd6040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b9050600061143f6040518060400160405280601b81526020017f726f636b657444414f4e6f646554727573746564416374696f6e730000000000815250612c46565b90506000826001600160a01b03166303c86bbd876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561149057600080fd5b505afa1580156114a4573d6000803e3d6000fd5b505050506040513d60208110156114ba57600080fd5b50519050808511156114fd5760405162461bcd60e51b815260040180806020018281038252604f81526020018061389d604f913960600191505060405180910390fd5b6115f76040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250876040516020018083805190602001908083835b602083106115695780518252601f19909201916020918201910161154a565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265722e626f6e642e72706c0000000000000000000000000000000000815250600f01826001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001206115f2878461353990919063ffffffff16565b612d09565b816001600160a01b03166335dfabd987876040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561164e57600080fd5b505af1158015611662573d6000803e3d6000fd5b50505050505050505050565b604080517f64616f2e747275737465646e6f6465732e0000000000000000000000000000006020808301919091527f6d656d6265720000000000000000000000000000000000000000000000000000603183015233606081901b60378401528351602b818503018152604b90930190935281519101206116ed90612b60565b61173e576040805162461bcd60e51b815260206004820152601460248201527f496e76616c69642074727573746564206e6f6465000000000000000000000000604482015290519081900360640190fd5b6040518060400160405280601d81526020017f726f636b657444414f4e6f64655472757374656450726f706f73616c73000000815250306117d28260405160200180807f636f6e74726163742e61646472657373000000000000000000000000000000008152506010018280519060200190808383602083106109985780518252601f199092019160209182019101610979565b6001600160a01b0316816001600160a01b031614611837576040805162461bcd60e51b815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015290519081900360640190fd5b60006118776040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b905060006118b96040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b9050816001600160a01b0316639cb2b69b886040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156118ff57600080fd5b505afa158015611913573d6000803e3d6000fd5b505050506040513d602081101561192957600080fd5b5051604080517f5987956e00000000000000000000000000000000000000000000000000000000815233600482015290516001600160a01b03841691635987956e916024808301926020929190829003018186803b15801561198a57600080fd5b505afa15801561199e573d6000803e3d6000fd5b505050506040513d60208110156119b457600080fd5b5051106119f25760405162461bcd60e51b81526004018080602001828103825260428152602001806137996042913960600191505060405180910390fd5b604080517f1d318f1b000000000000000000000000000000000000000000000000000000008152336004820152670de0b6b3a7640000602482015260448101899052871515606482015290516001600160a01b03841691631d318f1b91608480830192600092919082900301818387803b158015611a6f57600080fd5b505af1158015611a83573d6000803e3d6000fd5b5050505050505050505050565b604080517f64616f2e747275737465646e6f6465732e0000000000000000000000000000006020808301919091527f6d656d6265720000000000000000000000000000000000000000000000000000603183015233606081901b60378401528351602b818503018152604b909301909352815191012060009190611b1390612b60565b611b64576040805162461bcd60e51b815260206004820152601460248201527f496e76616c69642074727573746564206e6f6465000000000000000000000000604482015290519081900360640190fd5b6040518060400160405280601d81526020017f726f636b657444414f4e6f64655472757374656450726f706f73616c7300000081525030611bf88260405160200180807f636f6e74726163742e61646472657373000000000000000000000000000000008152506010018280519060200190808383602083106109985780518252601f199092019160209182019101610979565b6001600160a01b0316816001600160a01b031614611c5d576040805162461bcd60e51b815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015290519081900360640190fd5b6000611c9d6040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b90506000611cdf6040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b90506000611d0460405180606001604052806025815260200161380c60259139612c46565b905042611e00826001600160a01b0316638f2a02b46040518163ffffffff1660e01b815260040160206040518083038186803b158015611d4357600080fd5b505afa158015611d57573d6000803e3d6000fd5b505050506040513d6020811015611d6d57600080fd5b5051604080517f5155309500000000000000000000000000000000000000000000000000000000815233600482015290516001600160a01b038716916351553095916024808301926020929190829003018186803b158015611dce57600080fd5b505afa158015611de2573d6000803e3d6000fd5b505050506040513d6020811015611df857600080fd5b505190613596565b1115611e3d5760405162461bcd60e51b815260040180806020018281038252603a815260200180613923603a913960400191505060405180910390fd5b816001600160a01b031663c1eb7b2a6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e7657600080fd5b505afa158015611e8a573d6000803e3d6000fd5b505050506040513d6020811015611ea057600080fd5b5051604080517f997072f700000000000000000000000000000000000000000000000000000000815290516001600160a01b0385169163997072f7916004808301926020929190829003018186803b158015611efb57600080fd5b505afa158015611f0f573d6000803e3d6000fd5b505050506040513d6020811015611f2557600080fd5b50511015611f645760405162461bcd60e51b81526004018080602001828103825260378152602001806138ec6037913960400191505060405180910390fd5b61204c6040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250336040516020018083805190602001908083835b60208310611fd05780518252601f199092019160209182019101611fb1565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265722e70726f706f73616c2e6c61737474696d650000000000000000815250601801826001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012042612d09565b826001600160a01b031663c6d95cc8338b6120cc856001600160a01b03166310f664246040518163ffffffff1660e01b815260040160206040518083038186803b15801561209957600080fd5b505afa1580156120ad573d6000803e3d6000fd5b505050506040513d60208110156120c357600080fd5b50514290613596565b856001600160a01b031663a8301dbc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561210557600080fd5b505afa158015612119573d6000803e3d6000fd5b505050506040513d602081101561212f57600080fd5b5051604080517f0a092a4e00000000000000000000000000000000000000000000000000000000815290516001600160a01b03891691630a092a4e916004808301926020929190829003018186803b15801561218a57600080fd5b505afa15801561219e573d6000803e3d6000fd5b505050506040513d60208110156121b457600080fd5b5051604080517f43906fea00000000000000000000000000000000000000000000000000000000815290516001600160a01b038b16916343906fea916004808301926020929190829003018186803b15801561220f57600080fd5b505afa158015612223573d6000803e3d6000fd5b505050506040513d602081101561223957600080fd5b81019080805190602001909291905050508f6040518863ffffffff1660e01b815260040180886001600160a01b031681526020018060200180602001888152602001878152602001868152602001858152602001806020018481038452601d8152602001807f726f636b657444414f4e6f64655472757374656450726f706f73616c7300000081525060200184810383528a818151815260200191508051906020019080838360005b838110156122fa5781810151838201526020016122e2565b50505050905090810190601f1680156123275780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b8381101561235a578181015183820152602001612342565b50505050905090810190601f1680156123875780820380516001836020036101000a031916815260200191505b509a5050505050505050505050602060405180830381600087803b1580156123ae57600080fd5b505af11580156123c2573d6000803e3d6000fd5b505050506040513d60208110156123d857600080fd5b50519998505050505050505050565b6124256040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b03161480612492575061247d6040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b0316145b6124cd5760405162461bcd60e51b81526004018080602001828103825260338152602001806138316033913960400191505060405180910390fd5b600061250d6040518060400160405280601b81526020017f726f636b657444414f4e6f646554727573746564557067726164650000000000815250612c46565b9050806001600160a01b031663accd7d45868686866040518563ffffffff1660e01b815260040180806020018060200180602001856001600160a01b03168152602001848103845288818151815260200191508051906020019080838360005b8381101561258557818101518382015260200161256d565b50505050905090810190601f1680156125b25780820380516001836020036101000a031916815260200191505b50848103835287518152875160209182019189019080838360005b838110156125e55781810151838201526020016125cd565b50505050905090810190601f1680156126125780820380516001836020036101000a031916815260200191505b50848103825286518152865160209182019188019080838360005b8381101561264557818101518382015260200161262d565b50505050905090810190601f1680156126725780820380516001836020036101000a031916815260200191505b50975050505050505050600060405180830381600087803b158015610ad657600080fd5b6126d46040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b03161480612741575061272c6040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b0316145b61277c5760405162461bcd60e51b81526004018080602001828103825260338152602001806138316033913960400191505060405180910390fd5b600061278784612c46565b604080517f5e9d404400000000000000000000000000000000000000000000000000000000815260248101859052600481019182528551604482015285519293506001600160a01b03841692635e9d40449287928792829160640190602086019080838360005b838110156128065781810151838201526020016127ee565b50505050905090810190601f1680156128335780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561285357600080fd5b505af1158015612867573d6000803e3d6000fd5b5050505050505050565b6040518060400160405280601d81526020017f726f636b657444414f4e6f64655472757374656450726f706f73616c73000000815250306129058260405160200180807f636f6e74726163742e61646472657373000000000000000000000000000000008152506010018280519060200190808383602083106109985780518252601f199092019160209182019101610979565b6001600160a01b0316816001600160a01b03161461296a576040805162461bcd60e51b815260206004820152601c60248201527f496e76616c6964206f72206f7574646174656420636f6e747261637400000000604482015290519081900360640190fd5b60006129aa6040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b9050806001600160a01b031663fe0d94c1856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561285357600080fd5b612a306040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b03161480612a9d5750612a886040518060400160405280601181526020017f726f636b657444414f50726f706f73616c000000000000000000000000000000815250612c46565b6001600160a01b0316336001600160a01b0316145b612ad85760405162461bcd60e51b81526004018080602001828103825260338152602001806138316033913960400191505060405180910390fd5b6000612ae384612c46565b604080517f2a57d0180000000000000000000000000000000000000000000000000000000081528415156024820152600481019182528551604482015285519293506001600160a01b03841692632a57d01892879287928291606401906020860190808383600083156128065781810151838201526020016127ee565b60008060019054906101000a90046001600160a01b03166001600160a01b0316637ae1cfca836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612bba57600080fd5b505afa158015612bce573d6000803e3d6000fd5b505050506040513d6020811015612be457600080fd5b505192915050565b60008060019054906101000a90046001600160a01b03166001600160a01b03166321f8a721836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612bba57600080fd5b600080612ca68360405160200180807f636f6e74726163742e61646472657373000000000000000000000000000000008152506010018280519060200190808383602083106109985780518252601f199092019160209182019101610979565b90506001600160a01b038116612d03576040805162461bcd60e51b815260206004820152601260248201527f436f6e7472616374206e6f7420666f756e640000000000000000000000000000604482015290519081900360640190fd5b92915050565b60008054604080517fe2a4853a000000000000000000000000000000000000000000000000000000008152600481018690526024810185905290516101009092046001600160a01b03169263e2a4853a9260448084019382900301818387803b158015612d7557600080fd5b505af1158015612d89573d6000803e3d6000fd5b505050505050565b80612df58160405160200180807f6e6f64652e657869737473000000000000000000000000000000000000000000815250600b01826001600160a01b031660601b815260140191505060405160208183030381529060405280519060200120612b60565b612e46576040805162461bcd60e51b815260206004820152600c60248201527f496e76616c6964206e6f64650000000000000000000000000000000000000000604482015290519081900360640190fd5b6000612e866040518060400160405280601481526020017f726f636b657444414f4e6f646554727573746564000000000000000000000000815250612c46565b9050806001600160a01b0316635dc33bdd846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612ed557600080fd5b505afa158015612ee9573d6000803e3d6000fd5b505050506040513d6020811015612eff57600080fd5b505115612f3d5760405162461bcd60e51b81526004018080602001828103825260318152602001806137db6031913960400191505060405180910390fd5b600385511015612f7e5760405162461bcd60e51b81526004018080602001828103825260388152602001806139866038913960400191505060405180910390fd5b600684511015612fbf5760405162461bcd60e51b81526004018080602001828103825260398152602001806138646039913960400191505060405180910390fd5b6130a86040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250846040516020018083805190602001908083835b6020831061302b5780518252601f19909201916020918201910161300c565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265720000000000000000000000000000000000000000000000000000815250600601826001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012060006135f7565b6131906040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250846040516020018083805190602001908083835b602083106131145780518252601f1990920191602091820191016130f5565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265722e61646472657373000000000000000000000000000000000000815250600e01826001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012084613664565b6132786040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250846040516020018083805190602001908083835b602083106131fc5780518252601f1990920191602091820191016131dd565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265722e69640000000000000000000000000000000000000000000000815250600901826001600160a01b031660601b81526014019250505060405160208183030381529060405280519060200120866136d3565b6133606040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250846040516020018083805190602001908083835b602083106132e45780518252601f1990920191602091820191016132c5565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265722e75726c00000000000000000000000000000000000000000000815250600a01826001600160a01b031660601b81526014019250505060405160208183030381529060405280519060200120856136d3565b6134496040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250846040516020018083805190602001908083835b602083106133cc5780518252601f1990920191602091820191016133ad565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265722e626f6e642e72706c0000000000000000000000000000000000815250600f01826001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001206000612d09565b6135326040518060400160405280601181526020017f64616f2e747275737465646e6f6465732e000000000000000000000000000000815250846040516020018083805190602001908083835b602083106134b55780518252601f199092019160209182019101613496565b6001836020036101000a038019825116818451168082178552505050505050905001807f6d656d6265722e6a6f696e65642e74696d650000000000000000000000000000815250601201826001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001206000612d09565b5050505050565b600082821115613590576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000828201838110156135f0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008054604080517fabfdcced00000000000000000000000000000000000000000000000000000000815260048101869052841515602482015290516101009092046001600160a01b03169263abfdcced9260448084019382900301818387803b158015612d7557600080fd5b60008054604080517fca446dd9000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b03858116602483015291516101009093049091169263ca446dd99260448084019382900301818387803b158015612d7557600080fd5b600060019054906101000a90046001600160a01b03166001600160a01b0316636e89955083836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561374b578181015183820152602001613733565b50505050905090810190601f1680156137785780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015612d7557600080fdfe4d656d6265722063616e6e6f7420766f7465206f6e2070726f706f73616c2063726561746564206265666f7265207468657920626563616d652061206d656d62657254686973206e6f646520697320616c72656164792070617274206f66207468652074727573746564206e6f64652044414f726f636b657444414f4e6f64655472757374656453657474696e677350726f706f73616c7353656e646572206973206e6f74207065726d697474656420746f2061636365737320657865637574696e67206d6574686f64735468652055524c20666f722074686973206e6577206d656d626572206d757374206265206174206c656173742036206368617261637465727352504c2046696e65206d757374206265206c6f776572206f7220657175616c20746f207468652052504c20626f6e6420616d6f756e74206f6620746865206e6f6465206265696e67206b69636b65644d696e206d656d62657220636f756e74206e6f74206d657420746f20616c6c6f772070726f706f73616c7320746f2062652061646465644d656d62657220686173206e6f7420776169746564206c6f6e6720656e6f75676820746f206d616b6520616e6f746865722070726f706f73616c4d656d62657220636f756e742077696c6c2066616c6c2062656c6f77206d696e20726571756972656454686520494420666f722074686973206e6577206d656d626572206d757374206265206174206c6561737420332063686172616374657273a26469706673582212205f79c06214efcd23cf84d2a06362dc6265c5021f12ed3c7c2e51e21aece80d2d64736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000594fb75d3dc2dfa0150ad03f99f97817747dd4e1
-----Decoded View---------------
Arg [0] : _rocketStorageAddress (address): 0x594Fb75D3dc2DFa0150Ad03F99F97817747dd4E1
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000594fb75d3dc2dfa0150ad03f99f97817747dd4e1
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.