Contract 0x671423b2e8a99882FD14BbD07e90Ae8B64A0E63A

Contract Overview

Balance:
0 ETH

Token:
Txn Hash Method
Block
From
To
Value
0xee5cf225d9606f5387d05fee1943b22f5a193c26aa2d41a342022746429cc0a4Set Staking Rewa...146449652023-09-14 18:59:5811 days 14 mins ago0xc2ecd777d06ffdf8b3179286beabf52b67e9d991 IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH0.0000458010011.50000005
0xfe7cbb80c5b249f03bfcc3ab384ea36e7893c3db8563c539bd2e6602ed2a9a16Mint120804832023-07-17 10:17:1470 days 8 hrs ago0xc2ecd777d06ffdf8b3179286beabf52b67e9d991 IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH0.0001862918220.388801306
0xd55b9a067841ce84a6f5ee83d816f71ee43c2a23bd90ba808437f05d3555fc8bMint119567442023-07-14 13:32:3673 days 5 hrs ago0xc2ecd777d06ffdf8b3179286beabf52b67e9d991 IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH0.0000294504640.00100005
0xc2d753f8b1c1116b16d8696ebe3d42cf8c9d96866683b494b5033089c861e74dMint117987532023-07-10 21:46:1476 days 21 hrs ago0x043e7c673f2bd9c62e69921395bfd1f97acc0a78 IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH0.000199098681.100000253
0xf253cb1c189c46b3ec609de5509e2999468a7bfafb2ea424a7da875810d4b50fMint112649282023-06-28 13:12:0489 days 6 hrs ago0xc2ecd777d06ffdf8b3179286beabf52b67e9d991 IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH0.000001138570.00100005
0x5e2765172beeed34f9e511c123ab4568fb66b21d5cc82f473e0977d4830712b8Set Staking Rewa...104878612023-06-10 13:29:50107 days 5 hrs ago0xc2ecd777d06ffdf8b3179286beabf52b67e9d991 IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH0.0000305340011.00000005
0x9af7b6e7bc12e32156cc66847b4677a7202f611a0ac12da685bbdf619ddd00d2Accept Ownership104878372023-06-10 13:29:02107 days 5 hrs ago0xc2ecd777d06ffdf8b3179286beabf52b67e9d991 IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH0.0000288110011.00000005
0x33281d21b1449d30648e981ac0b74913710fe0eb6a7c88ea38549e8b9ec72174Mint30713672022-11-29 16:56:46300 days 2 hrs ago0xc2ecd777d06ffdf8b3179286beabf52b67e9d991 IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH0.0000406302550.000000001
0xda3845ee8d2a7522ebe5fe8defd0a6cc077dc193ba9396d7214a5a0caa273bcaMint28750572022-11-22 19:31:30306 days 23 hrs ago0xc2ecd777d06ffdf8b3179286beabf52b67e9d991 IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH0.0000416070820.000000001
0x957946aa88009443ed89c3cfe6313e4504b5ae957d96e2233431cd41c05f7aaeMint27200122022-11-16 1:01:37313 days 18 hrs ago0xc2ecd777d06ffdf8b3179286beabf52b67e9d991 IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH00.000000001
0xd1c41b97b46164cc3c294a071c8601e149efa942722a8d26ac3bf6c6cabc51a4Mint25309102022-11-08 21:06:56320 days 22 hrs ago0xc2ecd777d06ffdf8b3179286beabf52b67e9d991 IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH0.0000243289670.000000001
0x2a87512d512024e95fc1fb0db650b1c65ede0c648eff53c88c46ec7c276212daMint23396982022-10-28 22:18:11331 days 20 hrs ago0xc2ecd777d06ffdf8b3179286beabf52b67e9d991 IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH0.0000013225370.000000001
0x96487c4e6bcb624ecc90c247c5e51cc53d9f027a959706c019f683f14e46a4b7Mint21407932022-10-20 20:25:42339 days 22 hrs ago0xc2ecd777d06ffdf8b3179286beabf52b67e9d991 IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH0.0000041427720.000000001
0x18db662e6fac1f071ea5e0f601bdcf928b0b536016ede49151de759d72b6f890Mint19230512022-10-12 19:04:45348 days 9 mins ago0x652c46a302060b324a02d2d3e4a56e3da07fa91b IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH0.0000016774590.000000001
0x3e9a7d11adf3df8db7d3e9328bab4afff62ea9c4784c9cdb56e94dcca3e6f17cSet Kwenta19230352022-10-12 19:03:56348 days 10 mins ago0x652c46a302060b324a02d2d3e4a56e3da07fa91b IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH0.0000020572760.000000001
0xc74f21bf8415cb42e6ecca3b2ac0dfab6b46142047bb4c3d150fe6563c17d3fdMint18079752022-10-08 21:09:39351 days 22 hrs ago0xc2ecd777d06ffdf8b3179286beabf52b67e9d991 IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH00.000000001
0x09c4ca1cdb132247e5412d16737e45af49e69dde0184a218cf0aaaedc3216333Mint18077512022-10-08 20:58:53351 days 22 hrs ago0xc2ecd777d06ffdf8b3179286beabf52b67e9d991 IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH00.000000001
0xc82b6fb5f3d1a24dab818765f37d7abffff08d961ecc699dd8c71722be94d2fcMint17456922022-10-06 19:58:07353 days 23 hrs ago0xc2ecd777d06ffdf8b3179286beabf52b67e9d991 IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH0.0000002527720.000000001
0x9d0a49994602582a80295f81347fa1f241078a294ab14c868378bc442d337553Nominate New Own...15901012022-09-30 23:56:06359 days 19 hrs ago0x652c46a302060b324a02d2d3e4a56e3da07fa91b IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH00.000000001
0x9d17c27704d539a3fe6e00bb75c6006190c8ed4c86e73f4ad30db59188bff159Set Trading Rewa...15900912022-09-30 23:55:36359 days 19 hrs ago0x652c46a302060b324a02d2d3e4a56e3da07fa91b IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH00.000000001
0x74eea16301cd9a3ba286d8ac90814346841ee72915fb0ac5e12331e8b3935377Set Staking Rewa...15900882022-09-30 23:55:36359 days 19 hrs ago0x652c46a302060b324a02d2d3e4a56e3da07fa91b IN  0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a0 ETH00.000000001
0xbb26eb151ee1d315bbabf3416fe18a6c212d0f75004dd5683b037c509db472940x60a0604015900392022-09-30 23:52:43359 days 19 hrs ago0x652c46a302060b324a02d2d3e4a56e3da07fa91b IN  Create: SupplySchedule0 ETH0.0000000000040.000000001
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xfe7cbb80c5b249f03bfcc3ab384ea36e7893c3db8563c539bd2e6602ed2a9a16120804832023-07-17 10:17:1470 days 8 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0xda0c33402fc1e10d18c532f0ed9c1a6c5c9e386c0 ETH
0xfe7cbb80c5b249f03bfcc3ab384ea36e7893c3db8563c539bd2e6602ed2a9a16120804832023-07-17 10:17:1470 days 8 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0x3e5371d909bf1996c95e9d179b0bc91c26fb12790 ETH
0xfe7cbb80c5b249f03bfcc3ab384ea36e7893c3db8563c539bd2e6602ed2a9a16120804832023-07-17 10:17:1470 days 8 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0xda0c33402fc1e10d18c532f0ed9c1a6c5c9e386c0 ETH
0xfe7cbb80c5b249f03bfcc3ab384ea36e7893c3db8563c539bd2e6602ed2a9a16120804832023-07-17 10:17:1470 days 8 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0xda0c33402fc1e10d18c532f0ed9c1a6c5c9e386c0 ETH
0xfe7cbb80c5b249f03bfcc3ab384ea36e7893c3db8563c539bd2e6602ed2a9a16120804832023-07-17 10:17:1470 days 8 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0xda0c33402fc1e10d18c532f0ed9c1a6c5c9e386c0 ETH
0xfe7cbb80c5b249f03bfcc3ab384ea36e7893c3db8563c539bd2e6602ed2a9a16120804832023-07-17 10:17:1470 days 8 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0x68a356240deaec81d6d59986c2cde4b8035ddeaf0 ETH
0xfe7cbb80c5b249f03bfcc3ab384ea36e7893c3db8563c539bd2e6602ed2a9a16120804832023-07-17 10:17:1470 days 8 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0x68a356240deaec81d6d59986c2cde4b8035ddeaf0 ETH
0xc2d753f8b1c1116b16d8696ebe3d42cf8c9d96866683b494b5033089c861e74d117987532023-07-10 21:46:1476 days 21 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0xda0c33402fc1e10d18c532f0ed9c1a6c5c9e386c0 ETH
0xc2d753f8b1c1116b16d8696ebe3d42cf8c9d96866683b494b5033089c861e74d117987532023-07-10 21:46:1476 days 21 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0x3e5371d909bf1996c95e9d179b0bc91c26fb12790 ETH
0xc2d753f8b1c1116b16d8696ebe3d42cf8c9d96866683b494b5033089c861e74d117987532023-07-10 21:46:1476 days 21 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0xda0c33402fc1e10d18c532f0ed9c1a6c5c9e386c0 ETH
0xc2d753f8b1c1116b16d8696ebe3d42cf8c9d96866683b494b5033089c861e74d117987532023-07-10 21:46:1476 days 21 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0xda0c33402fc1e10d18c532f0ed9c1a6c5c9e386c0 ETH
0xc2d753f8b1c1116b16d8696ebe3d42cf8c9d96866683b494b5033089c861e74d117987532023-07-10 21:46:1476 days 21 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0xda0c33402fc1e10d18c532f0ed9c1a6c5c9e386c0 ETH
0xc2d753f8b1c1116b16d8696ebe3d42cf8c9d96866683b494b5033089c861e74d117987532023-07-10 21:46:1476 days 21 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0x68a356240deaec81d6d59986c2cde4b8035ddeaf0 ETH
0xc2d753f8b1c1116b16d8696ebe3d42cf8c9d96866683b494b5033089c861e74d117987532023-07-10 21:46:1476 days 21 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0x68a356240deaec81d6d59986c2cde4b8035ddeaf0 ETH
0xc2d753f8b1c1116b16d8696ebe3d42cf8c9d96866683b494b5033089c861e74d117987532023-07-10 21:46:1476 days 21 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0x68a356240deaec81d6d59986c2cde4b8035ddeaf0 ETH
0xc2d753f8b1c1116b16d8696ebe3d42cf8c9d96866683b494b5033089c861e74d117987532023-07-10 21:46:1476 days 21 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0x68a356240deaec81d6d59986c2cde4b8035ddeaf0 ETH
0xf253cb1c189c46b3ec609de5509e2999468a7bfafb2ea424a7da875810d4b50f112649282023-06-28 13:12:0489 days 6 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0xda0c33402fc1e10d18c532f0ed9c1a6c5c9e386c0 ETH
0xf253cb1c189c46b3ec609de5509e2999468a7bfafb2ea424a7da875810d4b50f112649282023-06-28 13:12:0489 days 6 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0x3e5371d909bf1996c95e9d179b0bc91c26fb12790 ETH
0xf253cb1c189c46b3ec609de5509e2999468a7bfafb2ea424a7da875810d4b50f112649282023-06-28 13:12:0489 days 6 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0xda0c33402fc1e10d18c532f0ed9c1a6c5c9e386c0 ETH
0xf253cb1c189c46b3ec609de5509e2999468a7bfafb2ea424a7da875810d4b50f112649282023-06-28 13:12:0489 days 6 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0xda0c33402fc1e10d18c532f0ed9c1a6c5c9e386c0 ETH
0xf253cb1c189c46b3ec609de5509e2999468a7bfafb2ea424a7da875810d4b50f112649282023-06-28 13:12:0489 days 6 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0xda0c33402fc1e10d18c532f0ed9c1a6c5c9e386c0 ETH
0xf253cb1c189c46b3ec609de5509e2999468a7bfafb2ea424a7da875810d4b50f112649282023-06-28 13:12:0489 days 6 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0x68a356240deaec81d6d59986c2cde4b8035ddeaf0 ETH
0xf253cb1c189c46b3ec609de5509e2999468a7bfafb2ea424a7da875810d4b50f112649282023-06-28 13:12:0489 days 6 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0x68a356240deaec81d6d59986c2cde4b8035ddeaf0 ETH
0xf253cb1c189c46b3ec609de5509e2999468a7bfafb2ea424a7da875810d4b50f112649282023-06-28 13:12:0489 days 6 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0x68a356240deaec81d6d59986c2cde4b8035ddeaf0 ETH
0xf253cb1c189c46b3ec609de5509e2999468a7bfafb2ea424a7da875810d4b50f112649282023-06-28 13:12:0489 days 6 hrs ago 0x671423b2e8a99882fd14bbd07e90ae8b64a0e63a 0x68a356240deaec81d6d59986c2cde4b8035ddeaf0 ETH
[ Download CSV Export 
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
SupplySchedule

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 17 : SupplySchedule.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

// Inheritance
import "./utils/Owned.sol";
import "./interfaces/ISupplySchedule.sol";

// Libraries
import "./libraries/SafeDecimalMath.sol";
import "./libraries/Math.sol";

// Internal references
import "./interfaces/IERC20.sol";
import "./interfaces/IKwenta.sol";
import "./interfaces/IStakingRewards.sol";
import "./interfaces/IMultipleMerkleDistributor.sol";

// https://docs.synthetix.io/contracts/source/contracts/supplyschedule
contract SupplySchedule is Owned, ISupplySchedule {
    using SafeDecimalMath for uint;
    using Math for uint;

    IKwenta public kwenta;
    IStakingRewards public stakingRewards;
    IMultipleMerkleDistributor public tradingRewards;

    // Time of the last inflation supply mint event
    uint public lastMintEvent;

    // Counter for number of weeks since the start of supply inflation
    uint public weekCounter;

    // The number of KWENTA rewarded to the caller of Kwenta.mint()
    uint public minterReward = 1e18;

    uint public constant INITIAL_SUPPLY = 313373e18;

    // Initial Supply * 240% Initial Inflation Rate / 52 weeks.
    uint public constant INITIAL_WEEKLY_SUPPLY = INITIAL_SUPPLY * 240 / 100 / 52;

    // Max KWENTA rewards for minter
    uint public constant MAX_MINTER_REWARD = 20 * 1e18;

    // How long each inflation period is before mint can be called
    uint public constant MINT_PERIOD_DURATION = 1 weeks;

    uint public immutable inflationStartDate;
    uint public constant MINT_BUFFER = 1 days;
    uint8 public constant SUPPLY_DECAY_START = 2; // Supply decay starts on the 2nd week of rewards
    uint8 public constant SUPPLY_DECAY_END = 208; // Inclusive of SUPPLY_DECAY_END week.

    // Weekly percentage decay of inflationary supply
    uint public constant DECAY_RATE = 20500000000000000; // 2.05% weekly

    // Percentage growth of terminal supply per annum
    uint public constant TERMINAL_SUPPLY_RATE_ANNUAL = 10000000000000000; // 1.0% pa

    uint public treasuryDiversion = 2000; // 20% to treasury
    uint public tradingRewardsDiversion = 2000;

    // notice treasury address may change
    address public treasuryDAO;

    /* ========== EVENTS ========== */
    
    /**
     * @notice Emitted when the inflationary supply is minted
     **/
    event SupplyMinted(uint supplyMinted, uint numberOfWeeksIssued, uint lastMintEvent);

    /**
     * @notice Emitted when the KWENTA minter reward amount is updated
     **/
    event MinterRewardUpdated(uint newRewardAmount);

    /**
     * @notice Emitted when setKwenta is called changing the Kwenta Proxy address
     **/
    event KwentaUpdated(address newAddress);

    /**
     * @notice Emitted when treasury inflation share is changed
     **/
    event TreasuryDiversionUpdated(uint newPercentage);

    /**
     * @notice Emitted when trading rewards inflation share is changed
     **/
    event TradingRewardsDiversionUpdated(uint newPercentage);

    /**
     * @notice Emitted when StakingRewards is changed
     **/
    event StakingRewardsUpdated(address newAddress);

    /**
     * @notice Emitted when TradingRewards is changed
     **/
    event TradingRewardsUpdated(address newAddress);

    /**
     * @notice Emitted when treasuryDAO address is changed
     **/
    event TreasuryDAOSet(address treasuryDAO);

    constructor(
        address _owner,
        address _treasuryDAO
    ) Owned(_owner) {
        treasuryDAO = _treasuryDAO;

        inflationStartDate = block.timestamp; // inflation starts as soon as the contract is deployed.
        lastMintEvent = block.timestamp;
        weekCounter = 0;
    }

    // ========== VIEWS ==========

    /**
     * @return The amount of KWENTA mintable for the inflationary supply
     */
    function mintableSupply() override public view returns (uint) {
        uint totalAmount;

        if (!isMintable()) {
            return totalAmount;
        }

        uint remainingWeeksToMint = weeksSinceLastIssuance();

        uint currentWeek = weekCounter;

        // Calculate total mintable supply from exponential decay function
        // The decay function stops after week 208
        while (remainingWeeksToMint > 0) {
            currentWeek++;

            if (currentWeek < SUPPLY_DECAY_START) {
                // If current week is before supply decay we add initial supply to mintableSupply
                totalAmount = totalAmount + INITIAL_WEEKLY_SUPPLY;
                remainingWeeksToMint--;
            } else if (currentWeek <= SUPPLY_DECAY_END) {
                // if current week before supply decay ends we add the new supply for the week
                // diff between current week and (supply decay start week - 1)
                uint decayCount = currentWeek - (SUPPLY_DECAY_START - 1);

                totalAmount = totalAmount + tokenDecaySupplyForWeek(decayCount);
                remainingWeeksToMint--;
            } else {
                // Terminal supply is calculated on the total supply of Kwenta including any new supply
                // We can compound the remaining week's supply at the fixed terminal rate
                uint totalSupply = IERC20(kwenta).totalSupply();
                uint currentTotalSupply = totalSupply + totalAmount;

                totalAmount = totalAmount + terminalInflationSupply(currentTotalSupply, remainingWeeksToMint);
                remainingWeeksToMint = 0;
            }
        }

        return totalAmount;
    }

    /**
     * @return A unit amount of decaying inflationary supply from the INITIAL_WEEKLY_SUPPLY
     * @dev New token supply reduces by the decay rate each week calculated as supply = INITIAL_WEEKLY_SUPPLY * ()
     */
    function tokenDecaySupplyForWeek(uint counter) public pure returns (uint) {
        // Apply exponential decay function to number of weeks since
        // start of inflation smoothing to calculate diminishing supply for the week.
        uint effectiveDecay = (SafeDecimalMath.unit() - DECAY_RATE).powDecimal(counter);
        uint supplyForWeek = INITIAL_WEEKLY_SUPPLY.multiplyDecimal(effectiveDecay);

        return supplyForWeek;
    }

    /**
     * @return A unit amount of terminal inflation supply
     * @dev Weekly compound rate based on number of weeks
     */
    function terminalInflationSupply(uint totalSupply, uint numOfWeeks) public pure returns (uint) {
        // rate = (1 + weekly rate) ^ num of weeks
        uint effectiveCompoundRate = (SafeDecimalMath.unit() + (TERMINAL_SUPPLY_RATE_ANNUAL / 52)).powDecimal(numOfWeeks);

        // return Supply * (effectiveRate - 1) for extra supply to issue based on number of weeks
        return totalSupply.multiplyDecimal(effectiveCompoundRate - SafeDecimalMath.unit());
    }

    /**
     * @dev Take timeDiff in seconds (Dividend) and MINT_PERIOD_DURATION as (Divisor)
     * @return Calculate the numberOfWeeks since last mint rounded down to 1 week
     */
    function weeksSinceLastIssuance() public view returns (uint) {
        // Get weeks since lastMintEvent
        // If lastMintEvent not set or 0, then start from inflation start date.
        uint timeDiff = block.timestamp - lastMintEvent;
        return timeDiff / MINT_PERIOD_DURATION;
    }

    /**
     * @return boolean whether the MINT_PERIOD_DURATION (7 days)
     * has passed since the lastMintEvent.
     * */
    function isMintable() override public view returns (bool) {
        return block.timestamp - lastMintEvent > MINT_PERIOD_DURATION;
    }

    // ========== MUTATIVE FUNCTIONS ==========

    /**
     * @notice Record the mint event from Kwenta by incrementing the inflation
     * week counter for the number of weeks minted (probabaly always 1)
     * and store the time of the event.
     * @param supplyMinted the amount of KWENTA the total supply was inflated by.
     * */
    function recordMintEvent(uint supplyMinted) internal returns (bool) {
        uint numberOfWeeksIssued = weeksSinceLastIssuance();

        // add number of weeks minted to weekCounter
        weekCounter = weekCounter + numberOfWeeksIssued;

        // Update mint event to latest week issued (start date + number of weeks issued * seconds in week)
        // 1 day time buffer is added so inflation is minted after feePeriod closes
        lastMintEvent = inflationStartDate + (weekCounter * MINT_PERIOD_DURATION) + MINT_BUFFER;

        emit SupplyMinted(supplyMinted, numberOfWeeksIssued, lastMintEvent);
        return true;
    }

    /**
     * @notice Mints new inflationary supply weekly
     * New KWENTA is distributed between the minter, treasury, and StakingRewards contract
     * */
    function mint() override external {
        require(address(stakingRewards) != address(0), "Staking rewards not set");
        require(address(tradingRewards) != address(0), "Trading rewards not set");

        uint supplyToMint = mintableSupply();
        require(supplyToMint > 0, "No supply is mintable");

        // record minting event before mutation to token supply
        recordMintEvent(supplyToMint);

        uint amountToDistribute = supplyToMint - minterReward;
        uint amountToTreasury = amountToDistribute * treasuryDiversion / 10000;
        uint amountToTradingRewards = amountToDistribute * tradingRewardsDiversion / 10000;
        uint amountToStakingRewards = amountToDistribute - amountToTreasury - amountToTradingRewards;

        kwenta.mint(treasuryDAO, amountToTreasury);
        kwenta.mint(address(tradingRewards), amountToTradingRewards);
        kwenta.mint(address(stakingRewards), amountToStakingRewards);
        stakingRewards.notifyRewardAmount(amountToStakingRewards);
        kwenta.mint(msg.sender, minterReward);
    }

    // ========== SETTERS ========== */

    /**
     * @notice Set the Kwenta should it ever change.
     * SupplySchedule requires Kwenta address as it has the authority
     * to record mint event.
     * */
    function setKwenta(IKwenta _kwenta) external onlyOwner {
        require(address(_kwenta) != address(0), "Address cannot be 0");
        kwenta = _kwenta;
        emit KwentaUpdated(address(kwenta));
    }

    /**
     * @notice Sets the reward amount of KWENTA for the caller of the public
     * function Kwenta.mint().
     * This incentivises anyone to mint the inflationary supply and the mintr
     * Reward will be deducted from the inflationary supply and sent to the caller.
     * @param amount the amount of KWENTA to reward the minter.
     * */
    function setMinterReward(uint amount) external onlyOwner {
        require(amount <= MAX_MINTER_REWARD, "SupplySchedule: Reward cannot exceed max minter reward");
        minterReward = amount;
        emit MinterRewardUpdated(minterReward);
    }

    function setTreasuryDiversion(uint _treasuryDiversion) override external onlyOwner {
        require(_treasuryDiversion + tradingRewardsDiversion < 10000, "SupplySchedule: Cannot be more than 100%");
        treasuryDiversion = _treasuryDiversion;
        emit TreasuryDiversionUpdated(_treasuryDiversion);
    }

    function setTradingRewardsDiversion(uint _tradingRewardsDiversion) override external onlyOwner {
        require(_tradingRewardsDiversion + treasuryDiversion < 10000, "SupplySchedule: Cannot be more than 100%");
        tradingRewardsDiversion = _tradingRewardsDiversion;
        emit TradingRewardsDiversionUpdated(_tradingRewardsDiversion);
    }

    function setStakingRewards(address _stakingRewards) override external onlyOwner {
        require(_stakingRewards != address(0), "SupplySchedule: Invalid Address");
        stakingRewards = IStakingRewards(_stakingRewards);
        emit StakingRewardsUpdated(_stakingRewards);
    }

    function setTradingRewards(address _tradingRewards) override external onlyOwner {
        require(_tradingRewards != address(0), "SupplySchedule: Invalid Address");
        tradingRewards = IMultipleMerkleDistributor(_tradingRewards);
        emit TradingRewardsUpdated(_tradingRewards);
    }

    /// @notice set treasuryDAO address
    /// @dev only owner may change address
    function setTreasuryDAO(address _treasuryDAO) external onlyOwner {
        require(_treasuryDAO != address(0), "SupplySchedule: Zero Address");
        treasuryDAO = _treasuryDAO;
        emit TreasuryDAOSet(treasuryDAO);
    }
}

File 2 of 17 : Owned.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

// https://docs.synthetix.io/contracts/source/contracts/owned
contract Owned {
    address public owner;
    address public nominatedOwner;

    constructor(address _owner) {
        require(_owner != address(0), "Owner address cannot be 0");
        owner = _owner;
        emit OwnerChanged(address(0), _owner);
    }

    function nominateNewOwner(address _owner) external onlyOwner {
        nominatedOwner = _owner;
        emit OwnerNominated(_owner);
    }

    function acceptOwnership() external {
        require(msg.sender == nominatedOwner, "You must be nominated before you can accept ownership");
        emit OwnerChanged(owner, nominatedOwner);
        owner = nominatedOwner;
        nominatedOwner = address(0);
    }

    modifier onlyOwner {
        _onlyOwner();
        _;
    }

    function _onlyOwner() private view {
        require(msg.sender == owner, "Only the contract owner may perform this action");
    }

    event OwnerNominated(address newOwner);
    event OwnerChanged(address oldOwner, address newOwner);
}

File 3 of 17 : ISupplySchedule.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.24;

interface ISupplySchedule {
    // Views
    function mintableSupply() external view returns (uint);

    function isMintable() external view returns (bool);

    // Mutative functions

    function mint() external;

    function setTreasuryDiversion(uint _treasuryDiversion) external;

    function setTradingRewardsDiversion(uint _tradingRewardsDiversion) external;
    
    function setStakingRewards(address _stakingRewards) external;

    function setTradingRewards(address _tradingRewards) external;
}

File 4 of 17 : SafeDecimalMath.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

// https://docs.synthetix.io/contracts/source/libraries/safedecimalmath
library SafeDecimalMath {
    /* Number of decimal places in the representations. */
    uint8 public constant decimals = 18;
    uint8 public constant highPrecisionDecimals = 27;

    /* The number representing 1.0. */
    uint256 public constant UNIT = 10**uint256(decimals);

    /* The number representing 1.0 for higher fidelity numbers. */
    uint256 public constant PRECISE_UNIT = 10**uint256(highPrecisionDecimals);
    uint256 private constant UNIT_TO_HIGH_PRECISION_CONVERSION_FACTOR =
        10**uint256(highPrecisionDecimals - decimals);

    /**
     * @return Provides an interface to UNIT.
     */
    function unit() external pure returns (uint256) {
        return UNIT;
    }

    /**
     * @return Provides an interface to PRECISE_UNIT.
     */
    function preciseUnit() external pure returns (uint256) {
        return PRECISE_UNIT;
    }

    /**
     * @return The result of multiplying x and y, interpreting the operands as fixed-point
     * decimals.
     *
     * @dev A unit factor is divided out after the product of x and y is evaluated,
     * so that product must be less than 2**256. As this is an integer division,
     * the internal division always rounds down. This helps save on gas. Rounding
     * is more expensive on gas.
     */
    function multiplyDecimal(uint256 x, uint256 y)
        internal
        pure
        returns (uint256)
    {
        /* Divide by UNIT to remove the extra factor introduced by the product. */
        return (x * y) / UNIT;
    }

    /**
     * @return The result of safely dividing x and y. The return value is a high
     * precision decimal.
     *
     * @dev y is divided after the product of x and the standard precision unit
     * is evaluated, so the product of x and UNIT must be less than 2**256. As
     * this is an integer division, the result is always rounded down.
     * This helps save on gas. Rounding is more expensive on gas.
     */
    function divideDecimal(uint256 x, uint256 y)
        internal
        pure
        returns (uint256)
    {
        /* Reintroduce the UNIT factor that will be divided out by y. */
        return (x * UNIT) / y;
    }

    /**
     * @dev Convert a standard decimal representation to a high precision one.
     */
    function decimalToPreciseDecimal(uint256 i)
        internal
        pure
        returns (uint256)
    {
        return i * UNIT_TO_HIGH_PRECISION_CONVERSION_FACTOR;
    }

    /**
     * @dev Convert a high precision decimal to a standard decimal representation.
     */
    function preciseDecimalToDecimal(uint256 i)
        internal
        pure
        returns (uint256)
    {
        uint256 quotientTimesTen = i /
            (UNIT_TO_HIGH_PRECISION_CONVERSION_FACTOR / 10);

        if (quotientTimesTen % 10 >= 5) {
            quotientTimesTen += 10;
        }

        return quotientTimesTen / 10;
    }

    // Computes `a - b`, setting the value to 0 if b > a.
    function floorsub(uint256 a, uint256 b) internal pure returns (uint256) {
        return b >= a ? 0 : a - b;
    }
}

File 5 of 17 : Math.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

// Libraries
import "./SafeDecimalMath.sol";

// https://docs.synthetix.io/contracts/source/libraries/math
library Math {
    using SafeDecimalMath for uint;

    /**
     * @dev Uses "exponentiation by squaring" algorithm where cost is 0(logN)
     * vs 0(N) for naive repeated multiplication.
     * Calculates x^n with x as fixed-point and n as regular unsigned int.
     * Calculates to 18 digits of precision with SafeDecimalMath.unit()
     */
    function powDecimal(uint x, uint n) internal pure returns (uint) {
        // https://mpark.github.io/programming/2014/08/18/exponentiation-by-squaring/

        uint result = SafeDecimalMath.unit();
        while (n > 0) {
            if (n % 2 != 0) {
                result = result.multiplyDecimal(x);
            }
            x = x.multiplyDecimal(x);
            n /= 2;
        }
        return result;
    }
}

File 6 of 17 : IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0 <0.9.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @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);
}

