false
true
0

Contract Address Details

0x486fEa20eA242456b450B005ED7D019E3E984f28

Contract Name
DTXChef
Creator
0xc6eda6–db69f1 at 0x1b17f3–3b5370
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
34 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
26096896
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
DTXChef




Optimization enabled
true
Compiler version
v0.8.20+commit.a1b79de6




Optimization runs
200
EVM Version
default




Verified at
2023-09-29T08:42:30.327508Z

Constructor Arguments

0x000000000000000000000000faac6a85c3e123ab2cf7669b1024f146cfef0b38000000000000000000000000e87c806f8afa1ce543ab3c44d1c4b130b83574ce

Arg [0] (address) : 0xfaac6a85c3e123ab2cf7669b1024f146cfef0b38
Arg [1] (address) : 0xe87c806f8afa1ce543ab3c44d1c4b130b83574ce

              

Contract source code

// File: MAINNET/PulseDAO-main (8)/PulseDAO-main/contracts/interface/IGovernor.sol


// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol v0.8.0. SEE SOURCE BELOW. !!
pragma solidity >=0.7.0 <0.9.0;

interface IGovernor {
    event EnforceGovernor(address _newGovernor, address indexed enforcer);
    event GiveRolloverBonus(
        address recipient,
        uint256 amount,
        address poolInto
    );
    event Harvest(address indexed sender, uint256 callFee);
    event Multisig(
        address signer,
        address newGovernor,
        bool sign,
        uint256 idToVoteFor
    );
    event SetInflation(uint256 rewardPerBlock);
    event TransferOwner(address newOwner, uint256 timestamp);

    function acPool1() external view returns (address);

    function acPool1ID() external view returns (uint256);

    function acPool2() external view returns (address);

    function acPool2ID() external view returns (uint256);

    function acPool3() external view returns (address);

    function acPool3ID() external view returns (uint256);

    function acPool4() external view returns (address);

    function acPool4ID() external view returns (uint256);

    function acPool5() external view returns (address);

    function acPool5ID() external view returns (uint256);

    function acPool6() external view returns (address);

    function acPool6ID() external view returns (uint256);

    function allocationPercentages(uint256) external view returns (uint256);

    function basicContract() external view returns (address);

    function beginMintingPhase() external;

    function burnTokens(uint256 amount) external;

    function changeGovernorActivated() external view returns (bool);

    function changeGovernorForSecurityPriorMintingBegins(address _newGovernor)
        external;

    function consensusContract() external view returns (address);

    function costToVote() external view returns (uint256);

    function creditContract() external view returns (address);

    function delayBeforeEnforce() external view returns (uint256);

    function eligibleNewGovernor() external view returns (address);

    function enforceGovernor() external;

    function eventFibonacceningActive() external view returns (bool);

    function farmContract() external view returns (address);

    function fibonacceningContract() external view returns (address);

    function getRollBonus(address _bonusForPool)
        external
        view
        returns (uint256);

    function governorRejected() external;

    function harvest() external;

    function hexVault() external view returns (address);

    function incVault() external view returns (address);

    function isInflationStatic() external view returns (bool);

    function lastHarvestedTime() external view returns (uint256);

    function lastRegularReward() external view returns (uint256);

    function masterchef() external view returns (address);

    function maxDelay() external view returns (uint256);

    function minDelay() external view returns (uint256);

    function mintingPhaseLaunchDate() external view returns (uint256);

    function newGovernorBlockDelay() external view returns (uint256);

    function newGovernorRequestBlock() external view returns (uint256);

    function nftAllocationContract() external view returns (address);

    function nftStakingContract() external view returns (address);

    function nftStakingPoolID() external view returns (uint256);

    function nftWallet() external view returns (address);

    function pendingHarvestRewards() external view returns (uint256);

    function plsVault() external view returns (address);

    function plsxVault() external view returns (address);

    function postGrandFibIncreaseCount() external;

    function rebalancePools() external;

    function referralBonus() external view returns (uint256);

    function rememberReward() external;

    function rewardContract() external view returns (address);

    function senateContract() external view returns (address);

    function setActivateFibonaccening(bool _arg) external;

    function setCallFee(address _acPool, uint256 _newCallFee) external;

    function setGovernorTax(uint256 _amount) external;

    function setInflation(uint256 rewardPerBlock) external;

    function setNewGovernor(address beneficiary) external;

    function setPool(
        uint256 _pid,
        uint256 _allocPoint,
        bool _withUpdate
    ) external;

    function setThresholdFibonaccening(uint256 newThreshold) external;

    function stakeRolloverBonus(
        address _toAddress,
        address _depositToPool,
        uint256 _bonusToPay,
        uint256 _stakeID
    ) external;

    function thresholdFibonaccening() external view returns (uint256);

    function token() external view returns (address);

    function tokenDistributionContract() external view returns (address);

    function tokenDistributionContractExtraPenalty()
        external
        view
        returns (address);

    function tokensSentForReferralRewards() external view returns (uint256);

    function totalFibonacciEventsAfterGrand() external view returns (uint256);

    function transferCollectedFees(address _tokenContract) external;

    function transferRewardBoostThreshold() external;

    function transferToReferralContract() external;

    function transferToTreasury(uint256 amount) external;

    function treasuryRequest(
        address _tokenAddr,
        address _recipient,
        uint256 _amountToSend
    ) external;

    function treasuryWallet() external view returns (address);

    function tshareVault() external view returns (address);

    function updateCostToVote(uint256 newCostToVote) external;

    function updateDelayBeforeEnforce(uint256 newDelay) external;

    function updateDelayBetweenEvents(uint256 _amount) external;

    function updateGrandEventLength(uint256 _amount) external;

    function updateRolloverBonus(address _forPool, uint256 _bonus) external;

    function updateVault(uint256 _type, uint256 _amount) external;
}

// File: MAINNET/PulseDAO-main (8)/PulseDAO-main/contracts/interface/ISenate.sol


// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol v0.8.0. SEE SOURCE BELOW. !!
pragma solidity >=0.7.0 <0.9.0;
pragma experimental ABIEncoderV2;

interface ISenate {
    event AddSenator(address senator);
    event AddVote(address voter, uint256 proposalId);
    event RemoveSenator(address senator);
    event RemoveVote(address voter, uint256 proposalId);

    function addSenator(address _newSenator) external;

    function addedSenator(address) external view returns (bool);

    function expandSenate(address _newSenator) external;

    function expellSenator(address _senator) external;

    function grantVotingCredit() external;

    function initializeSenators(address[] memory _senators) external;

