false
true
0

Contract Address Details

0x331146b366c0Cd2AcA542ce71E5D6fb66bf07D16

Contract Name
DTXgovernor
Creator
0xc6eda6–db69f1 at 0x112cfc–017170
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
498 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
26094993
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

Verify & Publish
0x60806040525f805460ff1990811682556101f460025560039190915560c86004556367a089dd600555683635c9adc5dea00000600755620151806008556a165578eecf9d0ffb000000600955682e141ea081ca080000600a55600b8054909116905534801561006c575f80fd5b50600160205260647f1ed23b59e307d4b395cdb4ccedf51573eef081a4416fe4192ebaba6acac261705560c87fd0c22ceb79238b5d37fb21fc3cead9ac52ec10705ae3dac8a1300f33ea364d315561012c7f66bc91977f21c32c7cecc7eb25e0a4f45d09b809312ff8c03cc971de08f4bb48556101907fadad7966390b6a248861eb78c38f4d17f511d46ec564842f2136eb6d498a15bb556101c27ff83745987463ebc570bc6734ec910f562485d93325d5754d291271f110f9b8bf5573f3e82f4123d4262a2baec25b03652f3932a917395f526101f47f8f6744ec1edb91f5898599bfffb9d6904db666335df5468cde7044c029a437d355612175806101725f395ff3fe608060405234801561000f575f80fd5b5060043610610401575f3560e01c80637843687f11610216578063c4c57bad1161012a578063e0e01a61116100b4578063f0929fc811610084578063f0929fc81461085b578063f2fa0bb01461086e578063f7bd54f714610889578063fb1db278146108a4578063fc0c546a146108b8575f80fd5b8063e0e01a6114610823578063e4f135041461082b578063e5f59bc11461083e578063ed49d2f814610851575f80fd5b8063d3b7c511116100fa578063d3b7c511146107d0578063d9a7430e146107d8578063ddd80b21146107e0578063ded6e1c9146107e8578063e0a8ed5214610810575f80fd5b8063c4c57bad1461078f578063c63c4e9b146107aa578063ce7842f5146107b4578063d06482e5146107bd575f80fd5b8063a83a33dd116101ab578063b1e370081161017b578063b1e370081461071a578063b2922ec414610735578063b60f053114610750578063bb20d1e114610759578063c24375cf14610774575f80fd5b8063a83a33dd146106e2578063aaf5ab8d146106ea578063ae885352146106fe578063aec9299814610707575f80fd5b80639d2252bc116101e65780639d2252bc146106af5780639eb0e965146106b6578063a569e896146106d1578063a7708fb3146106da575f80fd5b80637843687f1461066c5780638b60a3ee146106755780638fe850aa14610688578063931cc2d414610694575f80fd5b80634ed3dded1161031857806367a52793116102a25780636ea69d62116102725780636ea69d62146106255780636f3d35421461064057806373d95bc5146106485780637668702a1461065b57806376b4c85c14610663575f80fd5b806367a52793146105f75780636953f4ae146106005780636a0ab9a9146106095780636d1b229d14610612575f80fd5b80635ec232f1116102e85780635ec232f11461059b578063615cef7d146105b65780636355a2bb146105c9578063655ea8eb146105dc57806366813f63146105e4575f80fd5b80634ed3dded1461056757806351a41dec1461056f5780635553c956146105785780635d85fa1814610580575f80fd5b80632a9f51d7116103995780633ab3feb2116103695780633ab3feb21461052057806341d3c84c146105285780634626402b146105315780634641257d1461054c57806346ca6bea14610554575f80fd5b80632a9f51d7146104d65780632b976cf6146104f15780632d72b8641461050457806334733cc914610517575f80fd5b806324955846116103d457806324955846146104705780632838225814610483578063296d77fb1461049e5780632a5626f2146104b9575f80fd5b8063063d11de146104055780630919475d1461041a578063092b4a3e1461043557806309609a2d14610468575b5f80fd5b610418610413366004611eb7565b6108d3565b005b610422600181565b6040519081526020015b60405180910390f35b61045073f3e82f4123d4262a2baec25b03652f3932a9173981565b6040516001600160a01b03909116815260200161042c565b610418610983565b61041861047e366004611ee9565b6109f8565b61045073140f16365d05dcc84fa489194cd022d5cbee4cb281565b610450739013b1067c52e897e713044de36c56bfda8ec9b481565b600b546104c69060ff1681565b604051901515815260200161042c565b6104507339b3e852d6ffa1af6694ef87c062450de6778da881565b6104186104ff366004611f09565b610a42565b610418610512366004611f31565b610aba565b61042260085481565b610422600281565b61042260045481565b610450733a4da32dc29b146f26d8527e37feaae45fbebe6981565b610418610b56565b610418610562366004611f77565b610b64565b610422600581565b61042260075481565b610418610bc3565b61045073147b43930283d1dde43d805b7f17e4604b7ca49381565b61045073c0483f1b0dcf601888ffd0d3a44b7124e80db7d181565b6104186105c4366004611eb7565b610ea7565b6104186105d7366004611eb7565b610ecb565b610418610eef565b600e54610450906001600160a01b031681565b61042260035481565b61042260055481565b610422600d5481565b610418610620366004611eb7565b610f80565b61045073066f0a45801bcbc5232b11ed4b97c39e1369fe5981565b610418611003565b610418610656366004611f09565b6110e2565b61041861115f565b610422600c5481565b61042260065481565b610418610683366004611fad565b611194565b5f546104c69060ff1681565b610450737917e04eb4463cf80cc00040ba0f1ff125926ef381565b6104225f81565b610450730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e81565b610422600a5481565b610422600381565b610422600481565b600e546104c690600160a01b900460ff1681565b61042260095481565b610418610715366004611eb7565b61121f565b6104507326e6e614c46da4c459d0db2121a986672f603c0081565b61045073b180450f064e79adbfd71bc2fb086f9cd0af0d6781565b610422600f5481565b61045073c77c66913b5f60522ccb98857228511930da740381565b61045073cf14dbcffa6e99a444539abbc9ae273a7bb5d75a81565b61045073d8508461e8134e25dc630871566b1551e797e1a781565b6104226201518081565b61042260025481565b6104186107cb366004611eb7565b611243565b610422611293565b6104186112cc565b610418611413565b6104226107f6366004611ee9565b6001600160a01b03165f9081526001602052604090205490565b61041861081e366004611eb7565b6114c3565b610418611577565b610418610839366004611ee9565b611bf2565b61041861084c366004611fcd565b611d13565b6104226228de8081565b61041861086936600461200c565b611e85565b6104507315b51ece819f3b51ce814de67bb2419660701a3c81565b610450735debadaf41ed55270e0f9944fd389745e73d29b981565b6104505f8051602061212083398151915281565b61045073faac6a85c3e123ab2cf7669b1024f146cfef0b3881565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e146108f2575f80fd5b60405163a9059cbb60e01b8152733a4da32dc29b146f26d8527e37feaae45fbebe6960048201526024810182905273faac6a85c3e123ab2cf7669b1024f146cfef0b389063a9059cbb906044016020604051808303815f875af115801561095b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097f9190612027565b5050565b604051631bfc726f60e21b815273faac6a85c3e123ab2cf7669b1024f146cfef0b38600482015273a6b1e4fc9ecd29e9438421a32023e0b8d677d6fc90636ff1c9bc906024015f604051808303815f87803b1580156109e0575f80fd5b505af11580156109f2573d5f803e3d5ffd5b50505050565b33737917e04eb4463cf80cc00040ba0f1ff125926ef314610a17575f80fd5b43600d55600e80546001600160a81b0319166001600160a01b0390921691909117600160a01b179055565b33735debadaf41ed55270e0f9944fd389745e73d29b914610a61575f80fd5b6040516313232c1360e11b8152600481018290526001600160a01b038316906326465826906024015f604051808303815f87803b158015610aa0575f80fd5b505af1158015610ab2573d5f803e3d5ffd5b505050505050565b33737917e04eb4463cf80cc00040ba0f1ff125926ef314610ad9575f80fd5b60405163d7b7142360e01b81526001600160a01b0380851660048301528316602482015260448101829052733a4da32dc29b146f26d8527e37feaae45fbebe699063d7b71423906064015b5f604051808303815f87803b158015610b3b575f80fd5b505af1158015610b4d573d5f803e3d5ffd5b50505050505050565b610b5e611577565b42600f55565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e14610b83575f80fd5b6040516364482f7960e01b8152600481018490526024810183905281151560448201525f80516020612120833981519152906364482f7990606401610b24565b33737917e04eb4463cf80cc00040ba0f1ff125926ef314610be2575f80fd5b43610beb611293565b600d54610bf89190612056565b10610c4a5760405162461bcd60e51b815260206004820152601960248201527f74696d652064656c6179206e6f7420796574207061737365640000000000000060448201526064015b60405180910390fd5b600e546040516321c17f3560e21b81526001600160a01b0390911660048201525f8051602061212083398151915290638705fcd4906024015f604051808303815f87803b158015610c99575f80fd5b505af1158015610cab573d5f803e3d5ffd5b5050600e546040516346c4548760e11b81526001600160a01b0390911660048201525f805160206121208339815191529250638d88a90e91506024015f604051808303815f87803b158015610cfe575f80fd5b505af1158015610d10573d5f803e3d5ffd5b5050600e5460405163f2fde38b60e01b81526001600160a01b0390911660048201525f80516020612120833981519152925063f2fde38b91506024015f604051808303815f87803b158015610d63575f80fd5b505af1158015610d75573d5f803e3d5ffd5b5050600e546040516370a0823160e01b815230600482015273faac6a85c3e123ab2cf7669b1024f146cfef0b38935063a9059cbb92506001600160a01b039091169083906370a0823190602401602060405180830381865afa158015610ddd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e01919061206f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610e49573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6d9190612027565b50600e5460405133916001600160a01b0316907f5296de069a121d7d0bc5ab079d0b2aaad96d23909ae242cabb658a592247ce62905f90a3565b33735debadaf41ed55270e0f9944fd389745e73d29b914610ec6575f80fd5b600855565b33735debadaf41ed55270e0f9944fd389745e73d29b914610eea575f80fd5b600955565b3373c77c66913b5f60522ccb98857228511930da740314610f0e575f80fd5b5f805160206121208339815191526001600160a01b0316639cc345596040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7b919061206f565b600a55565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e14610f9f575f80fd5b604051630852cd8d60e31b81526004810182905273faac6a85c3e123ab2cf7669b1024f146cfef0b38906342966c68906024015b5f604051808303815f87803b158015610fea575f80fd5b505af1158015610ffc573d5f803e3d5ffd5b5050505050565b600e54600160a01b900460ff166110495760405162461bcd60e51b815260206004820152600a6024820152696e6f742061637469766560b01b6044820152606401610c41565b600e5460405163050168c160e01b81526001600160a01b0390911660048201525f90737917e04eb4463cf80cc00040ba0f1ff125926ef39063050168c1906024016040805180830381865afa1580156110a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110c89190612086565b50905080156110df57600e805460ff60a01b191690555b50565b33735debadaf41ed55270e0f9944fd389745e73d29b914611101575f80fd5b6105dc8111156111445760405162461bcd60e51b815260206004820152600e60248201526d0c4d49481a185c99081b1a5b5a5d60921b6044820152606401610c41565b6001600160a01b039091165f90815260016020526040902055565b3373c77c66913b5f60522ccb98857228511930da74031461117e575f80fd5b600c8054905f61118d836120be565b9190505550565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e146111b3575f80fd5b815f036111c05760035550565b816001036111ce5760045550565b8160020361097f576109c48111156112195760405162461bcd60e51b815260206004820152600e60248201526d6d61782032352520426f6e75732160901b6044820152606401610c41565b60025550565b33735debadaf41ed55270e0f9944fd389745e73d29b91461123e575f80fd5b600755565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e14611262575f80fd5b60405163a3d7a33960e01b8152600481018290525f805160206121208339815191529063a3d7a33990602401610fd3565b5f62015180600554426112a691906120d6565b6112b091906120e9565b6112bb906064612108565b6112c79061a714612056565b905090565b5f5460ff16156113105760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818da185b99d959608a1b6044820152606401610c41565b60405163a5de999560e01b815260206004820152600a60248201526950696767792042616e6b60b01b604482015273faac6a85c3e123ab2cf7669b1024f146cfef0b389063a5de9995906064015f604051808303815f87803b158015611374575f80fd5b505af1158015611386573d5f803e3d5ffd5b505060405163020bcd2d60e21b815273faac6a85c3e123ab2cf7669b1024f146cfef0b38925063082f34b491506113d8906004016020808252600490820152634f494e4b60e01b604082015260600190565b5f604051808303815f87803b1580156113ef575f80fd5b505af1158015611401573d5f803e3d5ffd5b50505f805460ff191660011790555050565b3373c77c66913b5f60522ccb98857228511930da740314611432575f80fd5b60095460405163a9059cbb60e01b815273c77c66913b5f60522ccb98857228511930da74036004820152602481019190915273faac6a85c3e123ab2cf7669b1024f146cfef0b389063a9059cbb906044016020604051808303815f875af115801561149f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110df9190612027565b3373c77c66913b5f60522ccb98857228511930da7403146114e2575f80fd5b6040516305d4266960e11b8152600481018290525f8051602061212083398151915290630ba84cd2906024015f604051808303815f87803b158015611525575f80fd5b505af1158015611537573d5f803e3d5ffd5b505050507fa2c906d360736c15f8fc6c4b049228f49b9f4f8dbe56808aa82f316833a055be8160405161156c91815260200190565b60405180910390a150565b5f7339b3e852d6ffa1af6694ef87c062450de6778da86001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ec919061206f565b90505f739013b1067c52e897e713044de36c56bfda8ec9b46001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561163f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611663919061206f565b90505f73b180450f064e79adbfd71bc2fb086f9cd0af0d676001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116da919061206f565b90505f73c0483f1b0dcf601888ffd0d3a44b7124e80db7d16001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611751919061206f565b90505f7315b51ece819f3b51ce814de67bb2419660701a3c6001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117c8919061206f565b90505f73f3e82f4123d4262a2baec25b03652f3932a917396001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561181b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183f919061206f565b90505f818385876118508a8c612056565b61185a9190612056565b6118649190612056565b61186e9190612056565b6118789190612056565b90505f805160206121208339815191526364482f795f61189a84612710612108565b6118a88b631fc98320612108565b6118b291906120e9565b6040516001600160e01b031960e085901b16815260048101929092526024820152600160448201526064015f604051808303815f87803b1580156118f4575f80fd5b505af1158015611906573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f7991506001905061192e84612710612108565b61193c8a632faf0800612108565b61194691906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611987575f80fd5b505af1158015611999573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f799150600290506119c184612710612108565b6119cf896347868c00612108565b6119d991906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611a1a575f80fd5b505af1158015611a2c573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f79915060039050611a5484612710612108565b611a6288639ee7ee80612108565b611a6c91906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611aad575f80fd5b505af1158015611abf573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f79915060049050611ae784612710612108565b611af58763cea01e40612108565b611aff91906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611b40575f80fd5b505af1158015611b52573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f79915060059050611b7a84612710612108565b611b888663ee6b2800612108565b611b9291906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611bd3575f80fd5b505af1158015611be5573d5f803e3d5ffd5b5050505050505050505050565b33735debadaf41ed55270e0f9944fd389745e73d29b914611c11575f80fd5b60325f805160206121208339815191526001600160a01b031663081e3eda6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c80919061206f565b10611ccd5760405162461bcd60e51b815260206004820152601d60248201527f4d6178696d756d20706f6f6c7320616c6c6f77656420726561636865640000006044820152606401610c41565b604051631eaaa04560e01b81525f600482018190526001600160a01b038316602483015260448201525f8051602061212083398151915290631eaaa04590606401610fd3565b337339b3e852d6ffa1af6694ef87c062450de6778da81480611d48575033739013b1067c52e897e713044de36c56bfda8ec9b4145b80611d6657503373b180450f064e79adbfd71bc2fb086f9cd0af0d67145b80611d8457503373c0483f1b0dcf601888ffd0d3a44b7124e80db7d1145b80611da25750337315b51ece819f3b51ce814de67bb2419660701a3c145b80611dc057503373f3e82f4123d4262a2baec25b03652f3932a91739145b611dc8575f80fd5b60405163b3f5f65560e01b81526001600160a01b03858116600483015260248201849052604482018390525f606483015284169063b3f5f655906084015f604051808303815f87803b158015611e1c575f80fd5b505af1158015611e2e573d5f803e3d5ffd5b50505050826001600160a01b0316846001600160a01b03167fd1e293b75a6aeb3a9ab5df2765badd46e6e7c83a001a37e4b9cadea14c81837184604051611e7791815260200190565b60405180910390a350505050565b3373c77c66913b5f60522ccb98857228511930da740314611ea4575f80fd5b600b805460ff1916911515919091179055565b5f60208284031215611ec7575f80fd5b5035919050565b80356001600160a01b0381168114611ee4575f80fd5b919050565b5f60208284031215611ef9575f80fd5b611f0282611ece565b9392505050565b5f8060408385031215611f1a575f80fd5b611f2383611ece565b946020939093013593505050565b5f805f60608486031215611f43575f80fd5b611f4c84611ece565b9250611f5a60208501611ece565b9150604084013590509250925092565b80151581146110df575f80fd5b5f805f60608486031215611f89575f80fd5b83359250602084013591506040840135611fa281611f6a565b809150509250925092565b5f8060408385031215611fbe575f80fd5b50508035926020909101359150565b5f805f8060808587031215611fe0575f80fd5b611fe985611ece565b9350611ff760208601611ece565b93969395505050506040820135916060013590565b5f6020828403121561201c575f80fd5b8135611f0281611f6a565b5f60208284031215612037575f80fd5b8151611f0281611f6a565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561206957612069612042565b92915050565b5f6020828403121561207f575f80fd5b5051919050565b5f8060408385031215612097575f80fd5b82516120a281611f6a565b60208401519092506120b381611f6a565b809150509250929050565b5f600182016120cf576120cf612042565b5060010190565b8181038181111561206957612069612042565b5f8261210357634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176120695761206961204256fe000000000000000000000000486fea20ea242456b450b005ed7d019e3e984f28a26469706673582212203dff04f4b099dabe4d5ef757aea2e2d4a46684dac14238896f399a6e3083e89064736f6c63430008140033