File 7 of 17 : IKwenta.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC20.sol";

interface IKwenta is IERC20 {

    function mint(address account, uint amount) external;

    function burn(uint amount) external;

    function setSupplySchedule(address _supplySchedule) external;

}

File 8 of 17 : IStakingRewards.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IStakingRewards {
    /// VIEWS
    // token state
    function totalSupply() external view returns (uint256);
    // staking state
    function balanceOf(address account) external view returns (uint256);
    function escrowedBalanceOf(address account) external view returns (uint256);
    function nonEscrowedBalanceOf(address account) external view returns (uint256);
    // rewards
    function getRewardForDuration() external view returns (uint256);
    function rewardPerToken() external view returns (uint256);
    function lastTimeRewardApplicable() external view returns (uint256);
    function earned(address account) external view returns (uint256);

    /// MUTATIVE
    // Staking/Unstaking
    function stake(uint256 amount) external;
    function unstake(uint256 amount) external;
    function stakeEscrow(address account, uint256 amount) external;
    function unstakeEscrow(address account, uint256 amount) external;
    function exit() external;
    // claim rewards
    function getReward() external;
    // settings
    function notifyRewardAmount(uint256 reward) external;
    function setRewardsDuration(uint256 _rewardsDuration) external;
    // pausable
    function pauseStakingRewards() external;
    function unpauseStakingRewards() external;
    // misc.
    function recoverERC20(address tokenAddress, uint256 tokenAmount) external;
}

File 9 of 17 : IMultipleMerkleDistributor.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.8.0;

// Allows anyone to claim a token if they exist in a merkle root.
interface IMultipleMerkleDistributor {
    /// @notice data structure for aggregating multiple claims
    struct Claims {
        uint256 index;
        address account;
        uint256 amount;
        bytes32[] merkleProof;
        uint256 epoch;
    }

    /// @notice event is triggered whenever a call to `claim` succeeds
    event Claimed(
        uint256 index,
        address account,
        uint256 amount,
        uint256 epoch
    );

    /// @notice event is triggered whenever a new merkle root is added
    event MerkleRootAdded(uint256 epoch);

    /// @return escrow for tokens claimed
    function rewardEscrow() external view returns (address);

    /// @return token to be distributed (KWENTA)
    function token() external view returns (address);

    // @return the merkle root of the merkle tree containing account balances available to claim
    function merkleRoots(uint256) external view returns (bytes32);

    /// @notice determine if indexed claim has been claimed
    /// @param index: used for claim managment
    /// @param epoch: distribution index number
    /// @return true if indexed claim has been claimed
    function isClaimed(uint256 index, uint256 epoch)
        external
        view
        returns (bool);

    /// @notice attempt to claim as `account` and escrow KWENTA for `account`
    /// @param index: used for merkle tree managment and verification
    /// @param account: address used for escrow entry
    /// @param amount: $KWENTA amount to be escrowed
    /// @param merkleProof: off-chain generated proof of merkle tree inclusion
    /// @param epoch: distribution index number
    function claim(
        uint256 index,
        address account,
        uint256 amount,
        bytes32[] calldata merkleProof,
        uint256 epoch
    ) external;