    function isSenator(address) external view returns (bool);

    function lastTotalCreditGiven() external view returns (uint256);

    function lastVotingCreditGrant() external view returns (uint256);

    function massAdd(address[] memory _senators) external;

    function maxSenators() external view returns (uint256);

    function minSenators() external view returns (uint256);

    function multiCall()
        external
        view
        returns (
            address[] memory,
            uint256[][] memory,
            uint256[] memory,
            uint256,
            uint256[] memory
        );

    function owner() external view returns (address);

    function removeVote(uint256 proposalId) external;

    function selfReplaceSenator(address _newSenator) external;

    function senatorCount() external view returns (uint256);

    function senatorVotes(address, uint256) external view returns (uint256);

    function senators(uint256) external view returns (address);

    function setSenatorCount(uint256 _min, uint256 _max) external;

    function toUint(address self) external pure returns (uint256);

    function token() external view returns (address);

    function vetoProposal(
        uint256 consensusProposalId,
        uint256 treasuryProposalId
    ) external;

    function viewSenators() external view returns (address[] memory);

    function vote(uint256 proposalId) external;

    function votesForProposal(uint256) external view returns (uint256);
}

// THIS FILE WAS AUTOGENERATED FROM THE FOLLOWING ABI JSON:
/*
[{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"senator","type":"address"}],"name":"AddSenator","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"AddVote","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"senator","type":"address"}],"name":"RemoveSenator","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"RemoveVote","type":"event"},{"inputs":[{"internalType":"address","name":"_newSenator","type":"address"}],"name":"addSenator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addedSenator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newSenator","type":"address"}],"name":"expandSenate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_senator","type":"address"}],"name":"expellSenator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"grantVotingCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_senators","type":"address[]"}],"name":"initializeSenators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSenator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTotalCreditGiven","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastVotingCreditGrant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_senators","type":"address[]"}],"name":"massAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSenators","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSenators","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"multiCall","outputs":[{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[][]","name":"","type":"uint256[][]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"removeVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newSenator","type":"address"}],"name":"selfReplaceSenator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"senatorCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"senatorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"senators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setSenatorCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"self","type":"address"}],"name":"toUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"consensusProposalId","type":"uint256"},{"internalType":"uint256","name":"treasuryProposalId","type":"uint256"}],"name":"vetoProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewSenators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"votesForProposal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
*/

// File: MAINNET/PulseDAO-main (8)/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: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: MAINNET/PulseDAO-main (8)/PulseDAO-main/contracts/masterchef.sol


pragma solidity 0.8.20;








