Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- DTXgovernor
- Optimization enabled
- true
- Compiler version
- v0.8.20+commit.a1b79de6
- Optimization runs
- 200
- EVM Version
- default
- Verified at
- 2025-01-03T11:40:56.514737Z
Contract source code
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}
// File: FINAL-MAINNET/PulseDAO-main/contracts/interface/IMasterChef.sol
// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol v0.8.0. SEE SOURCE BELOW. !!
pragma solidity ^0.8.20;
interface IMasterChef {
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
event TransferCredit(address from, address to, uint256 amount);
event TrustedContract(address contractAddress, bool setting);
event UpdateEmissions(address indexed user, uint256 newEmissions);
function DTXPerBlock() external view returns (uint256);
function add(
uint256 _allocPoint,
address _participant,
bool _withUpdate
) external;
function burn(address _from, uint256 _amount) external returns (bool);
function credit(address) external view returns (uint256);
function dev(address _devaddr) external;
function devaddr() external view returns (address);
function dtx() external view returns (address);
function existingParticipant(address) external view returns (bool);
function fairMintSenate() external;
function fairTokensPublishedToSenate() external view returns (uint256);
function feeAddress() external view returns (address);
function governorFee() external view returns (uint256);
function massAdd(
uint256[] memory _allocPoint,
address[] memory _participant,
bool[] memory _withUpdate
) external;
function massUpdatePools() external;
function owner() external view returns (address);
function pendingDtx(uint256 _pid) external view returns (uint256);
function poolInfo(uint256)
external
view
returns (
uint256 allocPoint,
uint256 lastRewardBlock,
address participant
);
function poolLength() external view returns (uint256);
function publishTokens(address _to, uint256 _amount) external;
function renounceOwnership() external;
function renounceRewards() external;
function rewardSenators(bool _e) external;
function senatorRewards() external view returns (bool);
function set(
uint256 _pid,
uint256 _allocPoint,
bool _withUpdate
) external;
function setFeeAddress(address _feeAddress) external;
function setGovernorFee(uint256 _amount) external;
function setTrustedContract(address _contractAddress, bool _setting)
external;
function startBlock() external view returns (uint256);
function startPublishing(
uint256 _pid,
address _participant,
uint256 _alloc
) external;
function stopPublishing(uint256 _pid) external;
function tokenChangeOwnership(address _newOwner) external;
function totalAllocPoint() external view returns (uint256);
function totalCreditRewards() external view returns (uint256);
function totalCreditRewardsAtLastFairMint() external view returns (uint256);
function totalPrincipalBurned() external view returns (uint256);
function totalPublished() external view returns (uint256);
function transferCredit(address _to, uint256 _amount) external;
function transferOwnership(address newOwner) external;
function trustedContract(address) external view returns (bool);
function trustedContractCount() external view returns (uint256);
function updateEmissionRate(uint256 _DTXPerBlock) external;
function updatePool(uint256 _pid) external;
function updateStartBlock(uint256 _startBlock) external;
function virtualTotalSupply() external view returns (uint256);
}
// THIS FILE WAS AUTOGENERATED FROM THE FOLLOWING ABI JSON:
/*
[{"inputs":[{"internalType":"contract IDTX","name":"_DTX","type":"address"},{"internalType":"address","name":"_airdropFull","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferCredit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"setting","type":"bool"}],"name":"TrustedContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"newEmissions","type":"uint256"}],"name":"UpdateEmissions","type":"event"},{"inputs":[],"name":"DTXPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"address","name":"_participant","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"credit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_devaddr","type":"address"}],"name":"dev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devaddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dtx","outputs":[{"internalType":"contract IDTX","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"existingParticipant","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fairMintSenate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fairTokensPublishedToSenate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governorFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_allocPoint","type":"uint256[]"},{"internalType":"address[]","name":"_participant","type":"address[]"},{"internalType":"bool[]","name":"_withUpdate","type":"bool[]"}],"name":"massAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"pendingDtx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"address","name":"participant","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"publishTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_e","type":"bool"}],"name":"rewardSenators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"senatorRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setGovernorFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"},{"internalType":"bool","name":"_setting","type":"bool"}],"name":"setTrustedContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_participant","type":"address"},{"internalType":"uint256","name":"_alloc","type":"uint256"}],"name":"startPublishing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"stopPublishing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"tokenChangeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCreditRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCreditRewardsAtLastFairMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPrincipalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPublished","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"trustedContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedContractCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_DTXPerBlock","type":"uint256"}],"name":"updateEmissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"name":"updateStartBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"virtualTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
*/
// File: FINAL-MAINNET/PulseDAO-main/contracts/interface/IDTX.sol
// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol v0.8.0. SEE SOURCE BELOW. !!
pragma solidity ^0.8.20;
interface IDTX {
error ERC20InsufficientAllowance(
address spender,
uint256 allowance,
uint256 needed
);
error ERC20InsufficientBalance(
address sender,
uint256 balance,
uint256 needed
);
error ERC20InvalidApprover(address approver);
error ERC20InvalidReceiver(address receiver);
error ERC20InvalidSender(address sender);
error ERC20InvalidSpender(address spender);
error OwnableInvalidOwner(address owner);
error OwnableUnauthorizedAccount(address account);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
event Transfer(address indexed from, address indexed to, uint256 value);
function MAX_SUPPLY() external view returns (uint256);
function allowance(address owner, address spender)
external
view
returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function balanceOf(address account) external view returns (uint256);
function burn(uint256 value) external;
function burnFrom(address account, uint256 value) external;
function burnToken(address account, uint256 amount) external returns (bool);
function decimals() external view returns (uint8);
function governor() external view returns (address);
function masterchefAddress() external view returns (address);
function mint(address to, uint256 amount) external;
function name() external view returns (string memory);
function owner() external view returns (address);
function rebrandName(string memory _newName) external;
function rebrandSymbol(string memory _newSymbol) external;
function renounceOwnership() external;
function symbol() external view returns (string memory);
function totalSupply() external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
function transferOwnership(address newOwner) external;
}
// THIS FILE WAS AUTOGENERATED FROM THE FOLLOWING ABI JSON:
/*
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masterchefAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_newName","type":"string"}],"name":"rebrandName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newSymbol","type":"string"}],"name":"rebrandSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
*/
// File: FINAL-MAINNET/PulseDAO-main/contracts/interface/IConsensus.sol
// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol v0.8.0. SEE SOURCE BELOW. !!
pragma solidity >=0.7.0 <0.9.0;
interface IConsensus {
event AddVotes(
uint256 _type,
uint256 proposalID,
address indexed voter,
uint256 tokensSacrificed,
bool _for
);
event ChangeGovernor(
uint256 proposalID,
address indexed enforcer,
bool status
);
event ProposeGovernor(
uint256 proposalID,
address newGovernor,
address indexed enforcer
);
event TreasuryEnforce(
uint256 indexed proposalID,
address indexed enforcer,
bool isSuccess
);
event TreasuryProposal(
uint256 indexed proposalID,
uint256 sacrificedTokens,
address tokenAddress,
address recipient,
uint256 amount,
uint256 consensusVoteID,
address indexed enforcer,
uint256 delay
);
function approveTreasuryTransfer(uint256 proposalID) external;
function changeGovernor(uint256 proposalID) external;
function consensusProposal(uint256)
external
view
returns (
uint16 typeOfChange,
address beneficiaryAddress,
uint256 timestamp
);
function creditContract() external view returns (address);
function enforceGovernor(uint256 proposalID) external;
function governorCount() external view returns (uint256);
function highestConsensusVotes(uint256) external view returns (uint256);
function initiateTreasuryTransferProposal(
uint256 depositingTokens,
address tokenAddress,
address recipient,
uint256 amountToSend,
uint256 delay
) external;
function isContract(address _address) external view returns (bool);
function isGovInvalidated(address)
external
view
returns (bool isInvalidated, bool hasPassed);
function killTreasuryTransferProposal(uint256 proposalID) external;
function owner() external view returns (address);
function proposalLengths() external view returns (uint256, uint256);
function proposeGovernor(address _newGovernor) external;
function senateVeto(uint256 proposalID) external;
function senateVetoTreasury(uint256 proposalID) external;
function syncCreditContract() external;
function syncOwner() external;
function token() external view returns (address);
function tokensCastedPerVote(uint256 _forID)
external
view
returns (uint256);
function totalDTXStaked() external view returns (uint256);
function treasuryProposal(uint256)
external
view
returns (
bool valid,
uint256 firstCallTimestamp,
uint256 valueSacrificedForVote,
uint256 valueSacrificedAgainst,
uint256 delay,
address tokenAddress,
address beneficiary,
uint256 amountToSend,
uint256 consensusProposalID
);
function treasuryRequestsCount() external view returns (uint256);
function updateHighestConsensusVotes(uint256 consensusID) external;
function vetoGovernor(uint256 proposalID, bool _withUpdate) external;
function vetoGovernor2(uint256 proposalID, bool _withUpdate) external;
function vetoTreasuryTransferProposal(uint256 proposalID) external;
function voteTreasuryTransferProposalN(
uint256 proposalID,
uint256 withTokens,
bool withAction
) external;
function voteTreasuryTransferProposalY(
uint256 proposalID,
uint256 withTokens
) external;
}
// THIS FILE WAS AUTOGENERATED FROM THE FOLLOWING ABI JSON:
/*
[{"inputs":[{"internalType":"address","name":"_DTX","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_type","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensSacrificed","type":"uint256"},{"indexed":false,"internalType":"bool","name":"_for","type":"bool"}],"name":"AddVotes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ChangeGovernor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"address","name":"newGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"}],"name":"ProposeGovernor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"},{"indexed":false,"internalType":"bool","name":"isSuccess","type":"bool"}],"name":"TreasuryEnforce","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sacrificedTokens","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"consensusVoteID","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"},{"indexed":false,"internalType":"uint256","name":"delay","type":"uint256"}],"name":"TreasuryProposal","type":"event"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"approveTreasuryTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"changeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"consensusProposal","outputs":[{"internalType":"uint16","name":"typeOfChange","type":"uint16"},{"internalType":"address","name":"beneficiaryAddress","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creditContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"enforceGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"governorCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"highestConsensusVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"depositingTokens","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountToSend","type":"uint256"},{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"initiateTreasuryTransferProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isGovInvalidated","outputs":[{"internalType":"bool","name":"isInvalidated","type":"bool"},{"internalType":"bool","name":"hasPassed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"killTreasuryTransferProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalLengths","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"proposeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"senateVeto","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"senateVetoTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"syncCreditContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"syncOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_forID","type":"uint256"}],"name":"tokensCastedPerVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDTXStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"treasuryProposal","outputs":[{"internalType":"bool","name":"valid","type":"bool"},{"internalType":"uint256","name":"firstCallTimestamp","type":"uint256"},{"internalType":"uint256","name":"valueSacrificedForVote","type":"uint256"},{"internalType":"uint256","name":"valueSacrificedAgainst","type":"uint256"},{"internalType":"uint256","name":"delay","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"amountToSend","type":"uint256"},{"internalType":"uint256","name":"consensusProposalID","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryRequestsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"consensusID","type":"uint256"}],"name":"updateHighestConsensusVotes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"vetoGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"vetoGovernor2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"vetoTreasuryTransferProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"uint256","name":"withTokens","type":"uint256"},{"internalType":"bool","name":"withAction","type":"bool"}],"name":"voteTreasuryTransferProposalN","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"uint256","name":"withTokens","type":"uint256"}],"name":"voteTreasuryTransferProposalY","outputs":[],"stateMutability":"nonpayable","type":"function"}]
*/
// File: FINAL-MAINNET/PulseDAO-main/contracts/interface/IacPool.sol
// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol v0.8.0. SEE SOURCE BELOW. !!
pragma solidity >=0.7.0 <0.9.0;
interface IacPool {
event AddAndExtendStake(
address indexed sender,
address indexed recipient,
uint256 amount,
uint256 stakeID,
uint256 shares,
uint256 lastDepositedTime
);
event AddVotes(address indexed voter, uint256 proposalID, uint256 change);
event Deposit(
address indexed sender,
uint256 amount,
uint256 shares,
uint256 lastDepositedTime
);
event GiftDeposit(
address indexed sender,
address indexed recipient,
uint256 amount,
uint256 shares,
uint256 lastDepositedTime
);
event HopDeposit(
address indexed recipient,
uint256 amount,
uint256 shares,
uint256 previousLastDepositedTime,
uint256 mandatoryTime
);
event HopPool(
address indexed sender,
uint256 DTXamount,
uint256 shares,
address indexed newPool
);
event MigrateStake(
address indexed goodSamaritan,
uint256 DTXamount,
uint256 shares,
address indexed recipient
);
event RemoveVotes(
address indexed voter,
uint256 proposalID,
uint256 change
);
event SetDelegate(address userDelegating, address delegatee);
event StakeAllowanceRevoke(
address owner,
address spender,
uint256 allowanceID
);
event StakeApproval(
address owner,
address spender,
uint256 allowanceID,
uint256 shareAllowance,
uint256 lastDeposit,
uint256 mandatoryTime
);
event TransferStake(
address indexed sender,
address indexed recipient,
uint256 shares,
uint256 stakeID
);
event TransferStakeFrom(
address _from,
address _to,
uint256 _stakeID,
uint256 _allowanceID
);
event TrustedPool(address contractAddress, bool setting);
event TrustedSender(address contractAddress, bool setting);
event Withdraw(
address indexed sender,
uint256 amount,
uint256 penalty,
uint256 shares
);
function addAndExtendStake(
address _recipientAddr,
uint256 _amount,
uint256 _stakeID,
uint256 _lockUpTokensInSeconds
) external;
function admin() external view returns (address);
function allowOrigin() external view returns (bool);
function allowStakeTransfer() external view returns (bool);
function allowStakeTransferFrom() external view returns (bool);
function allowTxOrigin(bool _setting) external;
function balanceOf() external view returns (uint256);
function calculateHarvestDTXRewards() external view returns (uint256);
function calculateTotalPendingDTXRewards() external view returns (uint256);
function callFee() external view returns (uint256);
function delegateeVote(address[] memory votingAddress, uint256 proposalID)
external;
function deposit(uint256 _amount) external;
function enableDisableStakeTransfer(bool _setting) external;
function enableDisableStakeTransferFrom(bool _setting) external;
function getNrOfStakes(address _user) external view returns (uint256);
function getPricePerFullShare() external view returns (uint256);
function getUserShares(address _wallet, uint256 _stakeID)
external
view
returns (uint256);
function getUserTotalShares(address _user) external view returns (uint256);
function giftDeposit(
uint256 _amount,
address _toAddress,
uint256 _minToServeInSecs
) external;
function giveStakeAllowance(address spender, uint256 _stakeID) external;
function gracePeriod() external view returns (uint256);
function hopDeposit(
uint256 _amount,
address _recipientAddress,
uint256 previousLastDepositedTime,
uint256 _mandatoryTime
) external;
function hopStakeToAnotherPool(
uint256 _shares,
uint256 _stakeID,
address _poolAddress
) external;
function masterchef() external view returns (address);
function migrateAllStakes(address _staker) external;
function migrateStake(address _staker, uint256 _stakeID) external;
function migrationPool() external view returns (address);
function minimumGift() external view returns (uint256);
function modifyPartialTransfers(bool _decision) external;
function modifyPartialWithdrawals(bool _decision) external;
function nrOfstakeAllowances(address owner, address spender)
external
view
returns (uint256);
function partialTransfers() external view returns (bool);
function partialWithdrawals() external view returns (bool);
function poolID() external view returns (uint256);
function revokeStakeAllowance(address spender, uint256 allowanceID)
external;
function setAdmin() external;
function setCallFee(uint256 _callFee) external;
function setDelegate(address _delegate, bool asProxy) external;
function setMasterChefAddress(address _masterchef, uint256 _newPoolID)
external;
function setMigrationPool(address _newPool) external;
function setMinimumGiftDeposit(uint256 _amount, bool _setting) external;
function setTrustedPool(address[] memory _pool, bool _setting) external;
function setTrustedSender(address[] memory _sender, bool _setting) external;
function stakeAllowances(
address owner,
address spender,
uint256 allowanceID
)
external
view
returns (
uint256,
uint256,
uint256
);
function stakeRollover(address _poolInto, uint256 _stakeID) external;
function token() external view returns (address);
function totalShares() external view returns (uint256);
function totalVotesForID(uint256) external view returns (uint256);
function transferStakeFrom(
address _from,
uint256 _stakeID,
uint256 allowanceID,
address _to
) external returns (bool);
function transferStakeToAnotherWallet(
uint256 _shares,
uint256 _stakeID,
address _recipientAddress
) external;
function treasury() external view returns (address);
function trustedPool(address) external view returns (bool);
function trustedPoolCount() external view returns (uint256);
function trustedSender(address) external view returns (bool);
function trustedSenderCount() external view returns (uint256);
function updateMinGiftGovernor() external view returns (bool);
function updateMinimumGift() external;
function userDelegate(address) external view returns (address);
function userInfo(address, uint256)
external
view
returns (
uint256 shares,
uint256 lastDepositedTime,
uint256 dtxAtLastUserAction,
uint256 lastUserActionTime,
uint256 mandatoryTimeToServe
);
function userVote(address) external view returns (uint256);
function voteForProposal(uint256 proposalID, bool asProxy) external;
function votingCredit(uint256 _shares, uint256 _stakeID) external;
function votingCreditAddress() external view returns (address);
function withdraw(uint256 _shares, uint256 _stakeID) external;
function withdrawAll(uint256 _stakeID) external;
function withdrawFeePeriod() external view returns (uint256);
function withdrawStuckTokens(address _tokenAddress) external;
}
// THIS FILE WAS AUTOGENERATED FROM THE FOLLOWING ABI JSON:
/*
[{"inputs":[{"internalType":"contract IDTX","name":"_token","type":"address"},{"internalType":"contract IMasterChef","name":"_masterchef","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastDepositedTime","type":"uint256"}],"name":"AddAndExtendStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"change","type":"uint256"}],"name":"AddVotes","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastDepositedTime","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastDepositedTime","type":"uint256"}],"name":"GiftDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"previousLastDepositedTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mandatoryTime","type":"uint256"}],"name":"HopDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"DTXamount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":true,"internalType":"address","name":"newPool","type":"address"}],"name":"HopPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"goodSamaritan","type":"address"},{"indexed":false,"internalType":"uint256","name":"DTXamount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"}],"name":"MigrateStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"change","type":"uint256"}],"name":"RemoveVotes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userDelegating","type":"address"},{"indexed":false,"internalType":"address","name":"delegatee","type":"address"}],"name":"SetDelegate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"allowanceID","type":"uint256"}],"name":"StakeAllowanceRevoke","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"allowanceID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shareAllowance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastDeposit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mandatoryTime","type":"uint256"}],"name":"StakeApproval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeID","type":"uint256"}],"name":"TransferStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_stakeID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_allowanceID","type":"uint256"}],"name":"TransferStakeFrom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"setting","type":"bool"}],"name":"TrustedPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"setting","type":"bool"}],"name":"TrustedSender","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"penalty","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"_recipientAddr","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"},{"internalType":"uint256","name":"_lockUpTokensInSeconds","type":"uint256"}],"name":"addAndExtendStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowOrigin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowStakeTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowStakeTransferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_setting","type":"bool"}],"name":"allowTxOrigin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateHarvestDTXRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateTotalPendingDTXRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"callFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"votingAddress","type":"address[]"},{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"delegateeVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_setting","type":"bool"}],"name":"enableDisableStakeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_setting","type":"bool"}],"name":"enableDisableStakeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getNrOfStakes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPricePerFullShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"getUserShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserTotalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_toAddress","type":"address"},{"internalType":"uint256","name":"_minToServeInSecs","type":"uint256"}],"name":"giftDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"giveStakeAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gracePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_recipientAddress","type":"address"},{"internalType":"uint256","name":"previousLastDepositedTime","type":"uint256"},{"internalType":"uint256","name":"_mandatoryTime","type":"uint256"}],"name":"hopDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"},{"internalType":"address","name":"_poolAddress","type":"address"}],"name":"hopStakeToAnotherPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"masterchef","outputs":[{"internalType":"contract IMasterChef","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"}],"name":"migrateAllStakes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"migrateStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrationPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumGift","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_decision","type":"bool"}],"name":"modifyPartialTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_decision","type":"bool"}],"name":"modifyPartialWithdrawals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"nrOfstakeAllowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partialTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partialWithdrawals","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowanceID","type":"uint256"}],"name":"revokeStakeAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_callFee","type":"uint256"}],"name":"setCallFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_delegate","type":"address"},{"internalType":"bool","name":"asProxy","type":"bool"}],"name":"setDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IMasterChef","name":"_masterchef","type":"address"},{"internalType":"uint256","name":"_newPoolID","type":"uint256"}],"name":"setMasterChefAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPool","type":"address"}],"name":"setMigrationPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_setting","type":"bool"}],"name":"setMinimumGiftDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pool","type":"address[]"},{"internalType":"bool","name":"_setting","type":"bool"}],"name":"setTrustedPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_sender","type":"address[]"},{"internalType":"bool","name":"_setting","type":"bool"}],"name":"setTrustedSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowanceID","type":"uint256"}],"name":"stakeAllowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_poolInto","type":"address"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"stakeRollover","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IDTX","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalVotesForID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_stakeID","type":"uint256"},{"internalType":"uint256","name":"allowanceID","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferStakeFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"},{"internalType":"address","name":"_recipientAddress","type":"address"}],"name":"transferStakeToAnotherWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"trustedPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedPoolCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"trustedSender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedSenderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updateMinGiftGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updateMinimumGift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userDelegate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"lastDepositedTime","type":"uint256"},{"internalType":"uint256","name":"dtxAtLastUserAction","type":"uint256"},{"internalType":"uint256","name":"lastUserActionTime","type":"uint256"},{"internalType":"uint256","name":"mandatoryTimeToServe","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"bool","name":"asProxy","type":"bool"}],"name":"voteForProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"votingCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"votingCreditAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFeePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
*/
// File: FINAL-MAINNET/PulseDAO-main/contracts/interface/ITreasury.sol
// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol v0.8.0. SEE SOURCE BELOW. !!
pragma solidity >=0.7.0 <0.9.0;
interface ITreasury {
event ExecuteTransaction(
address indexed token,
address indexed recipientAddress,
uint256 value
);
fallback() external payable;
function requestWithdraw(
address _token,
address _receiver,
uint256 _value
) external;
function token() external view returns (address);
receive() external payable;
}
// THIS FILE WAS AUTOGENERATED FROM THE FOLLOWING ABI JSON:
/*
[{"inputs":[{"internalType":"address","name":"_DTX","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipientAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"ExecuteTransaction","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"requestWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
*/
// File: FINAL-MAINNET/PulseDAO-main/contracts/governor-updated.sol
pragma solidity 0.8.20;
interface ITokenBalancer {
function emergencyWithdraw(address _token) external;
}
contract DTXgovernor {
address public constant token = 0xFAaC6a85C3e123AB2CF7669B1024f146cFef0b38; //XPD token
bool public changedName = false;
//masterchef address
address public constant masterchef = 0x486fEa20eA242456b450B005ED7D019E3E984f28;
address public constant basicContract = 0x5DebADaf41ED55270e0F9944FD389745e73d29B9;
address public constant farmContract = 0x0dc0Fabe4c9d57cCaD055b4cD627D0d24fA3C98E;
address public constant fibonacceningContract = 0xc77c66913B5f60522Ccb98857228511930da7403; //reward boost contract
address public constant consensusContract = 0x7917e04Eb4463CF80Cc00040BA0f1fF125926eF3;
address public constant creditContract = 0xCF14DbcfFA6E99A444539aBbc9aE273a7bb5d75A;
address public constant nftStakingContract = 0x140f16365d05DcC84Fa489194CD022d5CBee4cb2;
address public constant nftAllocationContract = 0xD8508461e8134e25dc630871566B1551e797E1a7;
address public constant treasuryWallet = 0x3a4DA32dc29b146F26D8527e37FeaAe45fBebe69;
address public constant nftWallet = 0x26E6e614C46dA4c459d0dB2121A986672F603c00;
address public constant senateContract = 0x147B43930283d1DDe43d805B7f17E4604b7ca493;
address public constant rewardContract = 0x066F0a45801bcbc5232b11ed4b97c39E1369fe59; //for referral rewards
//addresses for time-locked deposits(autocompounding pools)
address public constant acPool1 = 0x39b3E852D6fFA1aF6694Ef87C062450de6778da8;
address public constant acPool2 = 0x9013B1067C52E897E713044dE36c56BfdA8Ec9B4;
address public constant acPool3 = 0xb180450f064E79adBFD71Bc2fB086F9CD0Af0D67;
address public constant acPool4 = 0xc0483f1b0dcf601888fFD0d3A44b7124e80DB7D1;
address public constant acPool5 = 0x15b51Ece819f3B51ce814de67bB2419660701a3c;
address public constant acPool6 = 0xf3E82f4123d4262a2baEC25b03652f3932A91739;
//pool ID in the masterchef for respective Pool address and dummy token
uint256 public constant acPool1ID = 0;
uint256 public constant acPool2ID = 1;
uint256 public constant acPool3ID = 2;
uint256 public constant acPool4ID = 3;
uint256 public constant acPool5ID = 4;
uint256 public constant acPool6ID = 5;
mapping(address => uint256) private _rollBonus;
uint256 public referralBonus = 500; // 5% for both referr and invitee
uint256 public depositFee = 0;
uint256 public fundingRate = 200;
uint256 public mintingPhaseLaunchDate = 1738574301; //arbitrarily set
uint256 public lastTotalCredit; // Keeps track of last total credit from chef (sends 2.5% to reward contract)
uint256 public costToVote = 1000 * 1e18; // 1000 coins. All proposals are valid unless rejected. This is a minimum to prevent spam
uint256 public delayBeforeEnforce = 1 days; //minimum number of TIME between when proposal is initiated and executed
//fibonaccening event can be scheduled once minimum threshold of tokens have been collected
uint256 public thresholdFibonaccening = 27000000 * 1e18; // roughly 2.5% of initial supply to begin with
//delays for Fibonnaccening(Reward Boost) Events
uint256 public constant minDelay = 24 hours; // has to be called minimum 1 day in advance
uint256 public constant maxDelay = 31 days;
uint256 public lastRegularReward = 850000000000000000000; //remembers the last reward used(outside of boost)
bool public eventFibonacceningActive = false; // prevent some functions if event is active ..threshold and durations for fibonaccening
uint256 public totalFibonacciEventsAfterGrand; //used for rebalancing inflation after Grand Fib
uint256 public newGovernorRequestBlock;
address public eligibleNewGovernor; //used for changing smart contract
bool public changeGovernorActivated;
uint256 public lastHarvestedTime;
event SetInflation(uint256 rewardPerBlock);
event EnforceGovernor(address indexed _newGovernor, address indexed enforcer);
event GiveRolloverBonus(address indexed recipient, uint256 amount, address indexed poolInto);
constructor() {
// Roll-over bonuses
_rollBonus[acPool1] = 100;
_rollBonus[acPool2] = 200;
_rollBonus[acPool3] = 300;
_rollBonus[acPool4] = 400;
_rollBonus[acPool5] = 450;
_rollBonus[acPool6] = 500;
}
/**
* Rebalances Pools and allocates rewards in masterchef
* Pools with higher time-lock must always pay higher rewards in relative terms
* Eg. for 1DTX staked in the pool 6, you should always be receiving
* 50% more rewards compared to staking in pool 4
*/
function rebalancePools() public {
uint256 balancePool1 = IacPool(acPool1).balanceOf();
uint256 balancePool2 = IacPool(acPool2).balanceOf();
uint256 balancePool3 = IacPool(acPool3).balanceOf();
uint256 balancePool4 = IacPool(acPool4).balanceOf();
uint256 balancePool5 = IacPool(acPool5).balanceOf();
uint256 balancePool6 = IacPool(acPool6).balanceOf();
uint256 total = balancePool1 + balancePool2 + balancePool3 + balancePool4 + balancePool5 + balancePool6;
IMasterChef(masterchef).set(acPool1ID, (100000 * 5333 * balancePool1) / (total * 10000), true);
IMasterChef(masterchef).set(acPool2ID, (100000 * 8000 * balancePool2) / (total * 10000), false);
IMasterChef(masterchef).set(acPool3ID, (100000 * 12000 * balancePool3) / (total * 10000), false);
IMasterChef(masterchef).set(acPool4ID, (100000 * 26660 * balancePool4) / (total * 10000), false);
IMasterChef(masterchef).set(acPool5ID, (100000 * 34666 * balancePool5) / (total * 10000), false);
IMasterChef(masterchef).set(acPool6ID, (100000 * 40000 * balancePool6) / (total * 10000), false);
}
/**
* Harvests from all pools and rebalances rewards
*/
function harvest() external {
rebalancePools();
lastHarvestedTime = block.timestamp;
}
/**
* Mechanism, where the governor gives the bonus
* to user for extending(re-commiting) their stake
* tldr; sends the gift deposit, which resets the timer
* the pool is responsible for calculating the bonus
*/
function stakeRolloverBonus(address _toAddress, address _depositToPool, uint256 _bonusToPay, uint256 _stakeID) external {
require(
msg.sender == acPool1 || msg.sender == acPool2 || msg.sender == acPool3 ||
msg.sender == acPool4 || msg.sender == acPool5 || msg.sender == acPool6);
IacPool(_depositToPool).addAndExtendStake(_toAddress, _bonusToPay, _stakeID, 0);
emit GiveRolloverBonus(_toAddress, _bonusToPay, _depositToPool);
}
function enforceGovernor() external {
require(msg.sender == consensusContract);
require(newGovernorRequestBlock + newGovernorBlockDelay() < block.number, "time delay not yet passed");
IMasterChef(masterchef).setFeeAddress(eligibleNewGovernor);
IMasterChef(masterchef).dev(eligibleNewGovernor);
IMasterChef(masterchef).transferOwnership(eligibleNewGovernor); //transfer masterchef ownership
IERC20(token).transfer(eligibleNewGovernor, IERC20(token).balanceOf(address(this))); // send collected DTX tokens to new governor
emit EnforceGovernor(eligibleNewGovernor, msg.sender);
}
function setNewGovernor(address beneficiary) external {
require(msg.sender == consensusContract);
newGovernorRequestBlock = block.number;
eligibleNewGovernor = beneficiary;
changeGovernorActivated = true;
}
function governorRejected() external {
require(changeGovernorActivated, "not active");
(bool _govInvalidated, ) = IConsensus(consensusContract).isGovInvalidated(eligibleNewGovernor);
if(_govInvalidated) {
changeGovernorActivated = false;
}
}
function treasuryRequest(address _tokenAddr, address _recipient, uint256 _amountToSend) external {
require(msg.sender == consensusContract);
ITreasury(payable(treasuryWallet)).requestWithdraw(
_tokenAddr, _recipient, _amountToSend
);
}
function rememberReward() external {
require(msg.sender == fibonacceningContract);
lastRegularReward = IMasterChef(masterchef).DTXPerBlock();
}
/**
* Sets inflation in Masterchef
*/
function setInflation(uint256 rewardPerBlock) external {
require(msg.sender == fibonacceningContract);
IMasterChef(masterchef).updateEmissionRate(rewardPerBlock);
emit SetInflation(rewardPerBlock);
}
function setActivateFibonaccening(bool _arg) external {
require(msg.sender == fibonacceningContract);
eventFibonacceningActive = _arg;
}
function transferRewardBoostThreshold() external {
require(msg.sender == fibonacceningContract);
IERC20(token).transfer(fibonacceningContract, thresholdFibonaccening);
}
function postGrandFibIncreaseCount() external {
require(msg.sender == fibonacceningContract);
totalFibonacciEventsAfterGrand++;
}
function setThresholdFibonaccening(uint256 newThreshold) external {
require(msg.sender == basicContract);
thresholdFibonaccening = newThreshold;
}
function updateDelayBeforeEnforce(uint256 newDelay) external {
require(msg.sender == basicContract);
delayBeforeEnforce = newDelay;
}
function setCallFee(address _acPool, uint256 _newCallFee) external {
require(msg.sender == basicContract);
IacPool(_acPool).setCallFee(_newCallFee);
}
function updateCostToVote(uint256 newCostToVote) external {
require(msg.sender == basicContract);
costToVote = newCostToVote;
}
function updateRolloverBonus(address _forPool, uint256 _bonus) external {
require(msg.sender == basicContract);
require(_bonus <= 1500, "15% hard limit");
_rollBonus[_forPool] = _bonus;
}
function addNewPool(address _pool) external {
require(msg.sender == basicContract);
require(IMasterChef(masterchef).poolLength() < 50, "Maximum pools allowed reached");
IMasterChef(masterchef).add(0, _pool, false);
}
function setPool(uint256 _pid, uint256 _allocPoint, bool _withUpdate) external {
require(msg.sender == farmContract);
IMasterChef(masterchef).set(_pid, _allocPoint, _withUpdate);
}
// If fees are changed, updateFees() function must be called to each vault contract to sync the update!
function updateVault(uint256 _type, uint256 _amount) external {
require(msg.sender == farmContract);
if(_type == 0) {
depositFee = _amount;
} else if(_type == 1) {
fundingRate = _amount;
} else if (_type == 2) {
require(_amount <= 2500, "max 25% Bonus!");
referralBonus = _amount;
}
}
function setGovernorTax(uint256 _amount) external {
require(msg.sender == farmContract);
IMasterChef(masterchef).setGovernorFee(_amount);
}
function burnTokens(uint256 amount) external {
require(msg.sender == farmContract);
IDTX(token).burn(amount);
}
function transferToTreasury(uint256 amount) external {
require(msg.sender == farmContract);
IERC20(token).transfer(treasuryWallet, amount);
}
function getRollBonus(address _bonusForPool) external view returns (uint256) {
return _rollBonus[_bonusForPool];
}
/* UPDATE: CHANGING SO THAT IT CHANGES BY 100 blocks per each day
* newGovernorBlockDelay is the delay during which the governor proposal can be voted against
* As the time passes, changes should take longer to enforce(greater security)
* Prioritize speed and efficiency at launch. Prioritize security once established
* Delay increases by 535 blocks(roughly 1.6hours) per each day after launch
* Delay starts at 42772 blocks(roughly 5 days)
* After a month, delay will be roughly 7 days (increases 2days/month)
* After a year, 29 days. After 2 years, 53 days,...
* Can be ofcourse changed by replacing governor contract
*/
function newGovernorBlockDelay() public view returns (uint256) {
return (42772 + (((block.timestamp - mintingPhaseLaunchDate) / 86400) * 100));
}
function changeName() public {
require(!changedName, "Already changed");
IDTX(token).rebrandName("Piggy Bank");
IDTX(token).rebrandSymbol("OINK");
changedName = true;
}
//recover tokens that were mistakenly sent to the wrong contract
function pullLostTokens() external {
ITokenBalancer(0xA6B1e4Fc9ECd29E9438421A32023E0b8d677D6fc).emergencyWithdraw(token);
}
}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"EnforceGovernor","inputs":[{"type":"address","name":"_newGovernor","internalType":"address","indexed":true},{"type":"address","name":"enforcer","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"GiveRolloverBonus","inputs":[{"type":"address","name":"recipient","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false},{"type":"address","name":"poolInto","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"SetInflation","inputs":[{"type":"uint256","name":"rewardPerBlock","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"acPool1","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"acPool1ID","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"acPool2","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"acPool2ID","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"acPool3","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"acPool3ID","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"acPool4","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"acPool4ID","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"acPool5","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"acPool5ID","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"acPool6","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"acPool6ID","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addNewPool","inputs":[{"type":"address","name":"_pool","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"basicContract","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burnTokens","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"changeGovernorActivated","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeName","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"changedName","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"consensusContract","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"costToVote","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"creditContract","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"delayBeforeEnforce","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"depositFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"eligibleNewGovernor","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"enforceGovernor","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"eventFibonacceningActive","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"farmContract","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"fibonacceningContract","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"fundingRate","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getRollBonus","inputs":[{"type":"address","name":"_bonusForPool","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"governorRejected","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"harvest","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"lastHarvestedTime","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"lastRegularReward","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"lastTotalCredit","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"masterchef","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxDelay","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"minDelay","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"mintingPhaseLaunchDate","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"newGovernorBlockDelay","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"newGovernorRequestBlock","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"nftAllocationContract","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"nftStakingContract","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"nftWallet","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"postGrandFibIncreaseCount","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"pullLostTokens","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rebalancePools","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"referralBonus","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rememberReward","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"rewardContract","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"senateContract","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setActivateFibonaccening","inputs":[{"type":"bool","name":"_arg","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setCallFee","inputs":[{"type":"address","name":"_acPool","internalType":"address"},{"type":"uint256","name":"_newCallFee","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setGovernorTax","inputs":[{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setInflation","inputs":[{"type":"uint256","name":"rewardPerBlock","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setNewGovernor","inputs":[{"type":"address","name":"beneficiary","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPool","inputs":[{"type":"uint256","name":"_pid","internalType":"uint256"},{"type":"uint256","name":"_allocPoint","internalType":"uint256"},{"type":"bool","name":"_withUpdate","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setThresholdFibonaccening","inputs":[{"type":"uint256","name":"newThreshold","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"stakeRolloverBonus","inputs":[{"type":"address","name":"_toAddress","internalType":"address"},{"type":"address","name":"_depositToPool","internalType":"address"},{"type":"uint256","name":"_bonusToPay","internalType":"uint256"},{"type":"uint256","name":"_stakeID","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"thresholdFibonaccening","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"token","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalFibonacciEventsAfterGrand","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferRewardBoostThreshold","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferToTreasury","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"treasuryRequest","inputs":[{"type":"address","name":"_tokenAddr","internalType":"address"},{"type":"address","name":"_recipient","internalType":"address"},{"type":"uint256","name":"_amountToSend","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"treasuryWallet","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateCostToVote","inputs":[{"type":"uint256","name":"newCostToVote","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateDelayBeforeEnforce","inputs":[{"type":"uint256","name":"newDelay","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateRolloverBonus","inputs":[{"type":"address","name":"_forPool","internalType":"address"},{"type":"uint256","name":"_bonus","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateVault","inputs":[{"type":"uint256","name":"_type","internalType":"uint256"},{"type":"uint256","name":"_amount","internalType":"uint256"}]}]
Contract Creation Code
0x60806040525f805460ff1990811682556101f460025560039190915560c86004556367a089dd600555683635c9adc5dea00000600755620151806008556a165578eecf9d0ffb000000600955682e141ea081ca080000600a55600b8054909116905534801561006c575f80fd5b50600160205260647f1ed23b59e307d4b395cdb4ccedf51573eef081a4416fe4192ebaba6acac261705560c87fd0c22ceb79238b5d37fb21fc3cead9ac52ec10705ae3dac8a1300f33ea364d315561012c7f66bc91977f21c32c7cecc7eb25e0a4f45d09b809312ff8c03cc971de08f4bb48556101907fadad7966390b6a248861eb78c38f4d17f511d46ec564842f2136eb6d498a15bb556101c27ff83745987463ebc570bc6734ec910f562485d93325d5754d291271f110f9b8bf5573f3e82f4123d4262a2baec25b03652f3932a917395f526101f47f8f6744ec1edb91f5898599bfffb9d6904db666335df5468cde7044c029a437d355612175806101725f395ff3fe608060405234801561000f575f80fd5b5060043610610401575f3560e01c80637843687f11610216578063c4c57bad1161012a578063e0e01a61116100b4578063f0929fc811610084578063f0929fc81461085b578063f2fa0bb01461086e578063f7bd54f714610889578063fb1db278146108a4578063fc0c546a146108b8575f80fd5b8063e0e01a6114610823578063e4f135041461082b578063e5f59bc11461083e578063ed49d2f814610851575f80fd5b8063d3b7c511116100fa578063d3b7c511146107d0578063d9a7430e146107d8578063ddd80b21146107e0578063ded6e1c9146107e8578063e0a8ed5214610810575f80fd5b8063c4c57bad1461078f578063c63c4e9b146107aa578063ce7842f5146107b4578063d06482e5146107bd575f80fd5b8063a83a33dd116101ab578063b1e370081161017b578063b1e370081461071a578063b2922ec414610735578063b60f053114610750578063bb20d1e114610759578063c24375cf14610774575f80fd5b8063a83a33dd146106e2578063aaf5ab8d146106ea578063ae885352146106fe578063aec9299814610707575f80fd5b80639d2252bc116101e65780639d2252bc146106af5780639eb0e965146106b6578063a569e896146106d1578063a7708fb3146106da575f80fd5b80637843687f1461066c5780638b60a3ee146106755780638fe850aa14610688578063931cc2d414610694575f80fd5b80634ed3dded1161031857806367a52793116102a25780636ea69d62116102725780636ea69d62146106255780636f3d35421461064057806373d95bc5146106485780637668702a1461065b57806376b4c85c14610663575f80fd5b806367a52793146105f75780636953f4ae146106005780636a0ab9a9146106095780636d1b229d14610612575f80fd5b80635ec232f1116102e85780635ec232f11461059b578063615cef7d146105b65780636355a2bb146105c9578063655ea8eb146105dc57806366813f63146105e4575f80fd5b80634ed3dded1461056757806351a41dec1461056f5780635553c956146105785780635d85fa1814610580575f80fd5b80632a9f51d7116103995780633ab3feb2116103695780633ab3feb21461052057806341d3c84c146105285780634626402b146105315780634641257d1461054c57806346ca6bea14610554575f80fd5b80632a9f51d7146104d65780632b976cf6146104f15780632d72b8641461050457806334733cc914610517575f80fd5b806324955846116103d457806324955846146104705780632838225814610483578063296d77fb1461049e5780632a5626f2146104b9575f80fd5b8063063d11de146104055780630919475d1461041a578063092b4a3e1461043557806309609a2d14610468575b5f80fd5b610418610413366004611eb7565b6108d3565b005b610422600181565b6040519081526020015b60405180910390f35b61045073f3e82f4123d4262a2baec25b03652f3932a9173981565b6040516001600160a01b03909116815260200161042c565b610418610983565b61041861047e366004611ee9565b6109f8565b61045073140f16365d05dcc84fa489194cd022d5cbee4cb281565b610450739013b1067c52e897e713044de36c56bfda8ec9b481565b600b546104c69060ff1681565b604051901515815260200161042c565b6104507339b3e852d6ffa1af6694ef87c062450de6778da881565b6104186104ff366004611f09565b610a42565b610418610512366004611f31565b610aba565b61042260085481565b610422600281565b61042260045481565b610450733a4da32dc29b146f26d8527e37feaae45fbebe6981565b610418610b56565b610418610562366004611f77565b610b64565b610422600581565b61042260075481565b610418610bc3565b61045073147b43930283d1dde43d805b7f17e4604b7ca49381565b61045073c0483f1b0dcf601888ffd0d3a44b7124e80db7d181565b6104186105c4366004611eb7565b610ea7565b6104186105d7366004611eb7565b610ecb565b610418610eef565b600e54610450906001600160a01b031681565b61042260035481565b61042260055481565b610422600d5481565b610418610620366004611eb7565b610f80565b61045073066f0a45801bcbc5232b11ed4b97c39e1369fe5981565b610418611003565b610418610656366004611f09565b6110e2565b61041861115f565b610422600c5481565b61042260065481565b610418610683366004611fad565b611194565b5f546104c69060ff1681565b610450737917e04eb4463cf80cc00040ba0f1ff125926ef381565b6104225f81565b610450730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e81565b610422600a5481565b610422600381565b610422600481565b600e546104c690600160a01b900460ff1681565b61042260095481565b610418610715366004611eb7565b61121f565b6104507326e6e614c46da4c459d0db2121a986672f603c0081565b61045073b180450f064e79adbfd71bc2fb086f9cd0af0d6781565b610422600f5481565b61045073c77c66913b5f60522ccb98857228511930da740381565b61045073cf14dbcffa6e99a444539abbc9ae273a7bb5d75a81565b61045073d8508461e8134e25dc630871566b1551e797e1a781565b6104226201518081565b61042260025481565b6104186107cb366004611eb7565b611243565b610422611293565b6104186112cc565b610418611413565b6104226107f6366004611ee9565b6001600160a01b03165f9081526001602052604090205490565b61041861081e366004611eb7565b6114c3565b610418611577565b610418610839366004611ee9565b611bf2565b61041861084c366004611fcd565b611d13565b6104226228de8081565b61041861086936600461200c565b611e85565b6104507315b51ece819f3b51ce814de67bb2419660701a3c81565b610450735debadaf41ed55270e0f9944fd389745e73d29b981565b6104505f8051602061212083398151915281565b61045073faac6a85c3e123ab2cf7669b1024f146cfef0b3881565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e146108f2575f80fd5b60405163a9059cbb60e01b8152733a4da32dc29b146f26d8527e37feaae45fbebe6960048201526024810182905273faac6a85c3e123ab2cf7669b1024f146cfef0b389063a9059cbb906044016020604051808303815f875af115801561095b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097f9190612027565b5050565b604051631bfc726f60e21b815273faac6a85c3e123ab2cf7669b1024f146cfef0b38600482015273a6b1e4fc9ecd29e9438421a32023e0b8d677d6fc90636ff1c9bc906024015f604051808303815f87803b1580156109e0575f80fd5b505af11580156109f2573d5f803e3d5ffd5b50505050565b33737917e04eb4463cf80cc00040ba0f1ff125926ef314610a17575f80fd5b43600d55600e80546001600160a81b0319166001600160a01b0390921691909117600160a01b179055565b33735debadaf41ed55270e0f9944fd389745e73d29b914610a61575f80fd5b6040516313232c1360e11b8152600481018290526001600160a01b038316906326465826906024015f604051808303815f87803b158015610aa0575f80fd5b505af1158015610ab2573d5f803e3d5ffd5b505050505050565b33737917e04eb4463cf80cc00040ba0f1ff125926ef314610ad9575f80fd5b60405163d7b7142360e01b81526001600160a01b0380851660048301528316602482015260448101829052733a4da32dc29b146f26d8527e37feaae45fbebe699063d7b71423906064015b5f604051808303815f87803b158015610b3b575f80fd5b505af1158015610b4d573d5f803e3d5ffd5b50505050505050565b610b5e611577565b42600f55565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e14610b83575f80fd5b6040516364482f7960e01b8152600481018490526024810183905281151560448201525f80516020612120833981519152906364482f7990606401610b24565b33737917e04eb4463cf80cc00040ba0f1ff125926ef314610be2575f80fd5b43610beb611293565b600d54610bf89190612056565b10610c4a5760405162461bcd60e51b815260206004820152601960248201527f74696d652064656c6179206e6f7420796574207061737365640000000000000060448201526064015b60405180910390fd5b600e546040516321c17f3560e21b81526001600160a01b0390911660048201525f8051602061212083398151915290638705fcd4906024015f604051808303815f87803b158015610c99575f80fd5b505af1158015610cab573d5f803e3d5ffd5b5050600e546040516346c4548760e11b81526001600160a01b0390911660048201525f805160206121208339815191529250638d88a90e91506024015f604051808303815f87803b158015610cfe575f80fd5b505af1158015610d10573d5f803e3d5ffd5b5050600e5460405163f2fde38b60e01b81526001600160a01b0390911660048201525f80516020612120833981519152925063f2fde38b91506024015f604051808303815f87803b158015610d63575f80fd5b505af1158015610d75573d5f803e3d5ffd5b5050600e546040516370a0823160e01b815230600482015273faac6a85c3e123ab2cf7669b1024f146cfef0b38935063a9059cbb92506001600160a01b039091169083906370a0823190602401602060405180830381865afa158015610ddd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e01919061206f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610e49573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6d9190612027565b50600e5460405133916001600160a01b0316907f5296de069a121d7d0bc5ab079d0b2aaad96d23909ae242cabb658a592247ce62905f90a3565b33735debadaf41ed55270e0f9944fd389745e73d29b914610ec6575f80fd5b600855565b33735debadaf41ed55270e0f9944fd389745e73d29b914610eea575f80fd5b600955565b3373c77c66913b5f60522ccb98857228511930da740314610f0e575f80fd5b5f805160206121208339815191526001600160a01b0316639cc345596040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7b919061206f565b600a55565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e14610f9f575f80fd5b604051630852cd8d60e31b81526004810182905273faac6a85c3e123ab2cf7669b1024f146cfef0b38906342966c68906024015b5f604051808303815f87803b158015610fea575f80fd5b505af1158015610ffc573d5f803e3d5ffd5b5050505050565b600e54600160a01b900460ff166110495760405162461bcd60e51b815260206004820152600a6024820152696e6f742061637469766560b01b6044820152606401610c41565b600e5460405163050168c160e01b81526001600160a01b0390911660048201525f90737917e04eb4463cf80cc00040ba0f1ff125926ef39063050168c1906024016040805180830381865afa1580156110a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110c89190612086565b50905080156110df57600e805460ff60a01b191690555b50565b33735debadaf41ed55270e0f9944fd389745e73d29b914611101575f80fd5b6105dc8111156111445760405162461bcd60e51b815260206004820152600e60248201526d0c4d49481a185c99081b1a5b5a5d60921b6044820152606401610c41565b6001600160a01b039091165f90815260016020526040902055565b3373c77c66913b5f60522ccb98857228511930da74031461117e575f80fd5b600c8054905f61118d836120be565b9190505550565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e146111b3575f80fd5b815f036111c05760035550565b816001036111ce5760045550565b8160020361097f576109c48111156112195760405162461bcd60e51b815260206004820152600e60248201526d6d61782032352520426f6e75732160901b6044820152606401610c41565b60025550565b33735debadaf41ed55270e0f9944fd389745e73d29b91461123e575f80fd5b600755565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e14611262575f80fd5b60405163a3d7a33960e01b8152600481018290525f805160206121208339815191529063a3d7a33990602401610fd3565b5f62015180600554426112a691906120d6565b6112b091906120e9565b6112bb906064612108565b6112c79061a714612056565b905090565b5f5460ff16156113105760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818da185b99d959608a1b6044820152606401610c41565b60405163a5de999560e01b815260206004820152600a60248201526950696767792042616e6b60b01b604482015273faac6a85c3e123ab2cf7669b1024f146cfef0b389063a5de9995906064015f604051808303815f87803b158015611374575f80fd5b505af1158015611386573d5f803e3d5ffd5b505060405163020bcd2d60e21b815273faac6a85c3e123ab2cf7669b1024f146cfef0b38925063082f34b491506113d8906004016020808252600490820152634f494e4b60e01b604082015260600190565b5f604051808303815f87803b1580156113ef575f80fd5b505af1158015611401573d5f803e3d5ffd5b50505f805460ff191660011790555050565b3373c77c66913b5f60522ccb98857228511930da740314611432575f80fd5b60095460405163a9059cbb60e01b815273c77c66913b5f60522ccb98857228511930da74036004820152602481019190915273faac6a85c3e123ab2cf7669b1024f146cfef0b389063a9059cbb906044016020604051808303815f875af115801561149f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110df9190612027565b3373c77c66913b5f60522ccb98857228511930da7403146114e2575f80fd5b6040516305d4266960e11b8152600481018290525f8051602061212083398151915290630ba84cd2906024015f604051808303815f87803b158015611525575f80fd5b505af1158015611537573d5f803e3d5ffd5b505050507fa2c906d360736c15f8fc6c4b049228f49b9f4f8dbe56808aa82f316833a055be8160405161156c91815260200190565b60405180910390a150565b5f7339b3e852d6ffa1af6694ef87c062450de6778da86001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ec919061206f565b90505f739013b1067c52e897e713044de36c56bfda8ec9b46001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561163f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611663919061206f565b90505f73b180450f064e79adbfd71bc2fb086f9cd0af0d676001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116da919061206f565b90505f73c0483f1b0dcf601888ffd0d3a44b7124e80db7d16001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611751919061206f565b90505f7315b51ece819f3b51ce814de67bb2419660701a3c6001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117c8919061206f565b90505f73f3e82f4123d4262a2baec25b03652f3932a917396001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561181b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183f919061206f565b90505f818385876118508a8c612056565b61185a9190612056565b6118649190612056565b61186e9190612056565b6118789190612056565b90505f805160206121208339815191526364482f795f61189a84612710612108565b6118a88b631fc98320612108565b6118b291906120e9565b6040516001600160e01b031960e085901b16815260048101929092526024820152600160448201526064015f604051808303815f87803b1580156118f4575f80fd5b505af1158015611906573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f7991506001905061192e84612710612108565b61193c8a632faf0800612108565b61194691906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611987575f80fd5b505af1158015611999573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f799150600290506119c184612710612108565b6119cf896347868c00612108565b6119d991906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611a1a575f80fd5b505af1158015611a2c573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f79915060039050611a5484612710612108565b611a6288639ee7ee80612108565b611a6c91906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611aad575f80fd5b505af1158015611abf573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f79915060049050611ae784612710612108565b611af58763cea01e40612108565b611aff91906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611b40575f80fd5b505af1158015611b52573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f79915060059050611b7a84612710612108565b611b888663ee6b2800612108565b611b9291906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611bd3575f80fd5b505af1158015611be5573d5f803e3d5ffd5b5050505050505050505050565b33735debadaf41ed55270e0f9944fd389745e73d29b914611c11575f80fd5b60325f805160206121208339815191526001600160a01b031663081e3eda6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c80919061206f565b10611ccd5760405162461bcd60e51b815260206004820152601d60248201527f4d6178696d756d20706f6f6c7320616c6c6f77656420726561636865640000006044820152606401610c41565b604051631eaaa04560e01b81525f600482018190526001600160a01b038316602483015260448201525f8051602061212083398151915290631eaaa04590606401610fd3565b337339b3e852d6ffa1af6694ef87c062450de6778da81480611d48575033739013b1067c52e897e713044de36c56bfda8ec9b4145b80611d6657503373b180450f064e79adbfd71bc2fb086f9cd0af0d67145b80611d8457503373c0483f1b0dcf601888ffd0d3a44b7124e80db7d1145b80611da25750337315b51ece819f3b51ce814de67bb2419660701a3c145b80611dc057503373f3e82f4123d4262a2baec25b03652f3932a91739145b611dc8575f80fd5b60405163b3f5f65560e01b81526001600160a01b03858116600483015260248201849052604482018390525f606483015284169063b3f5f655906084015f604051808303815f87803b158015611e1c575f80fd5b505af1158015611e2e573d5f803e3d5ffd5b50505050826001600160a01b0316846001600160a01b03167fd1e293b75a6aeb3a9ab5df2765badd46e6e7c83a001a37e4b9cadea14c81837184604051611e7791815260200190565b60405180910390a350505050565b3373c77c66913b5f60522ccb98857228511930da740314611ea4575f80fd5b600b805460ff1916911515919091179055565b5f60208284031215611ec7575f80fd5b5035919050565b80356001600160a01b0381168114611ee4575f80fd5b919050565b5f60208284031215611ef9575f80fd5b611f0282611ece565b9392505050565b5f8060408385031215611f1a575f80fd5b611f2383611ece565b946020939093013593505050565b5f805f60608486031215611f43575f80fd5b611f4c84611ece565b9250611f5a60208501611ece565b9150604084013590509250925092565b80151581146110df575f80fd5b5f805f60608486031215611f89575f80fd5b83359250602084013591506040840135611fa281611f6a565b809150509250925092565b5f8060408385031215611fbe575f80fd5b50508035926020909101359150565b5f805f8060808587031215611fe0575f80fd5b611fe985611ece565b9350611ff760208601611ece565b93969395505050506040820135916060013590565b5f6020828403121561201c575f80fd5b8135611f0281611f6a565b5f60208284031215612037575f80fd5b8151611f0281611f6a565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561206957612069612042565b92915050565b5f6020828403121561207f575f80fd5b5051919050565b5f8060408385031215612097575f80fd5b82516120a281611f6a565b60208401519092506120b381611f6a565b809150509250929050565b5f600182016120cf576120cf612042565b5060010190565b8181038181111561206957612069612042565b5f8261210357634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176120695761206961204256fe000000000000000000000000486fea20ea242456b450b005ed7d019e3e984f28a26469706673582212203dff04f4b099dabe4d5ef757aea2e2d4a46684dac14238896f399a6e3083e89064736f6c63430008140033
Deployed ByteCode
0x608060405234801561000f575f80fd5b5060043610610401575f3560e01c80637843687f11610216578063c4c57bad1161012a578063e0e01a61116100b4578063f0929fc811610084578063f0929fc81461085b578063f2fa0bb01461086e578063f7bd54f714610889578063fb1db278146108a4578063fc0c546a146108b8575f80fd5b8063e0e01a6114610823578063e4f135041461082b578063e5f59bc11461083e578063ed49d2f814610851575f80fd5b8063d3b7c511116100fa578063d3b7c511146107d0578063d9a7430e146107d8578063ddd80b21146107e0578063ded6e1c9146107e8578063e0a8ed5214610810575f80fd5b8063c4c57bad1461078f578063c63c4e9b146107aa578063ce7842f5146107b4578063d06482e5146107bd575f80fd5b8063a83a33dd116101ab578063b1e370081161017b578063b1e370081461071a578063b2922ec414610735578063b60f053114610750578063bb20d1e114610759578063c24375cf14610774575f80fd5b8063a83a33dd146106e2578063aaf5ab8d146106ea578063ae885352146106fe578063aec9299814610707575f80fd5b80639d2252bc116101e65780639d2252bc146106af5780639eb0e965146106b6578063a569e896146106d1578063a7708fb3146106da575f80fd5b80637843687f1461066c5780638b60a3ee146106755780638fe850aa14610688578063931cc2d414610694575f80fd5b80634ed3dded1161031857806367a52793116102a25780636ea69d62116102725780636ea69d62146106255780636f3d35421461064057806373d95bc5146106485780637668702a1461065b57806376b4c85c14610663575f80fd5b806367a52793146105f75780636953f4ae146106005780636a0ab9a9146106095780636d1b229d14610612575f80fd5b80635ec232f1116102e85780635ec232f11461059b578063615cef7d146105b65780636355a2bb146105c9578063655ea8eb146105dc57806366813f63146105e4575f80fd5b80634ed3dded1461056757806351a41dec1461056f5780635553c956146105785780635d85fa1814610580575f80fd5b80632a9f51d7116103995780633ab3feb2116103695780633ab3feb21461052057806341d3c84c146105285780634626402b146105315780634641257d1461054c57806346ca6bea14610554575f80fd5b80632a9f51d7146104d65780632b976cf6146104f15780632d72b8641461050457806334733cc914610517575f80fd5b806324955846116103d457806324955846146104705780632838225814610483578063296d77fb1461049e5780632a5626f2146104b9575f80fd5b8063063d11de146104055780630919475d1461041a578063092b4a3e1461043557806309609a2d14610468575b5f80fd5b610418610413366004611eb7565b6108d3565b005b610422600181565b6040519081526020015b60405180910390f35b61045073f3e82f4123d4262a2baec25b03652f3932a9173981565b6040516001600160a01b03909116815260200161042c565b610418610983565b61041861047e366004611ee9565b6109f8565b61045073140f16365d05dcc84fa489194cd022d5cbee4cb281565b610450739013b1067c52e897e713044de36c56bfda8ec9b481565b600b546104c69060ff1681565b604051901515815260200161042c565b6104507339b3e852d6ffa1af6694ef87c062450de6778da881565b6104186104ff366004611f09565b610a42565b610418610512366004611f31565b610aba565b61042260085481565b610422600281565b61042260045481565b610450733a4da32dc29b146f26d8527e37feaae45fbebe6981565b610418610b56565b610418610562366004611f77565b610b64565b610422600581565b61042260075481565b610418610bc3565b61045073147b43930283d1dde43d805b7f17e4604b7ca49381565b61045073c0483f1b0dcf601888ffd0d3a44b7124e80db7d181565b6104186105c4366004611eb7565b610ea7565b6104186105d7366004611eb7565b610ecb565b610418610eef565b600e54610450906001600160a01b031681565b61042260035481565b61042260055481565b610422600d5481565b610418610620366004611eb7565b610f80565b61045073066f0a45801bcbc5232b11ed4b97c39e1369fe5981565b610418611003565b610418610656366004611f09565b6110e2565b61041861115f565b610422600c5481565b61042260065481565b610418610683366004611fad565b611194565b5f546104c69060ff1681565b610450737917e04eb4463cf80cc00040ba0f1ff125926ef381565b6104225f81565b610450730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e81565b610422600a5481565b610422600381565b610422600481565b600e546104c690600160a01b900460ff1681565b61042260095481565b610418610715366004611eb7565b61121f565b6104507326e6e614c46da4c459d0db2121a986672f603c0081565b61045073b180450f064e79adbfd71bc2fb086f9cd0af0d6781565b610422600f5481565b61045073c77c66913b5f60522ccb98857228511930da740381565b61045073cf14dbcffa6e99a444539abbc9ae273a7bb5d75a81565b61045073d8508461e8134e25dc630871566b1551e797e1a781565b6104226201518081565b61042260025481565b6104186107cb366004611eb7565b611243565b610422611293565b6104186112cc565b610418611413565b6104226107f6366004611ee9565b6001600160a01b03165f9081526001602052604090205490565b61041861081e366004611eb7565b6114c3565b610418611577565b610418610839366004611ee9565b611bf2565b61041861084c366004611fcd565b611d13565b6104226228de8081565b61041861086936600461200c565b611e85565b6104507315b51ece819f3b51ce814de67bb2419660701a3c81565b610450735debadaf41ed55270e0f9944fd389745e73d29b981565b6104505f8051602061212083398151915281565b61045073faac6a85c3e123ab2cf7669b1024f146cfef0b3881565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e146108f2575f80fd5b60405163a9059cbb60e01b8152733a4da32dc29b146f26d8527e37feaae45fbebe6960048201526024810182905273faac6a85c3e123ab2cf7669b1024f146cfef0b389063a9059cbb906044016020604051808303815f875af115801561095b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097f9190612027565b5050565b604051631bfc726f60e21b815273faac6a85c3e123ab2cf7669b1024f146cfef0b38600482015273a6b1e4fc9ecd29e9438421a32023e0b8d677d6fc90636ff1c9bc906024015f604051808303815f87803b1580156109e0575f80fd5b505af11580156109f2573d5f803e3d5ffd5b50505050565b33737917e04eb4463cf80cc00040ba0f1ff125926ef314610a17575f80fd5b43600d55600e80546001600160a81b0319166001600160a01b0390921691909117600160a01b179055565b33735debadaf41ed55270e0f9944fd389745e73d29b914610a61575f80fd5b6040516313232c1360e11b8152600481018290526001600160a01b038316906326465826906024015f604051808303815f87803b158015610aa0575f80fd5b505af1158015610ab2573d5f803e3d5ffd5b505050505050565b33737917e04eb4463cf80cc00040ba0f1ff125926ef314610ad9575f80fd5b60405163d7b7142360e01b81526001600160a01b0380851660048301528316602482015260448101829052733a4da32dc29b146f26d8527e37feaae45fbebe699063d7b71423906064015b5f604051808303815f87803b158015610b3b575f80fd5b505af1158015610b4d573d5f803e3d5ffd5b50505050505050565b610b5e611577565b42600f55565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e14610b83575f80fd5b6040516364482f7960e01b8152600481018490526024810183905281151560448201525f80516020612120833981519152906364482f7990606401610b24565b33737917e04eb4463cf80cc00040ba0f1ff125926ef314610be2575f80fd5b43610beb611293565b600d54610bf89190612056565b10610c4a5760405162461bcd60e51b815260206004820152601960248201527f74696d652064656c6179206e6f7420796574207061737365640000000000000060448201526064015b60405180910390fd5b600e546040516321c17f3560e21b81526001600160a01b0390911660048201525f8051602061212083398151915290638705fcd4906024015f604051808303815f87803b158015610c99575f80fd5b505af1158015610cab573d5f803e3d5ffd5b5050600e546040516346c4548760e11b81526001600160a01b0390911660048201525f805160206121208339815191529250638d88a90e91506024015f604051808303815f87803b158015610cfe575f80fd5b505af1158015610d10573d5f803e3d5ffd5b5050600e5460405163f2fde38b60e01b81526001600160a01b0390911660048201525f80516020612120833981519152925063f2fde38b91506024015f604051808303815f87803b158015610d63575f80fd5b505af1158015610d75573d5f803e3d5ffd5b5050600e546040516370a0823160e01b815230600482015273faac6a85c3e123ab2cf7669b1024f146cfef0b38935063a9059cbb92506001600160a01b039091169083906370a0823190602401602060405180830381865afa158015610ddd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e01919061206f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610e49573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6d9190612027565b50600e5460405133916001600160a01b0316907f5296de069a121d7d0bc5ab079d0b2aaad96d23909ae242cabb658a592247ce62905f90a3565b33735debadaf41ed55270e0f9944fd389745e73d29b914610ec6575f80fd5b600855565b33735debadaf41ed55270e0f9944fd389745e73d29b914610eea575f80fd5b600955565b3373c77c66913b5f60522ccb98857228511930da740314610f0e575f80fd5b5f805160206121208339815191526001600160a01b0316639cc345596040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7b919061206f565b600a55565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e14610f9f575f80fd5b604051630852cd8d60e31b81526004810182905273faac6a85c3e123ab2cf7669b1024f146cfef0b38906342966c68906024015b5f604051808303815f87803b158015610fea575f80fd5b505af1158015610ffc573d5f803e3d5ffd5b5050505050565b600e54600160a01b900460ff166110495760405162461bcd60e51b815260206004820152600a6024820152696e6f742061637469766560b01b6044820152606401610c41565b600e5460405163050168c160e01b81526001600160a01b0390911660048201525f90737917e04eb4463cf80cc00040ba0f1ff125926ef39063050168c1906024016040805180830381865afa1580156110a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110c89190612086565b50905080156110df57600e805460ff60a01b191690555b50565b33735debadaf41ed55270e0f9944fd389745e73d29b914611101575f80fd5b6105dc8111156111445760405162461bcd60e51b815260206004820152600e60248201526d0c4d49481a185c99081b1a5b5a5d60921b6044820152606401610c41565b6001600160a01b039091165f90815260016020526040902055565b3373c77c66913b5f60522ccb98857228511930da74031461117e575f80fd5b600c8054905f61118d836120be565b9190505550565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e146111b3575f80fd5b815f036111c05760035550565b816001036111ce5760045550565b8160020361097f576109c48111156112195760405162461bcd60e51b815260206004820152600e60248201526d6d61782032352520426f6e75732160901b6044820152606401610c41565b60025550565b33735debadaf41ed55270e0f9944fd389745e73d29b91461123e575f80fd5b600755565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e14611262575f80fd5b60405163a3d7a33960e01b8152600481018290525f805160206121208339815191529063a3d7a33990602401610fd3565b5f62015180600554426112a691906120d6565b6112b091906120e9565b6112bb906064612108565b6112c79061a714612056565b905090565b5f5460ff16156113105760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818da185b99d959608a1b6044820152606401610c41565b60405163a5de999560e01b815260206004820152600a60248201526950696767792042616e6b60b01b604482015273faac6a85c3e123ab2cf7669b1024f146cfef0b389063a5de9995906064015f604051808303815f87803b158015611374575f80fd5b505af1158015611386573d5f803e3d5ffd5b505060405163020bcd2d60e21b815273faac6a85c3e123ab2cf7669b1024f146cfef0b38925063082f34b491506113d8906004016020808252600490820152634f494e4b60e01b604082015260600190565b5f604051808303815f87803b1580156113ef575f80fd5b505af1158015611401573d5f803e3d5ffd5b50505f805460ff191660011790555050565b3373c77c66913b5f60522ccb98857228511930da740314611432575f80fd5b60095460405163a9059cbb60e01b815273c77c66913b5f60522ccb98857228511930da74036004820152602481019190915273faac6a85c3e123ab2cf7669b1024f146cfef0b389063a9059cbb906044016020604051808303815f875af115801561149f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110df9190612027565b3373c77c66913b5f60522ccb98857228511930da7403146114e2575f80fd5b6040516305d4266960e11b8152600481018290525f8051602061212083398151915290630ba84cd2906024015f604051808303815f87803b158015611525575f80fd5b505af1158015611537573d5f803e3d5ffd5b505050507fa2c906d360736c15f8fc6c4b049228f49b9f4f8dbe56808aa82f316833a055be8160405161156c91815260200190565b60405180910390a150565b5f7339b3e852d6ffa1af6694ef87c062450de6778da86001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ec919061206f565b90505f739013b1067c52e897e713044de36c56bfda8ec9b46001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561163f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611663919061206f565b90505f73b180450f064e79adbfd71bc2fb086f9cd0af0d676001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116da919061206f565b90505f73c0483f1b0dcf601888ffd0d3a44b7124e80db7d16001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611751919061206f565b90505f7315b51ece819f3b51ce814de67bb2419660701a3c6001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117c8919061206f565b90505f73f3e82f4123d4262a2baec25b03652f3932a917396001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561181b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183f919061206f565b90505f818385876118508a8c612056565b61185a9190612056565b6118649190612056565b61186e9190612056565b6118789190612056565b90505f805160206121208339815191526364482f795f61189a84612710612108565b6118a88b631fc98320612108565b6118b291906120e9565b6040516001600160e01b031960e085901b16815260048101929092526024820152600160448201526064015f604051808303815f87803b1580156118f4575f80fd5b505af1158015611906573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f7991506001905061192e84612710612108565b61193c8a632faf0800612108565b61194691906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611987575f80fd5b505af1158015611999573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f799150600290506119c184612710612108565b6119cf896347868c00612108565b6119d991906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611a1a575f80fd5b505af1158015611a2c573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f79915060039050611a5484612710612108565b611a6288639ee7ee80612108565b611a6c91906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611aad575f80fd5b505af1158015611abf573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f79915060049050611ae784612710612108565b611af58763cea01e40612108565b611aff91906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611b40575f80fd5b505af1158015611b52573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f79915060059050611b7a84612710612108565b611b888663ee6b2800612108565b611b9291906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611bd3575f80fd5b505af1158015611be5573d5f803e3d5ffd5b5050505050505050505050565b33735debadaf41ed55270e0f9944fd389745e73d29b914611c11575f80fd5b60325f805160206121208339815191526001600160a01b031663081e3eda6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c80919061206f565b10611ccd5760405162461bcd60e51b815260206004820152601d60248201527f4d6178696d756d20706f6f6c7320616c6c6f77656420726561636865640000006044820152606401610c41565b604051631eaaa04560e01b81525f600482018190526001600160a01b038316602483015260448201525f8051602061212083398151915290631eaaa04590606401610fd3565b337339b3e852d6ffa1af6694ef87c062450de6778da81480611d48575033739013b1067c52e897e713044de36c56bfda8ec9b4145b80611d6657503373b180450f064e79adbfd71bc2fb086f9cd0af0d67145b80611d8457503373c0483f1b0dcf601888ffd0d3a44b7124e80db7d1145b80611da25750337315b51ece819f3b51ce814de67bb2419660701a3c145b80611dc057503373f3e82f4123d4262a2baec25b03652f3932a91739145b611dc8575f80fd5b60405163b3f5f65560e01b81526001600160a01b03858116600483015260248201849052604482018390525f606483015284169063b3f5f655906084015f604051808303815f87803b158015611e1c575f80fd5b505af1158015611e2e573d5f803e3d5ffd5b50505050826001600160a01b0316846001600160a01b03167fd1e293b75a6aeb3a9ab5df2765badd46e6e7c83a001a37e4b9cadea14c81837184604051611e7791815260200190565b60405180910390a350505050565b3373c77c66913b5f60522ccb98857228511930da740314611ea4575f80fd5b600b805460ff1916911515919091179055565b5f60208284031215611ec7575f80fd5b5035919050565b80356001600160a01b0381168114611ee4575f80fd5b919050565b5f60208284031215611ef9575f80fd5b611f0282611ece565b9392505050565b5f8060408385031215611f1a575f80fd5b611f2383611ece565b946020939093013593505050565b5f805f60608486031215611f43575f80fd5b611f4c84611ece565b9250611f5a60208501611ece565b9150604084013590509250925092565b80151581146110df575f80fd5b5f805f60608486031215611f89575f80fd5b83359250602084013591506040840135611fa281611f6a565b809150509250925092565b5f8060408385031215611fbe575f80fd5b50508035926020909101359150565b5f805f8060808587031215611fe0575f80fd5b611fe985611ece565b9350611ff760208601611ece565b93969395505050506040820135916060013590565b5f6020828403121561201c575f80fd5b8135611f0281611f6a565b5f60208284031215612037575f80fd5b8151611f0281611f6a565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561206957612069612042565b92915050565b5f6020828403121561207f575f80fd5b5051919050565b5f8060408385031215612097575f80fd5b82516120a281611f6a565b60208401519092506120b381611f6a565b809150509250929050565b5f600182016120cf576120cf612042565b5060010190565b8181038181111561206957612069612042565b5f8261210357634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176120695761206961204256fe000000000000000000000000486fea20ea242456b450b005ed7d019e3e984f28a26469706673582212203dff04f4b099dabe4d5ef757aea2e2d4a46684dac14238896f399a6e3083e89064736f6c63430008140033