    /// @notice function that aggregates multiple claims
    /// @param claims: array of valid claims
    function claimMultiple(Claims[] calldata claims) external;
}

File 10 of 17 : SupplySchedule.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity >=0.6.0;

import "../contracts/SupplySchedule.sol";

contract $SupplySchedule is SupplySchedule {
    constructor(address _owner, address _treasuryDAO) SupplySchedule(_owner, _treasuryDAO) {}

    function $recordMintEvent(uint256 supplyMinted) external returns (bool) {
        return super.recordMintEvent(supplyMinted);
    }
}

File 11 of 17 : IERC20.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity >=0.6.0;

import "../../contracts/interfaces/IERC20.sol";

abstract contract $IERC20 is IERC20 {
    constructor() {}
}

File 12 of 17 : IKwenta.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity >=0.6.0;

import "../../contracts/interfaces/IKwenta.sol";

abstract contract $IKwenta is IKwenta {
    constructor() {}
}

File 13 of 17 : IMultipleMerkleDistributor.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity >=0.6.0;

import "../../contracts/interfaces/IMultipleMerkleDistributor.sol";

abstract contract $IMultipleMerkleDistributor is IMultipleMerkleDistributor {
    constructor() {}
}

File 14 of 17 : IStakingRewards.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity >=0.6.0;

