Contract 0x64bcabd505f0aedc0baaf5c4a9240a8091abe2b7

Contract Overview

Balance:
0 BNB

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xdd4f1d4cbec0ffb9cbba3c86214537ac13dfb3225ed0e08f91796f9e50549278Emergency Reward...98419622021-06-18 13:33:4693 days 1 hr ago0x32d1f9b3f7b3b9aad443d7d9a3178cb42da70455 IN  0x64bcabd505f0aedc0baaf5c4a9240a8091abe2b70 BNB0.00044976
0x3f16e0326fbeb477986bce404bbc1981329582f618bb26bc3d921e3f1195c476Emergency Reward...98419552021-06-18 13:33:2593 days 1 hr ago0x32d1f9b3f7b3b9aad443d7d9a3178cb42da70455 IN  0x64bcabd505f0aedc0baaf5c4a9240a8091abe2b70 BNB0.00026298
0xa6ab22f7da91a95c73972bffdd87863b3f05eaa71d32476fd9a4df540cacaf86Deposit98126612021-06-17 13:08:4394 days 1 hr ago0x501da412381668e3084678bdae4a8032d4a7d20c IN  0x64bcabd505f0aedc0baaf5c4a9240a8091abe2b70 BNB0.0004207
0x2128d91f87f5fd6ff2c94f6095599e111161cab65ea3f8cac6c58dc81b997a31Add98126372021-06-17 13:07:3194 days 1 hr ago0x32d1f9b3f7b3b9aad443d7d9a3178cb42da70455 IN  0x64bcabd505f0aedc0baaf5c4a9240a8091abe2b70 BNB0.00131313
0x08877b25a79f2ac89053ac98a789925c15be0299e02c14a50f11c15e9d1f3d01Add98124962021-06-17 13:00:2894 days 1 hr ago0x32d1f9b3f7b3b9aad443d7d9a3178cb42da70455 IN  0x64bcabd505f0aedc0baaf5c4a9240a8091abe2b70 BNB0.00150398
0x87f50a3c38cb35be23609c29e9682fe6ac6296f84ed342fa6b8f871c9581f2f4Emergency Reward...98124562021-06-17 12:58:2894 days 1 hr ago0x501da412381668e3084678bdae4a8032d4a7d20c IN  0x64bcabd505f0aedc0baaf5c4a9240a8091abe2b70 BNB0.00022566
0xb93dfe51cd263e605d47679b7c4730d63619e021772b9a8db6081c7d157967e40x6080604098123382021-06-17 12:52:3494 days 1 hr ago0x32d1f9b3f7b3b9aad443d7d9a3178cb42da70455 IN  Contract Creation0 BNB0.02563021
[ Download CSV Export 
Latest 5 internal transactions
Parent Txn Hash Block From To Value
0xdd4f1d4cbec0ffb9cbba3c86214537ac13dfb3225ed0e08f91796f9e5054927898419622021-06-18 13:33:4693 days 1 hr ago 0x64bcabd505f0aedc0baaf5c4a9240a8091abe2b7 0xae13d989dac2f0debff460ac112a837c89baa7cd0 BNB
0xdd4f1d4cbec0ffb9cbba3c86214537ac13dfb3225ed0e08f91796f9e5054927898419622021-06-18 13:33:4693 days 1 hr ago 0x64bcabd505f0aedc0baaf5c4a9240a8091abe2b7 0xae13d989dac2f0debff460ac112a837c89baa7cd0 BNB
0x3f16e0326fbeb477986bce404bbc1981329582f618bb26bc3d921e3f1195c47698419552021-06-18 13:33:2593 days 1 hr ago 0x64bcabd505f0aedc0baaf5c4a9240a8091abe2b7 0xae13d989dac2f0debff460ac112a837c89baa7cd0 BNB
0xa6ab22f7da91a95c73972bffdd87863b3f05eaa71d32476fd9a4df540cacaf8698126612021-06-17 13:08:4394 days 1 hr ago 0x64bcabd505f0aedc0baaf5c4a9240a8091abe2b7 0xed24fc36d5ee211ea25a80239fb8c4cfd80f12ee0 BNB
0x2128d91f87f5fd6ff2c94f6095599e111161cab65ea3f8cac6c58dc81b997a3198126372021-06-17 13:07:3194 days 1 hr ago 0x64bcabd505f0aedc0baaf5c4a9240a8091abe2b7 0xed24fc36d5ee211ea25a80239fb8c4cfd80f12ee0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PearlTreasury

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-06-17
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.12;

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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the 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 virtual 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 virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

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

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

/**
 * @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.
 */
 
// File: @openzeppelin/contracts/utils/ReentrancyGuard.sol

pragma solidity >=0.6.0 <0.8.0;

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

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

    uint256 private _status;

    constructor () internal {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}
 
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;
    }
}

