Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 303 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Delegate Tokens ... | 18822519 | 339 days ago | IN | 0 ETH | 0.02225502 | ||||
Delegate Tokens ... | 18723879 | 353 days ago | IN | 0 ETH | 0.03111522 | ||||
Delegate Tokens ... | 18698641 | 356 days ago | IN | 0 ETH | 0.00977897 | ||||
Delegate Tokens ... | 18698604 | 356 days ago | IN | 0 ETH | 0.0104121 | ||||
Delegate Tokens ... | 18683613 | 358 days ago | IN | 0 ETH | 0.01017865 | ||||
Delegate Tokens ... | 18662425 | 361 days ago | IN | 0 ETH | 0.01548663 | ||||
Delegate Tokens ... | 18656193 | 362 days ago | IN | 0 ETH | 0.01155393 | ||||
Delegate Tokens ... | 18634702 | 365 days ago | IN | 0 ETH | 0.00371765 | ||||
Delegate Tokens ... | 18583876 | 372 days ago | IN | 0 ETH | 0.00616018 | ||||
Delegate Tokens ... | 18548602 | 377 days ago | IN | 0 ETH | 0.00948934 | ||||
Delegate Tokens ... | 18498210 | 384 days ago | IN | 0 ETH | 0.00296331 | ||||
Delegate Tokens ... | 18476885 | 387 days ago | IN | 0 ETH | 0.00309869 | ||||
Delegate Tokens ... | 18473069 | 388 days ago | IN | 0 ETH | 0.01126159 | ||||
Delegate Tokens ... | 18468382 | 389 days ago | IN | 0 ETH | 0.00503625 | ||||
Delegate Tokens ... | 18461382 | 390 days ago | IN | 0 ETH | 0.00231227 | ||||
Delegate Tokens ... | 18458330 | 390 days ago | IN | 0 ETH | 0.00919962 | ||||
Delegate Tokens ... | 18448380 | 391 days ago | IN | 0 ETH | 0.00267443 | ||||
Delegate Tokens ... | 18446411 | 392 days ago | IN | 0 ETH | 0.00445836 | ||||
Delegate Tokens ... | 18424973 | 395 days ago | IN | 0 ETH | 0.00254364 | ||||
Delegate Tokens ... | 18412485 | 396 days ago | IN | 0 ETH | 0.00168377 | ||||
Delegate Tokens ... | 18404482 | 397 days ago | IN | 0 ETH | 0.00127994 | ||||
Delegate Tokens ... | 18396370 | 399 days ago | IN | 0 ETH | 0.00125596 | ||||
Delegate Tokens ... | 18383606 | 400 days ago | IN | 0 ETH | 0.0014595 | ||||
Delegate Tokens ... | 18381579 | 401 days ago | IN | 0 ETH | 0.00127732 | ||||
Delegate Tokens ... | 18374520 | 402 days ago | IN | 0 ETH | 0.00137257 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
GovernanceV2Helper
Compiler Version
v0.7.5+commit.eb77ed08
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.7.5; pragma abicoder v2; import {IAaveGovernanceV2} from '../interfaces/IAaveGovernanceV2.sol'; import {IProposalValidator} from '../interfaces/IProposalValidator.sol'; import {IExecutorWithTimelock} from '../interfaces/IExecutorWithTimelock.sol'; import {IGovernanceStrategy} from '../interfaces/IGovernanceStrategy.sol'; import {IGovernancePowerDelegationToken} from '../interfaces/IGovernancePowerDelegationToken.sol'; import {IGovernanceV2Helper} from './interfaces/IGovernanceV2Helper.sol'; import {SafeMath} from '../dependencies/open-zeppelin/SafeMath.sol'; /** * @title Governance V2 helper contract * @dev Helper contract to fetch data from the AaveGovernanceV2 contract and batch write calls * - List of proposals with state * - List of votes per proposal and voters * - Batch token delegations calls * @author Aave **/ contract GovernanceV2Helper is IGovernanceV2Helper { using SafeMath for uint256; uint256 public constant ONE_HUNDRED_WITH_PRECISION = 10000; function getProposal(uint256 id, IAaveGovernanceV2 governance) public view override returns (ProposalStats memory proposalStats) { IAaveGovernanceV2.ProposalWithoutVotes memory proposal = governance.getProposalById(id); uint256 votingSupply = IGovernanceStrategy(proposal.strategy).getTotalVotingSupplyAt( proposal.startBlock ); return ProposalStats({ totalVotingSupply: votingSupply, minimumQuorum: IProposalValidator(address(proposal.executor)).MINIMUM_QUORUM(), minimumDiff: IProposalValidator(address(proposal.executor)).VOTE_DIFFERENTIAL(), executionTimeWithGracePeriod: proposal.executionTime > 0 ? IExecutorWithTimelock(proposal.executor).GRACE_PERIOD().add(proposal.executionTime) : proposal.executionTime, proposalCreated: proposal.startBlock.sub(governance.getVotingDelay()), id: proposal.id, creator: proposal.creator, executor: proposal.executor, targets: proposal.targets, values: proposal.values, signatures: proposal.signatures, calldatas: proposal.calldatas, withDelegatecalls: proposal.withDelegatecalls, startBlock: proposal.startBlock, endBlock: proposal.endBlock, executionTime: proposal.executionTime, forVotes: proposal.forVotes, againstVotes: proposal.againstVotes, executed: proposal.executed, canceled: proposal.canceled, strategy: proposal.strategy, ipfsHash: proposal.ipfsHash, proposalState: governance.getProposalState(id) }); } function getProposals( uint256 skip, uint256 limit, IAaveGovernanceV2 governance ) external view override returns (ProposalStats[] memory proposalsStats) { uint256 count = governance.getProposalsCount().sub(skip); uint256 maxLimit = limit > count ? count : limit; proposalsStats = new ProposalStats[](maxLimit); for (uint256 i = 0; i < maxLimit; i++) { proposalsStats[i] = getProposal(i.add(skip), governance); } return proposalsStats; } function getTokensPower(address user, address[] memory tokens) external view override returns (Power[] memory power) { power = new Power[](tokens.length); for (uint256 i = 0; i < tokens.length; i++) { IGovernancePowerDelegationToken delegation = IGovernancePowerDelegationToken(tokens[i]); uint256 currentVotingPower = delegation.getPowerCurrent( user, IGovernancePowerDelegationToken.DelegationType.VOTING_POWER ); uint256 currentPropositionPower = delegation.getPowerCurrent( user, IGovernancePowerDelegationToken.DelegationType.PROPOSITION_POWER ); address delegatedAddressVotingPower = delegation.getDelegateeByType( user, IGovernancePowerDelegationToken.DelegationType.VOTING_POWER ); address delegatedAddressPropositionPower = delegation.getDelegateeByType( user, IGovernancePowerDelegationToken.DelegationType.PROPOSITION_POWER ); power[i] = Power( currentVotingPower, delegatedAddressVotingPower, currentPropositionPower, delegatedAddressPropositionPower ); } return power; } function delegateTokensBySig(address[] calldata tokens, DelegateBySigParams[] calldata params) external override { require(tokens.length == params.length, 'INCONSISTENT_PARAMS_LENGTH'); for (uint256 i = 0; i < tokens.length; i++) { IGovernancePowerDelegationToken(tokens[i]).delegateBySig( params[i].delegatee, params[i].nonce, params[i].expiry, params[i].v, params[i].r, params[i].s ); } } function delegateTokensByTypeBySig( address[] calldata tokens, DelegateByTypeBySigParams[] calldata params ) external override { require(tokens.length == params.length, 'INCONSISTENT_PARAMS_LENGTH'); for (uint256 i = 0; i < tokens.length; i++) { IGovernancePowerDelegationToken(tokens[i]).delegateByTypeBySig( params[i].delegatee, params[i].delegationType, params[i].nonce, params[i].expiry, params[i].v, params[i].r, params[i].s ); } } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.5; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, 'SafeMath: addition overflow'); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, 'SafeMath: subtraction overflow'); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, 'SafeMath: multiplication overflow'); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, 'SafeMath: division by zero'); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, 'SafeMath: modulo by zero'); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.7.5; pragma abicoder v2; import {IAaveGovernanceV2} from '../../interfaces/IAaveGovernanceV2.sol'; import {IExecutorWithTimelock} from '../../interfaces/IExecutorWithTimelock.sol'; import { IGovernancePowerDelegationToken } from '../../interfaces/IGovernancePowerDelegationToken.sol'; interface IGovernanceV2Helper { struct ProposalStats { uint256 totalVotingSupply; uint256 minimumQuorum; uint256 minimumDiff; uint256 executionTimeWithGracePeriod; uint256 proposalCreated; uint256 id; address creator; IExecutorWithTimelock executor; address[] targets; uint256[] values; string[] signatures; bytes[] calldatas; bool[] withDelegatecalls; uint256 startBlock; uint256 endBlock; uint256 executionTime; uint256 forVotes; uint256 againstVotes; bool executed; bool canceled; address strategy; bytes32 ipfsHash; IAaveGovernanceV2.ProposalState proposalState; } struct Power { uint256 votingPower; address delegatedAddressVotingPower; uint256 propositionPower; address delegatedAddressPropositionPower; } struct DelegateByTypeBySigParams { address delegatee; IGovernancePowerDelegationToken.DelegationType delegationType; uint256 nonce; uint256 expiry; uint8 v; bytes32 r; bytes32 s; } struct DelegateBySigParams { address delegatee; uint256 nonce; uint256 expiry; uint8 v; bytes32 r; bytes32 s; } function getProposals( uint256 skip, uint256 limit, IAaveGovernanceV2 governance ) external view virtual returns (ProposalStats[] memory proposalsStats); function getProposal(uint256 id, IAaveGovernanceV2 governance) external view virtual returns (ProposalStats memory proposalStats); function getTokensPower(address user, address[] memory tokens) external view virtual returns (Power[] memory power); function delegateTokensBySig(address[] calldata tokens, DelegateBySigParams[] calldata params) external; function delegateTokensByTypeBySig( address[] calldata tokens, DelegateByTypeBySigParams[] calldata params ) external; }
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.7.5; pragma abicoder v2; interface IGovernancePowerDelegationToken { enum DelegationType {VOTING_POWER, PROPOSITION_POWER} /** * @dev returns the delegatee of an user * @param delegator the address of the delegator **/ function getDelegateeByType(address delegator, DelegationType delegationType) external view virtual returns (address); /** * @dev returns the current delegated power of a user. The current power is the * power delegated at the time of the last snapshot * @param user the user **/ function getPowerCurrent(address user, DelegationType delegationType) external view virtual returns (uint256); /** * @dev get the power of a user at a specified block * @param user address of the user * @param blockNumber block number at which to get power * @param delegationType delegation type (propose/vote) **/ function getPowerAtBlock( address user, uint256 blockNumber, DelegationType delegationType ) external view returns (uint256); /** * @dev Delegates power from signatory to `delegatee` * @param delegatee The address to delegate votes to * @param delegationType the type of delegation (VOTING_POWER, PROPOSITION_POWER) * @param nonce The contract state required to match the signature * @param expiry The time at which to expire the signature * @param v The recovery byte of the signature * @param r Half of the ECDSA signature pair * @param s Half of the ECDSA signature pair **/ function delegateByTypeBySig( address delegatee, DelegationType delegationType, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Delegates power from signatory to `delegatee` * @param delegatee The address to delegate votes to * @param nonce The contract state required to match the signature * @param expiry The time at which to expire the signature * @param v The recovery byte of the signature * @param r Half of the ECDSA signature pair * @param s Half of the ECDSA signature pair **/ function delegateBySig( address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s ) external; }
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.7.5; pragma abicoder v2; interface IGovernanceStrategy { /** * @dev Returns the Proposition Power of a user at a specific block number. * @param user Address of the user. * @param blockNumber Blocknumber at which to fetch Proposition Power * @return Power number **/ function getPropositionPowerAt(address user, uint256 blockNumber) external view returns (uint256); /** * @dev Returns the total supply of Outstanding Proposition Tokens * @param blockNumber Blocknumber at which to evaluate * @return total supply at blockNumber **/ function getTotalPropositionSupplyAt(uint256 blockNumber) external view returns (uint256); /** * @dev Returns the total supply of Outstanding Voting Tokens * @param blockNumber Blocknumber at which to evaluate * @return total supply at blockNumber **/ function getTotalVotingSupplyAt(uint256 blockNumber) external view returns (uint256); /** * @dev Returns the Vote Power of a user at a specific block number. * @param user Address of the user. * @param blockNumber Blocknumber at which to fetch Vote Power * @return Vote number **/ function getVotingPowerAt(address user, uint256 blockNumber) external view returns (uint256); }
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.7.5; pragma abicoder v2; import {IAaveGovernanceV2} from './IAaveGovernanceV2.sol'; interface IExecutorWithTimelock { /** * @dev emitted when a new pending admin is set * @param newPendingAdmin address of the new pending admin **/ event NewPendingAdmin(address newPendingAdmin); /** * @dev emitted when a new admin is set * @param newAdmin address of the new admin **/ event NewAdmin(address newAdmin); /** * @dev emitted when a new delay (between queueing and execution) is set * @param delay new delay **/ event NewDelay(uint256 delay); /** * @dev emitted when a new (trans)action is Queued. * @param actionHash hash of the action * @param target address of the targeted contract * @param value wei value of the transaction * @param signature function signature of the transaction * @param data function arguments of the transaction or callData if signature empty * @param executionTime time at which to execute the transaction * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target **/ event QueuedAction( bytes32 actionHash, address indexed target, uint256 value, string signature, bytes data, uint256 executionTime, bool withDelegatecall ); /** * @dev emitted when an action is Cancelled * @param actionHash hash of the action * @param target address of the targeted contract * @param value wei value of the transaction * @param signature function signature of the transaction * @param data function arguments of the transaction or callData if signature empty * @param executionTime time at which to execute the transaction * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target **/ event CancelledAction( bytes32 actionHash, address indexed target, uint256 value, string signature, bytes data, uint256 executionTime, bool withDelegatecall ); /** * @dev emitted when an action is Cancelled * @param actionHash hash of the action * @param target address of the targeted contract * @param value wei value of the transaction * @param signature function signature of the transaction * @param data function arguments of the transaction or callData if signature empty * @param executionTime time at which to execute the transaction * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target * @param resultData the actual callData used on the target **/ event ExecutedAction( bytes32 actionHash, address indexed target, uint256 value, string signature, bytes data, uint256 executionTime, bool withDelegatecall, bytes resultData ); /** * @dev Getter of the current admin address (should be governance) * @return The address of the current admin **/ function getAdmin() external view returns (address); /** * @dev Getter of the current pending admin address * @return The address of the pending admin **/ function getPendingAdmin() external view returns (address); /** * @dev Getter of the delay between queuing and execution * @return The delay in seconds **/ function getDelay() external view returns (uint256); /** * @dev Returns whether an action (via actionHash) is queued * @param actionHash hash of the action to be checked * keccak256(abi.encode(target, value, signature, data, executionTime, withDelegatecall)) * @return true if underlying action of actionHash is queued **/ function isActionQueued(bytes32 actionHash) external view returns (bool); /** * @dev Checks whether a proposal is over its grace period * @param governance Governance contract * @param proposalId Id of the proposal against which to test * @return true of proposal is over grace period **/ function isProposalOverGracePeriod(IAaveGovernanceV2 governance, uint256 proposalId) external view returns (bool); /** * @dev Getter of grace period constant * @return grace period in seconds **/ function GRACE_PERIOD() external view returns (uint256); /** * @dev Getter of minimum delay constant * @return minimum delay in seconds **/ function MINIMUM_DELAY() external view returns (uint256); /** * @dev Getter of maximum delay constant * @return maximum delay in seconds **/ function MAXIMUM_DELAY() external view returns (uint256); /** * @dev Function, called by Governance, that queue a transaction, returns action hash * @param target smart contract target * @param value wei value of the transaction * @param signature function signature of the transaction * @param data function arguments of the transaction or callData if signature empty * @param executionTime time at which to execute the transaction * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target **/ function queueTransaction( address target, uint256 value, string memory signature, bytes memory data, uint256 executionTime, bool withDelegatecall ) external returns (bytes32); /** * @dev Function, called by Governance, that cancels a transaction, returns the callData executed * @param target smart contract target * @param value wei value of the transaction * @param signature function signature of the transaction * @param data function arguments of the transaction or callData if signature empty * @param executionTime time at which to execute the transaction * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target **/ function executeTransaction( address target, uint256 value, string memory signature, bytes memory data, uint256 executionTime, bool withDelegatecall ) external payable returns (bytes memory); /** * @dev Function, called by Governance, that cancels a transaction, returns action hash * @param target smart contract target * @param value wei value of the transaction * @param signature function signature of the transaction * @param data function arguments of the transaction or callData if signature empty * @param executionTime time at which to execute the transaction * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target **/ function cancelTransaction( address target, uint256 value, string memory signature, bytes memory data, uint256 executionTime, bool withDelegatecall ) external returns (bytes32); }
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.7.5; pragma abicoder v2; import {IAaveGovernanceV2} from './IAaveGovernanceV2.sol'; interface IProposalValidator { /** * @dev Called to validate a proposal (e.g when creating new proposal in Governance) * @param governance Governance Contract * @param user Address of the proposal creator * @param blockNumber Block Number against which to make the test (e.g proposal creation block -1). * @return boolean, true if can be created **/ function validateCreatorOfProposal( IAaveGovernanceV2 governance, address user, uint256 blockNumber ) external view returns (bool); /** * @dev Called to validate the cancellation of a proposal * @param governance Governance Contract * @param user Address of the proposal creator * @param blockNumber Block Number against which to make the test (e.g proposal creation block -1). * @return boolean, true if can be cancelled **/ function validateProposalCancellation( IAaveGovernanceV2 governance, address user, uint256 blockNumber ) external view returns (bool); /** * @dev Returns whether a user has enough Proposition Power to make a proposal. * @param governance Governance Contract * @param user Address of the user to be challenged. * @param blockNumber Block Number against which to make the challenge. * @return true if user has enough power **/ function isPropositionPowerEnough( IAaveGovernanceV2 governance, address user, uint256 blockNumber ) external view returns (bool); /** * @dev Returns the minimum Proposition Power needed to create a proposition. * @param governance Governance Contract * @param blockNumber Blocknumber at which to evaluate * @return minimum Proposition Power needed **/ function getMinimumPropositionPowerNeeded(IAaveGovernanceV2 governance, uint256 blockNumber) external view returns (uint256); /** * @dev Returns whether a proposal passed or not * @param governance Governance Contract * @param proposalId Id of the proposal to set * @return true if proposal passed **/ function isProposalPassed(IAaveGovernanceV2 governance, uint256 proposalId) external view returns (bool); /** * @dev Check whether a proposal has reached quorum, ie has enough FOR-voting-power * Here quorum is not to understand as number of votes reached, but number of for-votes reached * @param governance Governance Contract * @param proposalId Id of the proposal to verify * @return voting power needed for a proposal to pass **/ function isQuorumValid(IAaveGovernanceV2 governance, uint256 proposalId) external view returns (bool); /** * @dev Check whether a proposal has enough extra FOR-votes than AGAINST-votes * FOR VOTES - AGAINST VOTES > VOTE_DIFFERENTIAL * voting supply * @param governance Governance Contract * @param proposalId Id of the proposal to verify * @return true if enough For-Votes **/ function isVoteDifferentialValid(IAaveGovernanceV2 governance, uint256 proposalId) external view returns (bool); /** * @dev Calculates the minimum amount of Voting Power needed for a proposal to Pass * @param votingSupply Total number of oustanding voting tokens * @return voting power needed for a proposal to pass **/ function getMinimumVotingPowerNeeded(uint256 votingSupply) external view returns (uint256); /** * @dev Get proposition threshold constant value * @return the proposition threshold value (100 <=> 1%) **/ function PROPOSITION_THRESHOLD() external view returns (uint256); /** * @dev Get voting duration constant value * @return the voting duration value in seconds **/ function VOTING_DURATION() external view returns (uint256); /** * @dev Get the vote differential threshold constant value * to compare with % of for votes/total supply - % of against votes/total supply * @return the vote differential threshold value (100 <=> 1%) **/ function VOTE_DIFFERENTIAL() external view returns (uint256); /** * @dev Get quorum threshold constant value * to compare with % of for votes/total supply * @return the quorum threshold value (100 <=> 1%) **/ function MINIMUM_QUORUM() external view returns (uint256); /** * @dev precision helper: 100% = 10000 * @return one hundred percents with our chosen precision **/ function ONE_HUNDRED_WITH_PRECISION() external view returns (uint256); }
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.7.5; pragma abicoder v2; import {IExecutorWithTimelock} from './IExecutorWithTimelock.sol'; interface IAaveGovernanceV2 { enum ProposalState {Pending, Canceled, Active, Failed, Succeeded, Queued, Expired, Executed} struct Vote { bool support; uint248 votingPower; } struct Proposal { uint256 id; address creator; IExecutorWithTimelock executor; address[] targets; uint256[] values; string[] signatures; bytes[] calldatas; bool[] withDelegatecalls; uint256 startBlock; uint256 endBlock; uint256 executionTime; uint256 forVotes; uint256 againstVotes; bool executed; bool canceled; address strategy; bytes32 ipfsHash; mapping(address => Vote) votes; } struct ProposalWithoutVotes { uint256 id; address creator; IExecutorWithTimelock executor; address[] targets; uint256[] values; string[] signatures; bytes[] calldatas; bool[] withDelegatecalls; uint256 startBlock; uint256 endBlock; uint256 executionTime; uint256 forVotes; uint256 againstVotes; bool executed; bool canceled; address strategy; bytes32 ipfsHash; } /** * @dev emitted when a new proposal is created * @param id Id of the proposal * @param creator address of the creator * @param executor The ExecutorWithTimelock contract that will execute the proposal * @param targets list of contracts called by proposal's associated transactions * @param values list of value in wei for each propoposal's associated transaction * @param signatures list of function signatures (can be empty) to be used when created the callData * @param calldatas list of calldatas: if associated signature empty, calldata ready, else calldata is arguments * @param withDelegatecalls boolean, true = transaction delegatecalls the taget, else calls the target * @param startBlock block number when vote starts * @param endBlock block number when vote ends * @param strategy address of the governanceStrategy contract * @param ipfsHash IPFS hash of the proposal **/ event ProposalCreated( uint256 id, address indexed creator, IExecutorWithTimelock indexed executor, address[] targets, uint256[] values, string[] signatures, bytes[] calldatas, bool[] withDelegatecalls, uint256 startBlock, uint256 endBlock, address strategy, bytes32 ipfsHash ); /** * @dev emitted when a proposal is canceled * @param id Id of the proposal **/ event ProposalCanceled(uint256 id); /** * @dev emitted when a proposal is queued * @param id Id of the proposal * @param executionTime time when proposal underlying transactions can be executed * @param initiatorQueueing address of the initiator of the queuing transaction **/ event ProposalQueued(uint256 id, uint256 executionTime, address indexed initiatorQueueing); /** * @dev emitted when a proposal is executed * @param id Id of the proposal * @param initiatorExecution address of the initiator of the execution transaction **/ event ProposalExecuted(uint256 id, address indexed initiatorExecution); /** * @dev emitted when a vote is registered * @param id Id of the proposal * @param voter address of the voter * @param support boolean, true = vote for, false = vote against * @param votingPower Power of the voter/vote **/ event VoteEmitted(uint256 id, address indexed voter, bool support, uint256 votingPower); event GovernanceStrategyChanged(address indexed newStrategy, address indexed initiatorChange); event VotingDelayChanged(uint256 newVotingDelay, address indexed initiatorChange); event ExecutorAuthorized(address executor); event ExecutorUnauthorized(address executor); /** * @dev Creates a Proposal (needs Proposition Power of creator > Threshold) * @param executor The ExecutorWithTimelock contract that will execute the proposal * @param targets list of contracts called by proposal's associated transactions * @param values list of value in wei for each propoposal's associated transaction * @param signatures list of function signatures (can be empty) to be used when created the callData * @param calldatas list of calldatas: if associated signature empty, calldata ready, else calldata is arguments * @param withDelegatecalls if true, transaction delegatecalls the taget, else calls the target * @param ipfsHash IPFS hash of the proposal **/ function create( IExecutorWithTimelock executor, address[] memory targets, uint256[] memory values, string[] memory signatures, bytes[] memory calldatas, bool[] memory withDelegatecalls, bytes32 ipfsHash ) external returns (uint256); /** * @dev Cancels a Proposal, * either at anytime by guardian * or when proposal is Pending/Active and threshold no longer reached * @param proposalId id of the proposal **/ function cancel(uint256 proposalId) external; /** * @dev Queue the proposal (If Proposal Succeeded) * @param proposalId id of the proposal to queue **/ function queue(uint256 proposalId) external; /** * @dev Execute the proposal (If Proposal Queued) * @param proposalId id of the proposal to execute **/ function execute(uint256 proposalId) external payable; /** * @dev Function allowing msg.sender to vote for/against a proposal * @param proposalId id of the proposal * @param support boolean, true = vote for, false = vote against **/ function submitVote(uint256 proposalId, bool support) external; /** * @dev Function to register the vote of user that has voted offchain via signature * @param proposalId id of the proposal * @param support boolean, true = vote for, false = vote against * @param v v part of the voter signature * @param r r part of the voter signature * @param s s part of the voter signature **/ function submitVoteBySignature( uint256 proposalId, bool support, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Set new GovernanceStrategy * Note: owner should be a timelocked executor, so needs to make a proposal * @param governanceStrategy new Address of the GovernanceStrategy contract **/ function setGovernanceStrategy(address governanceStrategy) external; /** * @dev Set new Voting Delay (delay before a newly created proposal can be voted on) * Note: owner should be a timelocked executor, so needs to make a proposal * @param votingDelay new voting delay in seconds **/ function setVotingDelay(uint256 votingDelay) external; /** * @dev Add new addresses to the list of authorized executors * @param executors list of new addresses to be authorized executors **/ function authorizeExecutors(address[] memory executors) external; /** * @dev Remove addresses to the list of authorized executors * @param executors list of addresses to be removed as authorized executors **/ function unauthorizeExecutors(address[] memory executors) external; /** * @dev Let the guardian abdicate from its priviledged rights **/ function __abdicate() external; /** * @dev Getter of the current GovernanceStrategy address * @return The address of the current GovernanceStrategy contracts **/ function getGovernanceStrategy() external view returns (address); /** * @dev Getter of the current Voting Delay (delay before a created proposal can be voted on) * Different from the voting duration * @return The voting delay in seconds **/ function getVotingDelay() external view returns (uint256); /** * @dev Returns whether an address is an authorized executor * @param executor address to evaluate as authorized executor * @return true if authorized **/ function isExecutorAuthorized(address executor) external view returns (bool); /** * @dev Getter the address of the guardian, that can mainly cancel proposals * @return The address of the guardian **/ function getGuardian() external view returns (address); /** * @dev Getter of the proposal count (the current number of proposals ever created) * @return the proposal count **/ function getProposalsCount() external view returns (uint256); /** * @dev Getter of a proposal by id * @param proposalId id of the proposal to get * @return the proposal as ProposalWithoutVotes memory object **/ function getProposalById(uint256 proposalId) external view returns (ProposalWithoutVotes memory); /** * @dev Getter of the Vote of a voter about a proposal * Note: Vote is a struct: ({bool support, uint248 votingPower}) * @param proposalId id of the proposal * @param voter address of the voter * @return The associated Vote memory object **/ function getVoteOnProposal(uint256 proposalId, address voter) external view returns (Vote memory); /** * @dev Get the current state of a proposal * @param proposalId id of the proposal * @return The current state if the proposal **/ function getProposalState(uint256 proposalId) external view returns (ProposalState); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"name":"ONE_HUNDRED_WITH_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct IGovernanceV2Helper.DelegateBySigParams[]","name":"params","type":"tuple[]"}],"name":"delegateTokensBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"enum IGovernancePowerDelegationToken.DelegationType","name":"delegationType","type":"uint8"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct IGovernanceV2Helper.DelegateByTypeBySigParams[]","name":"params","type":"tuple[]"}],"name":"delegateTokensByTypeBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"contract IAaveGovernanceV2","name":"governance","type":"address"}],"name":"getProposal","outputs":[{"components":[{"internalType":"uint256","name":"totalVotingSupply","type":"uint256"},{"internalType":"uint256","name":"minimumQuorum","type":"uint256"},{"internalType":"uint256","name":"minimumDiff","type":"uint256"},{"internalType":"uint256","name":"executionTimeWithGracePeriod","type":"uint256"},{"internalType":"uint256","name":"proposalCreated","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"contract IExecutorWithTimelock","name":"executor","type":"address"},{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"bool[]","name":"withDelegatecalls","type":"bool[]"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"executionTime","type":"uint256"},{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"bool","name":"canceled","type":"bool"},{"internalType":"address","name":"strategy","type":"address"},{"internalType":"bytes32","name":"ipfsHash","type":"bytes32"},{"internalType":"enum IAaveGovernanceV2.ProposalState","name":"proposalState","type":"uint8"}],"internalType":"struct IGovernanceV2Helper.ProposalStats","name":"proposalStats","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"skip","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"},{"internalType":"contract IAaveGovernanceV2","name":"governance","type":"address"}],"name":"getProposals","outputs":[{"components":[{"internalType":"uint256","name":"totalVotingSupply","type":"uint256"},{"internalType":"uint256","name":"minimumQuorum","type":"uint256"},{"internalType":"uint256","name":"minimumDiff","type":"uint256"},{"internalType":"uint256","name":"executionTimeWithGracePeriod","type":"uint256"},{"internalType":"uint256","name":"proposalCreated","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"contract IExecutorWithTimelock","name":"executor","type":"address"},{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"bool[]","name":"withDelegatecalls","type":"bool[]"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"executionTime","type":"uint256"},{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"bool","name":"canceled","type":"bool"},{"internalType":"address","name":"strategy","type":"address"},{"internalType":"bytes32","name":"ipfsHash","type":"bytes32"},{"internalType":"enum IAaveGovernanceV2.ProposalState","name":"proposalState","type":"uint8"}],"internalType":"struct IGovernanceV2Helper.ProposalStats[]","name":"proposalsStats","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"getTokensPower","outputs":[{"components":[{"internalType":"uint256","name":"votingPower","type":"uint256"},{"internalType":"address","name":"delegatedAddressVotingPower","type":"address"},{"internalType":"uint256","name":"propositionPower","type":"uint256"},{"internalType":"address","name":"delegatedAddressPropositionPower","type":"address"}],"internalType":"struct IGovernanceV2Helper.Power[]","name":"power","type":"tuple[]"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50612cf2806100206000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80631d73fd6d146100675780632a877f111461008557806367e7dc36146100a1578063a3cc31d5146100bd578063a72b6325146100ed578063e37261151461011d575b600080fd5b61006f61014d565b60405161007c919061273c565b60405180910390f35b61009f600480360381019061009a9190611aab565b610153565b005b6100bb60048036038101906100b69190611a36565b610311565b005b6100d760048036038101906100d291906119e2565b6104aa565b6040516100e491906126b6565b60405180910390f35b61010760048036038101906101029190611bdc565b6107e2565b604051610114919061271a565b60405180910390f35b61013760048036038101906101329190611c18565b610d24565b60405161014491906126d8565b60405180910390f35b61271081565b81819050848490501461019b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610192906126fa565b60405180910390fd5b60005b8484905081101561030a578484828181106101b557fe5b90506020020160208101906101ca9190611990565b73ffffffffffffffffffffffffffffffffffffffff1663f713d8a88484848181106101f157fe5b905060e0020160000160208101906102099190611990565b85858581811061021557fe5b905060e00201602001602081019061022d9190611b20565b86868681811061023957fe5b905060e002016040013587878781811061024f57fe5b905060e002016060013588888881811061026557fe5b905060e00201608001602081019061027d9190611c67565b89898981811061028957fe5b905060e0020160a001358a8a8a81811061029f57fe5b905060e0020160c001356040518863ffffffff1660e01b81526004016102cb97969594939291906125e6565b600060405180830381600087803b1580156102e557600080fd5b505af11580156102f9573d6000803e3d6000fd5b50505050808060010191505061019e565b5050505050565b818190508484905014610359576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610350906126fa565b60405180910390fd5b60005b848490508110156104a35784848281811061037357fe5b90506020020160208101906103889190611990565b73ffffffffffffffffffffffffffffffffffffffff1663c3cda5208484848181106103af57fe5b905060c0020160000160208101906103c79190611990565b8585858181106103d357fe5b905060c00201602001358686868181106103e957fe5b905060c00201604001358787878181106103ff57fe5b905060c0020160600160208101906104179190611c67565b88888881811061042357fe5b905060c002016080013589898981811061043957fe5b905060c0020160a001356040518763ffffffff1660e01b815260040161046496959493929190612655565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b50505050808060010191505061035c565b5050505050565b6060815167ffffffffffffffff811180156104c457600080fd5b506040519080825280602002602001820160405280156104fe57816020015b6104eb611008565b8152602001906001900390816104e35790505b50905060005b82518110156107db57600083828151811061051b57fe5b6020026020010151905060008173ffffffffffffffffffffffffffffffffffffffff1663b2f4201d8760006040518363ffffffff1660e01b81526004016105639291906125bd565b60206040518083038186803b15801561057b57600080fd5b505afa15801561058f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b39190611bb3565b905060008273ffffffffffffffffffffffffffffffffffffffff1663b2f4201d8860016040518363ffffffff1660e01b81526004016105f39291906125bd565b60206040518083038186803b15801561060b57600080fd5b505afa15801561061f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106439190611bb3565b905060008373ffffffffffffffffffffffffffffffffffffffff16636f50458d8960006040518363ffffffff1660e01b81526004016106839291906125bd565b60206040518083038186803b15801561069b57600080fd5b505afa1580156106af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d391906119b9565b905060008473ffffffffffffffffffffffffffffffffffffffff16636f50458d8a60016040518363ffffffff1660e01b81526004016107139291906125bd565b60206040518083038186803b15801561072b57600080fd5b505afa15801561073f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076391906119b9565b905060405180608001604052808581526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018273ffffffffffffffffffffffffffffffffffffffff168152508787815181106107be57fe5b602002602001018190525050505050508080600101915050610504565b5092915050565b6107ea61105c565b6107f261115e565b8273ffffffffffffffffffffffffffffffffffffffff16633656de21856040518263ffffffff1660e01b815260040161082b919061273c565b60006040518083038186803b15801561084357600080fd5b505afa158015610857573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906108809190611b72565b90506000816101e0015173ffffffffffffffffffffffffffffffffffffffff16637a71f9d78361010001516040518263ffffffff1660e01b81526004016108c7919061273c565b60206040518083038186803b1580156108df57600080fd5b505afa1580156108f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109179190611bb3565b9050604051806102e00160405280828152602001836040015173ffffffffffffffffffffffffffffffffffffffff1663b159beac6040518163ffffffff1660e01b815260040160206040518083038186803b15801561097557600080fd5b505afa158015610989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ad9190611bb3565b8152602001836040015173ffffffffffffffffffffffffffffffffffffffff16639125fb586040518163ffffffff1660e01b815260040160206040518083038186803b1580156109fc57600080fd5b505afa158015610a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a349190611bb3565b8152602001600084610140015111610a5157836101400151610aeb565b610aea846101400151856040015173ffffffffffffffffffffffffffffffffffffffff1663c1a287e26040518163ffffffff1660e01b815260040160206040518083038186803b158015610aa457600080fd5b505afa158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc9190611bb3565b610e7690919063ffffffff16565b5b8152602001610b858673ffffffffffffffffffffffffffffffffffffffff1663a2b170b06040518163ffffffff1660e01b815260040160206040518083038186803b158015610b3957600080fd5b505afa158015610b4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b719190611bb3565b856101000151610efe90919063ffffffff16565b815260200183600001518152602001836020015173ffffffffffffffffffffffffffffffffffffffff168152602001836040015173ffffffffffffffffffffffffffffffffffffffff16815260200183606001518152602001836080015181526020018360a0015181526020018360c0015181526020018360e00151815260200183610100015181526020018361012001518152602001836101400151815260200183610160015181526020018361018001518152602001836101a0015115158152602001836101c0015115158152602001836101e0015173ffffffffffffffffffffffffffffffffffffffff16815260200183610200015181526020018573ffffffffffffffffffffffffffffffffffffffff16639080936f886040518263ffffffff1660e01b8152600401610cbc919061273c565b60206040518083038186803b158015610cd457600080fd5b505afa158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c9190611b49565b6007811115610d1757fe5b8152509250505092915050565b60606000610db8858473ffffffffffffffffffffffffffffffffffffffff166398e527d36040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7257600080fd5b505afa158015610d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610daa9190611bb3565b610efe90919063ffffffff16565b90506000818511610dc95784610dcb565b815b90508067ffffffffffffffff81118015610de457600080fd5b50604051908082528060200260200182016040528015610e1e57816020015b610e0b61105c565b815260200190600190039081610e035790505b50925060005b81811015610e6c57610e48610e428883610e7690919063ffffffff16565b866107e2565b848281518110610e5457fe5b60200260200101819052508080600101915050610e24565b5050509392505050565b600080828401905083811015610ef4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000610f4083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610f48565b905092915050565b6000838311158290610ff5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610fba578082015181840152602081019050610f9f565b50505050905090810190601f168015610fe75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b604051806080016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b604051806102e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081526020016060815260200160608152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600080191681526020016000600781111561115857fe5b81525090565b60405180610220016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081526020016060815260200160608152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600080191681525090565b60008135905061123a81612bfb565b92915050565b60008151905061124f81612bfb565b92915050565b60008083601f84011261126757600080fd5b8235905067ffffffffffffffff81111561128057600080fd5b60208301915083602082028301111561129857600080fd5b9250929050565b600082601f8301126112b057600080fd5b81356112c36112be82612788565b612757565b915081818352602084019350602081019050838560208402820111156112e857600080fd5b60005b8381101561131857816112fe888261122b565b8452602084019350602083019250506001810190506112eb565b5050505092915050565b600082601f83011261133357600080fd5b815161134661134182612788565b612757565b9150818183526020840193506020810190508385602084028201111561136b57600080fd5b60005b8381101561139b57816113818882611240565b84526020840193506020830192505060018101905061136e565b5050505092915050565b600082601f8301126113b657600080fd5b81516113c96113c4826127b4565b612757565b915081818352602084019350602081019050838560208402820111156113ee57600080fd5b60005b8381101561141e57816114048882611627565b8452602084019350602083019250506001810190506113f1565b5050505092915050565b600082601f83011261143957600080fd5b815161144c611447826127e0565b612757565b9150818183526020840193506020810190508360005b8381101561149257815186016114788882611651565b845260208401935060208301925050600181019050611462565b5050505092915050565b600082601f8301126114ad57600080fd5b81516114c06114bb8261280c565b612757565b9150818183526020840193506020810190508360005b8381101561150657815186016114ec88826116f9565b8452602084019350602083019250506001810190506114d6565b5050505092915050565b60008083601f84011261152257600080fd5b8235905067ffffffffffffffff81111561153b57600080fd5b6020830191508360c082028301111561155357600080fd5b9250929050565b60008083601f84011261156c57600080fd5b8235905067ffffffffffffffff81111561158557600080fd5b6020830191508360e082028301111561159d57600080fd5b9250929050565b600082601f8301126115b557600080fd5b81516115c86115c382612838565b612757565b915081818352602084019350602081019050838560208402820111156115ed57600080fd5b60005b8381101561161d57816116038882611966565b8452602084019350602083019250506001810190506115f0565b5050505092915050565b60008151905061163681612c12565b92915050565b60008151905061164b81612c29565b92915050565b600082601f83011261166257600080fd5b815161167561167082612864565b612757565b9150808252602083016020830185838301111561169157600080fd5b61169c838284612b8d565b50505092915050565b6000813590506116b481612c40565b92915050565b6000815190506116c981612c57565b92915050565b6000813590506116de81612c6e565b92915050565b6000815190506116f381612c7e565b92915050565b600082601f83011261170a57600080fd5b815161171d61171882612894565b612757565b9150808252602083016020830185838301111561173957600080fd5b611744838284612b8d565b50505092915050565b6000610220828403121561176057600080fd5b61176b610220612757565b9050600061177b84828501611966565b600083015250602061178f84828501611240565b60208301525060406117a3848285016116ba565b604083015250606082015167ffffffffffffffff8111156117c357600080fd5b6117cf84828501611322565b606083015250608082015167ffffffffffffffff8111156117ef57600080fd5b6117fb848285016115a4565b60808301525060a082015167ffffffffffffffff81111561181b57600080fd5b6118278482850161149c565b60a08301525060c082015167ffffffffffffffff81111561184757600080fd5b61185384828501611428565b60c08301525060e082015167ffffffffffffffff81111561187357600080fd5b61187f848285016113a5565b60e08301525061010061189484828501611966565b610100830152506101206118aa84828501611966565b610120830152506101406118c084828501611966565b610140830152506101606118d684828501611966565b610160830152506101806118ec84828501611966565b610180830152506101a061190284828501611627565b6101a0830152506101c061191884828501611627565b6101c0830152506101e061192e84828501611240565b6101e0830152506102006119448482850161163c565b6102008301525092915050565b60008135905061196081612c8e565b92915050565b60008151905061197581612c8e565b92915050565b60008135905061198a81612ca5565b92915050565b6000602082840312156119a257600080fd5b60006119b08482850161122b565b91505092915050565b6000602082840312156119cb57600080fd5b60006119d984828501611240565b91505092915050565b600080604083850312156119f557600080fd5b6000611a038582860161122b565b925050602083013567ffffffffffffffff811115611a2057600080fd5b611a2c8582860161129f565b9150509250929050565b60008060008060408587031215611a4c57600080fd5b600085013567ffffffffffffffff811115611a6657600080fd5b611a7287828801611255565b9450945050602085013567ffffffffffffffff811115611a9157600080fd5b611a9d87828801611510565b925092505092959194509250565b60008060008060408587031215611ac157600080fd5b600085013567ffffffffffffffff811115611adb57600080fd5b611ae787828801611255565b9450945050602085013567ffffffffffffffff811115611b0657600080fd5b611b128782880161155a565b925092505092959194509250565b600060208284031215611b3257600080fd5b6000611b40848285016116cf565b91505092915050565b600060208284031215611b5b57600080fd5b6000611b69848285016116e4565b91505092915050565b600060208284031215611b8457600080fd5b600082015167ffffffffffffffff811115611b9e57600080fd5b611baa8482850161174d565b91505092915050565b600060208284031215611bc557600080fd5b6000611bd384828501611966565b91505092915050565b60008060408385031215611bef57600080fd5b6000611bfd85828601611951565b9250506020611c0e858286016116a5565b9150509250929050565b600080600060608486031215611c2d57600080fd5b6000611c3b86828701611951565b9350506020611c4c86828701611951565b9250506040611c5d868287016116a5565b9150509250925092565b600060208284031215611c7957600080fd5b6000611c878482850161197b565b91505092915050565b6000611c9c8383611d2c565b60208301905092915050565b6000611cb48383612021565b60208301905092915050565b6000611ccc838361204e565b905092915050565b6000611ce083836120b4565b905092915050565b6000611cf4838361212d565b60808301905092915050565b6000611d0c8383612182565b905092915050565b6000611d208383612590565b60208301905092915050565b611d3581612a9c565b82525050565b611d4481612a9c565b82525050565b6000611d5582612934565b611d5f81856129f2565b9350611d6a836128c4565b8060005b83811015611d9b578151611d828882611c90565b9750611d8d83612997565b925050600181019050611d6e565b5085935050505092915050565b6000611db38261293f565b611dbd8185612a03565b9350611dc8836128d4565b8060005b83811015611df9578151611de08882611ca8565b9750611deb836129a4565b925050600181019050611dcc565b5085935050505092915050565b6000611e118261294a565b611e1b8185612a14565b935083602082028501611e2d856128e4565b8060005b85811015611e695784840389528151611e4a8582611cc0565b9450611e55836129b1565b925060208a01995050600181019050611e31565b50829750879550505050505092915050565b6000611e8682612955565b611e908185612a25565b935083602082028501611ea2856128f4565b8060005b85811015611ede5784840389528151611ebf8582611cd4565b9450611eca836129be565b925060208a01995050600181019050611ea6565b50829750879550505050505092915050565b6000611efb82612960565b611f058185612a36565b9350611f1083612904565b8060005b83811015611f41578151611f288882611ce8565b9750611f33836129cb565b925050600181019050611f14565b5085935050505092915050565b6000611f598261296b565b611f638185612a47565b935083602082028501611f7585612914565b8060005b85811015611fb15784840389528151611f928582611d00565b9450611f9d836129d8565b925060208a01995050600181019050611f79565b50829750879550505050505092915050565b6000611fce82612976565b611fd88185612a58565b9350611fe383612924565b8060005b83811015612014578151611ffb8882611d14565b9750612006836129e5565b925050600181019050611fe7565b5085935050505092915050565b61202a81612aae565b82525050565b61203981612aba565b82525050565b61204881612aba565b82525050565b600061205982612981565b6120638185612a69565b9350612073818560208601612b8d565b61207c81612bc2565b840191505092915050565b61209081612b45565b82525050565b61209f81612b69565b82525050565b6120ae81612b7b565b82525050565b60006120bf8261298c565b6120c98185612a7a565b93506120d9818560208601612b8d565b6120e281612bc2565b840191505092915050565b60006120fa601a83612a8b565b91507f494e434f4e53495354454e545f504152414d535f4c454e4754480000000000006000830152602082019050919050565b6080820160008201516121436000850182612590565b5060208201516121566020850182611d2c565b5060408201516121696040850182612590565b50606082015161217c6060850182611d2c565b50505050565b60006102e08301600083015161219b6000860182612590565b5060208301516121ae6020860182612590565b5060408301516121c16040860182612590565b5060608301516121d46060860182612590565b5060808301516121e76080860182612590565b5060a08301516121fa60a0860182612590565b5060c083015161220d60c0860182611d2c565b5060e083015161222060e0860182612087565b5061010083015184820361010086015261223a8282611d4a565b9150506101208301518482036101208601526122568282611fc3565b9150506101408301518482036101408601526122728282611e7b565b91505061016083015184820361016086015261228e8282611e06565b9150506101808301518482036101808601526122aa8282611da8565b9150506101a08301516122c16101a0860182612590565b506101c08301516122d66101c0860182612590565b506101e08301516122eb6101e0860182612590565b50610200830151612300610200860182612590565b50610220830151612315610220860182612590565b5061024083015161232a610240860182612021565b5061026083015161233f610260860182612021565b50610280830151612354610280860182611d2c565b506102a08301516123696102a0860182612030565b506102c083015161237e6102c08601826120a5565b508091505092915050565b60006102e0830160008301516123a26000860182612590565b5060208301516123b56020860182612590565b5060408301516123c86040860182612590565b5060608301516123db6060860182612590565b5060808301516123ee6080860182612590565b5060a083015161240160a0860182612590565b5060c083015161241460c0860182611d2c565b5060e083015161242760e0860182612087565b506101008301518482036101008601526124418282611d4a565b91505061012083015184820361012086015261245d8282611fc3565b9150506101408301518482036101408601526124798282611e7b565b9150506101608301518482036101608601526124958282611e06565b9150506101808301518482036101808601526124b18282611da8565b9150506101a08301516124c86101a0860182612590565b506101c08301516124dd6101c0860182612590565b506101e08301516124f26101e0860182612590565b50610200830151612507610200860182612590565b5061022083015161251c610220860182612590565b50610240830151612531610240860182612021565b50610260830151612546610260860182612021565b5061028083015161255b610280860182611d2c565b506102a08301516125706102a0860182612030565b506102c08301516125856102c08601826120a5565b508091505092915050565b61259981612b2e565b82525050565b6125a881612b2e565b82525050565b6125b781612b38565b82525050565b60006040820190506125d26000830185611d3b565b6125df6020830184612096565b9392505050565b600060e0820190506125fb600083018a611d3b565b6126086020830189612096565b612615604083018861259f565b612622606083018761259f565b61262f60808301866125ae565b61263c60a083018561203f565b61264960c083018461203f565b98975050505050505050565b600060c08201905061266a6000830189611d3b565b612677602083018861259f565b612684604083018761259f565b61269160608301866125ae565b61269e608083018561203f565b6126ab60a083018461203f565b979650505050505050565b600060208201905081810360008301526126d08184611ef0565b905092915050565b600060208201905081810360008301526126f28184611f4e565b905092915050565b60006020820190508181036000830152612713816120ed565b9050919050565b600060208201905081810360008301526127348184612389565b905092915050565b6000602082019050612751600083018461259f565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561277e5761277d612bc0565b5b8060405250919050565b600067ffffffffffffffff8211156127a3576127a2612bc0565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156127cf576127ce612bc0565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156127fb576127fa612bc0565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561282757612826612bc0565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561285357612852612bc0565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561287f5761287e612bc0565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156128af576128ae612bc0565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612aa782612b0e565b9050919050565b60008115159050919050565b6000819050919050565b6000612acf82612a9c565b9050919050565b6000612ae182612a9c565b9050919050565b6000819050612af682612bd3565b919050565b6000819050612b0982612be7565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612b5082612b57565b9050919050565b6000612b6282612b0e565b9050919050565b6000612b7482612ae8565b9050919050565b6000612b8682612afb565b9050919050565b60005b83811015612bab578082015181840152602081019050612b90565b83811115612bba576000848401525b50505050565bfe5b6000601f19601f8301169050919050565b60028110612be457612be3612bc0565b5b50565b60088110612bf857612bf7612bc0565b5b50565b612c0481612a9c565b8114612c0f57600080fd5b50565b612c1b81612aae565b8114612c2657600080fd5b50565b612c3281612aba565b8114612c3d57600080fd5b50565b612c4981612ac4565b8114612c5457600080fd5b50565b612c6081612ad6565b8114612c6b57600080fd5b50565b60028110612c7b57600080fd5b50565b60088110612c8b57600080fd5b50565b612c9781612b2e565b8114612ca257600080fd5b50565b612cae81612b38565b8114612cb957600080fd5b5056fea264697066735822122072ef7b6e75146e320e285db806407fdad63091c870d4297aed4e00948dda80dc64736f6c63430007050033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100625760003560e01c80631d73fd6d146100675780632a877f111461008557806367e7dc36146100a1578063a3cc31d5146100bd578063a72b6325146100ed578063e37261151461011d575b600080fd5b61006f61014d565b60405161007c919061273c565b60405180910390f35b61009f600480360381019061009a9190611aab565b610153565b005b6100bb60048036038101906100b69190611a36565b610311565b005b6100d760048036038101906100d291906119e2565b6104aa565b6040516100e491906126b6565b60405180910390f35b61010760048036038101906101029190611bdc565b6107e2565b604051610114919061271a565b60405180910390f35b61013760048036038101906101329190611c18565b610d24565b60405161014491906126d8565b60405180910390f35b61271081565b81819050848490501461019b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610192906126fa565b60405180910390fd5b60005b8484905081101561030a578484828181106101b557fe5b90506020020160208101906101ca9190611990565b73ffffffffffffffffffffffffffffffffffffffff1663f713d8a88484848181106101f157fe5b905060e0020160000160208101906102099190611990565b85858581811061021557fe5b905060e00201602001602081019061022d9190611b20565b86868681811061023957fe5b905060e002016040013587878781811061024f57fe5b905060e002016060013588888881811061026557fe5b905060e00201608001602081019061027d9190611c67565b89898981811061028957fe5b905060e0020160a001358a8a8a81811061029f57fe5b905060e0020160c001356040518863ffffffff1660e01b81526004016102cb97969594939291906125e6565b600060405180830381600087803b1580156102e557600080fd5b505af11580156102f9573d6000803e3d6000fd5b50505050808060010191505061019e565b5050505050565b818190508484905014610359576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610350906126fa565b60405180910390fd5b60005b848490508110156104a35784848281811061037357fe5b90506020020160208101906103889190611990565b73ffffffffffffffffffffffffffffffffffffffff1663c3cda5208484848181106103af57fe5b905060c0020160000160208101906103c79190611990565b8585858181106103d357fe5b905060c00201602001358686868181106103e957fe5b905060c00201604001358787878181106103ff57fe5b905060c0020160600160208101906104179190611c67565b88888881811061042357fe5b905060c002016080013589898981811061043957fe5b905060c0020160a001356040518763ffffffff1660e01b815260040161046496959493929190612655565b600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b50505050808060010191505061035c565b5050505050565b6060815167ffffffffffffffff811180156104c457600080fd5b506040519080825280602002602001820160405280156104fe57816020015b6104eb611008565b8152602001906001900390816104e35790505b50905060005b82518110156107db57600083828151811061051b57fe5b6020026020010151905060008173ffffffffffffffffffffffffffffffffffffffff1663b2f4201d8760006040518363ffffffff1660e01b81526004016105639291906125bd565b60206040518083038186803b15801561057b57600080fd5b505afa15801561058f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b39190611bb3565b905060008273ffffffffffffffffffffffffffffffffffffffff1663b2f4201d8860016040518363ffffffff1660e01b81526004016105f39291906125bd565b60206040518083038186803b15801561060b57600080fd5b505afa15801561061f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106439190611bb3565b905060008373ffffffffffffffffffffffffffffffffffffffff16636f50458d8960006040518363ffffffff1660e01b81526004016106839291906125bd565b60206040518083038186803b15801561069b57600080fd5b505afa1580156106af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d391906119b9565b905060008473ffffffffffffffffffffffffffffffffffffffff16636f50458d8a60016040518363ffffffff1660e01b81526004016107139291906125bd565b60206040518083038186803b15801561072b57600080fd5b505afa15801561073f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076391906119b9565b905060405180608001604052808581526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018273ffffffffffffffffffffffffffffffffffffffff168152508787815181106107be57fe5b602002602001018190525050505050508080600101915050610504565b5092915050565b6107ea61105c565b6107f261115e565b8273ffffffffffffffffffffffffffffffffffffffff16633656de21856040518263ffffffff1660e01b815260040161082b919061273c565b60006040518083038186803b15801561084357600080fd5b505afa158015610857573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906108809190611b72565b90506000816101e0015173ffffffffffffffffffffffffffffffffffffffff16637a71f9d78361010001516040518263ffffffff1660e01b81526004016108c7919061273c565b60206040518083038186803b1580156108df57600080fd5b505afa1580156108f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109179190611bb3565b9050604051806102e00160405280828152602001836040015173ffffffffffffffffffffffffffffffffffffffff1663b159beac6040518163ffffffff1660e01b815260040160206040518083038186803b15801561097557600080fd5b505afa158015610989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ad9190611bb3565b8152602001836040015173ffffffffffffffffffffffffffffffffffffffff16639125fb586040518163ffffffff1660e01b815260040160206040518083038186803b1580156109fc57600080fd5b505afa158015610a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a349190611bb3565b8152602001600084610140015111610a5157836101400151610aeb565b610aea846101400151856040015173ffffffffffffffffffffffffffffffffffffffff1663c1a287e26040518163ffffffff1660e01b815260040160206040518083038186803b158015610aa457600080fd5b505afa158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc9190611bb3565b610e7690919063ffffffff16565b5b8152602001610b858673ffffffffffffffffffffffffffffffffffffffff1663a2b170b06040518163ffffffff1660e01b815260040160206040518083038186803b158015610b3957600080fd5b505afa158015610b4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b719190611bb3565b856101000151610efe90919063ffffffff16565b815260200183600001518152602001836020015173ffffffffffffffffffffffffffffffffffffffff168152602001836040015173ffffffffffffffffffffffffffffffffffffffff16815260200183606001518152602001836080015181526020018360a0015181526020018360c0015181526020018360e00151815260200183610100015181526020018361012001518152602001836101400151815260200183610160015181526020018361018001518152602001836101a0015115158152602001836101c0015115158152602001836101e0015173ffffffffffffffffffffffffffffffffffffffff16815260200183610200015181526020018573ffffffffffffffffffffffffffffffffffffffff16639080936f886040518263ffffffff1660e01b8152600401610cbc919061273c565b60206040518083038186803b158015610cd457600080fd5b505afa158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c9190611b49565b6007811115610d1757fe5b8152509250505092915050565b60606000610db8858473ffffffffffffffffffffffffffffffffffffffff166398e527d36040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7257600080fd5b505afa158015610d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610daa9190611bb3565b610efe90919063ffffffff16565b90506000818511610dc95784610dcb565b815b90508067ffffffffffffffff81118015610de457600080fd5b50604051908082528060200260200182016040528015610e1e57816020015b610e0b61105c565b815260200190600190039081610e035790505b50925060005b81811015610e6c57610e48610e428883610e7690919063ffffffff16565b866107e2565b848281518110610e5457fe5b60200260200101819052508080600101915050610e24565b5050509392505050565b600080828401905083811015610ef4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000610f4083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610f48565b905092915050565b6000838311158290610ff5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610fba578082015181840152602081019050610f9f565b50505050905090810190601f168015610fe75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b604051806080016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b604051806102e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081526020016060815260200160608152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600080191681526020016000600781111561115857fe5b81525090565b60405180610220016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001606081526020016060815260200160608152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600080191681525090565b60008135905061123a81612bfb565b92915050565b60008151905061124f81612bfb565b92915050565b60008083601f84011261126757600080fd5b8235905067ffffffffffffffff81111561128057600080fd5b60208301915083602082028301111561129857600080fd5b9250929050565b600082601f8301126112b057600080fd5b81356112c36112be82612788565b612757565b915081818352602084019350602081019050838560208402820111156112e857600080fd5b60005b8381101561131857816112fe888261122b565b8452602084019350602083019250506001810190506112eb565b5050505092915050565b600082601f83011261133357600080fd5b815161134661134182612788565b612757565b9150818183526020840193506020810190508385602084028201111561136b57600080fd5b60005b8381101561139b57816113818882611240565b84526020840193506020830192505060018101905061136e565b5050505092915050565b600082601f8301126113b657600080fd5b81516113c96113c4826127b4565b612757565b915081818352602084019350602081019050838560208402820111156113ee57600080fd5b60005b8381101561141e57816114048882611627565b8452602084019350602083019250506001810190506113f1565b5050505092915050565b600082601f83011261143957600080fd5b815161144c611447826127e0565b612757565b9150818183526020840193506020810190508360005b8381101561149257815186016114788882611651565b845260208401935060208301925050600181019050611462565b5050505092915050565b600082601f8301126114ad57600080fd5b81516114c06114bb8261280c565b612757565b9150818183526020840193506020810190508360005b8381101561150657815186016114ec88826116f9565b8452602084019350602083019250506001810190506114d6565b5050505092915050565b60008083601f84011261152257600080fd5b8235905067ffffffffffffffff81111561153b57600080fd5b6020830191508360c082028301111561155357600080fd5b9250929050565b60008083601f84011261156c57600080fd5b8235905067ffffffffffffffff81111561158557600080fd5b6020830191508360e082028301111561159d57600080fd5b9250929050565b600082601f8301126115b557600080fd5b81516115c86115c382612838565b612757565b915081818352602084019350602081019050838560208402820111156115ed57600080fd5b60005b8381101561161d57816116038882611966565b8452602084019350602083019250506001810190506115f0565b5050505092915050565b60008151905061163681612c12565b92915050565b60008151905061164b81612c29565b92915050565b600082601f83011261166257600080fd5b815161167561167082612864565b612757565b9150808252602083016020830185838301111561169157600080fd5b61169c838284612b8d565b50505092915050565b6000813590506116b481612c40565b92915050565b6000815190506116c981612c57565b92915050565b6000813590506116de81612c6e565b92915050565b6000815190506116f381612c7e565b92915050565b600082601f83011261170a57600080fd5b815161171d61171882612894565b612757565b9150808252602083016020830185838301111561173957600080fd5b611744838284612b8d565b50505092915050565b6000610220828403121561176057600080fd5b61176b610220612757565b9050600061177b84828501611966565b600083015250602061178f84828501611240565b60208301525060406117a3848285016116ba565b604083015250606082015167ffffffffffffffff8111156117c357600080fd5b6117cf84828501611322565b606083015250608082015167ffffffffffffffff8111156117ef57600080fd5b6117fb848285016115a4565b60808301525060a082015167ffffffffffffffff81111561181b57600080fd5b6118278482850161149c565b60a08301525060c082015167ffffffffffffffff81111561184757600080fd5b61185384828501611428565b60c08301525060e082015167ffffffffffffffff81111561187357600080fd5b61187f848285016113a5565b60e08301525061010061189484828501611966565b610100830152506101206118aa84828501611966565b610120830152506101406118c084828501611966565b610140830152506101606118d684828501611966565b610160830152506101806118ec84828501611966565b610180830152506101a061190284828501611627565b6101a0830152506101c061191884828501611627565b6101c0830152506101e061192e84828501611240565b6101e0830152506102006119448482850161163c565b6102008301525092915050565b60008135905061196081612c8e565b92915050565b60008151905061197581612c8e565b92915050565b60008135905061198a81612ca5565b92915050565b6000602082840312156119a257600080fd5b60006119b08482850161122b565b91505092915050565b6000602082840312156119cb57600080fd5b60006119d984828501611240565b91505092915050565b600080604083850312156119f557600080fd5b6000611a038582860161122b565b925050602083013567ffffffffffffffff811115611a2057600080fd5b611a2c8582860161129f565b9150509250929050565b60008060008060408587031215611a4c57600080fd5b600085013567ffffffffffffffff811115611a6657600080fd5b611a7287828801611255565b9450945050602085013567ffffffffffffffff811115611a9157600080fd5b611a9d87828801611510565b925092505092959194509250565b60008060008060408587031215611ac157600080fd5b600085013567ffffffffffffffff811115611adb57600080fd5b611ae787828801611255565b9450945050602085013567ffffffffffffffff811115611b0657600080fd5b611b128782880161155a565b925092505092959194509250565b600060208284031215611b3257600080fd5b6000611b40848285016116cf565b91505092915050565b600060208284031215611b5b57600080fd5b6000611b69848285016116e4565b91505092915050565b600060208284031215611b8457600080fd5b600082015167ffffffffffffffff811115611b9e57600080fd5b611baa8482850161174d565b91505092915050565b600060208284031215611bc557600080fd5b6000611bd384828501611966565b91505092915050565b60008060408385031215611bef57600080fd5b6000611bfd85828601611951565b9250506020611c0e858286016116a5565b9150509250929050565b600080600060608486031215611c2d57600080fd5b6000611c3b86828701611951565b9350506020611c4c86828701611951565b9250506040611c5d868287016116a5565b9150509250925092565b600060208284031215611c7957600080fd5b6000611c878482850161197b565b91505092915050565b6000611c9c8383611d2c565b60208301905092915050565b6000611cb48383612021565b60208301905092915050565b6000611ccc838361204e565b905092915050565b6000611ce083836120b4565b905092915050565b6000611cf4838361212d565b60808301905092915050565b6000611d0c8383612182565b905092915050565b6000611d208383612590565b60208301905092915050565b611d3581612a9c565b82525050565b611d4481612a9c565b82525050565b6000611d5582612934565b611d5f81856129f2565b9350611d6a836128c4565b8060005b83811015611d9b578151611d828882611c90565b9750611d8d83612997565b925050600181019050611d6e565b5085935050505092915050565b6000611db38261293f565b611dbd8185612a03565b9350611dc8836128d4565b8060005b83811015611df9578151611de08882611ca8565b9750611deb836129a4565b925050600181019050611dcc565b5085935050505092915050565b6000611e118261294a565b611e1b8185612a14565b935083602082028501611e2d856128e4565b8060005b85811015611e695784840389528151611e4a8582611cc0565b9450611e55836129b1565b925060208a01995050600181019050611e31565b50829750879550505050505092915050565b6000611e8682612955565b611e908185612a25565b935083602082028501611ea2856128f4565b8060005b85811015611ede5784840389528151611ebf8582611cd4565b9450611eca836129be565b925060208a01995050600181019050611ea6565b50829750879550505050505092915050565b6000611efb82612960565b611f058185612a36565b9350611f1083612904565b8060005b83811015611f41578151611f288882611ce8565b9750611f33836129cb565b925050600181019050611f14565b5085935050505092915050565b6000611f598261296b565b611f638185612a47565b935083602082028501611f7585612914565b8060005b85811015611fb15784840389528151611f928582611d00565b9450611f9d836129d8565b925060208a01995050600181019050611f79565b50829750879550505050505092915050565b6000611fce82612976565b611fd88185612a58565b9350611fe383612924565b8060005b83811015612014578151611ffb8882611d14565b9750612006836129e5565b925050600181019050611fe7565b5085935050505092915050565b61202a81612aae565b82525050565b61203981612aba565b82525050565b61204881612aba565b82525050565b600061205982612981565b6120638185612a69565b9350612073818560208601612b8d565b61207c81612bc2565b840191505092915050565b61209081612b45565b82525050565b61209f81612b69565b82525050565b6120ae81612b7b565b82525050565b60006120bf8261298c565b6120c98185612a7a565b93506120d9818560208601612b8d565b6120e281612bc2565b840191505092915050565b60006120fa601a83612a8b565b91507f494e434f4e53495354454e545f504152414d535f4c454e4754480000000000006000830152602082019050919050565b6080820160008201516121436000850182612590565b5060208201516121566020850182611d2c565b5060408201516121696040850182612590565b50606082015161217c6060850182611d2c565b50505050565b60006102e08301600083015161219b6000860182612590565b5060208301516121ae6020860182612590565b5060408301516121c16040860182612590565b5060608301516121d46060860182612590565b5060808301516121e76080860182612590565b5060a08301516121fa60a0860182612590565b5060c083015161220d60c0860182611d2c565b5060e083015161222060e0860182612087565b5061010083015184820361010086015261223a8282611d4a565b9150506101208301518482036101208601526122568282611fc3565b9150506101408301518482036101408601526122728282611e7b565b91505061016083015184820361016086015261228e8282611e06565b9150506101808301518482036101808601526122aa8282611da8565b9150506101a08301516122c16101a0860182612590565b506101c08301516122d66101c0860182612590565b506101e08301516122eb6101e0860182612590565b50610200830151612300610200860182612590565b50610220830151612315610220860182612590565b5061024083015161232a610240860182612021565b5061026083015161233f610260860182612021565b50610280830151612354610280860182611d2c565b506102a08301516123696102a0860182612030565b506102c083015161237e6102c08601826120a5565b508091505092915050565b60006102e0830160008301516123a26000860182612590565b5060208301516123b56020860182612590565b5060408301516123c86040860182612590565b5060608301516123db6060860182612590565b5060808301516123ee6080860182612590565b5060a083015161240160a0860182612590565b5060c083015161241460c0860182611d2c565b5060e083015161242760e0860182612087565b506101008301518482036101008601526124418282611d4a565b91505061012083015184820361012086015261245d8282611fc3565b9150506101408301518482036101408601526124798282611e7b565b9150506101608301518482036101608601526124958282611e06565b9150506101808301518482036101808601526124b18282611da8565b9150506101a08301516124c86101a0860182612590565b506101c08301516124dd6101c0860182612590565b506101e08301516124f26101e0860182612590565b50610200830151612507610200860182612590565b5061022083015161251c610220860182612590565b50610240830151612531610240860182612021565b50610260830151612546610260860182612021565b5061028083015161255b610280860182611d2c565b506102a08301516125706102a0860182612030565b506102c08301516125856102c08601826120a5565b508091505092915050565b61259981612b2e565b82525050565b6125a881612b2e565b82525050565b6125b781612b38565b82525050565b60006040820190506125d26000830185611d3b565b6125df6020830184612096565b9392505050565b600060e0820190506125fb600083018a611d3b565b6126086020830189612096565b612615604083018861259f565b612622606083018761259f565b61262f60808301866125ae565b61263c60a083018561203f565b61264960c083018461203f565b98975050505050505050565b600060c08201905061266a6000830189611d3b565b612677602083018861259f565b612684604083018761259f565b61269160608301866125ae565b61269e608083018561203f565b6126ab60a083018461203f565b979650505050505050565b600060208201905081810360008301526126d08184611ef0565b905092915050565b600060208201905081810360008301526126f28184611f4e565b905092915050565b60006020820190508181036000830152612713816120ed565b9050919050565b600060208201905081810360008301526127348184612389565b905092915050565b6000602082019050612751600083018461259f565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561277e5761277d612bc0565b5b8060405250919050565b600067ffffffffffffffff8211156127a3576127a2612bc0565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156127cf576127ce612bc0565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156127fb576127fa612bc0565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561282757612826612bc0565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561285357612852612bc0565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561287f5761287e612bc0565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156128af576128ae612bc0565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612aa782612b0e565b9050919050565b60008115159050919050565b6000819050919050565b6000612acf82612a9c565b9050919050565b6000612ae182612a9c565b9050919050565b6000819050612af682612bd3565b919050565b6000819050612b0982612be7565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612b5082612b57565b9050919050565b6000612b6282612b0e565b9050919050565b6000612b7482612ae8565b9050919050565b6000612b8682612afb565b9050919050565b60005b83811015612bab578082015181840152602081019050612b90565b83811115612bba576000848401525b50505050565bfe5b6000601f19601f8301169050919050565b60028110612be457612be3612bc0565b5b50565b60088110612bf857612bf7612bc0565b5b50565b612c0481612a9c565b8114612c0f57600080fd5b50565b612c1b81612aae565b8114612c2657600080fd5b50565b612c3281612aba565b8114612c3d57600080fd5b50565b612c4981612ac4565b8114612c5457600080fd5b50565b612c6081612ad6565b8114612c6b57600080fd5b50565b60028110612c7b57600080fd5b50565b60088110612c8b57600080fd5b50565b612c9781612b2e565b8114612ca257600080fd5b50565b612cae81612b38565b8114612cb957600080fd5b5056fea264697066735822122072ef7b6e75146e320e285db806407fdad63091c870d4297aed4e00948dda80dc64736f6c63430007050033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.