Contract 0x31487d80abed475788c1fdcca53de631332e9ad1 1

Contract Overview

Balance:
0.010044444444445444 BNB

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xb11a9030557a91477c6c564007446e9eab3c6f3f1558c4da844d2c6f6e41d905Transfer135184142021-10-25 0:00:1513 hrs 13 mins ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0x275d648800efda70a70201be39c2d1d75713e9e6efa3ab83599b8ba42dc8adc5Transfer134896312021-10-24 0:00:171 day 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0xc11e51a038adc9c689012ebb3604780684043fb969050679c6e0d64016f790fbTransfer134321112021-10-22 0:00:153 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0xce68bab86676e476074342ebcd19a791ca90bf4eb4cbeb91df7d31880ad7e1fbTransfer133752392021-10-20 0:00:285 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0xd982fa658d4cda6a474f1133175049c7df555c8a30f5d501f02922d9b1f31cb0Transfer133464542021-10-19 0:00:166 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0x6a67c8878abff1bcf0cd839ba6725313d3f49e1bff8ac7873a6ed9712b388073Transfer133177982021-10-18 0:00:147 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0x5238dce496f37f44e353f3a4ff0cfae1a3c3d5370c63966c5eca3a9b6d9f65bdApprove132785662021-10-16 15:18:388 days 21 hrs ago0xa713a4d8791ff3e238607da4496c4c98251ea11c IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00045161
0x9d4aae5ecca29aba7382ed19471629cc4d80f788df1e7e0f6daae002b4a1fb37Transfer132602022021-10-16 0:00:149 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0xf46ef1cb87bc978d85d6e36abd171047625b8656ff320576c3196fdde0379a9cTransfer132314022021-10-15 0:00:1410 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0xf68dc2d0d40a0a433c590ed5c1f200d0c6c73ff573f1f66df2c0f894c92bc70bTransfer132029862021-10-14 0:00:1611 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0xcaa8581361d94554d9d4a2dc2de290d9ba6a3fd35e90e7aa2dd1e69b2a55f013Transfer131456382021-10-12 0:00:1413 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0x9d9cb4b86683f64d0dbc94359fa7704408c46d0c5c02122f8d6bade728322151Transfer131171712021-10-11 0:00:1514 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0xb50304e0cfbac796250bd24e94fd8653eb1a5c40cbb0a0cfd870ab9310d6e217Transfer130883722021-10-10 0:00:1815 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0x56651844dac07a578e69b6d855cc4ba5e0781438f226c017a2f4f690657007ffTransfer130595722021-10-09 0:00:1616 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0x163ef408aaa856891b3858357ba79df87117fddf8a67d74ad8fb8e6c19312dc7Transfer130308372021-10-08 0:00:1717 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0xfe5b0d81eaf7d5333e4e889b62e3d2ba04fe402cb5be918433364369e3b864e0Transfer130020402021-10-07 0:00:1518 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0xacfd6121ea904f53e1a2162a41b09522ca5de81e323886fa79e15a9ea99bed7cTransfer129732532021-10-06 0:00:1719 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0xf70b158b327b6fd0f5dbbee851aefa89100f0dbb9c60463b9e54169f29b79c25Transfer129164962021-10-04 0:00:1421 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0xd1b27ff8c1fc3a6e2589f02440e118ad9293e9d633fe096662572b416b24c525Transfer128877502021-10-03 0:00:1522 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0x8394b953201332c5fd9c45d1c010f82f16d6bc0457ada22abdbda087c03ef6b2Transfer128301902021-10-01 0:00:1424 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0xb1543a51e590b6b94ef195a3578b6a6b56dc92e58b34dd10cbf2180794d1ec94Transfer128013982021-09-30 0:00:1325 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0x3e17bcb4dc5ddde9aa25c8a6f6b69e989291cf8a0fcca1c65db9a8a936e7ceb5Transfer127730702021-09-29 0:00:1626 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0xa94afa7c31c412a9a4b3fd342a80cf38b29c82dd0c72c519e7849ad0ad48faf1Transfer127442702021-09-28 0:00:1627 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0x65fae8a2040ba48a0ef0636d55016c56d7d01dcdc02a201144b64d2fcd46d770Transfer126872692021-09-26 0:00:1529 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
0x0f5e5582336c9cef49d2529096bab4f1ab7bda527899cf5dd02aef175f3345fcTransfer126584962021-09-25 0:00:1430 days 13 hrs ago0x810579f64f58ed2befc9dd4368a20cf1d70e0ba3 IN  0x31487d80abed475788c1fdcca53de631332e9ad10 BNB0.00105828
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb11a9030557a91477c6c564007446e9eab3c6f3f1558c4da844d2c6f6e41d905135184142021-10-25 0:00:1513 hrs 13 mins ago 0x31487d80abed475788c1fdcca53de631332e9ad1 0x4703b55a68fa90b362eca5eaae98c74f42e957520 BNB
0xa68f4d776381c1513c3743896e473265fdde0d9a4ff4e0c3d63eace071e71094135184122021-10-25 0:00:0913 hrs 13 mins ago 0x789098ba9483d245efa0abe0704b18f1cb062a5f 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0xa68f4d776381c1513c3743896e473265fdde0d9a4ff4e0c3d63eace071e71094135184122021-10-25 0:00:0913 hrs 13 mins ago 0xd99d1c33f9fc3444f8101754abc46c52416550d1 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0xa68f4d776381c1513c3743896e473265fdde0d9a4ff4e0c3d63eace071e71094135184122021-10-25 0:00:0913 hrs 13 mins ago 0x31487d80abed475788c1fdcca53de631332e9ad1 0x4703b55a68fa90b362eca5eaae98c74f42e957520 BNB
0xa68f4d776381c1513c3743896e473265fdde0d9a4ff4e0c3d63eace071e71094135184122021-10-25 0:00:0913 hrs 13 mins ago 0xd99d1c33f9fc3444f8101754abc46c52416550d1 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0xa68f4d776381c1513c3743896e473265fdde0d9a4ff4e0c3d63eace071e71094135184122021-10-25 0:00:0913 hrs 13 mins ago 0xb3768a76364f75af9e63aed1bec93b83ad44a0e4 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0xa68f4d776381c1513c3743896e473265fdde0d9a4ff4e0c3d63eace071e71094135184122021-10-25 0:00:0913 hrs 13 mins ago 0xb3768a76364f75af9e63aed1bec93b83ad44a0e4 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0xa68f4d776381c1513c3743896e473265fdde0d9a4ff4e0c3d63eace071e71094135184122021-10-25 0:00:0913 hrs 13 mins ago 0xb3768a76364f75af9e63aed1bec93b83ad44a0e4 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0xa68f4d776381c1513c3743896e473265fdde0d9a4ff4e0c3d63eace071e71094135184122021-10-25 0:00:0913 hrs 13 mins ago 0x31487d80abed475788c1fdcca53de631332e9ad1 0x4703b55a68fa90b362eca5eaae98c74f42e957520 BNB
0xa68f4d776381c1513c3743896e473265fdde0d9a4ff4e0c3d63eace071e71094135184122021-10-25 0:00:0913 hrs 13 mins ago 0xb3768a76364f75af9e63aed1bec93b83ad44a0e4 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0xa68f4d776381c1513c3743896e473265fdde0d9a4ff4e0c3d63eace071e71094135184122021-10-25 0:00:0913 hrs 13 mins ago 0xb3768a76364f75af9e63aed1bec93b83ad44a0e4 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0xa68f4d776381c1513c3743896e473265fdde0d9a4ff4e0c3d63eace071e71094135184122021-10-25 0:00:0913 hrs 13 mins ago 0xb3768a76364f75af9e63aed1bec93b83ad44a0e4 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0x96f8ca7c982a5744d8b09d572b529d93dee40563eb4c90ed3ba3e8613d346bdc135047112021-10-24 12:35:041 day 38 mins ago 0x1863b9813ef03475c1dd65eaa9267dd0dc1a3d9e 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0x96f8ca7c982a5744d8b09d572b529d93dee40563eb4c90ed3ba3e8613d346bdc135047112021-10-24 12:35:041 day 38 mins ago 0xd000ab39bee8f014669aaee31260a32b56c7ebac 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0x37441bc148edb5535c45a18e3da4f6e2e0f622cc9e4fd1a0a77590129d27f57c135047032021-10-24 12:34:401 day 38 mins ago 0x1863b9813ef03475c1dd65eaa9267dd0dc1a3d9e 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0x37441bc148edb5535c45a18e3da4f6e2e0f622cc9e4fd1a0a77590129d27f57c135047032021-10-24 12:34:401 day 38 mins ago 0xd000ab39bee8f014669aaee31260a32b56c7ebac 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0x70a97a1027c3f769b1ce675cba15207696b9768d3976b6c1995a39d689fcd646135046722021-10-24 12:33:071 day 40 mins ago 0x1863b9813ef03475c1dd65eaa9267dd0dc1a3d9e 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0x70a97a1027c3f769b1ce675cba15207696b9768d3976b6c1995a39d689fcd646135046722021-10-24 12:33:071 day 40 mins ago 0xd000ab39bee8f014669aaee31260a32b56c7ebac 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0x57678b4c79021a6008128bf8f831340d3d2183ada3bd01520236cdd04bda807a135046222021-10-24 12:30:371 day 42 mins ago 0xd000ab39bee8f014669aaee31260a32b56c7ebac 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0x57678b4c79021a6008128bf8f831340d3d2183ada3bd01520236cdd04bda807a135046222021-10-24 12:30:371 day 42 mins ago 0xd000ab39bee8f014669aaee31260a32b56c7ebac 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0x57678b4c79021a6008128bf8f831340d3d2183ada3bd01520236cdd04bda807a135046222021-10-24 12:30:371 day 42 mins ago 0xd000ab39bee8f014669aaee31260a32b56c7ebac 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0x57678b4c79021a6008128bf8f831340d3d2183ada3bd01520236cdd04bda807a135046222021-10-24 12:30:371 day 42 mins ago 0xd000ab39bee8f014669aaee31260a32b56c7ebac 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0x275d648800efda70a70201be39c2d1d75713e9e6efa3ab83599b8ba42dc8adc5134896312021-10-24 0:00:171 day 13 hrs ago 0x31487d80abed475788c1fdcca53de631332e9ad1 0x4703b55a68fa90b362eca5eaae98c74f42e957520 BNB
0xd2ae3e529777f5371e2e8c7c19dbe82d6a1935f009ff7d02564c4396a5389871134896282021-10-24 0:00:081 day 13 hrs ago 0x789098ba9483d245efa0abe0704b18f1cb062a5f 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
0xd2ae3e529777f5371e2e8c7c19dbe82d6a1935f009ff7d02564c4396a5389871134896282021-10-24 0:00:081 day 13 hrs ago 0xd99d1c33f9fc3444f8101754abc46c52416550d1 0x31487d80abed475788c1fdcca53de631332e9ad10 BNB
[ Download CSV Export 
Loading
This contract contains unverified libraries: Utils

Contract Source Code Verified (Exact Match)

Contract Name:
SecuredMoonRat

Compiler Version
v0.6.8+commit.0bbfe453

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-05-13
*/

// File: contracts/protocols/bep/BepLib.sol

/**
 *Submitted for verification at BscScan.com on 2021-03-22
*/

//SPDX-License-Identifier: Unlicensed

pragma solidity >=0.6.8;

interface IBEP20 {

    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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


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

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

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

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

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

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

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

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

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

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

/**
 * @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.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

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

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

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

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

interface IPancakeFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IPancakePair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IPancakeRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IPancakeRouter02 is IPancakeRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

// File: contracts/protocols/bep/Utils.sol

pragma solidity >=0.6.8;


library Utils {
    using SafeMath for uint256;

    function random(uint256 from, uint256 to, uint256 salty) private view returns (uint256) {
        uint256 seed = uint256(
            keccak256(
                abi.encodePacked(
                    block.timestamp + block.difficulty +
                    ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)) +
                    block.gaslimit +
                    ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)) +
                    block.number +
                    salty
                )
            )
        );
        return seed.mod(to - from) + from;
    }

    function isLotteryWon(uint256 salty, uint256 winningDoubleRewardPercentage) private view returns (bool) {
        uint256 luckyNumber = random(0, 100, salty);
        uint256 winPercentage = winningDoubleRewardPercentage;
        return luckyNumber <= winPercentage;
    }

    function calculateBNBReward(
        uint256 _tTotal,
        uint256 currentBalance,
        uint256 currentBNBPool,
        uint256 winningDoubleRewardPercentage,
        uint256 totalSupply,
        address ofAddress
    ) public view returns (uint256) {
        uint256 bnbPool = currentBNBPool;

        // calculate reward to send
        bool isLotteryWonOnClaim = isLotteryWon(currentBalance, winningDoubleRewardPercentage);
        uint256 multiplier = 100;

        if (isLotteryWonOnClaim) {
            multiplier = random(150, 200, currentBalance);
        }

        // now calculate reward
        uint256 reward = bnbPool.mul(multiplier).mul(currentBalance).div(100).div(totalSupply);

        return reward;
    }

    function calculateTopUpClaim(
        uint256 currentRecipientBalance,
        uint256 basedRewardCycleBlock,
        uint256 threshHoldTopUpRate,
        uint256 amount
    ) public returns (uint256) {
        if (currentRecipientBalance == 0) {
            return block.timestamp + basedRewardCycleBlock;
        }
        else {
            uint256 rate = amount.mul(100).div(currentRecipientBalance);

            if (uint256(rate) >= threshHoldTopUpRate) {
                uint256 incurCycleBlock = basedRewardCycleBlock.mul(uint256(rate)).div(100);

                if (incurCycleBlock >= basedRewardCycleBlock) {
                    incurCycleBlock = basedRewardCycleBlock;
                }

                return incurCycleBlock;
            }

            return 0;
        }
    }

    function swapTokensForEth(
        address routerAddress,
        uint256 tokenAmount
    ) public {
        IPancakeRouter02 pancakeRouter = IPancakeRouter02(routerAddress);

        // generate the pancake pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = pancakeRouter.WETH();

        // make the swap
        pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of BNB
            path,
            address(this),
            block.timestamp
        );
    }

    function swapETHForTokens(
        address routerAddress,
        address recipient,
        uint256 ethAmount
    ) public {
        IPancakeRouter02 pancakeRouter = IPancakeRouter02(routerAddress);

        // generate the pancake pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = pancakeRouter.WETH();
        path[1] = address(this);

        // make the swap
        pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(
            0, // accept any amount of BNB
            path,
            address(recipient),
            block.timestamp + 360
        );
    }

    function addLiquidity(
        address routerAddress,
        address owner,
        uint256 tokenAmount,
        uint256 ethAmount
    ) public {
        IPancakeRouter02 pancakeRouter = IPancakeRouter02(routerAddress);

        // add the liquidity
        pancakeRouter.addLiquidityETH{value : ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner,
            block.timestamp + 360
        );
    }
}

// File: contracts/protocols/bep/ReentrancyGuard.sol

pragma solidity >=0.6.8;

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

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

    uint256 private _status;

    constructor () public {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

    modifier isHuman() {
        require(tx.origin == msg.sender, "sorry humans only");
        _;
    }
}

// File: contracts/protocols/MoonRat.sol

pragma solidity >=0.6.8;
pragma experimental ABIEncoderV2;



contract SecuredMoonRat is Context, IBEP20, Ownable, ReentrancyGuard {
    using SafeMath for uint256;
    using Address for address;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    mapping(address => bool) private _isExcludedFromMaxTx;

    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10 ** 6 * 10 ** 9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Secured MoonRat Token";
    string private _symbol = "SMRAT";
    uint8 private _decimals = 9;

    IPancakeRouter02 public immutable pancakeRouter;
    address public immutable pancakePair;

    bool inSwapAndLiquify = false;

    // Innovation for protocol by MoonRat Team

    //      Reward        //
    uint256 public rewardCycleBlock = 7 days;
    uint256 public easyRewardCycleBlock = 1 days;
    uint256 public threshHoldTopUpRate = 2; // 2 percent
    uint256 public rewardThreshold = 1 ether;
    uint256 public winningDoubleRewardPercentage = 5;
    uint256 public disableEasyRewardFrom = 0;

    //      Disruptive Transfer     //
    uint256 public disruptiveTransferEnabledFrom = 0;
    uint256 public disruptiveCoverageFee = 2 ether; // antiwhale

    //      Core Protocol       //
    uint256 public _maxTxAmount = _tTotal; // should be 0.01% percent per transaction, will be set again at activateContract() function
    mapping(address => uint256) public nextAvailableClaimDate;
    bool public swapAndLiquifyEnabled = false; // should be true

    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 8; // 4% will be added pool, 4% will be converted to BNB
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 minTokenNumberToSell = _tTotal.mul(1).div(10000).div(10); // 0.001% max tx amount will trigger swap and add liquidity

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event ClaimBNBSuccessfully(
        address recipient,
        uint256 ethReceived,
        uint256 nextAvailableClaimDate
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor (
        address payable routerAddress
    ) public {
        _rOwned[_msgSender()] = _rTotal;

        IPancakeRouter02 _pancakeRouter = IPancakeRouter02(routerAddress);
        // Create a pancake pair for this new token
        pancakePair = IPancakeFactory(_pancakeRouter.factory())
        .createPair(address(this), _pancakeRouter.WETH());

        // set the rest of the contract variables
        pancakeRouter = _pancakeRouter;

        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        // exclude from max tx
        _isExcludedFromMaxTx[owner()] = true;
        _isExcludedFromMaxTx[address(this)] = true;
        _isExcludedFromMaxTx[address(0x000000000000000000000000000000000000dEaD)] = true;
        _isExcludedFromMaxTx[address(0)] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount, 0);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount, 0);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BEP20: decreased allowance below zero"));
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns (uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Pancake router.');
        require(!_isExcluded[account], "Account is already excluded");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }

    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    //to receive BNB from pancakeRouter when swapping
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10 ** 2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10 ** 2
        );
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "BEP20: approve from the zero address");
        require(spender != address(0), "BEP20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount,
        uint256 value
    ) private {
        require(from != address(0), "BEP20: transfer from the zero address");
        require(to != address(0), "BEP20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        ensureMaxTxAmount(from, to, amount, value);

        // swap and liquify
        swapAndLiquify(from, to);

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }

        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from, to, amount, takeFee);
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if (!takeFee)
            removeAllFee();

        // top up claim cycle
        topUpClaimCycleAfterTransfer(recipient, amount);

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if (!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }


    // Innovation for protocol by MoonRat Team
    function setMaxTxPercent(uint256 maxTxPercent) public onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(10000);
    }

    function setExcludeFromMaxTx(address _address, bool value) public onlyOwner {
        _isExcludedFromMaxTx[_address] = value;
    }

    function calculateBNBReward(address ofAddress) public view returns (uint256) {
        uint256 totalSupply = uint256(_tTotal)
        .sub(balanceOf(address(0)))
        .sub(balanceOf(0x000000000000000000000000000000000000dEaD)) // exclude burned wallet
        .sub(balanceOf(address(pancakePair)));
        // exclude liquidity wallet

        return Utils.calculateBNBReward(
            _tTotal,
            balanceOf(address(ofAddress)),
            address(this).balance,
            winningDoubleRewardPercentage,
            totalSupply,
            ofAddress
        );
    }

    function getRewardCycleBlock() public view returns (uint256) {
        if (block.timestamp >= disableEasyRewardFrom) return rewardCycleBlock;
        return easyRewardCycleBlock;
    }

    function claimBNBReward() isHuman nonReentrant public {
        require(nextAvailableClaimDate[msg.sender] <= block.timestamp, 'Error: next available not reached');
        require(balanceOf(msg.sender) > 0, 'Error: must own MRAT to claim reward');

        uint256 reward = calculateBNBReward(msg.sender);

        // reward threshold
        if (reward >= rewardThreshold) {
            Utils.swapETHForTokens(
                address(pancakeRouter),
                address(0x000000000000000000000000000000000000dEaD),
                reward.div(5)
            );
            reward = reward.sub(reward.div(5));
        }

        // update rewardCycleBlock
        nextAvailableClaimDate[msg.sender] = block.timestamp + getRewardCycleBlock();
        emit ClaimBNBSuccessfully(msg.sender, reward, nextAvailableClaimDate[msg.sender]);

        (bool sent,) = address(msg.sender).call{value : reward}("");
        require(sent, 'Error: Cannot withdraw reward');
    }

    function topUpClaimCycleAfterTransfer(address recipient, uint256 amount) private {
        uint256 currentRecipientBalance = balanceOf(recipient);
        uint256 basedRewardCycleBlock = getRewardCycleBlock();

        nextAvailableClaimDate[recipient] = nextAvailableClaimDate[recipient] + Utils.calculateTopUpClaim(
            currentRecipientBalance,
            basedRewardCycleBlock,
            threshHoldTopUpRate,
            amount
        );
    }

    function ensureMaxTxAmount(
        address from,
        address to,
        uint256 amount,
        uint256 value
    ) private {
        if (
            _isExcludedFromMaxTx[from] == false && // default will be false
            _isExcludedFromMaxTx[to] == false // default will be false
        ) {
            if (value < disruptiveCoverageFee && block.timestamp >= disruptiveTransferEnabledFrom) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }
        }
    }

    function disruptiveTransfer(address recipient, uint256 amount) public payable returns (bool) {
        _transfer(_msgSender(), recipient, amount, msg.value);
        return true;
    }

    function swapAndLiquify(address from, address to) private lockTheSwap {
        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is pancake pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        if (contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount;
        }

        bool shouldSell = contractTokenBalance >= minTokenNumberToSell;

        if (
            !inSwapAndLiquify &&
        shouldSell &&
        from != pancakePair &&
        swapAndLiquifyEnabled &&
        !(from == address(this) && to == address(pancakePair)) // swap 1 time
        ) {
            // only sell for minTokenNumberToSell, decouple from _maxTxAmount
            contractTokenBalance = minTokenNumberToSell;

            // add liquidity
            // split the contract balance into 3 pieces
            uint256 pooledBNB = contractTokenBalance.div(2);
            uint256 piece = contractTokenBalance.sub(pooledBNB).div(2);
            uint256 otherPiece = contractTokenBalance.sub(piece);

            uint256 tokenAmountToBeSwapped = pooledBNB.add(piece);

            uint256 initialBalance = address(this).balance;

            // now is to lock into staking pool
            Utils.swapTokensForEth(address(pancakeRouter), tokenAmountToBeSwapped);

            // how much BNB did we just swap into?

            // capture the contract's current BNB balance.
            // this is so that we can capture exactly the amount of BNB that the
            // swap creates, and not make the liquidity event include any BNB that
            // has been manually sent to the contract
            uint256 deltaBalance = address(this).balance.sub(initialBalance);

            uint256 bnbToBeAddedToLiquidity = deltaBalance.div(3);

            // add liquidity to pancake
            Utils.addLiquidity(address(pancakeRouter), owner(), otherPiece, bnbToBeAddedToLiquidity);

            emit SwapAndLiquify(piece, deltaBalance, otherPiece);
        }
    }

    function activateContract() public onlyOwner {
        // reward claim
        disableEasyRewardFrom = block.timestamp + 1 weeks;

        // protocol
        disruptiveTransferEnabledFrom = block.timestamp;
        setMaxTxPercent(1);
        setSwapAndLiquifyEnabled(true);

        // approve contract
        _approve(address(this), address(pancakeRouter), 2 ** 256 - 1);
    }
}

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"routerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nextAvailableClaimDate","type":"uint256"}],"name":"ClaimBNBSuccessfully","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ofAddress","type":"address"}],"name":"calculateBNBReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimBNBReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableEasyRewardFrom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disruptiveCoverageFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"disruptiveTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"disruptiveTransferEnabledFrom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"easyRewardCycleBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardCycleBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nextAvailableClaimDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakePair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeRouter","outputs":[{"internalType":"contract IPancakeRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardCycleBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"threshHoldTopUpRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"winningDoubleRewardPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405269d3c21bcecceda1000000600b55600b54600019816200002057fe5b0660001903600c556040518060400160405280601581526020017f53656375726564204d6f6f6e52617420546f6b656e0000000000000000000000815250600e90805190602001906200007592919062000917565b506040518060400160405280600581526020017f534d524154000000000000000000000000000000000000000000000000000000815250600f9080519060200190620000c392919062000917565b506009601060006101000a81548160ff021916908360ff1602179055506000601060016101000a81548160ff02191690831515021790555062093a80601155620151806012556002601355670de0b6b3a7640000601455600560155560006016556000601755671bc16d674ec80000601855600b546019556000601b60006101000a81548160ff0219169083151502179055506002601c55601c54601d556008601e55601e54601f55620001be600a620001aa612710620001966001600b54620007b960201b62002e6a1790919060201c565b6200082f60201b62002eda1790919060201c565b6200082f60201b62002eda1790919060201c565b602055348015620001ce57600080fd5b5060405162006b4e38038062006b4e8339818101604052810190620001f4919062000a20565b6000620002066200088160201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506001600381905550600c5460046000620002c36200088160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200034d57600080fd5b505afa15801562000362573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003889190620009f4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003eb57600080fd5b505afa15801562000400573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004269190620009f4565b6040518363ffffffff1660e01b81526004016200044592919062000b28565b602060405180830381600087803b1580156200046057600080fd5b505af115801562000475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200049b9190620009f4565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506001600760006200051e6200088960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000620005dd6200088960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016009600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007486200088160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b54604051620007a9919062000b9b565b60405180910390a3505062000cdd565b600080831415620007ce576000905062000829565b6000828402905082848281620007e057fe5b041462000824576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200081b9062000b79565b60405180910390fd5b809150505b92915050565b60006200087983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620008b260201b60201c565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008083118290620008fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008f3919062000b55565b60405180910390fd5b5060008385816200090957fe5b049050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200095a57805160ff19168380011785556200098b565b828001600101855582156200098b579182015b828111156200098a5782518255916020019190600101906200096d565b5b5090506200099a91906200099e565b5090565b620009c391905b80821115620009bf576000816000905550600101620009a5565b5090565b90565b600081519050620009d78162000ca9565b92915050565b600081519050620009ee8162000cc3565b92915050565b60006020828403121562000a0757600080fd5b600062000a1784828501620009c6565b91505092915050565b60006020828403121562000a3357600080fd5b600062000a4384828501620009dd565b91505092915050565b62000a578162000c26565b82525050565b62000a688162000bd4565b82525050565b600062000a7b8262000bb8565b62000a87818562000bc3565b935062000a9981856020860162000c62565b62000aa48162000c98565b840191505092915050565b600062000abe60218362000bc3565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b62000b228162000c1c565b82525050565b600060408201905062000b3f600083018562000a4c565b62000b4e602083018462000a5d565b9392505050565b6000602082019050818103600083015262000b71818462000a6e565b905092915050565b6000602082019050818103600083015262000b948162000aaf565b9050919050565b600060208201905062000bb2600083018462000b17565b92915050565b600081519050919050565b600082825260208201905092915050565b600062000be18262000bfc565b9050919050565b600062000bf58262000bfc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600062000c338262000c3a565b9050919050565b600062000c478262000c4e565b9050919050565b600062000c5b8262000bfc565b9050919050565b60005b8381101562000c8257808201518184015260208101905062000c65565b8381111562000c92576000848401525b50505050565b6000601f19601f8301169050919050565b62000cb48162000bd4565b811462000cc057600080fd5b50565b62000cce8162000be8565b811462000cda57600080fd5b50565b60805160601c60a05160601c615e2462000d2a60003980610dd1528061276f528061365452806136fa525080611d105280612376528061279352806137e5528061389d5250615e246000f3fe6080604052600436106103035760003560e01c806370a0823111610190578063a69df4b5116100dc578063c49b9a8011610095578063dd62ed3e1161006f578063dd62ed3e14610b98578063ea2f0b3714610bd5578063f2fde38b14610bfe578063fda48a7314610c275761030a565b8063c49b9a8014610b1d578063d543dbeb14610b46578063dd46706414610b6f5761030a565b8063a69df4b514610a0b578063a9059cbb14610a22578063b47fd56314610a5f578063b6c5232414610a9c578063b8c9d25c14610ac7578063c21ebd0714610af25761030a565b80638ee88c531161014957806395ba68d71161012357806395ba68d71461094d57806395d89b41146109785780639bb4dc60146109a3578063a457c2d7146109ce5761030a565b80638ee88c53146108e25780638fda356d1461090b5780638feed79a146109225761030a565b806370a08231146107d0578063715018a61461080d5780637217f4bc146108245780637d1db4a51461084f57806388f820201461087a5780638da5cb5b146108b75761030a565b80633bd5d1731161024f5780635342acb4116102085780635ea4d29c116101e25780635ea4d29c146107385780636a40701c146107635780636bc87c3a1461077a5780636d33a468146107a55761030a565b80635342acb4146106a75780635b89029c146106e45780635e4196ab1461070d5761030a565b80633bd5d173146105945780633d87ea75146105bd578063437823ec146105ed5780634549b039146106165780634a74bb021461065357806352390c021461067e5761030a565b806323b872dd116102bc5780633685d419116102965780633685d419146104d857806337ad7cf514610501578063395093511461052c5780633b124fe7146105695761030a565b806323b872dd146104335780632d83811914610470578063313ce567146104ad5761030a565b8063061c82d01461030f57806306fdde0314610338578063095ea7b31461036357806313114a9d146103a057806318160ddd146103cb5780632060995e146103f65761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b5061033660048036038101906103319190614e44565b610c52565b005b34801561034457600080fd5b5061034d610cf2565b60405161035a919061584d565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190614ddf565b610d94565b6040516103979190615817565b60405180910390f35b3480156103ac57600080fd5b506103b5610db2565b6040516103c29190615b2f565b60405180910390f35b3480156103d757600080fd5b506103e0610dbc565b6040516103ed9190615b2f565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190614cef565b610dc6565b60405161042a9190615b2f565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190614d54565b610ee4565b6040516104679190615817565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190614e44565b610fbf565b6040516104a49190615b2f565b60405180910390f35b3480156104b957600080fd5b506104c261102d565b6040516104cf9190615c27565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa9190614cef565b611044565b005b34801561050d57600080fd5b5061051661136c565b6040516105239190615b2f565b60405180910390f35b34801561053857600080fd5b50610553600480360381019061054e9190614ddf565b611372565b6040516105609190615817565b60405180910390f35b34801561057557600080fd5b5061057e611425565b60405161058b9190615b2f565b60405180910390f35b3480156105a057600080fd5b506105bb60048036038101906105b69190614e44565b61142b565b005b6105d760048036038101906105d29190614ddf565b6115a6565b6040516105e49190615817565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f9190614cef565b6115c5565b005b34801561062257600080fd5b5061063d60048036038101906106389190614e96565b6116b6565b60405161064a9190615b2f565b60405180910390f35b34801561065f57600080fd5b5061066861173a565b6040516106759190615817565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a09190614cef565b61174d565b005b3480156106b357600080fd5b506106ce60048036038101906106c99190614cef565b611a02565b6040516106db9190615817565b60405180910390f35b3480156106f057600080fd5b5061070b60048036038101906107069190614da3565b611a58565b005b34801561071957600080fd5b50610722611b49565b60405161072f9190615b2f565b60405180910390f35b34801561074457600080fd5b5061074d611b4f565b60405161075a9190615b2f565b60405180910390f35b34801561076f57600080fd5b50610778611b55565b005b34801561078657600080fd5b5061078f611f3c565b60405161079c9190615b2f565b60405180910390f35b3480156107b157600080fd5b506107ba611f42565b6040516107c79190615b2f565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f29190614cef565b611f48565b6040516108049190615b2f565b60405180910390f35b34801561081957600080fd5b50610822612033565b005b34801561083057600080fd5b50610839612188565b6040516108469190615b2f565b60405180910390f35b34801561085b57600080fd5b5061086461218e565b6040516108719190615b2f565b60405180910390f35b34801561088657600080fd5b506108a1600480360381019061089c9190614cef565b612194565b6040516108ae9190615817565b60405180910390f35b3480156108c357600080fd5b506108cc6121ea565b6040516108d99190615720565b60405180910390f35b3480156108ee57600080fd5b5061090960048036038101906109049190614e44565b612213565b005b34801561091757600080fd5b506109206122b3565b005b34801561092e57600080fd5b506109376123bd565b6040516109449190615b2f565b60405180910390f35b34801561095957600080fd5b506109626123c3565b60405161096f9190615b2f565b60405180910390f35b34801561098457600080fd5b5061098d6123c9565b60405161099a919061584d565b60405180910390f35b3480156109af57600080fd5b506109b861246b565b6040516109c59190615b2f565b60405180910390f35b3480156109da57600080fd5b506109f560048036038101906109f09190614ddf565b612489565b604051610a029190615817565b60405180910390f35b348015610a1757600080fd5b50610a20612556565b005b348015610a2e57600080fd5b50610a496004803603810190610a449190614ddf565b61272b565b604051610a569190615817565b60405180910390f35b348015610a6b57600080fd5b50610a866004803603810190610a819190614cef565b61274b565b604051610a939190615b2f565b60405180910390f35b348015610aa857600080fd5b50610ab1612763565b604051610abe9190615b2f565b60405180910390f35b348015610ad357600080fd5b50610adc61276d565b604051610ae99190615720565b60405180910390f35b348015610afe57600080fd5b50610b07612791565b604051610b149190615832565b60405180910390f35b348015610b2957600080fd5b50610b446004803603810190610b3f9190614e1b565b6127b5565b005b348015610b5257600080fd5b50610b6d6004803603810190610b689190614e44565b61289f565b005b348015610b7b57600080fd5b50610b966004803603810190610b919190614e44565b612967565b005b348015610ba457600080fd5b50610bbf6004803603810190610bba9190614d18565b612b28565b604051610bcc9190615b2f565b60405180910390f35b348015610be157600080fd5b50610bfc6004803603810190610bf79190614cef565b612baf565b005b348015610c0a57600080fd5b50610c256004803603810190610c209190614cef565b612ca0565b005b348015610c3357600080fd5b50610c3c612e64565b604051610c499190615b2f565b60405180910390f35b610c5a612f24565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90615a0f565b60405180910390fd5b80601c8190555050565b6060600e8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d8a5780601f10610d5f57610100808354040283529160200191610d8a565b820191906000526020600020905b815481529060010190602001808311610d6d57829003601f168201915b5050505050905090565b6000610da8610da1612f24565b8484612f2c565b6001905092915050565b6000600d54905090565b6000600b54905090565b600080610e3d610df57f0000000000000000000000000000000000000000000000000000000000000000611f48565b610e2f610e0361dead611f48565b610e21610e106000611f48565b600b546130f790919063ffffffff16565b6130f790919063ffffffff16565b6130f790919063ffffffff16565b9050734703b55a68fa90b362eca5eaae98c74f42e9575263163296bc600b54610e6586611f48565b4760155486896040518763ffffffff1660e01b8152600401610e8c96959493929190615bc6565b60206040518083038186803b158015610ea457600080fd5b505af4158015610eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edc9190614e6d565b915050919050565b6000610ef38484846000613141565b610fb484610eff612f24565b610faf85604051806060016040528060288152602001615da260289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f65612f24565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461333e9092919063ffffffff16565b612f2c565b600190509392505050565b6000600c54821115611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd906158cf565b60405180910390fd5b6000611010613399565b90506110258184612eda90919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b61104c612f24565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d190615a0f565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d9061594f565b60405180910390fd5b60008090505b600a80549050811015611368578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061119d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561135b57600a6001600a8054905003815481106111f957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061123157fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a80548061132157fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611368565b808060010191505061116c565b5050565b60125481565b600061141b61137f612f24565b846114168560066000611390612f24565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133c490919063ffffffff16565b612f2c565b6001905092915050565b601c5481565b6000611435612f24565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb90615acf565b60405180910390fd5b60006114cf83613419565b5050505050905061152881600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130f790919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061158081600c546130f790919063ffffffff16565b600c8190555061159b83600d546133c490919063ffffffff16565b600d81905550505050565b60006115bb6115b3612f24565b848434613141565b6001905092915050565b6115cd612f24565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290615a0f565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b548311156116fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f49061596f565b60405180910390fd5b8161171d57600061170d84613419565b5050505050905080915050611734565b600061172884613419565b50505050915050809150505b92915050565b601b60009054906101000a900460ff1681565b611755612f24565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117da90615a0f565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611870576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118679061592f565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561194457611900600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fbf565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611a60612f24565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae590615a0f565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b60145481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bba906159af565b60405180910390fd5b60026003541415611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0090615aaf565b60405180910390fd5b600260038190555042601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8a9061586f565b60405180910390fd5b6000611c9e33611f48565b11611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd5906159cf565b60405180910390fd5b6000611ce933610dc6565b90506014548110611dbd57734703b55a68fa90b362eca5eaae98c74f42e9575263c549d3ae7f000000000000000000000000000000000000000000000000000000000000000061dead611d46600586612eda90919063ffffffff16565b6040518463ffffffff1660e01b8152600401611d6493929190615772565b60006040518083038186803b158015611d7c57600080fd5b505af4158015611d90573d6000803e3d6000fd5b50505050611dba611dab600583612eda90919063ffffffff16565b826130f790919063ffffffff16565b90505b611dc561246b565b4201601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f76a3a606d310d32750e15a3d246d186b789084096189d51661559b0f97f3bec93382601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051611e7c9392919061573b565b60405180910390a160003373ffffffffffffffffffffffffffffffffffffffff1682604051611eaa9061570b565b60006040518083038185875af1925050503d8060008114611ee7576040519150601f19603f3d011682016040523d82523d6000602084013e611eec565b606091505b5050905080611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2790615a6f565b60405180910390fd5b50506001600381905550565b601e5481565b60185481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611fe357600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061202e565b61202b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fbf565b90505b919050565b61203b612f24565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c090615a0f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60115481565b60195481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61221b612f24565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a090615a0f565b60405180910390fd5b80601e8190555050565b6122bb612f24565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234090615a0f565b60405180910390fd5b62093a80420160168190555042601781905550612366600161289f565b61237060016127b5565b6123bb307f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612f2c565b565b60155481565b60165481565b6060600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124615780601f1061243657610100808354040283529160200191612461565b820191906000526020600020905b81548152906001019060200180831161244457829003601f168201915b5050505050905090565b60006016544210612480576011549050612486565b60125490505b90565b600061254c612496612f24565b8461254785604051806060016040528060258152602001615dca60259139600660006124c0612f24565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461333e9092919063ffffffff16565b612f2c565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125dd90615b0f565b60405180910390fd5b600254421161262a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262190615a8f565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612741612738612f24565b84846000613141565b6001905092915050565b601a6020528060005260406000206000915090505481565b6000600254905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6127bd612f24565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461284b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284290615a0f565b60405180910390fd5b80601b60006101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516128949190615817565b60405180910390a150565b6128a7612f24565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292c90615a0f565b60405180910390fd5b61295e61271061295083600b54612e6a90919063ffffffff16565b612eda90919063ffffffff16565b60198190555050565b61296f612f24565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f490615a0f565b60405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612bb7612f24565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3c90615a0f565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612ca8612f24565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2d90615a0f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9d906158ef565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b600080831415612e7d5760009050612ed4565b6000828402905082848281612e8e57fe5b0414612ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec6906159ef565b60405180910390fd5b809150505b92915050565b6000612f1c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613475565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f93906158af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561300c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300390615aef565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516130ea9190615b2f565b60405180910390a3505050565b600061313983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061333e565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156131b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a89061588f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321890615a4f565b60405180910390fd5b60008211613264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325b90615a2f565b60405180910390fd5b613270848484846134d6565b61327a84846135f0565b600060019050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133215750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561332b57600090505b61333785858584613979565b5050505050565b6000838311158290613386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337d919061584d565b60405180910390fd5b5060008385039050809150509392505050565b60008060006133a6613bda565b915091506133bd8183612eda90919063ffffffff16565b9250505090565b60008082840190508381101561340f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134069061590f565b60405180910390fd5b8091505092915050565b60008060008060008060008060006134308a613e6e565b925092509250600080600061344e8d8686613449613399565b613ec8565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600080831182906134bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b3919061584d565b60405180910390fd5b5060008385816134c857fe5b049050809150509392505050565b60001515600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148015613586575060001515600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b156135ea576018548110801561359e57506017544210155b156135e9576019548211156135e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135df9061598f565b60405180910390fd5b5b5b50505050565b6001601060016101000a81548160ff021916908315150217905550600061361630611f48565b905060195481106136275760195490505b60006020548210159050601060019054906101000a900460ff1615801561364b5750805b80156136a357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156136bb5750601b60009054906101000a900460ff165b801561374a57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561374857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b155b15613958576020549150600061376a600284612eda90919063ffffffff16565b90506000613794600261378684876130f790919063ffffffff16565b612eda90919063ffffffff16565b905060006137ab82866130f790919063ffffffff16565b905060006137c283856133c490919063ffffffff16565b90506000479050734703b55a68fa90b362eca5eaae98c74f42e957526356feb11b7f0000000000000000000000000000000000000000000000000000000000000000846040518363ffffffff1660e01b81526004016138229291906157ee565b60006040518083038186803b15801561383a57600080fd5b505af415801561384e573d6000803e3d6000fd5b50505050600061386782476130f790919063ffffffff16565b9050600061387f600383612eda90919063ffffffff16565b9050734703b55a68fa90b362eca5eaae98c74f42e9575263cf6c62ea7f00000000000000000000000000000000000000000000000000000000000000006138c46121ea565b88856040518563ffffffff1660e01b81526004016138e594939291906157a9565b60006040518083038186803b1580156138fd57600080fd5b505af4158015613911573d6000803e3d6000fd5b505050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186838760405161394893929190615b4a565b60405180910390a1505050505050505b50506000601060016101000a81548160ff0219169083151502179055505050565b8061398757613986613f51565b5b6139918383613f94565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a345750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a4957613a448484846140c6565b613bc6565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613aec5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613b0157613afc848484614326565b613bc5565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613ba35750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613bb857613bb3848484614586565b613bc4565b613bc384848461487b565b5b5b5b80613bd457613bd3614a46565b5b50505050565b6000806000600c5490506000600b54905060008090505b600a80549050811015613e31578260046000600a8481548110613c1057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613cf757508160056000600a8481548110613c8f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613d0e57600c54600b5494509450505050613e6a565b613d9760046000600a8481548110613d2257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846130f790919063ffffffff16565b9250613e2260056000600a8481548110613dad57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836130f790919063ffffffff16565b91508080600101915050613bf1565b50613e49600b54600c54612eda90919063ffffffff16565b821015613e6157600c54600b54935093505050613e6a565b81819350935050505b9091565b600080600080613e7d85614a5a565b90506000613e8a86614a8b565b90506000613eb382613ea5858a6130f790919063ffffffff16565b6130f790919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613ee18589612e6a90919063ffffffff16565b90506000613ef88689612e6a90919063ffffffff16565b90506000613f0f8789612e6a90919063ffffffff16565b90506000613f3882613f2a85876130f790919063ffffffff16565b6130f790919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000601c54148015613f6557506000601e54145b15613f6f57613f92565b601c54601d81905550601e54601f819055506000601c819055506000601e819055505b565b6000613f9f83611f48565b90506000613fab61246b565b9050734703b55a68fa90b362eca5eaae98c74f42e95752638958b5a98383601354876040518563ffffffff1660e01b8152600401613fec9493929190615b81565b60206040518083038186803b15801561400457600080fd5b505af4158015614018573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061403c9190614e6d565b601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b6000806000806000806140d887613419565b95509550955095509550955061413687600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130f790919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141cb86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130f790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061426085600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133c490919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142ac81614abc565b6142b68483614c61565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516143139190615b2f565b60405180910390a3505050505050505050565b60008060008060008061433887613419565b95509550955095509550955061439686600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130f790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061442b83600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133c490919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144c085600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133c490919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061450c81614abc565b6145168483614c61565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145739190615b2f565b60405180910390a3505050505050505050565b60008060008060008061459887613419565b9550955095509550955095506145f687600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130f790919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061468b86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130f790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061472083600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133c490919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147b585600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133c490919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061480181614abc565b61480b8483614c61565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516148689190615b2f565b60405180910390a3505050505050505050565b60008060008060008061488d87613419565b9550955095509550955095506148eb86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130f790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061498085600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133c490919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149cc81614abc565b6149d68483614c61565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614a339190615b2f565b60405180910390a3505050505050505050565b601d54601c81905550601f54601e81905550565b6000614a846064614a76601c5485612e6a90919063ffffffff16565b612eda90919063ffffffff16565b9050919050565b6000614ab56064614aa7601e5485612e6a90919063ffffffff16565b612eda90919063ffffffff16565b9050919050565b6000614ac6613399565b90506000614add8284612e6a90919063ffffffff16565b9050614b3181600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133c490919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614c5c57614c1883600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133c490919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614c7682600c546130f790919063ffffffff16565b600c81905550614c9181600d546133c490919063ffffffff16565b600d819055505050565b600081359050614caa81615d5c565b92915050565b600081359050614cbf81615d73565b92915050565b600081359050614cd481615d8a565b92915050565b600081519050614ce981615d8a565b92915050565b600060208284031215614d0157600080fd5b6000614d0f84828501614c9b565b91505092915050565b60008060408385031215614d2b57600080fd5b6000614d3985828601614c9b565b9250506020614d4a85828601614c9b565b9150509250929050565b600080600060608486031215614d6957600080fd5b6000614d7786828701614c9b565b9350506020614d8886828701614c9b565b9250506040614d9986828701614cc5565b9150509250925092565b60008060408385031215614db657600080fd5b6000614dc485828601614c9b565b9250506020614dd585828601614cb0565b9150509250929050565b60008060408385031215614df257600080fd5b6000614e0085828601614c9b565b9250506020614e1185828601614cc5565b9150509250929050565b600060208284031215614e2d57600080fd5b6000614e3b84828501614cb0565b91505092915050565b600060208284031215614e5657600080fd5b6000614e6484828501614cc5565b91505092915050565b600060208284031215614e7f57600080fd5b6000614e8d84828501614cda565b91505092915050565b60008060408385031215614ea957600080fd5b6000614eb785828601614cc5565b9250506020614ec885828601614cb0565b9150509250929050565b614edb81615cbe565b82525050565b614eea81615c69565b82525050565b614ef981615c69565b82525050565b614f0881615c7b565b82525050565b614f1781615cd0565b82525050565b6000614f2882615c42565b614f328185615c58565b9350614f42818560208601615d18565b614f4b81615d4b565b840191505092915050565b6000614f63602183615c58565b91507f4572726f723a206e65787420617661696c61626c65206e6f742072656163686560008301527f64000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614fc9602583615c58565b91507f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061502f602483615c58565b91507f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615095602a83615c58565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b60006150fb602683615c58565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615161601b83615c58565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b60006151a1601b83615c58565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b60006151e1601783615c58565b91507f4163636f756e74206973206e6f74206578636c756465640000000000000000006000830152602082019050919050565b6000615221601f83615c58565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b6000615261602883615c58565b91507f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008301527f78416d6f756e742e0000000000000000000000000000000000000000000000006020830152604082019050919050565b60006152c7601183615c58565b91507f736f7272792068756d616e73206f6e6c790000000000000000000000000000006000830152602082019050919050565b6000615307602483615c58565b91507f4572726f723a206d757374206f776e204d52415420746f20636c61696d20726560008301527f77617264000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061536d602183615c58565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006153d3602083615c58565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000615413602983615c58565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000615479602383615c58565b91507f42455032303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006154df600083615c4d565b9150600082019050919050565b60006154f9601d83615c58565b91507f4572726f723a2043616e6e6f74207769746864726177207265776172640000006000830152602082019050919050565b6000615539601f83615c58565b91507f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006000830152602082019050919050565b6000615579601f83615c58565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b60006155b9602c83615c58565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b600061561f602283615c58565b91507f42455032303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615685602383615c58565b91507f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008301527f6f636b00000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6156e781615ca7565b82525050565b6156f681615ca7565b82525050565b61570581615cb1565b82525050565b6000615716826154d2565b9150819050919050565b60006020820190506157356000830184614ee1565b92915050565b60006060820190506157506000830186614ed2565b61575d60208301856156de565b61576a60408301846156de565b949350505050565b60006060820190506157876000830186614ef0565b6157946020830185614ef0565b6157a160408301846156ed565b949350505050565b60006080820190506157be6000830187614ef0565b6157cb6020830186614ef0565b6157d860408301856156ed565b6157e560608301846156ed565b95945050505050565b60006040820190506158036000830185614ef0565b61581060208301846156ed565b9392505050565b600060208201905061582c6000830184614eff565b92915050565b60006020820190506158476000830184614f0e565b92915050565b600060208201905081810360008301526158678184614f1d565b905092915050565b6000602082019050818103600083015261588881614f56565b9050919050565b600060208201905081810360008301526158a881614fbc565b9050919050565b600060208201905081810360008301526158c881615022565b9050919050565b600060208201905081810360008301526158e881615088565b9050919050565b60006020820190508181036000830152615908816150ee565b9050919050565b6000602082019050818103600083015261592881615154565b9050919050565b6000602082019050818103600083015261594881615194565b9050919050565b60006020820190508181036000830152615968816151d4565b9050919050565b6000602082019050818103600083015261598881615214565b9050919050565b600060208201905081810360008301526159a881615254565b9050919050565b600060208201905081810360008301526159c8816152ba565b9050919050565b600060208201905081810360008301526159e8816152fa565b9050919050565b60006020820190508181036000830152615a0881615360565b9050919050565b60006020820190508181036000830152615a28816153c6565b9050919050565b60006020820190508181036000830152615a4881615406565b9050919050565b60006020820190508181036000830152615a688161546c565b9050919050565b60006020820190508181036000830152615a88816154ec565b9050919050565b60006020820190508181036000830152615aa88161552c565b9050919050565b60006020820190508181036000830152615ac88161556c565b9050919050565b60006020820190508181036000830152615ae8816155ac565b9050919050565b60006020820190508181036000830152615b0881615612565b9050919050565b60006020820190508181036000830152615b2881615678565b9050919050565b6000602082019050615b4460008301846156de565b92915050565b6000606082019050615b5f60008301866156de565b615b6c60208301856156de565b615b7960408301846156de565b949350505050565b6000608082019050615b9660008301876156ed565b615ba360208301866156ed565b615bb060408301856156ed565b615bbd60608301846156ed565b95945050505050565b600060c082019050615bdb60008301896156ed565b615be860208301886156ed565b615bf560408301876156ed565b615c0260608301866156ed565b615c0f60808301856156ed565b615c1c60a0830184614ef0565b979650505050505050565b6000602082019050615c3c60008301846156fc565b92915050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000615c7482615c87565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615cc982615cf4565b9050919050565b6000615cdb82615ce2565b9050919050565b6000615ced82615c87565b9050919050565b6000615cff82615d06565b9050919050565b6000615d1182615c87565b9050919050565b60005b83811015615d36578082015181840152602081019050615d1b565b83811115615d45576000848401525b50505050565b6000601f19601f8301169050919050565b615d6581615c69565b8114615d7057600080fd5b50565b615d7c81615c7b565b8114615d8757600080fd5b50565b615d9381615ca7565b8114615d9e57600080fd5b5056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220870bd9dcb15995f15beb79de3d3f8ebb4c6b9ede89a6d9b8aacdfcb2404b3eb664736f6c63430006080033000000000000000000000000d99d1c33f9fc3444f8101754abc46c52416550d1

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

000000000000000000000000d99d1c33f9fc3444f8101754abc46c52416550d1
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d99d1c33f9fc3444f8101754abc46c52416550d1


Library Used



Deployed ByteCode Sourcemap

32919:22274:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;41593:98:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41593:98:0;;;;;;;;;;;;;;;;:::i;:::-;;36550:83;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36550:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;37465:161;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37465:161:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;38589:87;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38589:87:0;;;:::i;:::-;;;;;;;;;;;;;;;;36827:95;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36827:95:0;;;:::i;:::-;;;;;;;;;;;;;;;;49511:600;;5:9:-1;2:2;;;27:1;24;17:12;2:2;49511:600:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;37634:316;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37634:316:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;39514:253;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39514:253:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;36736:83;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36736:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;40231:475;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40231:475:0;;;;;;;;;;;;;;;;:::i;:::-;;34040:44;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34040:44:0;;;:::i;:::-;;;;;;;;;;;;;;;;37958:218;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37958:218:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;34768:26;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34768:26:0;;;:::i;:::-;;;;;;;;;;;;;;;;38684:377;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38684:377:0;;;;;;;;;;;;;;;;:::i;:::-;;52338:187;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;41356:111;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41356:111:0;;;;;;;;;;;;;;;;:::i;:::-;;39069:437;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39069:437:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;34700:41;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34700:41:0;;;:::i;:::-;;;;;;;;;;;;;;;;39775:448;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39775:448:0;;;;;;;;;;;;;;;;:::i;:::-;;45272:124;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45272:124:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;49370:133;;5:9:-1;2:2;;;27:1;24;17:12;2:2;49370:133:0;;;;;;;;;;;;;;;;:::i;:::-;;34340:48;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34340:48:0;;;:::i;:::-;;;;;;;;;;;;;;;;34149:40;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34149:40:0;;;:::i;:::-;;;;;;;;;;;;;;;;50314:991;;5:9:-1;2:2;;;27:1;24;17:12;2:2;50314:991:0;;;:::i;:::-;;34851:32;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34851:32:0;;;:::i;:::-;;;;;;;;;;;;;;;;34395:46;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34395:46:0;;;:::i;:::-;;;;;;;;;;;;;;;;36930:198;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36930:198:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;16322:148;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16322:148:0;;;:::i;:::-;;33993:40;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33993:40:0;;;:::i;:::-;;;;;;;;;;;;;;;;34499:37;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34499:37:0;;;:::i;:::-;;;;;;;;;;;;;;;;38461:120;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38461:120:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15686:79;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15686:79:0;;;:::i;:::-;;;;;;;;;;;;;;;;41699:122;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41699:122:0;;;;;;;;;;;;;;;;:::i;:::-;;54798:392;;5:9:-1;2:2;;;27:1;24;17:12;2:2;54798:392:0;;;:::i;:::-;;34196:48;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34196:48:0;;;:::i;:::-;;;;;;;;;;;;;;;;34251:40;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34251:40:0;;;:::i;:::-;;;;;;;;;;;;;;;;36641:87;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36641:87:0;;;:::i;:::-;;;;;;;;;;;;;;;;50119:187;;5:9:-1;2:2;;;27:1;24;17:12;2:2;50119:187:0;;;:::i;:::-;;;;;;;;;;;;;;;;38184:269;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38184:269:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;17328:293;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17328:293:0;;;:::i;:::-;;37136:170;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37136:170:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;34636:57;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34636:57:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;16877:89;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16877:89:0;;;:::i;:::-;;;;;;;;;;;;;;;;33830:36;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33830:36:0;;;:::i;:::-;;;;;;;;;;;;;;;;33776:47;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33776:47:0;;;:::i;:::-;;;;;;;;;;;;;;;;41829:171;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41829:171:0;;;;;;;;;;;;;;;;:::i;:::-;;49226:136;;5:9:-1;2:2;;;27:1;24;17:12;2:2;49226:136:0;;;;;;;;;;;;;;;;:::i;:::-;;17042:214;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17042:214:0;;;;;;;;;;;;;;;;:::i;:::-;;37314:143;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37314:143:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;41475:110;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41475:110:0;;;;;;;;;;;;;;;;:::i;:::-;;16625:244;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16625:244:0;;;;;;;;;;;;;;;;:::i;:::-;;34091:38;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34091:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;41593:98;15908:12;:10;:12::i;:::-;15898:22;;:6;;;;;;;;;;;:22;;;15890:67;;;;;;;;;;;;;;;;;;;;;;41677:6:::1;41667:7;:16;;;;41593:98:::0;:::o;36550:83::-;36587:13;36620:5;36613:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36550:83;:::o;37465:161::-;37540:4;37557:39;37566:12;:10;:12::i;:::-;37580:7;37589:6;37557:8;:39::i;:::-;37614:4;37607:11;;37465:161;;;;:::o;38589:87::-;38631:7;38658:10;;38651:17;;38589:87;:::o;36827:95::-;36880:7;36907;;36900:14;;36827:95;:::o;49511:600::-;49579:7;49599:19;49621:194;49783:31;49801:11;49783:9;:31::i;:::-;49621:122;49689:53;49699:42;49689:9;:53::i;:::-;49621;49652:21;49670:1;49652:9;:21::i;:::-;49629:7;;49621:30;;:53;;;;:::i;:::-;:67;;:122;;;;:::i;:::-;:161;;:194;;;;:::i;:::-;49599:216;;49872:5;:24;49911:7;;49933:29;49951:9;49933;:29::i;:::-;49977:21;50013:29;;50057:11;50083:9;49872:231;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;49872:231:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;49872:231:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;49872:231:0;;;;;;;;;49865:238;;;49511:600;;;:::o;37634:316::-;37732:4;37749:39;37759:6;37767:9;37778:6;37786:1;37749:9;:39::i;:::-;37799:121;37808:6;37816:12;:10;:12::i;:::-;37830:89;37868:6;37830:89;;;;;;;;;;;;;;;;;:11;:19;37842:6;37830:19;;;;;;;;;;;;;;;:33;37850:12;:10;:12::i;:::-;37830:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;37799:8;:121::i;:::-;37938:4;37931:11;;37634:316;;;;;:::o;39514:253::-;39581:7;39620;;39609;:18;;39601:73;;;;;;;;;;;;;;;;;;;;;;39685:19;39707:10;:8;:10::i;:::-;39685:32;;39735:24;39747:11;39735:7;:11;;:24;;;;:::i;:::-;39728:31;;;39514:253;;;:::o;36736:83::-;36777:5;36802:9;;;;;;;;;;;36795:16;;36736:83;:::o;40231:475::-;15908:12;:10;:12::i;:::-;15898:22;;:6;;;;;;;;;;;:22;;;15890:67;;;;;;;;;;;;;;;;;;;;;;40313:11:::1;:20;40325:7;40313:20;;;;;;;;;;;;;;;;;;;;;;;;;40305:56;;;;;;;;;;;;;;;;;;;;;;40377:9;40389:1:::0;40377:13:::1;;40372:327;40396:9;:16;;;;40392:1;:20;40372:327;;;40454:7;40438:23;;:9;40448:1;40438:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;40434:254;;;40497:9;40526:1;40507:9;:16;;;;:20;40497:31;;;;;;;;;;;;;;;;;;;;;;;;;40482:9;40492:1;40482:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;40566:1;40547:7;:16;40555:7;40547:16;;;;;;;;;;;;;;;:20;;;;40609:5;40586:11;:20;40598:7;40586:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;40633:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40667:5;;40434:254;40414:3;;;;;;;40372:327;;;;40231:475:::0;:::o;34040:44::-;;;;:::o;37958:218::-;38046:4;38063:83;38072:12;:10;:12::i;:::-;38086:7;38095:50;38134:10;38095:11;:25;38107:12;:10;:12::i;:::-;38095:25;;;;;;;;;;;;;;;:34;38121:7;38095:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;38063:8;:83::i;:::-;38164:4;38157:11;;37958:218;;;;:::o;34768:26::-;;;;:::o;38684:377::-;38736:14;38753:12;:10;:12::i;:::-;38736:29;;38785:11;:19;38797:6;38785:19;;;;;;;;;;;;;;;;;;;;;;;;;38784:20;38776:77;;;;;;;;;;;;;;;;;;;;;;38865:15;38889:19;38900:7;38889:10;:19::i;:::-;38864:44;;;;;;;38937:28;38957:7;38937;:15;38945:6;38937:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;38919:7;:15;38927:6;38919:15;;;;;;;;;;;;;;;:46;;;;38986:20;38998:7;38986;;:11;;:20;;;;:::i;:::-;38976:7;:30;;;;39030:23;39045:7;39030:10;;:14;;:23;;;;:::i;:::-;39017:10;:36;;;;38684:377;;;:::o;52338:187::-;52425:4;52442:53;52452:12;:10;:12::i;:::-;52466:9;52477:6;52485:9;52442;:53::i;:::-;52513:4;52506:11;;52338:187;;;;:::o;41356:111::-;15908:12;:10;:12::i;:::-;15898:22;;:6;;;;;;;;;;;:22;;;15890:67;;;;;;;;;;;;;;;;;;;;;;41455:4:::1;41425:18;:27;41444:7;41425:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;41356:111:::0;:::o;39069:437::-;39160:7;39199;;39188;:18;;39180:62;;;;;;;;;;;;;;;;;;;;;;39258:17;39253:246;;39293:15;39317:19;39328:7;39317:10;:19::i;:::-;39292:44;;;;;;;39358:7;39351:14;;;;;39253:246;39400:23;39431:19;39442:7;39431:10;:19::i;:::-;39398:52;;;;;;;39472:15;39465:22;;;39069:437;;;;;:::o;34700:41::-;;;;;;;;;;;;;:::o;39775:448::-;15908:12;:10;:12::i;:::-;15898:22;;:6;;;;;;;;;;;:22;;;15890:67;;;;;;;;;;;;;;;;;;;;;;39972:11:::1;:20;39984:7;39972:20;;;;;;;;;;;;;;;;;;;;;;;;;39971:21;39963:61;;;;;;;;;;;;;;;;;;;;;;40058:1;40039:7;:16;40047:7;40039:16;;;;;;;;;;;;;;;;:20;40035:109;;;40095:37;40115:7;:16;40123:7;40115:16;;;;;;;;;;;;;;;;40095:19;:37::i;:::-;40076:7;:16;40084:7;40076:16;;;;;;;;;;;;;;;:56;;;;40035:109;40177:4;40154:11;:20;40166:7;40154:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;40192:9;40207:7;40192:23;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;40192:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39775:448:::0;:::o;45272:124::-;45337:4;45361:18;:27;45380:7;45361:27;;;;;;;;;;;;;;;;;;;;;;;;;45354:34;;45272:124;;;:::o;49370:133::-;15908:12;:10;:12::i;:::-;15898:22;;:6;;;;;;;;;;;:22;;;15890:67;;;;;;;;;;;;;;;;;;;;;;49490:5:::1;49457:20;:30;49478:8;49457:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;49370:133:::0;;:::o;34340:48::-;;;;:::o;34149:40::-;;;;:::o;50314:991::-;32749:10;32736:23;;:9;:23;;;32728:53;;;;;;;;;;;;;;;;;;;;;;31744:1:::1;32348:7;;:19;;32340:63;;;;;;;;;;;;;;;;;;;;;;31744:1;32481:7;:18;;;;50425:15:::2;50387:22;:34;50410:10;50387:34;;;;;;;;;;;;;;;;:53;;50379:99;;;;;;;;;;;;;;;;;;;;;;50521:1;50497:21;50507:10;50497:9;:21::i;:::-;:25;50489:74;;;;;;;;;;;;;;;;;;;;;;50576:14;50593:30;50612:10;50593:18;:30::i;:::-;50576:47;;50679:15;;50669:6;:25;50665:287;;50711:5;:22;50760:13;50801:42;50863:13;50874:1;50863:6;:10;;:13;;;;:::i;:::-;50711:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;50711:180:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;50711:180:0;;;;50915:25;50926:13;50937:1;50926:6;:10;;:13;;;;:::i;:::-;50915:6;:10;;:25;;;;:::i;:::-;50906:34;;50665:287;51055:21;:19;:21::i;:::-;51037:15;:39;51000:22;:34;51023:10;51000:34;;;;;;;;;;;;;;;:76;;;;51092;51113:10;51125:6;51133:22;:34;51156:10;51133:34;;;;;;;;;;;;;;;;51092:76;;;;;;;;;;;;;;;;;51182:9;51204:10;51196:24;;51229:6;51196:44;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;51181:59:0;;;51259:4;51251:46;;;;;;;;;;;;;;;;;;;;;;32512:1;;31700::::1;32660:7;:22;;;;50314:991::o:0;34851:32::-;;;;:::o;34395:46::-;;;;:::o;36930:198::-;36996:7;37020:11;:20;37032:7;37020:20;;;;;;;;;;;;;;;;;;;;;;;;;37016:49;;;37049:7;:16;37057:7;37049:16;;;;;;;;;;;;;;;;37042:23;;;;37016:49;37083:37;37103:7;:16;37111:7;37103:16;;;;;;;;;;;;;;;;37083:19;:37::i;:::-;37076:44;;36930:198;;;;:::o;16322:148::-;15908:12;:10;:12::i;:::-;15898:22;;:6;;;;;;;;;;;:22;;;15890:67;;;;;;;;;;;;;;;;;;;;;;16429:1:::1;16392:40;;16413:6;::::0;::::1;;;;;;;;;16392:40;;;;;;;;;;;;16460:1;16443:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16322:148::o:0;33993:40::-;;;;:::o;34499:37::-;;;;:::o;38461:120::-;38529:4;38553:11;:20;38565:7;38553:20;;;;;;;;;;;;;;;;;;;;;;;;;38546:27;;38461:120;;;:::o;15686:79::-;15724:7;15751:6;;;;;;;;;;;15744:13;;15686:79;:::o;41699:122::-;15908:12;:10;:12::i;:::-;15898:22;;:6;;;;;;;;;;;:22;;;15890:67;;;;;;;;;;;;;;;;;;;;;;41801:12:::1;41785:13;:28;;;;41699:122:::0;:::o;54798:392::-;15908:12;:10;:12::i;:::-;15898:22;;:6;;;;;;;;;;;:22;;;15890:67;;;;;;;;;;;;;;;;;;;;;;54921:7:::1;54903:15;:25;54879:21;:49;;;;54994:15;54962:29;:47;;;;55020:18;55036:1;55020:15;:18::i;:::-;55049:30;55074:4;55049:24;:30::i;:::-;55121:61;55138:4;55153:13;55169:12;55121:8;:61::i;:::-;54798:392::o:0;34196:48::-;;;;:::o;34251:40::-;;;;:::o;36641:87::-;36680:13;36713:7;36706:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36641:87;:::o;50119:187::-;50171:7;50214:21;;50195:15;:40;50191:69;;50244:16;;50237:23;;;;50191:69;50278:20;;50271:27;;50119:187;;:::o;38184:269::-;38277:4;38294:129;38303:12;:10;:12::i;:::-;38317:7;38326:96;38365:15;38326:96;;;;;;;;;;;;;;;;;:11;:25;38338:12;:10;:12::i;:::-;38326:25;;;;;;;;;;;;;;;:34;38352:7;38326:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;38294:8;:129::i;:::-;38441:4;38434:11;;38184:269;;;;:::o;17328:293::-;17398:10;17380:28;;:14;;;;;;;;;;;:28;;;17372:76;;;;;;;;;;;;;;;;;;;;;;17473:9;;17467:3;:15;17459:60;;;;;;;;;;;;;;;;;;;;;;17564:14;;;;;;;;;;;17535:44;;17556:6;;;;;;;;;;;17535:44;;;;;;;;;;;;17599:14;;;;;;;;;;;17590:6;;:23;;;;;;;;;;;;;;;;;;17328:293::o;37136:170::-;37214:4;37231:45;37241:12;:10;:12::i;:::-;37255:9;37266:6;37274:1;37231:9;:45::i;:::-;37294:4;37287:11;;37136:170;;;;:::o;34636:57::-;;;;;;;;;;;;;;;;;:::o;16877:89::-;16922:7;16949:9;;16942:16;;16877:89;:::o;33830:36::-;;;:::o;33776:47::-;;;:::o;41829:171::-;15908:12;:10;:12::i;:::-;15898:22;;:6;;;;;;;;;;;:22;;;15890:67;;;;;;;;;;;;;;;;;;;;;;41930:8:::1;41906:21;;:32;;;;;;;;;;;;;;;;;;41954:38;41983:8;41954:38;;;;;;;;;;;;;;;41829:171:::0;:::o;49226:136::-;15908:12;:10;:12::i;:::-;15898:22;;:6;;;;;;;;;;;:22;;;15890:67;;;;;;;;;;;;;;;;;;;;;;49318:36:::1;49348:5;49318:25;49330:12;49318:7;;:11;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;49303:12;:51;;;;49226:136:::0;:::o;17042:214::-;15908:12;:10;:12::i;:::-;15898:22;;:6;;;;;;;;;;;:22;;;15890:67;;;;;;;;;;;;;;;;;;;;;;17123:6:::1;::::0;::::1;;;;;;;;;17106:14;;:23;;;;;;;;;;;;;;;;;;17157:1;17140:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17188:4;17182:3;:10;17170:9;:22;;;;17245:1;17208:40;;17229:6;::::0;::::1;;;;;;;;;17208:40;;;;;;;;;;;;17042:214:::0;:::o;37314:143::-;37395:7;37422:11;:18;37434:5;37422:18;;;;;;;;;;;;;;;:27;37441:7;37422:27;;;;;;;;;;;;;;;;37415:34;;37314:143;;;;:::o;41475:110::-;15908:12;:10;:12::i;:::-;15898:22;;:6;;;;;;;;;;;:22;;;15890:67;;;;;;;;;;;;;;;;;;;;;;41572:5:::1;41542:18;:27;41561:7;41542:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;41475:110:::0;:::o;16625:244::-;15908:12;:10;:12::i;:::-;15898:22;;:6;;;;;;;;;;;:22;;;15890:67;;;;;;;;;;;;;;;;;;;;;;16734:1:::1;16714:22;;:8;:22;;;;16706:73;;;;;;;;;;;;;;;;;;;;;;16824:8;16795:38;;16816:6;::::0;::::1;;;;;;;;;16795:38;;;;;;;;;;;;16853:8;16844:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16625:244:::0;:::o;34091:38::-;;;;:::o;4953:471::-;5011:7;5261:1;5256;:6;5252:47;;;5286:1;5279:8;;;;5252:47;5311:9;5327:1;5323;:5;5311:17;;5356:1;5351;5347;:5;;;;;;:10;5339:56;;;;;;;;;;;;;;;;;;;;;;5415:1;5408:8;;;4953:471;;;;;:::o;5900:132::-;5958:7;5985:39;5989:1;5992;5985:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5978:46;;5900:132;;;;:::o;8092:106::-;8145:15;8180:10;8173:17;;8092:106;:::o;45404:337::-;45514:1;45497:19;;:5;:19;;;;45489:68;;;;;;;;;;;;;;;;;;;;;;45595:1;45576:21;;:7;:21;;;;45568:68;;;;;;;;;;;;;;;;;;;;;;45679:6;45649:11;:18;45661:5;45649:18;;;;;;;;;;;;;;;:27;45668:7;45649:27;;;;;;;;;;;;;;;:36;;;;45717:7;45701:32;;45710:5;45701:32;;;45726:6;45701:32;;;;;;;;;;;;;;;45404:337;;;:::o;4063:136::-;4121:7;4148:43;4152:1;4155;4148:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4141:50;;4063:136;;;;:::o;45749:892::-;45911:1;45895:18;;:4;:18;;;;45887:68;;;;;;;;;;;;;;;;;;;;;;45988:1;45974:16;;:2;:16;;;;45966:64;;;;;;;;;;;;;;;;;;;;;;46058:1;46049:6;:10;46041:64;;;;;;;;;;;;;;;;;;;;;;46118:42;46136:4;46142:2;46146:6;46154:5;46118:17;:42::i;:::-;46202:24;46217:4;46223:2;46202:14;:24::i;:::-;46300:12;46315:4;46300:19;;46420:18;:24;46439:4;46420:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;46448:18;:22;46467:2;46448:22;;;;;;;;;;;;;;;;;;;;;;;;;46420:50;46416:98;;;46497:5;46487:15;;46416:98;46592:41;46607:4;46613:2;46617:6;46625:7;46592:14;:41::i;:::-;45749:892;;;;;:::o;4502:192::-;4588:7;4621:1;4616;:6;;4624:12;4608:29;;;;;;;;;;;;;;;;;;;;;;;;;4648:9;4664:1;4660;:5;4648:17;;4685:1;4678:8;;;4502:192;;;;;:::o;43457:164::-;43499:7;43520:15;43537;43556:19;:17;:19::i;:::-;43519:56;;;;43593:20;43605:7;43593;:11;;:20;;;;:::i;:::-;43586:27;;;;43457:164;:::o;3599:181::-;3657:7;3677:9;3693:1;3689;:5;3677:17;;3718:1;3713;:6;;3705:46;;;;;;;;;;;;;;;;;;;;;;3771:1;3764:8;;;3599:181;;;;:::o;42255:419::-;42314:7;42323;42332;42341;42350;42359;42380:23;42405:12;42419:18;42441:20;42453:7;42441:11;:20::i;:::-;42379:82;;;;;;42473:15;42490:23;42515:12;42531:50;42543:7;42552:4;42558:10;42570;:8;:10::i;:::-;42531:11;:50::i;:::-;42472:109;;;;;;42600:7;42609:15;42626:4;42632:15;42649:4;42655:10;42592:74;;;;;;;;;;;;;;;;;;42255:419;;;;;;;:::o;6528:278::-;6614:7;6646:1;6642;:5;6649:12;6634:28;;;;;;;;;;;;;;;;;;;;;;;;;6673:9;6689:1;6685;:5;;;;;;6673:17;;6797:1;6790:8;;;6528:278;;;;;:::o;51789:541::-;51983:5;51953:35;;:20;:26;51974:4;51953:26;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;:110;;;;;52058:5;52030:33;;:20;:24;52051:2;52030:24;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;51953:110;51935:388;;;52127:21;;52119:5;:29;:81;;;;;52171:29;;52152:15;:48;;52119:81;52115:197;;;52239:12;;52229:6;:22;;52221:75;;;;;;;;;;;;;;;;;;;;;;52115:197;51935:388;51789:541;;;;:::o;52533:2257::-;35522:4;35503:16;;:23;;;;;;;;;;;;;;;;;;52896:28:::1;52927:24;52945:4;52927:9;:24::i;:::-;52896:55;;52992:12;;52968:20;:36;52964:104;;53044:12;;53021:35;;52964:104;53080:15;53122:20;;53098;:44;;53080:62;;53174:16;;;;;;;;;;;53173:17;:40;;;;;53203:10;53173:40;:72;;;;;53234:11;53226:19;;:4;:19;;;;53173:72;:106;;;;;53258:21;;;;;;;;;;;53173:106;:173;;;;;53310:4;53294:21;;:4;:21;;;:51;;;;;53333:11;53319:26;;:2;:26;;;53294:51;53292:54;53173:173;53155:1628;;;53490:20;;53467:43;;53614:17;53634:27;53659:1;53634:20;:24;;:27;;;;:::i;:::-;53614:47;;53676:13;53692:42;53732:1;53692:35;53717:9;53692:20;:24;;:35;;;;:::i;:::-;:39;;:42;;;;:::i;:::-;53676:58;;53749:18;53770:31;53795:5;53770:20;:24;;:31;;;;:::i;:::-;53749:52;;53818:30;53851:20;53865:5;53851:9;:13;;:20;;;;:::i;:::-;53818:53;;53888:22;53913:21;53888:46;;54000:5;:22;54031:13;54047:22;54000:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;54000:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;54000:70:0;;;;54422:20;54445:41;54471:14;54445:21;:25;;:41;;;;:::i;:::-;54422:64;;54503:31;54537:19;54554:1;54537:12;:16;;:19;;;;:::i;:::-;54503:53;;54614:5;:18;54641:13;54657:7;:5;:7::i;:::-;54666:10;54678:23;54614:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;54614:88:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;54614:88:0;;;;54724:47;54739:5;54746:12;54760:10;54724:47;;;;;;;;;;;;;;;;;53155:1628;;;;;;;;35537:1;;35568:5:::0;35549:16;;:24;;;;;;;;;;;;;;;;;;52533:2257;;:::o;46722:782::-;46835:7;46830:41;;46857:14;:12;:14::i;:::-;46830:41;46915:47;46944:9;46955:6;46915:28;:47::i;:::-;46979:11;:19;46991:6;46979:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;47003:11;:22;47015:9;47003:22;;;;;;;;;;;;;;;;;;;;;;;;;47002:23;46979:46;46975:467;;;47042:48;47064:6;47072:9;47083:6;47042:21;:48::i;:::-;46975:467;;;47113:11;:19;47125:6;47113:19;;;;;;;;;;;;;;;;;;;;;;;;;47112:20;:46;;;;;47136:11;:22;47148:9;47136:22;;;;;;;;;;;;;;;;;;;;;;;;;47112:46;47108:334;;;47175:46;47195:6;47203:9;47214:6;47175:19;:46::i;:::-;47108:334;;;47243:11;:19;47255:6;47243:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;47266:11;:22;47278:9;47266:22;;;;;;;;;;;;;;;;;;;;;;;;;47243:45;47239:203;;;47305:48;47327:6;47335:9;47346:6;47305:21;:48::i;:::-;47239:203;;;47386:44;47404:6;47412:9;47423:6;47386:17;:44::i;:::-;47239:203;47108:334;46975:467;47459:7;47454:42;;47481:15;:13;:15::i;:::-;47454:42;46722:782;;;;:::o;43629:556::-;43680:7;43689;43709:15;43727:7;;43709:25;;43745:15;43763:7;;43745:25;;43786:9;43798:1;43786:13;;43781:289;43805:9;:16;;;;43801:1;:20;43781:289;;;43871:7;43847;:21;43855:9;43865:1;43855:12;;;;;;;;;;;;;;;;;;;;;;;;;43847:21;;;;;;;;;;;;;;;;:31;:66;;;;43906:7;43882;:21;43890:9;43900:1;43890:12;;;;;;;;;;;;;;;;;;;;;;;;;43882:21;;;;;;;;;;;;;;;;:31;43847:66;43843:97;;;43923:7;;43932;;43915:25;;;;;;;;;43843:97;43965:34;43977:7;:21;43985:9;43995:1;43985:12;;;;;;;;;;;;;;;;;;;;;;;;;43977:21;;;;;;;;;;;;;;;;43965:7;:11;;:34;;;;:::i;:::-;43955:44;;44024:34;44036:7;:21;44044:9;44054:1;44044:12;;;;;;;;;;;;;;;;;;;;;;;;;44036:21;;;;;;;;;;;;;;;;44024:7;:11;;:34;;;;:::i;:::-;44014:44;;43823:3;;;;;;;43781:289;;;;44094:20;44106:7;;44094;;:11;;:20;;;;:::i;:::-;44084:7;:30;44080:61;;;44124:7;;44133;;44116:25;;;;;;;;44080:61;44160:7;44169;44152:25;;;;;;43629:556;;;:::o;42682:330::-;42742:7;42751;42760;42780:12;42795:24;42811:7;42795:15;:24::i;:::-;42780:39;;42830:18;42851:30;42873:7;42851:21;:30::i;:::-;42830:51;;42892:23;42918:33;42940:10;42918:17;42930:4;42918:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;42892:59;;42970:15;42987:4;42993:10;42962:42;;;;;;;;;42682:330;;;;;:::o;43020:429::-;43135:7;43144;43153;43173:15;43191:24;43203:11;43191:7;:11;;:24;;;;:::i;:::-;43173:42;;43226:12;43241:21;43250:11;43241:4;:8;;:21;;;;:::i;:::-;43226:36;;43273:18;43294:27;43309:11;43294:10;:14;;:27;;;;:::i;:::-;43273:48;;43332:23;43358:33;43380:10;43358:17;43370:4;43358:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;43332:59;;43410:7;43419:15;43436:4;43402:39;;;;;;;;;;43020:429;;;;;;;;:::o;44896:235::-;44954:1;44943:7;;:12;:34;;;;;44976:1;44959:13;;:18;44943:34;44939:47;;;44979:7;;44939:47;45016:7;;44998:15;:25;;;;45058:13;;45034:21;:37;;;;45094:1;45084:7;:11;;;;45122:1;45106:13;:17;;;;44896:235;:::o;51313:468::-;51405:31;51439:20;51449:9;51439;:20::i;:::-;51405:54;;51470:29;51502:21;:19;:21::i;:::-;51470:53;;51608:5;:25;51648:23;51686:21;51722:19;;51756:6;51608:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;51608:165:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51608:165:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;51608:165:0;;;;;;;;;51572:22;:33;51595:9;51572:33;;;;;;;;;;;;;;;;:201;51536:22;:33;51559:9;51536:33;;;;;;;;;;;;;;;:237;;;;51313:468;;;;:::o;48605:563::-;48708:15;48725:23;48750:12;48764:23;48789:12;48803:18;48825:19;48836:7;48825:10;:19::i;:::-;48707:137;;;;;;;;;;;;48873:28;48893:7;48873;:15;48881:6;48873:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48855:7;:15;48863:6;48855:15;;;;;;;;;;;;;;;:46;;;;48930:28;48950:7;48930;:15;48938:6;48930:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48912:7;:15;48920:6;48912:15;;;;;;;;;;;;;;;:46;;;;48990:39;49013:15;48990:7;:18;48998:9;48990:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48969:7;:18;48977:9;48969:18;;;;;;;;;;;;;;;:60;;;;49040:26;49055:10;49040:14;:26::i;:::-;49077:23;49089:4;49095;49077:11;:23::i;:::-;49133:9;49116:44;;49125:6;49116:44;;;49144:15;49116:44;;;;;;;;;;;;;;;48605:563;;;;;;;;;:::o;48022:575::-;48123:15;48140:23;48165:12;48179:23;48204:12;48218:18;48240:19;48251:7;48240:10;:19::i;:::-;48122:137;;;;;;;;;;;;48288:28;48308:7;48288;:15;48296:6;48288:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48270:7;:15;48278:6;48270:15;;;;;;;;;;;;;;;:46;;;;48348:39;48371:15;48348:7;:18;48356:9;48348:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48327:7;:18;48335:9;48327:18;;;;;;;;;;;;;;;:60;;;;48419:39;48442:15;48419:7;:18;48427:9;48419:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48398:7;:18;48406:9;48398:18;;;;;;;;;;;;;;;:60;;;;48469:26;48484:10;48469:14;:26::i;:::-;48506:23;48518:4;48524;48506:11;:23::i;:::-;48562:9;48545:44;;48554:6;48545:44;;;48573:15;48545:44;;;;;;;;;;;;;;;48022:575;;;;;;;;;:::o;40714:634::-;40817:15;40834:23;40859:12;40873:23;40898:12;40912:18;40934:19;40945:7;40934:10;:19::i;:::-;40816:137;;;;;;;;;;;;40982:28;41002:7;40982;:15;40990:6;40982:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;40964:7;:15;40972:6;40964:15;;;;;;;;;;;;;;;:46;;;;41039:28;41059:7;41039;:15;41047:6;41039:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41021:7;:15;41029:6;41021:15;;;;;;;;;;;;;;;:46;;;;41099:39;41122:15;41099:7;:18;41107:9;41099:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41078:7;:18;41086:9;41078:18;;;;;;;;;;;;;;;:60;;;;41170:39;41193:15;41170:7;:18;41178:9;41170:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41149:7;:18;41157:9;41149:18;;;;;;;;;;;;;;;:60;;;;41220:26;41235:10;41220:14;:26::i;:::-;41257:23;41269:4;41275;41257:11;:23::i;:::-;41313:9;41296:44;;41305:6;41296:44;;;41324:15;41296:44;;;;;;;;;;;;;;;40714:634;;;;;;;;;:::o;47512:502::-;47611:15;47628:23;47653:12;47667:23;47692:12;47706:18;47728:19;47739:7;47728:10;:19::i;:::-;47610:137;;;;;;;;;;;;47776:28;47796:7;47776;:15;47784:6;47776:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47758:7;:15;47766:6;47758:15;;;;;;;;;;;;;;;:46;;;;47836:39;47859:15;47836:7;:18;47844:9;47836:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47815:7;:18;47823:9;47815:18;;;;;;;;;;;;;;;:60;;;;47886:26;47901:10;47886:14;:26::i;:::-;47923:23;47935:4;47941;47923:11;:23::i;:::-;47979:9;47962:44;;47971:6;47962:44;;;47990:15;47962:44;;;;;;;;;;;;;;;47512:502;;;;;;;;;:::o;45139:125::-;45193:15;;45183:7;:25;;;;45235:21;;45219:13;:37;;;;45139:125::o;44556:156::-;44620:7;44647:57;44686:7;44647:20;44659:7;;44647;:11;;:20;;;;:::i;:::-;:24;;:57;;;;:::i;:::-;44640:64;;44556:156;;;:::o;44720:168::-;44790:7;44817:63;44862:7;44817:26;44829:13;;44817:7;:11;;:26;;;;:::i;:::-;:30;;:63;;;;:::i;:::-;44810:70;;44720:168;;;:::o;44193:355::-;44256:19;44278:10;:8;:10::i;:::-;44256:32;;44299:18;44320:27;44335:11;44320:10;:14;;:27;;;;:::i;:::-;44299:48;;44383:38;44410:10;44383:7;:22;44399:4;44383:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;44358:7;:22;44374:4;44358:22;;;;;;;;;;;;;;;:63;;;;44436:11;:26;44456:4;44436:26;;;;;;;;;;;;;;;;;;;;;;;;;44432:108;;;44502:38;44529:10;44502:7;:22;44518:4;44502:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;44477:7;:22;44493:4;44477:22;;;;;;;;;;;;;;;:63;;;;44432:108;44193:355;;;:::o;42100:147::-;42178:17;42190:4;42178:7;;:11;;:17;;;;:::i;:::-;42168:7;:27;;;;42219:20;42234:4;42219:10;;:14;;:20;;;;:::i;:::-;42206:10;:33;;;;42100:147;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:124;;219:6;206:20;197:29;;231:30;255:5;231:30;;;191:75;;;;;273:130;;353:6;340:20;331:29;;365:33;392:5;365:33;;;325:78;;;;;410:134;;494:6;488:13;479:22;;506:33;533:5;506:33;;;473:71;;;;;551:241;;655:2;643:9;634:7;630:23;626:32;623:2;;;671:1;668;661:12;623:2;706:1;723:53;768:7;759:6;748:9;744:22;723:53;;;713:63;;685:97;617:175;;;;;799:366;;;920:2;908:9;899:7;895:23;891:32;888:2;;;936:1;933;926:12;888:2;971:1;988:53;1033:7;1024:6;1013:9;1009:22;988:53;;;978:63;;950:97;1078:2;1096:53;1141:7;1132:6;1121:9;1117:22;1096:53;;;1086:63;;1057:98;882:283;;;;;;1172:491;;;;1310:2;1298:9;1289:7;1285:23;1281:32;1278:2;;;1326:1;1323;1316:12;1278:2;1361:1;1378:53;1423:7;1414:6;1403:9;1399:22;1378:53;;;1368:63;;1340:97;1468:2;1486:53;1531:7;1522:6;1511:9;1507:22;1486:53;;;1476:63;;1447:98;1576:2;1594:53;1639:7;1630:6;1619:9;1615:22;1594:53;;;1584:63;;1555:98;1272:391;;;;;;1670:360;;;1788:2;1776:9;1767:7;1763:23;1759:32;1756:2;;;1804:1;1801;1794:12;1756:2;1839:1;1856:53;1901:7;1892:6;1881:9;1877:22;1856:53;;;1846:63;;1818:97;1946:2;1964:50;2006:7;1997:6;1986:9;1982:22;1964:50;;;1954:60;;1925:95;1750:280;;;;;;2037:366;;;2158:2;2146:9;2137:7;2133:23;2129:32;2126:2;;;2174:1;2171;2164:12;2126:2;2209:1;2226:53;2271:7;2262:6;2251:9;2247:22;2226:53;;;2216:63;;2188:97;2316:2;2334:53;2379:7;2370:6;2359:9;2355:22;2334:53;;;2324:63;;2295:98;2120:283;;;;;;2410:235;;2511:2;2499:9;2490:7;2486:23;2482:32;2479:2;;;2527:1;2524;2517:12;2479:2;2562:1;2579:50;2621:7;2612:6;2601:9;2597:22;2579:50;;;2569:60;;2541:94;2473:172;;;;;2652:241;;2756:2;2744:9;2735:7;2731:23;2727:32;2724:2;;;2772:1;2769;2762:12;2724:2;2807:1;2824:53;2869:7;2860:6;2849:9;2845:22;2824:53;;;2814:63;;2786:97;2718:175;;;;;2900:263;;3015:2;3003:9;2994:7;2990:23;2986:32;2983:2;;;3031:1;3028;3021:12;2983:2;3066:1;3083:64;3139:7;3130:6;3119:9;3115:22;3083:64;;;3073:74;;3045:108;2977:186;;;;;3170:360;;;3288:2;3276:9;3267:7;3263:23;3259:32;3256:2;;;3304:1;3301;3294:12;3256:2;3339:1;3356:53;3401:7;3392:6;3381:9;3377:22;3356:53;;;3346:63;;3318:97;3446:2;3464:50;3506:7;3497:6;3486:9;3482:22;3464:50;;;3454:60;;3425:95;3250:280;;;;;;3537:142;3628:45;3667:5;3628:45;;;3623:3;3616:58;3610:69;;;3686:113;3769:24;3787:5;3769:24;;;3764:3;3757:37;3751:48;;;3806:121;3897:24;3915:5;3897:24;;;3892:3;3885:37;3879:48;;;3934:104;4011:21;4026:5;4011:21;;;4006:3;3999:34;3993:45;;;4045:176;4153:62;4209:5;4153:62;;;4148:3;4141:75;4135:86;;;4228:347;;4340:39;4373:5;4340:39;;;4391:71;4455:6;4450:3;4391:71;;;4384:78;;4467:52;4512:6;4507:3;4500:4;4493:5;4489:16;4467:52;;;4540:29;4562:6;4540:29;;;4535:3;4531:39;4524:46;;4320:255;;;;;;4583:370;;4743:67;4807:2;4802:3;4743:67;;;4736:74;;4843:34;4839:1;4834:3;4830:11;4823:55;4912:3;4907:2;4902:3;4898:12;4891:25;4944:2;4939:3;4935:12;4928:19;;4729:224;;;;4962:374;;5122:67;5186:2;5181:3;5122:67;;;5115:74;;5222:34;5218:1;5213:3;5209:11;5202:55;5291:7;5286:2;5281:3;5277:12;5270:29;5327:2;5322:3;5318:12;5311:19;;5108:228;;;;5345:373;;5505:67;5569:2;5564:3;5505:67;;;5498:74;;5605:34;5601:1;5596:3;5592:11;5585:55;5674:6;5669:2;5664:3;5660:12;5653:28;5709:2;5704:3;5700:12;5693:19;;5491:227;;;;5727:379;;5887:67;5951:2;5946:3;5887:67;;;5880:74;;5987:34;5983:1;5978:3;5974:11;5967:55;6056:12;6051:2;6046:3;6042:12;6035:34;6097:2;6092:3;6088:12;6081:19;;5873:233;;;;6115:375;;6275:67;6339:2;6334:3;6275:67;;;6268:74;;6375:34;6371:1;6366:3;6362:11;6355:55;6444:8;6439:2;6434:3;6430:12;6423:30;6481:2;6476:3;6472:12;6465:19;;6261:229;;;;6499:327;;6659:67;6723:2;6718:3;6659:67;;;6652:74;;6759:29;6755:1;6750:3;6746:11;6739:50;6817:2;6812:3;6808:12;6801:19;;6645:181;;;;6835:327;;6995:67;7059:2;7054:3;6995:67;;;6988:74;;7095:29;7091:1;7086:3;7082:11;7075:50;7153:2;7148:3;7144:12;7137:19;;6981:181;;;;7171:323;;7331:67;7395:2;7390:3;7331:67;;;7324:74;;7431:25;7427:1;7422:3;7418:11;7411:46;7485:2;7480:3;7476:12;7469:19;;7317:177;;;;7503:331;;7663:67;7727:2;7722:3;7663:67;;;7656:74;;7763:33;7759:1;7754:3;7750:11;7743:54;7825:2;7820:3;7816:12;7809:19;;7649:185;;;;7843:377;;8003:67;8067:2;8062:3;8003:67;;;7996:74;;8103:34;8099:1;8094:3;8090:11;8083:55;8172:10;8167:2;8162:3;8158:12;8151:32;8211:2;8206:3;8202:12;8195:19;;7989:231;;;;8229:317;;8389:67;8453:2;8448:3;8389:67;;;8382:74;;8489:19;8485:1;8480:3;8476:11;8469:40;8537:2;8532:3;8528:12;8521:19;;8375:171;;;;8555:373;;8715:67;8779:2;8774:3;8715:67;;;8708:74;;8815:34;8811:1;8806:3;8802:11;8795:55;8884:6;8879:2;8874:3;8870:12;8863:28;8919:2;8914:3;8910:12;8903:19;;8701:227;;;;8937:370;;9097:67;9161:2;9156:3;9097:67;;;9090:74;;9197:34;9193:1;9188:3;9184:11;9177:55;9266:3;9261:2;9256:3;9252:12;9245:25;9298:2;9293:3;9289:12;9282:19;;9083:224;;;;9316:332;;9476:67;9540:2;9535:3;9476:67;;;9469:74;;9576:34;9572:1;9567:3;9563:11;9556:55;9639:2;9634:3;9630:12;9623:19;;9462:186;;;;9657:378;;9817:67;9881:2;9876:3;9817:67;;;9810:74;;9917:34;9913:1;9908:3;9904:11;9897:55;9986:11;9981:2;9976:3;9972:12;9965:33;10026:2;10021:3;10017:12;10010:19;;9803:232;;;;10044:372;;10204:67;10268:2;10263:3;10204:67;;;10197:74;;10304:34;10300:1;10295:3;10291:11;10284:55;10373:5;10368:2;10363:3;10359:12;10352:27;10407:2;10402:3;10398:12;10391:19;;10190:226;;;;10425:296;;10602:83;10683:1;10678:3;10602:83;;;10595:90;;10713:1;10708:3;10704:11;10697:18;;10588:133;;;;10730:329;;10890:67;10954:2;10949:3;10890:67;;;10883:74;;10990:31;10986:1;10981:3;10977:11;10970:52;11050:2;11045:3;11041:12;11034:19;;10876:183;;;;11068:331;;11228:67;11292:2;11287:3;11228:67;;;11221:74;;11328:33;11324:1;11319:3;11315:11;11308:54;11390:2;11385:3;11381:12;11374:19;;11214:185;;;;11408:331;;11568:67;11632:2;11627:3;11568:67;;;11561:74;;11668:33;11664:1;11659:3;11655:11;11648:54;11730:2;11725:3;11721:12;11714:19;;11554:185;;;;11748:381;;11908:67;11972:2;11967:3;11908:67;;;11901:74;;12008:34;12004:1;11999:3;11995:11;11988:55;12077:14;12072:2;12067:3;12063:12;12056:36;12120:2;12115:3;12111:12;12104:19;;11894:235;;;;12138:371;;12298:67;12362:2;12357:3;12298:67;;;12291:74;;12398:34;12394:1;12389:3;12385:11;12378:55;12467:4;12462:2;12457:3;12453:12;12446:26;12500:2;12495:3;12491:12;12484:19;;12284:225;;;;12518:372;;12678:67;12742:2;12737:3;12678:67;;;12671:74;;12778:34;12774:1;12769:3;12765:11;12758:55;12847:5;12842:2;12837:3;12833:12;12826:27;12881:2;12876:3;12872:12;12865:19;;12664:226;;;;12898:113;12981:24;12999:5;12981:24;;;12976:3;12969:37;12963:48;;;13018:121;13109:24;13127:5;13109:24;;;13104:3;13097:37;13091:48;;;13146:107;13225:22;13241:5;13225:22;;;13220:3;13213:35;13207:46;;;13260:379;;13467:147;13610:3;13467:147;;;13460:154;;13631:3;13624:10;;13448:191;;;;13646:222;;13773:2;13762:9;13758:18;13750:26;;13787:71;13855:1;13844:9;13840:17;13831:6;13787:71;;;13744:124;;;;;13875:460;;14066:2;14055:9;14051:18;14043:26;;14080:79;14156:1;14145:9;14141:17;14132:6;14080:79;;;14170:72;14238:2;14227:9;14223:18;14214:6;14170:72;;;14253;14321:2;14310:9;14306:18;14297:6;14253:72;;;14037:298;;;;;;;14342:476;;14533:2;14522:9;14518:18;14510:26;;14547:79;14623:1;14612:9;14608:17;14599:6;14547:79;;;14637:80;14713:2;14702:9;14698:18;14689:6;14637:80;;;14728;14804:2;14793:9;14789:18;14780:6;14728:80;;;14504:314;;;;;;;14825:596;;15044:3;15033:9;15029:19;15021:27;;15059:79;15135:1;15124:9;15120:17;15111:6;15059:79;;;15149:80;15225:2;15214:9;15210:18;15201:6;15149:80;;;15240;15316:2;15305:9;15301:18;15292:6;15240:80;;;15331;15407:2;15396:9;15392:18;15383:6;15331:80;;;15015:406;;;;;;;;15428:357;;15591:2;15580:9;15576:18;15568:26;;15605:79;15681:1;15670:9;15666:17;15657:6;15605:79;;;15695:80;15771:2;15760:9;15756:18;15747:6;15695:80;;;15562:223;;;;;;15792:210;;15913:2;15902:9;15898:18;15890:26;;15927:65;15989:1;15978:9;15974:17;15965:6;15927:65;;;15884:118;;;;;16009:272;;16161:2;16150:9;16146:18;16138:26;;16175:96;16268:1;16257:9;16253:17;16244:6;16175:96;;;16132:149;;;;;16288:310;;16435:2;16424:9;16420:18;16412:26;;16485:9;16479:4;16475:20;16471:1;16460:9;16456:17;16449:47;16510:78;16583:4;16574:6;16510:78;;;16502:86;;16406:192;;;;;16605:416;;16805:2;16794:9;16790:18;16782:26;;16855:9;16849:4;16845:20;16841:1;16830:9;16826:17;16819:47;16880:131;17006:4;16880:131;;;16872:139;;16776:245;;;;17028:416;;17228:2;17217:9;17213:18;17205:26;;17278:9;17272:4;17268:20;17264:1;17253:9;17249:17;17242:47;17303:131;17429:4;17303:131;;;17295:139;;17199:245;;;;17451:416;;17651:2;17640:9;17636:18;17628:26;;17701:9;17695:4;17691:20;17687:1;17676:9;17672:17;17665:47;17726:131;17852:4;17726:131;;;17718:139;;17622:245;;;;17874:416;;18074:2;18063:9;18059:18;18051:26;;18124:9;18118:4;18114:20;18110:1;18099:9;18095:17;18088:47;18149:131;18275:4;18149:131;;;18141:139;;18045:245;;;;18297:416;;18497:2;18486:9;18482:18;18474:26;;18547:9;18541:4;18537:20;18533:1;18522:9;18518:17;18511:47;18572:131;18698:4;18572:131;;;18564:139;;18468:245;;;;18720:416;;18920:2;18909:9;18905:18;18897:26;;18970:9;18964:4;18960:20;18956:1;18945:9;18941:17;18934:47;18995:131;19121:4;18995:131;;;18987:139;;18891:245;;;;19143:416;;19343:2;19332:9;19328:18;19320:26;;19393:9;19387:4;19383:20;19379:1;19368:9;19364:17;19357:47;19418:131;19544:4;19418:131;;;19410:139;;19314:245;;;;19566:416;;19766:2;19755:9;19751:18;19743:26;;19816:9;19810:4;19806:20;19802:1;19791:9;19787:17;19780:47;19841:131;19967:4;19841:131;;;19833:139;;19737:245;;;;19989:416;;20189:2;20178:9;20174:18;20166:26;;20239:9;20233:4;20229:20;20225:1;20214:9;20210:17;20203:47;20264:131;20390:4;20264:131;;;20256:139;;20160:245;;;;20412:416;;20612:2;20601:9;20597:18;20589:26;;20662:9;20656:4;20652:20;20648:1;20637:9;20633:17;20626:47;20687:131;20813:4;20687:131;;;20679:139;;20583:245;;;;20835:416;;21035:2;21024:9;21020:18;21012:26;;21085:9;21079:4;21075:20;21071:1;21060:9;21056:17;21049:47;21110:131;21236:4;21110:131;;;21102:139;;21006:245;;;;21258:416;;21458:2;21447:9;21443:18;21435:26;;21508:9;21502:4;21498:20;21494:1;21483:9;21479:17;21472:47;21533:131;21659:4;21533:131;;;21525:139;;21429:245;;;;21681:416;;21881:2;21870:9;21866:18;21858:26;;21931:9;21925:4;21921:20;21917:1;21906:9;21902:17;21895:47;21956:131;22082:4;21956:131;;;21948:139;;21852:245;;;;22104:416;;22304:2;22293:9;22289:18;22281:26;;22354:9;22348:4;22344:20;22340:1;22329:9;22325:17;22318:47;22379:131;22505:4;22379:131;;;22371:139;;22275:245;;;;22527:416;;22727:2;22716:9;22712:18;22704:26;;22777:9;22771:4;22767:20;22763:1;22752:9;22748:17;22741:47;22802:131;22928:4;22802:131;;;22794:139;;22698:245;;;;22950:416;;23150:2;23139:9;23135:18;23127:26;;23200:9;23194:4;23190:20;23186:1;23175:9;23171:17;23164:47;23225:131;23351:4;23225:131;;;23217:139;;23121:245;;;;23373:416;;23573:2;23562:9;23558:18;23550:26;;23623:9;23617:4;23613:20;23609:1;23598:9;23594:17;23587:47;23648:131;23774:4;23648:131;;;23640:139;;23544:245;;;;23796:416;;23996:2;23985:9;23981:18;23973:26;;24046:9;24040:4;24036:20;24032:1;24021:9;24017:17;24010:47;24071:131;24197:4;24071:131;;;24063:139;;23967:245;;;;24219:416;;24419:2;24408:9;24404:18;24396:26;;24469:9;24463:4;24459:20;24455:1;24444:9;24440:17;24433:47;24494:131;24620:4;24494:131;;;24486:139;;24390:245;;;;24642:416;;24842:2;24831:9;24827:18;24819:26;;24892:9;24886:4;24882:20;24878:1;24867:9;24863:17;24856:47;24917:131;25043:4;24917:131;;;24909:139;;24813:245;;;;25065:416;;25265:2;25254:9;25250:18;25242:26;;25315:9;25309:4;25305:20;25301:1;25290:9;25286:17;25279:47;25340:131;25466:4;25340:131;;;25332:139;;25236:245;;;;25488:416;;25688:2;25677:9;25673:18;25665:26;;25738:9;25732:4;25728:20;25724:1;25713:9;25709:17;25702:47;25763:131;25889:4;25763:131;;;25755:139;;25659:245;;;;25911:222;;26038:2;26027:9;26023:18;26015:26;;26052:71;26120:1;26109:9;26105:17;26096:6;26052:71;;;26009:124;;;;;26140:444;;26323:2;26312:9;26308:18;26300:26;;26337:71;26405:1;26394:9;26390:17;26381:6;26337:71;;;26419:72;26487:2;26476:9;26472:18;26463:6;26419:72;;;26502;26570:2;26559:9;26555:18;26546:6;26502:72;;;26294:290;;;;;;;26591:596;;26810:3;26799:9;26795:19;26787:27;;26825:79;26901:1;26890:9;26886:17;26877:6;26825:79;;;26915:80;26991:2;26980:9;26976:18;26967:6;26915:80;;;27006;27082:2;27071:9;27067:18;27058:6;27006:80;;;27097;27173:2;27162:9;27158:18;27149:6;27097:80;;;26781:406;;;;;;;;27194:836;;27469:3;27458:9;27454:19;27446:27;;27484:79;27560:1;27549:9;27545:17;27536:6;27484:79;;;27574:80;27650:2;27639:9;27635:18;27626:6;27574:80;;;27665;27741:2;27730:9;27726:18;27717:6;27665:80;;;27756;27832:2;27821:9;27817:18;27808:6;27756:80;;;27847:81;27923:3;27912:9;27908:19;27899:6;27847:81;;;27939;28015:3;28004:9;28000:19;27991:6;27939:81;;;27440:590;;;;;;;;;;28037:214;;28160:2;28149:9;28145:18;28137:26;;28174:67;28238:1;28227:9;28223:17;28214:6;28174:67;;;28131:120;;;;;28258:122;;28352:5;28346:12;28336:22;;28317:63;;;;28388:144;;28523:3;28508:18;;28501:31;;;;;28541:163;;28656:6;28651:3;28644:19;28693:4;28688:3;28684:14;28669:29;;28637:67;;;;;28712:91;;28774:24;28792:5;28774:24;;;28763:35;;28757:46;;;;28810:85;;28883:5;28876:13;28869:21;28858:32;;28852:43;;;;28902:121;;28975:42;28968:5;28964:54;28953:65;;28947:76;;;;29030:72;;29092:5;29081:16;;29075:27;;;;29109:81;;29180:4;29173:5;29169:16;29158:27;;29152:38;;;;29197:129;;29284:37;29315:5;29284:37;;;29271:50;;29265:61;;;;29333:171;;29437:62;29493:5;29437:62;;;29424:75;;29418:86;;;;29511:133;;29615:24;29633:5;29615:24;;;29602:37;;29596:48;;;;29651:121;;29730:37;29761:5;29730:37;;;29717:50;;29711:61;;;;29779:108;;29858:24;29876:5;29858:24;;;29845:37;;29839:48;;;;29895:268;29960:1;29967:101;29981:6;29978:1;29975:13;29967:101;;;30057:1;30052:3;30048:11;30042:18;30038:1;30033:3;30029:11;30022:39;30003:2;30000:1;29996:10;29991:15;;29967:101;;;30083:6;30080:1;30077:13;30074:2;;;30148:1;30139:6;30134:3;30130:16;30123:27;30074:2;29944:219;;;;;30171:97;;30259:2;30255:7;30250:2;30243:5;30239:14;30235:28;30225:38;;30219:49;;;;30276:117;30345:24;30363:5;30345:24;;;30338:5;30335:35;30325:2;;30384:1;30381;30374:12;30325:2;30319:74;;30400:111;30466:21;30481:5;30466:21;;;30459:5;30456:32;30446:2;;30502:1;30499;30492:12;30446:2;30440:71;;30518:117;30587:24;30605:5;30587:24;;;30580:5;30577:35;30567:2;;30626:1;30623;30616:12;30567:2;30561:74;

Swarm Source

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