/**
 * @title SafeBEP20
 * @dev Wrappers around BEP20 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 SafeBEP20 for IBEP20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeBEP20 {
    using SafeMath for uint256;
    using Address for address;

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

    function safeTransferFrom(IBEP20 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
     * {IBEP20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IBEP20 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),
            'SafeBEP20: approve from non-zero to non-zero allowance'
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IBEP20 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(IBEP20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, 'SafeBEP20: 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(IBEP20 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, 'SafeBEP20: low-level call failed');
        if (returndata.length > 0) {// Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), 'SafeBEP20: BEP20 operation did not succeed');
        }
    }
}

interface IBEP20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the token decimals.
     */
    function decimals() external view returns (uint8);

    /**
     * @dev Returns the token symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the token name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the bep token owner.
     */
    function getOwner() external view returns (address);

    /**
     * @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 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 on 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");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value : value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns (bytes memory) {
        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);
            }
        }
    }
}


contract PearlTreasury is Ownable, ReentrancyGuard {
    using SafeMath for uint256;
    using SafeBEP20 for IBEP20;

    // 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 {
        IBEP20 lpToken;           // Address of LP token contract.
        uint256 allocPoint;       // How many allocation points assigned to this pool. Rewards to distribute per block.
        uint256 lastRewardBlock;  // Last block number that Reward Token distribution occurs.
        uint256 accCakePerShare; // Accumulated CAKEs per share, times 1e12. See below.
    }

    IBEP20 public rewardToken;

    // Reward tokens distributed per block.
    uint256 public rewardPerBlock;

    // Info of each pool.
    PoolInfo[] public poolInfo;
    // Info of each user that stakes LP tokens.
    mapping (uint256 => mapping (address => UserInfo)) public userInfo;
    // Total allocation point. Must be the sum of all allocation points in all pools.
    uint256 private totalAllocPoint = 0;
    // The block number when Reward mining starts.
    uint256 public startBlock;

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


    IBEP20 stakeToken;

    constructor(
        IBEP20 _rewardToken,
        uint256 _rewardPerBlock,
        uint256 _startBlock
    ) public {
        rewardToken = _rewardToken;
        rewardPerBlock = _rewardPerBlock;
        startBlock = _startBlock;
    }

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

    mapping(IBEP20 => bool) public poolExistence;

    modifier nonDuplicated(IBEP20 _lpToken) {
        require(poolExistence[_lpToken] == false, "nonDuplicated: duplicated");
        _;
    }

    function updateStartBlock() public onlyOwner {
        startBlock = block.number;
    }

	// Add a new lp to the pool. Can only be called by the owner.
    function add(uint256 _allocPoint, IBEP20 _lpToken, bool _withUpdate) public onlyOwner nonDuplicated(_lpToken) {
        if (_withUpdate) {
            massUpdatePools();
        }
        uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock;
        totalAllocPoint = totalAllocPoint.add(_allocPoint);
        poolExistence[_lpToken] = true;
        poolInfo.push(PoolInfo({
	        lpToken : _lpToken,
	        allocPoint : _allocPoint,
	        lastRewardBlock : lastRewardBlock,
	        accCakePerShare : 0
	    }));
    }

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


    // Return reward multiplier over the given _from to _to block.
    function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) {
        return _to.sub(_from);
        }

    // View function to see pending Reward on frontend.
    function pendingReward(uint256 _pid, address _user) external view returns (uint256) {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_user];
        uint256 accCakePerShare = pool.accCakePerShare;
        uint256 lpSupply = pool.lpToken.balanceOf(address(this));
        if (block.number > pool.lastRewardBlock && lpSupply != 0) {
            uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number);
            uint256 cakeReward = multiplier.mul(rewardPerBlock).mul(pool.allocPoint).div(totalAllocPoint);
            accCakePerShare = accCakePerShare.add(cakeReward.mul(1e12).div(lpSupply));
        }
        return user.amount.mul(accCakePerShare).div(1e12).sub(user.rewardDebt);
    }

    // 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.allocPoint == 0) {
            pool.lastRewardBlock = block.number;
            return;
        }
        uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number);
        pool.lastRewardBlock = block.number;
        if (multiplier == 0) {
            return;
        }
        uint256 cakeReward = multiplier.mul(rewardPerBlock).mul(pool.allocPoint).div(totalAllocPoint);
        pool.accCakePerShare = pool.accCakePerShare.add(cakeReward.mul(1e12).div(lpSupply));
        pool.lastRewardBlock = block.number;
    }

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

    // Stake Pearl LP tokens to SmartChef
    function deposit(uint256 _pid, uint256 _amount) public nonReentrant {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        updatePool(_pid);
	        if (user.amount > 0) {
	            uint256 pending = user.amount.mul(pool.accCakePerShare).div(1e12).sub(user.rewardDebt);
	            if (pending > 0) {
	                rewardToken.safeTransfer(address(msg.sender), pending);
	            }
	        }
	        if (_amount > 0) {
	            _amount = deflationaryDeposit(stakeToken, _amount);

	            user.amount = user.amount.add(_amount);

	        }

        user.rewardDebt = user.amount.mul(pool.accCakePerShare).div(1e12);

        emit Deposit(msg.sender, _amount);
    }

    function deflationaryDeposit(IBEP20 token, uint256 _amount) internal returns (uint256) {
        uint256 balanceBeforeDeposit = token.balanceOf(address(this));

        token.safeTransferFrom(address(msg.sender), address(this), _amount);

        uint256 balanceAfterDeposit = token.balanceOf(address(this));
        _amount = balanceAfterDeposit.sub(balanceBeforeDeposit);

        return _amount;
    }

    // Withdraw SYRUP tokens from STAKING.
    function withdraw(uint256 _pid, uint256 _amount) public nonReentrant{
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];

        require(user.amount >= _amount, "PearlTreasury:: Withdraw not good");

        updatePool(_pid);

        uint256 pending = user.amount.mul(pool.accCakePerShare).div(1e12).sub(user.rewardDebt);

        if (pending > 0) {
            rewardToken.safeTransfer(address(msg.sender), pending);
        }

        if (_amount > 0) {
            user.amount = user.amount.sub(_amount);

            pool.lpToken.safeTransfer(address(msg.sender), _amount);
        }

        user.rewardDebt = user.amount.mul(pool.accCakePerShare).div(1e12);

        emit Withdraw(msg.sender, _amount);
    }

    // Withdraw without caring about rewards. EMERGENCY ONLY.
    function emergencyWithdraw(uint256 _pid) public nonReentrant {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];

        uint256 _amount = user.amount;

        pool.lpToken.safeTransfer(address(msg.sender), _amount);
        user.amount = 0;
        user.rewardDebt = 0;

        emit EmergencyWithdraw(msg.sender, _amount);
    }

    // Withdraw reward. EMERGENCY ONLY.
    function emergencyRewardWithdraw(uint256 _amount) public onlyOwner {
        require(_amount < rewardToken.balanceOf(address(this)), 'PearlTreasury:: Not enough token');

        rewardToken.safeTransfer(address(msg.sender), _amount);
    }

    // Check if reward validation is required
    function updateRewardPerBlock(uint256 _rewardPerBlock) public onlyOwner {
        massUpdatePools();

        rewardPerBlock = _rewardPerBlock;
    }

    function updateTotalAllocPoint(uint256 _pid, uint256 _allocPoint, bool _withUpdate) public onlyOwner {
        require(rewardToken.balanceOf(address(this)) >= _allocPoint, 'PearlTreasury:: Not enough token owned');
		if (_withUpdate) {
            massUpdatePools();
        }
        totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);
        poolInfo[_pid].allocPoint = _allocPoint;
    }
}

Contract ABI

[{"inputs":[{"internalType":"contract IBEP20","name":"_rewardToken","type":"address"},{"internalType":"uint256","name":"_rewardPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IBEP20","name":"_lpToken","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"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":"_amount","type":"uint256"}],"name":"emergencyRewardWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"name":"poolExistence","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IBEP20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accCakePerShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardPerBlock","type":"uint256"}],"name":"updateRewardPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateStartBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"updateTotalAllocPoint","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"}]

608060405260006006553480156200001657600080fd5b5060405162002d1438038062002d14833981810160405260608110156200003c57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050506000620000736200017060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506001808190555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816003819055508060078190555050505062000178565b600033905090565b612b8c80620001886000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806364482f79116100c357806393f1a40b1161007c57806393f1a40b1461048957806398969e82146104f2578063cbd258b514610554578063e2bbb158146105ae578063f2fde38b146105e6578063f7c618c11461062a5761014d565b806364482f7914610359578063715018a61461039d57806388e114dc146103a75780638ae39cac146103eb5780638da5cb5b146104095780638dbb1e3a1461043d5761014d565b80633279beab116101155780633279beab1461026f578063441a3e701461029d57806348cd4cb1146102d557806351eb05a6146102f35780635312ea8e14610321578063630b5ba11461034f5761014d565b806301f8a97614610152578063081e3eda146101805780631526fe271461019e5780631eaaa0451461020b5780632880269814610265575b600080fd5b61017e6004803603602081101561016857600080fd5b810190808035906020019092919050505061065e565b005b61018861071f565b6040518082815260200191505060405180910390f35b6101ca600480360360208110156101b457600080fd5b810190808035906020019092919050505061072c565b604051808573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390f35b6102636004803603606081101561022157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050610789565b005b61026d610a69565b005b61029b6004803603602081101561028557600080fd5b8101908080359060200190929190505050610b21565b005b6102d3600480360360408110156102b357600080fd5b810190808035906020019092919080359060200190929190505050610d58565b005b6102dd611063565b6040518082815260200191505060405180910390f35b61031f6004803603602081101561030957600080fd5b8101908080359060200190929190505050611069565b005b61034d6004803603602081101561033757600080fd5b8101908080359060200190929190505050611253565b005b61035761140e565b005b61039b6004803603606081101561036f57600080fd5b81019080803590602001909291908035906020019092919080351515906020019092919050505061143b565b005b6103a561156c565b005b6103e9600480360360608110156103bd57600080fd5b8101908080359060200190929190803590602001909291908035151590602001909291905050506116d9565b005b6103f3611926565b6040518082815260200191505060405180910390f35b61041161192c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104736004803603604081101561045357600080fd5b810190808035906020019092919080359060200190929190505050611955565b6040518082815260200191505060405180910390f35b6104d56004803603604081101561049f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611972565b604051808381526020018281526020019250505060405180910390f35b61053e6004803603604081101561050857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a3565b6040518082815260200191505060405180910390f35b6105966004803603602081101561056a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611be9565b60405180821515815260200191505060405180910390f35b6105e4600480360360408110156105c457600080fd5b810190808035906020019092919080359060200190929190505050611c09565b005b610628600480360360208110156105fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ea4565b005b610632612096565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106666120bc565b73ffffffffffffffffffffffffffffffffffffffff1661068461192c565b73ffffffffffffffffffffffffffffffffffffffff161461070d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61071561140e565b8060038190555050565b6000600480549050905090565b6004818154811061073957fe5b90600052602060002090600402016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154905084565b6107916120bc565b73ffffffffffffffffffffffffffffffffffffffff166107af61192c565b73ffffffffffffffffffffffffffffffffffffffff1614610838576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8160001515600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146108ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6e6f6e4475706c6963617465643a206475706c6963617465640000000000000081525060200191505060405180910390fd5b811561090e5761090d61140e565b5b6000600754431161092157600754610923565b435b905061093a856006546120c490919063ffffffff16565b6006819055506001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600460405180608001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018381526020016000815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201556060820151816003015550505050505050565b610a716120bc565b73ffffffffffffffffffffffffffffffffffffffff16610a8f61192c565b73ffffffffffffffffffffffffffffffffffffffff1614610b18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b43600781905550565b610b296120bc565b73ffffffffffffffffffffffffffffffffffffffff16610b4761192c565b73ffffffffffffffffffffffffffffffffffffffff1614610bd0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610c5957600080fd5b505afa158015610c6d573d6000803e3d6000fd5b505050506040513d6020811015610c8357600080fd5b81019080805190602001909291905050508110610d08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f506561726c54726561737572793a3a204e6f7420656e6f75676820746f6b656e81525060200191505060405180910390fd5b610d553382600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661214c9092919063ffffffff16565b50565b60026001541415610dd1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600060048381548110610de857fe5b9060005260206000209060040201905060006005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508281600001541015610ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612b366021913960400191505060405180910390fd5b610eb284611069565b6000610efc8260010154610eee64e8d4a51000610ee0876003015487600001546121ee90919063ffffffff16565b61227490919063ffffffff16565b6122be90919063ffffffff16565b90506000811115610f5557610f543382600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661214c9092919063ffffffff16565b5b6000841115610fcd57610f758483600001546122be90919063ffffffff16565b8260000181905550610fcc33858560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661214c9092919063ffffffff16565b5b610fff64e8d4a51000610ff1856003015485600001546121ee90919063ffffffff16565b61227490919063ffffffff16565b82600101819055503373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364856040518082815260200191505060405180910390a2505050600180819055505050565b60075481565b60006004828154811061107857fe5b90600052602060002090600402019050806002015443116110995750611250565b60008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561112657600080fd5b505afa15801561113a573d6000803e3d6000fd5b505050506040513d602081101561115057600080fd5b810190808051906020019092919050505090506000811480611176575060008260010154145b1561118b574382600201819055505050611250565b600061119b836002015443611955565b905043836002018190555060008114156111b757505050611250565b60006111f86006546111ea86600101546111dc600354876121ee90919063ffffffff16565b6121ee90919063ffffffff16565b61227490919063ffffffff16565b905061123a6112278461121964e8d4a51000856121ee90919063ffffffff16565b61227490919063ffffffff16565b85600301546120c490919063ffffffff16565b8460030181905550438460020181905550505050505b50565b600260015414156112cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000600482815481106112e357fe5b9060005260206000209060040201905060006005600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000154905061139f33828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661214c9092919063ffffffff16565b60008260000181905550600082600101819055503373ffffffffffffffffffffffffffffffffffffffff167f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695826040518082815260200191505060405180910390a25050506001808190555050565b6000600480549050905060005b818110156114375761142c81611069565b80600101905061141b565b5050565b6114436120bc565b73ffffffffffffffffffffffffffffffffffffffff1661146161192c565b73ffffffffffffffffffffffffffffffffffffffff16146114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80156114f9576114f861140e565b5b61153e826115306004868154811061150d57fe5b9060005260206000209060040201600101546006546122be90919063ffffffff16565b6120c490919063ffffffff16565b600681905550816004848154811061155257fe5b906000526020600020906004020160010181905550505050565b6115746120bc565b73ffffffffffffffffffffffffffffffffffffffff1661159261192c565b73ffffffffffffffffffffffffffffffffffffffff161461161b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6116e16120bc565b73ffffffffffffffffffffffffffffffffffffffff166116ff61192c565b73ffffffffffffffffffffffffffffffffffffffff1614611788576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561181257600080fd5b505afa158015611826573d6000803e3d6000fd5b505050506040513d602081101561183c57600080fd5b810190808051906020019092919050505010156118a4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612a796026913960400191505060405180910390fd5b80156118b3576118b261140e565b5b6118f8826118ea600486815481106118c757fe5b9060005260206000209060040201600101546006546122be90919063ffffffff16565b6120c490919063ffffffff16565b600681905550816004848154811061190c57fe5b906000526020600020906004020160010181905550505050565b60035481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061196a83836122be90919063ffffffff16565b905092915050565b6005602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b600080600484815481106119b357fe5b9060005260206000209060040201905060006005600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260030154905060008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611aad57600080fd5b505afa158015611ac1573d6000803e3d6000fd5b505050506040513d6020811015611ad757600080fd5b81019080805190602001909291905050509050836002015443118015611afe575060008114155b15611b99576000611b13856002015443611955565b90506000611b56600654611b488860010154611b3a600354876121ee90919063ffffffff16565b6121ee90919063ffffffff16565b61227490919063ffffffff16565b9050611b94611b8584611b7764e8d4a51000856121ee90919063ffffffff16565b61227490919063ffffffff16565b856120c490919063ffffffff16565b935050505b611bdd8360010154611bcf64e8d4a51000611bc18688600001546121ee90919063ffffffff16565b61227490919063ffffffff16565b6122be90919063ffffffff16565b94505050505092915050565b60096020528060005260406000206000915054906101000a900460ff1681565b60026001541415611c82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600060048381548110611c9957fe5b9060005260206000209060040201905060006005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611d0684611069565b600081600001541115611db8576000611d5d8260010154611d4f64e8d4a51000611d41876003015487600001546121ee90919063ffffffff16565b61227490919063ffffffff16565b6122be90919063ffffffff16565b90506000811115611db657611db53382600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661214c9092919063ffffffff16565b5b505b6000831115611e0f57611ded600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612308565b9250611e068382600001546120c490919063ffffffff16565b81600001819055505b611e4164e8d4a51000611e33846003015484600001546121ee90919063ffffffff16565b61227490919063ffffffff16565b81600101819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c846040518082815260200191505060405180910390a25050600180819055505050565b611eac6120bc565b73ffffffffffffffffffffffffffffffffffffffff16611eca61192c565b73ffffffffffffffffffffffffffffffffffffffff1614611f53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612ac96026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600080828401905083811015612142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6121e98363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506124a2565b505050565b600080831415612201576000905061226e565b600082840290508284828161221257fe5b0414612269576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612b156021913960400191505060405180910390fd5b809150505b92915050565b60006122b683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612591565b905092915050565b600061230083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612657565b905092915050565b6000808373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561237257600080fd5b505afa158015612386573d6000803e3d6000fd5b505050506040513d602081101561239c57600080fd5b810190808051906020019092919050505090506123dc3330858773ffffffffffffffffffffffffffffffffffffffff16612717909392919063ffffffff16565b60008473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561244557600080fd5b505afa158015612459573d6000803e3d6000fd5b505050506040513d602081101561246f57600080fd5b8101908080519060200190929190505050905061249582826122be90919063ffffffff16565b9350839250505092915050565b6060612504826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166127d89092919063ffffffff16565b905060008151111561258c5780806020019051602081101561252557600080fd5b810190808051906020019092919050505061258b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612a9f602a913960400191505060405180910390fd5b5b505050565b6000808311829061263d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156126025780820151818401526020810190506125e7565b50505050905090810190601f16801561262f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161264957fe5b049050809150509392505050565b6000838311158290612704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156126c95780820151818401526020810190506126ae565b50505050905090810190601f1680156126f65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6127d2846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506124a2565b50505050565b60606127e784846000856127f0565b90509392505050565b60608247101561284b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612aef6026913960400191505060405180910390fd5b61285485612999565b6128c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061291657805182526020820191506020810190506020830392506128f3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612978576040519150601f19603f3d011682016040523d82523d6000602084013e61297d565b606091505b509150915061298d8282866129ac565b92505050949350505050565b600080823b905060008111915050919050565b606083156129bc57829050612a71565b6000835111156129cf5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a36578082015181840152602081019050612a1b565b50505050905090810190601f168015612a635780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b939250505056fe506561726c54726561737572793a3a204e6f7420656e6f75676820746f6b656e206f776e65645361666542455032303a204245503230206f7065726174696f6e20646964206e6f7420737563636565644f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77506561726c54726561737572793a3a205769746864726177206e6f7420676f6f64a26469706673582212204cb8fa8c3789c521f4576d71682352c76ef74f9ee0a7d17943048c63512609a364736f6c634300060c0033000000000000000000000000ae13d989dac2f0debff460ac112a837c89baa7cd000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000000000095b963

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

000000000000000000000000ae13d989dac2f0debff460ac112a837c89baa7cd000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000000000095b963
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000ae13d989dac2f0debff460ac112a837c89baa7cd
Arg [1] : 000000000000000000000000000000000000000000000000000000e8d4a51000
Arg [2] : 000000000000000000000000000000000000000000000000000000000095b963


Deployed ByteCode Sourcemap

25325:8885:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33617:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27064:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26228:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27530:567;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27369:89;;;:::i;:::-;;33318:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32001:796;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26564:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29621:821;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32868:401;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30525:180;;;:::i;:::-;;28210:304;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1717:148;;;:::i;:::-;;33778:429;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26163:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1066:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28592:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26310:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;28782:763;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27167:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30756:772;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2020:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26084:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33617:153;1297:12;:10;:12::i;:::-;1286:23;;:7;:5;:7::i;:::-;:23;;;1278:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33700:17:::1;:15;:17::i;:::-;33747:15;33730:14;:32;;;;33617:153:::0;:::o;27064:95::-;27109:7;27136:8;:15;;;;27129:22;;27064:95;:::o;26228:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27530:567::-;1297:12;:10;:12::i;:::-;1286:23;;:7;:5;:7::i;:::-;:23;;;1278:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27630:8:::1;27306:5;27279:32;;:13;:23;27293:8;27279:23;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;27271:70;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27655:11:::2;27651:61;;;27683:17;:15;:17::i;:::-;27651:61;27722:23;27763:10;;27748:12;:25;:53;;27791:10;;27748:53;;;27776:12;27748:53;27722:79;;27830:32;27850:11;27830:15;;:19;;:32;;;;:::i;:::-;27812:15;:50;;;;27899:4;27873:13;:23;27887:8;27873:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;27914:8;27928:160;;;;;;;;27959:8;27928:160;;;;;;27992:11;27928:160;;;;28033:15;27928:160;;;;28078:1;27928:160;;::::0;27914:175:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27352:1;1357::::1;27530:567:::0;;;:::o;27369:89::-;1297:12;:10;:12::i;:::-;1286:23;;:7;:5;:7::i;:::-;:23;;;1278:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27438:12:::1;27425:10;:25;;;;27369:89::o:0;33318:244::-;1297:12;:10;:12::i;:::-;1286:23;;:7;:5;:7::i;:::-;:23;;;1278:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33414:11:::1;;;;;;;;;;;:21;;;33444:4;33414:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;33404:7;:46;33396:91;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33500:54;33533:10;33546:7;33500:11;;;;;;;;;;;:24;;;;:54;;;;;:::i;:::-;33318:244:::0;:::o;32001:796::-;4960:1;5566:7;;:19;;5558:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4960:1;5699:7;:18;;;;32080:21:::1;32104:8;32113:4;32104:14;;;;;;;;;;;;;;;;;;32080:38;;32129:21;32153:8;:14;32162:4;32153:14;;;;;;;;;;;:26;32168:10;32153:26;;;;;;;;;;;;;;;32129:50;;32215:7;32200:4;:11;;;:22;;32192:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32273:16;32284:4;32273:10;:16::i;:::-;32302:15;32320:68;32372:4;:15;;;32320:47;32362:4;32320:37;32336:4;:20;;;32320:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;:51;;:68;;;;:::i;:::-;32302:86;;32415:1;32405:7;:11;32401:98;;;32433:54;32466:10;32479:7;32433:11;;;;;;;;;;;:24;;;;:54;;;;;:::i;:::-;32401:98;32525:1;32515:7;:11;32511:154;;;32557:24;32573:7;32557:4;:11;;;:15;;:24;;;;:::i;:::-;32543:4;:11;;:38;;;;32598:55;32632:10;32645:7;32598:4;:12;;;;;;;;;;;;:25;;;;:55;;;;;:::i;:::-;32511:154;32695:47;32737:4;32695:37;32711:4;:20;;;32695:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;32677:4;:15;;:65;;;;32769:10;32760:29;;;32781:7;32760:29;;;;;;;;;;;;;;;;;;5730:1;;;4916::::0;5878:7;:22;;;;32001:796;;:::o;26564:25::-;;;;:::o;29621:821::-;29673:21;29697:8;29706:4;29697:14;;;;;;;;;;;;;;;;;;29673:38;;29742:4;:20;;;29726:12;:36;29722:75;;29779:7;;;29722:75;29807:16;29826:4;:12;;;;;;;;;;;;:22;;;29857:4;29826:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29807:56;;29890:1;29878:8;:13;:37;;;;29914:1;29895:4;:15;;;:20;29878:37;29874:126;;;29955:12;29932:4;:20;;:35;;;;29982:7;;;;29874:126;30010:18;30031:49;30045:4;:20;;;30067:12;30031:13;:49::i;:::-;30010:70;;30114:12;30091:4;:20;;:35;;;;30155:1;30141:10;:15;30137:54;;;30173:7;;;;;30137:54;30201:18;30222:72;30278:15;;30222:51;30257:4;:15;;;30222:30;30237:14;;30222:10;:14;;:30;;;;:::i;:::-;:34;;:51;;;;:::i;:::-;:55;;:72;;;;:::i;:::-;30201:93;;30328:60;30353:34;30378:8;30353:20;30368:4;30353:10;:14;;:20;;;;:::i;:::-;:24;;:34;;;;:::i;:::-;30328:4;:20;;;:24;;:60;;;;:::i;:::-;30305:4;:20;;:83;;;;30422:12;30399:4;:20;;:35;;;;29621:821;;;;;;:::o;32868:401::-;4960:1;5566:7;;:19;;5558:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4960:1;5699:7;:18;;;;32940:21:::1;32964:8;32973:4;32964:14;;;;;;;;;;;;;;;;;;32940:38;;32989:21;33013:8;:14;33022:4;33013:14;;;;;;;;;;;:26;33028:10;33013:26;;;;;;;;;;;;;;;32989:50;;33052:15;33070:4;:11;;;33052:29;;33094:55;33128:10;33141:7;33094:4;:12;;;;;;;;;;;;:25;;;;:55;;;;;:::i;:::-;33174:1;33160:4;:11;;:15;;;;33204:1;33186:4;:15;;:19;;;;33241:10;33223:38;;;33253:7;33223:38;;;;;;;;;;;;;;;;;;5730:1;;;4916::::0;5878:7;:22;;;;32868:401;:::o;30525:180::-;30570:14;30587:8;:15;;;;30570:32;;30618:11;30613:85;30641:6;30635:3;:12;30613:85;;;30671:15;30682:3;30671:10;:15::i;:::-;30649:5;;;;;30613:85;;;;30525:180;:::o;28210:304::-;1297:12;:10;:12::i;:::-;1286:23;;:7;:5;:7::i;:::-;:23;;;1278:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28308:11:::1;28304:61;;;28336:17;:15;:17::i;:::-;28304:61;28393:63;28444:11;28393:46;28413:8;28422:4;28413:14;;;;;;;;;;;;;;;;;;:25;;;28393:15;;:19;;:46;;;;:::i;:::-;:50;;:63;;;;:::i;:::-;28375:15;:81;;;;28495:11;28467:8;28476:4;28467:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;28210:304:::0;;;:::o;1717:148::-;1297:12;:10;:12::i;:::-;1286:23;;:7;:5;:7::i;:::-;:23;;;1278:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1824:1:::1;1787:40;;1808:6;::::0;::::1;;;;;;;;1787:40;;;;;;;;;;;;1855:1;1838:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1717:148::o:0;33778:429::-;1297:12;:10;:12::i;:::-;1286:23;;:7;:5;:7::i;:::-;:23;;;1278:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33938:11:::1;33898;;;;;;;;;;;:21;;;33928:4;33898:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:51;;33890:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34001:11;33997:61;;;34029:17;:15;:17::i;:::-;33997:61;34086:63;34137:11;34086:46;34106:8;34115:4;34106:14;;;;;;;;;;;;;;;;;;:25;;;34086:15;;:19;;:46;;;;:::i;:::-;:50;;:63;;;;:::i;:::-;34068:15;:81;;;;34188:11;34160:8;34169:4;34160:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;33778:429:::0;;;:::o;26163:29::-;;;;:::o;1066:87::-;1112:7;1139:6;;;;;;;;;;;1132:13;;1066:87;:::o;28592:125::-;28664:7;28691:14;28699:5;28691:3;:7;;:14;;;;:::i;:::-;28684:21;;28592:125;;;;:::o;26310:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28782:763::-;28857:7;28877:21;28901:8;28910:4;28901:14;;;;;;;;;;;;;;;;;;28877:38;;28926:21;28950:8;:14;28959:4;28950:14;;;;;;;;;;;:21;28965:5;28950:21;;;;;;;;;;;;;;;28926:45;;28982:23;29008:4;:20;;;28982:46;;29039:16;29058:4;:12;;;;;;;;;;;;:22;;;29089:4;29058:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29039:56;;29125:4;:20;;;29110:12;:35;:52;;;;;29161:1;29149:8;:13;;29110:52;29106:351;;;29179:18;29200:49;29214:4;:20;;;29236:12;29200:13;:49::i;:::-;29179:70;;29264:18;29285:72;29341:15;;29285:51;29320:4;:15;;;29285:30;29300:14;;29285:10;:14;;:30;;;;:::i;:::-;:34;;:51;;;;:::i;:::-;:55;;:72;;;;:::i;:::-;29264:93;;29390:55;29410:34;29435:8;29410:20;29425:4;29410:10;:14;;:20;;;;:::i;:::-;:24;;:34;;;;:::i;:::-;29390:15;:19;;:55;;;;:::i;:::-;29372:73;;29106:351;;;29474:63;29521:4;:15;;;29474:42;29511:4;29474:32;29490:15;29474:4;:11;;;:15;;:32;;;;:::i;:::-;:36;;:42;;;;:::i;:::-;:46;;:63;;;;:::i;:::-;29467:70;;;;;;28782:763;;;;:::o;27167:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;30756:772::-;4960:1;5566:7;;:19;;5558:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4960:1;5699:7;:18;;;;30835:21:::1;30859:8;30868:4;30859:14;;;;;;;;;;;;;;;;;;30835:38;;30884:21;30908:8;:14;30917:4;30908:14;;;;;;;;;;;:26;30923:10;30908:26;;;;;;;;;;;;;;;30884:50;;30945:16;30956:4;30945:10;:16::i;:::-;30991:1;30977:4;:11;;;:15;30973:259;;;31010:15;31028:68;31080:4;:15;;;31028:47;31070:4;31028:37;31044:4;:20;;;31028:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;:51;;:68;;;;:::i;:::-;31010:86;;31126:1;31116:7;:11;31112:108;;;31149:54;31182:10;31195:7;31149:11;;;;;;;;;;;:24;;;;:54;;;;;:::i;:::-;31112:108;30973:259;;31257:1;31247:7;:11;31243:154;;;31286:40;31306:10;;;;;;;;;;;31318:7;31286:19;:40::i;:::-;31276:50;;31358:24;31374:7;31358:4;:11;;;:15;;:24;;;;:::i;:::-;31344:4;:11;;:38;;;;31243:154;31427:47;31469:4;31427:37;31443:4;:20;;;31427:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;31409:4;:15;;:65;;;;31500:10;31492:28;;;31512:7;31492:28;;;;;;;;;;;;;;;;;;5730:1;;4916::::0;5878:7;:22;;;;30756:772;;:::o;2020:244::-;1297:12;:10;:12::i;:::-;1286:23;;:7;:5;:7::i;:::-;:23;;;1278:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2129:1:::1;2109:22;;:8;:22;;;;2101:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2219:8;2190:38;;2211:6;::::0;::::1;;;;;;;;2190:38;;;;;;;;;;;;2248:8;2239:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;2020:244:::0;:::o;26084:25::-;;;;;;;;;;;;;:::o;2272:98::-;2325:7;2352:10;2345:17;;2272:98;:::o;6179:181::-;6237:7;6257:9;6273:1;6269;:5;6257:17;;6298:1;6293;:6;;6285:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6351:1;6344:8;;;6179:181;;;;:::o;11198:177::-;11281:86;11301:5;11331:23;;;11356:2;11360:5;11308:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11281:19;:86::i;:::-;11198:177;;;:::o;7533:471::-;7591:7;7841:1;7836;:6;7832:47;;;7866:1;7859:8;;;;7832:47;7891:9;7907:1;7903;:5;7891:17;;7936:1;7931;7927;:5;;;;;;:10;7919:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7995:1;7988:8;;;7533:471;;;;;:::o;8480:132::-;8538:7;8565:39;8569:1;8572;8565:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8558:46;;8480:132;;;;:::o;6643:136::-;6701:7;6728:43;6732:1;6735;6728:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6721:50;;6643:136;;;;:::o;31536:413::-;31614:7;31634:28;31665:5;:15;;;31689:4;31665:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31634:61;;31708:67;31739:10;31760:4;31767:7;31708:5;:22;;;;:67;;;;;;:::i;:::-;31788:27;31818:5;:15;;;31842:4;31818:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31788:60;;31869:45;31893:20;31869:19;:23;;:45;;;;:::i;:::-;31859:55;;31934:7;31927:14;;;;31536:413;;;;:::o;13503:760::-;13927:23;13953:69;13981:4;13953:69;;;;;;;;;;;;;;;;;13961:5;13953:27;;;;:69;;;;;:::i;:::-;13927:95;;14057:1;14037:10;:17;:21;14033:223;;;14178:10;14167:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14159:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14033:223;13503:760;;;:::o;9108:278::-;9194:7;9226:1;9222;:5;9229:12;9214:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9253:9;9269:1;9265;:5;;;;;;9253:17;;9377:1;9370:8;;;9108:278;;;;;:::o;7082:192::-;7168:7;7201:1;7196;:6;;7204:12;7188:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7228:9;7244:1;7240;:5;7228:17;;7265:1;7258:8;;;7082:192;;;;;:::o;11383:205::-;11484:96;11504:5;11534:27;;;11563:4;11569:2;11573:5;11511:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11484:19;:96::i;:::-;11383:205;;;;:::o;20982:195::-;21085:12;21117:52;21139:6;21147:4;21153:1;21156:12;21117:21;:52::i;:::-;21110:59;;20982:195;;;;;:::o;22034:529::-;22161:12;22219:5;22194:21;:30;;22186:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22286:18;22297:6;22286:10;:18::i;:::-;22278:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22412:12;22426:23;22453:6;:11;;22473:5;22480:4;22453:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22411:74;;;;22503:52;22521:7;22530:10;22542:12;22503:17;:52::i;:::-;22496:59;;;;22034:529;;;;;;:::o;18066:420::-;18126:4;18334:12;18444:7;18432:20;18424:28;;18477:1;18470:4;:8;18463:15;;;18066:420;;;:::o;24573:743::-;24689:12;24718:7;24714:595;;;24749:10;24742:17;;;;24714:595;24883:1;24863:10;:17;:21;24859:439;;;25126:10;25120:17;25187:15;25174:10;25170:2;25166:19;25159:44;25074:148;25269:12;25262:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24573:743;;;;;;:::o

Swarm Source

ipfs://4cb8fa8c3789c521f4576d71682352c76ef74f9ee0a7d17943048c63512609a3
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading