Contract 0x9c24bc308c9995398d0515bddb5edd525bf7edcc

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x697359af49b31c5fdbb3968ecc2296b223719dfe8a5887472b0505b9c5ea0538Stake(pending)2022-05-28 0:41:242 secs ago0xec1a24c912317eefec09261d58dd51475a474fa6 IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT(Pending)
0x2050f9783c6f30b134bf59b440df20b4a028c0bb5a134b2f44855e49d8301dbeWithdraw156014332022-05-28 0:40:221 min ago0xec1a24c912317eefec09261d58dd51475a474fa6 IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.00034247252.5
0x09e4ef0d162c4c5854a1349be056c592d3d7086c9daf461fdaa622b214239a19Stake156014282022-05-28 0:40:071 min ago0x855d14fe53b7f3a75663ae47ea3d8f5c69f27308 IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.00030486752.5
0x1a5e426afd90fb0fc017711b97c399ac3b0cb6307bb85450f797009aef43e0e8Stake156013722022-05-28 0:37:194 mins ago0x299f91910e1a5af5dfe819dd4b5a0097fc670f08 IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.00030483752.5
0x2c3481978c028050f38bdf7a2092b5f2c06d9015b57fe08e9975b25042c357e1Withdraw156013322022-05-28 0:35:196 mins ago0x299f91910e1a5af5dfe819dd4b5a0097fc670f08 IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.00029082752.5
0x267369dc5cbe15baab191f00739ec5fae99eec97f779a124a00cb4a6829c25a7Withdraw156012982022-05-28 0:33:377 mins ago0xa9f08f24d8eb9ec2729c1f8e4403c3f8f8842363 IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.00029082752.5
0x370a285987eed9d89cd99de4878880bc1508130b8947998ad4ce74ef99b6d291Withdraw156012432022-05-28 0:30:5210 mins ago0x855d14fe53b7f3a75663ae47ea3d8f5c69f27308 IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.00033153752.5
0x62d377e30e9d4da6b5df0828dd81167cc18d9a983eb922cc1d9e40398c13806dStake156012112022-05-28 0:29:1612 mins ago0x5f25eec55fbd503ef94db2c01d1cc5b90ecbd41f IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.00026947252.5
0x69f482182d00d6298a0f0635ba02b15c738fb83e83df1fa6ca232df12b0d56ceStake156012062022-05-28 0:29:0112 mins ago0x5f25eec55fbd503ef94db2c01d1cc5b90ecbd41f IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.0002660052.5
0x754d9adcdd570a2dc61f5586d7504107e219efe5862d7f4a0b1896abe9d0345bStake156012022022-05-28 0:28:4912 mins ago0x5f25eec55fbd503ef94db2c01d1cc5b90ecbd41f IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.0002660052.5
0xfdfb2eb89265e32e19d8003428c9cd314bb9e1ce5990079826aedd14b55f3212Withdraw156011802022-05-28 0:27:4313 mins ago0x6bd06e35801e747e169b718575a115aec16cb9be IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.00029082752.5
0x6a0a43f7866654e2f488657a979ccdadb3cf4f862a949e5d157588131a6f7f1bStake156011632022-05-28 0:26:5214 mins ago0xc9f5b07465c29d222c6fbb1d369531f2ad51ffe8 IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.00026947252.5
0x928a1206d8440859d244cf614295f108eab33bcedfb19f3600988495e07df14eGet Reward156011492022-05-28 0:26:1015 mins ago0xec1a24c912317eefec09261d58dd51475a474fa6 IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.00029284752.5
0x31918202e48e73bd8b46f132cdcafffab2de5acdf84d6ebdf42d3f9618c76326Get Reward156011292022-05-28 0:25:1016 mins ago0xdee87692ef2065e98ebdff9185e0745b89402e21 IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.00029281752.5
0x82c6cf57345042e537c7d5b8a23dd73e48a3e25b9a74705da874f7112840ea05Withdraw156011192022-05-28 0:24:4016 mins ago0xc9f5b07465c29d222c6fbb1d369531f2ad51ffe8 IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.00030072752.5
0x5368e43cf8f3ccf3b5e036297010e5578d2c850f33ddefcc21f34382bcf5e3b6Withdraw156011132022-05-28 0:24:2217 mins ago0xc9f5b07465c29d222c6fbb1d369531f2ad51ffe8 IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.00021720252.5
0x489e438c663862b321ce60673b663c47dbc9f41e46851a7f20285069b5c8d3abStake156011132022-05-28 0:24:2217 mins ago0x5fb777c12bb9c7feeceb7e3b5259b74de7e5f9ad IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.00030483752.5
0xf5fe8ae1452061002cd048444bf283a0651901fe614019189404dd02f61b6858Stake156011072022-05-28 0:24:0417 mins ago0x5fb777c12bb9c7feeceb7e3b5259b74de7e5f9ad IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.0002904052.5
0x732ec2059374043c86f38e24960012c13ed774a7145862ec21d894e393d53fa9Withdraw156011042022-05-28 0:23:5517 mins ago0x5f25eec55fbd503ef94db2c01d1cc5b90ecbd41f IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.00030279752.5
0xcf8e083e5bcd304a9a0b8f3bda3cf4733626440203faaa1ef7de691e33977e34Withdraw156011012022-05-28 0:23:4617 mins ago0x5f25eec55fbd503ef94db2c01d1cc5b90ecbd41f IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.0002904052.5
0xf9e19cfff6b9fce9a8c1c6a28edf74abc3fd2a543cb3322e2ba343c270d5fb2fStake156010992022-05-28 0:23:4017 mins ago0x235855eae4029e6d91d54263a310fb5a7ad6859e IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.00030483752.5
0x4e2bea9cc3581f7bbbfd30b8b77d258dade4e9f7b421ae33d048ef3627e5ae8dStake156010952022-05-28 0:23:2817 mins ago0x1ac266a222ac32353b97e23bad4c68661b9a66ec IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.00030483752.5
0xa6f180e9f90010743a2c7918747b1585ab3982756d59610df6eed382642668cbStake156010922022-05-28 0:23:1918 mins ago0xa26b3f7cf654cf2e5b52608e67c48d756b584462 IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.00030483752.5
0x5a29f09fba6a39c71fdb5840c8788b8a320c3a661c4fa4834c2690930e6a154cStake156010812022-05-28 0:22:4618 mins ago0xa26b3f7cf654cf2e5b52608e67c48d756b584462 IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.0002904052.5
0x16c56b9bf207653844b57f41f635f357a21a954e8f1c741eee4794e3c1e25f9aWithdraw156010782022-05-28 0:22:3718 mins ago0x1ac266a222ac32353b97e23bad4c68661b9a66ec IN 0x9c24bc308c9995398d0515bddb5edd525bf7edcc0 HT0.00033668252.5
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PoolReward

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2021-12-23
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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


library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

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

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

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

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

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        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) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        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, reverting 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) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

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

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

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * 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);
        return a / b;
    }

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

    /**
 * @dev Returns the largest of two numbers.
 */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

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

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

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


abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    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");
    }
    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");
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (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 {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


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));
    }
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        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));
    }
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

library Math {
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
    }
}