contract DTXChef is Ownable {
	using SafeMath for uint256;

    // Info of each pool.
    struct PoolInfo {       // Address of LP token contract.
        uint256 allocPoint;       // How many allocation points assigned to this pool. DTXs to distribute per block.
        uint256 lastRewardBlock;  // Last block number that DTXs distribution occurs.
        address participant;   // participating contract    
    }

    // The DTX TOKEN!
    IDTX public dtx;
    // Dev address.
    address public devaddr;
	//portion of inflation goes to the decentralized governance contract
	uint256 public governorFee = 618; //6.18%
    // DTX tokens created per block.
    uint256 public DTXPerBlock = 850 * 1e18; // start at 850 tokens per block (*roughly* 50,000 tokens per 10minutes; Bitcoin started with 50 BTC per 10minutes)
    // Deposit Fee address
    address public feeAddress;

	bool maxSupplyReached = false;

	// Total tokens published to senate
	uint256 public fairTokensPublishedToSenate;
	// Tokens already accounted for as rewards to senate
	uint256 public totalCreditRewardsAtLastFairMint;

    // Info of each pool.
    PoolInfo[] public poolInfo;
	// User Credit (can publish such amount of tokens)
	mapping(address => uint256) public credit;
	// Does Pool Already Exist?
	mapping(address => bool) public existingParticipant;
    // Total allocation points. Must be the sum of all allocation points in all pools.
    uint256 public totalAllocPoint = 0;
    // The block number when DTX mining starts.
    uint256 public startBlock = 99999999; // arbitrary date ( is updated when minting phase begins )
	// Keep track of total credit given 
	uint256 public totalCreditRewards;
	// Keep track of principal burned
	uint256 public totalPrincipalBurned;
	// Keep track of total tokens published (by users)
	uint256 public totalPublished;
	

	bool public senatorRewards = true;
	
	 // can burn tokens without allowance
	mapping(address => bool) public trustedContract;
	//makes it easier to verify(without event logs)
	uint256 public trustedContractCount; 

	event UpdateEmissions(address indexed user, uint256 newEmissions);
	event TrustedContract(address contractAddress, bool setting);
	event TransferCredit(address from, address to, uint256 amount);

    constructor(
        IDTX _DTX,
	address _airdropFull
    ) {
        dtx = _DTX;
        devaddr = msg.sender;
        feeAddress = msg.sender;
	    credit[_airdropFull] = 1080000000 * 1e18;
		totalCreditRewards = 1080000000 * 1e18;
    }
	
	function publishTokens(address _to, uint256 _amount) external {
		require(credit[msg.sender] >= _amount, "Insufficient credit");
		credit[msg.sender] = credit[msg.sender] - _amount;
		totalPublished+=_amount;
		dtx.mint(_to, _amount);
	}
	
	function burn(address _from, uint256 _amount) external returns (bool) {
		require(trustedContract[msg.sender], "only trusted contracts");
		require(dtx.burnToken(_from, _amount), "burn failed");
		credit[msg.sender] = credit[msg.sender] + _amount;
		totalPrincipalBurned+= _amount;
		return true;
	}
    
    function massAdd(uint256[] calldata _allocPoint, address[] calldata _participant, bool[] calldata _withUpdate) external {
        require(_allocPoint.length == _participant.length && _allocPoint.length == _withUpdate.length);
        for(uint i=0; i < _allocPoint.length; i++) {
            add(_allocPoint[i], _participant[i], _withUpdate[i]);
        }
    }

	// In case pools are changed (on migration old contract transfers it's credit to the new one)
	function transferCredit(address _to, uint256 _amount) external {
        require(credit[msg.sender] >= _amount, "insufficient credit for transfer!");
		credit[msg.sender] = credit[msg.sender] - _amount;
		credit[_to] = credit[_to] + _amount;
		emit TransferCredit(msg.sender, _to, _amount);
	}

	function fairMintSenate() external {
		require(senatorRewards, "senator rewards are turned off");
        require(block.number > startBlock, "Must wait until minting phase begins!");

		address[] memory senators = ISenate(IGovernor(owner()).senateContract()).viewSenators();
		uint256 _senatorRewardAmount;
		if(senators.length <= 100) {
			_senatorRewardAmount = 100; // 0.01%
		} else {
			_senatorRewardAmount = 10000 / senators.length; // 1% shared between all the senators
		}
		uint256 _amount = ((totalCreditRewards - totalCreditRewardsAtLastFairMint) * _senatorRewardAmount) / 1000000;

		for(uint i=0; i < senators.length; i++) {
			credit[senators[i]]+= _amount;
		}

		fairTokensPublishedToSenate+= senators.length * _amount;
		totalCreditRewards+= senators.length * _amount;
		totalCreditRewardsAtLastFairMint = totalCreditRewards;
	}

	// renounce rewards once maximum supply would be breached
	// if there is an "overflow", tokens can simply be burned from the governing contract
	function renounceRewards() external {
		require(virtualTotalSupply() >= dtx.MAX_SUPPLY(), "Max supply not yet reached!");
		governorFee = 0;
		massUpdatePools();

		DTXPerBlock = 0;
		maxSupplyReached = true;

		emit UpdateEmissions(tx.origin, 0);
	}

    // Update the given pool's XPD allocation point and deposit fee. Can only be called by the owner.
    function set(uint256 _pid, uint256 _allocPoint, bool _withUpdate) external onlyOwner {
        if (_withUpdate) {
            massUpdatePools();
        }
        totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);
        poolInfo[_pid].allocPoint = _allocPoint;
    }

	function startPublishing(uint256 _pid, address _participant, uint256 _alloc) external onlyOwner {
		require(poolInfo[_pid].allocPoint == 0 && poolInfo[_pid].participant == address(0), "already earning");
        updatePool(_pid);
        poolInfo[_pid].participant = _participant;
        poolInfo[_pid].allocPoint = _alloc;
        totalAllocPoint = totalAllocPoint.add(_alloc);
    }

    function stopPublishing(uint256 _pid) external onlyOwner {
        updatePool(_pid);
        poolInfo[_pid].participant = address(0);
		totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint);
        poolInfo[_pid].allocPoint = 0;
    }

	//only owner can set trusted Contracts
	function setTrustedContract(address _contractAddress, bool _setting) external onlyOwner {
		if(trustedContract[_contractAddress] != _setting) { 
			trustedContract[_contractAddress] = _setting;
			_setting ? trustedContractCount++ : trustedContractCount--;
			emit TrustedContract(_contractAddress, _setting);
		}
	}

	function setGovernorFee(uint256 _amount) external onlyOwner {
		require(_amount <= 1000 && _amount >= 0);
		governorFee = _amount;
	}

    // Update dev address by the previous dev.
    function dev(address _devaddr) external onlyOwner {
        devaddr = _devaddr;
    }

    function setFeeAddress(address _feeAddress) external onlyOwner {
        feeAddress = _feeAddress;
    }

    //Pancake has to add hidden dummy pools inorder to alter the emission, here we make it simple and transparent to all.
    function updateEmissionRate(uint256 _DTXPerBlock) external onlyOwner {
        if(!maxSupplyReached) {
			massUpdatePools();
	        DTXPerBlock = _DTXPerBlock;
		} else {
			DTXPerBlock = 0;
		}
		
		emit UpdateEmissions(tx.origin, _DTXPerBlock);
    }

    // Once Merkle Tree Root is submitted, start block is updated
    function updateStartBlock(uint256 _startBlock) external onlyOwner {
        require(block.number < startBlock, "already started");
		startBlock = _startBlock;

		uint256 length = poolInfo.length;
        for (uint256 pid = 0; pid < length; ++pid) {
            poolInfo[pid].lastRewardBlock = _startBlock;
        }
    }
	
	//For flexibility(can transfer to new masterchef if need be!)
	function tokenChangeOwnership(address _newOwner) external onlyOwner {
		dtx.transferOwnership(_newOwner);
	}

	function rewardSenators(bool _e) external onlyOwner {
		senatorRewards = _e;
	}

	// Update reward variables for all pools. Be careful of gas spending!
    function massUpdatePools() public {
        uint256 length = poolInfo.length;
        for (uint256 pid = 0; pid < length; ++pid) {
            updatePool(pid);
        }
    }

	// Update reward variables of the given pool to be up-to-date.
    function updatePool(uint256 _pid) public {
        PoolInfo storage pool = poolInfo[_pid];
        if (block.number <= pool.lastRewardBlock) {
            return;
        }
        if (pool.participant == address(0) || pool.allocPoint == 0) {
            pool.lastRewardBlock = block.number;
            return;
        }
        uint256 multiplier = block.number.sub(pool.lastRewardBlock);
        uint256 dtxReward = multiplier.mul(DTXPerBlock).mul(pool.allocPoint).div(totalAllocPoint);
        dtx.mint(devaddr, dtxReward.mul(governorFee).div(10000));
		credit[pool.participant] = credit[pool.participant] + dtxReward;
		totalCreditRewards+=dtxReward;
        pool.lastRewardBlock = block.number;
    }

	// Add a new lp to the pool. Can only be called by the owner.
    function add(uint256 _allocPoint, address _participant, bool _withUpdate) public onlyOwner {
		require(!existingParticipant[_participant], "contract already participating");
		
        if (_withUpdate) {
            massUpdatePools();
        }
        uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock;
        totalAllocPoint = totalAllocPoint.add(_allocPoint);
		existingParticipant[_participant] = true;
        poolInfo.push(PoolInfo({
            allocPoint: _allocPoint,
            lastRewardBlock: lastRewardBlock,
            participant: _participant
        }));
    }

	// View function to see pending DTXs on frontend.
    function pendingDtx(uint256 _pid) external view returns (uint256) {
        PoolInfo storage pool = poolInfo[_pid];
        if (block.number > pool.lastRewardBlock && pool.participant != address(0)) {
            uint256 multiplier = block.number.sub(pool.lastRewardBlock);
            uint256 dtxReward = multiplier.mul(DTXPerBlock).mul(pool.allocPoint).div(totalAllocPoint);
            return dtxReward;
        }
        return 0;
    }

	function poolLength() external view returns (uint256) {
        return poolInfo.length;
    }

	function virtualTotalSupply() public view returns (uint256) {
		return (dtx.totalSupply() + totalCreditRewards + totalPrincipalBurned - totalPublished);
	}
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_DTX","internalType":"contract IDTX"},{"type":"address","name":"_airdropFull","internalType":"address"}]},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"TransferCredit","inputs":[{"type":"address","name":"from","internalType":"address","indexed":false},{"type":"address","name":"to","internalType":"address","indexed":false},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"TrustedContract","inputs":[{"type":"address","name":"contractAddress","internalType":"address","indexed":false},{"type":"bool","name":"setting","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"UpdateEmissions","inputs":[{"type":"address","name":"user","internalType":"address","indexed":true},{"type":"uint256","name":"newEmissions","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"DTXPerBlock","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"add","inputs":[{"type":"uint256","name":"_allocPoint","internalType":"uint256"},{"type":"address","name":"_participant","internalType":"address"},{"type":"bool","name":"_withUpdate","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"burn","inputs":[{"type":"address","name":"_from","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"credit","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"dev","inputs":[{"type":"address","name":"_devaddr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"devaddr","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDTX"}],"name":"dtx","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"existingParticipant","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"fairMintSenate","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"fairTokensPublishedToSenate","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"feeAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"governorFee","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"massAdd","inputs":[{"type":"uint256[]","name":"_allocPoint","internalType":"uint256[]"},{"type":"address[]","name":"_participant","internalType":"address[]"},{"type":"bool[]","name":"_withUpdate","internalType":"bool[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"massUpdatePools","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"pendingDtx","inputs":[{"type":"uint256","name":"_pid","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"allocPoint","internalType":"uint256"},{"type":"uint256","name":"lastRewardBlock","internalType":"uint256"},{"type":"address","name":"participant","internalType":"address"}],"name":"poolInfo","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"poolLength","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"publishTokens","inputs":[{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceRewards","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rewardSenators","inputs":[{"type":"bool","name":"_e","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"senatorRewards","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"set","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":"setFeeAddress","inputs":[{"type":"address","name":"_feeAddress","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setGovernorFee","inputs":[{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTrustedContract","inputs":[{"type":"address","name":"_contractAddress","internalType":"address"},{"type":"bool","name":"_setting","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"startBlock","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"startPublishing","inputs":[{"type":"uint256","name":"_pid","internalType":"uint256"},{"type":"address","name":"_participant","internalType":"address"},{"type":"uint256","name":"_alloc","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"stopPublishing","inputs":[{"type":"uint256","name":"_pid","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"tokenChangeOwnership","inputs":[{"type":"address","name":"_newOwner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalAllocPoint","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalCreditRewards","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalCreditRewardsAtLastFairMint","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalPrincipalBurned","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalPublished","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferCredit","inputs":[{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"trustedContract","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"trustedContractCount","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateEmissionRate","inputs":[{"type":"uint256","name":"_DTXPerBlock","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updatePool","inputs":[{"type":"uint256","name":"_pid","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateStartBlock","inputs":[{"type":"uint256","name":"_startBlock","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"virtualTotalSupply","inputs":[]}]
              

Contract Creation Code

Verify & Publish
0x608060405261026a600355682e141ea081ca0800006004556005805460ff60a01b191690555f600b556305f5e0ff600c556010805460ff1916600117905534801562000049575f80fd5b5060405162001e5738038062001e578339810160408190526200006c916200013c565b6200007733620000d5565b600180546001600160a01b039384166001600160a01b0319918216179091556002805482163390811790915560058054909216179055165f9081526009602052604090206b037d5ae550708a7f3800000090819055600d5562000179565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811462000139575f80fd5b50565b5f80604083850312156200014e575f80fd5b82516200015b8162000124565b60208401519092506200016e8162000124565b809150509250929050565b611cd080620001875f395ff3fe608060405234801561000f575f80fd5b506004361061026b575f3560e01c8063715018a61161014b578063a12428c6116100bf578063ccb09b5211610084578063ccb09b5214610522578063d37bee181461052a578063d49e77cd14610533578063d5d44d8014610546578063f2fde38b14610565578063fac2b9ba14610578575f80fd5b8063a12428c6146104c3578063a3d7a339146104d6578063b2ca2f06146104e9578063b6ec0561146104fc578063cc58a6bb1461050f575f80fd5b80638d88a90e116101105780638d88a90e146104595780638da5cb5b1461046c5780638e24a4631461047c57806398b838081461049e5780639cc34559146104a75780639dc29fac146104b0575f80fd5b8063715018a61461040057806376a9e32e146104085780638061f1321461041b57806380d6806e1461043d5780638705fcd414610446575f80fd5b8063387473aa116101e25780635be4d442116101a75780635be4d442146103ad5780635c28afbb146103c05780635d91d76a146103c9578063624eb438146103dc578063630b5ba1146103e557806364482f79146103ed575f80fd5b8063387473aa14610355578063412753581461035d57806348cd4cb11461038857806351eb05a6146103915780635494d983146103a4575f80fd5b8063145192981161023357806314519298146102d35780631526fe27146102dc57806317caf6f1146103135780631eaaa0451461031c57806320c689261461032f5780632a98027514610342575f80fd5b806303cfa7d91461026f578063081e3eda146102845780630ba84cd21461029b5780631360a0ca146102ae57806313aecab1146102cb575b5f80fd5b61028261027d36600461186f565b61058b565b005b6008545b6040519081526020015b60405180910390f35b6102826102a936600461186f565b61063e565b6010546102bb9060ff1681565b6040519015158152602001610292565b6102886106a6565b610288600f5481565b6102ef6102ea36600461186f565b610747565b6040805193845260208401929092526001600160a01b031690820152606001610292565b610288600b5481565b61028261032a3660046118a7565b610781565b61028261033d3660046118e6565b610907565b61028261035036600461191b565b610a3b565b610282610b37565b600554610370906001600160a01b031681565b6040516001600160a01b039091168152602001610292565b610288600c5481565b61028261039f36600461186f565b610dc3565b610288600e5481565b6102826103bb366004611945565b610f5f565b610288600d5481565b6102826103d73660046119c4565b61102a565b61028860075481565b6102826110cf565b6102826103fb366004611a57565b6110f5565b61028261115a565b610282610416366004611a82565b61116d565b6102bb610429366004611a82565b60116020525f908152604090205460ff1681565b61028860035481565b610282610454366004611a82565b6111d2565b610282610467366004611a82565b6111fc565b5f546001600160a01b0316610370565b6102bb61048a366004611a82565b600a6020525f908152604090205460ff1681565b61028860065481565b61028860045481565b6102bb6104be36600461191b565b611226565b6102826104d1366004611a9d565b611379565b6102826104e436600461186f565b611394565b600154610370906001600160a01b031681565b61028861050a36600461186f565b6113b9565b61028261051d36600461191b565b61144e565b610282611556565b61028860125481565b600254610370906001600160a01b031681565b610288610554366004611a82565b60096020525f908152604090205481565b610282610573366004611a82565b611682565b61028261058636600461186f565b6116fb565b610593611794565b61059c81610dc3565b5f600882815481106105b0576105b0611ab8565b905f5260205f2090600302016002015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550610611600882815481106105f8576105f8611ab8565b5f918252602090912060039091020154600b54906117ed565b600b819055505f6008828154811061062b5761062b611ab8565b5f91825260209091206003909102015550565b610646611794565b600554600160a01b900460ff166106695761065f6110cf565b600481905561066e565b5f6004555b60405181815232907fa03d71d21200bfbbb6335bb3f935b1de0d1a7244d68665ae0e6584f07754effa9060200160405180910390a250565b5f600f54600e54600d5460015f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610700573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107249190611acc565b61072e9190611af7565b6107389190611af7565b6107429190611b0a565b905090565b60088181548110610756575f80fd5b5f9182526020909120600390910201805460018201546002909201549092506001600160a01b031683565b610789611794565b6001600160a01b0382165f908152600a602052604090205460ff16156107f65760405162461bcd60e51b815260206004820152601e60248201527f636f6e747261637420616c72656164792070617274696369706174696e67000060448201526064015b60405180910390fd5b8015610804576108046110cf565b5f600c54431161081657600c54610818565b435b600b5490915061082890856117ff565b600b556001600160a01b039283165f818152600a602090815260408083208054600160ff1990911681179091558151606081018352988952918801948552870192835260088054918201815590915294517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee360039096029586015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee4850155517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee590930180546001600160a01b0319169390921692909217905550565b61090f611794565b6008838154811061092257610922611ab8565b905f5260205f2090600302015f01545f14801561097557505f6001600160a01b03166008848154811061095757610957611ab8565b5f9182526020909120600260039092020101546001600160a01b0316145b6109b35760405162461bcd60e51b815260206004820152600f60248201526e616c7265616479206561726e696e6760881b60448201526064016107ed565b6109bc83610dc3565b81600884815481106109d0576109d0611ab8565b905f5260205f2090600302016002015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060088481548110610a1657610a16611ab8565b5f918252602090912060039091020155600b54610a3390826117ff565b600b55505050565b335f90815260096020526040902054811115610a8f5760405162461bcd60e51b8152602060048201526013602482015272125b9cdd59999a58da595b9d0818dc99591a5d606a1b60448201526064016107ed565b335f90815260096020526040902054610aa9908290611b0a565b335f90815260096020526040812091909155600f8054839290610acd908490611af7565b90915550506001546040516340c10f1960e01b81526001600160a01b03848116600483015260248201849052909116906340c10f19906044015f604051808303815f87803b158015610b1d575f80fd5b505af1158015610b2f573d5f803e3d5ffd5b505050505050565b60105460ff16610b895760405162461bcd60e51b815260206004820152601e60248201527f73656e61746f72207265776172647320617265207475726e6564206f6666000060448201526064016107ed565b600c544311610be85760405162461bcd60e51b815260206004820152602560248201527f4d757374207761697420756e74696c206d696e74696e6720706861736520626560448201526467696e732160d81b60648201526084016107ed565b5f80546001600160a01b03166001600160a01b0316635d85fa186040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c539190611b2d565b6001600160a01b0316637ae282896040518163ffffffff1660e01b81526004015f60405180830381865afa158015610c8d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610cb49190810190611b5c565b90505f6064825111610cc857506064610cd9565b8151610cd690612710611c1c565b90505b5f620f424082600754600d54610cef9190611b0a565b610cf99190611c3b565b610d039190611c1c565b90505f5b8351811015610d73578160095f868481518110610d2657610d26611ab8565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f828254610d5b9190611af7565b90915550819050610d6b81611c52565b915050610d07565b50808351610d819190611c3b565b60065f828254610d919190611af7565b90915550508251610da3908290611c3b565b600d5f828254610db39190611af7565b9091555050600d54600755505050565b5f60088281548110610dd757610dd7611ab8565b905f5260205f209060030201905080600101544311610df4575050565b60028101546001600160a01b03161580610e0d57508054155b15610e1c574360019091015550565b5f610e348260010154436117ed90919063ffffffff16565b90505f610e65600b54610e5f855f0154610e596004548761180a90919063ffffffff16565b9061180a565b90611815565b6001546002546003549293506001600160a01b03918216926340c10f199290911690610e9a9061271090610e5f90879061180a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015610edd575f80fd5b505af1158015610eef573d5f803e3d5ffd5b50505060028401546001600160a01b03165f90815260096020526040902054610f1a91508290611af7565b60028401546001600160a01b03165f90815260096020526040812091909155600d8054839290610f4b908490611af7565b909155505043600190930192909255505050565b610f67611794565b6001600160a01b0382165f9081526011602052604090205460ff16151581151514611026576001600160a01b0382165f908152601160205260409020805460ff191682151517905580610fcc5760128054905f610fc383611c6a565b91905055610fe0565b60128054905f610fdb83611c52565b919050555b50604080516001600160a01b038416815282151560208201527fe2ad9d0600e2a93ef46991efd2c22f65f9ebe472487cc7551647bc52d793289991015b60405180910390a15b5050565b848314801561103857508481145b611040575f80fd5b5f5b858110156110c6576110b487878381811061105f5761105f611ab8565b9050602002013586868481811061107857611078611ab8565b905060200201602081019061108d9190611a82565b85858581811061109f5761109f611ab8565b905060200201602081019061032a9190611a9d565b806110be81611c52565b915050611042565b50505050505050565b6008545f5b81811015611026576110e581610dc3565b6110ee81611c52565b90506110d4565b6110fd611794565b801561110b5761110b6110cf565b61112b82611125600886815481106105f8576105f8611ab8565b906117ff565b600b81905550816008848154811061114557611145611ab8565b5f918252602090912060039091020155505050565b611162611794565b61116b5f611820565b565b611175611794565b60015460405163f2fde38b60e01b81526001600160a01b0383811660048301529091169063f2fde38b906024015f604051808303815f87803b1580156111b9575f80fd5b505af11580156111cb573d5f803e3d5ffd5b5050505050565b6111da611794565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b611204611794565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b335f9081526011602052604081205460ff1661127d5760405162461bcd60e51b81526020600482015260166024820152756f6e6c79207472757374656420636f6e74726163747360501b60448201526064016107ed565b600154604051633477cc1b60e21b81526001600160a01b038581166004830152602482018590529091169063d1df306c906044016020604051808303815f875af11580156112cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112f19190611c7f565b61132b5760405162461bcd60e51b815260206004820152600b60248201526a189d5c9b8819985a5b195960aa1b60448201526064016107ed565b335f90815260096020526040902054611345908390611af7565b335f90815260096020526040812091909155600e8054849290611369908490611af7565b9091555060019150505b92915050565b611381611794565b6010805460ff1916911515919091179055565b61139c611794565b6103e881111580156113ac575060015b6113b4575f80fd5b600355565b5f80600883815481106113ce576113ce611ab8565b905f5260205f20906003020190508060010154431180156113fb575060028101546001600160a01b031615155b15611446575f6114188260010154436117ed90919063ffffffff16565b90505f61143d600b54610e5f855f0154610e596004548761180a90919063ffffffff16565b95945050505050565b505f92915050565b335f908152600960205260409020548111156114b65760405162461bcd60e51b815260206004820152602160248201527f696e73756666696369656e742063726564697420666f72207472616e736665726044820152602160f81b60648201526084016107ed565b335f908152600960205260409020546114d0908290611b0a565b335f90815260096020526040808220929092556001600160a01b038416815220546114fc908290611af7565b6001600160a01b0383165f818152600960209081526040918290209390935580513381529283019190915281018290527fbfa5afa9ccfabe79b0b21f2a9d778cf773b963e00307dd68c96abc3a30c5d3be9060600161101d565b60015f9054906101000a90046001600160a01b03166001600160a01b03166332cb6b0c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ca9190611acc565b6115d26106a6565b10156116205760405162461bcd60e51b815260206004820152601b60248201527f4d617820737570706c79206e6f7420796574207265616368656421000000000060448201526064016107ed565b5f60035561162c6110cf565b5f60048190556005805460ff60a01b1916600160a01b17905560405132917fa03d71d21200bfbbb6335bb3f935b1de0d1a7244d68665ae0e6584f07754effa9161167891815260200190565b60405180910390a2565b61168a611794565b6001600160a01b0381166116ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107ed565b6116f881611820565b50565b611703611794565b600c5443106117465760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481cdd185c9d1959608a1b60448201526064016107ed565b600c8190556008545f5b8181101561178f57826008828154811061176c5761176c611ab8565b5f91825260209091206001600390920201015561178881611c52565b9050611750565b505050565b5f546001600160a01b0316331461116b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ed565b5f6117f88284611b0a565b9392505050565b5f6117f88284611af7565b5f6117f88284611c3b565b5f6117f88284611c1c565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6020828403121561187f575f80fd5b5035919050565b6001600160a01b03811681146116f8575f80fd5b80151581146116f8575f80fd5b5f805f606084860312156118b9575f80fd5b8335925060208401356118cb81611886565b915060408401356118db8161189a565b809150509250925092565b5f805f606084860312156118f8575f80fd5b83359250602084013561190a81611886565b929592945050506040919091013590565b5f806040838503121561192c575f80fd5b823561193781611886565b946020939093013593505050565b5f8060408385031215611956575f80fd5b823561196181611886565b915060208301356119718161189a565b809150509250929050565b5f8083601f84011261198c575f80fd5b50813567ffffffffffffffff8111156119a3575f80fd5b6020830191508360208260051b85010111156119bd575f80fd5b9250929050565b5f805f805f80606087890312156119d9575f80fd5b863567ffffffffffffffff808211156119f0575f80fd5b6119fc8a838b0161197c565b90985096506020890135915080821115611a14575f80fd5b611a208a838b0161197c565b90965094506040890135915080821115611a38575f80fd5b50611a4589828a0161197c565b979a9699509497509295939492505050565b5f805f60608486031215611a69575f80fd5b833592506020840135915060408401356118db8161189a565b5f60208284031215611a92575f80fd5b81356117f881611886565b5f60208284031215611aad575f80fd5b81356117f88161189a565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611adc575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561137357611373611ae3565b8181038181111561137357611373611ae3565b8051611b2881611886565b919050565b5f60208284031215611b3d575f80fd5b81516117f881611886565b634e487b7160e01b5f52604160045260245ffd5b5f6020808385031215611b6d575f80fd5b825167ffffffffffffffff80821115611b84575f80fd5b818501915085601f830112611b97575f80fd5b815181811115611ba957611ba9611b48565b8060051b604051601f19603f83011681018181108582111715611bce57611bce611b48565b604052918252848201925083810185019188831115611beb575f80fd5b938501935b82851015611c1057611c0185611b1d565b84529385019392850192611bf0565b98975050505050505050565b5f82611c3657634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761137357611373611ae3565b5f60018201611c6357611c63611ae3565b5060010190565b5f81611c7857611c78611ae3565b505f190190565b5f60208284031215611c8f575f80fd5b81516117f88161189a56fea26469706673582212208ac122380701361e0ec4d61311bf6526e7b9d74ba55b343ce9b7be36ebf16db964736f6c63430008140033000000000000000000000000faac6a85c3e123ab2cf7669b1024f146cfef0b38000000000000000000000000e87c806f8afa1ce543ab3c44d1c4b130b83574ce

Deployed ByteCode

0x608060405234801561000f575f80fd5b506004361061026b575f3560e01c8063715018a61161014b578063a12428c6116100bf578063ccb09b5211610084578063ccb09b5214610522578063d37bee181461052a578063d49e77cd14610533578063d5d44d8014610546578063f2fde38b14610565578063fac2b9ba14610578575f80fd5b8063a12428c6146104c3578063a3d7a339146104d6578063b2ca2f06146104e9578063b6ec0561146104fc578063cc58a6bb1461050f575f80fd5b80638d88a90e116101105780638d88a90e146104595780638da5cb5b1461046c5780638e24a4631461047c57806398b838081461049e5780639cc34559146104a75780639dc29fac146104b0575f80fd5b8063715018a61461040057806376a9e32e146104085780638061f1321461041b57806380d6806e1461043d5780638705fcd414610446575f80fd5b8063387473aa116101e25780635be4d442116101a75780635be4d442146103ad5780635c28afbb146103c05780635d91d76a146103c9578063624eb438146103dc578063630b5ba1146103e557806364482f79146103ed575f80fd5b8063387473aa14610355578063412753581461035d57806348cd4cb11461038857806351eb05a6146103915780635494d983146103a4575f80fd5b8063145192981161023357806314519298146102d35780631526fe27146102dc57806317caf6f1146103135780631eaaa0451461031c57806320c689261461032f5780632a98027514610342575f80fd5b806303cfa7d91461026f578063081e3eda146102845780630ba84cd21461029b5780631360a0ca146102ae57806313aecab1146102cb575b5f80fd5b61028261027d36600461186f565b61058b565b005b6008545b6040519081526020015b60405180910390f35b6102826102a936600461186f565b61063e565b6010546102bb9060ff1681565b6040519015158152602001610292565b6102886106a6565b610288600f5481565b6102ef6102ea36600461186f565b610747565b6040805193845260208401929092526001600160a01b031690820152606001610292565b610288600b5481565b61028261032a3660046118a7565b610781565b61028261033d3660046118e6565b610907565b61028261035036600461191b565b610a3b565b610282610b37565b600554610370906001600160a01b031681565b6040516001600160a01b039091168152602001610292565b610288600c5481565b61028261039f36600461186f565b610dc3565b610288600e5481565b6102826103bb366004611945565b610f5f565b610288600d5481565b6102826103d73660046119c4565b61102a565b61028860075481565b6102826110cf565b6102826103fb366004611a57565b6110f5565b61028261115a565b610282610416366004611a82565b61116d565b6102bb610429366004611a82565b60116020525f908152604090205460ff1681565b61028860035481565b610282610454366004611a82565b6111d2565b610282610467366004611a82565b6111fc565b5f546001600160a01b0316610370565b6102bb61048a366004611a82565b600a6020525f908152604090205460ff1681565b61028860065481565b61028860045481565b6102bb6104be36600461191b565b611226565b6102826104d1366004611a9d565b611379565b6102826104e436600461186f565b611394565b600154610370906001600160a01b031681565b61028861050a36600461186f565b6113b9565b61028261051d36600461191b565b61144e565b610282611556565b61028860125481565b600254610370906001600160a01b031681565b610288610554366004611a82565b60096020525f908152604090205481565b610282610573366004611a82565b611682565b61028261058636600461186f565b6116fb565b610593611794565b61059c81610dc3565b5f600882815481106105b0576105b0611ab8565b905f5260205f2090600302016002015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550610611600882815481106105f8576105f8611ab8565b5f918252602090912060039091020154600b54906117ed565b600b819055505f6008828154811061062b5761062b611ab8565b5f91825260209091206003909102015550565b610646611794565b600554600160a01b900460ff166106695761065f6110cf565b600481905561066e565b5f6004555b60405181815232907fa03d71d21200bfbbb6335bb3f935b1de0d1a7244d68665ae0e6584f07754effa9060200160405180910390a250565b5f600f54600e54600d5460015f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610700573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107249190611acc565b61072e9190611af7565b6107389190611af7565b6107429190611b0a565b905090565b60088181548110610756575f80fd5b5f9182526020909120600390910201805460018201546002909201549092506001600160a01b031683565b610789611794565b6001600160a01b0382165f908152600a602052604090205460ff16156107f65760405162461bcd60e51b815260206004820152601e60248201527f636f6e747261637420616c72656164792070617274696369706174696e67000060448201526064015b60405180910390fd5b8015610804576108046110cf565b5f600c54431161081657600c54610818565b435b600b5490915061082890856117ff565b600b556001600160a01b039283165f818152600a602090815260408083208054600160ff1990911681179091558151606081018352988952918801948552870192835260088054918201815590915294517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee360039096029586015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee4850155517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee590930180546001600160a01b0319169390921692909217905550565b61090f611794565b6008838154811061092257610922611ab8565b905f5260205f2090600302015f01545f14801561097557505f6001600160a01b03166008848154811061095757610957611ab8565b5f9182526020909120600260039092020101546001600160a01b0316145b6109b35760405162461bcd60e51b815260206004820152600f60248201526e616c7265616479206561726e696e6760881b60448201526064016107ed565b6109bc83610dc3565b81600884815481106109d0576109d0611ab8565b905f5260205f2090600302016002015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060088481548110610a1657610a16611ab8565b5f918252602090912060039091020155600b54610a3390826117ff565b600b55505050565b335f90815260096020526040902054811115610a8f5760405162461bcd60e51b8152602060048201526013602482015272125b9cdd59999a58da595b9d0818dc99591a5d606a1b60448201526064016107ed565b335f90815260096020526040902054610aa9908290611b0a565b335f90815260096020526040812091909155600f8054839290610acd908490611af7565b90915550506001546040516340c10f1960e01b81526001600160a01b03848116600483015260248201849052909116906340c10f19906044015f604051808303815f87803b158015610b1d575f80fd5b505af1158015610b2f573d5f803e3d5ffd5b505050505050565b60105460ff16610b895760405162461bcd60e51b815260206004820152601e60248201527f73656e61746f72207265776172647320617265207475726e6564206f6666000060448201526064016107ed565b600c544311610be85760405162461bcd60e51b815260206004820152602560248201527f4d757374207761697420756e74696c206d696e74696e6720706861736520626560448201526467696e732160d81b60648201526084016107ed565b5f80546001600160a01b03166001600160a01b0316635d85fa186040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c539190611b2d565b6001600160a01b0316637ae282896040518163ffffffff1660e01b81526004015f60405180830381865afa158015610c8d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610cb49190810190611b5c565b90505f6064825111610cc857506064610cd9565b8151610cd690612710611c1c565b90505b5f620f424082600754600d54610cef9190611b0a565b610cf99190611c3b565b610d039190611c1c565b90505f5b8351811015610d73578160095f868481518110610d2657610d26611ab8565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f828254610d5b9190611af7565b90915550819050610d6b81611c52565b915050610d07565b50808351610d819190611c3b565b60065f828254610d919190611af7565b90915550508251610da3908290611c3b565b600d5f828254610db39190611af7565b9091555050600d54600755505050565b5f60088281548110610dd757610dd7611ab8565b905f5260205f209060030201905080600101544311610df4575050565b60028101546001600160a01b03161580610e0d57508054155b15610e1c574360019091015550565b5f610e348260010154436117ed90919063ffffffff16565b90505f610e65600b54610e5f855f0154610e596004548761180a90919063ffffffff16565b9061180a565b90611815565b6001546002546003549293506001600160a01b03918216926340c10f199290911690610e9a9061271090610e5f90879061180a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015610edd575f80fd5b505af1158015610eef573d5f803e3d5ffd5b50505060028401546001600160a01b03165f90815260096020526040902054610f1a91508290611af7565b60028401546001600160a01b03165f90815260096020526040812091909155600d8054839290610f4b908490611af7565b909155505043600190930192909255505050565b610f67611794565b6001600160a01b0382165f9081526011602052604090205460ff16151581151514611026576001600160a01b0382165f908152601160205260409020805460ff191682151517905580610fcc5760128054905f610fc383611c6a565b91905055610fe0565b60128054905f610fdb83611c52565b919050555b50604080516001600160a01b038416815282151560208201527fe2ad9d0600e2a93ef46991efd2c22f65f9ebe472487cc7551647bc52d793289991015b60405180910390a15b5050565b848314801561103857508481145b611040575f80fd5b5f5b858110156110c6576110b487878381811061105f5761105f611ab8565b9050602002013586868481811061107857611078611ab8565b905060200201602081019061108d9190611a82565b85858581811061109f5761109f611ab8565b905060200201602081019061032a9190611a9d565b806110be81611c52565b915050611042565b50505050505050565b6008545f5b81811015611026576110e581610dc3565b6110ee81611c52565b90506110d4565b6110fd611794565b801561110b5761110b6110cf565b61112b82611125600886815481106105f8576105f8611ab8565b906117ff565b600b81905550816008848154811061114557611145611ab8565b5f918252602090912060039091020155505050565b611162611794565b61116b5f611820565b565b611175611794565b60015460405163f2fde38b60e01b81526001600160a01b0383811660048301529091169063f2fde38b906024015f604051808303815f87803b1580156111b9575f80fd5b505af11580156111cb573d5f803e3d5ffd5b5050505050565b6111da611794565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b611204611794565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b335f9081526011602052604081205460ff1661127d5760405162461bcd60e51b81526020600482015260166024820152756f6e6c79207472757374656420636f6e74726163747360501b60448201526064016107ed565b600154604051633477cc1b60e21b81526001600160a01b038581166004830152602482018590529091169063d1df306c906044016020604051808303815f875af11580156112cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112f19190611c7f565b61132b5760405162461bcd60e51b815260206004820152600b60248201526a189d5c9b8819985a5b195960aa1b60448201526064016107ed565b335f90815260096020526040902054611345908390611af7565b335f90815260096020526040812091909155600e8054849290611369908490611af7565b9091555060019150505b92915050565b611381611794565b6010805460ff1916911515919091179055565b61139c611794565b6103e881111580156113ac575060015b6113b4575f80fd5b600355565b5f80600883815481106113ce576113ce611ab8565b905f5260205f20906003020190508060010154431180156113fb575060028101546001600160a01b031615155b15611446575f6114188260010154436117ed90919063ffffffff16565b90505f61143d600b54610e5f855f0154610e596004548761180a90919063ffffffff16565b95945050505050565b505f92915050565b335f908152600960205260409020548111156114b65760405162461bcd60e51b815260206004820152602160248201527f696e73756666696369656e742063726564697420666f72207472616e736665726044820152602160f81b60648201526084016107ed565b335f908152600960205260409020546114d0908290611b0a565b335f90815260096020526040808220929092556001600160a01b038416815220546114fc908290611af7565b6001600160a01b0383165f818152600960209081526040918290209390935580513381529283019190915281018290527fbfa5afa9ccfabe79b0b21f2a9d778cf773b963e00307dd68c96abc3a30c5d3be9060600161101d565b60015f9054906101000a90046001600160a01b03166001600160a01b03166332cb6b0c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ca9190611acc565b6115d26106a6565b10156116205760405162461bcd60e51b815260206004820152601b60248201527f4d617820737570706c79206e6f7420796574207265616368656421000000000060448201526064016107ed565b5f60035561162c6110cf565b5f60048190556005805460ff60a01b1916600160a01b17905560405132917fa03d71d21200bfbbb6335bb3f935b1de0d1a7244d68665ae0e6584f07754effa9161167891815260200190565b60405180910390a2565b61168a611794565b6001600160a01b0381166116ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107ed565b6116f881611820565b50565b611703611794565b600c5443106117465760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481cdd185c9d1959608a1b60448201526064016107ed565b600c8190556008545f5b8181101561178f57826008828154811061176c5761176c611ab8565b5f91825260209091206001600390920201015561178881611c52565b9050611750565b505050565b5f546001600160a01b0316331461116b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ed565b5f6117f88284611b0a565b9392505050565b5f6117f88284611af7565b5f6117f88284611c3b565b5f6117f88284611c1c565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6020828403121561187f575f80fd5b5035919050565b6001600160a01b03811681146116f8575f80fd5b80151581146116f8575f80fd5b5f805f606084860312156118b9575f80fd5b8335925060208401356118cb81611886565b915060408401356118db8161189a565b809150509250925092565b5f805f606084860312156118f8575f80fd5b83359250602084013561190a81611886565b929592945050506040919091013590565b5f806040838503121561192c575f80fd5b823561193781611886565b946020939093013593505050565b5f8060408385031215611956575f80fd5b823561196181611886565b915060208301356119718161189a565b809150509250929050565b5f8083601f84011261198c575f80fd5b50813567ffffffffffffffff8111156119a3575f80fd5b6020830191508360208260051b85010111156119bd575f80fd5b9250929050565b5f805f805f80606087890312156119d9575f80fd5b863567ffffffffffffffff808211156119f0575f80fd5b6119fc8a838b0161197c565b90985096506020890135915080821115611a14575f80fd5b611a208a838b0161197c565b90965094506040890135915080821115611a38575f80fd5b50611a4589828a0161197c565b979a9699509497509295939492505050565b5f805f60608486031215611a69575f80fd5b833592506020840135915060408401356118db8161189a565b5f60208284031215611a92575f80fd5b81356117f881611886565b5f60208284031215611aad575f80fd5b81356117f88161189a565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611adc575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561137357611373611ae3565b8181038181111561137357611373611ae3565b8051611b2881611886565b919050565b5f60208284031215611b3d575f80fd5b81516117f881611886565b634e487b7160e01b5f52604160045260245ffd5b5f6020808385031215611b6d575f80fd5b825167ffffffffffffffff80821115611b84575f80fd5b818501915085601f830112611b97575f80fd5b815181811115611ba957611ba9611b48565b8060051b604051601f19603f83011681018181108582111715611bce57611bce611b48565b604052918252848201925083810185019188831115611beb575f80fd5b938501935b82851015611c1057611c0185611b1d565b84529385019392850192611bf0565b98975050505050505050565b5f82611c3657634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761137357611373611ae3565b5f60018201611c6357611c63611ae3565b5060010190565b5f81611c7857611c78611ae3565b505f190190565b5f60208284031215611c8f575f80fd5b81516117f88161189a56fea26469706673582212208ac122380701361e0ec4d61311bf6526e7b9d74ba55b343ce9b7be36ebf16db964736f6c63430008140033