Deployed ByteCode

0x608060405234801561000f575f80fd5b5060043610610401575f3560e01c80637843687f11610216578063c4c57bad1161012a578063e0e01a61116100b4578063f0929fc811610084578063f0929fc81461085b578063f2fa0bb01461086e578063f7bd54f714610889578063fb1db278146108a4578063fc0c546a146108b8575f80fd5b8063e0e01a6114610823578063e4f135041461082b578063e5f59bc11461083e578063ed49d2f814610851575f80fd5b8063d3b7c511116100fa578063d3b7c511146107d0578063d9a7430e146107d8578063ddd80b21146107e0578063ded6e1c9146107e8578063e0a8ed5214610810575f80fd5b8063c4c57bad1461078f578063c63c4e9b146107aa578063ce7842f5146107b4578063d06482e5146107bd575f80fd5b8063a83a33dd116101ab578063b1e370081161017b578063b1e370081461071a578063b2922ec414610735578063b60f053114610750578063bb20d1e114610759578063c24375cf14610774575f80fd5b8063a83a33dd146106e2578063aaf5ab8d146106ea578063ae885352146106fe578063aec9299814610707575f80fd5b80639d2252bc116101e65780639d2252bc146106af5780639eb0e965146106b6578063a569e896146106d1578063a7708fb3146106da575f80fd5b80637843687f1461066c5780638b60a3ee146106755780638fe850aa14610688578063931cc2d414610694575f80fd5b80634ed3dded1161031857806367a52793116102a25780636ea69d62116102725780636ea69d62146106255780636f3d35421461064057806373d95bc5146106485780637668702a1461065b57806376b4c85c14610663575f80fd5b806367a52793146105f75780636953f4ae146106005780636a0ab9a9146106095780636d1b229d14610612575f80fd5b80635ec232f1116102e85780635ec232f11461059b578063615cef7d146105b65780636355a2bb146105c9578063655ea8eb146105dc57806366813f63146105e4575f80fd5b80634ed3dded1461056757806351a41dec1461056f5780635553c956146105785780635d85fa1814610580575f80fd5b80632a9f51d7116103995780633ab3feb2116103695780633ab3feb21461052057806341d3c84c146105285780634626402b146105315780634641257d1461054c57806346ca6bea14610554575f80fd5b80632a9f51d7146104d65780632b976cf6146104f15780632d72b8641461050457806334733cc914610517575f80fd5b806324955846116103d457806324955846146104705780632838225814610483578063296d77fb1461049e5780632a5626f2146104b9575f80fd5b8063063d11de146104055780630919475d1461041a578063092b4a3e1461043557806309609a2d14610468575b5f80fd5b610418610413366004611eb7565b6108d3565b005b610422600181565b6040519081526020015b60405180910390f35b61045073f3e82f4123d4262a2baec25b03652f3932a9173981565b6040516001600160a01b03909116815260200161042c565b610418610983565b61041861047e366004611ee9565b6109f8565b61045073140f16365d05dcc84fa489194cd022d5cbee4cb281565b610450739013b1067c52e897e713044de36c56bfda8ec9b481565b600b546104c69060ff1681565b604051901515815260200161042c565b6104507339b3e852d6ffa1af6694ef87c062450de6778da881565b6104186104ff366004611f09565b610a42565b610418610512366004611f31565b610aba565b61042260085481565b610422600281565b61042260045481565b610450733a4da32dc29b146f26d8527e37feaae45fbebe6981565b610418610b56565b610418610562366004611f77565b610b64565b610422600581565b61042260075481565b610418610bc3565b61045073147b43930283d1dde43d805b7f17e4604b7ca49381565b61045073c0483f1b0dcf601888ffd0d3a44b7124e80db7d181565b6104186105c4366004611eb7565b610ea7565b6104186105d7366004611eb7565b610ecb565b610418610eef565b600e54610450906001600160a01b031681565b61042260035481565b61042260055481565b610422600d5481565b610418610620366004611eb7565b610f80565b61045073066f0a45801bcbc5232b11ed4b97c39e1369fe5981565b610418611003565b610418610656366004611f09565b6110e2565b61041861115f565b610422600c5481565b61042260065481565b610418610683366004611fad565b611194565b5f546104c69060ff1681565b610450737917e04eb4463cf80cc00040ba0f1ff125926ef381565b6104225f81565b610450730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e81565b610422600a5481565b610422600381565b610422600481565b600e546104c690600160a01b900460ff1681565b61042260095481565b610418610715366004611eb7565b61121f565b6104507326e6e614c46da4c459d0db2121a986672f603c0081565b61045073b180450f064e79adbfd71bc2fb086f9cd0af0d6781565b610422600f5481565b61045073c77c66913b5f60522ccb98857228511930da740381565b61045073cf14dbcffa6e99a444539abbc9ae273a7bb5d75a81565b61045073d8508461e8134e25dc630871566b1551e797e1a781565b6104226201518081565b61042260025481565b6104186107cb366004611eb7565b611243565b610422611293565b6104186112cc565b610418611413565b6104226107f6366004611ee9565b6001600160a01b03165f9081526001602052604090205490565b61041861081e366004611eb7565b6114c3565b610418611577565b610418610839366004611ee9565b611bf2565b61041861084c366004611fcd565b611d13565b6104226228de8081565b61041861086936600461200c565b611e85565b6104507315b51ece819f3b51ce814de67bb2419660701a3c81565b610450735debadaf41ed55270e0f9944fd389745e73d29b981565b6104505f8051602061212083398151915281565b61045073faac6a85c3e123ab2cf7669b1024f146cfef0b3881565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e146108f2575f80fd5b60405163a9059cbb60e01b8152733a4da32dc29b146f26d8527e37feaae45fbebe6960048201526024810182905273faac6a85c3e123ab2cf7669b1024f146cfef0b389063a9059cbb906044016020604051808303815f875af115801561095b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097f9190612027565b5050565b604051631bfc726f60e21b815273faac6a85c3e123ab2cf7669b1024f146cfef0b38600482015273a6b1e4fc9ecd29e9438421a32023e0b8d677d6fc90636ff1c9bc906024015f604051808303815f87803b1580156109e0575f80fd5b505af11580156109f2573d5f803e3d5ffd5b50505050565b33737917e04eb4463cf80cc00040ba0f1ff125926ef314610a17575f80fd5b43600d55600e80546001600160a81b0319166001600160a01b0390921691909117600160a01b179055565b33735debadaf41ed55270e0f9944fd389745e73d29b914610a61575f80fd5b6040516313232c1360e11b8152600481018290526001600160a01b038316906326465826906024015f604051808303815f87803b158015610aa0575f80fd5b505af1158015610ab2573d5f803e3d5ffd5b505050505050565b33737917e04eb4463cf80cc00040ba0f1ff125926ef314610ad9575f80fd5b60405163d7b7142360e01b81526001600160a01b0380851660048301528316602482015260448101829052733a4da32dc29b146f26d8527e37feaae45fbebe699063d7b71423906064015b5f604051808303815f87803b158015610b3b575f80fd5b505af1158015610b4d573d5f803e3d5ffd5b50505050505050565b610b5e611577565b42600f55565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e14610b83575f80fd5b6040516364482f7960e01b8152600481018490526024810183905281151560448201525f80516020612120833981519152906364482f7990606401610b24565b33737917e04eb4463cf80cc00040ba0f1ff125926ef314610be2575f80fd5b43610beb611293565b600d54610bf89190612056565b10610c4a5760405162461bcd60e51b815260206004820152601960248201527f74696d652064656c6179206e6f7420796574207061737365640000000000000060448201526064015b60405180910390fd5b600e546040516321c17f3560e21b81526001600160a01b0390911660048201525f8051602061212083398151915290638705fcd4906024015f604051808303815f87803b158015610c99575f80fd5b505af1158015610cab573d5f803e3d5ffd5b5050600e546040516346c4548760e11b81526001600160a01b0390911660048201525f805160206121208339815191529250638d88a90e91506024015f604051808303815f87803b158015610cfe575f80fd5b505af1158015610d10573d5f803e3d5ffd5b5050600e5460405163f2fde38b60e01b81526001600160a01b0390911660048201525f80516020612120833981519152925063f2fde38b91506024015f604051808303815f87803b158015610d63575f80fd5b505af1158015610d75573d5f803e3d5ffd5b5050600e546040516370a0823160e01b815230600482015273faac6a85c3e123ab2cf7669b1024f146cfef0b38935063a9059cbb92506001600160a01b039091169083906370a0823190602401602060405180830381865afa158015610ddd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e01919061206f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610e49573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6d9190612027565b50600e5460405133916001600160a01b0316907f5296de069a121d7d0bc5ab079d0b2aaad96d23909ae242cabb658a592247ce62905f90a3565b33735debadaf41ed55270e0f9944fd389745e73d29b914610ec6575f80fd5b600855565b33735debadaf41ed55270e0f9944fd389745e73d29b914610eea575f80fd5b600955565b3373c77c66913b5f60522ccb98857228511930da740314610f0e575f80fd5b5f805160206121208339815191526001600160a01b0316639cc345596040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7b919061206f565b600a55565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e14610f9f575f80fd5b604051630852cd8d60e31b81526004810182905273faac6a85c3e123ab2cf7669b1024f146cfef0b38906342966c68906024015b5f604051808303815f87803b158015610fea575f80fd5b505af1158015610ffc573d5f803e3d5ffd5b5050505050565b600e54600160a01b900460ff166110495760405162461bcd60e51b815260206004820152600a6024820152696e6f742061637469766560b01b6044820152606401610c41565b600e5460405163050168c160e01b81526001600160a01b0390911660048201525f90737917e04eb4463cf80cc00040ba0f1ff125926ef39063050168c1906024016040805180830381865afa1580156110a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110c89190612086565b50905080156110df57600e805460ff60a01b191690555b50565b33735debadaf41ed55270e0f9944fd389745e73d29b914611101575f80fd5b6105dc8111156111445760405162461bcd60e51b815260206004820152600e60248201526d0c4d49481a185c99081b1a5b5a5d60921b6044820152606401610c41565b6001600160a01b039091165f90815260016020526040902055565b3373c77c66913b5f60522ccb98857228511930da74031461117e575f80fd5b600c8054905f61118d836120be565b9190505550565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e146111b3575f80fd5b815f036111c05760035550565b816001036111ce5760045550565b8160020361097f576109c48111156112195760405162461bcd60e51b815260206004820152600e60248201526d6d61782032352520426f6e75732160901b6044820152606401610c41565b60025550565b33735debadaf41ed55270e0f9944fd389745e73d29b91461123e575f80fd5b600755565b33730dc0fabe4c9d57ccad055b4cd627d0d24fa3c98e14611262575f80fd5b60405163a3d7a33960e01b8152600481018290525f805160206121208339815191529063a3d7a33990602401610fd3565b5f62015180600554426112a691906120d6565b6112b091906120e9565b6112bb906064612108565b6112c79061a714612056565b905090565b5f5460ff16156113105760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818da185b99d959608a1b6044820152606401610c41565b60405163a5de999560e01b815260206004820152600a60248201526950696767792042616e6b60b01b604482015273faac6a85c3e123ab2cf7669b1024f146cfef0b389063a5de9995906064015f604051808303815f87803b158015611374575f80fd5b505af1158015611386573d5f803e3d5ffd5b505060405163020bcd2d60e21b815273faac6a85c3e123ab2cf7669b1024f146cfef0b38925063082f34b491506113d8906004016020808252600490820152634f494e4b60e01b604082015260600190565b5f604051808303815f87803b1580156113ef575f80fd5b505af1158015611401573d5f803e3d5ffd5b50505f805460ff191660011790555050565b3373c77c66913b5f60522ccb98857228511930da740314611432575f80fd5b60095460405163a9059cbb60e01b815273c77c66913b5f60522ccb98857228511930da74036004820152602481019190915273faac6a85c3e123ab2cf7669b1024f146cfef0b389063a9059cbb906044016020604051808303815f875af115801561149f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110df9190612027565b3373c77c66913b5f60522ccb98857228511930da7403146114e2575f80fd5b6040516305d4266960e11b8152600481018290525f8051602061212083398151915290630ba84cd2906024015f604051808303815f87803b158015611525575f80fd5b505af1158015611537573d5f803e3d5ffd5b505050507fa2c906d360736c15f8fc6c4b049228f49b9f4f8dbe56808aa82f316833a055be8160405161156c91815260200190565b60405180910390a150565b5f7339b3e852d6ffa1af6694ef87c062450de6778da86001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ec919061206f565b90505f739013b1067c52e897e713044de36c56bfda8ec9b46001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561163f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611663919061206f565b90505f73b180450f064e79adbfd71bc2fb086f9cd0af0d676001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116da919061206f565b90505f73c0483f1b0dcf601888ffd0d3a44b7124e80db7d16001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611751919061206f565b90505f7315b51ece819f3b51ce814de67bb2419660701a3c6001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117c8919061206f565b90505f73f3e82f4123d4262a2baec25b03652f3932a917396001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561181b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183f919061206f565b90505f818385876118508a8c612056565b61185a9190612056565b6118649190612056565b61186e9190612056565b6118789190612056565b90505f805160206121208339815191526364482f795f61189a84612710612108565b6118a88b631fc98320612108565b6118b291906120e9565b6040516001600160e01b031960e085901b16815260048101929092526024820152600160448201526064015f604051808303815f87803b1580156118f4575f80fd5b505af1158015611906573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f7991506001905061192e84612710612108565b61193c8a632faf0800612108565b61194691906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611987575f80fd5b505af1158015611999573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f799150600290506119c184612710612108565b6119cf896347868c00612108565b6119d991906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611a1a575f80fd5b505af1158015611a2c573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f79915060039050611a5484612710612108565b611a6288639ee7ee80612108565b611a6c91906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611aad575f80fd5b505af1158015611abf573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f79915060049050611ae784612710612108565b611af58763cea01e40612108565b611aff91906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611b40575f80fd5b505af1158015611b52573d5f803e3d5ffd5b505f8051602061212083398151915292506364482f79915060059050611b7a84612710612108565b611b888663ee6b2800612108565b611b9291906120e9565b6040516001600160e01b031960e085901b168152600481019290925260248201525f60448201526064015f604051808303815f87803b158015611bd3575f80fd5b505af1158015611be5573d5f803e3d5ffd5b5050505050505050505050565b33735debadaf41ed55270e0f9944fd389745e73d29b914611c11575f80fd5b60325f805160206121208339815191526001600160a01b031663081e3eda6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c80919061206f565b10611ccd5760405162461bcd60e51b815260206004820152601d60248201527f4d6178696d756d20706f6f6c7320616c6c6f77656420726561636865640000006044820152606401610c41565b604051631eaaa04560e01b81525f600482018190526001600160a01b038316602483015260448201525f8051602061212083398151915290631eaaa04590606401610fd3565b337339b3e852d6ffa1af6694ef87c062450de6778da81480611d48575033739013b1067c52e897e713044de36c56bfda8ec9b4145b80611d6657503373b180450f064e79adbfd71bc2fb086f9cd0af0d67145b80611d8457503373c0483f1b0dcf601888ffd0d3a44b7124e80db7d1145b80611da25750337315b51ece819f3b51ce814de67bb2419660701a3c145b80611dc057503373f3e82f4123d4262a2baec25b03652f3932a91739145b611dc8575f80fd5b60405163b3f5f65560e01b81526001600160a01b03858116600483015260248201849052604482018390525f606483015284169063b3f5f655906084015f604051808303815f87803b158015611e1c575f80fd5b505af1158015611e2e573d5f803e3d5ffd5b50505050826001600160a01b0316846001600160a01b03167fd1e293b75a6aeb3a9ab5df2765badd46e6e7c83a001a37e4b9cadea14c81837184604051611e7791815260200190565b60405180910390a350505050565b3373c77c66913b5f60522ccb98857228511930da740314611ea4575f80fd5b600b805460ff1916911515919091179055565b5f60208284031215611ec7575f80fd5b5035919050565b80356001600160a01b0381168114611ee4575f80fd5b919050565b5f60208284031215611ef9575f80fd5b611f0282611ece565b9392505050565b5f8060408385031215611f1a575f80fd5b611f2383611ece565b946020939093013593505050565b5f805f60608486031215611f43575f80fd5b611f4c84611ece565b9250611f5a60208501611ece565b9150604084013590509250925092565b80151581146110df575f80fd5b5f805f60608486031215611f89575f80fd5b83359250602084013591506040840135611fa281611f6a565b809150509250925092565b5f8060408385031215611fbe575f80fd5b50508035926020909101359150565b5f805f8060808587031215611fe0575f80fd5b611fe985611ece565b9350611ff760208601611ece565b93969395505050506040820135916060013590565b5f6020828403121561201c575f80fd5b8135611f0281611f6a565b5f60208284031215612037575f80fd5b8151611f0281611f6a565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561206957612069612042565b92915050565b5f6020828403121561207f575f80fd5b5051919050565b5f8060408385031215612097575f80fd5b82516120a281611f6a565b60208401519092506120b381611f6a565b809150509250929050565b5f600182016120cf576120cf612042565b5060010190565b8181038181111561206957612069612042565b5f8261210357634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176120695761206961204256fe000000000000000000000000486fea20ea242456b450b005ed7d019e3e984f28a26469706673582212203dff04f4b099dabe4d5ef757aea2e2d4a46684dac14238896f399a6e3083e89064736f6c63430008140033