import "../../contracts/interfaces/IStakingRewards.sol";

abstract contract $IStakingRewards is IStakingRewards {
    constructor() {}
}

File 15 of 17 : ISupplySchedule.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity >=0.6.0;

import "../../contracts/interfaces/ISupplySchedule.sol";

abstract contract $ISupplySchedule is ISupplySchedule {
    constructor() {}
}

File 16 of 17 : Math.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity >=0.6.0;

import "../../contracts/libraries/Math.sol";

contract $Math {
    constructor() {}

    function $powDecimal(uint256 x,uint256 n) external pure returns (uint256) {
        return Math.powDecimal(x,n);
    }
}

File 17 of 17 : Owned.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity >=0.6.0;

import "../../contracts/utils/Owned.sol";

contract $Owned is Owned {
    constructor(address _owner) Owned(_owner) {}
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {
    "contracts/libraries/SafeDecimalMath.sol": {
      "SafeDecimalMath": "0x68a356240deaec81d6d59986c2cde4b8035ddeaf"
    }
  }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_treasuryDAO","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"KwentaUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newRewardAmount","type":"uint256"}],"name":"MinterRewardUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"StakingRewardsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"supplyMinted","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"numberOfWeeksIssued","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastMintEvent","type":"uint256"}],"name":"SupplyMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"TradingRewardsDiversionUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"TradingRewardsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"treasuryDAO","type":"address"}],"name":"TreasuryDAOSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"TreasuryDiversionUpdated","type":"event"},{"inputs":[],"name":"DECAY_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_WEEKLY_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINTER_REWARD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_BUFFER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PERIOD_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_DECAY_END","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_DECAY_START","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TERMINAL_SUPPLY_RATE_ANNUAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inflationStartDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kwenta","outputs":[{"internalType":"contract IKwenta","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastMintEvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintableSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minterReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nominateNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nominatedOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IKwenta","name":"_kwenta","type":"address"}],"name":"setKwenta","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinterReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingRewards","type":"address"}],"name":"setStakingRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tradingRewards","type":"address"}],"name":"setTradingRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tradingRewardsDiversion","type":"uint256"}],"name":"setTradingRewardsDiversion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryDAO","type":"address"}],"name":"setTreasuryDAO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryDiversion","type":"uint256"}],"name":"setTreasuryDiversion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingRewards","outputs":[{"internalType":"contract IStakingRewards","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"numOfWeeks","type":"uint256"}],"name":"terminalInflationSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"counter","type":"uint256"}],"name":"tokenDecaySupplyForWeek","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingRewards","outputs":[{"internalType":"contract IMultipleMerkleDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingRewardsDiversion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryDAO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryDiversion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weekCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weeksSinceLastIssuance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60a0604052670de0b6b3a76400006007556107d06008556107d06009553480156200002957600080fd5b5060405162002be938038062002be983398181016040528101906200004f9190620001b7565b81600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620000c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000ba9062000263565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c6000826040516200013792919062000236565b60405180910390a15080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260808181525050426005819055506000600681905550505062000312565b600081519050620001b181620002f8565b92915050565b60008060408385031215620001d157620001d0620002ca565b5b6000620001e185828601620001a0565b9250506020620001f485828601620001a0565b9150509250929050565b620002098162000296565b82525050565b60006200021e60198362000285565b91506200022b82620002cf565b602082019050919050565b60006040820190506200024d6000830185620001fe565b6200025c6020830184620001fe565b9392505050565b600060208201905081810360008301526200027e816200020f565b9050919050565b600082825260208201905092915050565b6000620002a382620002aa565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b7f4f776e657220616464726573732063616e6e6f74206265203000000000000000600082015250565b620003038162000296565b81146200030f57600080fd5b50565b6080516128b46200033560003960008181610d0501526119a901526128b46000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806379ba509711610125578063badef30a116100ad578063cc5c095c1161007c578063cc5c095c146105af578063d3bd4bde146105cd578063dbd3a6a7146105eb578063df5a9fc114610609578063f9fad053146106275761021c565b8063badef30a14610537578063bccdd03014610555578063be1ff71e14610573578063be801f01146105915761021c565b80639bdd7ac7116100f45780639bdd7ac7146104935780639df92eb7146104b1578063a46eddcf146104cd578063ad18e97e146104e9578063b3b2bcc0146105075761021c565b806379ba50971461042f5780637c060557146104395780638da5cb5b146104575780639034802b146104755761021c565b806346872a23116101a857806353a47bb71161017757806353a47bb71461039f57806364b87a70146103bd578063689fccc6146103db5780636fb83a57146103f7578063758b19d3146104135761021c565b806346872a231461031757806346b45af7146103355780634ae26521146103535780634e070f501461036f5761021c565b8063238fb77f116101ef578063238fb77f14610283578063251330f11461029f57806325542064146102bd57806326f75e05146102db5780632ff2e9dc146102f95761021c565b80631249c58b146102215780631627540c1461022b5780631de40e491461024757806322af2bab14610265575b600080fd5b610229610645565b005b61024560048036038101906102409190611c26565b610b65565b005b61024f610be8565b60405161025c91906120fa565b60405180910390f35b61026d610bf3565b60405161027a91906120fa565b60405180910390f35b61029d60048036038101906102989190611c26565b610c00565b005b6102a7610cf3565b6040516102b4919061214c565b60405180910390f35b6102c5610cf8565b6040516102d291906120fa565b60405180910390f35b6102e3610d03565b6040516102f091906120fa565b60405180910390f35b610301610d27565b60405161030e91906120fa565b60405180910390f35b61031f610d35565b60405161032c91906120fa565b60405180910390f35b61033d610d3c565b60405161034a9190611f4e565b60405180910390f35b61036d60048036038101906103689190611c80565b610d56565b005b61038960048036038101906103849190611c80565b610ded565b60405161039691906120fa565b60405180910390f35b6103a7610ee1565b6040516103b49190611ee1565b60405180910390f35b6103c5610f07565b6040516103d29190611f9f565b60405180910390f35b6103f560048036038101906103f09190611c80565b610f2d565b005b610411600480360381019061040c9190611c26565b610fc7565b005b61042d60048036038101906104289190611c53565b6110ba565b005b6104376111cf565b005b610441611380565b60405161044e919061214c565b60405180910390f35b61045f611385565b60405161046c9190611ee1565b60405180910390f35b61047d6113a9565b60405161048a9190611f69565b60405180910390f35b61049b6113cf565b6040516104a891906120fa565b60405180910390f35b6104cb60048036038101906104c69190611c80565b6113d5565b005b6104e760048036038101906104e29190611c26565b61146f565b005b6104f1611584565b6040516104fe9190611ee1565b60405180910390f35b610521600480360381019061051c9190611cda565b6115aa565b60405161052e91906120fa565b60405180910390f35b61053f6116fd565b60405161054c91906120fa565b60405180910390f35b61055d61172f565b60405161056a91906120fa565b60405180910390f35b61057b611735565b60405161058891906120fa565b60405180910390f35b61059961173b565b6040516105a691906120fa565b60405180910390f35b6105b7611741565b6040516105c491906120fa565b60405180910390f35b6105d5611916565b6040516105e291906120fa565b60405180910390f35b6105f361191c565b60405161060091906120fa565b60405180910390f35b610611611944565b60405161061e91906120fa565b60405180910390f35b61062f61194b565b60405161063c9190611f84565b60405180910390f35b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156106d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ce90611ffa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610769576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107609061207a565b60405180910390fd5b6000610773611741565b9050600081116107b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107af906120da565b60405180910390fd5b6107c181611971565b506000600754826107d291906123ca565b90506000612710600854836107e79190612370565b6107f191906121ce565b90506000612710600954846108069190612370565b61081091906121ce565b9050600081838561082191906123ca565b61082b91906123ca565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518363ffffffff1660e01b81526004016108ac929190611f25565b600060405180830381600087803b1580156108c657600080fd5b505af11580156108da573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161095d929190611f25565b600060405180830381600087803b15801561097757600080fd5b505af115801561098b573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610a0e929190611f25565b600060405180830381600087803b158015610a2857600080fd5b505af1158015610a3c573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633c6b16ab826040518263ffffffff1660e01b8152600401610a9b91906120fa565b600060405180830381600087803b158015610ab557600080fd5b505af1158015610ac9573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19336007546040518363ffffffff1660e01b8152600401610b2c929190611f25565b600060405180830381600087803b158015610b4657600080fd5b505af1158015610b5a573d6000803e3d6000fd5b505050505050505050565b610b6d611a29565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2281604051610bdd9190611ee1565b60405180910390a150565b6648d4a431e5400081565b6801158e460913d0000081565b610c08611a29565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f906120ba565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2600f737e588eec1a845714266bf64b2f65c9d3f624e452a2b64611c33108ab081604051610ce89190611ee1565b60405180910390a150565b600281565b662386f26fc1000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b69425bfbffaab01654000081565b6201518081565b600062093a8060055442610d5091906123ca565b11905090565b610d5e611a29565b6801158e460913d00000811115610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da19061201a565b60405180910390fd5b806007819055507f036e0c635f8b7d9314bb6f2a577046108ef0f8b5e3869fbd29fd5a448ed99d30600754604051610de291906120fa565b60405180910390a150565b600080610e90836648d4a431e540007368a356240deaec81d6d59986c2cde4b8035ddeaf63907af6c06040518163ffffffff1660e01b815260040160206040518083038186803b158015610e4057600080fd5b505af4158015610e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e789190611cad565b610e8291906123ca565b611ab990919063ffffffff16565b90506000610ed5826034606460f069425bfbffaab016540000610eb39190612370565b610ebd91906121ce565b610ec791906121ce565b611ba190919063ffffffff16565b90508092505050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f35611a29565b61271060085482610f469190612178565b10610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d9061203a565b60405180910390fd5b806009819055507f3a6b6f816fda56a9f48af157a6f60d156254bc01c34e04fd31583013fb00a67f81604051610fbc91906120fa565b60405180910390a150565b610fcf611a29565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561103f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611036906120ba565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f551390b523f91b5d9df0281cbb04db779545fbfa265f5fcde47668f4d4e16006816040516110af9190611ee1565b60405180910390a150565b6110c2611a29565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611132576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111299061209a565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fc81d567f41a0910d7cd4117a2960e9fbdf9a232a48e6b6fc94033ac6c4db7aa4600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516111c49190611ee1565b60405180910390a150565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125690611fba565b60405180910390fd5b7fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516112d2929190611efc565b60405180910390a1600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60d081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b6113dd611a29565b612710600954826113ee9190612178565b1061142e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114259061203a565b60405180910390fd5b806008819055507f57a9cd79e547e62257530ed181309acb795c4e6aab927735a3e2afe2ac4d93098160405161146491906120fa565b60405180910390a150565b611477611a29565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de90611fda565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd780e06c55efd6b3157e8c26704d2fd7bd2750bd9d0e71d2e5f675572dfad7a2600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516115799190611ee1565b60405180910390a150565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611659836034662386f26fc100006115c591906121ce565b7368a356240deaec81d6d59986c2cde4b8035ddeaf63907af6c06040518163ffffffff1660e01b815260040160206040518083038186803b15801561160957600080fd5b505af415801561161d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116419190611cad565b61164b9190612178565b611ab990919063ffffffff16565b90506116f47368a356240deaec81d6d59986c2cde4b8035ddeaf63907af6c06040518163ffffffff1660e01b815260040160206040518083038186803b1580156116a257600080fd5b505af41580156116b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116da9190611cad565b826116e591906123ca565b85611ba190919063ffffffff16565b91505092915050565b6034606460f069425bfbffaab0165400006117189190612370565b61172291906121ce565b61172c91906121ce565b81565b60085481565b60095481565b60055481565b60008061174c610d3c565b6117595780915050611913565b600061176361191c565b9050600060065490505b600082111561190c5780806117819061251d565b915050600260ff168110156117df576034606460f069425bfbffaab0165400006117ab9190612370565b6117b591906121ce565b6117bf91906121ce565b836117ca9190612178565b925081806117d7906124f3565b925050611907565b60d060ff168111611834576000600160026117fa91906123fe565b60ff168261180891906123ca565b905061181381610ded565b8461181e9190612178565b9350828061182b906124f3565b93505050611906565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561189e57600080fd5b505afa1580156118b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d69190611cad565b9050600084826118e69190612178565b90506118f281856115aa565b856118fd9190612178565b94506000935050505b5b61176d565b8293505050505b90565b60065481565b6000806005544261192d91906123ca565b905062093a808161193e91906121ce565b91505090565b62093a8081565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061197c61191c565b90508060065461198c9190612178565b6006819055506201518062093a806006546119a79190612370565b7f00000000000000000000000000000000000000000000000000000000000000006119d29190612178565b6119dc9190612178565b6005819055507feae287c62f1ff4911334dee03f631d5dded5284b1b03ea7bc1d6282916c7249f8382600554604051611a1793929190612115565b60405180910390a16001915050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae9061205a565b60405180910390fd5b565b6000807368a356240deaec81d6d59986c2cde4b8035ddeaf63907af6c06040518163ffffffff1660e01b815260040160206040518083038186803b158015611b0057600080fd5b505af4158015611b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b389190611cad565b90505b6000831115611b97576000600284611b539190612566565b14611b6e57611b6b8482611ba190919063ffffffff16565b90505b611b818485611ba190919063ffffffff16565b9350600283611b9091906121ce565b9250611b3b565b8091505092915050565b6000601260ff16600a611bb49190612252565b8284611bc09190612370565b611bca91906121ce565b905092915050565b600081359050611be181612839565b92915050565b600081359050611bf681612850565b92915050565b600081359050611c0b81612867565b92915050565b600081519050611c2081612867565b92915050565b600060208284031215611c3c57611c3b6125f5565b5b6000611c4a84828501611bd2565b91505092915050565b600060208284031215611c6957611c686125f5565b5b6000611c7784828501611be7565b91505092915050565b600060208284031215611c9657611c956125f5565b5b6000611ca484828501611bfc565b91505092915050565b600060208284031215611cc357611cc26125f5565b5b6000611cd184828501611c11565b91505092915050565b60008060408385031215611cf157611cf06125f5565b5b6000611cff85828601611bfc565b9250506020611d1085828601611bfc565b9150509250929050565b611d2381612432565b82525050565b611d3281612444565b82525050565b611d4181612499565b82525050565b611d50816124ab565b82525050565b611d5f816124bd565b82525050565b6000611d72603583612167565b9150611d7d82612607565b604082019050919050565b6000611d95601c83612167565b9150611da082612656565b602082019050919050565b6000611db8601783612167565b9150611dc38261267f565b602082019050919050565b6000611ddb603683612167565b9150611de6826126a8565b604082019050919050565b6000611dfe602883612167565b9150611e09826126f7565b604082019050919050565b6000611e21602f83612167565b9150611e2c82612746565b604082019050919050565b6000611e44601783612167565b9150611e4f82612795565b602082019050919050565b6000611e67601383612167565b9150611e72826127be565b602082019050919050565b6000611e8a601f83612167565b9150611e95826127e7565b602082019050919050565b6000611ead601583612167565b9150611eb882612810565b602082019050919050565b611ecc81612482565b82525050565b611edb8161248c565b82525050565b6000602082019050611ef66000830184611d1a565b92915050565b6000604082019050611f116000830185611d1a565b611f1e6020830184611d1a565b9392505050565b6000604082019050611f3a6000830185611d1a565b611f476020830184611ec3565b9392505050565b6000602082019050611f636000830184611d29565b92915050565b6000602082019050611f7e6000830184611d38565b92915050565b6000602082019050611f996000830184611d47565b92915050565b6000602082019050611fb46000830184611d56565b92915050565b60006020820190508181036000830152611fd381611d65565b9050919050565b60006020820190508181036000830152611ff381611d88565b9050919050565b6000602082019050818103600083015261201381611dab565b9050919050565b6000602082019050818103600083015261203381611dce565b9050919050565b6000602082019050818103600083015261205381611df1565b9050919050565b6000602082019050818103600083015261207381611e14565b9050919050565b6000602082019050818103600083015261209381611e37565b9050919050565b600060208201905081810360008301526120b381611e5a565b9050919050565b600060208201905081810360008301526120d381611e7d565b9050919050565b600060208201905081810360008301526120f381611ea0565b9050919050565b600060208201905061210f6000830184611ec3565b92915050565b600060608201905061212a6000830186611ec3565b6121376020830185611ec3565b6121446040830184611ec3565b949350505050565b60006020820190506121616000830184611ed2565b92915050565b600082825260208201905092915050565b600061218382612482565b915061218e83612482565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156121c3576121c2612597565b5b828201905092915050565b60006121d982612482565b91506121e483612482565b9250826121f4576121f36125c6565b5b828204905092915050565b6000808291508390505b60018511156122495780860481111561222557612224612597565b5b60018516156122345780820291505b8081029050612242856125fa565b9450612209565b94509492505050565b600061225d82612482565b915061226883612482565b92506122957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461229d565b905092915050565b6000826122ad5760019050612369565b816122bb5760009050612369565b81600181146122d157600281146122db5761230a565b6001915050612369565b60ff8411156122ed576122ec612597565b5b8360020a91508482111561230457612303612597565b5b50612369565b5060208310610133831016604e8410600b841016171561233f5782820a90508381111561233a57612339612597565b5b612369565b61234c84848460016121ff565b9250905081840481111561236357612362612597565b5b81810290505b9392505050565b600061237b82612482565b915061238683612482565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156123bf576123be612597565b5b828202905092915050565b60006123d582612482565b91506123e083612482565b9250828210156123f3576123f2612597565b5b828203905092915050565b60006124098261248c565b91506124148361248c565b92508282101561242757612426612597565b5b828203905092915050565b600061243d82612462565b9050919050565b60008115159050919050565b600061245b82612432565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006124a4826124cf565b9050919050565b60006124b6826124cf565b9050919050565b60006124c8826124cf565b9050919050565b60006124da826124e1565b9050919050565b60006124ec82612462565b9050919050565b60006124fe82612482565b9150600082141561251257612511612597565b5b600182039050919050565b600061252882612482565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561255b5761255a612597565b5b600182019050919050565b600061257182612482565b915061257c83612482565b92508261258c5761258b6125c6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600080fd5b60008160011c9050919050565b7f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560008201527f2063616e20616363657074206f776e6572736869700000000000000000000000602082015250565b7f537570706c795363686564756c653a205a65726f204164647265737300000000600082015250565b7f5374616b696e672072657761726473206e6f7420736574000000000000000000600082015250565b7f537570706c795363686564756c653a205265776172642063616e6e6f7420657860008201527f63656564206d6178206d696e7465722072657761726400000000000000000000602082015250565b7f537570706c795363686564756c653a2043616e6e6f74206265206d6f7265207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660008201527f6f726d207468697320616374696f6e0000000000000000000000000000000000602082015250565b7f54726164696e672072657761726473206e6f7420736574000000000000000000600082015250565b7f416464726573732063616e6e6f74206265203000000000000000000000000000600082015250565b7f537570706c795363686564756c653a20496e76616c6964204164647265737300600082015250565b7f4e6f20737570706c79206973206d696e7461626c650000000000000000000000600082015250565b61284281612432565b811461284d57600080fd5b50565b61285981612450565b811461286457600080fd5b50565b61287081612482565b811461287b57600080fd5b5056fea264697066735822122024fcaf1daac0cd706bf13d0538fefa4a77de1d0d849c3feb8afafb7c735693aa64736f6c63430008070033000000000000000000000000652c46a302060b324a02d2d3e4a56e3da07fa91b000000000000000000000000c2ecd777d06ffdf8b3179286beabf52b67e9d991

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000652c46a302060b324a02d2d3e4a56e3da07fa91b000000000000000000000000c2ecd777d06ffdf8b3179286beabf52b67e9d991

-----Decoded View---------------
Arg [0] : _owner (address): 0x652c46a302060B324A02d2d3e4a56e3DA07FA91b
Arg [1] : _treasuryDAO (address): 0xC2ecD777d06FFDF8B3179286BEabF52B67E9d991

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000652c46a302060b324a02d2d3e4a56e3da07fa91b
Arg [1] : 000000000000000000000000c2ecd777d06ffdf8b3179286beabf52b67e9d991


Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading