Contract 0x948db1713d4392ec04c86189070557c5a8566766

 
Txn Hash
Block
From
To
Value [Txn Fee]
0x27a3f303a1cfba2c179af352b2b903bd7a0e662b7c46a9c9ff51d4870642148b43618302021-01-27 16:35:143 mins ago0x9bdfa730eec76fdca5658472506a0246387bc709 IN  bDollar: Shares Distribution Pool0 BNB0.00195808
0xe6555340d65e64a56682044c68bff8a295e429ea0e3c2424a00ba5ab57f6812443618172021-01-27 16:34:353 mins ago0x4ee3b576bd82a28b89bede1977e75542c789ac6d IN  bDollar: Shares Distribution Pool0 BNB0.00193612
0xf200ebec20947ed59aa1fa186ef1e4b7c469789c9627041f3c665985d1ce376543618082021-01-27 16:34:084 mins ago0x7086b9dbf5ae304eca737be75d455e82be6941a4 IN  bDollar: Shares Distribution Pool0 BNB0.00195808
0xf877de5dbec1c75d174d59e52173b07ef9123be745f7f3b7c219756d5ef2c50043617882021-01-27 16:33:085 mins ago0x5eb509170238e0722572e4c8a149b8a81d680ac2 IN  bDollar: Shares Distribution Pool0 BNB0.00165832
0x06a371f6d4f79bf67481126fba93f34b496fe5c73b77f8114fe409f9f2c1ede043617872021-01-27 16:33:055 mins ago0x5eb509170238e0722572e4c8a149b8a81d680ac2 IN  bDollar: Shares Distribution Pool0 BNB0.00165808
0x4f17d3cec6891e18841a058a5cb2c0dd1d5013b3336f09b2a4962c5ee3c3065943617672021-01-27 16:32:056 mins ago0x066b689308b8e66e1bf336324da8d79982907355 IN  bDollar: Shares Distribution Pool0 BNB0.00195808
0x607f816ddd327a1f0f877c56119d3c1506570e716ef10c3df8b15b74ab663c8043617592021-01-27 16:31:416 mins ago0x4ee3b576bd82a28b89bede1977e75542c789ac6d IN  bDollar: Shares Distribution Pool0 BNB0.00183486
0xfc51be845c74bcd5d03decdb266b39f8c8821fe981f353d235b9e262653b000443617582021-01-27 16:31:386 mins ago0x89285853cf0317ffe2a47a1ed140dca0fcefa6db IN  bDollar: Shares Distribution Pool0 BNB0.00195808
0x8f6fab41e818bbbf792aa5c49d77134e96b5c7a329c08b9b1f7dc5cdf87718df43617452021-01-27 16:30:597 mins ago0x89285853cf0317ffe2a47a1ed140dca0fcefa6db IN  bDollar: Shares Distribution Pool0 BNB0.00165056
0x95cfe53d3c8636c118599ab5b06d85bd7a5e70343e5193946d1ed28e207a222443617392021-01-27 16:30:417 mins ago0xb1d0ee20dd991d15de1d160d95d41c9538459606 IN  bDollar: Shares Distribution Pool0 BNB0.00165808
0xbd56d64c48f3880b7bd9eaedf6c8b6ae7574dee7c79029d174b6d55589c1c23043617282021-01-27 16:30:088 mins ago0xcdae9c099a12b0289a134245b574377920583927 IN  bDollar: Shares Distribution Pool0 BNB0.00195808
0x9dd9433e688fcd8956f945db8589cc97446006bba16e32fc775a0e0e6c5c183d43617172021-01-27 16:29:358 mins ago0x67ed75958ec4430440f438ec6f3c174dcfab1e8c IN  bDollar: Shares Distribution Pool0 BNB0.00215466
0x6c0bb7f8b0ca716afcd13e58c07d2542a482de8b90517799e307066a2f0e0af243616762021-01-27 16:27:3210 mins ago0x3c6723a6ec40f6bada6000ff400c9080359fa3bc IN  bDollar: Shares Distribution Pool0 BNB0.00223588
0x71af4b1733a9e324032143b7f1a1d65804ac5a6a9b4c166a7f217ab26c24e8ba43616562021-01-27 16:26:3211 mins ago0x8474a0b51a8e9e77ab9446228554853a8e290635 IN  bDollar: Shares Distribution Pool0 BNB0.00195808
0xaea6b19509131a58de9b892c0797427d103bbcdad80a61bff26016ee3357edb543616472021-01-27 16:26:0512 mins ago0x729f2d84f52f094ab49e9e884cf37488415527d0 IN  bDollar: Shares Distribution Pool0 BNB0.00185514
0x73572e4873ed0ea89ce4f415c375bfeaf3bb71847e5020b5e96745d76e830f6043616242021-01-27 16:24:5613 mins ago0xf1493f7434fa5e5fbeb5038eb392f27321b49c7d IN  bDollar: Shares Distribution Pool0 BNB0.00165808
0x112a3f961f817f40a6348dd45e20c11dadad932b3f8d5017d778484f2c55631a43616002021-01-27 16:23:4414 mins ago0x8474a0b51a8e9e77ab9446228554853a8e290635 IN  bDollar: Shares Distribution Pool0 BNB0.00165056
0x1a316b4d3ec7be32881f15427f064aced9332f162cedf2eda6be4f2d202ebf9f43615952021-01-27 16:23:2915 mins ago0x3c6723a6ec40f6bada6000ff400c9080359fa3bc IN  bDollar: Shares Distribution Pool0 BNB0.00165808
0x9e646974e06c4098b14d329056748c8dbda440af50ae55e01a1c1b045f1fcda143615872021-01-27 16:23:0515 mins ago0xd9e9f8c453f90db5b319a87a2f2663eb36bf83a2 IN  bDollar: Shares Distribution Pool0 BNB0.00193612
0xe0e692a2afa9e79dd7367c5566a16737afdfbf997a96913b3282f85d308de34b43615832021-01-27 16:22:5315 mins ago0x3c6723a6ec40f6bada6000ff400c9080359fa3bc IN  bDollar: Shares Distribution Pool0 BNB0.00195832
0xf5954bd2f12635c38fa4ee67237ae054e4dc7370fdedc5cf78992f7edd5e324d43615812021-01-27 16:22:4715 mins ago0x3c6723a6ec40f6bada6000ff400c9080359fa3bc IN  bDollar: Shares Distribution Pool0 BNB0.00165056
0x5f98d35052d53e8a48ead375f41869d5c98c546e6e223b21e9a8a106a3823cde43615782021-01-27 16:22:3815 mins ago0x0ca2dd729e2973389ac5993e227d3065d611f68b IN  bDollar: Shares Distribution Pool0 BNB0.0020951456
0xb682438f90596b2c1ac0c9e955c895c8f853b0a02a755ee6ab8e52cd5080a97843615682021-01-27 16:22:0816 mins ago0x729f2d84f52f094ab49e9e884cf37488415527d0 IN  bDollar: Shares Distribution Pool0 BNB0.00165808
0xaaa9f7324aab9e2a27a7bcbdc92560a1bf2497b6d6f43dc01a4f36dc7ba9499543615272021-01-27 16:20:0518 mins ago0x075fb8dbe33e453985ff50ba9c7622096b7360e5 IN  bDollar: Shares Distribution Pool0 BNB0.00193636
0xcd4d76b96f805433723f577681384d29f256cd486934e28e22ca54e834ae80e043615182021-01-27 16:19:3418 mins ago0x1af3a89bf9ee12c424b577c2a3f4fa7705346c38 IN  bDollar: Shares Distribution Pool0 BNB0.00195808
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb441366601431d5e44641b08e137e137115070a2ca919f56fecf56e1b928d06043618922021-01-27 16:38:209 secs ago bDollar: Shares Distribution Pool PancakeSwap: BDO0 BNB
0xb441366601431d5e44641b08e137e137115070a2ca919f56fecf56e1b928d06043618922021-01-27 16:38:209 secs ago bDollar: Shares Distribution Pool bDollar: sBDO Token0 BNB
0xb441366601431d5e44641b08e137e137115070a2ca919f56fecf56e1b928d06043618922021-01-27 16:38:209 secs ago bDollar: Shares Distribution Pool bDollar: sBDO Token0 BNB
0xb441366601431d5e44641b08e137e137115070a2ca919f56fecf56e1b928d06043618922021-01-27 16:38:209 secs ago bDollar: Shares Distribution Pool PancakeSwap: BDO0 BNB
0xb441366601431d5e44641b08e137e137115070a2ca919f56fecf56e1b928d06043618922021-01-27 16:38:209 secs ago 0xd1533fad98479700dd620852c45fafe93b04a2b7 bDollar: Shares Distribution Pool0 BNB
0xb441366601431d5e44641b08e137e137115070a2ca919f56fecf56e1b928d06043618922021-01-27 16:38:209 secs ago 0xd1533fad98479700dd620852c45fafe93b04a2b7 bDollar: Shares Distribution Pool0 BNB
0x28c743f5407cab60881516bb6e93091a3e54dd20411019d3fa1e54ed183102fd43618872021-01-27 16:38:0524 secs ago bDollar: Shares Distribution Pool PancakeSwap: BDO0 BNB
0x28c743f5407cab60881516bb6e93091a3e54dd20411019d3fa1e54ed183102fd43618872021-01-27 16:38:0524 secs ago bDollar: Shares Distribution Pool bDollar: sBDO Token0 BNB
0x28c743f5407cab60881516bb6e93091a3e54dd20411019d3fa1e54ed183102fd43618872021-01-27 16:38:0524 secs ago bDollar: Shares Distribution Pool bDollar: sBDO Token0 BNB
0x28c743f5407cab60881516bb6e93091a3e54dd20411019d3fa1e54ed183102fd43618872021-01-27 16:38:0524 secs ago bDollar: Shares Distribution Pool PancakeSwap: BDO0 BNB
0x28c743f5407cab60881516bb6e93091a3e54dd20411019d3fa1e54ed183102fd43618872021-01-27 16:38:0524 secs ago 0xd1533fad98479700dd620852c45fafe93b04a2b7 bDollar: Shares Distribution Pool0 BNB
0x28c743f5407cab60881516bb6e93091a3e54dd20411019d3fa1e54ed183102fd43618872021-01-27 16:38:0524 secs ago 0xd1533fad98479700dd620852c45fafe93b04a2b7 bDollar: Shares Distribution Pool0 BNB
0x74cecad13807e5a2f4b05153654289f20dc2c8b20eee75a08b25842bc8f93c2d43618802021-01-27 16:37:4445 secs ago bDollar: Shares Distribution Pool PancakeSwap: sBDO-BUSD0 BNB
0x74cecad13807e5a2f4b05153654289f20dc2c8b20eee75a08b25842bc8f93c2d43618802021-01-27 16:37:4445 secs ago 0x5364f346b22efb14a08b8ece406e25d9776a0eae bDollar: Shares Distribution Pool0 BNB
0x74cecad13807e5a2f4b05153654289f20dc2c8b20eee75a08b25842bc8f93c2d43618802021-01-27 16:37:4445 secs ago bDollar: Shares Distribution Pool bDollar: sBDO Token0 BNB
0x74cecad13807e5a2f4b05153654289f20dc2c8b20eee75a08b25842bc8f93c2d43618802021-01-27 16:37:4445 secs ago bDollar: Shares Distribution Pool bDollar: sBDO Token0 BNB
0x74cecad13807e5a2f4b05153654289f20dc2c8b20eee75a08b25842bc8f93c2d43618802021-01-27 16:37:4445 secs ago bDollar: Shares Distribution Pool PancakeSwap: sBDO-BUSD0 BNB
0x74cecad13807e5a2f4b05153654289f20dc2c8b20eee75a08b25842bc8f93c2d43618802021-01-27 16:37:4445 secs ago 0x5364f346b22efb14a08b8ece406e25d9776a0eae bDollar: Shares Distribution Pool0 BNB
0xdc01a42d298fd3b355f302c1e0dd31c0749af055fb1ad19f2665de79cf19409443618782021-01-27 16:37:3851 secs ago bDollar: Shares Distribution Pool PancakeSwap: BDO0 BNB
0xdc01a42d298fd3b355f302c1e0dd31c0749af055fb1ad19f2665de79cf19409443618782021-01-27 16:37:3851 secs ago bDollar: Shares Distribution Pool bDollar: sBDO Token0 BNB
0xdc01a42d298fd3b355f302c1e0dd31c0749af055fb1ad19f2665de79cf19409443618782021-01-27 16:37:3851 secs ago bDollar: Shares Distribution Pool bDollar: sBDO Token0 BNB
0xdc01a42d298fd3b355f302c1e0dd31c0749af055fb1ad19f2665de79cf19409443618782021-01-27 16:37:3851 secs ago bDollar: Shares Distribution Pool PancakeSwap: BDO0 BNB
0xdc01a42d298fd3b355f302c1e0dd31c0749af055fb1ad19f2665de79cf19409443618782021-01-27 16:37:3851 secs ago 0xd1533fad98479700dd620852c45fafe93b04a2b7 bDollar: Shares Distribution Pool0 BNB
0xdc01a42d298fd3b355f302c1e0dd31c0749af055fb1ad19f2665de79cf19409443618782021-01-27 16:37:3851 secs ago 0xd1533fad98479700dd620852c45fafe93b04a2b7 bDollar: Shares Distribution Pool0 BNB
0x19c6ed2d21a1ab2ecdb35c93b394e5f7e0d42c77ff8725943ce02b2dcd0b241b43618772021-01-27 16:37:3554 secs ago bDollar: Shares Distribution Pool PancakeSwap: sBDO-BUSD0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ShareRewardPool

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2020-12-28
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

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

/**
 * @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.
     */
    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.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        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.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

/**
 * @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) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @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].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value: weiValue}(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

// Note that this pool has no minter key of sBDO (rewards).
// Instead, the governance will call sBDO distributeReward method and send reward to this pool at the beginning.
contract ShareRewardPool {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    // governance
    address public operator;

    // Info of each user.
    struct UserInfo {
        uint256 amount; // How many LP tokens the user has provided.
        uint256 rewardDebt; // Reward debt. See explanation below.
    }

    // Info of each pool.
    struct PoolInfo {
        IERC20 lpToken; // Address of LP token contract.
        uint256 allocPoint; // How many allocation points assigned to this pool. sBDOs to distribute per block.
        uint256 lastRewardBlock; // Last block number that sBDOs distribution occurs.
        uint256 accSbdoPerShare; // Accumulated sBDOs per share, times 1e18. See below.
        bool isStarted; // if lastRewardBlock has passed
    }

    IERC20 public sbdo = IERC20(0x0d9319565be7f53CeFE84Ad201Be3f40feAE2740);

    // Info of each pool.
    PoolInfo[] public poolInfo;

    // Info of each user that stakes LP tokens.
    mapping(uint256 => mapping(address => UserInfo)) public userInfo;

    // Total allocation points. Must be the sum of all allocation points in all pools.
    uint256 public totalAllocPoint = 0;

    // The block number when sBDO mining starts.
    uint256 public startBlock;

    uint256 public endBlock;

    uint256 public sbdoPerBlock = 0.008 ether;

    uint256 public runningBlocks = 10625000; // 368 days

    uint256 public constant BLOCKS_PER_WEEK = 201600; // 86400 * 7 / 3;
    uint256 public constant TOTAL_REWARDS = 85000 ether;

    event Deposit(address indexed user, uint256 indexed pid, uint256 amount);
    event Withdraw(address indexed user, uint256 indexed pid, uint256 amount);
    event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount);
    event RewardPaid(address indexed user, uint256 amount);

    constructor(address _sbdo, uint256 _startBlock) public {
        require(block.number < _startBlock, "late");
        if (_sbdo != address(0)) sbdo = IERC20(_sbdo);
        startBlock = _startBlock; // supposed to be 3,496,900 (Mon Dec 28 2020 15:00:00 UTC)
        endBlock = startBlock + runningBlocks; // 14,121,900 (Sat Jan 01 2022 20:45:00 UTC)
        operator = msg.sender;
    }

    modifier onlyOperator() {
        require(operator == msg.sender, "ShareRewardPool: caller is not the operator");
        _;
    }

    function checkPoolDuplicate(IERC20 _lpToken) internal view {
        uint256 length = poolInfo.length;
        for (uint256 pid = 0; pid < length; ++pid) {
            require(poolInfo[pid].lpToken != _lpToken, "ShareRewardPool: existing pool?");
        }
    }

    // Add a new lp to the pool. Can only be called by the owner.
    function add(
        uint256 _allocPoint,
        IERC20 _lpToken,
        bool _withUpdate,
        uint256 _lastRewardBlock
    ) public onlyOperator {
        checkPoolDuplicate(_lpToken);
        if (_withUpdate) {
            massUpdatePools();
        }
        if (block.number < startBlock) {
            // chef is sleeping
            if (_lastRewardBlock == 0) {
                _lastRewardBlock = startBlock;
            } else {
                if (_lastRewardBlock < startBlock) {
                    _lastRewardBlock = startBlock;
                }
            }
        } else {
            // chef is cooking
            if (_lastRewardBlock == 0 || _lastRewardBlock < block.number) {
                _lastRewardBlock = block.number;
            }
        }
        bool _isStarted = (_lastRewardBlock <= startBlock) || (_lastRewardBlock <= block.number);
        poolInfo.push(PoolInfo({lpToken: _lpToken, allocPoint: _allocPoint, lastRewardBlock: _lastRewardBlock, accSbdoPerShare: 0, isStarted: _isStarted}));
        if (_isStarted) {
            totalAllocPoint = totalAllocPoint.add(_allocPoint);
        }
    }

    // Update the given pool's sBDO allocation point. Can only be called by the owner.
    function set(uint256 _pid, uint256 _allocPoint) public onlyOperator {
        massUpdatePools();
        PoolInfo storage pool = poolInfo[_pid];
        if (pool.isStarted) {
            totalAllocPoint = totalAllocPoint.sub(pool.allocPoint).add(_allocPoint);
        }
        pool.allocPoint = _allocPoint;
    }

    // Return accumulate rewards over the given _from to _to block.
    function getGeneratedReward(uint256 _from, uint256 _to) public view returns (uint256) {
        if (_from >= _to) return 0;
        if (_to >= endBlock) {
            if (_from >= endBlock) return 0;
            if (_from <= startBlock) return endBlock.sub(startBlock).mul(sbdoPerBlock);
            return endBlock.sub(_from).mul(sbdoPerBlock);
        } else {
            if (_to <= startBlock) return 0;
            if (_from <= startBlock) return _to.sub(startBlock).mul(sbdoPerBlock);
            return _to.sub(_from).mul(sbdoPerBlock);
        }
    }

    // View function to see pending sBDOs on frontend.
    function pendingShare(uint256 _pid, address _user) external view returns (uint256) {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_user];
        uint256 accSbdoPerShare = pool.accSbdoPerShare;
        uint256 lpSupply = pool.lpToken.balanceOf(address(this));
        if (block.number > pool.lastRewardBlock && lpSupply != 0) {
            uint256 _generatedReward = getGeneratedReward(pool.lastRewardBlock, block.number);
            uint256 _sbdoReward = _generatedReward.mul(pool.allocPoint).div(totalAllocPoint);
            accSbdoPerShare = accSbdoPerShare.add(_sbdoReward.mul(1e18).div(lpSupply));
        }
        return user.amount.mul(accSbdoPerShare).div(1e18).sub(user.rewardDebt);
    }

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

    // Update reward variables of the given pool to be up-to-date.
    function updatePool(uint256 _pid) public {
        PoolInfo storage pool = poolInfo[_pid];
        if (block.number <= pool.lastRewardBlock) {
            return;
        }
        uint256 lpSupply = pool.lpToken.balanceOf(address(this));
        if (lpSupply == 0) {
            pool.lastRewardBlock = block.number;
            return;
        }
        if (!pool.isStarted) {
            pool.isStarted = true;
            totalAllocPoint = totalAllocPoint.add(pool.allocPoint);
        }
        if (totalAllocPoint > 0) {
            uint256 _generatedReward = getGeneratedReward(pool.lastRewardBlock, block.number);
            uint256 _sbdoReward = _generatedReward.mul(pool.allocPoint).div(totalAllocPoint);
            pool.accSbdoPerShare = pool.accSbdoPerShare.add(_sbdoReward.mul(1e18).div(lpSupply));
        }
        pool.lastRewardBlock = block.number;
    }

    // Deposit LP tokens.
    function deposit(uint256 _pid, uint256 _amount) public {
        address _sender = msg.sender;
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_sender];
        updatePool(_pid);
        if (user.amount > 0) {
            uint256 _pending = user.amount.mul(pool.accSbdoPerShare).div(1e18).sub(user.rewardDebt);
            if (_pending > 0) {
                safeSbdoTransfer(_sender, _pending);
                emit RewardPaid(_sender, _pending);
            }
        }
        if (_amount > 0) {
            pool.lpToken.safeTransferFrom(_sender, address(this), _amount);
            user.amount = user.amount.add(_amount);
        }
        user.rewardDebt = user.amount.mul(pool.accSbdoPerShare).div(1e18);
        emit Deposit(_sender, _pid, _amount);
    }

    // Withdraw LP tokens.
    function withdraw(uint256 _pid, uint256 _amount) public {
        address _sender = msg.sender;
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_sender];
        require(user.amount >= _amount, "withdraw: not good");
        updatePool(_pid);
        uint256 _pending = user.amount.mul(pool.accSbdoPerShare).div(1e18).sub(user.rewardDebt);
        if (_pending > 0) {
            safeSbdoTransfer(_sender, _pending);
            emit RewardPaid(_sender, _pending);
        }
        if (_amount > 0) {
            user.amount = user.amount.sub(_amount);
            pool.lpToken.safeTransfer(_sender, _amount);
        }
        user.rewardDebt = user.amount.mul(pool.accSbdoPerShare).div(1e18);
        emit Withdraw(_sender, _pid, _amount);
    }

    // Withdraw without caring about rewards. EMERGENCY ONLY.
    function emergencyWithdraw(uint256 _pid) public {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        uint256 _amount = user.amount;
        user.amount = 0;
        user.rewardDebt = 0;
        pool.lpToken.safeTransfer(msg.sender, _amount);
        emit EmergencyWithdraw(msg.sender, _pid, _amount);
    }

    // Safe sbdo transfer function, just in case if rounding error causes pool to not have enough sBDOs.
    function safeSbdoTransfer(address _to, uint256 _amount) internal {
        uint256 _sbdoBal = sbdo.balanceOf(address(this));
        if (_sbdoBal > 0) {
            if (_amount > _sbdoBal) {
                sbdo.safeTransfer(_to, _sbdoBal);
            } else {
                sbdo.safeTransfer(_to, _amount);
            }
        }
    }

    function setOperator(address _operator) external onlyOperator {
        operator = _operator;
    }

    function governanceRecoverUnsupported(
        IERC20 _token,
        uint256 amount,
        address to
    ) external onlyOperator {
        if (block.number < endBlock + BLOCKS_PER_WEEK * 26) {
            // do not allow to drain core token (sBDO or lps) if less than 6 months after pool ends
            require(_token != sbdo, "sbdo");
            uint256 length = poolInfo.length;
            for (uint256 pid = 0; pid < length; ++pid) {
                PoolInfo storage pool = poolInfo[pid];
                require(_token != pool.lpToken, "pool.lpToken");
            }
        }
        _token.safeTransfer(to, amount);
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_sbdo","type":"address"},{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"BLOCKS_PER_WEEK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_REWARDS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"},{"internalType":"uint256","name":"_lastRewardBlock","type":"uint256"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getGeneratedReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"governanceRecoverUnsupported","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accSbdoPerShare","type":"uint256"},{"internalType":"bool","name":"isStarted","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"runningBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sbdo","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sbdoPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600180546001600160a01b031916730d9319565be7f53cefe84ad201be3f40feae27401790556000600455661c6bf52634000060075562a21fe860085534801561004d57600080fd5b50604051611dcc380380611dcc8339818101604052604081101561007057600080fd5b5080516020909101514381116100b6576040805162461bcd60e51b815260206004808301919091526024820152636c61746560e01b604482015290519081900360640190fd5b6001600160a01b038216156100e157600180546001600160a01b0319166001600160a01b0384161790555b60058190556008540160065550600080546001600160a01b03191633179055611cbd8061010f6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c806354575af4116100d857806396805e541161008c578063e2bbb15811610066578063e2bbb15814610450578063e6ba2bfe14610473578063fc47e2091461047b57610182565b806396805e541461039d578063b3ab15fb146103e4578063cf4b55cb1461041757610182565b8063630b5ba1116100bd578063630b5ba11461033b5780638d9d08191461034357806393f1a40b1461034b57610182565b806354575af4146102c7578063570ca7351461030a57610182565b80631ab06ee51161013a57806348cd4cb11161011457806348cd4cb11461028557806351eb05a61461028d5780635312ea8e146102aa57610182565b80631ab06ee51461021a578063231f0c6a1461023f578063441a3e701461026257610182565b806309cf60911161016b57806309cf6091146101a95780631526fe27146101b157806317caf6f11461021257610182565b806307f7d75714610187578063083c6323146101a1575b600080fd5b61018f610483565b60408051918252519081900360200190f35b61018f610489565b61018f61048f565b6101ce600480360360208110156101c757600080fd5b503561049d565b6040805173ffffffffffffffffffffffffffffffffffffffff9096168652602086019490945284840192909252606084015215156080830152519081900360a00190f35b61018f6104f5565b61023d6004803603604081101561023057600080fd5b50803590602001356104fb565b005b61018f6004803603604081101561025557600080fd5b50803590602001356105d0565b61023d6004803603604081101561027857600080fd5b5080359060200135610695565b61018f6108ab565b61023d600480360360208110156102a357600080fd5b50356108b1565b61023d600480360360208110156102c057600080fd5b5035610a53565b61023d600480360360608110156102dd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359160409091013516610afc565b610312610cf2565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61023d610d0e565b61018f610d31565b6103846004803603604081101561036157600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610d37565b6040805192835260208301919091528051918290030190f35b61023d600480360360808110156103b357600080fd5b5080359073ffffffffffffffffffffffffffffffffffffffff60208201351690604081013515159060600135610d5b565b61023d600480360360208110156103fa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610fc2565b61018f6004803603604081101561042d57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16611079565b61023d6004803603604081101561046657600080fd5b50803590602001356111fb565b61031261139f565b61018f6113bb565b60075481565b60065481565b6911ffdbf6b2b2eb20000081565b600281815481106104aa57fe5b60009182526020909120600590910201805460018201546002830154600384015460049094015473ffffffffffffffffffffffffffffffffffffffff90931694509092909160ff1685565b60045481565b60005473ffffffffffffffffffffffffffffffffffffffff16331461056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611c12602b913960400191505060405180910390fd5b610573610d0e565b60006002838154811061058257fe5b60009182526020909120600590910201600481015490915060ff16156105c9576105c5826105bf83600101546004546113c290919063ffffffff16565b9061140b565b6004555b6001015550565b60008183106105e15750600061068f565b60065482106106495760065483106105fb5750600061068f565b600554831161062e576106276007546106216005546006546113c290919063ffffffff16565b9061147f565b905061068f565b610627600754610621856006546113c290919063ffffffff16565b600554821161065a5750600061068f565b600554831161067e57610627600754610621600554856113c290919063ffffffff16565b6007546106279061062184866113c2565b92915050565b60003390506000600284815481106106a957fe5b6000918252602080832087845260038252604080852073ffffffffffffffffffffffffffffffffffffffff88168652909252922080546005909202909201925084111561075757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f77697468647261773a206e6f7420676f6f640000000000000000000000000000604482015290519081900360640190fd5b610760856108b1565b600061079d8260010154610797670de0b6b3a76400006107918760030154876000015461147f90919063ffffffff16565b906114f2565b906113c2565b905080156107fc576107af8482611534565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff8616917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b841561083357815461080e90866113c2565b825582546108339073ffffffffffffffffffffffffffffffffffffffff16858761162a565b6003830154825461085191670de0b6b3a7640000916107919161147f565b6001830155604080518681529051879173ffffffffffffffffffffffffffffffffffffffff8716917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a3505050505050565b60055481565b6000600282815481106108c057fe5b90600052602060002090600502019050806002015443116108e15750610a50565b8054604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b15801561095157600080fd5b505afa158015610965573d6000803e3d6000fd5b505050506040513d602081101561097b57600080fd5b5051905080610991575043600290910155610a50565b600482015460ff166109e057600480830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915583015490546109dc9161140b565b6004555b60045415610a475760006109f88360020154436105d0565b90506000610a1960045461079186600101548561147f90919063ffffffff16565b9050610a3f610a348461079184670de0b6b3a764000061147f565b60038601549061140b565b600385015550505b50436002909101555b50565b600060028281548110610a6257fe5b600091825260208083208584526003825260408085203380875293528420805485825560018201959095556005909302018054909450919291610abf9173ffffffffffffffffffffffffffffffffffffffff91909116908361162a565b604080518281529051859133917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959181900360200190a350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611c12602b913960400191505060405180910390fd5b600654624ffb0001431015610ccc5760015473ffffffffffffffffffffffffffffffffffffffff84811691161415610c0757604080517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f7362646f00000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60025460005b81811015610cc957600060028281548110610c2457fe5b60009182526020909120600590910201805490915073ffffffffffffffffffffffffffffffffffffffff87811691161415610cc057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f706f6f6c2e6c70546f6b656e0000000000000000000000000000000000000000604482015290519081900360640190fd5b50600101610c0d565b50505b610ced73ffffffffffffffffffffffffffffffffffffffff8416828461162a565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60025460005b81811015610d2d57610d25816108b1565b600101610d14565b5050565b60085481565b60036020908152600092835260408084209091529082529020805460019091015482565b60005473ffffffffffffffffffffffffffffffffffffffff163314610dcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611c12602b913960400191505060405180910390fd5b610dd4836116b7565b8115610de257610de2610d0e565b600554431015610e0e5780610dfa5750600554610e09565b600554811015610e0957506005545b610e22565b801580610e1a57504381105b15610e225750435b600060055482111580610e355750438211155b6040805160a08101825273ffffffffffffffffffffffffffffffffffffffff878116825260208201898152928201868152600060608401818152861580156080870190815260028054600181018255945295517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace600590940293840180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919096161790945594517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad082015592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad184015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad290920180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155909150610fbb57600454610fb7908661140b565b6004555b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611c12602b913960400191505060405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000806002848154811061108957fe5b600091825260208083208784526003808352604080862073ffffffffffffffffffffffffffffffffffffffff808b168852908552818720600590960290930191820154825482517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015292519398509596909590949316926370a0823192602480840193829003018186803b15801561112757600080fd5b505afa15801561113b573d6000803e3d6000fd5b505050506040513d602081101561115157600080fd5b505160028501549091504311801561116857508015155b156111c557600061117d8560020154436105d0565b9050600061119e60045461079188600101548561147f90919063ffffffff16565b90506111c06111b98461079184670de0b6b3a764000061147f565b859061140b565b935050505b6111f08360010154610797670de0b6b3a764000061079186886000015461147f90919063ffffffff16565b979650505050505050565b600033905060006002848154811061120f57fe5b6000918252602080832087845260038252604080852073ffffffffffffffffffffffffffffffffffffffff88168652909252922060059091029091019150611256856108b1565b8054156112ef57600061128e8260010154610797670de0b6b3a76400006107918760030154876000015461147f90919063ffffffff16565b905080156112ed576112a08482611534565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff8616917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b505b83156113285781546113199073ffffffffffffffffffffffffffffffffffffffff16843087611785565b8054611325908561140b565b81555b6003820154815461134691670de0b6b3a7640000916107919161147f565b6001820155604080518581529051869173ffffffffffffffffffffffffffffffffffffffff8616917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a35050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6203138081565b600061140483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611820565b9392505050565b60008282018381101561140457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261148e5750600061068f565b8282028284828161149b57fe5b0414611404576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611c3d6021913960400191505060405180910390fd5b600061140483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506118d1565b600154604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b1580156115a557600080fd5b505afa1580156115b9573d6000803e3d6000fd5b505050506040513d60208110156115cf57600080fd5b505190508015610ced578082111561160a576001546116059073ffffffffffffffffffffffffffffffffffffffff16848361162a565b610ced565b600154610ced9073ffffffffffffffffffffffffffffffffffffffff1684845b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610ced908490611950565b60025460005b81811015610ced578273ffffffffffffffffffffffffffffffffffffffff16600282815481106116e957fe5b600091825260209091206005909102015473ffffffffffffffffffffffffffffffffffffffff16141561177d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5368617265526577617264506f6f6c3a206578697374696e6720706f6f6c3f00604482015290519081900360640190fd5b6001016116bd565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261181a908590611950565b50505050565b600081848411156118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561188e578181015183820152602001611876565b50505050905090810190601f1680156118bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561188e578181015183820152602001611876565b50600083858161194657fe5b0495945050505050565b60606119b2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611a289092919063ffffffff16565b805190915015610ced578080602001905160208110156119d157600080fd5b5051610ced576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611c5e602a913960400191505060405180910390fd5b6060611a378484600085611a3f565b949350505050565b6060611a4a85611c0b565b611ab557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310611b1f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611ae2565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611b81576040519150601f19603f3d011682016040523d82523d6000602084013e611b86565b606091505b50915091508115611b9a579150611a379050565b805115611baa5780518082602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815286516024840152865187939192839260440191908501908083836000831561188e578181015183820152602001611876565b3b15159056fe5368617265526577617264506f6f6c3a2063616c6c6572206973206e6f7420746865206f70657261746f72536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220e5fa0d8854c210dd7969d7e484c9cb19de8b3a378eb78241c868cd72ffbe732564736f6c634300060c00330000000000000000000000000d9319565be7f53cefe84ad201be3f40feae27400000000000000000000000000000000000000000000000000000000000355bc4

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

0000000000000000000000000d9319565be7f53cefe84ad201be3f40feae27400000000000000000000000000000000000000000000000000000000000355bc4

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000d9319565be7f53cefe84ad201be3f40feae2740
Arg [1] : 0000000000000000000000000000000000000000000000000000000000355bc4


Deployed ByteCode Sourcemap

18323:10441:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19646:41;;;:::i;:::-;;;;;;;;;;;;;;;;19614:23;;;:::i;19829:51::-;;;:::i;19242:26::-;;;;;;;;;;;;;;;;-1:-1:-1;19242:26:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19487:34;;;:::i;22345:321::-;;;;;;;;;;;;;;;;-1:-1:-1;22345:321:0;;;;;;;:::i;:::-;;22743:570;;;;;;;;;;;;;;;;-1:-1:-1;22743:570:0;;;;;;;:::i;26269:812::-;;;;;;;;;;;;;;;;-1:-1:-1;26269:812:0;;;;;;;:::i;19580:25::-;;;:::i;24477:893::-;;;;;;;;;;;;;;;;-1:-1:-1;24477:893:0;;:::i;27152:379::-;;;;;;;;;;;;;;;;-1:-1:-1;27152:379:0;;:::i;28111:650::-;;;;;;;;;;;;;;;;-1:-1:-1;28111:650:0;;;;;;;;;;;;;;;;;;:::i;18442:23::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24221:180;;;:::i;19696:39::-;;;:::i;19326:64::-;;;;;;;;;;;;;;;;-1:-1:-1;19326:64:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21083:1166;;;;;;;;;;;;;;;;-1:-1:-1;21083:1166:0;;;;;;;;;;;;;;;;;;;;;:::i;28002:101::-;;;;;;;;;;;;;;;;-1:-1:-1;28002:101:0;;;;:::i;23377:761::-;;;;;;;;;;;;;;;;-1:-1:-1;23377:761:0;;;;;;;;;:::i;25405:828::-;;;;;;;;;;;;;;;;-1:-1:-1;25405:828:0;;;;;;;:::i;19135:71::-;;;:::i;19756:48::-;;;:::i;19646:41::-;;;;:::o;19614:23::-;;;;:::o;19829:51::-;19869:11;19829:51;:::o;19242:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19242:26:0;;;;;;;:::o;19487:34::-;;;;:::o;22345:321::-;20643:8;;:22;:8;20655:10;20643:22;20635:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22424:17:::1;:15;:17::i;:::-;22452:21;22476:8;22485:4;22476:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;22505;::::0;::::1;::::0;22476;;-1:-1:-1;22505:14:0::1;;22501:118;;;22554:53;22595:11;22554:36;22574:4;:15;;;22554;;:19;;:36;;;;:::i;:::-;:40:::0;::::1;:53::i;:::-;22536:15;:71:::0;22501:118:::1;22629:15;;:29:::0;-1:-1:-1;22345:321:0:o;22743:570::-;22820:7;22853:3;22844:5;:12;22840:26;;-1:-1:-1;22865:1:0;22858:8;;22840:26;22888:8;;22881:3;:15;22877:429;;22926:8;;22917:5;:17;22913:31;;-1:-1:-1;22943:1:0;22936:8;;22913:31;22972:10;;22963:5;:19;22959:74;;22991:42;23020:12;;22991:24;23004:10;;22991:8;;:12;;:24;;;;:::i;:::-;:28;;:42::i;:::-;22984:49;;;;22959:74;23055:37;23079:12;;23055:19;23068:5;23055:8;;:12;;:19;;;;:::i;22877:429::-;23136:10;;23129:3;:17;23125:31;;-1:-1:-1;23155:1:0;23148:8;;23125:31;23184:10;;23175:5;:19;23171:69;;23203:37;23227:12;;23203:19;23211:10;;23203:3;:7;;:19;;;;:::i;23171:69::-;23281:12;;23262:32;;:14;:3;23270:5;23262:7;:14::i;22877:429::-;22743:570;;;;:::o;26269:812::-;26336:15;26354:10;26336:28;;26375:21;26399:8;26408:4;26399:14;;;;;;;;;;;;;;;;26448;;;:8;:14;;;;;;:23;;;;;;;;;;26490:11;;26399:14;;;;;;;;-1:-1:-1;26490:22:0;-1:-1:-1;26490:22:0;26482:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26546:16;26557:4;26546:10;:16::i;:::-;26573;26592:68;26644:4;:15;;;26592:47;26634:4;26592:37;26608:4;:20;;;26592:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47::i;:::-;:51;;:68::i;:::-;26573:87;-1:-1:-1;26675:12:0;;26671:129;;26704:35;26721:7;26730:8;26704:16;:35::i;:::-;26759:29;;;;;;;;;;;;;;;;;;;;;;26671:129;26814:11;;26810:140;;26856:11;;:24;;26872:7;26856:15;:24::i;:::-;26842:38;;26895:12;;:43;;:12;;26921:7;26930;26895:25;:43::i;:::-;26994:20;;;;26978:11;;:47;;27020:4;;26978:37;;:15;:37::i;:47::-;26960:15;;;:65;27041:32;;;;;;;;27059:4;;27041:32;;;;;;;;;;;;;26269:812;;;;;;:::o;19580:25::-;;;;:::o;24477:893::-;24529:21;24553:8;24562:4;24553:14;;;;;;;;;;;;;;;;;;24529:38;;24598:4;:20;;;24582:12;:36;24578:75;;24635:7;;;24578:75;24682:12;;:37;;;;;;24713:4;24682:37;;;;;;24663:16;;24682:12;;;:22;;:37;;;;;;;;;;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24682:37:0;;-1:-1:-1;24734:13:0;24730:102;;-1:-1:-1;24787:12:0;24764:20;;;;:35;24814:7;;24730:102;24847:14;;;;;;24842:138;;24878:14;;;;:21;;;;24895:4;24878:21;;;;;;24952:15;;;24932;;:36;;:19;:36::i;:::-;24914:15;:54;24842:138;24994:15;;:19;24990:327;;25030:24;25057:54;25076:4;:20;;;25098:12;25057:18;:54::i;:::-;25030:81;;25126:19;25148:58;25190:15;;25148:37;25169:4;:15;;;25148:16;:20;;:37;;;;:::i;:58::-;25126:80;-1:-1:-1;25244:61:0;25269:35;25295:8;25269:21;25126:80;25285:4;25269:15;:21::i;:35::-;25244:20;;;;;:24;:61::i;:::-;25221:20;;;:84;-1:-1:-1;;24990:327:0;-1:-1:-1;25350:12:0;25327:20;;;;:35;24477:893;;:::o;27152:379::-;27211:21;27235:8;27244:4;27235:14;;;;;;;;;;;;;;;;27284;;;:8;:14;;;;;;27299:10;27284:26;;;;;;;27339:11;;27361:15;;;-1:-1:-1;27387:15:0;;:19;;;;27235:14;;;;;27417:12;;27235:14;;-1:-1:-1;27284:26:0;;27339:11;27417:46;;27284:26;27417:12;;;;;27339:11;27417:25;:46::i;:::-;27479:44;;;;;;;;27509:4;;27497:10;;27479:44;;;;;;;;;27152:379;;;;:::o;28111:650::-;20643:8;;:22;:8;20655:10;20643:22;20635:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28278:8:::1;::::0;28289:20;28278:31:::1;28263:12;:46;28259:453;;;28445:4;::::0;::::1;28435:14:::0;;::::1;28445:4:::0;::::1;28435:14;;28427:31;;;::::0;;::::1;::::0;;::::1;;::::0;;::::1;::::0;;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28490:8;:15:::0;28473:14:::1;28520:181;28548:6;28542:3;:12;28520:181;;;28582:21;28606:8;28615:3;28606:13;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;28656:12:::0;;28606:13;;-1:-1:-1;28656:12:0::1;28646:22:::0;;::::1;28656:12:::0;::::1;28646:22;;28638:47;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;28556:5:0::1;;28520:181;;;;28259:453;;28722:31;:19;::::0;::::1;28742:2:::0;28746:6;28722:19:::1;:31::i;:::-;28111:650:::0;;;:::o;18442:23::-;;;;;;:::o;24221:180::-;24283:8;:15;24266:14;24309:85;24337:6;24331:3;:12;24309:85;;;24367:15;24378:3;24367:10;:15::i;:::-;24345:5;;24309:85;;;;24221:180;:::o;19696:39::-;;;;:::o;19326:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21083:1166::-;20643:8;;:22;:8;20655:10;20643:22;20635:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21252:28:::1;21271:8;21252:18;:28::i;:::-;21295:11;21291:61;;;21323:17;:15;:17::i;:::-;21381:10;;21366:12;:25;21362:520;;;21445:21:::0;21441:238:::1;;-1:-1:-1::0;21506:10:0::1;::::0;21441:238:::1;;;21580:10;;21561:16;:29;21557:107;;;-1:-1:-1::0;21634:10:0::1;::::0;21557:107:::1;21362:520;;;21747:21:::0;;;:56:::1;;;21791:12;21772:16;:31;21747:56;21743:128;;;-1:-1:-1::0;21843:12:0::1;21743:128;21892:15;21931:10;;21911:16;:30;;21910:70;;;;21967:12;21947:16;:32;;21910:70;22005:132;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;22005:132:0;;;;;;;::::1;::::0;::::1;::::0;;;;;;21991:8:::1;:147:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;;22005:132;;-1:-1:-1;22149:93:0::1;;22198:15;::::0;:32:::1;::::0;22218:11;22198:19:::1;:32::i;:::-;22180:15;:50:::0;22149:93:::1;20724:1;21083:1166:::0;;;;:::o;28002:101::-;20643:8;;:22;:8;20655:10;20643:22;20635:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28075:8:::1;:20:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;28002:101::o;23377:761::-;23451:7;23471:21;23495:8;23504:4;23495:14;;;;;;;;;;;;;;;;23544;;;:8;:14;;;;;;;:21;;;;;;;;;;;;23495:14;;;;;;;23602:20;;;;23652:12;;:37;;;;;23683:4;23652:37;;;;;;23495:14;;-1:-1:-1;23544:21:0;;23602:20;;23495:14;;23652:12;;;:22;;:37;;;;;;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23652:37:0;23719:20;;;;23652:37;;-1:-1:-1;23704:12:0;:35;:52;;;;-1:-1:-1;23743:13:0;;;23704:52;23700:350;;;23773:24;23800:54;23819:4;:20;;;23841:12;23800:18;:54::i;:::-;23773:81;;23869:19;23891:58;23933:15;;23891:37;23912:4;:15;;;23891:16;:20;;:37;;;;:::i;:58::-;23869:80;-1:-1:-1;23982:56:0;24002:35;24028:8;24002:21;23869:80;24018:4;24002:15;:21::i;:35::-;23982:15;;:19;:56::i;:::-;23964:74;;23700:350;;;24067:63;24114:4;:15;;;24067:42;24104:4;24067:32;24083:15;24067:4;:11;;;:15;;:32;;;;:::i;:63::-;24060:70;23377:761;-1:-1:-1;;;;;;;23377:761:0:o;25405:828::-;25471:15;25489:10;25471:28;;25510:21;25534:8;25543:4;25534:14;;;;;;;;;;;;;;;;25583;;;:8;:14;;;;;;:23;;;;;;;;;;25534:14;;;;;;;;-1:-1:-1;25617:16:0;25592:4;25617:10;:16::i;:::-;25648:11;;:15;25644:290;;25680:16;25699:68;25751:4;:15;;;25699:47;25741:4;25699:37;25715:4;:20;;;25699:4;:11;;;:15;;:37;;;;:::i;:68::-;25680:87;-1:-1:-1;25786:12:0;;25782:141;;25819:35;25836:7;25845:8;25819:16;:35::i;:::-;25878:29;;;;;;;;;;;;;;;;;;;;;;25782:141;25644:290;;25948:11;;25944:159;;25976:12;;:62;;:12;;26006:7;26023:4;26030:7;25976:29;:62::i;:::-;26067:11;;:24;;26083:7;26067:15;:24::i;:::-;26053:38;;25944:159;26147:20;;;;26131:11;;:47;;26173:4;;26131:37;;:15;:37::i;:47::-;26113:15;;;:65;26194:31;;;;;;;;26211:4;;26194:31;;;;;;;;;;;;;25405:828;;;;;:::o;19135:71::-;;;;;;:::o;19756:48::-;19798:6;19756:48;:::o;4113:136::-;4171:7;4198:43;4202:1;4205;4198:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4191:50;4113:136;-1:-1:-1;;;4113:136:0:o;3649:181::-;3707:7;3739:5;;;3763:6;;;;3755:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5037:471;5095:7;5340:6;5336:47;;-1:-1:-1;5370:1:0;5363:8;;5336:47;5407:5;;;5411:1;5407;:5;:1;5431:5;;;;;:10;5423:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5984:132;6042:7;6069:39;6073:1;6076;6069:39;;;;;;;;;;;;;;;;;:3;:39::i;27645:349::-;27740:4;;:29;;;;;;27763:4;27740:29;;;;;;27721:16;;27740:4;;;:14;;:29;;;;;;;;;;;;;;:4;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27740:29:0;;-1:-1:-1;27784:12:0;;27780:207;;27827:8;27817:7;:18;27813:163;;;27856:4;;:32;;:4;;27874:3;27879:8;27856:17;:32::i;:::-;27813:163;;;27929:4;;:31;;:4;;27947:3;27952:7;14906:211;15050:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15073:23;15050:58;;;15023:86;;15043:5;;15023:19;:86::i;20741:267::-;20828:8;:15;20811:14;20854:147;20882:6;20876:3;:12;20854:147;;;20945:8;20920:33;;:8;20929:3;20920:13;;;;;;;;;;;;;;;;;;;;;:21;;;:33;;20912:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20890:5;;20854:147;;15125:248;15296:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15319:27;15296:68;;;15269:96;;15289:5;;15269:19;:96::i;:::-;15125:248;;;;:::o;4552:226::-;4672:7;4708:12;4700:6;;;;4692:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4744:5:0;;;4552:226::o;6612:312::-;6732:7;6767:12;6760:5;6752:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6791:9;6807:1;6803;:5;;;;;;;6612:312;-1:-1:-1;;;;;6612:312:0:o;17367:774::-;17791:23;17817:69;17845:4;17817:69;;;;;;;;;;;;;;;;;17825:5;17817:27;;;;:69;;;;;:::i;:::-;17901:17;;17791:95;;-1:-1:-1;17901:21:0;17897:237;;18056:10;18045:30;;;;;;;;;;;;;;;-1:-1:-1;18045:30:0;18037:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11832:230;11969:12;12001:53;12024:6;12032:4;12038:1;12041:12;12001:22;:53::i;:::-;11994:60;11832:230;-1:-1:-1;;;;11832:230:0:o;13320:1020::-;13493:12;13526:18;13537:6;13526:10;:18::i;:::-;13518:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13652:12;13666:23;13693:6;:11;;13712:8;13722:4;13693:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13651:76;;;;13742:7;13738:595;;;13773:10;-1:-1:-1;13766:17:0;;-1:-1:-1;13766:17:0;13738:595;13887:17;;:21;13883:439;;14150:10;14144:17;14211:15;14198:10;14194:2;14190:19;14183:44;14098:148;14286:20;;;;;;;;;;;;;;;;;;;;14293:12;;14286:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8892:444;9272:20;9320:8;;;8892:444::o

Swarm Source

ipfs://e5fa0d8854c210dd7969d7e484c9cb19de8b3a378eb78241c868cd72ffbe7325
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.