contract IRewardDistributionRecipient is Ownable {
    address rewardDistribution;

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

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

contract PoolReward is IRewardDistributionRecipient {
    IERC20 public rewardToken = IERC20(0x03dfD917677De9321249dA24d47950964Fd3034C);
    address public usdt = address(0xa71EdC38d189767582C38A3145b5873052c3e47a);
    address public burnAddress = address(0x000000000000000000000000000000000000dEaD);
    uint256[2] public refBonus = [10,5] ;

    using SafeERC20 for IERC20;
    using SafeMath for uint256;

    uint256 public twoDecay = 0;
    bool public limit_start = false;
    mapping(uint => uint) public starttime;
    mapping(uint => uint) public releasetime;
    
    uint256 public oneday = 1 days;
    
    struct UserInfo{
        uint256 balance;
        uint256 userRewardPerTokenPaid;
        uint256 rewards;
        uint256 stakeTime;
        uint256 referrers;

    }
    struct PoolInfo{
        IERC20 token1;
        IERC20 token2;
        uint256 totalSupply;
        uint256 total;
        uint256 rewardRate;
        uint256 lastUpdateTime;
        uint256 rewardPerTokenStored;
        uint256 burnAmount;
        uint256 cycle;
        uint256 radio;
        uint256 oneReward;
        uint256 halveTimes;
        uint256 periodFinish;
    }
    PoolInfo[] public poolList;
    mapping(uint256 => mapping(address => UserInfo)) public userInfoMap;

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

    modifier updateReward(uint position, address account) {
        poolList[position].rewardPerTokenStored = rewardPerToken(position);
        poolList[position].lastUpdateTime = lastTimeRewardApplicable(position);
        if (account != address(0)) {
            userInfoMap[position][account].rewards = earned(position,account);
            userInfoMap[position][account].userRewardPerTokenPaid = poolList[position].rewardPerTokenStored;
        }
        _;
    }

    constructor() {
        twoDecay = 180 days;
    }
    
    function createPool(address _token1, address _token2, uint256 _total, uint256 _rewardRate, uint256 _burn, uint256 _cycle, uint _radio,uint _starttime,uint _releasetime) public onlyOwner {
            poolList.push(PoolInfo({
                token1: IERC20(_token1),
                token2: IERC20(_token2),
                totalSupply: 0,
                total: _total,
                rewardRate:_rewardRate,
                lastUpdateTime: 0,
                rewardPerTokenStored: 0,
                burnAmount: _burn,
                cycle: _cycle.mul(oneday),
                radio: _radio,
                oneReward: _rewardRate,
                halveTimes: 0,
                periodFinish: _starttime - 10
            }));
            starttime[poolList.length-1] = _starttime;
            releasetime[poolList.length-1] = _releasetime;
    }

    function changePool(uint position, address _token1, address _token2, uint256 _total, uint256 _rewardRate, uint256 _burn, uint256 _cycle, uint _radio, uint _time) public onlyOwner {
            poolList[position] = PoolInfo({
                token1: IERC20(_token1),
                token2: IERC20(_token2),
                totalSupply: 0,
                total: _total,
                rewardRate:_rewardRate,
                lastUpdateTime: 0,
                rewardPerTokenStored: 0,
                burnAmount: _burn,
                cycle: _cycle.mul(oneday),
                radio: _radio,
                oneReward: _rewardRate,
                halveTimes: 0,
                periodFinish: _time - 10
            });
    }

    function changePoolToken(uint position, address _token1, address _token2) public onlyOwner{
        poolList[position].token1 = IERC20(_token1);
        poolList[position].token2 = IERC20(_token2);
    }

    function changeTotalAndReward(uint position, uint _total, uint _reward) public onlyOwner{
        poolList[position].total = _total;
        poolList[position].rewardRate = _reward;
    }

    function changeBurn(uint position, uint _burn, uint _cycle) public onlyOwner{
        poolList[position].burnAmount = _burn;
        poolList[position].cycle = _cycle;
    }

    function changeRadio(uint position, uint _radio) public onlyOwner{
        poolList[position].radio = _radio;
    }

    function lastTimeRewardApplicable(uint position) public view returns (uint256) {
        if(block.timestamp < releasetime[position]) return releasetime[position];
        if(poolList[position].halveTimes == 0) return Math.min(block.timestamp, poolList[position].periodFinish.add(twoDecay));
        else return Math.min(block.timestamp, poolList[position].periodFinish);
    }

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

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

    function stake(uint position,uint256 amount) public updateReward(position,msg.sender) checkhalve(position) checkStart(position) {
        require(amount > 0, "Cannot stake 0");
        poolList[position].token1.safeTransferFrom(msg.sender,address(this),amount);
        if(address(poolList[position].token2) != address(0)) poolList[position].token2.safeTransferFrom(msg.sender,address(this),amount.mul(100).div(poolList[position].radio));
        
        userInfoMap[position][msg.sender].balance = userInfoMap[position][msg.sender].balance.add(amount);
        poolList[position].totalSupply = poolList[position].totalSupply.add(amount);

        userInfoMap[position][msg.sender].stakeTime = block.timestamp;

        emit Staked(msg.sender, amount);
    }

    uint256 public uinte = 24 * 3600 ; // 锁仓时间
    function withdraw(uint position, uint256 amount) public updateReward(position,msg.sender) checkhalve(position) checkStart(position) {
        require(amount > 0, "Cannot withdraw 0");

        uint256 lockTime = userInfoMap[position][msg.sender].stakeTime + poolList[position].cycle+ uinte;
        while(lockTime < block.timestamp){
          lockTime = lockTime + poolList[position].cycle;
        }
        
        require(lockTime < uinte.add(block.timestamp), "Lock time");

        uint burn_value = amount.mul(poolList[position].burnAmount).div(100);
        poolList[position].token1.safeTransfer(burnAddress,burn_value);
        poolList[position].token1.safeTransfer(msg.sender,amount.sub(burn_value));
        if(address(poolList[position].token2) != address(0)) {
            poolList[position].token2.safeTransfer(burnAddress,burn_value.mul(100).div(poolList[position].radio));
            poolList[position].token2.safeTransfer(msg.sender,amount.sub(burn_value).mul(100).div(poolList[position].radio));
        }
        
        userInfoMap[position][msg.sender].balance = userInfoMap[position][msg.sender].balance.sub(amount);
        poolList[position].totalSupply = poolList[position].totalSupply.sub(amount);
        
        emit Withdrawn(msg.sender, amount);
    }

    function exit(uint position) external {
        withdraw(position,userInfoMap[position][msg.sender].balance);
        getReward(position);
    }

    function getReward(uint position) public updateReward(position,msg.sender) checkhalve(position) updateReward(position,msg.sender) checkStart(position) {

        // uint256 reward = earned(position,msg.sender);
        uint256 reward = userInfoMap[position][msg.sender].rewards;
        if(reward > poolList[position].total) reward = poolList[position].total;
        // if (reward > 0) {
            userInfoMap[position][msg.sender].rewards = 0;
            require(rewardToken.balanceOf(address(this)) > 0, "getReward: total tfil is zero");
            if (rewardToken.balanceOf(address(this)) <= reward) {
                reward = rewardToken.balanceOf(address(this));
            }

            poolList[position].total = poolList[position].total.sub(reward);
            rewardToken.transfer(msg.sender, reward);
            emit RewardPaid(msg.sender, reward);
            
        // }
    }
    
    function getList(uint start, uint length) public view returns(uint[] memory,uint[] memory){
        if(length > poolList.length) length = poolList.length.sub(start);
        uint[] memory rewardRates = new uint[](length);
        uint[] memory totals = new uint[](length);
        uint position;
        for(uint i=0;i<length;i++){
            position = start.add(i);
            uint rewardRate = poolList[position].rewardRate;
            if(block.timestamp >= poolList[position].periodFinish && poolList[position].halveTimes > 0){
                rewardRate = poolList[position].oneReward.mul(100 - halveRate).div(100);
            }
            rewardRates[i] = rewardRate;
            totals[i] = poolList[position].totalSupply;
        }
        return (rewardRates,totals);
    }
    
    function getUser(uint position, address _adr) public view returns(uint){
        return userInfoMap[position][_adr].balance;
    }

    function havle(uint position) public onlyOwner{
        if (block.timestamp >= poolList[position].periodFinish) {
            if (poolList[position].halveTimes != 1) {
                poolList[position].rewardRate = poolList[position].rewardRate.mul(100 - halveRate).div(100);
            }
            poolList[position].halveTimes++;
            poolList[position].periodFinish = poolList[position].periodFinish.add(twoDecay);
            emit RewardAdded(poolList[position].rewardRate);
        }
    }

    modifier checkhalve(uint position){
        if (block.timestamp >= poolList[position].periodFinish) {
            if (poolList[position].halveTimes != 0) {
                poolList[position].rewardRate = poolList[position].rewardRate.mul(100 - halveRate).div(100);
            }
            poolList[position].halveTimes++;
            poolList[position].periodFinish = poolList[position].periodFinish.add(twoDecay);
            emit RewardAdded(poolList[position].rewardRate);
        }
        _;
    }

    modifier checkStart(uint position){
        require(block.timestamp > starttime[position], "not start");
        _;
    }

    uint256 public halveRate = 50;
    function notifyRewardAmount(uint256 rate)
    external
    onlyRewardDistribution
    {
        require(rate >= 0 && rate <= 100, "0 <= rate <= 100");
        halveRate = rate ;
    }
    
    function getRewardRate(uint position) public view returns(uint){
        return poolList[position].rewardRate;
    }
    
    function getReferrers(uint position, address _adr) public view returns(uint){
        return userInfoMap[position][_adr].referrers;
    }
    
    function getRewardDay(uint position, address _adr) public view returns(uint){
        if(poolList[position].totalSupply == 0) return 0;
        uint rewardRate = poolList[position].rewardRate;
        if(block.timestamp >= poolList[position].periodFinish.add(twoDecay) && poolList[position].halveTimes > 0){
            rewardRate = poolList[position].oneReward.mul(100 - halveRate);
        }
        return rewardRate.mul(userInfoMap[position][_adr].balance).div(poolList[position].totalSupply);
    }
    
    function countDown(uint position, address _adr) public view returns(uint){
        if(userInfoMap[position][_adr].balance == 0) return 0;
        uint256 lockTime = userInfoMap[position][_adr].stakeTime + poolList[position].cycle+ uinte;
        while(lockTime < block.timestamp){
          lockTime = lockTime + poolList[position].cycle;
        }
        if(lockTime - block.timestamp < uinte) return 0;
        else return lockTime - block.timestamp - uinte;
    }
    
    function changeLockTime(uint position, uint time) public onlyOwner{
        poolList[position].cycle = time;
    }

    function getDURATION() public view returns(uint){
        if(poolList[0].halveTimes == 0) return poolList[0].periodFinish.add(twoDecay);
        return poolList[0].periodFinish;
    }
    
    
    //test--
    function changePeriodFinish(uint position, uint time) public onlyOwner{
        poolList[position].periodFinish = time;
    }
    
    function changeUinte(uint time) public onlyOwner{
        uinte = time;
    }
    
    function changeTwoDecay(uint time) public onlyOwner{
        twoDecay = time;
    }

    function changeStarttime(uint position, uint time) public onlyOwner{
        starttime[position] = time;
    }

    function changeReleaseTime(uint position,uint time) public onlyOwner{
        releasetime[position] = time;
    }

    function changeRefBonus(uint position, uint _radio) public onlyOwner{
        refBonus[position] = _radio;
    }

    function changeRewardToken(address _token) public onlyOwner{
        rewardToken = IERC20(_token);
    }

    function out(address _receive) public onlyOwner{
        uint value = IERC20(rewardToken).balanceOf(address(this));
        IERC20(rewardToken).transfer(_receive,value);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_cycle","type":"uint256"}],"name":"changeBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"changeLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"changePeriodFinish","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"address","name":"_token1","type":"address"},{"internalType":"address","name":"_token2","type":"address"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_rewardRate","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_cycle","type":"uint256"},{"internalType":"uint256","name":"_radio","type":"uint256"},{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"changePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"address","name":"_token1","type":"address"},{"internalType":"address","name":"_token2","type":"address"}],"name":"changePoolToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"uint256","name":"_radio","type":"uint256"}],"name":"changeRadio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"uint256","name":"_radio","type":"uint256"}],"name":"changeRefBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"changeReleaseTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"changeRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"changeStarttime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_reward","type":"uint256"}],"name":"changeTotalAndReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"changeTwoDecay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"changeUinte","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"address","name":"_adr","type":"address"}],"name":"countDown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token1","type":"address"},{"internalType":"address","name":"_token2","type":"address"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_rewardRate","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_cycle","type":"uint256"},{"internalType":"uint256","name":"_radio","type":"uint256"},{"internalType":"uint256","name":"_starttime","type":"uint256"},{"internalType":"uint256","name":"_releasetime","type":"uint256"}],"name":"createPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"}],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getDURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"getList","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"address","name":"_adr","type":"address"}],"name":"getReferrers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"}],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"address","name":"_adr","type":"address"}],"name":"getRewardDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"}],"name":"getRewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"address","name":"_adr","type":"address"}],"name":"getUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"halveRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"}],"name":"havle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"}],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limit_start","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"oneday","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receive","type":"address"}],"name":"out","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolList","outputs":[{"internalType":"contract IERC20","name":"token1","type":"address"},{"internalType":"contract IERC20","name":"token2","type":"address"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"rewardRate","type":"uint256"},{"internalType":"uint256","name":"lastUpdateTime","type":"uint256"},{"internalType":"uint256","name":"rewardPerTokenStored","type":"uint256"},{"internalType":"uint256","name":"burnAmount","type":"uint256"},{"internalType":"uint256","name":"cycle","type":"uint256"},{"internalType":"uint256","name":"radio","type":"uint256"},{"internalType":"uint256","name":"oneReward","type":"uint256"},{"internalType":"uint256","name":"halveTimes","type":"uint256"},{"internalType":"uint256","name":"periodFinish","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"refBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"releasetime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"}],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardDistribution","type":"address"}],"name":"setRewardDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"starttime","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":[],"name":"twoDecay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uinte","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfoMap","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"userRewardPerTokenPaid","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"},{"internalType":"uint256","name":"stakeTime","type":"uint256"},{"internalType":"uint256","name":"referrers","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

