ETH Price: $3,489.83 (+0.05%)
Gas: 2 Gwei

Contract

0x5BbD5e34AA9Fc175Cea5f2cc6E13d28567CDfe6D
 

Overview

ETH Balance

0.030269180154740043 ETH

Eth Value

$105.63 (@ $3,489.83/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Unstake187232322023-12-05 22:50:11228 days ago1701816611IN
0x5BbD5e34...567CDfe6D
0 ETH0.0177085753.55927794
Unstake185393512023-11-10 5:06:59254 days ago1699592819IN
0x5BbD5e34...567CDfe6D
0 ETH0.0114007434.48261287
Get Reward185393482023-11-10 5:06:23254 days ago1699592783IN
0x5BbD5e34...567CDfe6D
0 ETH0.0117900435.730648
Unstake185393362023-11-10 5:03:59254 days ago1699592639IN
0x5BbD5e34...567CDfe6D
0 ETH0.0108833532.91892763
Get Reward185393322023-11-10 5:03:11254 days ago1699592591IN
0x5BbD5e34...567CDfe6D
0 ETH0.0113293434.33447143
Unstake185393202023-11-10 5:00:47254 days ago1699592447IN
0x5BbD5e34...567CDfe6D
0 ETH0.0120679634.23313281
Unstake185393112023-11-10 4:58:59254 days ago1699592339IN
0x5BbD5e34...567CDfe6D
0 ETH0.0111180133.62747745
Get Reward185393012023-11-10 4:56:59254 days ago1699592219IN
0x5BbD5e34...567CDfe6D
0 ETH0.0116938835.43923979
Unstake185392872023-11-10 4:54:11254 days ago1699592051IN
0x5BbD5e34...567CDfe6D
0 ETH0.0096058229.05370073
Get Reward185392822023-11-10 4:53:11254 days ago1699591991IN
0x5BbD5e34...567CDfe6D
0 ETH0.0092978128.17775881
Unstake185392762023-11-10 4:51:59254 days ago1699591919IN
0x5BbD5e34...567CDfe6D
0 ETH0.0101985930.84658773
Get Reward185392732023-11-10 4:51:23254 days ago1699591883IN
0x5BbD5e34...567CDfe6D
0 ETH0.0098881429.96679493
Unstake185363722023-11-09 19:07:11254 days ago1699556831IN
0x5BbD5e34...567CDfe6D
0 ETH0.0172186652.07945637
Get Reward185363682023-11-09 19:06:23254 days ago1699556783IN
0x5BbD5e34...567CDfe6D
0 ETH0.0185379456.18069945
Get Reward185157872023-11-06 22:02:47257 days ago1699308167IN
0x5BbD5e34...567CDfe6D
0 ETH0.0024015644.23424362
Unstake184867262023-11-02 20:18:59261 days ago1698956339IN
0x5BbD5e34...567CDfe6D
0 ETH0.010759532.73720454
Get Reward184867222023-11-02 20:18:11261 days ago1698956291IN
0x5BbD5e34...567CDfe6D
0 ETH0.010050530.45884638
Unstake184858562023-11-02 17:23:59261 days ago1698945839IN
0x5BbD5e34...567CDfe6D
0 ETH0.0084338525.14305298
Get Reward184858212023-11-02 17:16:59261 days ago1698945419IN
0x5BbD5e34...567CDfe6D
0 ETH0.0073930523.37976265
Get Reward184729872023-10-31 22:08:11263 days ago1698790091IN
0x5BbD5e34...567CDfe6D
0 ETH0.0012234122.53403863
Get Reward184699252023-10-31 11:51:23263 days ago1698753083IN
0x5BbD5e34...567CDfe6D
0 ETH0.0006045917.57949838
Get Reward184698762023-10-31 11:41:35263 days ago1698752495IN
0x5BbD5e34...567CDfe6D
0 ETH0.0006786219.73199319
Unstake184698682023-10-31 11:39:59263 days ago1698752399IN
0x5BbD5e34...567CDfe6D
0 ETH0.0075739222.58021011
Get Reward184531612023-10-29 3:27:35266 days ago1698550055IN
0x5BbD5e34...567CDfe6D
0 ETH0.0005620510.35245676
Get Reward184411782023-10-27 11:14:35267 days ago1698405275IN
0x5BbD5e34...567CDfe6D
0 ETH0.0006426118.68510554
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
201751622024-06-26 10:07:3524 days ago1719396455
0x5BbD5e34...567CDfe6D
0.00000318 ETH
201055612024-06-16 16:30:4734 days ago1718555447
0x5BbD5e34...567CDfe6D
0.0000032 ETH
200711572024-06-11 21:05:2339 days ago1718139923
0x5BbD5e34...567CDfe6D
0.00000328 ETH
199675972024-05-28 9:53:5953 days ago1716890039
0x5BbD5e34...567CDfe6D
0.00000349 ETH
199284852024-05-22 22:44:4759 days ago1716417887
0x5BbD5e34...567CDfe6D
0.00000352 ETH
198942322024-05-18 3:43:3564 days ago1716003815
0x5BbD5e34...567CDfe6D
0.00000353 ETH
198216672024-05-08 0:08:4774 days ago1715126927
0x5BbD5e34...567CDfe6D
0.00000353 ETH
195956182024-04-06 8:53:23106 days ago1712393603
0x5BbD5e34...567CDfe6D
0.00000358 ETH
195839122024-04-04 17:33:59107 days ago1712252039
0x5BbD5e34...567CDfe6D
0.00000363 ETH
195700742024-04-02 19:06:11109 days ago1712084771
0x5BbD5e34...567CDfe6D
0.00000363 ETH
194822082024-03-21 9:40:35121 days ago1711014035
0x5BbD5e34...567CDfe6D
0.00000377 ETH
193490752024-03-02 17:48:23140 days ago1709401703
0x5BbD5e34...567CDfe6D
0.00000387 ETH
193190742024-02-27 13:05:35144 days ago1709039135
0x5BbD5e34...567CDfe6D
0.00000402 ETH
192850852024-02-22 18:59:35149 days ago1708628375
0x5BbD5e34...567CDfe6D
0.000004 ETH
192850802024-02-22 18:58:35149 days ago1708628315
0x5BbD5e34...567CDfe6D
0.000004 ETH
192671292024-02-20 6:27:23152 days ago1708410443
0x5BbD5e34...567CDfe6D
0.00000428 ETH
192631692024-02-19 17:09:59152 days ago1708362599
0x5BbD5e34...567CDfe6D
0.00000458 ETH
192328462024-02-15 10:51:11156 days ago1707994271
0x5BbD5e34...567CDfe6D
0.00000451 ETH
192249972024-02-14 8:24:11158 days ago1707899051
0x5BbD5e34...567CDfe6D
0.00000465 ETH
192006382024-02-10 22:21:47161 days ago1707603707
0x5BbD5e34...567CDfe6D
0.00000465 ETH
191427242024-02-02 19:14:23169 days ago1706901263
0x5BbD5e34...567CDfe6D
0.00000476 ETH
191197982024-01-30 14:03:11172 days ago1706623391
0x5BbD5e34...567CDfe6D
0.000005 ETH
190404742024-01-19 11:01:35183 days ago1705662095
0x5BbD5e34...567CDfe6D
0.00000505 ETH
189821112024-01-11 7:10:23192 days ago1704957023
0x5BbD5e34...567CDfe6D
0.00000516 ETH
189724962024-01-09 22:51:35193 days ago1704840695
0x5BbD5e34...567CDfe6D
0.00000548 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StakeFixedAPYDuration

Compiler Version
v0.8.8+commit.dddeac2f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-22
*/

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


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool);
}

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


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/utils/math/Math.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)

pragma solidity ^0.8.0;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    enum Rounding {
        Down, // Toward negative infinity
        Up, // Toward infinity
        Zero // Toward zero
    }

    /**
     * @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.
        return (a & b) + (a ^ b) / 2;
    }

    /**
     * @dev Returns the ceiling of the division of two numbers.
     *
     * This differs from standard division with `/` in that it rounds up instead
     * of rounding down.
     */
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a == 0 ? 0 : (a - 1) / b + 1;
    }

    /**
     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0
     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)
     * with further edits by Uniswap Labs also under MIT license.
     */
    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
        unchecked {
            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
            // variables such that product = prod1 * 2^256 + prod0.
            uint256 prod0; // Least significant 256 bits of the product
            uint256 prod1; // Most significant 256 bits of the product
            assembly {
                let mm := mulmod(x, y, not(0))
                prod0 := mul(x, y)
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            // Handle non-overflow cases, 256 by 256 division.
            if (prod1 == 0) {
                // Solidity will revert if denominator == 0, unlike the div opcode on its own.
                // The surrounding unchecked block does not change this fact.
                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.
                return prod0 / denominator;
            }

            // Make sure the result is less than 2^256. Also prevents denominator == 0.
            require(denominator > prod1, "Math: mulDiv overflow");

            ///////////////////////////////////////////////
            // 512 by 256 division.
            ///////////////////////////////////////////////

            // Make division exact by subtracting the remainder from [prod1 prod0].
            uint256 remainder;
            assembly {
                // Compute remainder using mulmod.
                remainder := mulmod(x, y, denominator)

                // Subtract 256 bit number from 512 bit number.
                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }

            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
            // See https://cs.stackexchange.com/q/138556/92363.

            // Does not overflow because the denominator cannot be zero at this stage in the function.
            uint256 twos = denominator & (~denominator + 1);
            assembly {
                // Divide denominator by twos.
                denominator := div(denominator, twos)

                // Divide [prod1 prod0] by twos.
                prod0 := div(prod0, twos)

                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
                twos := add(div(sub(0, twos), twos), 1)
            }

            // Shift in bits from prod1 into prod0.
            prod0 |= prod1 * twos;

            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
            // four bits. That is, denominator * inv = 1 mod 2^4.
            uint256 inverse = (3 * denominator) ^ 2;

            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works
            // in modular arithmetic, doubling the correct bits in each step.
            inverse *= 2 - denominator * inverse; // inverse mod 2^8
            inverse *= 2 - denominator * inverse; // inverse mod 2^16
            inverse *= 2 - denominator * inverse; // inverse mod 2^32
            inverse *= 2 - denominator * inverse; // inverse mod 2^64
            inverse *= 2 - denominator * inverse; // inverse mod 2^128
            inverse *= 2 - denominator * inverse; // inverse mod 2^256

            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
            // is no longer required.
            result = prod0 * inverse;
            return result;
        }
    }

    /**
     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
     */
    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }

    /**
     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.
     *
     * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
     */
    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
        //
        // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
        //
        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
        //
        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
        uint256 result = 1 << (log2(a) >> 1);

        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
        // into the expected uint128 result.
        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }

    /**
     * @notice Calculates sqrt(a), following the selected rounding direction.
     */
    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = sqrt(a);
            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 2, rounded down, of a positive value.
     * Returns 0 if given 0.
     */
    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 128;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 64;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 32;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 16;
            }
            if (value >> 8 > 0) {
                value >>= 8;
                result += 8;
            }
            if (value >> 4 > 0) {
                value >>= 4;
                result += 4;
            }
            if (value >> 2 > 0) {
                value >>= 2;
                result += 2;
            }
            if (value >> 1 > 0) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log2(value);
            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 10, rounded down, of a positive value.
     * Returns 0 if given 0.
     */
    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10 ** 64) {
                value /= 10 ** 64;
                result += 64;
            }
            if (value >= 10 ** 32) {
                value /= 10 ** 32;
                result += 32;
            }
            if (value >= 10 ** 16) {
                value /= 10 ** 16;
                result += 16;
            }
            if (value >= 10 ** 8) {
                value /= 10 ** 8;
                result += 8;
            }
            if (value >= 10 ** 4) {
                value /= 10 ** 4;
                result += 4;
            }
            if (value >= 10 ** 2) {
                value /= 10 ** 2;
                result += 2;
            }
            if (value >= 10 ** 1) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log10(value);
            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 256, rounded down, of a positive value.
     * Returns 0 if given 0.
     *
     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
     */
    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 16;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 8;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 4;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 2;
            }
            if (value >> 8 > 0) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log256(value);
            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);
        }
    }
}

// File: supermarket/contracts/stake.sol

//SPDX-License-Identifier: MIT
pragma solidity 0.8.8;
pragma experimental ABIEncoderV2;

//import "@openzeppelin/contracts/math/SafeMath.sol";



interface IMarket{
    function claimTrade(uint256 epoch, uint256 amt,uint256 cp,address claimer,bytes memory signature) payable external;
    function claimMeme(uint256 epoch, uint256 amt,uint256 lp,uint256 cp,bytes memory signature,address cFor) external;
}

contract StakeFixedAPYDuration is Ownable {
    //using SafeMath for uint256;
    //using SafeERC20 for IERC20;
    IERC20 public stakeToken;

    uint256 public duration = 0;
    uint256 public unboundingDuration = 0;
    uint256 private _totalSupply;
    uint256 public taxCollectedFromUnstake = 0;
    uint256 public periodFinish = 0;
    uint256 public constant DENOMINATOR = 10000;
    uint256 public constant SECONDS_IN_YEAR = 365 days;
    uint256 public constant MIN_MAT_PERIOD = 3 days; // set to 3 days.
    uint256 public beforeMaturityUnstakeTaxNumerator = 500;
    uint256 public totalEthReward;
    uint256 private MIN_STAKE = 10000 * 10**18;
    address public rewardDistribution;
    address public trade;
    address public memecoin;



    bool public isStakingStarted = false;

    // Represents a single unstake for a user. A user may have multiple.
    struct Unstake {
        uint256 unstakingAmount;
        uint256 unstakingTime;
    }

    /**
	User Data
	 */
    struct UserData {
        uint256 stakeToken;
        uint256 rewards;
        uint256 lastUpdateTime;
        //uint256 duration;
        uint256 stakingTime;
    }

    mapping(address => UserData) public users;
    // The collection of unstakes for each user.
    mapping(address => Unstake) public userUnstake;

    // Time Duration & APR
    //mapping(uint256 => uint256) public monthlyAPR;
    uint256 private annualAPY;

    event Staked(address indexed user, uint256 amount);
    event Unstaked(address indexed user, uint256 amount);
    event RewardPaid(address indexed user, uint256 reward);
    event RecoverToken(address indexed token, uint256 indexed amount);
    event UnstakeAmountClaimed(address indexed user, uint256 amount);
    event RewardDistributionStarted(uint256 periodFinish);
    event RewardReInvested(address indexed user, uint256 reward);
    event UnstakeTaxCollected(uint256 indexed amount);
    modifier onlyRewardDistributor() {
        require(
            _msgSender() == rewardDistribution,
            "Caller is not reward distribution"
        );
        _;
    }

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

    constructor(
        IERC20 _stakeToken,
        uint256 _duration,
        uint256 _unboundingDuration,
        address s,
        address m

    )  {
       // require(_forwarder != address(0), "Forwarder cannot be empty");
        stakeToken = _stakeToken;
        duration = _duration;
        unboundingDuration = _unboundingDuration;
        //trustedForwarder = _forwarder;
        trade=s;
        memecoin=m;
        annualAPY = 20000;//200% APY
    }

    // function _msgSender()
    //     internal
    //     view
    //     virtual
    //     override(BaseRelayRecipient, Context)
    //     returns (address payable)
    // {
    //     return BaseRelayRecipient._msgSender();
    // }

    function versionRecipient()
        external
        view
        virtual
        returns (string memory)
    {}

    function getUserData(address addr)
        external
        view
        returns (UserData memory user)
    {
        return users[addr];
    }

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

    function earned(address account) public view returns (uint256) {
        uint256 earnedFromStakeCoin = users[account]
            .stakeToken * (lastTimeRewardApplicable()-(users[account].lastUpdateTime)) * (getAnnualAPY());

        return
            (earnedFromStakeCoin)/(DENOMINATOR)/(SECONDS_IN_YEAR)+(
                users[account].rewards
            );
    }

    function stake(uint256 amount)
        external
        updateReward(_msgSender())
    {
        require(isStakingStarted, "Staking is not started yet");
        require(amount > 0, "Cannot stake 0");
        require(block.timestamp<periodFinish,"Staking period over");
        // require(
        //     users[_msgSender()].duration <= months,
        //     "New staking duration must be greater than equal to previous staking duration"
        // );
        _totalSupply += (amount);

        users[_msgSender()].stakeToken = users[_msgSender()].stakeToken+(
            amount
        );
        //users[_msgSender()].duration = months;
        users[_msgSender()].stakingTime = block.timestamp;
        stakeToken.transferFrom(_msgSender(), address(this), amount);
        emit Staked(_msgSender(), amount);
    }

    function unstakeFor(address userAddress, uint256 amount, bool taxFlag)
        external
        onlyRewardDistributor updateReward(userAddress)
    {
        require(amount > 0, "Cannot withdraw 0");
        require(
            users[userAddress].stakeToken >= amount,
            "User does not have sufficient balance"
        );
        users[userAddress].stakeToken = users[userAddress].stakeToken -(
            amount
        );

        if (taxFlag == true) {
            uint256 beforeMaturityUnstakeTax = amount
                * (beforeMaturityUnstakeTaxNumerator)
                /(DENOMINATOR);
            amount -= beforeMaturityUnstakeTax;
            taxCollectedFromUnstake += beforeMaturityUnstakeTax;
        } else {
            require(
                users[userAddress].stakingTime + (
                     (MIN_MAT_PERIOD)
                ) <= block.timestamp,
                "Cannot withdraw before maturity"
            );
        }
        _unstake(userAddress, amount);
    }

    function unstake(uint256 amount)
        public
        updateReward(_msgSender())
    {
        require(amount > 0, "Cannot withdraw 0");
        require(
            users[_msgSender()].stakeToken >= amount,
            "User does not have sufficient balance"
        );
        require(
            users[_msgSender()].stakingTime + (
                 (MIN_MAT_PERIOD)
            ) <= block.timestamp,
            "Cannot withdraw before maturity"
        );
        users[_msgSender()].stakeToken = users[_msgSender()].stakeToken -(
            amount
        );
        _unstake(_msgSender(), amount);
    }

    function setTradeMemeAddress(address t,address m) onlyRewardDistributor public {
        trade = t;
        memecoin=m;
    }

    function _unstake(address userAddress, uint256 amount)
        internal
    {
        uint256 myShare = amount*(DENOMINATOR)/_totalSupply;
        myShare = (totalEthReward*myShare)/(DENOMINATOR);
        totalEthReward=totalEthReward-myShare;
        _totalSupply = _totalSupply -(amount);

        getReward();

        if (unboundingDuration == 0) {
            stakeToken.transfer(userAddress, amount);
            sendETHValue(payable(userAddress), myShare);
            
        } else {
            uint256 unboundingPeriodFinish = block.timestamp + (
                unboundingDuration
            );
            Unstake storage accountUnstake = userUnstake[userAddress];
            accountUnstake.unstakingAmount = (accountUnstake.unstakingAmount)
                +(amount);
            accountUnstake.unstakingTime = unboundingPeriodFinish;
        }

        emit Unstaked(userAddress, amount);
    }

    function reinvest() external {
        _reinvest(_msgSender());
    }

    function reinvestFor(address user) external onlyRewardDistributor {
        _reinvest(user);
    }

    function _reinvest(address user) internal updateReward(user) {
        uint256 reward = users[user].rewards;
        if (reward > 0) {
            users[user].rewards = 0;
            users[user].stakeToken = users[user].stakeToken+(reward);
            _totalSupply = _totalSupply+(reward);
            emit RewardReInvested(user, reward);
        }
    }

    function getAnnualAPY()
        public
        view
        returns (uint256)
    {
        //uint256 months = users[account].duration;
        return annualAPY;
    }

    function claimUnstakedAmount() external {
        Unstake storage accountUnstake = userUnstake[_msgSender()];

        require(
            accountUnstake.unstakingAmount > 0,
            "No unstaked amount to claim"
        );
        require(
            block.timestamp >= accountUnstake.unstakingTime,
            "Unbounding period not finished"
        );

        uint256 _totalUnstakedAmount = accountUnstake.unstakingAmount;

        accountUnstake.unstakingAmount = 0;
        accountUnstake.unstakingTime = 0;

        stakeToken.transfer(_msgSender(), _totalUnstakedAmount);
        emit UnstakeAmountClaimed(_msgSender(), _totalUnstakedAmount);
    }
    //earn by claims
    function earnClaims(address s,uint256 epoch, uint256 amt,uint256 cp,uint256 lp,address claimer,bytes memory signature) external payable {
        require(users[msg.sender].stakeToken > MIN_STAKE ,"Min Eligiblity 10k");
        if(s == memecoin){
        IMarket(s).claimMeme( epoch, amt, lp, cp, signature, claimer); 
        }else if(s == trade){
            IMarket(s).claimTrade(epoch,amt,cp,claimer,signature);
        }
        return;
    }

    function totalUnstakedAmountReadyToClaim(address user)
        external
        view
        returns (uint256)
    {
        if (block.timestamp >= userUnstake[user].unstakingTime) {
            return userUnstake[user].unstakingAmount;
        }
        return 0;
    }

    function totalUnstakedAmount(address user) external view returns (uint256) {
        return userUnstake[user].unstakingAmount;
    }

    function getUnboundingTime(address user) external view returns (uint256) {
        return userUnstake[user].unstakingTime;
    }

    function exit() external {
        unstake(users[_msgSender()].stakeToken);
        getReward();
    }

    function getReward() public updateReward(_msgSender()) {
        uint256 reward = users[_msgSender()].rewards;
        if (reward > 0) {
            users[_msgSender()].rewards = 0;
            stakeToken.transfer(_msgSender(), reward);
            emit RewardPaid(_msgSender(), reward);
        }
    }
    //Start Staking
    function notifyRewardDistribution()
        external
        onlyRewardDistributor
        updateReward(address(0))
    {
        require(!isStakingStarted, "Staking is already started");
        isStakingStarted = true;
        periodFinish = block.timestamp+(duration);
        emit RewardDistributionStarted(periodFinish);
    }

    function setAPY( uint256 apr)
        external
        onlyRewardDistributor
    {
        require(apr > 0, "month can not be 0");
        annualAPY = apr;
    }

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

    function setDuration(uint256 _duration) external onlyRewardDistributor {
        duration = _duration;
        periodFinish = block.timestamp+(duration);
    }

    function setUnboundingDuration(uint256 _unboundingDuration)
        external
        onlyRewardDistributor
    {
        unboundingDuration = _unboundingDuration;
    }

    function setBeforeMaturityUnstakeTaxNumerator(
        uint256 _beforeMaturityUnstakeTaxNumerator
    ) external onlyRewardDistributor {
        beforeMaturityUnstakeTaxNumerator = _beforeMaturityUnstakeTaxNumerator;
    }

    function stopRewardDistribution() external onlyRewardDistributor {
        periodFinish = block.timestamp;
    }

    function updateRewardFor(
        address[] memory beneficiary,
        uint256[] memory rewards
    ) external onlyRewardDistributor {
        require(beneficiary.length == rewards.length, "Input length invalid");
        for (uint256 i = 0; i < beneficiary.length; i++) {
            users[beneficiary[i]].rewards = (users[beneficiary[i]].rewards)+(
                rewards[i]
            );
        }
    }

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

    function collectUnstakeTax() external onlyRewardDistributor {
        uint256 tax = taxCollectedFromUnstake;
        taxCollectedFromUnstake = 0;
        IERC20(stakeToken).transfer(_msgSender(), tax);
        emit UnstakeTaxCollected(tax);
    }

    function recoverExcessToken(address token, uint256 amount)
        external
        onlyRewardDistributor
    {
        IERC20(token).transfer(_msgSender(), amount);
        emit RecoverToken(token, amount);
    }
    function sendETHValue(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");
    }
    receive() payable external{
        totalEthReward+=msg.value;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IERC20","name":"_stakeToken","type":"address"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"uint256","name":"_unboundingDuration","type":"uint256"},{"internalType":"address","name":"s","type":"address"},{"internalType":"address","name":"m","type":"address"}],"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":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RecoverToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"periodFinish","type":"uint256"}],"name":"RewardDistributionStarted","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":"reward","type":"uint256"}],"name":"RewardReInvested","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":"UnstakeAmountClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnstakeTaxCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_MAT_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECONDS_IN_YEAR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beforeMaturityUnstakeTaxNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimUnstakedAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collectUnstakeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"s","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"uint256","name":"cp","type":"uint256"},{"internalType":"uint256","name":"lp","type":"uint256"},{"internalType":"address","name":"claimer","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"earnClaims","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAnnualAPY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUnboundingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getUserData","outputs":[{"components":[{"internalType":"uint256","name":"stakeToken","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"},{"internalType":"uint256","name":"lastUpdateTime","type":"uint256"},{"internalType":"uint256","name":"stakingTime","type":"uint256"}],"internalType":"struct StakeFixedAPYDuration.UserData","name":"user","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isStakingStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"memecoin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notifyRewardDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverExcessToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reinvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"reinvestFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardDistribution","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"apr","type":"uint256"}],"name":"setAPY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_beforeMaturityUnstakeTaxNumerator","type":"uint256"}],"name":"setBeforeMaturityUnstakeTaxNumerator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"setDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardDistribution","type":"address"}],"name":"setRewardDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"t","type":"address"},{"internalType":"address","name":"m","type":"address"}],"name":"setTradeMemeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_unboundingDuration","type":"uint256"}],"name":"setUnboundingDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stopRewardDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"taxCollectedFromUnstake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEthReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"totalUnstakedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"totalUnstakedAmountReadyToClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trade","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unboundingDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"taxFlag","type":"bool"}],"name":"unstakeFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"beneficiary","type":"address[]"},{"internalType":"uint256[]","name":"rewards","type":"uint256[]"}],"name":"updateRewardFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userUnstake","outputs":[{"internalType":"uint256","name":"unstakingAmount","type":"uint256"},{"internalType":"uint256","name":"unstakingTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"stakeToken","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"},{"internalType":"uint256","name":"lastUpdateTime","type":"uint256"},{"internalType":"uint256","name":"stakingTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"versionRecipient","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006002556000600355600060055560006006556101f460075569021e19e0c9bab24000006009556000600c60146101000a81548160ff0219169083151502179055503480156200005457600080fd5b5060405162004d0c38038062004d0c83398181016040528101906200007a919062000335565b6200009a6200008e6200017f60201b60201c565b6200018760201b60201c565b84600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836002819055508260038190555081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614e20600f819055505050505050620003bd565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200027d8262000250565b9050919050565b6000620002918262000270565b9050919050565b620002a38162000284565b8114620002af57600080fd5b50565b600081519050620002c38162000298565b92915050565b6000819050919050565b620002de81620002c9565b8114620002ea57600080fd5b50565b600081519050620002fe81620002d3565b92915050565b6200030f8162000270565b81146200031b57600080fd5b50565b6000815190506200032f8162000304565b92915050565b600080600080600060a086880312156200035457620003536200024b565b5b60006200036488828901620002b2565b95505060206200037788828901620002ed565b94505060406200038a88828901620002ed565b93505060606200039d888289016200031e565b9250506080620003b0888289016200031e565b9150509295509295909350565b61493f80620003cd6000396000f3fe6080604052600436106102965760003560e01c806388dbe3e11161015a578063dffe0e65116100c1578063f2fde38b1161007a578063f2fde38b1461098a578063f5288a3b146109b3578063f6be71d1146109dc578063fdb5a03e14610a05578063ff378dd014610a1c578063ffc9896b14610a47576102b6565b8063dffe0e651461087a578063e454d080146108a5578063e8b6c1a0146108e2578063e9d354ed1461090b578063e9fad8ee14610948578063ebe2b12b1461095f576102b6565b8063aa9700c511610113578063aa9700c51461078a578063bf3d4272146107b3578063c31630a7146107de578063cb27265d146107f5578063ccfcecd614610833578063dca7bc661461085e576102b6565b806388dbe3e11461068b5780638da5cb5b146106a2578063918f8674146106cd5780639cf837c3146106f8578063a694fc3a14610721578063a87430ba1461074a576102b6565b80633d18b912116101fe5780636c617048116101b75780636c617048146105a15780636cb69b8a146105ca578063715018a6146105f357806375df1f8b1461060a57806380faa57d1461063557806384496ee414610660576102b6565b80633d18b912146104db57806342317f88146104f2578063486ff0cd14610509578063499e4b021461053457806351ed6a301461054b5780635dcc939114610576576102b6565b80631a37ea11116102505780631a37ea11146103cb5780631a5513f9146103f65780631f0ba6c91461042157806324f45e671461044c5780632ab767d2146104755780632e17de78146104b2576102b6565b80628cc262146102bb57806305f2bba9146102f85780630d68b761146103215780630fb5a6b41461034a578063101114cf1461037557806318160ddd146103a0576102b6565b366102b65734600860008282546102ad91906134f1565b92505081905550005b600080fd5b3480156102c757600080fd5b506102e260048036038101906102dd91906135b9565b610a84565b6040516102ef91906135f5565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a9190613674565b610baf565b005b34801561032d57600080fd5b50610348600480360381019061034391906135b9565b610f72565b005b34801561035657600080fd5b5061035f610fbe565b60405161036c91906135f5565b60405180910390f35b34801561038157600080fd5b5061038a610fc4565b60405161039791906136d6565b60405180910390f35b3480156103ac57600080fd5b506103b5610fea565b6040516103c291906135f5565b60405180910390f35b3480156103d757600080fd5b506103e0610ff4565b6040516103ed91906136d6565b60405180910390f35b34801561040257600080fd5b5061040b61101a565b60405161041891906135f5565b60405180910390f35b34801561042d57600080fd5b50610436611024565b60405161044391906136d6565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e91906136f1565b61104a565b005b34801561048157600080fd5b5061049c600480360381019061049791906135b9565b61112e565b6040516104a991906135f5565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d491906136f1565b61117a565b005b3480156104e757600080fd5b506104f0611474565b005b3480156104fe57600080fd5b50610507611705565b005b34801561051557600080fd5b5061051e611892565b60405161052b91906137b7565b60405180910390f35b34801561054057600080fd5b50610549611897565b005b34801561055757600080fd5b50610560611a9c565b60405161056d9190613838565b60405180910390f35b34801561058257600080fd5b5061058b611ac2565b60405161059891906135f5565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c391906135b9565b611aca565b005b3480156105d657600080fd5b506105f160048036038101906105ec9190613a5e565b611b6d565b005b3480156105ff57600080fd5b50610608611d4e565b005b34801561061657600080fd5b5061061f611d62565b60405161062c91906135f5565b60405180910390f35b34801561064157600080fd5b5061064a611d68565b60405161065791906135f5565b60405180910390f35b34801561066c57600080fd5b50610675611d7b565b60405161068291906135f5565b60405180910390f35b34801561069757600080fd5b506106a0611d81565b005b3480156106ae57600080fd5b506106b7611fa6565b6040516106c491906136d6565b60405180910390f35b3480156106d957600080fd5b506106e2611fcf565b6040516106ef91906135f5565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906136f1565b611fd5565b005b34801561072d57600080fd5b50610748600480360381019061074391906136f1565b612076565b005b34801561075657600080fd5b50610771600480360381019061076c91906135b9565b612441565b6040516107819493929190613ad6565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac9190613b1b565b612471565b005b3480156107bf57600080fd5b506107c86125e5565b6040516107d59190613b6a565b60405180910390f35b3480156107ea57600080fd5b506107f36125f8565b005b34801561080157600080fd5b5061081c600480360381019061081791906135b9565b612698565b60405161082a929190613b85565b60405180910390f35b34801561083f57600080fd5b506108486126bc565b60405161085591906135f5565b60405180910390f35b61087860048036038101906108739190613c63565b6126c2565b005b34801561088657600080fd5b5061088f6128ec565b60405161089c91906135f5565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c791906135b9565b6128f3565b6040516108d991906135f5565b60405180910390f35b3480156108ee57600080fd5b5061090960048036038101906109049190613d21565b61293f565b005b34801561091757600080fd5b50610932600480360381019061092d91906135b9565b612a5c565b60405161093f91906135f5565b60405180910390f35b34801561095457600080fd5b5061095d612afb565b005b34801561096b57600080fd5b50610974612b57565b60405161098191906135f5565b60405180910390f35b34801561099657600080fd5b506109b160048036038101906109ac91906135b9565b612b5d565b005b3480156109bf57600080fd5b506109da60048036038101906109d591906136f1565b612be1565b005b3480156109e857600080fd5b50610a0360048036038101906109fe91906136f1565b612c82565b005b348015610a1157600080fd5b50610a1a612d37565b005b348015610a2857600080fd5b50610a31612d49565b604051610a3e91906135f5565b60405180910390f35b348015610a5357600080fd5b50610a6e6004803603810190610a6991906135b9565b612d4f565b604051610a7b9190613dc5565b60405180910390f35b600080610a8f61101a565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154610ada611d68565b610ae49190613de0565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610b319190613e14565b610b3b9190613e14565b9050600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546301e1338061271083610b939190613e9d565b610b9d9190613e9d565b610ba791906134f1565b915050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bf0612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d90613f40565b60405180910390fd5b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ccb57610c8481610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b610cd3611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555060008311610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390613fac565b60405180910390fd5b82600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541015610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd89061403e565b60405180910390fd5b82600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610e2f9190613de0565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550600115158215151415610ece57600061271060075485610e959190613e14565b610e9f9190613e9d565b90508084610ead9190613de0565b93508060056000828254610ec191906134f1565b9250508190555050610f62565b426203f480600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154610f2091906134f1565b1115610f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f58906140aa565b60405180910390fd5b5b610f6c8484612dd8565b50505050565b610f7a612fda565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60025481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600f54905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661108b612dd0565b73ffffffffffffffffffffffffffffffffffffffff16146110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890613f40565b60405180910390fd5b60008111611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111b90614116565b60405180910390fd5b80600f8190555050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b611182612dd0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611206576111bf81610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b61120e611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555060008211611297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128e90613fac565b60405180910390fd5b81600d60006112a4612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541015611323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131a9061403e565b60405180910390fd5b426203f480600d6000611334612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015461137c91906134f1565b11156113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b4906140aa565b60405180910390fd5b81600d60006113ca612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546114129190613de0565b600d600061141e612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061147061146a612dd0565b83612dd8565b5050565b61147c612dd0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611500576114b981610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b611508611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000600d600061155c612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000811115611701576000600d60006115b3612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61163a612dd0565b836040518363ffffffff1660e01b8152600401611658929190614136565b602060405180830381600087803b15801561167257600080fd5b505af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa9190614174565b506116b3612dd0565b73ffffffffffffffffffffffffffffffffffffffff167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486826040516116f891906135f5565b60405180910390a25b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611746612dd0565b73ffffffffffffffffffffffffffffffffffffffff161461179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390613f40565b60405180910390fd5b600060055490506000600581905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6117f1612dd0565b836040518363ffffffff1660e01b815260040161180f929190614136565b602060405180830381600087803b15801561182957600080fd5b505af115801561183d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118619190614174565b50807f507b0c96186ca66823080c2304b1347f1d556a427f8d9313c8dd6c80837bd2e360405160405180910390a250565b606090565b6000600e60006118a5612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015411611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f906141ed565b60405180910390fd5b806001015442101561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690614259565b60405180910390fd5b6000816000015490506000826000018190555060008260010181905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6119d2612dd0565b836040518363ffffffff1660e01b81526004016119f0929190614136565b602060405180830381600087803b158015611a0a57600080fd5b505af1158015611a1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a429190614174565b50611a4b612dd0565b73ffffffffffffffffffffffffffffffffffffffff167f68eaac9706eeb204caf6f55fe445c688dcc661b10e706b30e22ba544e38e5b0c82604051611a9091906135f5565b60405180910390a25050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6301e1338081565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b0b612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5890613f40565b60405180910390fd5b611b6a81613058565b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611bae612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614611c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfb90613f40565b60405180910390fd5b8051825114611c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3f906142c5565b60405180910390fd5b60005b8251811015611d4957818181518110611c6757611c666142e5565b5b6020026020010151600d6000858481518110611c8657611c856142e5565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154611cd691906134f1565b600d6000858481518110611ced57611cec6142e5565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508080611d4190614314565b915050611c4b565b505050565b611d56612fda565b611d6060006132bf565b565b60055481565b6000611d7642600654613383565b905090565b60075481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611dc2612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f90613f40565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e9d57611e5681610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b611ea5611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600c60149054906101000a900460ff1615611f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f32906143a9565b60405180910390fd5b6001600c60146101000a81548160ff02191690831515021790555060025442611f6491906134f1565b6006819055507facb909ab5c221a24cbde03d8fd1dea21218d0c9ed981b895982b6cba021b7e47600654604051611f9b91906135f5565b60405180910390a150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61271081565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612016612dd0565b73ffffffffffffffffffffffffffffffffffffffff161461206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390613f40565b60405180910390fd5b8060078190555050565b61207e612dd0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612102576120bb81610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b61210a611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600c60149054906101000a900460ff1661219f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219690614415565b60405180910390fd5b600082116121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d990614481565b60405180910390fd5b6006544210612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d906144ed565b60405180910390fd5b816004600082825461223891906134f1565b9250508190555081600d600061224c612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461229491906134f1565b600d60006122a0612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555042600d60006122ee612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd612375612dd0565b30856040518463ffffffff1660e01b81526004016123959392919061450d565b602060405180830381600087803b1580156123af57600080fd5b505af11580156123c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e79190614174565b506123f0612dd0565b73ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d8360405161243591906135f5565b60405180910390a25050565b600d6020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166124b2612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614612508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ff90613f40565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61252c612dd0565b836040518363ffffffff1660e01b815260040161254a929190614136565b602060405180830381600087803b15801561256457600080fd5b505af1158015612578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259c9190614174565b50808273ffffffffffffffffffffffffffffffffffffffff167ffba2d3bdfb2d601eb66a89783a2c614856101cadce71556753c2edadd60c831c60405160405180910390a35050565b600c60149054906101000a900460ff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612639612dd0565b73ffffffffffffffffffffffffffffffffffffffff161461268f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268690613f40565b60405180910390fd5b42600681905550565b600e6020528060005260406000206000915090508060000154908060010154905082565b60085481565b600954600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411612748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273f90614590565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161415612818578673ffffffffffffffffffffffffffffffffffffffff166341d57a2e8787868886886040518763ffffffff1660e01b81526004016127e196959493929190614605565b600060405180830381600087803b1580156127fb57600080fd5b505af115801561280f573d6000803e3d6000fd5b505050506128e3565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156128e2578673ffffffffffffffffffffffffffffffffffffffff16631060c41287878786866040518663ffffffff1660e01b81526004016128af95949392919061466d565b600060405180830381600087803b1580156128c957600080fd5b505af11580156128dd573d6000803e3d6000fd5b505050505b5b50505050505050565b6203f48081565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612980612dd0565b73ffffffffffffffffffffffffffffffffffffffff16146129d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cd90613f40565b60405180910390fd5b81600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101544210612af157600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050612af6565b600090505b919050565b612b4d600d6000612b0a612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461117a565b612b55611474565b565b60065481565b612b65612fda565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcc90614739565b60405180910390fd5b612bde816132bf565b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c22612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614612c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6f90613f40565b60405180910390fd5b8060038190555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612cc3612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614612d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1090613f40565b60405180910390fd5b8060028190555060025442612d2e91906134f1565b60068190555050565b612d47612d42612dd0565b613058565b565b60035481565b612d57613490565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509050919050565b600033905090565b600060045461271083612deb9190613e14565b612df59190613e9d565b905061271081600854612e089190613e14565b612e129190613e9d565b905080600854612e229190613de0565b60088190555081600454612e369190613de0565b600481905550612e44611474565b60006003541415612f0e57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401612eac929190614136565b602060405180830381600087803b158015612ec657600080fd5b505af1158015612eda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efe9190614174565b50612f09838261339c565b612f87565b600060035442612f1e91906134f1565b90506000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050838160000154612f7391906134f1565b816000018190555081816001018190555050505b8273ffffffffffffffffffffffffffffffffffffffff167f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f7583604051612fcd91906135f5565b60405180910390a2505050565b612fe2612dd0565b73ffffffffffffffffffffffffffffffffffffffff16613000611fa6565b73ffffffffffffffffffffffffffffffffffffffff1614613056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304d906147a5565b60405180910390fd5b565b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146130dd5761309681610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b6130e5611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905060008111156132ba576000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555080600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461321191906134f1565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508060045461326591906134f1565b6004819055508273ffffffffffffffffffffffffffffffffffffffff167f8ee26b861a3c8ef0681db4da2b6ca4d6960b69a435ed2c6b9c4e25075d694e13826040516132b191906135f5565b60405180910390a25b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183106133925781613394565b825b905092915050565b804710156133df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d690614811565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161340590614862565b60006040518083038185875af1925050503d8060008114613442576040519150601f19603f3d011682016040523d82523d6000602084013e613447565b606091505b505090508061348b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613482906148e9565b60405180910390fd5b505050565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134fc826134b8565b9150613507836134b8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561353c5761353b6134c2565b5b828201905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135868261355b565b9050919050565b6135968161357b565b81146135a157600080fd5b50565b6000813590506135b38161358d565b92915050565b6000602082840312156135cf576135ce613551565b5b60006135dd848285016135a4565b91505092915050565b6135ef816134b8565b82525050565b600060208201905061360a60008301846135e6565b92915050565b613619816134b8565b811461362457600080fd5b50565b60008135905061363681613610565b92915050565b60008115159050919050565b6136518161363c565b811461365c57600080fd5b50565b60008135905061366e81613648565b92915050565b60008060006060848603121561368d5761368c613551565b5b600061369b868287016135a4565b93505060206136ac86828701613627565b92505060406136bd8682870161365f565b9150509250925092565b6136d08161357b565b82525050565b60006020820190506136eb60008301846136c7565b92915050565b60006020828403121561370757613706613551565b5b600061371584828501613627565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561375857808201518184015260208101905061373d565b83811115613767576000848401525b50505050565b6000601f19601f8301169050919050565b60006137898261371e565b6137938185613729565b93506137a381856020860161373a565b6137ac8161376d565b840191505092915050565b600060208201905081810360008301526137d1818461377e565b905092915050565b6000819050919050565b60006137fe6137f96137f48461355b565b6137d9565b61355b565b9050919050565b6000613810826137e3565b9050919050565b600061382282613805565b9050919050565b61383281613817565b82525050565b600060208201905061384d6000830184613829565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6138908261376d565b810181811067ffffffffffffffff821117156138af576138ae613858565b5b80604052505050565b60006138c2613547565b90506138ce8282613887565b919050565b600067ffffffffffffffff8211156138ee576138ed613858565b5b602082029050602081019050919050565b600080fd5b6000613917613912846138d3565b6138b8565b9050808382526020820190506020840283018581111561393a576139396138ff565b5b835b81811015613963578061394f88826135a4565b84526020840193505060208101905061393c565b5050509392505050565b600082601f83011261398257613981613853565b5b8135613992848260208601613904565b91505092915050565b600067ffffffffffffffff8211156139b6576139b5613858565b5b602082029050602081019050919050565b60006139da6139d58461399b565b6138b8565b905080838252602082019050602084028301858111156139fd576139fc6138ff565b5b835b81811015613a265780613a128882613627565b8452602084019350506020810190506139ff565b5050509392505050565b600082601f830112613a4557613a44613853565b5b8135613a558482602086016139c7565b91505092915050565b60008060408385031215613a7557613a74613551565b5b600083013567ffffffffffffffff811115613a9357613a92613556565b5b613a9f8582860161396d565b925050602083013567ffffffffffffffff811115613ac057613abf613556565b5b613acc85828601613a30565b9150509250929050565b6000608082019050613aeb60008301876135e6565b613af860208301866135e6565b613b0560408301856135e6565b613b1260608301846135e6565b95945050505050565b60008060408385031215613b3257613b31613551565b5b6000613b40858286016135a4565b9250506020613b5185828601613627565b9150509250929050565b613b648161363c565b82525050565b6000602082019050613b7f6000830184613b5b565b92915050565b6000604082019050613b9a60008301856135e6565b613ba760208301846135e6565b9392505050565b600080fd5b600067ffffffffffffffff821115613bce57613bcd613858565b5b613bd78261376d565b9050602081019050919050565b82818337600083830152505050565b6000613c06613c0184613bb3565b6138b8565b905082815260208101848484011115613c2257613c21613bae565b5b613c2d848285613be4565b509392505050565b600082601f830112613c4a57613c49613853565b5b8135613c5a848260208601613bf3565b91505092915050565b600080600080600080600060e0888a031215613c8257613c81613551565b5b6000613c908a828b016135a4565b9750506020613ca18a828b01613627565b9650506040613cb28a828b01613627565b9550506060613cc38a828b01613627565b9450506080613cd48a828b01613627565b93505060a0613ce58a828b016135a4565b92505060c088013567ffffffffffffffff811115613d0657613d05613556565b5b613d128a828b01613c35565b91505092959891949750929550565b60008060408385031215613d3857613d37613551565b5b6000613d46858286016135a4565b9250506020613d57858286016135a4565b9150509250929050565b613d6a816134b8565b82525050565b608082016000820151613d866000850182613d61565b506020820151613d996020850182613d61565b506040820151613dac6040850182613d61565b506060820151613dbf6060850182613d61565b50505050565b6000608082019050613dda6000830184613d70565b92915050565b6000613deb826134b8565b9150613df6836134b8565b925082821015613e0957613e086134c2565b5b828203905092915050565b6000613e1f826134b8565b9150613e2a836134b8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e6357613e626134c2565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ea8826134b8565b9150613eb3836134b8565b925082613ec357613ec2613e6e565b5b828204905092915050565b7f43616c6c6572206973206e6f742072657761726420646973747269627574696f60008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f2a602183613729565b9150613f3582613ece565b604082019050919050565b60006020820190508181036000830152613f5981613f1d565b9050919050565b7f43616e6e6f742077697468647261772030000000000000000000000000000000600082015250565b6000613f96601183613729565b9150613fa182613f60565b602082019050919050565b60006020820190508181036000830152613fc581613f89565b9050919050565b7f5573657220646f6573206e6f7420686176652073756666696369656e7420626160008201527f6c616e6365000000000000000000000000000000000000000000000000000000602082015250565b6000614028602583613729565b915061403382613fcc565b604082019050919050565b600060208201905081810360008301526140578161401b565b9050919050565b7f43616e6e6f74207769746864726177206265666f7265206d6174757269747900600082015250565b6000614094601f83613729565b915061409f8261405e565b602082019050919050565b600060208201905081810360008301526140c381614087565b9050919050565b7f6d6f6e74682063616e206e6f7420626520300000000000000000000000000000600082015250565b6000614100601283613729565b915061410b826140ca565b602082019050919050565b6000602082019050818103600083015261412f816140f3565b9050919050565b600060408201905061414b60008301856136c7565b61415860208301846135e6565b9392505050565b60008151905061416e81613648565b92915050565b60006020828403121561418a57614189613551565b5b60006141988482850161415f565b91505092915050565b7f4e6f20756e7374616b656420616d6f756e7420746f20636c61696d0000000000600082015250565b60006141d7601b83613729565b91506141e2826141a1565b602082019050919050565b60006020820190508181036000830152614206816141ca565b9050919050565b7f556e626f756e64696e6720706572696f64206e6f742066696e69736865640000600082015250565b6000614243601e83613729565b915061424e8261420d565b602082019050919050565b6000602082019050818103600083015261427281614236565b9050919050565b7f496e707574206c656e67746820696e76616c6964000000000000000000000000600082015250565b60006142af601483613729565b91506142ba82614279565b602082019050919050565b600060208201905081810360008301526142de816142a2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061431f826134b8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614352576143516134c2565b5b600182019050919050565b7f5374616b696e6720697320616c72656164792073746172746564000000000000600082015250565b6000614393601a83613729565b915061439e8261435d565b602082019050919050565b600060208201905081810360008301526143c281614386565b9050919050565b7f5374616b696e67206973206e6f74207374617274656420796574000000000000600082015250565b60006143ff601a83613729565b915061440a826143c9565b602082019050919050565b6000602082019050818103600083015261442e816143f2565b9050919050565b7f43616e6e6f74207374616b652030000000000000000000000000000000000000600082015250565b600061446b600e83613729565b915061447682614435565b602082019050919050565b6000602082019050818103600083015261449a8161445e565b9050919050565b7f5374616b696e6720706572696f64206f76657200000000000000000000000000600082015250565b60006144d7601383613729565b91506144e2826144a1565b602082019050919050565b60006020820190508181036000830152614506816144ca565b9050919050565b600060608201905061452260008301866136c7565b61452f60208301856136c7565b61453c60408301846135e6565b949350505050565b7f4d696e20456c696769626c6974792031306b0000000000000000000000000000600082015250565b600061457a601283613729565b915061458582614544565b602082019050919050565b600060208201905081810360008301526145a98161456d565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006145d7826145b0565b6145e181856145bb565b93506145f181856020860161373a565b6145fa8161376d565b840191505092915050565b600060c08201905061461a60008301896135e6565b61462760208301886135e6565b61463460408301876135e6565b61464160608301866135e6565b818103608083015261465381856145cc565b905061466260a08301846136c7565b979650505050505050565b600060a08201905061468260008301886135e6565b61468f60208301876135e6565b61469c60408301866135e6565b6146a960608301856136c7565b81810360808301526146bb81846145cc565b90509695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614723602683613729565b915061472e826146c7565b604082019050919050565b6000602082019050818103600083015261475281614716565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061478f602083613729565b915061479a82614759565b602082019050919050565b600060208201905081810360008301526147be81614782565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006147fb601d83613729565b9150614806826147c5565b602082019050919050565b6000602082019050818103600083015261482a816147ee565b9050919050565b600081905092915050565b50565b600061484c600083614831565b91506148578261483c565b600082019050919050565b600061486d8261483f565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006148d3603a83613729565b91506148de82614877565b604082019050919050565b60006020820190508181036000830152614902816148c6565b905091905056fea26469706673582212208c9d4254d9fc79e4236a7d66ea0c907e8d17005ead06f123996bd33615fe7cc764736f6c634300080800330000000000000000000000006d8f7ac13e8c2944d27e0f9bc6aa0122f2ec138400000000000000000000000000000000000000000000000000000000003b538000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002184e4780ae760af1b662fb80e52cec9b5e2b8190000000000000000000000009f9c7a726d16e6e630c9500f5df8b3902b9ba2a6

Deployed Bytecode

0x6080604052600436106102965760003560e01c806388dbe3e11161015a578063dffe0e65116100c1578063f2fde38b1161007a578063f2fde38b1461098a578063f5288a3b146109b3578063f6be71d1146109dc578063fdb5a03e14610a05578063ff378dd014610a1c578063ffc9896b14610a47576102b6565b8063dffe0e651461087a578063e454d080146108a5578063e8b6c1a0146108e2578063e9d354ed1461090b578063e9fad8ee14610948578063ebe2b12b1461095f576102b6565b8063aa9700c511610113578063aa9700c51461078a578063bf3d4272146107b3578063c31630a7146107de578063cb27265d146107f5578063ccfcecd614610833578063dca7bc661461085e576102b6565b806388dbe3e11461068b5780638da5cb5b146106a2578063918f8674146106cd5780639cf837c3146106f8578063a694fc3a14610721578063a87430ba1461074a576102b6565b80633d18b912116101fe5780636c617048116101b75780636c617048146105a15780636cb69b8a146105ca578063715018a6146105f357806375df1f8b1461060a57806380faa57d1461063557806384496ee414610660576102b6565b80633d18b912146104db57806342317f88146104f2578063486ff0cd14610509578063499e4b021461053457806351ed6a301461054b5780635dcc939114610576576102b6565b80631a37ea11116102505780631a37ea11146103cb5780631a5513f9146103f65780631f0ba6c91461042157806324f45e671461044c5780632ab767d2146104755780632e17de78146104b2576102b6565b80628cc262146102bb57806305f2bba9146102f85780630d68b761146103215780630fb5a6b41461034a578063101114cf1461037557806318160ddd146103a0576102b6565b366102b65734600860008282546102ad91906134f1565b92505081905550005b600080fd5b3480156102c757600080fd5b506102e260048036038101906102dd91906135b9565b610a84565b6040516102ef91906135f5565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a9190613674565b610baf565b005b34801561032d57600080fd5b50610348600480360381019061034391906135b9565b610f72565b005b34801561035657600080fd5b5061035f610fbe565b60405161036c91906135f5565b60405180910390f35b34801561038157600080fd5b5061038a610fc4565b60405161039791906136d6565b60405180910390f35b3480156103ac57600080fd5b506103b5610fea565b6040516103c291906135f5565b60405180910390f35b3480156103d757600080fd5b506103e0610ff4565b6040516103ed91906136d6565b60405180910390f35b34801561040257600080fd5b5061040b61101a565b60405161041891906135f5565b60405180910390f35b34801561042d57600080fd5b50610436611024565b60405161044391906136d6565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e91906136f1565b61104a565b005b34801561048157600080fd5b5061049c600480360381019061049791906135b9565b61112e565b6040516104a991906135f5565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d491906136f1565b61117a565b005b3480156104e757600080fd5b506104f0611474565b005b3480156104fe57600080fd5b50610507611705565b005b34801561051557600080fd5b5061051e611892565b60405161052b91906137b7565b60405180910390f35b34801561054057600080fd5b50610549611897565b005b34801561055757600080fd5b50610560611a9c565b60405161056d9190613838565b60405180910390f35b34801561058257600080fd5b5061058b611ac2565b60405161059891906135f5565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c391906135b9565b611aca565b005b3480156105d657600080fd5b506105f160048036038101906105ec9190613a5e565b611b6d565b005b3480156105ff57600080fd5b50610608611d4e565b005b34801561061657600080fd5b5061061f611d62565b60405161062c91906135f5565b60405180910390f35b34801561064157600080fd5b5061064a611d68565b60405161065791906135f5565b60405180910390f35b34801561066c57600080fd5b50610675611d7b565b60405161068291906135f5565b60405180910390f35b34801561069757600080fd5b506106a0611d81565b005b3480156106ae57600080fd5b506106b7611fa6565b6040516106c491906136d6565b60405180910390f35b3480156106d957600080fd5b506106e2611fcf565b6040516106ef91906135f5565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906136f1565b611fd5565b005b34801561072d57600080fd5b50610748600480360381019061074391906136f1565b612076565b005b34801561075657600080fd5b50610771600480360381019061076c91906135b9565b612441565b6040516107819493929190613ad6565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac9190613b1b565b612471565b005b3480156107bf57600080fd5b506107c86125e5565b6040516107d59190613b6a565b60405180910390f35b3480156107ea57600080fd5b506107f36125f8565b005b34801561080157600080fd5b5061081c600480360381019061081791906135b9565b612698565b60405161082a929190613b85565b60405180910390f35b34801561083f57600080fd5b506108486126bc565b60405161085591906135f5565b60405180910390f35b61087860048036038101906108739190613c63565b6126c2565b005b34801561088657600080fd5b5061088f6128ec565b60405161089c91906135f5565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c791906135b9565b6128f3565b6040516108d991906135f5565b60405180910390f35b3480156108ee57600080fd5b5061090960048036038101906109049190613d21565b61293f565b005b34801561091757600080fd5b50610932600480360381019061092d91906135b9565b612a5c565b60405161093f91906135f5565b60405180910390f35b34801561095457600080fd5b5061095d612afb565b005b34801561096b57600080fd5b50610974612b57565b60405161098191906135f5565b60405180910390f35b34801561099657600080fd5b506109b160048036038101906109ac91906135b9565b612b5d565b005b3480156109bf57600080fd5b506109da60048036038101906109d591906136f1565b612be1565b005b3480156109e857600080fd5b50610a0360048036038101906109fe91906136f1565b612c82565b005b348015610a1157600080fd5b50610a1a612d37565b005b348015610a2857600080fd5b50610a31612d49565b604051610a3e91906135f5565b60405180910390f35b348015610a5357600080fd5b50610a6e6004803603810190610a6991906135b9565b612d4f565b604051610a7b9190613dc5565b60405180910390f35b600080610a8f61101a565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154610ada611d68565b610ae49190613de0565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610b319190613e14565b610b3b9190613e14565b9050600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546301e1338061271083610b939190613e9d565b610b9d9190613e9d565b610ba791906134f1565b915050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bf0612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d90613f40565b60405180910390fd5b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ccb57610c8481610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b610cd3611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555060008311610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390613fac565b60405180910390fd5b82600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541015610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd89061403e565b60405180910390fd5b82600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610e2f9190613de0565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550600115158215151415610ece57600061271060075485610e959190613e14565b610e9f9190613e9d565b90508084610ead9190613de0565b93508060056000828254610ec191906134f1565b9250508190555050610f62565b426203f480600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154610f2091906134f1565b1115610f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f58906140aa565b60405180910390fd5b5b610f6c8484612dd8565b50505050565b610f7a612fda565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60025481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600f54905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661108b612dd0565b73ffffffffffffffffffffffffffffffffffffffff16146110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890613f40565b60405180910390fd5b60008111611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111b90614116565b60405180910390fd5b80600f8190555050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b611182612dd0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611206576111bf81610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b61120e611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555060008211611297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128e90613fac565b60405180910390fd5b81600d60006112a4612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541015611323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131a9061403e565b60405180910390fd5b426203f480600d6000611334612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015461137c91906134f1565b11156113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b4906140aa565b60405180910390fd5b81600d60006113ca612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546114129190613de0565b600d600061141e612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061147061146a612dd0565b83612dd8565b5050565b61147c612dd0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611500576114b981610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b611508611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000600d600061155c612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000811115611701576000600d60006115b3612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61163a612dd0565b836040518363ffffffff1660e01b8152600401611658929190614136565b602060405180830381600087803b15801561167257600080fd5b505af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa9190614174565b506116b3612dd0565b73ffffffffffffffffffffffffffffffffffffffff167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486826040516116f891906135f5565b60405180910390a25b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611746612dd0565b73ffffffffffffffffffffffffffffffffffffffff161461179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390613f40565b60405180910390fd5b600060055490506000600581905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6117f1612dd0565b836040518363ffffffff1660e01b815260040161180f929190614136565b602060405180830381600087803b15801561182957600080fd5b505af115801561183d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118619190614174565b50807f507b0c96186ca66823080c2304b1347f1d556a427f8d9313c8dd6c80837bd2e360405160405180910390a250565b606090565b6000600e60006118a5612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015411611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f906141ed565b60405180910390fd5b806001015442101561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690614259565b60405180910390fd5b6000816000015490506000826000018190555060008260010181905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6119d2612dd0565b836040518363ffffffff1660e01b81526004016119f0929190614136565b602060405180830381600087803b158015611a0a57600080fd5b505af1158015611a1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a429190614174565b50611a4b612dd0565b73ffffffffffffffffffffffffffffffffffffffff167f68eaac9706eeb204caf6f55fe445c688dcc661b10e706b30e22ba544e38e5b0c82604051611a9091906135f5565b60405180910390a25050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6301e1338081565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b0b612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5890613f40565b60405180910390fd5b611b6a81613058565b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611bae612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614611c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfb90613f40565b60405180910390fd5b8051825114611c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3f906142c5565b60405180910390fd5b60005b8251811015611d4957818181518110611c6757611c666142e5565b5b6020026020010151600d6000858481518110611c8657611c856142e5565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154611cd691906134f1565b600d6000858481518110611ced57611cec6142e5565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508080611d4190614314565b915050611c4b565b505050565b611d56612fda565b611d6060006132bf565b565b60055481565b6000611d7642600654613383565b905090565b60075481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611dc2612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f90613f40565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e9d57611e5681610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b611ea5611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600c60149054906101000a900460ff1615611f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f32906143a9565b60405180910390fd5b6001600c60146101000a81548160ff02191690831515021790555060025442611f6491906134f1565b6006819055507facb909ab5c221a24cbde03d8fd1dea21218d0c9ed981b895982b6cba021b7e47600654604051611f9b91906135f5565b60405180910390a150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61271081565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612016612dd0565b73ffffffffffffffffffffffffffffffffffffffff161461206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390613f40565b60405180910390fd5b8060078190555050565b61207e612dd0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612102576120bb81610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b61210a611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600c60149054906101000a900460ff1661219f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219690614415565b60405180910390fd5b600082116121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d990614481565b60405180910390fd5b6006544210612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d906144ed565b60405180910390fd5b816004600082825461223891906134f1565b9250508190555081600d600061224c612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461229491906134f1565b600d60006122a0612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555042600d60006122ee612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd612375612dd0565b30856040518463ffffffff1660e01b81526004016123959392919061450d565b602060405180830381600087803b1580156123af57600080fd5b505af11580156123c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e79190614174565b506123f0612dd0565b73ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d8360405161243591906135f5565b60405180910390a25050565b600d6020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166124b2612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614612508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ff90613f40565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61252c612dd0565b836040518363ffffffff1660e01b815260040161254a929190614136565b602060405180830381600087803b15801561256457600080fd5b505af1158015612578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259c9190614174565b50808273ffffffffffffffffffffffffffffffffffffffff167ffba2d3bdfb2d601eb66a89783a2c614856101cadce71556753c2edadd60c831c60405160405180910390a35050565b600c60149054906101000a900460ff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612639612dd0565b73ffffffffffffffffffffffffffffffffffffffff161461268f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268690613f40565b60405180910390fd5b42600681905550565b600e6020528060005260406000206000915090508060000154908060010154905082565b60085481565b600954600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411612748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273f90614590565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161415612818578673ffffffffffffffffffffffffffffffffffffffff166341d57a2e8787868886886040518763ffffffff1660e01b81526004016127e196959493929190614605565b600060405180830381600087803b1580156127fb57600080fd5b505af115801561280f573d6000803e3d6000fd5b505050506128e3565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156128e2578673ffffffffffffffffffffffffffffffffffffffff16631060c41287878786866040518663ffffffff1660e01b81526004016128af95949392919061466d565b600060405180830381600087803b1580156128c957600080fd5b505af11580156128dd573d6000803e3d6000fd5b505050505b5b50505050505050565b6203f48081565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612980612dd0565b73ffffffffffffffffffffffffffffffffffffffff16146129d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cd90613f40565b60405180910390fd5b81600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101544210612af157600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050612af6565b600090505b919050565b612b4d600d6000612b0a612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461117a565b612b55611474565b565b60065481565b612b65612fda565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcc90614739565b60405180910390fd5b612bde816132bf565b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c22612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614612c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6f90613f40565b60405180910390fd5b8060038190555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612cc3612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614612d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1090613f40565b60405180910390fd5b8060028190555060025442612d2e91906134f1565b60068190555050565b612d47612d42612dd0565b613058565b565b60035481565b612d57613490565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509050919050565b600033905090565b600060045461271083612deb9190613e14565b612df59190613e9d565b905061271081600854612e089190613e14565b612e129190613e9d565b905080600854612e229190613de0565b60088190555081600454612e369190613de0565b600481905550612e44611474565b60006003541415612f0e57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401612eac929190614136565b602060405180830381600087803b158015612ec657600080fd5b505af1158015612eda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efe9190614174565b50612f09838261339c565b612f87565b600060035442612f1e91906134f1565b90506000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050838160000154612f7391906134f1565b816000018190555081816001018190555050505b8273ffffffffffffffffffffffffffffffffffffffff167f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f7583604051612fcd91906135f5565b60405180910390a2505050565b612fe2612dd0565b73ffffffffffffffffffffffffffffffffffffffff16613000611fa6565b73ffffffffffffffffffffffffffffffffffffffff1614613056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304d906147a5565b60405180910390fd5b565b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146130dd5761309681610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b6130e5611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905060008111156132ba576000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555080600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461321191906134f1565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508060045461326591906134f1565b6004819055508273ffffffffffffffffffffffffffffffffffffffff167f8ee26b861a3c8ef0681db4da2b6ca4d6960b69a435ed2c6b9c4e25075d694e13826040516132b191906135f5565b60405180910390a25b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183106133925781613394565b825b905092915050565b804710156133df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d690614811565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161340590614862565b60006040518083038185875af1925050503d8060008114613442576040519150601f19603f3d011682016040523d82523d6000602084013e613447565b606091505b505090508061348b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613482906148e9565b60405180910390fd5b505050565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134fc826134b8565b9150613507836134b8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561353c5761353b6134c2565b5b828201905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135868261355b565b9050919050565b6135968161357b565b81146135a157600080fd5b50565b6000813590506135b38161358d565b92915050565b6000602082840312156135cf576135ce613551565b5b60006135dd848285016135a4565b91505092915050565b6135ef816134b8565b82525050565b600060208201905061360a60008301846135e6565b92915050565b613619816134b8565b811461362457600080fd5b50565b60008135905061363681613610565b92915050565b60008115159050919050565b6136518161363c565b811461365c57600080fd5b50565b60008135905061366e81613648565b92915050565b60008060006060848603121561368d5761368c613551565b5b600061369b868287016135a4565b93505060206136ac86828701613627565b92505060406136bd8682870161365f565b9150509250925092565b6136d08161357b565b82525050565b60006020820190506136eb60008301846136c7565b92915050565b60006020828403121561370757613706613551565b5b600061371584828501613627565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561375857808201518184015260208101905061373d565b83811115613767576000848401525b50505050565b6000601f19601f8301169050919050565b60006137898261371e565b6137938185613729565b93506137a381856020860161373a565b6137ac8161376d565b840191505092915050565b600060208201905081810360008301526137d1818461377e565b905092915050565b6000819050919050565b60006137fe6137f96137f48461355b565b6137d9565b61355b565b9050919050565b6000613810826137e3565b9050919050565b600061382282613805565b9050919050565b61383281613817565b82525050565b600060208201905061384d6000830184613829565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6138908261376d565b810181811067ffffffffffffffff821117156138af576138ae613858565b5b80604052505050565b60006138c2613547565b90506138ce8282613887565b919050565b600067ffffffffffffffff8211156138ee576138ed613858565b5b602082029050602081019050919050565b600080fd5b6000613917613912846138d3565b6138b8565b9050808382526020820190506020840283018581111561393a576139396138ff565b5b835b81811015613963578061394f88826135a4565b84526020840193505060208101905061393c565b5050509392505050565b600082601f83011261398257613981613853565b5b8135613992848260208601613904565b91505092915050565b600067ffffffffffffffff8211156139b6576139b5613858565b5b602082029050602081019050919050565b60006139da6139d58461399b565b6138b8565b905080838252602082019050602084028301858111156139fd576139fc6138ff565b5b835b81811015613a265780613a128882613627565b8452602084019350506020810190506139ff565b5050509392505050565b600082601f830112613a4557613a44613853565b5b8135613a558482602086016139c7565b91505092915050565b60008060408385031215613a7557613a74613551565b5b600083013567ffffffffffffffff811115613a9357613a92613556565b5b613a9f8582860161396d565b925050602083013567ffffffffffffffff811115613ac057613abf613556565b5b613acc85828601613a30565b9150509250929050565b6000608082019050613aeb60008301876135e6565b613af860208301866135e6565b613b0560408301856135e6565b613b1260608301846135e6565b95945050505050565b60008060408385031215613b3257613b31613551565b5b6000613b40858286016135a4565b9250506020613b5185828601613627565b9150509250929050565b613b648161363c565b82525050565b6000602082019050613b7f6000830184613b5b565b92915050565b6000604082019050613b9a60008301856135e6565b613ba760208301846135e6565b9392505050565b600080fd5b600067ffffffffffffffff821115613bce57613bcd613858565b5b613bd78261376d565b9050602081019050919050565b82818337600083830152505050565b6000613c06613c0184613bb3565b6138b8565b905082815260208101848484011115613c2257613c21613bae565b5b613c2d848285613be4565b509392505050565b600082601f830112613c4a57613c49613853565b5b8135613c5a848260208601613bf3565b91505092915050565b600080600080600080600060e0888a031215613c8257613c81613551565b5b6000613c908a828b016135a4565b9750506020613ca18a828b01613627565b9650506040613cb28a828b01613627565b9550506060613cc38a828b01613627565b9450506080613cd48a828b01613627565b93505060a0613ce58a828b016135a4565b92505060c088013567ffffffffffffffff811115613d0657613d05613556565b5b613d128a828b01613c35565b91505092959891949750929550565b60008060408385031215613d3857613d37613551565b5b6000613d46858286016135a4565b9250506020613d57858286016135a4565b9150509250929050565b613d6a816134b8565b82525050565b608082016000820151613d866000850182613d61565b506020820151613d996020850182613d61565b506040820151613dac6040850182613d61565b506060820151613dbf6060850182613d61565b50505050565b6000608082019050613dda6000830184613d70565b92915050565b6000613deb826134b8565b9150613df6836134b8565b925082821015613e0957613e086134c2565b5b828203905092915050565b6000613e1f826134b8565b9150613e2a836134b8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e6357613e626134c2565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ea8826134b8565b9150613eb3836134b8565b925082613ec357613ec2613e6e565b5b828204905092915050565b7f43616c6c6572206973206e6f742072657761726420646973747269627574696f60008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f2a602183613729565b9150613f3582613ece565b604082019050919050565b60006020820190508181036000830152613f5981613f1d565b9050919050565b7f43616e6e6f742077697468647261772030000000000000000000000000000000600082015250565b6000613f96601183613729565b9150613fa182613f60565b602082019050919050565b60006020820190508181036000830152613fc581613f89565b9050919050565b7f5573657220646f6573206e6f7420686176652073756666696369656e7420626160008201527f6c616e6365000000000000000000000000000000000000000000000000000000602082015250565b6000614028602583613729565b915061403382613fcc565b604082019050919050565b600060208201905081810360008301526140578161401b565b9050919050565b7f43616e6e6f74207769746864726177206265666f7265206d6174757269747900600082015250565b6000614094601f83613729565b915061409f8261405e565b602082019050919050565b600060208201905081810360008301526140c381614087565b9050919050565b7f6d6f6e74682063616e206e6f7420626520300000000000000000000000000000600082015250565b6000614100601283613729565b915061410b826140ca565b602082019050919050565b6000602082019050818103600083015261412f816140f3565b9050919050565b600060408201905061414b60008301856136c7565b61415860208301846135e6565b9392505050565b60008151905061416e81613648565b92915050565b60006020828403121561418a57614189613551565b5b60006141988482850161415f565b91505092915050565b7f4e6f20756e7374616b656420616d6f756e7420746f20636c61696d0000000000600082015250565b60006141d7601b83613729565b91506141e2826141a1565b602082019050919050565b60006020820190508181036000830152614206816141ca565b9050919050565b7f556e626f756e64696e6720706572696f64206e6f742066696e69736865640000600082015250565b6000614243601e83613729565b915061424e8261420d565b602082019050919050565b6000602082019050818103600083015261427281614236565b9050919050565b7f496e707574206c656e67746820696e76616c6964000000000000000000000000600082015250565b60006142af601483613729565b91506142ba82614279565b602082019050919050565b600060208201905081810360008301526142de816142a2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061431f826134b8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614352576143516134c2565b5b600182019050919050565b7f5374616b696e6720697320616c72656164792073746172746564000000000000600082015250565b6000614393601a83613729565b915061439e8261435d565b602082019050919050565b600060208201905081810360008301526143c281614386565b9050919050565b7f5374616b696e67206973206e6f74207374617274656420796574000000000000600082015250565b60006143ff601a83613729565b915061440a826143c9565b602082019050919050565b6000602082019050818103600083015261442e816143f2565b9050919050565b7f43616e6e6f74207374616b652030000000000000000000000000000000000000600082015250565b600061446b600e83613729565b915061447682614435565b602082019050919050565b6000602082019050818103600083015261449a8161445e565b9050919050565b7f5374616b696e6720706572696f64206f76657200000000000000000000000000600082015250565b60006144d7601383613729565b91506144e2826144a1565b602082019050919050565b60006020820190508181036000830152614506816144ca565b9050919050565b600060608201905061452260008301866136c7565b61452f60208301856136c7565b61453c60408301846135e6565b949350505050565b7f4d696e20456c696769626c6974792031306b0000000000000000000000000000600082015250565b600061457a601283613729565b915061458582614544565b602082019050919050565b600060208201905081810360008301526145a98161456d565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006145d7826145b0565b6145e181856145bb565b93506145f181856020860161373a565b6145fa8161376d565b840191505092915050565b600060c08201905061461a60008301896135e6565b61462760208301886135e6565b61463460408301876135e6565b61464160608301866135e6565b818103608083015261465381856145cc565b905061466260a08301846136c7565b979650505050505050565b600060a08201905061468260008301886135e6565b61468f60208301876135e6565b61469c60408301866135e6565b6146a960608301856136c7565b81810360808301526146bb81846145cc565b90509695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614723602683613729565b915061472e826146c7565b604082019050919050565b6000602082019050818103600083015261475281614716565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061478f602083613729565b915061479a82614759565b602082019050919050565b600060208201905081810360008301526147be81614782565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006147fb601d83613729565b9150614806826147c5565b602082019050919050565b6000602082019050818103600083015261482a816147ee565b9050919050565b600081905092915050565b50565b600061484c600083614831565b91506148578261483c565b600082019050919050565b600061486d8261483f565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006148d3603a83613729565b91506148de82614877565b604082019050919050565b60006020820190508181036000830152614902816148c6565b905091905056fea26469706673582212208c9d4254d9fc79e4236a7d66ea0c907e8d17005ead06f123996bd33615fe7cc764736f6c63430008080033

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

0000000000000000000000006d8f7ac13e8c2944d27e0f9bc6aa0122f2ec138400000000000000000000000000000000000000000000000000000000003b538000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002184e4780ae760af1b662fb80e52cec9b5e2b8190000000000000000000000009f9c7a726d16e6e630c9500f5df8b3902b9ba2a6

-----Decoded View---------------
Arg [0] : _stakeToken (address): 0x6D8f7Ac13E8c2944D27e0f9BC6aA0122f2eC1384
Arg [1] : _duration (uint256): 3888000
Arg [2] : _unboundingDuration (uint256): 0
Arg [3] : s (address): 0x2184E4780ae760af1b662Fb80e52CEC9b5e2B819
Arg [4] : m (address): 0x9F9c7a726D16e6e630c9500f5DF8b3902B9BA2A6

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000006d8f7ac13e8c2944d27e0f9bc6aa0122f2ec1384
Arg [1] : 00000000000000000000000000000000000000000000000000000000003b5380
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000002184e4780ae760af1b662fb80e52cec9b5e2b819
Arg [4] : 0000000000000000000000009f9c7a726d16e6e630c9500f5df8b3902b9ba2a6


Deployed Bytecode Sourcemap

20046:13289:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33315:9;33299:14;;:25;;;;;;;:::i;:::-;;;;;;;;20046:13289;;;;;23604:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24834:1033;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31050:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20198:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20723:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32353:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20790:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28155:174;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20763:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30875:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29939:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25875:632;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30190:310;;;;;;;;;;;;;:::i;:::-;;32452:251;;;;;;;;;;;;;:::i;:::-;;23183:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28337:683;;;;;;;;;;;;;:::i;:::-;;20165:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20448:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27675:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31926:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5614:103;;;;;;;;;;;;;:::i;:::-;;20311:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23465:131;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20577:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30527:340;;;;;;;;;;;;;:::i;:::-;;4973:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20398:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31570:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23988:838;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21248:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;32711:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20826:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31804:114;;;;;;;;;;;;;:::i;:::-;;21346:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;20638:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29048:454;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20505:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29797:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26515:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29510:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30077:105;;;;;;;;;;;;;:::i;:::-;;20360:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5872:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31389:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31219:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27596:71;;;;;;;;;;;;;:::i;:::-;;20232:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23308:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23604:376;23658:7;23678:27;23814:14;:12;:14::i;:::-;23779:5;:14;23785:7;23779:14;;;;;;;;;;;;;;;:29;;;23751:26;:24;:26::i;:::-;:58;;;;:::i;:::-;23708:5;:14;23714:7;23708:14;;;;;;;;;;;;;;;:39;;;:102;;;;:::i;:::-;:121;;;;:::i;:::-;23678:151;;23935:5;:14;23941:7;23935:14;;;;;;;;;;;;;;;:22;;;20490:8;20436:5;23863:19;23862:35;;;;:::i;:::-;:53;;;;:::i;:::-;:110;;;;:::i;:::-;23842:130;;;23604:376;;;:::o;24834:1033::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;24967:11:::1;22282:1;22263:21;;:7;:21;;;22259:94;;22326:15;22333:7;22326:6;:15::i;:::-;22301:5;:14;22307:7;22301:14;;;;;;;;;;;;;;;:22;;:40;;;;22259:94;22395:26;:24;:26::i;:::-;22363:5;:14;22369:7;22363:14;;;;;;;;;;;;;;;:29;;:58;;;;25013:1:::2;25004:6;:10;24996:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;25102:6;25069:5;:18;25075:11;25069:18;;;;;;;;;;;;;;;:29;;;:39;;25047:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;25262:6;25216:5;:18;25222:11;25216:18;;;;;;;;;;;;;;;:29;;;:63;;;;:::i;:::-;25184:5;:18;25190:11;25184:18;;;;;;;;;;;;;;;:29;;:95;;;;25307:4;25296:15;;:7;:15;;;25292:528;;;25328:32;20436:5;25390:33;;25363:6;:61;;;;:::i;:::-;:93;;;;:::i;:::-;25328:128;;25481:24;25471:34;;;;;:::i;:::-;;;25547:24;25520:23;;:51;;;;;;;:::i;:::-;;;;;;;;25313:270;25292:528;;;25726:15;20546:6;25630:5;:18;25636:11;25630:18;;;;;;;;;;;;;;;:30;;;:92;;;;:::i;:::-;:111;;25604:204;;;;;;;;;;;;:::i;:::-;;;;;;;;;25292:528;25830:29;25839:11;25852:6;25830:8;:29::i;:::-;22192:1:::1;24834:1033:::0;;;:::o;31050:161::-;4859:13;:11;:13::i;:::-;31184:19:::1;31163:18;;:40;;;;;;;;;;;;;;;;;;31050:161:::0;:::o;20198:27::-;;;;:::o;20723:33::-;;;;;;;;;;;;;:::o;32353:91::-;32397:7;32424:12;;32417:19;;32353:91;:::o;20790:23::-;;;;;;;;;;;;;:::o;28155:174::-;28227:7;28312:9;;28305:16;;28155:174;:::o;20763:20::-;;;;;;;;;;;;;:::o;30875:167::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;30984:1:::1;30978:3;:7;30970:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;31031:3;31019:9;:15;;;;30875:167:::0;:::o;29939:130::-;30003:7;30030:11;:17;30042:4;30030:17;;;;;;;;;;;;;;;:31;;;30023:38;;29939:130;;;:::o;25875:632::-;25946:12;:10;:12::i;:::-;22282:1;22263:21;;:7;:21;;;22259:94;;22326:15;22333:7;22326:6;:15::i;:::-;22301:5;:14;22307:7;22301:14;;;;;;;;;;;;;;;:22;;:40;;;;22259:94;22395:26;:24;:26::i;:::-;22363:5;:14;22369:7;22363:14;;;;;;;;;;;;;;;:29;;:58;;;;25993:1:::1;25984:6;:10;25976:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;26083:6;26049:5;:19;26055:12;:10;:12::i;:::-;26049:19;;;;;;;;;;;;;;;:30;;;:40;;26027:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;26276:15;20546:6;26187:5;:19;26193:12;:10;:12::i;:::-;26187:19;;;;;;;;;;;;;;;:31;;;:85;;;;:::i;:::-;:104;;26165:185;;;;;;;;;;;;:::i;:::-;;;;;;;;;26441:6;26394:5;:19;26400:12;:10;:12::i;:::-;26394:19;;;;;;;;;;;;;;;:30;;;:64;;;;:::i;:::-;26361:5;:19;26367:12;:10;:12::i;:::-;26361:19;;;;;;;;;;;;;;;:30;;:97;;;;26469:30;26478:12;:10;:12::i;:::-;26492:6;26469:8;:30::i;:::-;25875:632:::0;;:::o;30190:310::-;30231:12;:10;:12::i;:::-;22282:1;22263:21;;:7;:21;;;22259:94;;22326:15;22333:7;22326:6;:15::i;:::-;22301:5;:14;22307:7;22301:14;;;;;;;;;;;;;;;:22;;:40;;;;22259:94;22395:26;:24;:26::i;:::-;22363:5;:14;22369:7;22363:14;;;;;;;;;;;;;;;:29;;:58;;;;30256:14:::1;30273:5;:19;30279:12;:10;:12::i;:::-;30273:19;;;;;;;;;;;;;;;:27;;;30256:44;;30324:1;30315:6;:10;30311:182;;;30372:1;30342:5;:19;30348:12;:10;:12::i;:::-;30342:19;;;;;;;;;;;;;;;:27;;:31;;;;30388:10;;;;;;;;;;;:19;;;30408:12;:10;:12::i;:::-;30422:6;30388:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30460:12;:10;:12::i;:::-;30449:32;;;30474:6;30449:32;;;;;;:::i;:::-;;;;;;;;30311:182;30245:255;30190:310:::0;:::o;32452:251::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;32523:11:::1;32537:23;;32523:37;;32597:1;32571:23;:27;;;;32616:10;;;;;;;;;;;32609:27;;;32637:12;:10;:12::i;:::-;32651:3;32609:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32691:3;32671:24;;;;;;;;;;32512:191;32452:251::o:0;23183:117::-;23278:13;23183:117;:::o;28337:683::-;28388:30;28421:11;:25;28433:12;:10;:12::i;:::-;28421:25;;;;;;;;;;;;;;;28388:58;;28514:1;28481:14;:30;;;:34;28459:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28622:14;:28;;;28603:15;:47;;28581:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;28721:28;28752:14;:30;;;28721:61;;28828:1;28795:14;:30;;:34;;;;28871:1;28840:14;:28;;:32;;;;28885:10;;;;;;;;;;;:19;;;28905:12;:10;:12::i;:::-;28919:20;28885:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28977:12;:10;:12::i;:::-;28956:56;;;28991:20;28956:56;;;;;;:::i;:::-;;;;;;;;28377:643;;28337:683::o;20165:24::-;;;;;;;;;;;;;:::o;20448:50::-;20490:8;20448:50;:::o;27675:100::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27752:15:::1;27762:4;27752:9;:15::i;:::-;27675:100:::0;:::o;31926:419::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;32104:7:::1;:14;32082:11;:18;:36;32074:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32159:9;32154:184;32178:11;:18;32174:1;:22;32154:184;;;32301:7;32309:1;32301:10;;;;;;;;:::i;:::-;;;;;;;;32251:5;:21;32257:11;32269:1;32257:14;;;;;;;;:::i;:::-;;;;;;;;32251:21;;;;;;;;;;;;;;;:29;;;32250:76;;;;:::i;:::-;32218:5;:21;32224:11;32236:1;32224:14;;;;;;;;:::i;:::-;;;;;;;;32218:21;;;;;;;;;;;;;;;:29;;:108;;;;32198:3;;;;;:::i;:::-;;;;32154:184;;;;31926:419:::0;;:::o;5614:103::-;4859:13;:11;:13::i;:::-;5679:30:::1;5706:1;5679:18;:30::i;:::-;5614:103::o:0;20311:42::-;;;;:::o;23465:131::-;23522:7;23549:39;23558:15;23575:12;;23549:8;:39::i;:::-;23542:46;;23465:131;:::o;20577:54::-;;;;:::o;30527:340::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;30642:1:::1;22282::::0;22263:21:::1;;:7;:21;;;22259:94;;22326:15;22333:7;22326:6;:15::i;:::-;22301:5;:14;22307:7;22301:14;;;;;;;;;;;;;;;:22;;:40;;;;22259:94;22395:26;:24;:26::i;:::-;22363:5;:14;22369:7;22363:14;;;;;;;;;;;;;;;:29;;:58;;;;30671:16:::2;;;;;;;;;;;30670:17;30662:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;30748:4;30729:16;;:23;;;;;;;;;;;;;;;;;;30795:8;;30778:15;:26;;;;:::i;:::-;30763:12;:41;;;;30820:39;30846:12;;30820:39;;;;;;:::i;:::-;;;;;;;;22192:1:::1;30527:340::o:0;4973:87::-;5019:7;5046:6;;;;;;;;;;;5039:13;;4973:87;:::o;20398:43::-;20436:5;20398:43;:::o;31570:226::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;31754:34:::1;31718:33;:70;;;;31570:226:::0;:::o;23988:838::-;24059:12;:10;:12::i;:::-;22282:1;22263:21;;:7;:21;;;22259:94;;22326:15;22333:7;22326:6;:15::i;:::-;22301:5;:14;22307:7;22301:14;;;;;;;;;;;;;;;:22;;:40;;;;22259:94;22395:26;:24;:26::i;:::-;22363:5;:14;22369:7;22363:14;;;;;;;;;;;;;;;:29;;:58;;;;24097:16:::1;;;;;;;;;;;24089:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;24172:1;24163:6;:10;24155:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;24227:12;;24211:15;:28;24203:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;24477:6;24460:12;;:24;;;;;;;:::i;:::-;;;;;;;;24576:6;24530:5;:19;24536:12;:10;:12::i;:::-;24530:19;;;;;;;;;;;;;;;:30;;;:63;;;;:::i;:::-;24497:5;:19;24503:12;:10;:12::i;:::-;24497:19;;;;;;;;;;;;;;;:30;;:96;;;;24688:15;24654:5;:19;24660:12;:10;:12::i;:::-;24654:19;;;;;;;;;;;;;;;:31;;:49;;;;24714:10;;;;;;;;;;;:23;;;24738:12;:10;:12::i;:::-;24760:4;24767:6;24714:60;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24797:12;:10;:12::i;:::-;24790:28;;;24811:6;24790:28;;;;;;:::i;:::-;;;;;;;;23988:838:::0;;:::o;21248:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32711:219::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;32842:5:::1;32835:22;;;32858:12;:10;:12::i;:::-;32872:6;32835:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32915:6;32908:5;32895:27;;;;;;;;;;;;32711:219:::0;;:::o;20826:36::-;;;;;;;;;;;;;:::o;31804:114::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;31895:15:::1;31880:12;:30;;;;31804:114::o:0;21346:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20638:29::-;;;;:::o;29048:454::-;29234:9;;29203:5;:17;29209:10;29203:17;;;;;;;;;;;;;;;:28;;;:40;29195:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29285:8;;;;;;;;;;;29280:13;;:1;:13;;;29277:201;;;29313:1;29305:20;;;29327:5;29334:3;29339:2;29343;29347:9;29358:7;29305:61;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29277:201;;;29392:5;;;;;;;;;;;29387:10;;:1;:10;;;29384:94;;;29421:1;29413:21;;;29435:5;29441:3;29445:2;29448:7;29456:9;29413:53;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29384:94;29277:201;29048:454;;;;;;;:::o;20505:47::-;20546:6;20505:47;:::o;29797:134::-;29863:7;29890:11;:17;29902:4;29890:17;;;;;;;;;;;;;;;:33;;;29883:40;;29797:134;;;:::o;26515:128::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;26613:1:::1;26605:5;;:9;;;;;;;;;;;;;;;;;;26634:1;26625:8;;:10;;;;;;;;;;;;;;;;;;26515:128:::0;;:::o;29510:279::-;29615:7;29663:11;:17;29675:4;29663:17;;;;;;;;;;;;;;;:31;;;29644:15;:50;29640:123;;29718:11;:17;29730:4;29718:17;;;;;;;;;;;;;;;:33;;;29711:40;;;;29640:123;29780:1;29773:8;;29510:279;;;;:::o;30077:105::-;30113:39;30121:5;:19;30127:12;:10;:12::i;:::-;30121:19;;;;;;;;;;;;;;;:30;;;30113:7;:39::i;:::-;30163:11;:9;:11::i;:::-;30077:105::o;20360:31::-;;;;:::o;5872:201::-;4859:13;:11;:13::i;:::-;5981:1:::1;5961:22;;:8;:22;;;;5953:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6037:28;6056:8;6037:18;:28::i;:::-;5872:201:::0;:::o;31389:173::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;31535:19:::1;31514:18;:40;;;;31389:173:::0;:::o;31219:162::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;31312:9:::1;31301:8;:20;;;;31364:8;;31347:15;:26;;;;:::i;:::-;31332:12;:41;;;;31219:162:::0;:::o;27596:71::-;27636:23;27646:12;:10;:12::i;:::-;27636:9;:23::i;:::-;27596:71::o;20232:37::-;;;;:::o;23308:149::-;23393:20;;:::i;:::-;23438:5;:11;23444:4;23438:11;;;;;;;;;;;;;;;23431:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23308:149;;;:::o;3524:98::-;3577:7;3604:10;3597:17;;3524:98;:::o;26651:937::-;26740:15;26779:12;;20436:5;26758:6;:20;;;;:::i;:::-;:33;;;;:::i;:::-;26740:51;;20436:5;26828:7;26813:14;;:22;;;;:::i;:::-;26812:38;;;;:::i;:::-;26802:48;;26891:7;26876:14;;:22;;;;:::i;:::-;26861:14;:37;;;;26939:6;26924:12;;:22;;;;:::i;:::-;26909:12;:37;;;;26959:11;:9;:11::i;:::-;27009:1;26987:18;;:23;26983:551;;;27027:10;;;;;;;;;;;:19;;;27047:11;27060:6;27027:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27082:43;27103:11;27117:7;27082:12;:43::i;:::-;26983:551;;;27172:30;27242:18;;27205:15;:70;;;;:::i;:::-;27172:103;;27290:30;27323:11;:24;27335:11;27323:24;;;;;;;;;;;;;;;27290:57;;27447:6;27396:14;:30;;;27395:59;;;;:::i;:::-;27362:14;:30;;:92;;;;27500:22;27469:14;:28;;:53;;;;27157:377;;26983:551;27560:11;27551:29;;;27573:6;27551:29;;;;;;:::i;:::-;;;;;;;;26729:859;26651:937;;:::o;5138:132::-;5213:12;:10;:12::i;:::-;5202:23;;:7;:5;:7::i;:::-;:23;;;5194:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5138:132::o;27783:364::-;27838:4;22282:1;22263:21;;:7;:21;;;22259:94;;22326:15;22333:7;22326:6;:15::i;:::-;22301:5;:14;22307:7;22301:14;;;;;;;;;;;;;;;:22;;:40;;;;22259:94;22395:26;:24;:26::i;:::-;22363:5;:14;22369:7;22363:14;;;;;;;;;;;;;;;:29;;:58;;;;27855:14:::1;27872:5;:11;27878:4;27872:11;;;;;;;;;;;;;;;:19;;;27855:36;;27915:1;27906:6;:10;27902:238;;;27955:1;27933:5;:11;27939:4;27933:11;;;;;;;;;;;;;;;:19;;:23;;;;28020:6;27996:5;:11;28002:4;27996:11;;;;;;;;;;;;;;;:22;;;:31;;;;:::i;:::-;27971:5;:11;27977:4;27971:11;;;;;;;;;;;;;;;:22;;:56;;;;28071:6;28057:12;;:21;;;;:::i;:::-;28042:12;:36;;;;28115:4;28098:30;;;28121:6;28098:30;;;;;;:::i;:::-;;;;;;;;27902:238;27844:303;27783:364:::0;;:::o;6233:191::-;6307:16;6326:6;;;;;;;;;;;6307:25;;6352:8;6343:6;;:17;;;;;;;;;;;;;;;;;;6407:8;6376:40;;6397:8;6376:40;;;;;;;;;;;;6296:128;6233:191;:::o;7069:106::-;7127:7;7158:1;7154;:5;:13;;7166:1;7154:13;;;7162:1;7154:13;7147:20;;7069:106;;;;:::o;32936:320::-;33054:6;33029:21;:31;;33021:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33108:12;33126:9;:14;;33148:6;33126:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33107:52;;;33178:7;33170:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;33010:246;32936:320;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:180::-;138:77;135:1;128:88;235:4;232:1;225:15;259:4;256:1;249:15;276:305;316:3;335:20;353:1;335:20;:::i;:::-;330:25;;369:20;387:1;369:20;:::i;:::-;364:25;;523:1;455:66;451:74;448:1;445:81;442:107;;;529:18;;:::i;:::-;442:107;573:1;570;566:9;559:16;;276:305;;;;:::o;587:75::-;620:6;653:2;647:9;637:19;;587:75;:::o;668:117::-;777:1;774;767:12;791:117;900:1;897;890:12;914:126;951:7;991:42;984:5;980:54;969:65;;914:126;;;:::o;1046:96::-;1083:7;1112:24;1130:5;1112:24;:::i;:::-;1101:35;;1046:96;;;:::o;1148:122::-;1221:24;1239:5;1221:24;:::i;:::-;1214:5;1211:35;1201:63;;1260:1;1257;1250:12;1201:63;1148:122;:::o;1276:139::-;1322:5;1360:6;1347:20;1338:29;;1376:33;1403:5;1376:33;:::i;:::-;1276:139;;;;:::o;1421:329::-;1480:6;1529:2;1517:9;1508:7;1504:23;1500:32;1497:119;;;1535:79;;:::i;:::-;1497:119;1655:1;1680:53;1725:7;1716:6;1705:9;1701:22;1680:53;:::i;:::-;1670:63;;1626:117;1421:329;;;;:::o;1756:118::-;1843:24;1861:5;1843:24;:::i;:::-;1838:3;1831:37;1756:118;;:::o;1880:222::-;1973:4;2011:2;2000:9;1996:18;1988:26;;2024:71;2092:1;2081:9;2077:17;2068:6;2024:71;:::i;:::-;1880:222;;;;:::o;2108:122::-;2181:24;2199:5;2181:24;:::i;:::-;2174:5;2171:35;2161:63;;2220:1;2217;2210:12;2161:63;2108:122;:::o;2236:139::-;2282:5;2320:6;2307:20;2298:29;;2336:33;2363:5;2336:33;:::i;:::-;2236:139;;;;:::o;2381:90::-;2415:7;2458:5;2451:13;2444:21;2433:32;;2381:90;;;:::o;2477:116::-;2547:21;2562:5;2547:21;:::i;:::-;2540:5;2537:32;2527:60;;2583:1;2580;2573:12;2527:60;2477:116;:::o;2599:133::-;2642:5;2680:6;2667:20;2658:29;;2696:30;2720:5;2696:30;:::i;:::-;2599:133;;;;:::o;2738:613::-;2812:6;2820;2828;2877:2;2865:9;2856:7;2852:23;2848:32;2845:119;;;2883:79;;:::i;:::-;2845:119;3003:1;3028:53;3073:7;3064:6;3053:9;3049:22;3028:53;:::i;:::-;3018:63;;2974:117;3130:2;3156:53;3201:7;3192:6;3181:9;3177:22;3156:53;:::i;:::-;3146:63;;3101:118;3258:2;3284:50;3326:7;3317:6;3306:9;3302:22;3284:50;:::i;:::-;3274:60;;3229:115;2738:613;;;;;:::o;3357:118::-;3444:24;3462:5;3444:24;:::i;:::-;3439:3;3432:37;3357:118;;:::o;3481:222::-;3574:4;3612:2;3601:9;3597:18;3589:26;;3625:71;3693:1;3682:9;3678:17;3669:6;3625:71;:::i;:::-;3481:222;;;;:::o;3709:329::-;3768:6;3817:2;3805:9;3796:7;3792:23;3788:32;3785:119;;;3823:79;;:::i;:::-;3785:119;3943:1;3968:53;4013:7;4004:6;3993:9;3989:22;3968:53;:::i;:::-;3958:63;;3914:117;3709:329;;;;:::o;4044:99::-;4096:6;4130:5;4124:12;4114:22;;4044:99;;;:::o;4149:169::-;4233:11;4267:6;4262:3;4255:19;4307:4;4302:3;4298:14;4283:29;;4149:169;;;;:::o;4324:307::-;4392:1;4402:113;4416:6;4413:1;4410:13;4402:113;;;4501:1;4496:3;4492:11;4486:18;4482:1;4477:3;4473:11;4466:39;4438:2;4435:1;4431:10;4426:15;;4402:113;;;4533:6;4530:1;4527:13;4524:101;;;4613:1;4604:6;4599:3;4595:16;4588:27;4524:101;4373:258;4324:307;;;:::o;4637:102::-;4678:6;4729:2;4725:7;4720:2;4713:5;4709:14;4705:28;4695:38;;4637:102;;;:::o;4745:364::-;4833:3;4861:39;4894:5;4861:39;:::i;:::-;4916:71;4980:6;4975:3;4916:71;:::i;:::-;4909:78;;4996:52;5041:6;5036:3;5029:4;5022:5;5018:16;4996:52;:::i;:::-;5073:29;5095:6;5073:29;:::i;:::-;5068:3;5064:39;5057:46;;4837:272;4745:364;;;;:::o;5115:313::-;5228:4;5266:2;5255:9;5251:18;5243:26;;5315:9;5309:4;5305:20;5301:1;5290:9;5286:17;5279:47;5343:78;5416:4;5407:6;5343:78;:::i;:::-;5335:86;;5115:313;;;;:::o;5434:60::-;5462:3;5483:5;5476:12;;5434:60;;;:::o;5500:142::-;5550:9;5583:53;5601:34;5610:24;5628:5;5610:24;:::i;:::-;5601:34;:::i;:::-;5583:53;:::i;:::-;5570:66;;5500:142;;;:::o;5648:126::-;5698:9;5731:37;5762:5;5731:37;:::i;:::-;5718:50;;5648:126;;;:::o;5780:139::-;5843:9;5876:37;5907:5;5876:37;:::i;:::-;5863:50;;5780:139;;;:::o;5925:157::-;6025:50;6069:5;6025:50;:::i;:::-;6020:3;6013:63;5925:157;;:::o;6088:248::-;6194:4;6232:2;6221:9;6217:18;6209:26;;6245:84;6326:1;6315:9;6311:17;6302:6;6245:84;:::i;:::-;6088:248;;;;:::o;6342:117::-;6451:1;6448;6441:12;6465:180;6513:77;6510:1;6503:88;6610:4;6607:1;6600:15;6634:4;6631:1;6624:15;6651:281;6734:27;6756:4;6734:27;:::i;:::-;6726:6;6722:40;6864:6;6852:10;6849:22;6828:18;6816:10;6813:34;6810:62;6807:88;;;6875:18;;:::i;:::-;6807:88;6915:10;6911:2;6904:22;6694:238;6651:281;;:::o;6938:129::-;6972:6;6999:20;;:::i;:::-;6989:30;;7028:33;7056:4;7048:6;7028:33;:::i;:::-;6938:129;;;:::o;7073:311::-;7150:4;7240:18;7232:6;7229:30;7226:56;;;7262:18;;:::i;:::-;7226:56;7312:4;7304:6;7300:17;7292:25;;7372:4;7366;7362:15;7354:23;;7073:311;;;:::o;7390:117::-;7499:1;7496;7489:12;7530:710;7626:5;7651:81;7667:64;7724:6;7667:64;:::i;:::-;7651:81;:::i;:::-;7642:90;;7752:5;7781:6;7774:5;7767:21;7815:4;7808:5;7804:16;7797:23;;7868:4;7860:6;7856:17;7848:6;7844:30;7897:3;7889:6;7886:15;7883:122;;;7916:79;;:::i;:::-;7883:122;8031:6;8014:220;8048:6;8043:3;8040:15;8014:220;;;8123:3;8152:37;8185:3;8173:10;8152:37;:::i;:::-;8147:3;8140:50;8219:4;8214:3;8210:14;8203:21;;8090:144;8074:4;8069:3;8065:14;8058:21;;8014:220;;;8018:21;7632:608;;7530:710;;;;;:::o;8263:370::-;8334:5;8383:3;8376:4;8368:6;8364:17;8360:27;8350:122;;8391:79;;:::i;:::-;8350:122;8508:6;8495:20;8533:94;8623:3;8615:6;8608:4;8600:6;8596:17;8533:94;:::i;:::-;8524:103;;8340:293;8263:370;;;;:::o;8639:311::-;8716:4;8806:18;8798:6;8795:30;8792:56;;;8828:18;;:::i;:::-;8792:56;8878:4;8870:6;8866:17;8858:25;;8938:4;8932;8928:15;8920:23;;8639:311;;;:::o;8973:710::-;9069:5;9094:81;9110:64;9167:6;9110:64;:::i;:::-;9094:81;:::i;:::-;9085:90;;9195:5;9224:6;9217:5;9210:21;9258:4;9251:5;9247:16;9240:23;;9311:4;9303:6;9299:17;9291:6;9287:30;9340:3;9332:6;9329:15;9326:122;;;9359:79;;:::i;:::-;9326:122;9474:6;9457:220;9491:6;9486:3;9483:15;9457:220;;;9566:3;9595:37;9628:3;9616:10;9595:37;:::i;:::-;9590:3;9583:50;9662:4;9657:3;9653:14;9646:21;;9533:144;9517:4;9512:3;9508:14;9501:21;;9457:220;;;9461:21;9075:608;;8973:710;;;;;:::o;9706:370::-;9777:5;9826:3;9819:4;9811:6;9807:17;9803:27;9793:122;;9834:79;;:::i;:::-;9793:122;9951:6;9938:20;9976:94;10066:3;10058:6;10051:4;10043:6;10039:17;9976:94;:::i;:::-;9967:103;;9783:293;9706:370;;;;:::o;10082:894::-;10200:6;10208;10257:2;10245:9;10236:7;10232:23;10228:32;10225:119;;;10263:79;;:::i;:::-;10225:119;10411:1;10400:9;10396:17;10383:31;10441:18;10433:6;10430:30;10427:117;;;10463:79;;:::i;:::-;10427:117;10568:78;10638:7;10629:6;10618:9;10614:22;10568:78;:::i;:::-;10558:88;;10354:302;10723:2;10712:9;10708:18;10695:32;10754:18;10746:6;10743:30;10740:117;;;10776:79;;:::i;:::-;10740:117;10881:78;10951:7;10942:6;10931:9;10927:22;10881:78;:::i;:::-;10871:88;;10666:303;10082:894;;;;;:::o;10982:553::-;11159:4;11197:3;11186:9;11182:19;11174:27;;11211:71;11279:1;11268:9;11264:17;11255:6;11211:71;:::i;:::-;11292:72;11360:2;11349:9;11345:18;11336:6;11292:72;:::i;:::-;11374;11442:2;11431:9;11427:18;11418:6;11374:72;:::i;:::-;11456;11524:2;11513:9;11509:18;11500:6;11456:72;:::i;:::-;10982:553;;;;;;;:::o;11541:474::-;11609:6;11617;11666:2;11654:9;11645:7;11641:23;11637:32;11634:119;;;11672:79;;:::i;:::-;11634:119;11792:1;11817:53;11862:7;11853:6;11842:9;11838:22;11817:53;:::i;:::-;11807:63;;11763:117;11919:2;11945:53;11990:7;11981:6;11970:9;11966:22;11945:53;:::i;:::-;11935:63;;11890:118;11541:474;;;;;:::o;12021:109::-;12102:21;12117:5;12102:21;:::i;:::-;12097:3;12090:34;12021:109;;:::o;12136:210::-;12223:4;12261:2;12250:9;12246:18;12238:26;;12274:65;12336:1;12325:9;12321:17;12312:6;12274:65;:::i;:::-;12136:210;;;;:::o;12352:332::-;12473:4;12511:2;12500:9;12496:18;12488:26;;12524:71;12592:1;12581:9;12577:17;12568:6;12524:71;:::i;:::-;12605:72;12673:2;12662:9;12658:18;12649:6;12605:72;:::i;:::-;12352:332;;;;;:::o;12690:117::-;12799:1;12796;12789:12;12813:307;12874:4;12964:18;12956:6;12953:30;12950:56;;;12986:18;;:::i;:::-;12950:56;13024:29;13046:6;13024:29;:::i;:::-;13016:37;;13108:4;13102;13098:15;13090:23;;12813:307;;;:::o;13126:154::-;13210:6;13205:3;13200;13187:30;13272:1;13263:6;13258:3;13254:16;13247:27;13126:154;;;:::o;13286:410::-;13363:5;13388:65;13404:48;13445:6;13404:48;:::i;:::-;13388:65;:::i;:::-;13379:74;;13476:6;13469:5;13462:21;13514:4;13507:5;13503:16;13552:3;13543:6;13538:3;13534:16;13531:25;13528:112;;;13559:79;;:::i;:::-;13528:112;13649:41;13683:6;13678:3;13673;13649:41;:::i;:::-;13369:327;13286:410;;;;;:::o;13715:338::-;13770:5;13819:3;13812:4;13804:6;13800:17;13796:27;13786:122;;13827:79;;:::i;:::-;13786:122;13944:6;13931:20;13969:78;14043:3;14035:6;14028:4;14020:6;14016:17;13969:78;:::i;:::-;13960:87;;13776:277;13715:338;;;;:::o;14059:1381::-;14181:6;14189;14197;14205;14213;14221;14229;14278:3;14266:9;14257:7;14253:23;14249:33;14246:120;;;14285:79;;:::i;:::-;14246:120;14405:1;14430:53;14475:7;14466:6;14455:9;14451:22;14430:53;:::i;:::-;14420:63;;14376:117;14532:2;14558:53;14603:7;14594:6;14583:9;14579:22;14558:53;:::i;:::-;14548:63;;14503:118;14660:2;14686:53;14731:7;14722:6;14711:9;14707:22;14686:53;:::i;:::-;14676:63;;14631:118;14788:2;14814:53;14859:7;14850:6;14839:9;14835:22;14814:53;:::i;:::-;14804:63;;14759:118;14916:3;14943:53;14988:7;14979:6;14968:9;14964:22;14943:53;:::i;:::-;14933:63;;14887:119;15045:3;15072:53;15117:7;15108:6;15097:9;15093:22;15072:53;:::i;:::-;15062:63;;15016:119;15202:3;15191:9;15187:19;15174:33;15234:18;15226:6;15223:30;15220:117;;;15256:79;;:::i;:::-;15220:117;15361:62;15415:7;15406:6;15395:9;15391:22;15361:62;:::i;:::-;15351:72;;15145:288;14059:1381;;;;;;;;;;:::o;15446:474::-;15514:6;15522;15571:2;15559:9;15550:7;15546:23;15542:32;15539:119;;;15577:79;;:::i;:::-;15539:119;15697:1;15722:53;15767:7;15758:6;15747:9;15743:22;15722:53;:::i;:::-;15712:63;;15668:117;15824:2;15850:53;15895:7;15886:6;15875:9;15871:22;15850:53;:::i;:::-;15840:63;;15795:118;15446:474;;;;;:::o;15926:108::-;16003:24;16021:5;16003:24;:::i;:::-;15998:3;15991:37;15926:108;;:::o;16126:883::-;16275:4;16270:3;16266:14;16368:4;16361:5;16357:16;16351:23;16387:63;16444:4;16439:3;16435:14;16421:12;16387:63;:::i;:::-;16290:170;16545:4;16538:5;16534:16;16528:23;16564:63;16621:4;16616:3;16612:14;16598:12;16564:63;:::i;:::-;16470:167;16729:4;16722:5;16718:16;16712:23;16748:63;16805:4;16800:3;16796:14;16782:12;16748:63;:::i;:::-;16647:174;16910:4;16903:5;16899:16;16893:23;16929:63;16986:4;16981:3;16977:14;16963:12;16929:63;:::i;:::-;16831:171;16244:765;16126:883;;:::o;17015:327::-;17160:4;17198:3;17187:9;17183:19;17175:27;;17212:123;17332:1;17321:9;17317:17;17308:6;17212:123;:::i;:::-;17015:327;;;;:::o;17348:191::-;17388:4;17408:20;17426:1;17408:20;:::i;:::-;17403:25;;17442:20;17460:1;17442:20;:::i;:::-;17437:25;;17481:1;17478;17475:8;17472:34;;;17486:18;;:::i;:::-;17472:34;17531:1;17528;17524:9;17516:17;;17348:191;;;;:::o;17545:348::-;17585:7;17608:20;17626:1;17608:20;:::i;:::-;17603:25;;17642:20;17660:1;17642:20;:::i;:::-;17637:25;;17830:1;17762:66;17758:74;17755:1;17752:81;17747:1;17740:9;17733:17;17729:105;17726:131;;;17837:18;;:::i;:::-;17726:131;17885:1;17882;17878:9;17867:20;;17545:348;;;;:::o;17899:180::-;17947:77;17944:1;17937:88;18044:4;18041:1;18034:15;18068:4;18065:1;18058:15;18085:185;18125:1;18142:20;18160:1;18142:20;:::i;:::-;18137:25;;18176:20;18194:1;18176:20;:::i;:::-;18171:25;;18215:1;18205:35;;18220:18;;:::i;:::-;18205:35;18262:1;18259;18255:9;18250:14;;18085:185;;;;:::o;18276:220::-;18416:34;18412:1;18404:6;18400:14;18393:58;18485:3;18480:2;18472:6;18468:15;18461:28;18276:220;:::o;18502:366::-;18644:3;18665:67;18729:2;18724:3;18665:67;:::i;:::-;18658:74;;18741:93;18830:3;18741:93;:::i;:::-;18859:2;18854:3;18850:12;18843:19;;18502:366;;;:::o;18874:419::-;19040:4;19078:2;19067:9;19063:18;19055:26;;19127:9;19121:4;19117:20;19113:1;19102:9;19098:17;19091:47;19155:131;19281:4;19155:131;:::i;:::-;19147:139;;18874:419;;;:::o;19299:167::-;19439:19;19435:1;19427:6;19423:14;19416:43;19299:167;:::o;19472:366::-;19614:3;19635:67;19699:2;19694:3;19635:67;:::i;:::-;19628:74;;19711:93;19800:3;19711:93;:::i;:::-;19829:2;19824:3;19820:12;19813:19;;19472:366;;;:::o;19844:419::-;20010:4;20048:2;20037:9;20033:18;20025:26;;20097:9;20091:4;20087:20;20083:1;20072:9;20068:17;20061:47;20125:131;20251:4;20125:131;:::i;:::-;20117:139;;19844:419;;;:::o;20269:224::-;20409:34;20405:1;20397:6;20393:14;20386:58;20478:7;20473:2;20465:6;20461:15;20454:32;20269:224;:::o;20499:366::-;20641:3;20662:67;20726:2;20721:3;20662:67;:::i;:::-;20655:74;;20738:93;20827:3;20738:93;:::i;:::-;20856:2;20851:3;20847:12;20840:19;;20499:366;;;:::o;20871:419::-;21037:4;21075:2;21064:9;21060:18;21052:26;;21124:9;21118:4;21114:20;21110:1;21099:9;21095:17;21088:47;21152:131;21278:4;21152:131;:::i;:::-;21144:139;;20871:419;;;:::o;21296:181::-;21436:33;21432:1;21424:6;21420:14;21413:57;21296:181;:::o;21483:366::-;21625:3;21646:67;21710:2;21705:3;21646:67;:::i;:::-;21639:74;;21722:93;21811:3;21722:93;:::i;:::-;21840:2;21835:3;21831:12;21824:19;;21483:366;;;:::o;21855:419::-;22021:4;22059:2;22048:9;22044:18;22036:26;;22108:9;22102:4;22098:20;22094:1;22083:9;22079:17;22072:47;22136:131;22262:4;22136:131;:::i;:::-;22128:139;;21855:419;;;:::o;22280:168::-;22420:20;22416:1;22408:6;22404:14;22397:44;22280:168;:::o;22454:366::-;22596:3;22617:67;22681:2;22676:3;22617:67;:::i;:::-;22610:74;;22693:93;22782:3;22693:93;:::i;:::-;22811:2;22806:3;22802:12;22795:19;;22454:366;;;:::o;22826:419::-;22992:4;23030:2;23019:9;23015:18;23007:26;;23079:9;23073:4;23069:20;23065:1;23054:9;23050:17;23043:47;23107:131;23233:4;23107:131;:::i;:::-;23099:139;;22826:419;;;:::o;23251:332::-;23372:4;23410:2;23399:9;23395:18;23387:26;;23423:71;23491:1;23480:9;23476:17;23467:6;23423:71;:::i;:::-;23504:72;23572:2;23561:9;23557:18;23548:6;23504:72;:::i;:::-;23251:332;;;;;:::o;23589:137::-;23643:5;23674:6;23668:13;23659:22;;23690:30;23714:5;23690:30;:::i;:::-;23589:137;;;;:::o;23732:345::-;23799:6;23848:2;23836:9;23827:7;23823:23;23819:32;23816:119;;;23854:79;;:::i;:::-;23816:119;23974:1;23999:61;24052:7;24043:6;24032:9;24028:22;23999:61;:::i;:::-;23989:71;;23945:125;23732:345;;;;:::o;24083:177::-;24223:29;24219:1;24211:6;24207:14;24200:53;24083:177;:::o;24266:366::-;24408:3;24429:67;24493:2;24488:3;24429:67;:::i;:::-;24422:74;;24505:93;24594:3;24505:93;:::i;:::-;24623:2;24618:3;24614:12;24607:19;;24266:366;;;:::o;24638:419::-;24804:4;24842:2;24831:9;24827:18;24819:26;;24891:9;24885:4;24881:20;24877:1;24866:9;24862:17;24855:47;24919:131;25045:4;24919:131;:::i;:::-;24911:139;;24638:419;;;:::o;25063:180::-;25203:32;25199:1;25191:6;25187:14;25180:56;25063:180;:::o;25249:366::-;25391:3;25412:67;25476:2;25471:3;25412:67;:::i;:::-;25405:74;;25488:93;25577:3;25488:93;:::i;:::-;25606:2;25601:3;25597:12;25590:19;;25249:366;;;:::o;25621:419::-;25787:4;25825:2;25814:9;25810:18;25802:26;;25874:9;25868:4;25864:20;25860:1;25849:9;25845:17;25838:47;25902:131;26028:4;25902:131;:::i;:::-;25894:139;;25621:419;;;:::o;26046:170::-;26186:22;26182:1;26174:6;26170:14;26163:46;26046:170;:::o;26222:366::-;26364:3;26385:67;26449:2;26444:3;26385:67;:::i;:::-;26378:74;;26461:93;26550:3;26461:93;:::i;:::-;26579:2;26574:3;26570:12;26563:19;;26222:366;;;:::o;26594:419::-;26760:4;26798:2;26787:9;26783:18;26775:26;;26847:9;26841:4;26837:20;26833:1;26822:9;26818:17;26811:47;26875:131;27001:4;26875:131;:::i;:::-;26867:139;;26594:419;;;:::o;27019:180::-;27067:77;27064:1;27057:88;27164:4;27161:1;27154:15;27188:4;27185:1;27178:15;27205:233;27244:3;27267:24;27285:5;27267:24;:::i;:::-;27258:33;;27313:66;27306:5;27303:77;27300:103;;;27383:18;;:::i;:::-;27300:103;27430:1;27423:5;27419:13;27412:20;;27205:233;;;:::o;27444:176::-;27584:28;27580:1;27572:6;27568:14;27561:52;27444:176;:::o;27626:366::-;27768:3;27789:67;27853:2;27848:3;27789:67;:::i;:::-;27782:74;;27865:93;27954:3;27865:93;:::i;:::-;27983:2;27978:3;27974:12;27967:19;;27626:366;;;:::o;27998:419::-;28164:4;28202:2;28191:9;28187:18;28179:26;;28251:9;28245:4;28241:20;28237:1;28226:9;28222:17;28215:47;28279:131;28405:4;28279:131;:::i;:::-;28271:139;;27998:419;;;:::o;28423:176::-;28563:28;28559:1;28551:6;28547:14;28540:52;28423:176;:::o;28605:366::-;28747:3;28768:67;28832:2;28827:3;28768:67;:::i;:::-;28761:74;;28844:93;28933:3;28844:93;:::i;:::-;28962:2;28957:3;28953:12;28946:19;;28605:366;;;:::o;28977:419::-;29143:4;29181:2;29170:9;29166:18;29158:26;;29230:9;29224:4;29220:20;29216:1;29205:9;29201:17;29194:47;29258:131;29384:4;29258:131;:::i;:::-;29250:139;;28977:419;;;:::o;29402:164::-;29542:16;29538:1;29530:6;29526:14;29519:40;29402:164;:::o;29572:366::-;29714:3;29735:67;29799:2;29794:3;29735:67;:::i;:::-;29728:74;;29811:93;29900:3;29811:93;:::i;:::-;29929:2;29924:3;29920:12;29913:19;;29572:366;;;:::o;29944:419::-;30110:4;30148:2;30137:9;30133:18;30125:26;;30197:9;30191:4;30187:20;30183:1;30172:9;30168:17;30161:47;30225:131;30351:4;30225:131;:::i;:::-;30217:139;;29944:419;;;:::o;30369:169::-;30509:21;30505:1;30497:6;30493:14;30486:45;30369:169;:::o;30544:366::-;30686:3;30707:67;30771:2;30766:3;30707:67;:::i;:::-;30700:74;;30783:93;30872:3;30783:93;:::i;:::-;30901:2;30896:3;30892:12;30885:19;;30544:366;;;:::o;30916:419::-;31082:4;31120:2;31109:9;31105:18;31097:26;;31169:9;31163:4;31159:20;31155:1;31144:9;31140:17;31133:47;31197:131;31323:4;31197:131;:::i;:::-;31189:139;;30916:419;;;:::o;31341:442::-;31490:4;31528:2;31517:9;31513:18;31505:26;;31541:71;31609:1;31598:9;31594:17;31585:6;31541:71;:::i;:::-;31622:72;31690:2;31679:9;31675:18;31666:6;31622:72;:::i;:::-;31704;31772:2;31761:9;31757:18;31748:6;31704:72;:::i;:::-;31341:442;;;;;;:::o;31789:168::-;31929:20;31925:1;31917:6;31913:14;31906:44;31789:168;:::o;31963:366::-;32105:3;32126:67;32190:2;32185:3;32126:67;:::i;:::-;32119:74;;32202:93;32291:3;32202:93;:::i;:::-;32320:2;32315:3;32311:12;32304:19;;31963:366;;;:::o;32335:419::-;32501:4;32539:2;32528:9;32524:18;32516:26;;32588:9;32582:4;32578:20;32574:1;32563:9;32559:17;32552:47;32616:131;32742:4;32616:131;:::i;:::-;32608:139;;32335:419;;;:::o;32760:98::-;32811:6;32845:5;32839:12;32829:22;;32760:98;;;:::o;32864:168::-;32947:11;32981:6;32976:3;32969:19;33021:4;33016:3;33012:14;32997:29;;32864:168;;;;:::o;33038:360::-;33124:3;33152:38;33184:5;33152:38;:::i;:::-;33206:70;33269:6;33264:3;33206:70;:::i;:::-;33199:77;;33285:52;33330:6;33325:3;33318:4;33311:5;33307:16;33285:52;:::i;:::-;33362:29;33384:6;33362:29;:::i;:::-;33357:3;33353:39;33346:46;;33128:270;33038:360;;;;:::o;33404:862::-;33655:4;33693:3;33682:9;33678:19;33670:27;;33707:71;33775:1;33764:9;33760:17;33751:6;33707:71;:::i;:::-;33788:72;33856:2;33845:9;33841:18;33832:6;33788:72;:::i;:::-;33870;33938:2;33927:9;33923:18;33914:6;33870:72;:::i;:::-;33952;34020:2;34009:9;34005:18;33996:6;33952:72;:::i;:::-;34072:9;34066:4;34062:20;34056:3;34045:9;34041:19;34034:49;34100:76;34171:4;34162:6;34100:76;:::i;:::-;34092:84;;34186:73;34254:3;34243:9;34239:19;34230:6;34186:73;:::i;:::-;33404:862;;;;;;;;;:::o;34272:751::-;34495:4;34533:3;34522:9;34518:19;34510:27;;34547:71;34615:1;34604:9;34600:17;34591:6;34547:71;:::i;:::-;34628:72;34696:2;34685:9;34681:18;34672:6;34628:72;:::i;:::-;34710;34778:2;34767:9;34763:18;34754:6;34710:72;:::i;:::-;34792;34860:2;34849:9;34845:18;34836:6;34792:72;:::i;:::-;34912:9;34906:4;34902:20;34896:3;34885:9;34881:19;34874:49;34940:76;35011:4;35002:6;34940:76;:::i;:::-;34932:84;;34272:751;;;;;;;;:::o;35029:225::-;35169:34;35165:1;35157:6;35153:14;35146:58;35238:8;35233:2;35225:6;35221:15;35214:33;35029:225;:::o;35260:366::-;35402:3;35423:67;35487:2;35482:3;35423:67;:::i;:::-;35416:74;;35499:93;35588:3;35499:93;:::i;:::-;35617:2;35612:3;35608:12;35601:19;;35260:366;;;:::o;35632:419::-;35798:4;35836:2;35825:9;35821:18;35813:26;;35885:9;35879:4;35875:20;35871:1;35860:9;35856:17;35849:47;35913:131;36039:4;35913:131;:::i;:::-;35905:139;;35632:419;;;:::o;36057:182::-;36197:34;36193:1;36185:6;36181:14;36174:58;36057:182;:::o;36245:366::-;36387:3;36408:67;36472:2;36467:3;36408:67;:::i;:::-;36401:74;;36484:93;36573:3;36484:93;:::i;:::-;36602:2;36597:3;36593:12;36586:19;;36245:366;;;:::o;36617:419::-;36783:4;36821:2;36810:9;36806:18;36798:26;;36870:9;36864:4;36860:20;36856:1;36845:9;36841:17;36834:47;36898:131;37024:4;36898:131;:::i;:::-;36890:139;;36617:419;;;:::o;37042:179::-;37182:31;37178:1;37170:6;37166:14;37159:55;37042:179;:::o;37227:366::-;37369:3;37390:67;37454:2;37449:3;37390:67;:::i;:::-;37383:74;;37466:93;37555:3;37466:93;:::i;:::-;37584:2;37579:3;37575:12;37568:19;;37227:366;;;:::o;37599:419::-;37765:4;37803:2;37792:9;37788:18;37780:26;;37852:9;37846:4;37842:20;37838:1;37827:9;37823:17;37816:47;37880:131;38006:4;37880:131;:::i;:::-;37872:139;;37599:419;;;:::o;38024:147::-;38125:11;38162:3;38147:18;;38024:147;;;;:::o;38177:114::-;;:::o;38297:398::-;38456:3;38477:83;38558:1;38553:3;38477:83;:::i;:::-;38470:90;;38569:93;38658:3;38569:93;:::i;:::-;38687:1;38682:3;38678:11;38671:18;;38297:398;;;:::o;38701:379::-;38885:3;38907:147;39050:3;38907:147;:::i;:::-;38900:154;;39071:3;39064:10;;38701:379;;;:::o;39086:245::-;39226:34;39222:1;39214:6;39210:14;39203:58;39295:28;39290:2;39282:6;39278:15;39271:53;39086:245;:::o;39337:366::-;39479:3;39500:67;39564:2;39559:3;39500:67;:::i;:::-;39493:74;;39576:93;39665:3;39576:93;:::i;:::-;39694:2;39689:3;39685:12;39678:19;;39337:366;;;:::o;39709:419::-;39875:4;39913:2;39902:9;39898:18;39890:26;;39962:9;39956:4;39952:20;39948:1;39937:9;39933:17;39926:47;39990:131;40116:4;39990:131;:::i;:::-;39982:139;;39709:419;;;:::o

Swarm Source

ipfs://8c9d4254d9fc79e4236a7d66ea0c907e8d17005ead06f123996bd33615fe7cc7

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.