Contract 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef

 
Txn Hash
Block
From
To
Value [Txn Fee]
0xcefc44188c833b4da9336f38a605498496e081440757459e28c9d8c2180da4b884305932021-06-19 10:56:201 day 8 hrs agoCrudeoil Finance: Deployer IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.000300755
0x8cd49841d0538dcf0f3771325a335782e46bde2562a63f97420e8f5bf2472e7984305722021-06-19 10:55:101 day 8 hrs agoCrudeoil Finance: Deployer IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.000192755
0xc41698936b1beafde3c24977c59f723840343700107649063148c4d8c05c15b784305652021-06-19 10:54:381 day 8 hrs agoCrudeoil Finance: Deployer IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.00014259
0xc65d5ef5e66db5dfe1cea2d22513ead5deaabd58c44d94ac7655f8182cdf27a584273512021-06-19 8:13:071 day 11 hrs ago0x3659f47efc320cf7b5f7a4ab216447c0dad30e90 IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.00072608
0x35f5d8f341f5e2717cae8a24d74d70a243644c5009ed3050c874e435a6ac9ab684190862021-06-19 1:18:181 day 18 hrs ago0x99472bd8903143a2e8b17dc564fb3d96af029501 IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.000577235
0x45f7700727b09646c5cd38dddde63bfa9648b7d65051cc50f85cd47c73740f6184050732021-06-18 13:29:442 days 5 hrs ago0x8056bcec6572dcc94fe9585a3162f144acef9d48 IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.00072563
0x8df251825a175b9234c3324236075adb90601bf8c8e6e59dbdd2c5802d8f662384045362021-06-18 13:02:482 days 6 hrs ago0x3eb762c19f243f8b197928c764047391ecaf0718 IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.000501725
0xf42cb6f8ffbbe3b320fd2e263e3ad5ca56722f4580851ad51e671c9fb782622a84045272021-06-18 13:02:212 days 6 hrs ago0x3eb762c19f243f8b197928c764047391ecaf0718 IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.000441265
0x782fe7467d1fa70ae288969c55188223c9846df61c374f0be4c46af6bdb0775584042342021-06-18 12:47:422 days 6 hrs ago0x3eecd304afabfa43f0901b9951644a2acb4221a6 IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.000577235
0x4e7cf3b7ba1ce575b4d247305854f8c12afb85e3dd920485d3885a8f01743aa783947392021-06-18 4:49:102 days 14 hrs ago0x3eecd304afabfa43f0901b9951644a2acb4221a6 IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.000577235
0xb93888ed13f213340c64c025523e777dc48f6a204e3acb8e8618ca064a6b96e183926462021-06-18 3:03:212 days 16 hrs ago0x3eecd304afabfa43f0901b9951644a2acb4221a6 IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.000577235
0x6f82b2968386723206f70c5b86b20bbec67f79c103955db151b226d3005ab91d83893382021-06-18 0:16:452 days 19 hrs ago0x114eebfe119f66d3e2641a37322736741cd5de8b IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.000501785
0xa3963565e9aa327de9844d47ac89bd9e239d2bc6799d58c3bd1d2400011964fa83893332021-06-18 0:16:302 days 19 hrs ago0x114eebfe119f66d3e2641a37322736741cd5de8b IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.000441265
0xd15c9061a9bd6afba67533bbf7668c9a3a4c9282659ee7e948f9ebf79f85114983862972021-06-17 21:41:562 days 21 hrs ago0x795902776c75f0f73ada7d8d15b987dbd8b9baf8 IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.00065063
0x0c763623daa03956a6ba4afc7e4e75795cabe8f4a3d62cd0ace358632a9f71b883480422021-06-16 13:34:284 days 5 hrs ago0x8c88b0dda9a0a3dd158dc5c63a2a3b48b47a9566 IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.000577175
0xffa4269cb980da248e0d7a309e4fe55bec170debabb38e03f3cbb3ad91d5fad583480302021-06-16 13:33:524 days 5 hrs ago0x8c88b0dda9a0a3dd158dc5c63a2a3b48b47a9566 IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.000441265
0xc16bfae35d3c95870682acbef59b628d97947ed9ffa6fbc4ee3ffa85a53dfaa883415762021-06-16 8:09:224 days 11 hrs ago0x4abc346cfe2b1fc626d6eb571db0e9ae00117cff IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.00072608
0x73e730b541f34df2f145c796725f5fc4867f8a3ed6dd5f94a1e719bdb43772c483329052021-06-16 0:50:434 days 18 hrs ago0x52bc393b604626bbb7dff3fbd23e6d64f8a598cf IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.000577175
0xd0042a60678a802e0f1ce9b743bbf6711643c80630f48ecfa31e53ef2175411283328792021-06-16 0:49:254 days 18 hrs ago0x52bc393b604626bbb7dff3fbd23e6d64f8a598cf IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.000516265
0x79c8090d25ab453b0c6a7649fcc817db78c7c15b523c6e694b502aec8395b63983323022021-06-16 0:20:344 days 19 hrs ago0x7abc42e2cfd1337b2bf069b7ab90ced1b6eed2b7 IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.00059663
0xecd3a32b1f6f0a701a8d75b479f32192bce7a659f07d416ed1857e4bfd759e8f83207992021-06-15 14:40:045 days 4 hrs ago0xbb14d842606f414897ea6854e69a11b950d48317 IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.000501725
0x334e5bf1b89d981436c9bf7a5498fb6191e13f2fe45343184f601671c5b5a7e683207942021-06-15 14:39:495 days 4 hrs ago0xbb14d842606f414897ea6854e69a11b950d48317 IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.000441265
0xea122622defc06f8ec25412c994e16c44be6318f5c67c0af89d7caa969d1ef3d83007362021-06-14 21:38:485 days 21 hrs ago0x6ea1fd3efb9f1cd34b3376d6f00148824c025775 IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.00025036
0xb0fa56d2db3348db8b45cc6d5eaa967cf31cf4100fa56dae4fef68f286a7449c83007342021-06-14 21:38:425 days 21 hrs ago0x6ea1fd3efb9f1cd34b3376d6f00148824c025775 IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.00072614
0x86c56f6f021b6dc8e4e2e0ed076ad9e295fb7d309cff00f10dfb3f312e2a0c2c82866172021-06-14 9:47:296 days 9 hrs ago0xdc9f27318a3990c3ad9532c6d769550ec111d770 IN  0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef0 BNB0.0005887797
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x7dbeebc29b068b0d265db8e1e351647762435c5f1c8a99a87cd3a3007b66811c54706062021-03-07 11:23:15105 days 7 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0x2aeb93258f95d361ac045e7ace8461570ba0c92ec51bc5c71110237d74638e8354692452021-03-07 10:15:12105 days 9 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0x9545bcc924f60d062f623065219aba6a55187765592729fc4b8ee38d01637bc054691622021-03-07 10:11:03105 days 9 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0xf2f089dc1e7c48213b64a20e66f3ed1e615bff2f3925f3bd8713de112d670c3c54691442021-03-07 10:10:09105 days 9 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0x28c8e88dd33641937521bbd664f308bfab5fba3498a65bc61bf42883a329345d54689702021-03-07 10:01:27105 days 9 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0x28c8e88dd33641937521bbd664f308bfab5fba3498a65bc61bf42883a329345d54689702021-03-07 10:01:27105 days 9 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0xaebf03e0ea4cf0442596394d1257eaf4af05cd803954af59714fd357e03ffd9b54684922021-03-07 9:37:33105 days 9 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0x03400077218cf04984ede3c006b83de3670f2e2d0f8113d1c28ab7ccd2073e1454680572021-03-07 9:15:48105 days 10 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0x3b7eca38d94353911a3eaf5bac1231e8e6389f6bf3eb0cc8f3ebc6ead65bdf7154680382021-03-07 9:14:51105 days 10 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0xc578dd25d15f5c37c61dbb9082dbe89f1cfdb9059539fbf40aababe13483917054674312021-03-07 8:44:30105 days 10 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0x86c7f81e583196c62876fab8b34a110cd1b0e38035d2a5e70feedbda8c64866454672232021-03-07 8:34:06105 days 10 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0xf30c0f96122892268bff72aac0c02f2e5d49743d112339b8f1d19aa403f2382054671922021-03-07 8:32:33105 days 10 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0xb45b03c2e637d2b05a6e4290f0ce1595e68dcaae1ea4d202fcd1dc734a44bc4d54665412021-03-07 8:00:00105 days 11 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0x43c6aa343e4d642ec18c277d8cae1400a11ad4355af2670327b5d258d67be9ab54662352021-03-07 7:44:42105 days 11 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0x93f3d7e90f930ec65acb163fc630049dcc20aced6b9e918a08f3a83b5b72fe4054662142021-03-07 7:43:39105 days 11 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0x54c8727115ed5f1f1d48f6970a5cdbdfbc5ec5e53726308fbd3e296322a9574854660832021-03-07 7:37:06105 days 11 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0xa9c54641d60be4c27a2fc69ee15d0ac8746ce3d88d2f2a99a6a11a7f8d83050c54654672021-03-07 7:06:18105 days 12 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0xba2f135c54e6005905055d754e3dbb7a7a2b241618b090bff17232f37b2da0d254654612021-03-07 7:06:00105 days 12 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0x0f6428a0275874b50434b357eadb6acb257ca108d8671dc0ba962dbd1304304454652902021-03-07 6:57:27105 days 12 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0xdcecc0f5d90ab8546394706a93f941a6bd1b74167656d4b12aa1a9f1ec7927eb54652782021-03-07 6:56:51105 days 12 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0xf472e9b9baa6007153fc065e4261fe9ffceb6cb3bac2e294e964cac422ec737754647092021-03-07 6:28:24105 days 12 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0xe431764cbfc1f9502f37f4b0d321710e8606f45fdfde71b1c5ace48559a013c354646912021-03-07 6:27:30105 days 12 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0xa504390d1a4cab144f862bc4a4156aee65d3ea6849038356892604c6983be33054646032021-03-07 6:23:06105 days 12 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0x48899ed6eab1ad4e5967f065ac870ea7555b4b2ac5a0035c0c241025bee2045654642752021-03-07 6:06:42105 days 13 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
0x7cade73d6b305d49aa3d1ac23adeb4bb2611b92e84355d3da1a936cf4da84b0654636562021-03-07 5:35:35105 days 13 hrs ago 0xbb0aad997d4d10d7586ecab79a2bcbf62a8600ef Crudeoil Finance: OIL Token0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Injection

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-02-19
*/

pragma solidity ^0.5.17;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow, so we distribute
        return (a / 2) + (b / 2) + (((a % 2) + (b % 2)) / 2);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
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: @openzeppelin/contracts/GSN/Context.sol
/*
 * @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 GSN 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.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor() internal {}

    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin/contracts/ownership/Ownable.sol
/**
 * @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.
 *
 * 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.
 */
contract Ownable is Context {
    address public _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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 onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract IRewardDistributionRecipient is Ownable {
    address public rewardDistribution;

    function notifyRewardAmount(uint256 reward) external;

    modifier onlyRewardDistribution() {
        require(
            _msgSender() == rewardDistribution,
            "Caller is not reward distribution"
        );
        _;
    }

    function setRewardDistribution(address _rewardDistribution)
        external
        onlyOwner
    {
        rewardDistribution = _rewardDistribution;
    }
}

// File: @openzeppelin/contracts/math/SafeMath.sol

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash =
            0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Converts an `address` into `address payable`. Note that this is
     * simply a type cast: the actual underlying value is not changed.
     *
     * _Available since v2.4.0._
     */
    function toPayable(address account)
        internal
        pure
        returns (address payable)
    {
        return address(uint160(account));
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     *
     * _Available since v2.4.0._
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call.value(amount)("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }
}

contract TokenWrapper {
    using SafeMath for uint256;

    IERC20 private LPToken = IERC20(0xb1b17DFf66d75b29d34f0Bf8622c406D8219B507);

    uint256 private _totalSupply;
    mapping(address => uint256) private _balances;

    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    function stake(uint256 amount) public {
        _totalSupply = _totalSupply.add(amount);
        _balances[msg.sender] = _balances[msg.sender].add(amount);
        LPToken.transferFrom(msg.sender, address(this), amount);
    }

    function withdraw(uint256 amount) public {
        _totalSupply = _totalSupply.sub(amount);
        _balances[msg.sender] = _balances[msg.sender].sub(amount);
        LPToken.transfer(msg.sender, amount);
    }
}

contract Injection is TokenWrapper, IRewardDistributionRecipient {
    IERC20 public MainToken =
        IERC20(0xb1b17DFf66d75b29d34f0Bf8622c406D8219B507);
    uint256 public constant DURATION = 90 days;

    uint256 public periodFinish = 0;
    uint256 public rewardRate = 0;
    uint256 public lastUpdateTime;
    uint256 public rewardPerTokenStored;
    mapping(address => uint256) public userRewardPerTokenPaid;
    mapping(address => uint256) public rewards;

    event RewardAdded(uint256 reward);
    event Staked(address indexed user, uint256 amount);
    event Withdrawn(address indexed user, uint256 amount);
    event RewardPaid(address indexed user, uint256 reward);

    modifier updateReward(address account) {
        rewardPerTokenStored = rewardPerToken();
        lastUpdateTime = lastTimeRewardApplicable();
        if (account != address(0)) {
            rewards[account] = earned(account);
            userRewardPerTokenPaid[account] = rewardPerTokenStored;
        }
        _;
    }

    function lastTimeRewardApplicable() public view returns (uint256) {
        return Math.min(block.timestamp, periodFinish);
    }

    function rewardPerToken() public view returns (uint256) {
        if (totalSupply() == 0) {
            return rewardPerTokenStored;
        }
        return
            rewardPerTokenStored.add(
                lastTimeRewardApplicable()
                    .sub(lastUpdateTime)
                    .mul(rewardRate)
                    .mul(1e18)
                    .div(totalSupply())
            );
    }

    function earned(address account) public view returns (uint256) {
        return
            balanceOf(account)
                .mul(rewardPerToken().sub(userRewardPerTokenPaid[account]))
                .div(1e18)
                .add(rewards[account]);
    }

    // stake visibility is public as overriding LPTokenWrapper's stake() function
    function stake(uint256 amount) public updateReward(msg.sender) {
        require(amount > 0, "Cannot stake 0");
        super.stake(amount);
        emit Staked(msg.sender, amount);
    }

    function withdraw(uint256 amount) public updateReward(msg.sender) {
        require(amount > 0, "Cannot withdraw 0");
        super.withdraw(amount);
        emit Withdrawn(msg.sender, amount);
    }

    function exit() external {
        withdraw(balanceOf(msg.sender));
        getReward();
    }

    function withdrawAmount(uint256 amount) external {
        withdraw(amount);
        getReward();
    }

    function getReward() public updateReward(msg.sender) {
        uint256 reward = earned(msg.sender);
        if (reward > 0) {
            rewards[msg.sender] = 0;
            MainToken.transfer(msg.sender, reward);
            emit RewardPaid(msg.sender, reward);
        }
    }

    function notifyRewardAmount(uint256 reward)
        external
        onlyRewardDistribution
        updateReward(address(0))
    {
        if (block.timestamp >= periodFinish) {
            rewardRate = reward.div(DURATION);
        } else {
            uint256 remaining = periodFinish.sub(block.timestamp);
            uint256 leftover = remaining.mul(rewardRate);
            rewardRate = reward.add(leftover).div(DURATION);
        }
        lastUpdateTime = block.timestamp;
        periodFinish = block.timestamp.add(DURATION);
        emit RewardAdded(reward);
    }

    // only when emergency withdraw
    function withdrawMainToken(uint256 amount) external onlyRewardDistribution {
        require(MainToken.balanceOf(address(this)) > amount, "amount exceeds");
        rewardRate = 0;
        periodFinish = 0;
        MainToken.transfer(_owner, amount);
    }
}

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"constant":true,"inputs":[],"name":"DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MainToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"getReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rewardDistribution","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_rewardDistribution","type":"address"}],"name":"setRewardDistribution","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawMainToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040526000805473b1b17dff66d75b29d34f0bf8622c406d8219b5076001600160a01b031991821681178355600580549092161790556006819055600781905561004961009c565b600380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506100a0565b3390565b61123c806100af6000396000f3fe608060405234801561001057600080fd5b50600436106101a85760003560e01c80637b0a47ee116100f9578063c8f33c9111610097578063e9fad8ee11610071578063e9fad8ee146103a8578063ebe2b12b146103b0578063f2fde38b146103b8578063f5194ae2146103de576101a8565b8063c8f33c9114610390578063cd3daf9d14610398578063df136d65146103a0576101a8565b80638da5cb5b116100d35780638da5cb5b146103475780638f32d59b1461034f578063a694fc3a1461036b578063b2bdfa7b14610388576101a8565b80637b0a47ee1461031157806380faa57d146103195780638b87634714610321576101a8565b80631be05289116101665780633d18b912116101405780633d18b912146102be578063511257a9146102c657806370a08231146102e3578063715018a614610309576101a8565b80631be052891461027c5780632e1a7d4d146102845780633c6b16ab146102a1576101a8565b80628cc262146101ad5780630562b9f7146101e55780630700037d146102045780630d68b7611461022a578063101114cf1461025057806318160ddd14610274575b600080fd5b6101d3600480360360208110156101c357600080fd5b50356001600160a01b03166103e6565b60408051918252519081900360200190f35b610202600480360360208110156101fb57600080fd5b503561046c565b005b6101d36004803603602081101561021a57600080fd5b50356001600160a01b0316610480565b6102026004803603602081101561024057600080fd5b50356001600160a01b0316610492565b61025861050d565b604080516001600160a01b039092168252519081900360200190f35b6101d361051c565b6101d3610523565b6102026004803603602081101561029a57600080fd5b503561052a565b610202600480360360208110156102b757600080fd5b5035610611565b61020261078b565b610202600480360360208110156102dc57600080fd5b50356108c5565b6101d3600480360360208110156102f957600080fd5b50356001600160a01b0316610a6d565b610202610a88565b6101d3610b2b565b6101d3610b31565b6101d36004803603602081101561033757600080fd5b50356001600160a01b0316610b44565b610258610b56565b610357610b65565b604080519115158252519081900360200190f35b6102026004803603602081101561038157600080fd5b5035610b8b565b610258610c6f565b6101d3610c7e565b6101d3610c84565b6101d3610cd8565b610202610cde565b6101d3610cf9565b610202600480360360208110156103ce57600080fd5b50356001600160a01b0316610cff565b610258610d61565b6001600160a01b0381166000908152600b6020908152604080832054600a909252822054610466919061045a90670de0b6b3a76400009061044e906104399061042d610c84565b9063ffffffff610d7016565b61044288610a6d565b9063ffffffff610db916565b9063ffffffff610e1216565b9063ffffffff610e5416565b92915050565b6104758161052a565b61047d61078b565b50565b600b6020526000908152604090205481565b61049a610b65565b6104eb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b031681565b6001545b90565b6276a70081565b33610533610c84565b60095561053e610b31565b6008556001600160a01b0381161561058557610559816103e6565b6001600160a01b0382166000908152600b6020908152604080832093909355600954600a909152919020555b600082116105ce576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b6105d782610eae565b60408051838152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050565b6004546001600160a01b0316610625610f48565b6001600160a01b03161461066a5760405162461bcd60e51b81526004018080602001828103825260218152602001806111e76021913960400191505060405180910390fd5b6000610674610c84565b60095561067f610b31565b6008556001600160a01b038116156106c65761069a816103e6565b6001600160a01b0382166000908152600b6020908152604080832093909355600954600a909152919020555b60065442106106ea576106e2826276a70063ffffffff610e1216565b600755610738565b600654600090610700904263ffffffff610d7016565b9050600061071960075483610db990919063ffffffff16565b90506107326276a70061044e868463ffffffff610e5416565b60075550505b426008819055610751906276a70063ffffffff610e5416565b6006556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15050565b33610794610c84565b60095561079f610b31565b6008556001600160a01b038116156107e6576107ba816103e6565b6001600160a01b0382166000908152600b6020908152604080832093909355600954600a909152919020555b60006107f1336103e6565b905080156108c157336000818152600b60209081526040808320839055600554815163a9059cbb60e01b815260048101959095526024850186905290516001600160a01b039091169363a9059cbb9360448083019493928390030190829087803b15801561085e57600080fd5b505af1158015610872573d6000803e3d6000fd5b505050506040513d602081101561088857600080fd5b505060408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b5050565b6004546001600160a01b03166108d9610f48565b6001600160a01b03161461091e5760405162461bcd60e51b81526004018080602001828103825260218152602001806111e76021913960400191505060405180910390fd5b600554604080516370a0823160e01b8152306004820152905183926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561096857600080fd5b505afa15801561097c573d6000803e3d6000fd5b505050506040513d602081101561099257600080fd5b5051116109d7576040805162461bcd60e51b815260206004820152600e60248201526d616d6f756e74206578636565647360901b604482015290519081900360640190fd5b6000600781905560068190556005546003546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018690529051919092169263a9059cbb92604480820193602093909283900390910190829087803b158015610a3e57600080fd5b505af1158015610a52573d6000803e3d6000fd5b505050506040513d6020811015610a6857600080fd5b505050565b6001600160a01b031660009081526002602052604090205490565b610a90610b65565b610ae1576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380546001600160a01b0319169055565b60075481565b6000610b3f42600654610f4c565b905090565b600a6020526000908152604090205481565b6003546001600160a01b031690565b6003546000906001600160a01b0316610b7c610f48565b6001600160a01b031614905090565b33610b94610c84565b600955610b9f610b31565b6008556001600160a01b03811615610be657610bba816103e6565b6001600160a01b0382166000908152600b6020908152604080832093909355600954600a909152919020555b60008211610c2c576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b610c3582610f62565b60408051838152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25050565b6003546001600160a01b031681565b60085481565b6000610c8e61051c565b610c9b5750600954610520565b610b3f610cc9610ca961051c565b61044e670de0b6b3a764000061044260075461044260085461042d610b31565b6009549063ffffffff610e5416565b60095481565b610cef610cea33610a6d565b61052a565b610cf761078b565b565b60065481565b610d07610b65565b610d58576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61047d81611002565b6005546001600160a01b031681565b6000610db283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506110a3565b9392505050565b600082610dc857506000610466565b82820282848281610dd557fe5b0414610db25760405162461bcd60e51b81526004018080602001828103825260218152602001806111c66021913960400191505060405180910390fd5b6000610db283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061113a565b600082820183811015610db2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600154610ec1908263ffffffff610d7016565b60015533600090815260026020526040902054610ee4908263ffffffff610d7016565b336000818152600260209081526040808320949094558154845163a9059cbb60e01b815260048101949094526024840186905293516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b158015610a3e57600080fd5b3390565b6000818310610f5b5781610db2565b5090919050565b600154610f75908263ffffffff610e5416565b60015533600090815260026020526040902054610f98908263ffffffff610e5416565b33600081815260026020908152604080832094909455815484516323b872dd60e01b815260048101949094523060248501526044840186905293516001600160a01b03909416936323b872dd93606480820194918390030190829087803b158015610a3e57600080fd5b6001600160a01b0381166110475760405162461bcd60e51b81526004018080602001828103825260268152602001806111a06026913960400191505060405180910390fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b600081848411156111325760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156110f75781810151838201526020016110df565b50505050905090810190601f1680156111245780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836111895760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156110f75781810151838201526020016110df565b50600083858161119557fe5b049594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616c6c6572206973206e6f742072657761726420646973747269627574696f6ea265627a7a72315820d712035a20c30096ba4f375d2ed941cb94935a000397d485cb842bb8b844617764736f6c63430005110032

Deployed ByteCode Sourcemap

17690:3783:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17690:3783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19297:265;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19297:265:0;-1:-1:-1;;;;;19297:265:0;;:::i;:::-;;;;;;;;;;;;;;;;20168:106;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20168:106:0;;:::i;:::-;;18121:42;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18121:42:0;-1:-1:-1;;;;;18121:42:0;;:::i;7830:161::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7830:161:0;-1:-1:-1;;;;;7830:161:0;;:::i;7537:33::-;;;:::i;:::-;;;;-1:-1:-1;;;;;7537:33:0;;;;;;;;;;;;;;17014:91;;;:::i;17854:42::-;;;:::i;19852:203::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19852:203:0;;:::i;20576:588::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20576:588:0;;:::i;20282:286::-;;;:::i;21209:261::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21209:261:0;;:::i;17113:110::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17113:110:0;-1:-1:-1;;;;;17113:110:0;;:::i;6698:140::-;;;:::i;17943:29::-;;;:::i;18730:131::-;;;:::i;18057:57::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18057:57:0;-1:-1:-1;;;;;18057:57:0;;:::i;5887:79::-;;;:::i;6253:94::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;19653:191;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19653:191:0;;:::i;5398:21::-;;;:::i;17979:29::-;;;:::i;18869:420::-;;;:::i;18015:35::-;;;:::i;20063:97::-;;;:::i;17905:31::-;;;:::i;6993:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6993:109:0;-1:-1:-1;;;;;6993:109:0;;:::i;17762:85::-;;;:::i;19297:265::-;-1:-1:-1;;;;;19537:16:0;;19351:7;19537:16;;;:7;:16;;;;;;;;;19453:22;:31;;;;;;19391:163;;19537:16;19391:123;;19509:4;;19391:95;;19432:53;;:16;:14;:16::i;:::-;:20;:53;:20;:53;:::i;:::-;19391:18;19401:7;19391:9;:18::i;:::-;:40;:95;:40;:95;:::i;:::-;:117;:123;:117;:123;:::i;:::-;:145;:163;:145;:163;:::i;:::-;19371:183;19297:265;-1:-1:-1;;19297:265:0:o;20168:106::-;20228:16;20237:6;20228:8;:16::i;:::-;20255:11;:9;:11::i;:::-;20168:106;:::o;18121:42::-;;;;;;;;;;;;;:::o;7830:161::-;6099:9;:7;:9::i;:::-;6091:54;;;;;-1:-1:-1;;;6091:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7943:18;:40;;-1:-1:-1;;;;;;7943:40:0;-1:-1:-1;;;;;7943:40:0;;;;;;;;;;7830:161::o;7537:33::-;;;-1:-1:-1;;;;;7537:33:0;;:::o;17014:91::-;17085:12;;17014:91;;:::o;17854:42::-;17889:7;17854:42;:::o;19852:203::-;19906:10;18465:16;:14;:16::i;:::-;18442:20;:39;18509:26;:24;:26::i;:::-;18492:14;:43;-1:-1:-1;;;;;18550:21:0;;;18546:157;;18607:15;18614:7;18607:6;:15::i;:::-;-1:-1:-1;;;;;18588:16:0;;;;;;:7;:16;;;;;;;;:34;;;;18671:20;;18637:22;:31;;;;;;:54;18546:157;19946:1;19937:6;:10;19929:40;;;;;-1:-1:-1;;;19929:40:0;;;;;;;;;;;;-1:-1:-1;;;19929:40:0;;;;;;;;;;;;;;;19980:22;19995:6;19980:14;:22::i;:::-;20018:29;;;;;;;;20028:10;;20018:29;;;;;;;;;;19852:203;;:::o;20576:588::-;7723:18;;-1:-1:-1;;;;;7723:18:0;7707:12;:10;:12::i;:::-;-1:-1:-1;;;;;7707:34:0;;7685:117;;;;-1:-1:-1;;;7685:117:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20700:1;18465:16;:14;:16::i;:::-;18442:20;:39;18509:26;:24;:26::i;:::-;18492:14;:43;-1:-1:-1;;;;;18550:21:0;;;18546:157;;18607:15;18614:7;18607:6;:15::i;:::-;-1:-1:-1;;;;;18588:16:0;;;;;;:7;:16;;;;;;;;:34;;;;18671:20;;18637:22;:31;;;;;;:54;18546:157;20743:12;;20724:15;:31;20720:304;;20785:20;:6;17889:7;20785:20;:10;:20;:::i;:::-;20772:10;:33;20720:304;;;20858:12;;20838:17;;20858:33;;20875:15;20858:33;:16;:33;:::i;:::-;20838:53;;20906:16;20925:25;20939:10;;20925:9;:13;;:25;;;;:::i;:::-;20906:44;-1:-1:-1;20978:34:0;17889:7;20978:20;:6;20906:44;20978:20;:10;:20;:::i;:34::-;20965:10;:47;-1:-1:-1;;20720:304:0;21051:15;21034:14;:32;;;21092:29;;17889:7;21092:29;:19;:29;:::i;:::-;21077:12;:44;21137:19;;;;;;;;;;;;;;;;;7813:1;20576:588;:::o;20282:286::-;20323:10;18465:16;:14;:16::i;:::-;18442:20;:39;18509:26;:24;:26::i;:::-;18492:14;:43;-1:-1:-1;;;;;18550:21:0;;;18546:157;;18607:15;18614:7;18607:6;:15::i;:::-;-1:-1:-1;;;;;18588:16:0;;;;;;:7;:16;;;;;;;;:34;;;;18671:20;;18637:22;:31;;;;;;:54;18546:157;20346:14;20363:18;20370:10;20363:6;:18::i;:::-;20346:35;-1:-1:-1;20396:10:0;;20392:169;;20431:10;20445:1;20423:19;;;:7;:19;;;;;;;;:23;;;20461:9;;:38;;-1:-1:-1;;;20461:38:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20461:9:0;;;;:18;;:38;;;;;20423:19;20461:38;;;;;;;;:9;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;20461:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20461:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;20519:30:0;;;;;;;;20530:10;;20519:30;;;;;;20461:38;20519:30;;;20392:169;18713:1;20282:286;:::o;21209:261::-;7723:18;;-1:-1:-1;;;;;7723:18:0;7707:12;:10;:12::i;:::-;-1:-1:-1;;;;;7707:34:0;;7685:117;;;;-1:-1:-1;;;7685:117:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21303:9;;:34;;;-1:-1:-1;;;21303:34:0;;21331:4;21303:34;;;;;;21340:6;;-1:-1:-1;;;;;21303:9:0;;:19;;:34;;;;;;;;;;;;;;:9;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;21303:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21303:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21303:34:0;:43;21295:70;;;;;-1:-1:-1;;;21295:70:0;;;;;;;;;;;;-1:-1:-1;;;21295:70:0;;;;;;;;;;;;;;;21389:1;21376:10;:14;;;21401:12;:16;;;21428:9;;21447:6;;21428:34;;;-1:-1:-1;;;21428:34:0;;-1:-1:-1;;;;;21447:6:0;;;21428:34;;;;;;;;;;;;:9;;;;;:18;;:34;;;;;;;;;;;;;;;;;;:9;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;21428:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21428:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;21209:261:0:o;17113:110::-;-1:-1:-1;;;;;17197:18:0;17170:7;17197:18;;;:9;:18;;;;;;;17113:110::o;6698:140::-;6099:9;:7;:9::i;:::-;6091:54;;;;;-1:-1:-1;;;6091:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6781:6;;6760:40;;6797:1;;-1:-1:-1;;;;;6781:6:0;;6760:40;;6797:1;;6760:40;6811:6;:19;;-1:-1:-1;;;;;;6811:19:0;;;6698:140::o;17943:29::-;;;;:::o;18730:131::-;18787:7;18814:39;18823:15;18840:12;;18814:8;:39::i;:::-;18807:46;;18730:131;:::o;18057:57::-;;;;;;;;;;;;;:::o;5887:79::-;5952:6;;-1:-1:-1;;;;;5952:6:0;5887:79;:::o;6253:94::-;6333:6;;6293:4;;-1:-1:-1;;;;;6333:6:0;6317:12;:10;:12::i;:::-;-1:-1:-1;;;;;6317:22:0;;6310:29;;6253:94;:::o;19653:191::-;19704:10;18465:16;:14;:16::i;:::-;18442:20;:39;18509:26;:24;:26::i;:::-;18492:14;:43;-1:-1:-1;;;;;18550:21:0;;;18546:157;;18607:15;18614:7;18607:6;:15::i;:::-;-1:-1:-1;;;;;18588:16:0;;;;;;:7;:16;;;;;;;;:34;;;;18671:20;;18637:22;:31;;;;;;:54;18546:157;19744:1;19735:6;:10;19727:37;;;;;-1:-1:-1;;;19727:37:0;;;;;;;;;;;;-1:-1:-1;;;19727:37:0;;;;;;;;;;;;;;;19775:19;19787:6;19775:11;:19::i;:::-;19810:26;;;;;;;;19817:10;;19810:26;;;;;;;;;;19653:191;;:::o;5398:21::-;;;-1:-1:-1;;;;;5398:21:0;;:::o;17979:29::-;;;;:::o;18869:420::-;18916:7;18940:13;:11;:13::i;:::-;18936:78;;-1:-1:-1;18982:20:0;;18975:27;;18936:78;19044:237;19087:179;19252:13;:11;:13::i;:::-;19087:138;19220:4;19087:106;19182:10;;19087:68;19140:14;;19087:26;:24;:26::i;:179::-;19044:20;;;:237;:24;:237;:::i;18015:35::-;;;;:::o;20063:97::-;20099:31;20108:21;20118:10;20108:9;:21::i;:::-;20099:8;:31::i;:::-;20141:11;:9;:11::i;:::-;20063:97::o;17905:31::-;;;;:::o;6993:109::-;6099:9;:7;:9::i;:::-;6091:54;;;;;-1:-1:-1;;;6091:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7066:28;7085:8;7066:18;:28::i;17762:85::-;;;-1:-1:-1;;;;;17762:85:0;;:::o;9340:136::-;9398:7;9425:43;9429:1;9432;9425:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9418:50;9340:136;-1:-1:-1;;;9340:136:0:o;10290:471::-;10348:7;10593:6;10589:47;;-1:-1:-1;10623:1:0;10616:8;;10589:47;10660:5;;;10664:1;10660;:5;:1;10684:5;;;;;:10;10676:56;;;;-1:-1:-1;;;10676:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11229:132;11287:7;11314:39;11318:1;11321;11314:39;;;;;;;;;;;;;;;;;:3;:39::i;8884:181::-;8942:7;8974:5;;;8998:6;;;;8990:46;;;;;-1:-1:-1;;;8990:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;17469:214;17536:12;;:24;;17553:6;17536:24;:16;:24;:::i;:::-;17521:12;:39;17605:10;17595:21;;;;:9;:21;;;;;;:33;;17621:6;17595:33;:25;:33;:::i;:::-;17581:10;17571:21;;;;:9;:21;;;;;;;;:57;;;;17639:7;;:36;;-1:-1:-1;;;17639:36:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17639:7:0;;;;:16;;:36;;;;;;;;;;;;;:7;:36;;;5:2:-1;;;;30:1;27;20:12;4599:98:0;4679:10;4599:98;:::o;375:106::-;433:7;464:1;460;:5;:13;;472:1;460:13;;;-1:-1:-1;468:1:0;;375:106;-1:-1:-1;375:106:0:o;17231:230::-;17295:12;;:24;;17312:6;17295:24;:16;:24;:::i;:::-;17280:12;:39;17364:10;17354:21;;;;:9;:21;;;;;;:33;;17380:6;17354:33;:25;:33;:::i;:::-;17340:10;17330:21;;;;:9;:21;;;;;;;;:57;;;;17398:7;;:55;;-1:-1:-1;;;17398:55:0;;;;;;;;;17439:4;17398:55;;;;;;;;;;;;-1:-1:-1;;;;;17398:7:0;;;;:20;;:55;;;;;;;;;;;;;:7;:55;;;5:2:-1;;;;30:1;27;20:12;7208:266:0;-1:-1:-1;;;;;7296:22:0;;7274:110;;;;-1:-1:-1;;;7274:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7421:6;;7400:38;;-1:-1:-1;;;;;7400:38:0;;;;7421:6;;7400:38;;7421:6;;7400:38;7449:6;:17;;-1:-1:-1;;;;;;7449:17:0;-1:-1:-1;;;;;7449:17:0;;;;;;;;;;7208:266::o;9813:226::-;9933:7;9969:12;9961:6;;;;9953:29;;;;-1:-1:-1;;;9953:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9953:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10005:5:0;;;9813:226::o;11891:379::-;12011:7;12113:12;12106:5;12098:28;;;;-1:-1:-1;;;12098:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;12098:28:0;;12137:9;12153:1;12149;:5;;;;;;;11891:379;-1:-1:-1;;;;;11891:379:0:o

Swarm Source

bzzr://d712035a20c30096ba4f375d2ed941cb94935a000397d485cb842bb8b8446177
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.