600280546001600160a01b03199081167303dfd917677de9321249da24d47950964fd3034c17825560038054821673a71edc38d189767582c38a3145b5873052c3e47a1790556004805490911661dead17905560c0604052600a6080908152600560a08190526200007392909190620000f0565b5060006007556008805460ff1916905562015180600b819055600e556032600f55348015620000a157600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062ed4e006007556200014f565b826002810192821562000126579160200282015b8281111562000126578251829060ff1690559160200191906001019062000104565b506200013492915062000138565b5090565b5b8082111562000134576000815560010162000139565b613768806200015f6000396000f3fe608060405234801561001057600080fd5b50600436106102a05760003560e01c8063715018a611610167578063d506b704116100ce578063eeca156211610087578063eeca1562146106f2578063f2e7ab2114610705578063f2fde38b14610725578063f32f476b14610738578063f7c618c114610741578063fb21c0651461075457600080fd5b8063d506b70414610673578063d814436514610686578063da5b738514610699578063ddcd6407146106b9578063e39c08fc146106cc578063e4502842146106df57600080fd5b8063a9816b0811610120578063a9816b08146105c3578063b14d44ec146105e4578063be2f0bf51461061d578063cdb13feb14610630578063cf4bb9b414610643578063d35d67e81461065657600080fd5b8063715018a61461055e5780637b0472f0146105665780637f8661a114610579578063874c120b1461058c5780638da5cb5b1461059f578063a6513562146105b057600080fd5b8063414343511161020b5780635661b56d116101c45780635661b56d146104995780635f02c145146104ac57806360a5bb3f1461051c5780636db5a5801461052557806370d5ae051461053857806370fcb0a71461054b57600080fd5b8063414343511461043b57806343db134914610444578063441a3e7014610457578063492e33091461046a5780634d25528c146104735780634ee631861461048657600080fd5b8063257664a41161025d578063257664a4146103215780632a48235b146103575780632f48ab7d146103d7578063346f1be1146104025780633b32f55b146104155780633c6b16ab1461042857600080fd5b806303cab3aa146102a5578063088ab8ce146102cb5780630d68b761146102e05780631258f802146102f35780631892ec00146103065780631c4b774b1461030e575b600080fd5b6102b86102b33660046133df565b610767565b6040519081526020015b60405180910390f35b6102de6102d93660046132ff565b6108e3565b005b6102de6102ee3660046132ff565b610938565b6102de6103013660046134bb565b610984565b6102b86109db565b6102de61031c3660046133ad565b610a55565b6102b861032f3660046133df565b6000918252600d602090815260408084206001600160a01b0393909316845291905290205490565b61036a6103653660046133ad565b611164565b604080516001600160a01b039e8f1681529d909c1660208e01529a8c019990995260608b019790975260808a019590955260a089019390935260c088019190915260e08701526101008601526101208501526101408401526101608301526101808201526101a0016102c2565b6003546103ea906001600160a01b031681565b6040516001600160a01b0390911681526020016102c2565b6102de6104103660046133ad565b6111ea565b6102de6104233660046134dd565b611219565b6102de6104363660046133ad565b61129a565b6102b8600b5481565b6102de6104523660046134bb565b611350565b6102de6104653660046134bb565b6113a7565b6102b8600e5481565b6102de6104813660046134bb565b6119dc565b6102de61049436600461331a565b611a18565b6102de6104a7366004613447565b611be8565b6104f46104ba3660046133df565b600d602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a0016102c2565b6102b860075481565b6102b86105333660046133ad565b611d78565b6004546103ea906001600160a01b031681565b6102de6105593660046132ff565b611d8f565b6102de611ec2565b6102de6105743660046134bb565b611f36565b6102de6105873660046133ad565b6123d8565b6102b861059a3660046133ad565b612409565b6000546001600160a01b03166103ea565b6102b86105be3660046133ad565b612533565b6105d66105d13660046134bb565b612561565b6040516102c2929190613560565b6102b86105f23660046133df565b6000918252600d602090815260408084206001600160a01b0393909316845291905290206004015490565b6102de61062b3660046133ad565b61275a565b6102de61063e3660046133ad565b612789565b6102de6106513660046134bb565b61290f565b6008546106639060ff1681565b60405190151581526020016102c2565b6102de61068136600461340b565b612953565b6102b86106943660046133df565b612a14565b6102b86106a73660046133ad565b60096020526000908152604090205481565b6102de6106c73660046134bb565b612b22565b6102b86106da3660046133df565b612b5e565b6102de6106ed3660046134dd565b612be5565b6102b86107003660046133ad565b612c66565b6102b86107133660046133ad565b600a6020526000908152604090205481565b6102de6107333660046132ff565b612d11565b6102b8600f5481565b6002546103ea906001600160a01b031681565b6102de6107623660046134bb565b612dfb565b6000600c838154811061077c5761077c6136e6565b90600052602060002090600d0201600201546000141561079e575060006108dd565b6000600c84815481106107b3576107b36136e6565b90600052602060002090600d0201600401549050610800600754600c86815481106107e0576107e06136e6565b90600052602060002090600d0201600c0154612e5290919063ffffffff16565b421015801561083357506000600c858154811061081f5761081f6136e6565b90600052602060002090600d0201600b0154115b156108805761087d600f54606461084a9190613672565b600c868154811061085d5761085d6136e6565b90600052602060002090600d0201600a0154612eb190919063ffffffff16565b90505b6108d9600c8581548110610896576108966136e6565b60009182526020808320600d928302016002015488845291815260408084206001600160a01b0389168552909152909120546108d3908490612eb1565b90612f30565b9150505b92915050565b6000546001600160a01b031633146109165760405162461bcd60e51b815260040161090d906135e4565b60405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146109625760405162461bcd60e51b815260040161090d906135e4565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146109ae5760405162461bcd60e51b815260040161090d906135e4565b80600c83815481106109c2576109c26136e6565b90600052602060002090600d0201600c01819055505050565b6000600c6000815481106109f1576109f16136e6565b90600052602060002090600d0201600b015460001415610a2a57610a25600754600c6000815481106107e0576107e06136e6565b905090565b600c600081548110610a3e57610a3e6136e6565b90600052602060002090600d0201600c0154905090565b8033610a6082612409565b600c8381548110610a7357610a736136e6565b90600052602060002090600d020160060181905550610a9182612c66565b600c8381548110610aa457610aa46136e6565b600091825260209091206005600d9092020101556001600160a01b03811615610b4157610ad18282612b5e565b6000838152600d602090815260408083206001600160a01b0386168452909152902060020155600c805483908110610b0b57610b0b6136e6565b60009182526020808320600d928302016006015485845291815260408084206001600160a01b0386168552909152909120600101555b82600c8181548110610b5557610b556136e6565b90600052602060002090600d0201600c01544210610ccf57600c8181548110610b8057610b806136e6565b90600052602060002090600d0201600b0154600014610c0c57610be360646108d3600f546064610bb09190613672565b600c8581548110610bc357610bc36136e6565b90600052602060002090600d020160040154612eb190919063ffffffff16565b600c8281548110610bf657610bf66136e6565b90600052602060002090600d0201600401819055505b600c8181548110610c1f57610c1f6136e6565b600091825260208220600b600d9092020101805491610c3d836136b5565b9190505550610c5b600754600c83815481106107e0576107e06136e6565b600c8281548110610c6e57610c6e6136e6565b90600052602060002090600d0201600c0181905550600080516020613713833981519152600c8281548110610ca557610ca56136e6565b90600052602060002090600d020160040154604051610cc691815260200190565b60405180910390a15b8333610cda82612409565b600c8381548110610ced57610ced6136e6565b90600052602060002090600d020160060181905550610d0b82612c66565b600c8381548110610d1e57610d1e6136e6565b600091825260209091206005600d9092020101556001600160a01b03811615610dbb57610d4b8282612b5e565b6000838152600d602090815260408083206001600160a01b0386168452909152902060020155600c805483908110610d8557610d856136e6565b60009182526020808320600d928302016006015485845291815260408084206001600160a01b0386168552909152909120600101555b60008681526009602052604090205486904211610dea5760405162461bcd60e51b815260040161090d906135c1565b6000878152600d60209081526040808320338452909152902060020154600c805489908110610e1b57610e1b6136e6565b90600052602060002090600d020160030154811115610e5c57600c8881548110610e4757610e476136e6565b90600052602060002090600d02016003015490505b6000888152600d6020908152604080832033845290915280822060029081018390555490516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015610ebe57600080fd5b505afa158015610ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef691906133c6565b11610f435760405162461bcd60e51b815260206004820152601d60248201527f6765745265776172643a20746f74616c207466696c206973207a65726f000000604482015260640161090d565b6002546040516370a0823160e01b815230600482015282916001600160a01b0316906370a082319060240160206040518083038186803b158015610f8657600080fd5b505afa158015610f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbe91906133c6565b11611041576002546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561100657600080fd5b505afa15801561101a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103e91906133c6565b90505b61107881600c8a81548110611058576110586136e6565b90600052602060002090600d020160030154612f8b90919063ffffffff16565b600c898154811061108b5761108b6136e6565b60009182526020909120600d909102016003015560025460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b1580156110eb57600080fd5b505af11580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611123919061338b565b5060405181815233907fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486906020015b60405180910390a25050505050505050565b600c818154811061117457600080fd5b60009182526020909120600d9091020180546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c909c01546001600160a01b039b8c169d509a9099169a9799969895979496939592949193909291908d565b6000546001600160a01b031633146112145760405162461bcd60e51b815260040161090d906135e4565b600e55565b6000546001600160a01b031633146112435760405162461bcd60e51b815260040161090d906135e4565b81600c8481548110611257576112576136e6565b90600052602060002090600d02016007018190555080600c8481548110611280576112806136e6565b90600052602060002090600d020160080181905550505050565b6001546001600160a01b0316336001600160a01b0316146113075760405162461bcd60e51b815260206004820152602160248201527f43616c6c6572206973206e6f742072657761726420646973747269627574696f6044820152603760f91b606482015260840161090d565b606481111561134b5760405162461bcd60e51b815260206004820152601060248201526f030203c3d2072617465203c3d203130360841b604482015260640161090d565b600f55565b6000546001600160a01b0316331461137a5760405162461bcd60e51b815260040161090d906135e4565b80600c838154811061138e5761138e6136e6565b90600052602060002090600d0201600801819055505050565b81336113b282612409565b600c83815481106113c5576113c56136e6565b90600052602060002090600d0201600601819055506113e382612c66565b600c83815481106113f6576113f66136e6565b600091825260209091206005600d9092020101556001600160a01b03811615611493576114238282612b5e565b6000838152600d602090815260408083206001600160a01b0386168452909152902060020155600c80548390811061145d5761145d6136e6565b60009182526020808320600d928302016006015485845291815260408084206001600160a01b0386168552909152909120600101555b83600c81815481106114a7576114a76136e6565b90600052602060002090600d0201600c015442106115ee57600c81815481106114d2576114d26136e6565b90600052602060002090600d0201600b015460001461152b5761150260646108d3600f546064610bb09190613672565b600c8281548110611515576115156136e6565b90600052602060002090600d0201600401819055505b600c818154811061153e5761153e6136e6565b600091825260208220600b600d909202010180549161155c836136b5565b919050555061157a600754600c83815481106107e0576107e06136e6565b600c828154811061158d5761158d6136e6565b90600052602060002090600d0201600c0181905550600080516020613713833981519152600c82815481106115c4576115c46136e6565b90600052602060002090600d0201600401546040516115e591815260200190565b60405180910390a15b6000858152600960205260409020548590421161161d5760405162461bcd60e51b815260040161090d906135c1565b600085116116615760405162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015260640161090d565b6000600e54600c8881548110611679576116796136e6565b60009182526020808320600d92830201600801548b84529181526040808420338552909152909120600301546116af9190613619565b6116b99190613619565b90505b428110156116fb57600c87815481106116d7576116d76136e6565b90600052602060002090600d020160080154816116f49190613619565b90506116bc565b600e546117089042612e52565b81106117425760405162461bcd60e51b81526020600482015260096024820152684c6f636b2074696d6560b81b604482015260640161090d565b600061178060646108d3600c8b8154811061175f5761175f6136e6565b90600052602060002090600d0201600701548a612eb190919063ffffffff16565b90506117d0600460009054906101000a90046001600160a01b031682600c8b815481106117af576117af6136e6565b60009182526020909120600d90910201546001600160a01b03169190612fe7565b6117f1336117de8984612f8b565b600c8b815481106117af576117af6136e6565b60006001600160a01b0316600c898154811061180f5761180f6136e6565b600091825260209091206001600d9092020101546001600160a01b03161461190157600454600c80546118b7926001600160a01b031691611880918c90811061185a5761185a6136e6565b90600052602060002090600d0201600901546108d3606486612eb190919063ffffffff16565b600c8b81548110611893576118936136e6565b600091825260209091206001600d9092020101546001600160a01b03169190612fe7565b61190133611880600c8b815481106118d1576118d16136e6565b90600052602060002090600d0201600901546108d360646118fb878e612f8b90919063ffffffff16565b90612eb1565b6000888152600d602090815260408083203384529091529020546119259088612f8b565b6000898152600d60209081526040808320338452909152902055600c80546119799189918b908110611959576119596136e6565b90600052602060002090600d020160020154612f8b90919063ffffffff16565b600c898154811061198c5761198c6136e6565b90600052602060002090600d020160020181905550336001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58860405161115291815260200190565b6000546001600160a01b03163314611a065760405162461bcd60e51b815260040161090d906135e4565b6000918252600a602052604090912055565b6000546001600160a01b03163314611a425760405162461bcd60e51b815260040161090d906135e4565b600c604051806101a001604052808b6001600160a01b031681526020018a6001600160a01b03168152602001600081526020018981526020018881526020016000815260200160008152602001878152602001611aaa600b5488612eb190919063ffffffff16565b815260200185815260200188815260200160008152602001600a85611acf9190613672565b9052815460018082018455600093845260208085208451600d9094020180546001600160a01b03199081166001600160a01b03958616178255918501518184018054909316941693909317905560408301516002830155606083015160038301556080830151600483015560a0830151600583015560c0830151600683015560e083015160078301556101008301516008830155610120830151600980840191909155610140840151600a840155610160840151600b84015561018090930151600c928301559054859391611ba391613672565b81526020019081526020016000208190555080600a60006001600c80549050611bcc9190613672565b8152602081019190915260400160002055505050505050505050565b6000546001600160a01b03163314611c125760405162461bcd60e51b815260040161090d906135e4565b604051806101a00160405280896001600160a01b03168152602001886001600160a01b03168152602001600081526020018781526020018681526020016000815260200160008152602001858152602001611c78600b5486612eb190919063ffffffff16565b815260200183815260200186815260200160008152602001600a83611c9d9190613672565b815250600c8a81548110611cb357611cb36136e6565b60009182526020918290208351600d9092020180546001600160a01b039283166001600160a01b03199182161782559284015160018201805491909316931692909217905560408201516002820155606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b82015561018090910151600c90910155505050505050505050565b60058160028110611d8857600080fd5b0154905081565b6000546001600160a01b03163314611db95760405162461bcd60e51b815260040161090d906135e4565b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015611dfd57600080fd5b505afa158015611e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3591906133c6565b60025460405163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905292935091169063a9059cbb90604401602060405180830381600087803b158015611e8557600080fd5b505af1158015611e99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebd919061338b565b505050565b6000546001600160a01b03163314611eec5760405162461bcd60e51b815260040161090d906135e4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b8133611f4182612409565b600c8381548110611f5457611f546136e6565b90600052602060002090600d020160060181905550611f7282612c66565b600c8381548110611f8557611f856136e6565b600091825260209091206005600d9092020101556001600160a01b0381161561202257611fb28282612b5e565b6000838152600d602090815260408083206001600160a01b0386168452909152902060020155600c805483908110611fec57611fec6136e6565b60009182526020808320600d928302016006015485845291815260408084206001600160a01b0386168552909152909120600101555b83600c8181548110612036576120366136e6565b90600052602060002090600d0201600c0154421061217d57600c8181548110612061576120616136e6565b90600052602060002090600d0201600b01546000146120ba5761209160646108d3600f546064610bb09190613672565b600c82815481106120a4576120a46136e6565b90600052602060002090600d0201600401819055505b600c81815481106120cd576120cd6136e6565b600091825260208220600b600d90920201018054916120eb836136b5565b9190505550612109600754600c83815481106107e0576107e06136e6565b600c828154811061211c5761211c6136e6565b90600052602060002090600d0201600c0181905550600080516020613713833981519152600c8281548110612153576121536136e6565b90600052602060002090600d02016004015460405161217491815260200190565b60405180910390a15b600085815260096020526040902054859042116121ac5760405162461bcd60e51b815260040161090d906135c1565b600085116121ed5760405162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015260640161090d565b612228333087600c8a81548110612206576122066136e6565b60009182526020909120600d90910201546001600160a01b031692919061304a565b60006001600160a01b0316600c8781548110612246576122466136e6565b600091825260209091206001600d9092020101546001600160a01b0316146122e1576122e133306122a9600c8a81548110612283576122836136e6565b90600052602060002090600d0201600901546108d360648b612eb190919063ffffffff16565b600c8a815481106122bc576122bc6136e6565b600091825260209091206001600d9092020101546001600160a01b031692919061304a565b6000868152600d602090815260408083203384529091529020546123059086612e52565b6000878152600d60209081526040808320338452909152902055600c805461235991879189908110612339576123396136e6565b90600052602060002090600d020160020154612e5290919063ffffffff16565b600c878154811061236c5761236c6136e6565b60009182526020808320600d9283020160020193909355888252825260408082203380845290845291819020426003909101555187815290917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d910160405180910390a2505050505050565b6000818152600d602090815260408083203384529091529020546123fd9082906113a7565b61240681610a55565b50565b6000600c828154811061241e5761241e6136e6565b90600052602060002090600d0201600201546000141561246457600c828154811061244b5761244b6136e6565b90600052602060002090600d0201600601549050919050565b6108dd612500600c848154811061247d5761247d6136e6565b90600052602060002090600d0201600201546108d3600b546108d3670de0b6b3a76400006118fb600c8a815481106124b7576124b76136e6565b90600052602060002090600d0201600401546118fb600c8c815481106124df576124df6136e6565b90600052602060002090600d0201600501546124fa8d612c66565b90612f8b565b600c8481548110612513576125136136e6565b90600052602060002090600d020160060154612e5290919063ffffffff16565b6000600c8281548110612548576125486136e6565b90600052602060002090600d0201600401549050919050565b600c54606090819083111561258057600c5461257d9085612f8b565b92505b60008367ffffffffffffffff81111561259b5761259b6136fc565b6040519080825280602002602001820160405280156125c4578160200160208202803683370190505b50905060008467ffffffffffffffff8111156125e2576125e26136fc565b60405190808252806020026020018201604052801561260b578160200160208202803683370190505b5090506000805b8681101561274d576126248882612e52565b91506000600c838154811061263b5761263b6136e6565b90600052602060002090600d0201600401549050600c8381548110612662576126626136e6565b90600052602060002090600d0201600c015442101580156126a757506000600c8481548110612693576126936136e6565b90600052602060002090600d0201600b0154115b156126d9576126d660646108d3600f5460646126c39190613672565b600c878154811061085d5761085d6136e6565b90505b808583815181106126ec576126ec6136e6565b602002602001018181525050600c838154811061270b5761270b6136e6565b90600052602060002090600d02016002015484838151811061272f5761272f6136e6565b60209081029190910101525080612745816136b5565b915050612612565b5091969095509350505050565b6000546001600160a01b031633146127845760405162461bcd60e51b815260040161090d906135e4565b600755565b6000546001600160a01b031633146127b35760405162461bcd60e51b815260040161090d906135e4565b600c81815481106127c6576127c66136e6565b90600052602060002090600d0201600c0154421061240657600c81815481106127f1576127f16136e6565b90600052602060002090600d0201600b015460011461284a5761282160646108d3600f546064610bb09190613672565b600c8281548110612834576128346136e6565b90600052602060002090600d0201600401819055505b600c818154811061285d5761285d6136e6565b600091825260208220600b600d909202010180549161287b836136b5565b9190505550612899600754600c83815481106107e0576107e06136e6565b600c82815481106128ac576128ac6136e6565b90600052602060002090600d0201600c0181905550600080516020613713833981519152600c82815481106128e3576128e36136e6565b90600052602060002090600d02016004015460405161290491815260200190565b60405180910390a150565b6000546001600160a01b031633146129395760405162461bcd60e51b815260040161090d906135e4565b806005836002811061294d5761294d6136e6565b01555050565b6000546001600160a01b0316331461297d5760405162461bcd60e51b815260040161090d906135e4565b81600c8481548110612991576129916136e6565b90600052602060002090600d020160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600c84815481106129da576129da6136e6565b90600052602060002090600d020160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b6000828152600d602090815260408083206001600160a01b0385168452909152812054612a43575060006108dd565b6000600e54600c8581548110612a5b57612a5b6136e6565b60009182526020808320600d928302016008015488845291815260408084206001600160a01b038916855290915290912060030154612a9a9190613619565b612aa49190613619565b90505b42811015612ae657600c8481548110612ac257612ac26136e6565b90600052602060002090600d02016008015481612adf9190613619565b9050612aa7565b600e54612af34283613672565b1015612b035760009150506108dd565b600e54612b104283613672565b612b1a9190613672565b9150506108dd565b6000546001600160a01b03163314612b4c5760405162461bcd60e51b815260040161090d906135e4565b60009182526009602052604090912055565b6000828152600d602090815260408083206001600160a01b038516845290915281206002810154600190910154612bde9190612bd890670de0b6b3a7640000906108d390612baf906124fa8a612409565b6000898152600d602090815260408083206001600160a01b038c16845290915290205490612eb1565b90612e52565b9392505050565b6000546001600160a01b03163314612c0f5760405162461bcd60e51b815260040161090d906135e4565b81600c8481548110612c2357612c236136e6565b90600052602060002090600d02016003018190555080600c8481548110612c4c57612c4c6136e6565b90600052602060002090600d020160040181905550505050565b6000818152600a6020526040812054421015612c8f57506000908152600a602052604090205490565b600c8281548110612ca257612ca26136e6565b90600052602060002090600d0201600b015460001415612cde576108dd42612cd9600754600c86815481106107e0576107e06136e6565b613088565b6108dd42600c8481548110612cf557612cf56136e6565b90600052602060002090600d0201600c0154613088565b919050565b6000546001600160a01b03163314612d3b5760405162461bcd60e51b815260040161090d906135e4565b6001600160a01b038116612da05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161090d565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314612e255760405162461bcd60e51b815260040161090d906135e4565b80600c8381548110612e3957612e396136e6565b90600052602060002090600d0201600901819055505050565b600080612e5f8385613619565b905083811015612bde5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161090d565b600082612ec0575060006108dd565b6000612ecc8385613653565b905082612ed98583613631565b14612bde5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161090d565b6000808211612f815760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015260640161090d565b612bde8284613631565b600082821115612fdd5760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015260640161090d565b612bde8284613672565b6040516001600160a01b038316602482015260448101829052611ebd90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261309e565b6040516001600160a01b03808516602483015283166044820152606481018290526130829085906323b872dd60e01b90608401613013565b50505050565b60008183106130975781612bde565b5090919050565b60006130f3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131709092919063ffffffff16565b805190915015611ebd5780806020019051810190613111919061338b565b611ebd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161090d565b606061317f8484600085613187565b949350505050565b6060824710156131e85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161090d565b843b6132365760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161090d565b600080866001600160a01b031685876040516132529190613544565b60006040518083038185875af1925050503d806000811461328f576040519150601f19603f3d011682016040523d82523d6000602084013e613294565b606091505b50915091506132a48282866132af565b979650505050505050565b606083156132be575081612bde565b8251156132ce5782518084602001fd5b8160405162461bcd60e51b815260040161090d919061358e565b80356001600160a01b0381168114612d0c57600080fd5b60006020828403121561331157600080fd5b612bde826132e8565b60008060008060008060008060006101208a8c03121561333957600080fd5b6133428a6132e8565b985061335060208b016132e8565b989b989a505050506040870135966060810135966080820135965060a0820135955060c0820135945060e08201359350610100909101359150565b60006020828403121561339d57600080fd5b81518015158114612bde57600080fd5b6000602082840312156133bf57600080fd5b5035919050565b6000602082840312156133d857600080fd5b5051919050565b600080604083850312156133f257600080fd5b82359150613402602084016132e8565b90509250929050565b60008060006060848603121561342057600080fd5b83359250613430602085016132e8565b915061343e604085016132e8565b90509250925092565b60008060008060008060008060006101208a8c03121561346657600080fd5b8935985061347660208b016132e8565b975061348460408b016132e8565b989b979a5097986060810135985060808101359760a0820135975060c0820135965060e08201359550610100909101359350915050565b600080604083850312156134ce57600080fd5b50508035926020909101359150565b6000806000606084860312156134f257600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b838110156135395781518752958201959082019060010161351d565b509495945050505050565b60008251613556818460208701613689565b9190910192915050565b6040815260006135736040830185613509565b82810360208401526135858185613509565b95945050505050565b60208152600082518060208401526135ad816040850160208701613689565b601f01601f19169190910160400192915050565b6020808252600990820152681b9bdd081cdd185c9d60ba1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561362c5761362c6136d0565b500190565b60008261364e57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561366d5761366d6136d0565b500290565b600082821015613684576136846136d0565b500390565b60005b838110156136a457818101518382015260200161368c565b838111156130825750506000910152565b60006000198214156136c9576136c96136d0565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfede88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433da2646970667358221220a4e17879ab2be22ff406c96377e9a0bb662ceff596809425b119d3f26c19d19564736f6c63430008070033

Deployed ByteCode Sourcemap

17395:13910:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28971:510;;;;;;:::i;:::-;;:::i;:::-;;;13714:25:1;;;13702:2;13687:18;28971:510:0;;;;;;;;31010:106;;;;;;:::i;:::-;;:::i;:::-;;17235:153;;;;;;:::i;:::-;;:::i;30322:127::-;;;;;;:::i;:::-;;:::i;30104:186::-;;;:::i;25395:916::-;;;;;;:::i;:::-;;:::i;27137:132::-;;;;;;:::i;:::-;27203:4;27226:21;;;:11;:21;;;;;;;;-1:-1:-1;;;;;27226:27:0;;;;;;;;;;;:35;;27137:132;18609:26;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;6698:32:1;;;6680:51;;6767:32;;;;6762:2;6747:18;;6740:60;6816:18;;;6809:34;;;;6874:2;6859:18;;6852:34;;;;6917:3;6902:19;;6895:35;;;;6718:3;6946:19;;6939:35;;;;7005:3;6990:19;;6983:35;;;;7049:3;7034:19;;7027:35;7093:3;7078:19;;7071:35;7137:3;7122:19;;7115:35;7181:3;7166:19;;7159:36;7226:3;7211:19;;7204:36;7271:3;7256:19;;7249:36;6667:3;6652:19;18609:26:0;6168:1123:1;17539:73:0;;;;;-1:-1:-1;;;;;17539:73:0;;;;;;-1:-1:-1;;;;;4582:32:1;;;4564:51;;4552:2;4537:18;17539:73:0;4418:203:1;30461:79:0;;;;;;:::i;:::-;;:::i;21519:176::-;;;;;;:::i;:::-;;:::i;28489:189::-;;;;;;:::i;:::-;;:::i;17989:30::-;;;;;;29980:116;;;;;;:::i;:::-;;:::i;23923:1309::-;;;;;;:::i;:::-;;:::i;23867:32::-;;;;;;30765:115;;;;;;:::i;:::-;;:::i;19481:866::-;;;;;;:::i;:::-;;:::i;20355:744::-;;;;;;:::i;:::-;;:::i;18642:67::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14009:25:1;;;14065:2;14050:18;;14043:34;;;;14093:18;;;14086:34;;;;14151:2;14136:18;;14129:34;14194:3;14179:19;;14172:35;13996:3;13981:19;18642:67:0;13750:463:1;17819:27:0;;;;;;17706:35;;;;;;:::i;:::-;;:::i;17619:80::-;;;;;-1:-1:-1;;;;;17619:80:0;;;31124:178;;;;;;:::i;:::-;;:::i;11105:148::-;;;:::i;23089:770::-;;;;;;:::i;:::-;;:::i;25240:147::-;;;;;;:::i;:::-;;:::i;22216:533::-;;;;;;:::i;:::-;;:::i;10886:87::-;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10886:87;;28690:118;;;;;;:::i;:::-;;:::i;26323:802::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;28820:139::-;;;;;;:::i;:::-;28891:4;28914:21;;;:11;:21;;;;;;;;-1:-1:-1;;;;;28914:27:0;;;;;;;;;;;:37;;;;28820:139;30552:85;;;;;;:::i;:::-;;:::i;27277:514::-;;;;;;:::i;:::-;;:::i;30888:114::-;;;;;;:::i;:::-;;:::i;17853:31::-;;;;;;;;;;;;5920:14:1;;5913:22;5895:41;;5883:2;5868:18;17853:31:0;5755:187:1;21107:206:0;;;;;;:::i;:::-;;:::i;29493:475::-;;;;;;:::i;:::-;;:::i;17891:38::-;;;;;;:::i;:::-;;;;;;;;;;;;;;30645:112;;;;;;:::i;:::-;;:::i;22757:324::-;;;;;;:::i;:::-;;:::i;21321:190::-;;;;;;:::i;:::-;;:::i;21828:380::-;;;;;;:::i;:::-;;:::i;17936:40::-;;;;;;:::i;:::-;;;;;;;;;;;;;;11259:244;;;;;;:::i;:::-;;:::i;28453:29::-;;;;;;17454:78;;;;;-1:-1:-1;;;;;17454:78:0;;;21703:117;;;;;;:::i;:::-;;:::i;28971:510::-;29042:4;29061:8;29070;29061:18;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;;29095:1;29061:35;29058:48;;;-1:-1:-1;29105:1:0;29098:8;;29058:48;29117:15;29135:8;29144;29135:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;;29117:47;;29197:45;29233:8;;29197;29206;29197:18;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;;:35;;:45;;;;:::i;:::-;29178:15;:64;;:101;;;;;29278:1;29246:8;29255;29246:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;;:33;29178:101;29175:194;;;29308:49;29347:9;;29341:3;:15;;;;:::i;:::-;29308:8;29317;29308:18;;;;;;;;:::i;:::-;;;;;;;;;;;:28;;;:32;;:49;;;;:::i;:::-;29295:62;;29175:194;29386:87;29442:8;29451;29442:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:30;;;29401:21;;;;;;;;;;-1:-1:-1;;;;;29401:27:0;;;;;;;;;;:35;29386:51;;:10;;:14;:51::i;:::-;:55;;:87::i;:::-;29379:94;;;28971:510;;;;;:::o;31010:106::-;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10296:10;11019:23;11011:68;;;;-1:-1:-1;;;11011:68:0;;;;;;;:::i;:::-;;;;;;;;;31080:11:::1;:28:::0;;-1:-1:-1;;;;;;31080:28:0::1;-1:-1:-1::0;;;;;31080:28:0;;;::::1;::::0;;;::::1;::::0;;31010:106::o;17235:153::-;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10296:10;11019:23;11011:68;;;;-1:-1:-1;;;11011:68:0;;;;;;;:::i;:::-;17340:18:::1;:40:::0;;-1:-1:-1;;;;;;17340:40:0::1;-1:-1:-1::0;;;;;17340:40:0;;;::::1;::::0;;;::::1;::::0;;17235:153::o;30322:127::-;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10296:10;11019:23;11011:68;;;;-1:-1:-1;;;11011:68:0;;;;;;;:::i;:::-;30437:4:::1;30403:8;30412;30403:18;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;:38;;;;30322:127:::0;;:::o;30104:186::-;30147:4;30166:8;30175:1;30166:11;;;;;;;;:::i;:::-;;;;;;;;;;;:22;;;30192:1;30166:27;30163:77;;;30202:38;30231:8;;30202;30211:1;30202:11;;;;;;;;:::i;:38::-;30195:45;;30104:186;:::o;30163:77::-;30258:8;30267:1;30258:11;;;;;;;;:::i;:::-;;;;;;;;;;;:24;;;30251:31;;30104:186;:::o;25395:916::-;25449:8;25458:10;19045:24;19060:8;19045:14;:24::i;:::-;19003:8;19012;19003:18;;;;;;;;:::i;:::-;;;;;;;;;;;:39;;:66;;;;19116:34;19141:8;19116:24;:34::i;:::-;19080:8;19089;19080:18;;;;;;;;:::i;:::-;;;;;;;;;:33;:18;;;;;:33;:70;-1:-1:-1;;;;;19165:21:0;;;19161:229;;19244:24;19251:8;19260:7;19244:6;:24::i;:::-;19203:21;;;;:11;:21;;;;;;;;-1:-1:-1;;;;;19203:30:0;;;;;;;;;:38;;:65;19339:8;:18;;19215:8;;19339:18;;;;;;:::i;:::-;;;;;;;;;;;;;;:39;;;19283:21;;;;;;;;;;-1:-1:-1;;;;;19283:30:0;;;;;;;;;;:53;;:95;19161:229;25481:8:::1;27867;27876;27867:18;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;;27848:15;:50;27844:450;;27919:8;27928;27919:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;;27952:1;27919:34;27915:166;;28006:59;28061:3;28006:50;28046:9;;28040:3;:15;;;;:::i;:::-;28006:8;28015;28006:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;;:33;;:50;;;;:::i;:59::-;27974:8;27983;27974:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;:91;;;;27915:166;28095:8;28104;28095:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;:29:::1;:18;::::0;;::::1;;:29;:31:::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;28175:45;28211:8;;28175;28184;28175:18;;;;;;;;:::i;:45::-;28141:8;28150;28141:18;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;:79;;;;-1:-1:-1::0;;;;;;;;;;;28252:8:0::1;28261;28252:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;;28240:42;;;;13714:25:1::0;;13702:2;13687:18;;13568:177;28240:42:0::1;;;;;;;;27844:450;25504:8:::2;25513:10;19045:24;19060:8;19045:14;:24::i;:::-;19003:8;19012;19003:18;;;;;;;;:::i;:::-;;;;;;;;;;;:39;;:66;;;;19116:34;19141:8;19116:24;:34::i;:::-;19080:8;19089;19080:18;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;:33:::2;:18;::::0;;::::2;;:33;:70:::0;-1:-1:-1;;;;;19165:21:0;::::2;::::0;19161:229:::2;;19244:24;19251:8;19260:7;19244:6;:24::i;:::-;19203:21;::::0;;;:11:::2;:21;::::0;;;;;;;-1:-1:-1;;;;;19203:30:0;::::2;::::0;;;;;;;:38:::2;;:65:::0;19339:8:::2;:18:::0;;19215:8;;19339:18;::::2;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;::::2;::::0;;::::2;;:39;;::::0;19283:21;;;;;;;;;;-1:-1:-1;;;;;19283:30:0;::::2;::::0;;;;;;;;:53:::2;;:95:::0;19161:229:::2;28392:19:::3;::::0;;;:9:::3;:19;::::0;;;;;25536:8;;28374:15:::3;:37;28366:59;;;;-1:-1:-1::0;;;28366:59:0::3;;;;;;;:::i;:::-;25617:14:::4;25634:21:::0;;;:11:::4;:21;::::0;;;;;;;25656:10:::4;25634:33:::0;;;;;;;:41:::4;;::::0;25698:8:::4;:18:::0;;25646:8;;25698:18;::::4;;;;;:::i;:::-;;;;;;;;;;;:24;;;25689:6;:33;25686:71;;;25733:8;25742;25733:18;;;;;;;;:::i;:::-;;;;;;;;;;;:24;;;25724:33;;25686:71;25846:1;25802:21:::0;;;:11:::4;:21;::::0;;;;;;;25824:10:::4;25802:33:::0;;;;;;;;:41:::4;::::0;;::::4;:45:::0;;;25870:11;:36;;-1:-1:-1;;;25870:36:0;;25900:4:::4;25870:36;::::0;::::4;4564:51:1::0;-1:-1:-1;;;;;25870:11:0;;::::4;::::0;:21:::4;::::0;4537:18:1;;25870:36:0::4;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;25862:82;;;::::0;-1:-1:-1;;;25862:82:0;;10795:2:1;25862:82:0::4;::::0;::::4;10777:21:1::0;10834:2;10814:18;;;10807:30;10873:31;10853:18;;;10846:59;10922:18;;25862:82:0::4;10593:353:1::0;25862:82:0::4;25963:11;::::0;:36:::4;::::0;-1:-1:-1;;;25963:36:0;;25993:4:::4;25963:36;::::0;::::4;4564:51:1::0;26003:6:0;;-1:-1:-1;;;;;25963:11:0::4;::::0;:21:::4;::::0;4537:18:1;;25963:36:0::4;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;25959:132;;26039:11;::::0;:36:::4;::::0;-1:-1:-1;;;26039:36:0;;26069:4:::4;26039:36;::::0;::::4;4564:51:1::0;-1:-1:-1;;;;;26039:11:0;;::::4;::::0;:21:::4;::::0;4537:18:1;;26039:36:0::4;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26030:45;;25959:132;26134:36;26163:6;26134:8;26143;26134:18;;;;;;;;:::i;:::-;;;;;;;;;;;:24;;;:28;;:36;;;;:::i;:::-;26107:8;26116;26107:18;;;;;;;;:::i;:::-;;::::0;;;::::4;::::0;;;::::4;::::0;;::::4;;:24;;:63:::0;26185:11:::4;::::0;:40:::4;::::0;-1:-1:-1;;;26185:40:0;;26206:10:::4;26185:40;::::0;::::4;5180:51:1::0;5247:18;;;5240:34;;;-1:-1:-1;;;;;26185:11:0;;::::4;::::0;:20:::4;::::0;5153:18:1;;26185:40:0::4;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;26245:30:0::4;::::0;13714:25:1;;;26256:10:0::4;::::0;26245:30:::4;::::0;13702:2:1;13687:18;26245:30:0::4;;;;;;;;25546:765;19400:1:::3;28304::::2;;19400::::1;25395:916:::0;;;:::o;18609:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18609:26:0;;;;-1:-1:-1;18609:26:0;;;;;;;;;;;;;;;;;;;;;;;;:::o;30461:79::-;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10296:10;11019:23;11011:68;;;;-1:-1:-1;;;11011:68:0;;;;;;;:::i;:::-;30520:5:::1;:12:::0;30461:79::o;21519:176::-;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10296:10;11019:23;11011:68;;;;-1:-1:-1;;;11011:68:0;;;;;;;:::i;:::-;21638:5:::1;21606:8;21615;21606:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;:37;;;;21681:6;21654:8;21663;21654:18;;;;;;;;:::i;:::-;;;;;;;;;;;:24;;:33;;;;21519:176:::0;;;:::o;28489:189::-;17151:18;;-1:-1:-1;;;;;17151:18:0;10296:10;-1:-1:-1;;;;;17135:34:0;;17127:80;;;;-1:-1:-1;;;17127:80:0;;12599:2:1;17127:80:0;;;12581:21:1;12638:2;12618:18;;;12611:30;12677:34;12657:18;;;12650:62;-1:-1:-1;;;12728:18:1;;;12721:31;12769:19;;17127:80:0;12397:397:1;17127:80:0;28618:3:::1;28610:4;:11;;28589:53;;;::::0;-1:-1:-1;;;28589:53:0;;9329:2:1;28589:53:0::1;::::0;::::1;9311:21:1::0;9368:2;9348:18;;;9341:30;-1:-1:-1;;;9387:18:1;;;9380:46;9443:18;;28589:53:0::1;9127:340:1::0;28589:53:0::1;28653:9;:16:::0;28489:189::o;29980:116::-;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10296:10;11019:23;11011:68;;;;-1:-1:-1;;;11011:68:0;;;;;;;:::i;:::-;30084:4:::1;30057:8;30066;30057:18;;;;;;;;:::i;:::-;;;;;;;;;;;:24;;:31;;;;29980:116:::0;;:::o;23923:1309::-;23992:8;24001:10;19045:24;19060:8;19045:14;:24::i;:::-;19003:8;19012;19003:18;;;;;;;;:::i;:::-;;;;;;;;;;;:39;;:66;;;;19116:34;19141:8;19116:24;:34::i;:::-;19080:8;19089;19080:18;;;;;;;;:::i;:::-;;;;;;;;;:33;:18;;;;;:33;:70;-1:-1:-1;;;;;19165:21:0;;;19161:229;;19244:24;19251:8;19260:7;19244:6;:24::i;:::-;19203:21;;;;:11;:21;;;;;;;;-1:-1:-1;;;;;19203:30:0;;;;;;;;;:38;;:65;19339:8;:18;;19215:8;;19339:18;;;;;;:::i;:::-;;;;;;;;;;;;;;:39;;;19283:21;;;;;;;;;;-1:-1:-1;;;;;19283:30:0;;;;;;;;;;:53;;:95;19161:229;24024:8:::1;27867;27876;27867:18;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;;27848:15;:50;27844:450;;27919:8;27928;27919:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;;27952:1;27919:34;27915:166;;28006:59;28061:3;28006:50;28046:9;;28040:3;:15;;;;:::i;28006:59::-;27974:8;27983;27974:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;:91;;;;27915:166;28095:8;28104;28095:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;:29:::1;:18;::::0;;::::1;;:29;:31:::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;28175:45;28211:8;;28175;28184;28175:18;;;;;;;;:::i;:45::-;28141:8;28150;28141:18;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;:79;;;;-1:-1:-1::0;;;;;;;;;;;28252:8:0::1;28261;28252:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;;28240:42;;;;13714:25:1::0;;13702:2;13687:18;;13568:177;28240:42:0::1;;;;;;;;27844:450;28392:19:::2;::::0;;;:9:::2;:19;::::0;;;;;24045:8;;28374:15:::2;:37;28366:59;;;;-1:-1:-1::0;;;28366:59:0::2;;;;;;;:::i;:::-;24083:1:::3;24074:6;:10;24066:40;;;::::0;-1:-1:-1;;;24066:40:0;;11490:2:1;24066:40:0::3;::::0;::::3;11472:21:1::0;11529:2;11509:18;;;11502:30;-1:-1:-1;;;11548:18:1;;;11541:47;11605:18;;24066:40:0::3;11288:341:1::0;24066:40:0::3;24119:16;24210:5;;24184:8;24193;24184:18;;;;;;;;:::i;:::-;;::::0;;;::::3;::::0;;;::::3;::::0;;::::3;;:24;;::::0;24138:21;;;;;;;;;;24160:10:::3;24138:33:::0;;;;;;;;:43:::3;;::::0;:70:::3;::::0;24184:24;24138:70:::3;:::i;:::-;:77;;;;:::i;:::-;24119:96;;24226:104;24243:15;24232:8;:26;24226:104;;;24294:8;24303;24294:18;;;;;;;;:::i;:::-;;;;;;;;;;;:24;;;24283:8;:35;;;;:::i;:::-;24272:46;;24226:104;;;24369:5;::::0;:26:::3;::::0;24379:15:::3;24369:9;:26::i;:::-;24358:8;:37;24350:59;;;::::0;-1:-1:-1;;;24350:59:0;;11153:2:1;24350:59:0::3;::::0;::::3;11135:21:1::0;11192:1;11172:18;;;11165:29;-1:-1:-1;;;11210:18:1;;;11203:39;11259:18;;24350:59:0::3;10951:332:1::0;24350:59:0::3;24422:15;24440:50;24486:3;24440:41;24451:8;24460;24451:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;;24440:6;:10;;:41;;;;:::i;:50::-;24422:68;;24501:62;24540:11;;;;;;;;;-1:-1:-1::0;;;;;24540:11:0::3;24552:10;24501:8;24510;24501:18;;;;;;;;:::i;:::-;;::::0;;;::::3;::::0;;;::::3;::::0;;::::3;;:25:::0;-1:-1:-1;;;;;24501:25:0::3;::::0;:62;:38:::3;:62::i;:::-;24574:73;24613:10;24624:22;:6:::0;24635:10;24624::::3;:22::i;:::-;24574:8;24583;24574:18;;;;;;;;:::i;:73::-;24707:1;-1:-1:-1::0;;;;;24661:48:0::3;24669:8;24678;24669:18;;;;;;;;:::i;:::-;;::::0;;;::::3;::::0;;;:25:::3;:18;::::0;;::::3;;:25;::::0;-1:-1:-1;;;;;24669:25:0::3;24661:48;24658:308;;24765:11;::::0;24801:8:::3;:18:::0;;24726:101:::3;::::0;-1:-1:-1;;;;;24765:11:0::3;::::0;24777:49:::3;::::0;24810:8;;24801:18;::::3;;;;;:::i;:::-;;;;;;;;;;;:24;;;24777:19;24792:3;24777:10;:14;;:19;;;;:::i;:49::-;24726:8;24735;24726:18;;;;;;;;:::i;:::-;;::::0;;;::::3;::::0;;;:25:::3;:18;::::0;;::::3;;:25;::::0;-1:-1:-1;;;;;24726:25:0::3;::::0;:101;:38:::3;:101::i;:::-;24842:112;24881:10;24892:61;24928:8;24937;24928:18;;;;;;;;:::i;:::-;;;;;;;;;;;:24;;;24892:31;24919:3;24892:22;24903:10;24892:6;:10;;:22;;;;:::i;:::-;:26:::0;::::3;:31::i;24842:112::-;25030:21;::::0;;;:11:::3;:21;::::0;;;;;;;25052:10:::3;25030:33:::0;;;;;;;:41;:53:::3;::::0;25076:6;25030:45:::3;:53::i;:::-;24986:21;::::0;;;:11:::3;:21;::::0;;;;;;;25008:10:::3;24986:33:::0;;;;;;;:97;25127:8:::3;:18:::0;;:42:::3;::::0;25162:6;;24998:8;;25127:18;::::3;;;;;:::i;:::-;;;;;;;;;;;:30;;;:34;;:42;;;;:::i;:::-;25094:8;25103;25094:18;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;:75;;;;25205:10;-1:-1:-1::0;;;;;25195:29:0::3;;25217:6;25195:29;;;;13714:25:1::0;;13702:2;13687:18;;13568:177;30765:115:0;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10296:10;11019:23;11011:68;;;;-1:-1:-1;;;11011:68:0;;;;;;;:::i;:::-;30844:21:::1;::::0;;;:11:::1;:21;::::0;;;;;:28;30765:115::o;19481:866::-;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10296:10;11019:23;11011:68;;;;-1:-1:-1;;;11011:68:0;;;;;;;:::i;:::-;19682:8:::1;19696:526;;;;;;;;19739:7;-1:-1:-1::0;;;;;19696:526:0::1;;;;;19781:7;-1:-1:-1::0;;;;;19696:526:0::1;;;;;19821:1;19696:526;;;;19848:6;19696:526;;;;19884:11;19696:526;;;;19930:1;19696:526;;;;19972:1;19696:526;;;;20004:5;19696:526;;;;20035:18;20046:6;;20035;:10;;:18;;;;:::i;:::-;19696:526;;;;20079:6;19696:526;;;;20115:11;19696:526;;;;20157:1;19696:526;;;;20204:2;20191:10;:15;;;;:::i;:::-;19696:526:::0;;19682:541;;::::1;::::0;;::::1;::::0;;-1:-1:-1;19682:541:0;;;::::1;::::0;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;19682:541:0;;::::1;-1:-1:-1::0;;;;;19682:541:0;;::::1;;::::0;;;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;20248:15;;20269:10;;-1:-1:-1;20248:17:0::1;::::0;::::1;:::i;:::-;20238:28;;;;;;;;;;;:41;;;;20327:12;20294:11;:30;20322:1;20306:8;:15;;;;:17;;;;:::i;:::-;20294:30:::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20294:30:0;:45;-1:-1:-1;;;;;;;;;19481:866:0:o;20355:744::-;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10296:10;11019:23;11011:68;;;;-1:-1:-1;;;11011:68:0;;;;;;;:::i;:::-;20570:521:::1;;;;;;;;20613:7;-1:-1:-1::0;;;;;20570:521:0::1;;;;;20655:7;-1:-1:-1::0;;;;;20570:521:0::1;;;;;20695:1;20570:521;;;;20722:6;20570:521;;;;20758:11;20570:521;;;;20804:1;20570:521;;;;20846:1;20570:521;;;;20878:5;20570:521;;;;20909:18;20920:6;;20909;:10;;:18;;;;:::i;:::-;20570:521;;;;20953:6;20570:521;;;;20989:11;20570:521;;;;21031:1;20570:521;;;;21073:2;21065:5;:10;;;;:::i;:::-;20570:521;;::::0;20549:8:::1;20558;20549:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;:542;;:18:::1;::::0;;::::1;;:542:::0;;-1:-1:-1;;;;;20549:542:0;;::::1;-1:-1:-1::0;;;;;;20549:542:0;;::::1;;::::0;;;;::::1;::::0;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;;;;;20355:744:0:o;17706:35::-;;;;;;;;;;;;;;;-1:-1:-1;17706:35:0;:::o;31124:178::-;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10296:10;11019:23;11011:68;;;;-1:-1:-1;;;11011:68:0;;;;;;;:::i;:::-;31202:11:::1;::::0;31195:44:::1;::::0;-1:-1:-1;;;31195:44:0;;31233:4:::1;31195:44;::::0;::::1;4564:51:1::0;31182:10:0::1;::::0;-1:-1:-1;;;;;31202:11:0::1;::::0;31195:29:::1;::::0;4537:18:1;;31195:44:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31257:11;::::0;31250:44:::1;::::0;-1:-1:-1;;;31250:44:0;;-1:-1:-1;;;;;5198:32:1;;;31250:44:0::1;::::0;::::1;5180:51:1::0;5247:18;;;5240:34;;;31182:57:0;;-1:-1:-1;31257:11:0;::::1;::::0;31250:28:::1;::::0;5153:18:1;;31250:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31171:131;31124:178:::0;:::o;11105:148::-;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10296:10;11019:23;11011:68;;;;-1:-1:-1;;;11011:68:0;;;;;;;:::i;:::-;11212:1:::1;11196:6:::0;;11175:40:::1;::::0;-1:-1:-1;;;;;11196:6:0;;::::1;::::0;11175:40:::1;::::0;11212:1;;11175:40:::1;11243:1;11226:19:::0;;-1:-1:-1;;;;;;11226:19:0::1;::::0;;11105:148::o;23089:770::-;23154:8;23163:10;19045:24;19060:8;19045:14;:24::i;:::-;19003:8;19012;19003:18;;;;;;;;:::i;:::-;;;;;;;;;;;:39;;:66;;;;19116:34;19141:8;19116:24;:34::i;:::-;19080:8;19089;19080:18;;;;;;;;:::i;:::-;;;;;;;;;:33;:18;;;;;:33;:70;-1:-1:-1;;;;;19165:21:0;;;19161:229;;19244:24;19251:8;19260:7;19244:6;:24::i;:::-;19203:21;;;;:11;:21;;;;;;;;-1:-1:-1;;;;;19203:30:0;;;;;;;;;:38;;:65;19339:8;:18;;19215:8;;19339:18;;;;;;:::i;:::-;;;;;;;;;;;;;;:39;;;19283:21;;;;;;;;;;-1:-1:-1;;;;;19283:30:0;;;;;;;;;;:53;;:95;19161:229;23186:8:::1;27867;27876;27867:18;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;;27848:15;:50;27844:450;;27919:8;27928;27919:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;;27952:1;27919:34;27915:166;;28006:59;28061:3;28006:50;28046:9;;28040:3;:15;;;;:::i;28006:59::-;27974:8;27983;27974:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;:91;;;;27915:166;28095:8;28104;28095:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;:29:::1;:18;::::0;;::::1;;:29;:31:::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;28175:45;28211:8;;28175;28184;28175:18;;;;;;;;:::i;:45::-;28141:8;28150;28141:18;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;:79;;;;-1:-1:-1::0;;;;;;;;;;;28252:8:0::1;28261;28252:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;;28240:42;;;;13714:25:1::0;;13702:2;13687:18;;13568:177;28240:42:0::1;;;;;;;;27844:450;28392:19:::2;::::0;;;:9:::2;:19;::::0;;;;;23207:8;;28374:15:::2;:37;28366:59;;;;-1:-1:-1::0;;;28366:59:0::2;;;;;;;:::i;:::-;23245:1:::3;23236:6;:10;23228:37;;;::::0;-1:-1:-1;;;23228:37:0;;8630:2:1;23228:37:0::3;::::0;::::3;8612:21:1::0;8669:2;8649:18;;;8642:30;-1:-1:-1;;;8688:18:1;;;8681:44;8742:18;;23228:37:0::3;8428:338:1::0;23228:37:0::3;23276:75;23319:10;23338:4;23344:6;23276:8;23285;23276:18;;;;;;;;:::i;:::-;;::::0;;;::::3;::::0;;;::::3;::::0;;::::3;;:25:::0;-1:-1:-1;;;;;23276:25:0::3;::::0;:75;;:42:::3;:75::i;:::-;23411:1;-1:-1:-1::0;;;;;23365:48:0::3;23373:8;23382;23373:18;;;;;;;;:::i;:::-;;::::0;;;::::3;::::0;;;:25:::3;:18;::::0;;::::3;;:25;::::0;-1:-1:-1;;;;;23373:25:0::3;23365:48;23362:167;;23415:114;23458:10;23477:4;23483:45;23503:8;23512;23503:18;;;;;;;;:::i;:::-;;;;;;;;;;;:24;;;23483:15;23494:3;23483:6;:10;;:15;;;;:::i;:45::-;23415:8;23424;23415:18;;;;;;;;:::i;:::-;;::::0;;;::::3;::::0;;;:25:::3;:18;::::0;;::::3;;:25;::::0;-1:-1:-1;;;;;23415:25:0::3;::::0;:114;;:42:::3;:114::i;:::-;23594:21;::::0;;;:11:::3;:21;::::0;;;;;;;23616:10:::3;23594:33:::0;;;;;;;:41;:53:::3;::::0;23640:6;23594:45:::3;:53::i;:::-;23550:21;::::0;;;:11:::3;:21;::::0;;;;;;;23572:10:::3;23550:33:::0;;;;;;;:97;23691:8:::3;:18:::0;;:42:::3;::::0;23726:6;;23562:8;;23691:18;::::3;;;;;:::i;:::-;;;;;;;;;;;:30;;;:34;;:42;;;;:::i;:::-;23658:8;23667;23658:18;;;;;;;;:::i;:::-;;::::0;;;::::3;::::0;;;::::3;::::0;;::::3;;:30;;:75:::0;;;;23746:21;;;;;;;;;23768:10:::3;23746:33:::0;;;;;;;;;;23792:15:::3;23746:43;::::0;;::::3;:61:::0;23825:26;13714:25:1;;;23768:10:0;;23825:26:::3;::::0;13687:18:1;23825:26:0::3;;;;;;;28304:1:::2;19400::::1;23089:770:::0;;;;:::o;25240:147::-;25307:21;;;;:11;:21;;;;;;;;25329:10;25307:33;;;;;;;:41;25289:60;;25298:8;;25289;:60::i;:::-;25360:19;25370:8;25360:9;:19::i;:::-;25240:147;:::o;22216:533::-;22276:7;22300:8;22309;22300:18;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;;22334:1;22300:35;22296:114;;;22359:8;22368;22359:18;;;;;;;;:::i;:::-;;;;;;;;;;;:39;;;22352:46;;22216:533;;;:::o;22296:114::-;22436:305;22494:236;22699:8;22708;22699:18;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;;22494:186;22673:6;;22494:160;22649:4;22494:136;22600:8;22609;22600:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;;22494:87;22547:8;22556;22547:18;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;;22494:34;22519:8;22494:24;:34::i;:::-;:52;;:87::i;:236::-;22436:8;22445;22436:18;;;;;;;;:::i;:::-;;;;;;;;;;;:39;;;:43;;:305;;;;:::i;28690:118::-;28748:4;28771:8;28780;28771:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;;28764:36;;28690:118;;;:::o;26323:802::-;26436:8;:15;26385:13;;;;26427:24;;26424:64;;;26462:8;:15;:26;;26482:5;26462:19;:26::i;:::-;26453:35;;26424:64;26499:25;26538:6;26527:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26527:18:0;;26499:46;;26556:20;26590:6;26579:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26579:18:0;-1:-1:-1;26556:41:0;-1:-1:-1;26608:13:0;;26632:448;26647:6;26645:1;:8;26632:448;;;26684:12;:5;26694:1;26684:9;:12::i;:::-;26673:23;;26711:15;26729:8;26738;26729:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;;26711:47;;26795:8;26804;26795:18;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;;26776:15;:50;;:87;;;;;26862:1;26830:8;26839;26830:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;;:33;26776:87;26773:197;;;26896:58;26950:3;26896:49;26935:9;;26929:3;:15;;;;:::i;:::-;26896:8;26905;26896:18;;;;;;;;:::i;:58::-;26883:71;;26773:197;27001:10;26984:11;26996:1;26984:14;;;;;;;;:::i;:::-;;;;;;:27;;;;;27038:8;27047;27038:18;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;;27026:6;27033:1;27026:9;;;;;;;;:::i;:::-;;;;;;;;;;:42;-1:-1:-1;26654:3:0;;;;:::i;:::-;;;;26632:448;;;-1:-1:-1;27098:11:0;;27110:6;;-1:-1:-1;26323:802:0;-1:-1:-1;;;;26323:802:0:o;30552:85::-;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10296:10;11019:23;11011:68;;;;-1:-1:-1;;;11011:68:0;;;;;;;:::i;:::-;30614:8:::1;:15:::0;30552:85::o;27277:514::-;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10296:10;11019:23;11011:68;;;;-1:-1:-1;;;11011:68:0;;;;;;;:::i;:::-;27357:8:::1;27366;27357:18;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;;27338:15;:50;27334:450;;27409:8;27418;27409:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;;27442:1;27409:34;27405:166;;27496:59;27551:3;27496:50;27536:9;;27530:3;:15;;;;:::i;27496:59::-;27464:8;27473;27464:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;:91;;;;27405:166;27585:8;27594;27585:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;:29:::1;:18;::::0;;::::1;;:29;:31:::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;27665:45;27701:8;;27665;27674;27665:18;;;;;;;;:::i;:45::-;27631:8;27640;27631:18;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;:79;;;;-1:-1:-1::0;;;;;;;;;;;27742:8:0::1;27751;27742:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;;27730:42;;;;13714:25:1::0;;13702:2;13687:18;;13568:177;27730:42:0::1;;;;;;;;27277:514:::0;:::o;30888:114::-;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10296:10;11019:23;11011:68;;;;-1:-1:-1;;;11011:68:0;;;;;;;:::i;:::-;30988:6:::1;30967:8;30976;30967:18;;;;;;;:::i;:::-;;:27:::0;-1:-1:-1;;30888:114:0:o;21107:206::-;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10296:10;11019:23;11011:68;;;;-1:-1:-1;;;11011:68:0;;;;;;;:::i;:::-;21243:7:::1;21208:8;21217;21208:18;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;:43;;;;;-1:-1:-1::0;;;;;21208:43:0::1;;;;;-1:-1:-1::0;;;;;21208:43:0::1;;;;;;21297:7;21262:8;21271;21262:18;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;:43;;;;;-1:-1:-1::0;;;;;21262:43:0::1;;;;;-1:-1:-1::0;;;;;21262:43:0::1;;;;;;21107:206:::0;;;:::o;29493:475::-;29561:4;29580:21;;;:11;:21;;;;;;;;-1:-1:-1;;;;;29580:27:0;;;;;;;;;:35;29577:53;;-1:-1:-1;29629:1:0;29622:8;;29577:53;29641:16;29726:5;;29700:8;29709;29700:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:24;;;29660:21;;;;;;;;;;-1:-1:-1;;;;;29660:27:0;;;;;;;;;;:37;;;:64;;29700:24;29660:64;:::i;:::-;:71;;;;:::i;:::-;29641:90;;29742:104;29759:15;29748:8;:26;29742:104;;;29810:8;29819;29810:18;;;;;;;;:::i;:::-;;;;;;;;;;;:24;;;29799:8;:35;;;;:::i;:::-;29788:46;;29742:104;;;29888:5;;29859:26;29870:15;29859:8;:26;:::i;:::-;:34;29856:104;;;29902:1;29895:8;;;;;29856:104;29955:5;;29926:26;29937:15;29926:8;:26;:::i;:::-;:34;;;;:::i;:::-;29919:41;;;;;30645:112;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10296:10;11019:23;11011:68;;;;-1:-1:-1;;;11011:68:0;;;;;;;:::i;:::-;30723:19:::1;::::0;;;:9:::1;:19;::::0;;;;;:26;30645:112::o;22757:324::-;22826:7;23034:21;;;:11;:21;;;;;;;;-1:-1:-1;;;;;23034:30:0;;;;;;;;;:38;;;;22944:53;;;;;22862:211;;23034:38;22862:157;;23014:4;;22862:137;;22915:83;;:24;23034:21;22915:14;:24::i;:83::-;22862:21;;;;:11;:21;;;;;;;;-1:-1:-1;;;;;22862:30:0;;;;;;;;;:38;;:52;:137::i;:157::-;:171;;:211::i;:::-;22846:227;22757:324;-1:-1:-1;;;22757:324:0:o;21321:190::-;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10296:10;11019:23;11011:68;;;;-1:-1:-1;;;11011:68:0;;;;;;;:::i;:::-;21447:6:::1;21420:8;21429;21420:18;;;;;;;;:::i;:::-;;;;;;;;;;;:24;;:33;;;;21496:7;21464:8;21473;21464:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;:39;;;;21321:190:::0;;;:::o;21828:380::-;21898:7;21939:21;;;:11;:21;;;;;;21921:15;:39;21918:72;;;-1:-1:-1;21969:21:0;;;;:11;:21;;;;;;;21828:380::o;21918:72::-;22004:8;22013;22004:18;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;;22037:1;22004:34;22001:199;;;22047:72;22056:15;22073:45;22109:8;;22073;22082;22073:18;;;;;;;;:::i;:45::-;22047:8;:72::i;22001:199::-;22142:58;22151:15;22168:8;22177;22168:18;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;;22142:8;:58::i;22001:199::-;21828:380;;;:::o;11259:244::-;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10296:10;11019:23;11011:68;;;;-1:-1:-1;;;11011:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11348:22:0;::::1;11340:73;;;::::0;-1:-1:-1;;;11340:73:0;;8223:2:1;11340:73:0::1;::::0;::::1;8205:21:1::0;8262:2;8242:18;;;8235:30;8301:34;8281:18;;;8274:62;-1:-1:-1;;;8352:18:1;;;8345:36;8398:19;;11340:73:0::1;8021:402:1::0;11340:73:0::1;11450:6;::::0;;11429:38:::1;::::0;-1:-1:-1;;;;;11429:38:0;;::::1;::::0;11450:6;::::1;::::0;11429:38:::1;::::0;::::1;11478:6;:17:::0;;-1:-1:-1;;;;;;11478:17:0::1;-1:-1:-1::0;;;;;11478:17:0;;;::::1;::::0;;;::::1;::::0;;11259:244::o;21703:117::-;10932:7;10959:6;-1:-1:-1;;;;;10959:6:0;10296:10;11019:23;11011:68;;;;-1:-1:-1;;;11011:68:0;;;;;;;:::i;:::-;21806:6:::1;21779:8;21788;21779:18;;;;;;;;:::i;:::-;;;;;;;;;;;:24;;:33;;;;21703:117:::0;;:::o;4832:179::-;4890:7;;4922:5;4926:1;4922;:5;:::i;:::-;4910:17;;4951:1;4946;:6;;4938:46;;;;-1:-1:-1;;;4938:46:0;;8973:2:1;4938:46:0;;;8955:21:1;9012:2;8992:18;;;8985:30;9051:29;9031:18;;;9024:57;9098:18;;4938:46:0;8771:351:1;5711:220:0;5769:7;5793:6;5789:20;;-1:-1:-1;5808:1:0;5801:8;;5789:20;5820:9;5832:5;5836:1;5832;:5;:::i;:::-;5820:17;-1:-1:-1;5865:1:0;5856:5;5860:1;5820:17;5856:5;:::i;:::-;:10;5848:56;;;;-1:-1:-1;;;5848:56:0;;11836:2:1;5848:56:0;;;11818:21:1;11875:2;11855:18;;;11848:30;11914:34;11894:18;;;11887:62;-1:-1:-1;;;11965:18:1;;;11958:31;12006:19;;5848:56:0;11634:397:1;6409:153:0;6467:7;6499:1;6495;:5;6487:44;;;;-1:-1:-1;;;6487:44:0;;10440:2:1;6487:44:0;;;10422:21:1;10479:2;10459:18;;;10452:30;10518:28;10498:18;;;10491:56;10564:18;;6487:44:0;10238:350:1;6487:44:0;6549:5;6553:1;6549;:5;:::i;5294:158::-;5352:7;5385:1;5380;:6;;5372:49;;;;-1:-1:-1;;;5372:49:0;;9674:2:1;5372:49:0;;;9656:21:1;9713:2;9693:18;;;9686:30;9752:32;9732:18;;;9725:60;9802:18;;5372:49:0;9472:354:1;5372:49:0;5439:5;5443:1;5439;:5;:::i;14880:177::-;14990:58;;-1:-1:-1;;;;;5198:32:1;;14990:58:0;;;5180:51:1;5247:18;;;5240:34;;;14963:86:0;;14983:5;;-1:-1:-1;;;15013:23:0;5153:18:1;;14990:58:0;;;;-1:-1:-1;;14990:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;14990:58:0;-1:-1:-1;;;;;;14990:58:0;;;;;;;;;;14963:19;:86::i;15063:205::-;15191:68;;-1:-1:-1;;;;;4884:15:1;;;15191:68:0;;;4866:34:1;4936:15;;4916:18;;;4909:43;4968:18;;;4961:34;;;15164:96:0;;15184:5;;-1:-1:-1;;;15214:27:0;4801:18:1;;15191:68:0;4626:375:1;15164:96:0;15063:205;;;;:::o;16732:106::-;16790:7;16821:1;16817;:5;:13;;16829:1;16817:13;;;-1:-1:-1;16825:1:0;;16732:106;-1:-1:-1;16732:106:0:o;16257:333::-;16338:23;16364:69;16392:4;16364:69;;;;;;;;;;;;;;;;;16372:5;-1:-1:-1;;;;;16364:27:0;;;:69;;;;;:::i;:::-;16448:17;;16338:95;;-1:-1:-1;16448:21:0;16444:139;;16505:10;16494:30;;;;;;;;;;;;:::i;:::-;16486:85;;;;-1:-1:-1;;;16486:85:0;;13359:2:1;16486:85:0;;;13341:21:1;13398:2;13378:18;;;13371:30;13437:34;13417:18;;;13410:62;-1:-1:-1;;;13488:18:1;;;13481:40;13538:19;;16486:85:0;13157:406:1;12215:195:0;12318:12;12350:52;12372:6;12380:4;12386:1;12389:12;12350:21;:52::i;:::-;12343:59;12215:195;-1:-1:-1;;;;12215:195:0:o;12648:468::-;12775:12;12833:5;12808:21;:30;;12800:81;;;;-1:-1:-1;;;12800:81:0;;10033:2:1;12800:81:0;;;10015:21:1;10072:2;10052:18;;;10045:30;10111:34;10091:18;;;10084:62;-1:-1:-1;;;10162:18:1;;;10155:36;10208:19;;12800:81:0;9831:402:1;12800:81:0;11652:20;;12892:60;;;;-1:-1:-1;;;12892:60:0;;13001:2:1;12892:60:0;;;12983:21:1;13040:2;13020:18;;;13013:30;13079:31;13059:18;;;13052:59;13128:18;;12892:60:0;12799:353:1;12892:60:0;12964:12;12978:23;13005:6;-1:-1:-1;;;;;13005:11:0;13025:5;13033:4;13005:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12963:75;;;;13056:52;13074:7;13083:10;13095:12;13056:17;:52::i;:::-;13049:59;12648:468;-1:-1:-1;;;;;;;12648:468:0:o;14266:515::-;14381:12;14410:7;14406:368;;;-1:-1:-1;14441:10:0;14434:17;;14406:368;14488:17;;:21;14484:279;;14591:10;14585:17;14652:15;14639:10;14635:2;14631:19;14624:44;14484:279;14734:12;14727:20;;-1:-1:-1;;;14727:20:0;;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;192:186;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:742::-;514:6;522;530;538;546;554;562;570;578;631:3;619:9;610:7;606:23;602:33;599:53;;;648:1;645;638:12;599:53;671:29;690:9;671:29;:::i;:::-;661:39;;719:38;753:2;742:9;738:18;719:38;:::i;:::-;383:742;;709:48;;-1:-1:-1;;;;804:2:1;789:18;;776:32;;855:2;840:18;;827:32;;906:3;891:19;;878:33;;-1:-1:-1;958:3:1;943:19;;930:33;;-1:-1:-1;1010:3:1;995:19;;982:33;;-1:-1:-1;1062:3:1;1047:19;;1034:33;;-1:-1:-1;1114:3:1;1099:19;;;1086:33;;-1:-1:-1;383:742:1:o;1130:277::-;1197:6;1250:2;1238:9;1229:7;1225:23;1221:32;1218:52;;;1266:1;1263;1256:12;1218:52;1298:9;1292:16;1351:5;1344:13;1337:21;1330:5;1327:32;1317:60;;1373:1;1370;1363:12;1412:180;1471:6;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;-1:-1:-1;1563:23:1;;1412:180;-1:-1:-1;1412:180:1:o;1597:184::-;1667:6;1720:2;1708:9;1699:7;1695:23;1691:32;1688:52;;;1736:1;1733;1726:12;1688:52;-1:-1:-1;1759:16:1;;1597:184;-1:-1:-1;1597:184:1:o;1786:254::-;1854:6;1862;1915:2;1903:9;1894:7;1890:23;1886:32;1883:52;;;1931:1;1928;1921:12;1883:52;1967:9;1954:23;1944:33;;1996:38;2030:2;2019:9;2015:18;1996:38;:::i;:::-;1986:48;;1786:254;;;;;:::o;2045:328::-;2122:6;2130;2138;2191:2;2179:9;2170:7;2166:23;2162:32;2159:52;;;2207:1;2204;2197:12;2159:52;2243:9;2230:23;2220:33;;2272:38;2306:2;2295:9;2291:18;2272:38;:::i;:::-;2262:48;;2329:38;2363:2;2352:9;2348:18;2329:38;:::i;:::-;2319:48;;2045:328;;;;;:::o;2378:742::-;2509:6;2517;2525;2533;2541;2549;2557;2565;2573;2626:3;2614:9;2605:7;2601:23;2597:33;2594:53;;;2643:1;2640;2633:12;2594:53;2679:9;2666:23;2656:33;;2708:38;2742:2;2731:9;2727:18;2708:38;:::i;:::-;2698:48;;2765:38;2799:2;2788:9;2784:18;2765:38;:::i;:::-;2378:742;;;;-1:-1:-1;2755:48:1;;2850:2;2835:18;;2822:32;;-1:-1:-1;2901:3:1;2886:19;;2873:33;;2953:3;2938:19;;2925:33;;-1:-1:-1;3005:3:1;2990:19;;2977:33;;-1:-1:-1;3057:3:1;3042:19;;3029:33;;-1:-1:-1;3109:3:1;3094:19;;;3081:33;;-1:-1:-1;2378:742:1;-1:-1:-1;;2378:742:1:o;3125:248::-;3193:6;3201;3254:2;3242:9;3233:7;3229:23;3225:32;3222:52;;;3270:1;3267;3260:12;3222:52;-1:-1:-1;;3293:23:1;;;3363:2;3348:18;;;3335:32;;-1:-1:-1;3125:248:1:o;3378:316::-;3455:6;3463;3471;3524:2;3512:9;3503:7;3499:23;3495:32;3492:52;;;3540:1;3537;3530:12;3492:52;-1:-1:-1;;3563:23:1;;;3633:2;3618:18;;3605:32;;-1:-1:-1;3684:2:1;3669:18;;;3656:32;;3378:316;-1:-1:-1;3378:316:1:o;3699:435::-;3752:3;3790:5;3784:12;3817:6;3812:3;3805:19;3843:4;3872:2;3867:3;3863:12;3856:19;;3909:2;3902:5;3898:14;3930:1;3940:169;3954:6;3951:1;3948:13;3940:169;;;4015:13;;4003:26;;4049:12;;;;4084:15;;;;3976:1;3969:9;3940:169;;;-1:-1:-1;4125:3:1;;3699:435;-1:-1:-1;;;;;3699:435:1:o;4139:274::-;4268:3;4306:6;4300:13;4322:53;4368:6;4363:3;4356:4;4348:6;4344:17;4322:53;:::i;:::-;4391:16;;;;;4139:274;-1:-1:-1;;4139:274:1:o;5285:465::-;5542:2;5531:9;5524:21;5505:4;5568:56;5620:2;5609:9;5605:18;5597:6;5568:56;:::i;:::-;5672:9;5664:6;5660:22;5655:2;5644:9;5640:18;5633:50;5700:44;5737:6;5729;5700:44;:::i;:::-;5692:52;5285:465;-1:-1:-1;;;;;5285:465:1:o;7296:383::-;7445:2;7434:9;7427:21;7408:4;7477:6;7471:13;7520:6;7515:2;7504:9;7500:18;7493:34;7536:66;7595:6;7590:2;7579:9;7575:18;7570:2;7562:6;7558:15;7536:66;:::i;:::-;7663:2;7642:15;-1:-1:-1;;7638:29:1;7623:45;;;;7670:2;7619:54;;7296:383;-1:-1:-1;;7296:383:1:o;7684:332::-;7886:2;7868:21;;;7925:1;7905:18;;;7898:29;-1:-1:-1;;;7958:2:1;7943:18;;7936:39;8007:2;7992:18;;7684:332::o;12036:356::-;12238:2;12220:21;;;12257:18;;;12250:30;12316:34;12311:2;12296:18;;12289:62;12383:2;12368:18;;12036:356::o;14218:128::-;14258:3;14289:1;14285:6;14282:1;14279:13;14276:39;;;14295:18;;:::i;:::-;-1:-1:-1;14331:9:1;;14218:128::o;14351:217::-;14391:1;14417;14407:132;;14461:10;14456:3;14452:20;14449:1;14442:31;14496:4;14493:1;14486:15;14524:4;14521:1;14514:15;14407:132;-1:-1:-1;14553:9:1;;14351:217::o;14573:168::-;14613:7;14679:1;14675;14671:6;14667:14;14664:1;14661:21;14656:1;14649:9;14642:17;14638:45;14635:71;;;14686:18;;:::i;:::-;-1:-1:-1;14726:9:1;;14573:168::o;14746:125::-;14786:4;14814:1;14811;14808:8;14805:34;;;14819:18;;:::i;:::-;-1:-1:-1;14856:9:1;;14746:125::o;14876:258::-;14948:1;14958:113;14972:6;14969:1;14966:13;14958:113;;;15048:11;;;15042:18;15029:11;;;15022:39;14994:2;14987:10;14958:113;;;15089:6;15086:1;15083:13;15080:48;;;-1:-1:-1;;15124:1:1;15106:16;;15099:27;14876:258::o;15139:135::-;15178:3;-1:-1:-1;;15199:17:1;;15196:43;;;15219:18;;:::i;:::-;-1:-1:-1;15266:1:1;15255:13;;15139:135::o;15279:127::-;15340:10;15335:3;15331:20;15328:1;15321:31;15371:4;15368:1;15361:15;15395:4;15392:1;15385:15;15411:127;15472:10;15467:3;15463:20;15460:1;15453:31;15503:4;15500:1;15493:15;15527:4;15524:1;15517:15;15543:127;15604:10;15599:3;15595:20;15592:1;15585:31;15635:4;15632:1;15625:15;15659:4;15656:1;15649:15

Swarm Source

ipfs://a4e17879ab2be22ff406c96377e9a0bb662ceff596809425b119d3f26c19d195
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading