Contract 0x587840d85679dC6D9589052aA49625A783feaF30

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x66a5d841b4bf9c324c76167c915ce7ac02ec8657e26b75924bfb03c0157a7cc5Approve82195282021-09-13 16:59:566 days 8 hrs ago0xa6e7080b796efe0629a2a57879948e6234ecaad5 IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000099963
0xa345103b685822edee4e96f610473a8129b0ecf5a010e684262c7ebf77a4ac8cApprove81728282021-09-12 2:04:507 days 23 hrs ago0xecd588abb64d9b41551bcb2615ce7bde8036b760 IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000155498
0x17f26cb4329721bf85e965d367bc6c8335ded1edccf1195e60f801cc669a0fe2Approve77790302021-08-29 9:54:4121 days 15 hrs ago0x062cc0bc86bb449898974c74921ef64f57c26496 IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000155498
0xbd03e69018364b03b5f53c25b08d535f42420e9375ca6cd8a15c1affd6778262Approve76372602021-08-24 11:46:0226 days 14 hrs ago0x68e9f97b4e9c001cf5158faa9424277f04acc71a IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.0000326745
0x0b8c6143c6e38ffc984bcb64b20ebfc887ee1513ce0d827877d25f26c1e8e327Approve75790362021-08-22 11:14:4928 days 14 hrs ago0x1bd48ba0afc50bdf671721e505cd7adb7e5cd4e8 IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000099963
0x7570600534613eccd30d7e4e898322c9c2ec852ebca9871ca6cd26e43a0b4424Approve74910462021-08-19 9:55:1731 days 15 hrs ago0xdb736e2ec9d78e4d043ed943850a5934a3276a58 IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.00022214
0xbcae89ebec8e934eae3f606044fd6c2bc5bc86f6a6cc760feb7254fa3021a710Approve74749752021-08-18 20:31:4432 days 5 hrs ago0x85e8e046f63b3c7a8ec6514cd37e1611816104b7 IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000099963
0x1ea94827fc8b1ef326b22d374c1372f22eb978478c9ee5aad957807e3eb6b486Approve74692102021-08-18 15:43:2932 days 10 hrs ago0x9a08eb17be724231f279c7285271d8bca9bd4821 IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000099963
0xbe748ff1137c1a0482e40940d33d0d929bc5e1b455c3480d8c912c52faa249fbApprove74588302021-08-18 7:04:2932 days 18 hrs ago0xc5f53099e5b0f337cacdcb389b991cbd0f54f5d0 IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000099963
0x880d8ea0700cfb1133373eac5dd90fdd0cc5f756a26f7d5ed6fc58c98fe17d04Approve74587732021-08-18 7:01:3832 days 18 hrs ago0x67a02bdb455e7e08488eb7b43474e006f37f8b45 IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000099963
0x7f55f374ec78714adb5b001beecb63a98ae9657237d755ec49c26e3a7619ac57Approve74442872021-08-17 18:57:2033 days 6 hrs ago0x27f368e1cf629e11cdd3d24773a83c5738c3a06f IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000155498
0x46332adac64b745b548df1628f2656bc077e26c2b11c59de8ae2ad8ee531a9d8Approve74402052021-08-17 15:33:1333 days 10 hrs ago0x3047ef8d35aa330fed84ee86a75f38a8728f2fd5 IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000099963
0xda60c20225302f91fc0f16a08c81bd9249cb2291cc1e260c123d781120514892Approve74301342021-08-17 7:09:4033 days 18 hrs ago0x3787fb47635e2fb98b34613761ca1890f6dfc035 IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000155498
0x6ebc1dbd651b4acbda3058802b84a61d69b17c86cef9301e09eec4bcaa6323acApprove74257862021-08-17 3:32:1633 days 22 hrs ago0xc0afb68e1b7110a36ffb73ec4149eff0d98848ea IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000099963
0x17710d83b2da9102b7c2d7186c13abb3a632d237269c131e8258f11d9d7cc5e6Approve73545472021-08-14 16:10:1536 days 9 hrs ago0x21d37816238928155a3d84140ef0d3d1bf210821 IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000100017
0xe63609b7e14403115efd1aa0b3e2c987889aedc0f48ebd65d7f1a7f9e6e83e89Approve73544502021-08-14 16:05:2436 days 9 hrs ago0x8341e4d5cf0ec758c0add640393611c7c55ced41 IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000099963
0x58d6995609b2dc28aeb8db3e8f25bc5447180477ad700cc26dc1715c56939c14Approve73468522021-08-14 9:45:2936 days 16 hrs ago0xb297e685855ec9182e3c207ce460e7ef3934cb5a IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000155498
0x386a24c9833f622edbd05b0b46c1effa9c4e5c5da8a15f824fa6bbb1a1893f84Approve73156962021-08-13 7:47:3937 days 18 hrs ago0xa3d20553cb68d5c7d79fce171e09822960db16c0 IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000099963
0x7c52eec065bb7d2bcc3473be274f2c3a4f4465ae6bbadfd911c100c710b620d0Approve73151992021-08-13 7:22:4837 days 18 hrs ago0xebd695bfafd33c69b8fcde5aa2a29de028faf043 IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000099963
0x757d03d3349803e3e8fe66e47025f6919631c064354da1cdd5c0826289675ad0Approve73091272021-08-13 2:19:0937 days 23 hrs ago0xb3f0504b1aa3702955c09f93417ca0b0861ad415 IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.0000326745
0xfe2186032fb892d5ce084bc0ab03f016779455541dd1ea2ccf6df167110c4d09Approve72682002021-08-11 16:12:4839 days 9 hrs ago0x5338f8c4ad3cbe988af885e4af6b69c2cde72f4c IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000099963
0x667a07367722ea2eeed7ad56f40b7996e7be10e2d8f00c05563a2a310c37a7fcApprove72675972021-08-11 15:42:3939 days 10 hrs ago0x223929e0484123a250c5b7fdcd31449c9df4a09e IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.0001421696
0x58d0d538d97c28a7c2cdabac07c0c45383869b77f33d6ff843e53e50e9414959Approve72674422021-08-11 15:34:5439 days 10 hrs ago0x48bc18e3a9da3144736c2ab3610b89d8707f922b IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000155498
0x1b78ce4dade432b114f9686dc38c34424a7d50eb5fa70e3a7aacfb491b3c9d41Approve72670122021-08-11 15:13:2439 days 10 hrs ago0xef79a4f2e0d4bba67e3031bf7d3cd6b5215734a8 IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.000155498
0x1fabd67690f8b7b99857a8ae861662804ec9cd5d3ca68b8a5da2a7326d6a468fTransfer72667742021-08-11 15:01:3039 days 10 hrs ago0xc0afb68e1b7110a36ffb73ec4149eff0d98848ea IN  0x587840d85679dc6d9589052aa49625a783feaf300 HT0.00027504675
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb8b19dc076cd75000698c0e3de0aedbe70e4b0d01e783eda1851ec8af581a52c81016282021-09-09 14:44:4910 days 11 hrs ago 0x587840d85679dc6d9589052aa49625a783feaf30 Mdex: Router0.086453257770741473 HT
0xb8b19dc076cd75000698c0e3de0aedbe70e4b0d01e783eda1851ec8af581a52c81016282021-09-09 14:44:4910 days 11 hrs ago Mdex: Router 0x587840d85679dc6d9589052aa49625a783feaf300.086453257770741473 HT
0x6a338c0903285adb0ef62de43c5968bdff26200cc1e575888304495d4b42589374257912021-08-17 3:32:3133 days 22 hrs ago Mdex: Router 0x587840d85679dc6d9589052aa49625a783feaf300.000000687836222067 HT
0x6a338c0903285adb0ef62de43c5968bdff26200cc1e575888304495d4b42589374257912021-08-17 3:32:3133 days 22 hrs ago 0x587840d85679dc6d9589052aa49625a783feaf30 Mdex: Router0.17242393679374766 HT
0x6a338c0903285adb0ef62de43c5968bdff26200cc1e575888304495d4b42589374257912021-08-17 3:32:3133 days 22 hrs ago Mdex: Router 0x587840d85679dc6d9589052aa49625a783feaf300.17242393679374766 HT
0x40d09deec1daa9f3f64351ec513a0046b238f8bc6a1b847f5bf7ac582c0cfb9173239452021-08-13 14:40:0837 days 11 hrs ago Mdex: Router 0x587840d85679dc6d9589052aa49625a783feaf300.000113335849325611 HT
0x40d09deec1daa9f3f64351ec513a0046b238f8bc6a1b847f5bf7ac582c0cfb9173239452021-08-13 14:40:0837 days 11 hrs ago 0x587840d85679dc6d9589052aa49625a783feaf30 Mdex: Router0.230993597708650586 HT
0x40d09deec1daa9f3f64351ec513a0046b238f8bc6a1b847f5bf7ac582c0cfb9173239452021-08-13 14:40:0837 days 11 hrs ago Mdex: Router 0x587840d85679dc6d9589052aa49625a783feaf300.230993597708650586 HT
0x1e631933c16c87ebbef5f8c5c0b0b55a0bab177eaf5c8962f26f8e3865b7fec872675422021-08-11 15:39:5439 days 10 hrs ago Mdex: Router 0x587840d85679dc6d9589052aa49625a783feaf300.000088639284762663 HT
0x1e631933c16c87ebbef5f8c5c0b0b55a0bab177eaf5c8962f26f8e3865b7fec872675422021-08-11 15:39:5439 days 10 hrs ago 0x587840d85679dc6d9589052aa49625a783feaf30 Mdex: Router0.233458256463864795 HT
0x1e631933c16c87ebbef5f8c5c0b0b55a0bab177eaf5c8962f26f8e3865b7fec872675422021-08-11 15:39:5439 days 10 hrs ago Mdex: Router 0x587840d85679dc6d9589052aa49625a783feaf300.233458256463864795 HT
0x175a43d7513710ff3669f96bc68a5cdc4a28c44886b6517299ac9dbcaf00976b72532272021-08-11 3:44:0939 days 22 hrs ago Mdex: Router 0x587840d85679dc6d9589052aa49625a783feaf300.000112946236127314 HT
0x175a43d7513710ff3669f96bc68a5cdc4a28c44886b6517299ac9dbcaf00976b72532272021-08-11 3:44:0939 days 22 hrs ago 0x587840d85679dc6d9589052aa49625a783feaf30 Mdex: Router0.243354321217271757 HT
0x175a43d7513710ff3669f96bc68a5cdc4a28c44886b6517299ac9dbcaf00976b72532272021-08-11 3:44:0939 days 22 hrs ago Mdex: Router 0x587840d85679dc6d9589052aa49625a783feaf300.243354321217271757 HT
0x83053b6adfddbfbab21c604d13fc24c10f4f57b53aeb61c452555a80d7d17bae72532232021-08-11 3:43:5739 days 22 hrs ago Mdex: Router 0x587840d85679dc6d9589052aa49625a783feaf300.000112946236127314 HT
0x83053b6adfddbfbab21c604d13fc24c10f4f57b53aeb61c452555a80d7d17bae72532232021-08-11 3:43:5739 days 22 hrs ago 0x587840d85679dc6d9589052aa49625a783feaf30 Mdex: Router0.243354321217271757 HT
0x83053b6adfddbfbab21c604d13fc24c10f4f57b53aeb61c452555a80d7d17bae72532232021-08-11 3:43:5739 days 22 hrs ago Mdex: Router 0x587840d85679dc6d9589052aa49625a783feaf300.243354321217271757 HT
0xa4dd4d7ed2f9b0442c75b9e546a7375a24965146f2689af1ec0aefd1e445f3d972348092021-08-10 12:23:1440 days 13 hrs ago Mdex: Router 0x587840d85679dc6d9589052aa49625a783feaf300.000138381894105913 HT
0xa4dd4d7ed2f9b0442c75b9e546a7375a24965146f2689af1ec0aefd1e445f3d972348092021-08-10 12:23:1440 days 13 hrs ago 0x587840d85679dc6d9589052aa49625a783feaf30 Mdex: Router0.253079246730941698 HT
0xa4dd4d7ed2f9b0442c75b9e546a7375a24965146f2689af1ec0aefd1e445f3d972348092021-08-10 12:23:1440 days 13 hrs ago Mdex: Router 0x587840d85679dc6d9589052aa49625a783feaf300.253079246730941698 HT
0x1c4cfb3eff474ca32a2b8ea8751531778e596c4368ed9df6f182a07239a485f972343202021-08-10 11:58:4740 days 13 hrs ago Mdex: Router 0x587840d85679dc6d9589052aa49625a783feaf300.000219553219134778 HT
0x1c4cfb3eff474ca32a2b8ea8751531778e596c4368ed9df6f182a07239a485f972343202021-08-10 11:58:4740 days 13 hrs ago 0x587840d85679dc6d9589052aa49625a783feaf30 Mdex: Router0.285222655582514768 HT
0x1c4cfb3eff474ca32a2b8ea8751531778e596c4368ed9df6f182a07239a485f972343202021-08-10 11:58:4740 days 13 hrs ago Mdex: Router 0x587840d85679dc6d9589052aa49625a783feaf300.285222655582514768 HT
0xcd8afeb41121ce85d88d92cf9887d8a513216c0e89d858cbd52a4783af4dce0172339622021-08-10 11:40:5340 days 14 hrs ago Mdex: Router 0x587840d85679dc6d9589052aa49625a783feaf300.000842287852338188 HT
0xcd8afeb41121ce85d88d92cf9887d8a513216c0e89d858cbd52a4783af4dce0172339622021-08-10 11:40:5340 days 14 hrs ago 0x587840d85679dc6d9589052aa49625a783feaf30 Mdex: Router0.46205341889259071 HT
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
token

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2021-08-04
*/

pragma solidity ^0.6.12;
// SPDX-License-Identifier: Unlicensed
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;
    }
}
interface IERC20 {

    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);
}
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 ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

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

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

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

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

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

// pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function feeToRate() external view returns (uint256);

    function initCodeHash() external view returns (bytes32);

    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;

    function setFeeToRate(uint256) external;

    function setInitCodeHash(bytes32) external;

    function sortTokens(address tokenA, address tokenB) external pure returns (address token0, address token1);

    function pairFor(address tokenA, address tokenB) external view returns (address pair);

    function getReserves(address tokenA, address tokenB) external view returns (uint256 reserveA, uint256 reserveB);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) external view returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) external view returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);
}

interface IMdexPair {
    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 price(address token, uint256 baseDecimal) external view returns (uint256);

    function initialize(address, address) external;
}

interface IMdexRouter {
    function factory() external pure returns (address);

    function WHT() external pure returns (address);

    function swapMining() 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(uint256 amountA, uint256 reserveA, uint256 reserveB) external view returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) external view returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) external view returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);

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

interface ISwapMining {
    function swap(address account, address input, address output, uint256 amount) external returns (bool);
}


contract token is Context, IERC20, Ownable {
    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;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "SmartDoge";
    string private _symbol = "SmartDoge";
    uint8 private _decimals = 18;

    uint256 public _taxFee = 4;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 4;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _burnFee = 3;
    address public burnAddress = address(0x000000000000000000000000000000000000dEaD);
    address public ownerAddres = address(0x3047ef8d35Aa330feD84EE86a75F38A8728F2Fd5);
    uint256 private _previousBurnFee = _burnFee;

    IMdexRouter public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public _maxTxAmount = 1000000000000000 * 10 **18;
    uint256 private numTokensSellToAddToLiquidity = 1000000000000 * 10 **18;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

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

    constructor () public {
        _rOwned[ownerAddres] = _rTotal;

        IMdexRouter _uniswapV2Router = IMdexRouter(0xED7d5F38C79115ca12fe6C0041abb22F0A06C300);
        // Create a uniswap pair for this new token
        uniswapV2Pair = IMdexFactory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WHT());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

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

        emit Transfer(address(0),ownerAddres, _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);
        return true;
    }

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

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

        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]) {
            _transferStandard(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, uint256 tBurn) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        if(_burnFee != 0){
            _tOwned[burnAddress] = _tOwned[burnAddress].add(tBurn);
            _rOwned[burnAddress] = _rOwned[burnAddress].add(tBurn);
            emit Transfer(sender, burnAddress, tBurn);
        }
        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, uint256 tBurn) = _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);
        if(_burnFee != 0){
            _tOwned[burnAddress] = _tOwned[burnAddress].add(tBurn);
            _rOwned[burnAddress] = _rOwned[burnAddress].add(tBurn);
            emit Transfer(sender, burnAddress, tBurn);
        }
        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, uint256 tBurn) = _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);
        if(_burnFee != 0){
            _tOwned[burnAddress] = _tOwned[burnAddress].add(tBurn);
            _rOwned[burnAddress] = _rOwned[burnAddress].add(tBurn);
            emit Transfer(sender, burnAddress, tBurn);
        }
        emit Transfer(sender, recipient, tTransferAmount);
    }


    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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: 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, "ERC20: 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 Uniswap 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 already 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, uint256 tBurn) = _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);
        if(_burnFee != 0){
            _tOwned[burnAddress] = _tOwned[burnAddress].add(tBurn);
            _rOwned[burnAddress] = _rOwned[burnAddress].add(tBurn);
            emit Transfer(sender, burnAddress, tBurn);
        }
        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 setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

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

    //to recieve ETH from uniswapV2Router when swaping
    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) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tBurn, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tBurn);
    }

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

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rBurn = tBurn.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rBurn);
        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 calculateBurnFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_burnFee).div(
            10**2
        );
    }

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

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousBurnFee = _burnFee;

        _taxFee = 0;
        _liquidityFee = 0;
        _burnFee = 0;
    }

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

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        // 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 uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

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

        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

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

        //        if ((from == address(lpToken) || to == address(lpToken)) && to != address(0x47A63774F2C0BC9B828188D9c244e5956fFcbbDf)) {
        //            require(amount <= 5000000 * 10 ** 18, "Transfer amount Overrun");
        //        }

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

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

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

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WHT();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

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





}

Contract ABI

[{"inputs":[],"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":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"tokensIntoLiqudity","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":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":[{"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":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[{"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":[{"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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerAddres","outputs":[{"internalType":"address","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":[{"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":[{"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IMdexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6d314dc6448d9338c15b0a0000000060099081556d20d190a98096d294893fffffffff19600a5561010060405260c081905268536d617274446f676560b81b60e09081526200005291600c919062000423565b5060408051808201909152600980825268536d617274446f676560b81b60209092019182526200008591600d9162000423565b50600e805460ff191660129081179091556004600f81905560108190556011819055905560036013819055601480546001600160a01b031990811661dead1790915560158054909116733047ef8d35aa330fed84ee86a75f38a8728f2fd51790556016556017805461ff0019166101001790556d314dc6448d9338c15b0a000000006018556c0c9f2c9cd04674edea400000006019553480156200012857600080fd5b5060006200013562000410565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a546015546001600160a01b031660009081526003602090815260409182902092909255805163c45a015560e01b8152905173ed7d5f38c79115ca12fe6c0041abb22f0a06c30092839263c45a01559260048083019392829003018186803b158015620001ec57600080fd5b505afa15801562000201573d6000803e3d6000fd5b505050506040513d60208110156200021857600080fd5b505160408051632e5a42c960e11b815290516001600160a01b039283169263c9c6539692309291861691635cb4859291600480820192602092909190829003018186803b1580156200026957600080fd5b505afa1580156200027e573d6000803e3d6000fd5b505050506040513d60208110156200029557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620002e857600080fd5b505af1158015620002fd573d6000803e3d6000fd5b505050506040513d60208110156200031457600080fd5b50516001600160601b0319606091821b811660a0529082901b166080526014546001600160a01b03166000908152600760205260408120805460ff19166001908117909155906006906200036762000414565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601580548316825260068552838220805487166001908117909155601454841683528483208054881682179055308352848320805490971617909555935460095483519081529251911693927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef928290030190a350620004bf565b3390565b6000546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200046657805160ff191683800117855562000496565b8280016001018555821562000496579182015b828111156200049657825182559160200191906001019062000479565b50620004a4929150620004a8565b5090565b5b80821115620004a45760008155600101620004a9565b60805160601c60a05160601c612c3c6200050760003980610f1e5280611a38525080610a01528061222552806122dd528061230452806123ea52806124115250612c3c6000f3fe60806040526004361061023f5760003560e01c806370a082311161012e578063a69df4b5116100ab578063d543dbeb1161006f578063d543dbeb146107f3578063dd4670641461081d578063dd62ed3e14610847578063ea2f0b3714610882578063f2fde38b146108b557610246565b8063a69df4b51461074f578063a9059cbb14610764578063b6c523241461079d578063c0b0fda2146107b2578063c49b9a80146107c757610246565b806389ff0dfa116100f257806389ff0dfa146106ad5780638da5cb5b146106c25780638ee88c53146106d757806395d89b4114610701578063a457c2d71461071657610246565b806370a082311461060857806370d5ae051461063b578063715018a6146106505780637d1db4a51461066557806388f820201461067a57610246565b806339509351116101bc57806349bd5a5e1161018057806349bd5a5e146105635780634a74bb021461057857806352390c021461058d5780635342acb4146105c05780636bc87c3a146105f357610246565b806339509351146104865780633b124fe7146104bf5780633bd5d173146104d4578063437823ec146104fe5780634549b0391461053157610246565b806318160ddd1161020357806318160ddd146103a657806323b872dd146103bb5780632d838119146103fe578063313ce567146104285780633685d4191461045357610246565b8063061c82d01461024b57806306fdde0314610277578063095ea7b31461030157806313114a9d1461034e5780631694505e1461037557610246565b3661024657005b600080fd5b34801561025757600080fd5b506102756004803603602081101561026e57600080fd5b50356108e8565b005b34801561028357600080fd5b5061028c610945565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102c65781810151838201526020016102ae565b50505050905090810190601f1680156102f35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561030d57600080fd5b5061033a6004803603604081101561032457600080fd5b506001600160a01b0381351690602001356109db565b604080519115158252519081900360200190f35b34801561035a57600080fd5b506103636109f9565b60408051918252519081900360200190f35b34801561038157600080fd5b5061038a6109ff565b604080516001600160a01b039092168252519081900360200190f35b3480156103b257600080fd5b50610363610a23565b3480156103c757600080fd5b5061033a600480360360608110156103de57600080fd5b506001600160a01b03813581169160208101359091169060400135610a29565b34801561040a57600080fd5b506103636004803603602081101561042157600080fd5b5035610ab0565b34801561043457600080fd5b5061043d610b12565b6040805160ff9092168252519081900360200190f35b34801561045f57600080fd5b506102756004803603602081101561047657600080fd5b50356001600160a01b0316610b1b565b34801561049257600080fd5b5061033a600480360360408110156104a957600080fd5b506001600160a01b038135169060200135610cdc565b3480156104cb57600080fd5b50610363610d2a565b3480156104e057600080fd5b50610275600480360360208110156104f757600080fd5b5035610d30565b34801561050a57600080fd5b506102756004803603602081101561052157600080fd5b50356001600160a01b0316610e0c565b34801561053d57600080fd5b506103636004803603604081101561055457600080fd5b50803590602001351515610e88565b34801561056f57600080fd5b5061038a610f1c565b34801561058457600080fd5b5061033a610f40565b34801561059957600080fd5b50610275600480360360208110156105b057600080fd5b50356001600160a01b0316610f4e565b3480156105cc57600080fd5b5061033a600480360360208110156105e357600080fd5b50356001600160a01b03166110d4565b3480156105ff57600080fd5b506103636110f2565b34801561061457600080fd5b506103636004803603602081101561062b57600080fd5b50356001600160a01b03166110f8565b34801561064757600080fd5b5061038a61115a565b34801561065c57600080fd5b50610275611169565b34801561067157600080fd5b506103636111f9565b34801561068657600080fd5b5061033a6004803603602081101561069d57600080fd5b50356001600160a01b03166111ff565b3480156106b957600080fd5b5061038a61121d565b3480156106ce57600080fd5b5061038a61122c565b3480156106e357600080fd5b50610275600480360360208110156106fa57600080fd5b503561123b565b34801561070d57600080fd5b5061028c611298565b34801561072257600080fd5b5061033a6004803603604081101561073957600080fd5b506001600160a01b0381351690602001356112f9565b34801561075b57600080fd5b50610275611361565b34801561077057600080fd5b5061033a6004803603604081101561078757600080fd5b506001600160a01b03813516906020013561144f565b3480156107a957600080fd5b50610363611463565b3480156107be57600080fd5b50610363611469565b3480156107d357600080fd5b50610275600480360360208110156107ea57600080fd5b5035151561146f565b3480156107ff57600080fd5b506102756004803603602081101561081657600080fd5b5035611516565b34801561082957600080fd5b506102756004803603602081101561084057600080fd5b5035611594565b34801561085357600080fd5b506103636004803603604081101561086a57600080fd5b506001600160a01b0381358116916020013516611632565b34801561088e57600080fd5b50610275600480360360208110156108a557600080fd5b50356001600160a01b031661165d565b3480156108c157600080fd5b50610275600480360360208110156108d857600080fd5b50356001600160a01b03166116d6565b6108f06117bc565b6000546001600160a01b03908116911614610940576040805162461bcd60e51b81526020600482018190526024820152600080516020612ae1833981519152604482015290519081900360640190fd5b600f55565b600c8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109d15780601f106109a6576101008083540402835291602001916109d1565b820191906000526020600020905b8154815290600101906020018083116109b457829003601f168201915b5050505050905090565b60006109ef6109e86117bc565b84846117c0565b5060015b92915050565b600b5490565b7f000000000000000000000000000000000000000000000000000000000000000081565b60095490565b6000610a368484846118ac565b610aa684610a426117bc565b610aa185604051806060016040528060288152602001612ab9602891396001600160a01b038a16600090815260056020526040812090610a806117bc565b6001600160a01b031681526020810191909152604001600020549190611af2565b6117c0565b5060019392505050565b6000600a54821115610af35760405162461bcd60e51b815260040180806020018281038252602a8152602001806129fe602a913960400191505060405180910390fd5b6000610afd611b89565b9050610b098382611bac565b9150505b919050565b600e5460ff1690565b610b236117bc565b6000546001600160a01b03908116911614610b73576040805162461bcd60e51b81526020600482018190526024820152600080516020612ae1833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16610be0576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600854811015610cd857816001600160a01b031660088281548110610c0457fe5b6000918252602090912001546001600160a01b03161415610cd057600880546000198101908110610c3157fe5b600091825260209091200154600880546001600160a01b039092169183908110610c5757fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610ca957fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610cd8565b600101610be3565b5050565b60006109ef610ce96117bc565b84610aa18560056000610cfa6117bc565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611bf5565b600f5481565b6000610d3a6117bc565b6001600160a01b03811660009081526007602052604090205490915060ff1615610d955760405162461bcd60e51b815260040180806020018281038252602c815260200180612b93602c913960400191505060405180910390fd5b6000610da083611c4f565b5050506001600160a01b038616600090815260036020526040902054939450610dce93925084915050611caa565b6001600160a01b038316600090815260036020526040902055600a54610df49082611caa565b600a55600b54610e049084611bf5565b600b55505050565b610e146117bc565b6000546001600160a01b03908116911614610e64576040805162461bcd60e51b81526020600482018190526024820152600080516020612ae1833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600954831115610ee1576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610f01576000610ef184611c4f565b509496506109f395505050505050565b6000610f0c84611c4f565b509396506109f395505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601754610100900460ff1681565b610f566117bc565b6000546001600160a01b03908116911614610fa6576040805162461bcd60e51b81526020600482018190526024820152600080516020612ae1833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff1615611014576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152600360205260409020541561106e576001600160a01b03811660009081526003602052604090205461105490610ab0565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b60115481565b6001600160a01b03811660009081526007602052604081205460ff161561113857506001600160a01b038116600090815260046020526040902054610b0d565b6001600160a01b0382166000908152600360205260409020546109f390610ab0565b6014546001600160a01b031681565b6111716117bc565b6000546001600160a01b039081169116146111c1576040805162461bcd60e51b81526020600482018190526024820152600080516020612ae1833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020612b01833981519152908390a3600080546001600160a01b0319169055565b60185481565b6001600160a01b031660009081526007602052604090205460ff1690565b6015546001600160a01b031681565b6000546001600160a01b031690565b6112436117bc565b6000546001600160a01b03908116911614611293576040805162461bcd60e51b81526020600482018190526024820152600080516020612ae1833981519152604482015290519081900360640190fd5b601155565b600d8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109d15780601f106109a6576101008083540402835291602001916109d1565b60006109ef6113066117bc565b84610aa185604051806060016040528060258152602001612be260259139600560006113306117bc565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611af2565b6001546001600160a01b031633146113aa5760405162461bcd60e51b8152600401808060200182810382526023815260200180612bbf6023913960400191505060405180910390fd5b6002544211611400576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b039384169390911691600080516020612b0183398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60006109ef61145c6117bc565b84846118ac565b60025490565b60135481565b6114776117bc565b6000546001600160a01b039081169116146114c7576040805162461bcd60e51b81526020600482018190526024820152600080516020612ae1833981519152604482015290519081900360640190fd5b60178054821515610100810261ff00199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b61151e6117bc565b6000546001600160a01b0390811691161461156e576040805162461bcd60e51b81526020600482018190526024820152600080516020612ae1833981519152604482015290519081900360640190fd5b61158e606461158883600954611cec90919063ffffffff16565b90611bac565b60185550565b61159c6117bc565b6000546001600160a01b039081169116146115ec576040805162461bcd60e51b81526020600482018190526024820152600080516020612ae1833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020612b01833981519152908290a350565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6116656117bc565b6000546001600160a01b039081169116146116b5576040805162461bcd60e51b81526020600482018190526024820152600080516020612ae1833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19169055565b6116de6117bc565b6000546001600160a01b0390811691161461172e576040805162461bcd60e51b81526020600482018190526024820152600080516020612ae1833981519152604482015290519081900360640190fd5b6001600160a01b0381166117735760405162461bcd60e51b8152600401808060200182810382526026815260200180612a286026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020612b0183398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001600160a01b0383166118055760405162461bcd60e51b8152600401808060200182810382526024815260200180612b6f6024913960400191505060405180910390fd5b6001600160a01b03821661184a5760405162461bcd60e51b8152600401808060200182810382526022815260200180612a4e6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118f15760405162461bcd60e51b8152600401808060200182810382526025815260200180612b4a6025913960400191505060405180910390fd5b6001600160a01b0382166119365760405162461bcd60e51b81526004018080602001828103825260238152602001806129db6023913960400191505060405180910390fd5b600081116119755760405162461bcd60e51b8152600401808060200182810382526029815260200180612b216029913960400191505060405180910390fd5b61197d61122c565b6001600160a01b0316836001600160a01b0316141580156119b757506119a161122c565b6001600160a01b0316826001600160a01b031614155b156119fd576018548111156119fd5760405162461bcd60e51b8152600401808060200182810382526028815260200180612a706028913960400191505060405180910390fd5b6000611a08306110f8565b90506018548110611a1857506018545b60195481108015908190611a2f575060175460ff16155b8015611a6d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611a805750601754610100900460ff165b15611a93576019549150611a9382611d45565b6001600160a01b03851660009081526006602052604090205460019060ff1680611ad557506001600160a01b03851660009081526006602052604090205460ff165b15611ade575060005b611aea86868684611de2565b505050505050565b60008184841115611b815760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611b46578181015183820152602001611b2e565b50505050905090810190601f168015611b735780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000611b96611f56565b9092509050611ba58282611bac565b9250505090565b6000611bee83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120b9565b9392505050565b600082820183811015611bee576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000806000806000806000806000806000611c698c61211e565b93509350935093506000806000611c8a8f878787611c85611b89565b612173565b919f509d509b509599509397509195509350505050919395979092949650565b6000611bee83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611af2565b600082611cfb575060006109f3565b82820282848281611d0857fe5b0414611bee5760405162461bcd60e51b8152600401808060200182810382526021815260200180612a986021913960400191505060405180910390fd5b6017805460ff191660011790556000611d5f826002611bac565b90506000611d6d8383611caa565b905047611d79836121d5565b6000611d854783611caa565b9050611d9183826123e4565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a150506017805460ff19169055505050565b80611def57611def6124e2565b6001600160a01b03841660009081526007602052604090205460ff168015611e3057506001600160a01b03831660009081526007602052604090205460ff16155b15611e4557611e4084848461251f565b611f43565b6001600160a01b03841660009081526007602052604090205460ff16158015611e8657506001600160a01b03831660009081526007602052604090205460ff165b15611e9657611e40848484612723565b6001600160a01b03841660009081526007602052604090205460ff16158015611ed857506001600160a01b03831660009081526007602052604090205460ff16155b15611ee857611e408484846127e2565b6001600160a01b03841660009081526007602052604090205460ff168015611f2857506001600160a01b03831660009081526007602052604090205460ff165b15611f3857611e4084848461283c565b611f438484846127e2565b80611f5057611f506128c5565b50505050565b600a546009546000918291825b60085481101561208757826003600060088481548110611f7f57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611fe45750816004600060088481548110611fbd57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611ffb57600a54600954945094505050506120b5565b61203b600360006008848154811061200f57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611caa565b925061207d600460006008848154811061205157fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611caa565b9150600101611f63565b50600954600a5461209791611bac565b8210156120af57600a546009549350935050506120b5565b90925090505b9091565b600081836121085760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611b46578181015183820152602001611b2e565b50600083858161211457fe5b0495945050505050565b600080600080600061212f866128d9565b9050600061213c876128f5565b9050600061214988612911565b905060006121638261215d85818d89611caa565b90611caa565b9993985091965094509092505050565b60008080806121828986611cec565b905060006121908987611cec565b9050600061219e8988611cec565b905060006121ac8989611cec565b905060006121c08261215d85818989611caa565b949d949c50929a509298505050505050505050565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061220357fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635cb485926040518163ffffffff1660e01b815260040160206040518083038186803b15801561227c57600080fd5b505afa158015612290573d6000803e3d6000fd5b505050506040513d60208110156122a657600080fd5b50518151829060019081106122b757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612302307f0000000000000000000000000000000000000000000000000000000000000000846117c0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156123a757818101518382015260200161238f565b505050509050019650505050505050600060405180830381600087803b1580156123d057600080fd5b505af1158015611aea573d6000803e3d6000fd5b61240f307f0000000000000000000000000000000000000000000000000000000000000000846117c0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d71982308560008061244c61122c565b426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b1580156124b757600080fd5b505af11580156124cb573d6000803e3d6000fd5b50505050506040513d6060811015611f5057600080fd5b600f541580156124f25750601154155b156124fc5761251d565b600f8054601055601180546012556013805460165560009283905590829055555b565b600080600080600080600061253388611c4f565b965096509650965096509650965061257988600460008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611caa90919063ffffffff16565b6001600160a01b038b166000908152600460209081526040808320939093556003905220546125a89088611caa565b6001600160a01b03808c1660009081526003602052604080822093909355908b16815220546125d79087611bf5565b6001600160a01b038a166000908152600360205260409020556125f98261292d565b61260385846129b6565b601354156126cc576014546001600160a01b03166000908152600460205260409020546126309082611bf5565b601480546001600160a01b03908116600090815260046020908152604080832095909555925490911681526003909152205461266c9082611bf5565b601480546001600160a01b039081166000908152600360209081526040918290209490945591548251858152925190821693918e16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92908290030190a35b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a350505050505050505050565b600080600080600080600061273788611c4f565b965096509650965096509650965061277d87600360008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611caa90919063ffffffff16565b6001600160a01b03808c16600090815260036020908152604080832094909455918c168152600490915220546127b39085611bf5565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546125d79087611bf5565b60008060008060008060006127f688611c4f565b96509650965096509650965096506125a887600360008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611caa90919063ffffffff16565b600080600080600080600061285088611c4f565b965096509650965096509650965061289688600460008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611caa90919063ffffffff16565b6001600160a01b038b1660009081526004602090815260408083209390935560039052205461277d9088611caa565b601054600f55601254601155601654601355565b60006109f36064611588600f5485611cec90919063ffffffff16565b60006109f3606461158860115485611cec90919063ffffffff16565b60006109f3606461158860135485611cec90919063ffffffff16565b6000612937611b89565b905060006129458383611cec565b306000908152600360205260409020549091506129629082611bf5565b3060009081526003602090815260408083209390935560079052205460ff16156129b157306000908152600460205260409020546129a09084611bf5565b306000908152600460205260409020555b505050565b600a546129c39083611caa565b600a55600b546129d39082611bf5565b600b55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122058e073a4f7bae0d0eed08a5c45fecb0ee94fb945df23ccebddb030beae69523764736f6c634300060c0033

Deployed ByteCode Sourcemap

26399:20219:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38225:98;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38225:98:0;;:::i;:::-;;29107:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33849:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33849:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;34970:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27608:44;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;27608:44:0;;;;;;;;;;;;;;29384:95;;;;;;;;;;;;;:::i;34018:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34018:313:0;;;;;;;;;;;;;;;;;:::i;35897:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35897:253:0;;:::i;29293:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36613:479;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36613:479:0;-1:-1:-1;;;;;36613:479:0;;:::i;34339:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34339:218:0;;;;;;;;:::i;27164:26::-;;;;;;;;;;;;;:::i;35065:378::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35065:378:0;;:::i;37988:111::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37988:111:0;-1:-1:-1;;;;;37988:111:0;;:::i;35451:438::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35451:438:0;;;;;;;;;:::i;27659:38::-;;;;;;;;;;;;;:::i;27734:40::-;;;;;;;;;;;;;:::i;36158:447::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36158:447:0;-1:-1:-1;;;;;36158:447:0;;:::i;42523:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42523:123:0;-1:-1:-1;;;;;42523:123:0;;:::i;27247:32::-;;;;;;;;;;;;;:::i;29487:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29487:198:0;-1:-1:-1;;;;;29487:198:0;;:::i;27382:80::-;;;;;;;;;;;;;:::i;15615:148::-;;;;;;;;;;;;;:::i;27783:56::-;;;;;;;;;;;;;:::i;34842:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34842:120:0;-1:-1:-1;;;;;34842:120:0;;:::i;27469:80::-;;;;;;;;;;;;;:::i;14979:79::-;;;;;;;;;;;;;:::i;38331:122::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38331:122:0;;:::i;29198:87::-;;;;;;;;;;;;;:::i;34565:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34565:269:0;;;;;;;;:::i;16621:293::-;;;;;;;;;;;;;:::i;29693:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29693:167:0;;;;;;;;:::i;16170:89::-;;;;;;;;;;;;;:::i;27348:27::-;;;;;;;;;;;;;:::i;38631:171::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38631:171:0;;;;:::i;38461:162::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38461:162:0;;:::i;16335:214::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16335:214:0;;:::i;29868:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29868:143:0;;;;;;;;;;:::i;38107:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38107:110:0;-1:-1:-1;;;;;38107:110:0;;:::i;15918:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15918:244:0;-1:-1:-1;;;;;15918:244:0;;:::i;38225:98::-;15201:12;:10;:12::i;:::-;15191:6;;-1:-1:-1;;;;;15191:6:0;;;:22;;;15183:67;;;;;-1:-1:-1;;;15183:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15183:67:0;;;;;;;;;;;;;;;38299:7:::1;:16:::0;38225:98::o;29107:83::-;29177:5;29170:12;;;;;;;;-1:-1:-1;;29170:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29144:13;;29170:12;;29177:5;;29170:12;;29177:5;29170:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29107:83;:::o;33849:161::-;33924:4;33941:39;33950:12;:10;:12::i;:::-;33964:7;33973:6;33941:8;:39::i;:::-;-1:-1:-1;33998:4:0;33849:161;;;;;:::o;34970:87::-;35039:10;;34970:87;:::o;27608:44::-;;;:::o;29384:95::-;29464:7;;29384:95;:::o;34018:313::-;34116:4;34133:36;34143:6;34151:9;34162:6;34133:9;:36::i;:::-;34180:121;34189:6;34197:12;:10;:12::i;:::-;34211:89;34249:6;34211:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34211:19:0;;;;;;:11;:19;;;;;;34231:12;:10;:12::i;:::-;-1:-1:-1;;;;;34211:33:0;;;;;;;;;;;;-1:-1:-1;34211:33:0;;;:89;:37;:89::i;:::-;34180:8;:121::i;:::-;-1:-1:-1;34319:4:0;34018:313;;;;;:::o;35897:253::-;35963:7;36002;;35991;:18;;35983:73;;;;-1:-1:-1;;;35983:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36067:19;36090:10;:8;:10::i;:::-;36067:33;-1:-1:-1;36118:24:0;:7;36067:33;36118:11;:24::i;:::-;36111:31;;;35897:253;;;;:::o;29293:83::-;29359:9;;;;29293:83;:::o;36613:479::-;15201:12;:10;:12::i;:::-;15191:6;;-1:-1:-1;;;;;15191:6:0;;;:22;;;15183:67;;;;;-1:-1:-1;;;15183:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15183:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36695:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;36687:60;;;::::0;;-1:-1:-1;;;36687:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;36763:9;36758:327;36782:9;:16:::0;36778:20;::::1;36758:327;;;36840:7;-1:-1:-1::0;;;;;36824:23:0::1;:9;36834:1;36824:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;36824:12:0::1;:23;36820:254;;;36883:9;36893:16:::0;;-1:-1:-1;;36893:20:0;;;36883:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;36868:9:::1;:12:::0;;-1:-1:-1;;;;;36883:31:0;;::::1;::::0;36878:1;;36868:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;36868:46:0::1;-1:-1:-1::0;;;;;36868:46:0;;::::1;;::::0;;36933:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;36972:11:::1;:20:::0;;;;:28;;-1:-1:-1;;36972:28:0::1;::::0;;37019:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;37019:15:0;;;;;-1:-1:-1;;;;;;37019:15:0::1;::::0;;;;;37053:5:::1;;36820:254;36800:3;;36758:327;;;;36613:479:::0;:::o;34339:218::-;34427:4;34444:83;34453:12;:10;:12::i;:::-;34467:7;34476:50;34515:10;34476:11;:25;34488:12;:10;:12::i;:::-;-1:-1:-1;;;;;34476:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;34476:25:0;;;:34;;;;;;;;;;;:38;:50::i;27164:26::-;;;;:::o;35065:378::-;35117:14;35134:12;:10;:12::i;:::-;-1:-1:-1;;;;;35166:19:0;;;;;;:11;:19;;;;;;35117:29;;-1:-1:-1;35166:19:0;;35165:20;35157:77;;;;-1:-1:-1;;;35157:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35246:15;35271:19;35282:7;35271:10;:19::i;:::-;-1:-1:-1;;;;;;;;35319:15:0;;;;;;:7;:15;;;;;;35245:45;;-1:-1:-1;35319:28:0;;:15;-1:-1:-1;35245:45:0;;-1:-1:-1;;35319:19:0;:28::i;:::-;-1:-1:-1;;;;;35301:15:0;;;;;;:7;:15;;;;;:46;35368:7;;:20;;35380:7;35368:11;:20::i;:::-;35358:7;:30;35412:10;;:23;;35427:7;35412:14;:23::i;:::-;35399:10;:36;-1:-1:-1;;;35065:378:0:o;37988:111::-;15201:12;:10;:12::i;:::-;15191:6;;-1:-1:-1;;;;;15191:6:0;;;:22;;;15183:67;;;;;-1:-1:-1;;;15183:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15183:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;38057:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;38057:34:0::1;38087:4;38057:34;::::0;;37988:111::o;35451:438::-;35541:7;35580;;35569;:18;;35561:62;;;;;-1:-1:-1;;;35561:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35639:17;35634:248;;35674:15;35699:19;35710:7;35699:10;:19::i;:::-;-1:-1:-1;35673:45:0;;-1:-1:-1;35733:14:0;;-1:-1:-1;;;;;;35733:14:0;35634:248;35782:23;35814:19;35825:7;35814:10;:19::i;:::-;-1:-1:-1;35780:53:0;;-1:-1:-1;35848:22:0;;-1:-1:-1;;;;;;35848:22:0;27659:38;;;:::o;27734:40::-;;;;;;;;;:::o;36158:447::-;15201:12;:10;:12::i;:::-;15191:6;;-1:-1:-1;;;;;15191:6:0;;;:22;;;15183:67;;;;;-1:-1:-1;;;15183:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15183:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36355:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;36354:21;36346:61;;;::::0;;-1:-1:-1;;;36346:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;36421:16:0;::::1;36440:1;36421:16:::0;;;:7:::1;:16;::::0;;;;;:20;36418:108:::1;;-1:-1:-1::0;;;;;36497:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;36477:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;36458:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;36418:108:::1;-1:-1:-1::0;;;;;36536:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;36536:27:0::1;36559:4;36536:27:::0;;::::1;::::0;;;36574:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;36574:23:0::1;::::0;;::::1;::::0;;36158:447::o;42523:123::-;-1:-1:-1;;;;;42611:27:0;42587:4;42611:27;;;:18;:27;;;;;;;;;42523:123::o;27247:32::-;;;;:::o;29487:198::-;-1:-1:-1;;;;;29577:20:0;;29553:7;29577:20;;;:11;:20;;;;;;;;29573:49;;;-1:-1:-1;;;;;;29606:16:0;;;;;;:7;:16;;;;;;29599:23;;29573:49;-1:-1:-1;;;;;29660:16:0;;;;;;:7;:16;;;;;;29640:37;;:19;:37::i;27382:80::-;;;-1:-1:-1;;;;;27382:80:0;;:::o;15615:148::-;15201:12;:10;:12::i;:::-;15191:6;;-1:-1:-1;;;;;15191:6:0;;;:22;;;15183:67;;;;;-1:-1:-1;;;15183:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15183:67:0;;;;;;;;;;;;;;;15722:1:::1;15706:6:::0;;15685:40:::1;::::0;-1:-1:-1;;;;;15706:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;15685:40:0;15722:1;;15685:40:::1;15753:1;15736:19:::0;;-1:-1:-1;;;;;;15736:19:0::1;::::0;;15615:148::o;27783:56::-;;;;:::o;34842:120::-;-1:-1:-1;;;;;34934:20:0;34910:4;34934:20;;;:11;:20;;;;;;;;;34842:120::o;27469:80::-;;;-1:-1:-1;;;;;27469:80:0;;:::o;14979:79::-;15017:7;15044:6;-1:-1:-1;;;;;15044:6:0;14979:79;:::o;38331:122::-;15201:12;:10;:12::i;:::-;15191:6;;-1:-1:-1;;;;;15191:6:0;;;:22;;;15183:67;;;;;-1:-1:-1;;;15183:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15183:67:0;;;;;;;;;;;;;;;38417:13:::1;:28:::0;38331:122::o;29198:87::-;29270:7;29263:14;;;;;;;;-1:-1:-1;;29263:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29237:13;;29263:14;;29270:7;;29263:14;;29270:7;29263:14;;;;;;;;;;;;;;;;;;;;;;;;34565:269;34658:4;34675:129;34684:12;:10;:12::i;:::-;34698:7;34707:96;34746:15;34707:96;;;;;;;;;;;;;;;;;:11;:25;34719:12;:10;:12::i;:::-;-1:-1:-1;;;;;34707:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;34707:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;16621:293::-;16673:14;;-1:-1:-1;;;;;16673:14:0;16691:10;16673:28;16665:76;;;;-1:-1:-1;;;16665:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16766:9;;16760:3;:15;16752:60;;;;;-1:-1:-1;;;16752:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16857:14;;;16849:6;;16828:44;;-1:-1:-1;;;;;16857:14:0;;;;16849:6;;;;-1:-1:-1;;;;;;;;;;;16828:44:0;;16892:14;;;16883:23;;-1:-1:-1;;;;;;16883:23:0;-1:-1:-1;;;;;16892:14:0;;;16883:23;;;;;;16621:293::o;29693:167::-;29771:4;29788:42;29798:12;:10;:12::i;:::-;29812:9;29823:6;29788:9;:42::i;16170:89::-;16242:9;;16170:89;:::o;27348:27::-;;;;:::o;38631:171::-;15201:12;:10;:12::i;:::-;15191:6;;-1:-1:-1;;;;;15191:6:0;;;:22;;;15183:67;;;;;-1:-1:-1;;;15183:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15183:67:0;;;;;;;;;;;;;;;38708:21:::1;:32:::0;;;::::1;;;::::0;::::1;-1:-1:-1::0;;38708:32:0;;::::1;::::0;;;::::1;::::0;;;38756:38:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;38631:171:::0;:::o;38461:162::-;15201:12;:10;:12::i;:::-;15191:6;;-1:-1:-1;;;;;15191:6:0;;;:22;;;15183:67;;;;;-1:-1:-1;;;15183:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15183:67:0;;;;;;;;;;;;;;;38555:60:::1;38599:5;38555:25;38567:12;38555:7;;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:60::i;:::-;38540:12;:75:::0;-1:-1:-1;38461:162:0:o;16335:214::-;15201:12;:10;:12::i;:::-;15191:6;;-1:-1:-1;;;;;15191:6:0;;;:22;;;15183:67;;;;;-1:-1:-1;;;15183:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15183:67:0;;;;;;;;;;;;;;;16416:6:::1;::::0;;;16399:23;;-1:-1:-1;;;;;;16399:23:0;;::::1;-1:-1:-1::0;;;;;16416:6:0;::::1;16399:23;::::0;;;16433:19:::1;::::0;;16475:3:::1;:10:::0;::::1;16463:9;:22:::0;16501:40:::1;::::0;16416:6;;-1:-1:-1;;;;;;;;;;;16501:40:0;16416:6;;16501:40:::1;16335:214:::0;:::o;29868:143::-;-1:-1:-1;;;;;29976:18:0;;;29949:7;29976:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29868:143::o;38107:110::-;15201:12;:10;:12::i;:::-;15191:6;;-1:-1:-1;;;;;15191:6:0;;;:22;;;15183:67;;;;;-1:-1:-1;;;15183:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15183:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;38174:27:0::1;38204:5;38174:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;38174:35:0::1;::::0;;38107:110::o;15918:244::-;15201:12;:10;:12::i;:::-;15191:6;;-1:-1:-1;;;;;15191:6:0;;;:22;;;15183:67;;;;;-1:-1:-1;;;15183:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15183:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16007:22:0;::::1;15999:73;;;;-1:-1:-1::0;;;15999:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16109:6;::::0;;16088:38:::1;::::0;-1:-1:-1;;;;;16088:38:0;;::::1;::::0;16109:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;16088:38:0;::::1;16137:6;:17:::0;;-1:-1:-1;;;;;;16137:17:0::1;-1:-1:-1::0;;;;;16137:17:0;;;::::1;::::0;;;::::1;::::0;;15918:244::o;7385:106::-;7473:10;7385:106;:::o;42654:337::-;-1:-1:-1;;;;;42747:19:0;;42739:68;;;;-1:-1:-1;;;42739:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42826:21:0;;42818:68;;;;-1:-1:-1;;;42818:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42899:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;42951:32;;;;;;;;;;;;;;;;;42654:337;;;:::o;42999:2025::-;-1:-1:-1;;;;;43121:18:0;;43113:68;;;;-1:-1:-1;;;43113:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43200:16:0;;43192:64;;;;-1:-1:-1;;;43192:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43284:1;43275:6;:10;43267:64;;;;-1:-1:-1;;;43267:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43353:7;:5;:7::i;:::-;-1:-1:-1;;;;;43345:15:0;:4;-1:-1:-1;;;;;43345:15:0;;;:32;;;;;43370:7;:5;:7::i;:::-;-1:-1:-1;;;;;43364:13:0;:2;-1:-1:-1;;;;;43364:13:0;;;43345:32;43342:125;;;43410:12;;43400:6;:22;;43392:75;;;;-1:-1:-1;;;43392:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43762:28;43793:24;43811:4;43793:9;:24::i;:::-;43762:55;;43857:12;;43833:20;:36;43830:112;;-1:-1:-1;43918:12:0;;43830:112;44005:29;;43981:53;;;;;;;44063;;-1:-1:-1;44100:16:0;;;;44099:17;44063:53;:91;;;;;44141:13;-1:-1:-1;;;;;44133:21:0;:4;-1:-1:-1;;;;;44133:21:0;;;44063:91;:129;;;;-1:-1:-1;44171:21:0;;;;;;;44063:129;44045:318;;;44242:29;;44219:52;;44315:36;44330:20;44315:14;:36::i;:::-;-1:-1:-1;;;;;44555:24:0;;44436:12;44555:24;;;:18;:24;;;;;;44451:4;;44555:24;;;:50;;-1:-1:-1;;;;;;44583:22:0;;;;;;:18;:22;;;;;;;;44555:50;44552:96;;;-1:-1:-1;44631:5:0;44552:96;44978:38;44993:4;44998:2;45001:6;45008:7;44978:14;:38::i;:::-;42999:2025;;;;;;:::o;1232:192::-;1318:7;1354:12;1346:6;;;;1338:29;;;;-1:-1:-1;;;1338:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1390:5:0;;;1232:192::o;40452:163::-;40493:7;40514:15;40531;40550:19;:17;:19::i;:::-;40513:56;;-1:-1:-1;40513:56:0;-1:-1:-1;40587:20:0;40513:56;;40587:11;:20::i;:::-;40580:27;;;;40452:163;:::o;2630:132::-;2688:7;2715:39;2719:1;2722;2715:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2708:46;2630:132;-1:-1:-1;;;2630:132:0:o;329:181::-;387:7;419:5;;;443:6;;;;435:46;;;;;-1:-1:-1;;;435:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;39058:457;39117:7;39126;39135;39144;39153;39162;39171;39192:23;39217:12;39231:18;39251:13;39268:20;39280:7;39268:11;:20::i;:::-;39191:97;;;;;;;;39300:15;39317:23;39342:12;39358:57;39370:7;39379:4;39385:10;39397:5;39404:10;:8;:10::i;:::-;39358:11;:57::i;:::-;39299:116;;-1:-1:-1;39299:116:0;-1:-1:-1;39299:116:0;-1:-1:-1;39466:15:0;;-1:-1:-1;39483:4:0;;-1:-1:-1;39489:10:0;;-1:-1:-1;39501:5:0;-1:-1:-1;;;;39058:457:0;;;;;;;;;:::o;793:136::-;851:7;878:43;882:1;885;878:43;;;;;;;;;;;;;;;;;:3;:43::i;1683:471::-;1741:7;1986:6;1982:47;;-1:-1:-1;2016:1:0;2009:8;;1982:47;2053:5;;;2057:1;2053;:5;:1;2077:5;;;;;:10;2069:56;;;;-1:-1:-1;;;2069:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45032:977;28216:16;:23;;-1:-1:-1;;28216:23:0;28235:4;28216:23;;;:16;45183:27:::1;:20:::0;45208:1:::1;45183:24;:27::i;:::-;45168:42:::0;-1:-1:-1;45221:17:0::1;45241:30;:20:::0;45168:42;45241:24:::1;:30::i;:::-;45221:50:::0;-1:-1:-1;45574:21:0::1;45640:22;45657:4:::0;45640:16:::1;:22::i;:::-;45793:18;45814:41;:21;45840:14:::0;45814:25:::1;:41::i;:::-;45793:62;;45905:35;45918:9;45929:10;45905:12;:35::i;:::-;45958:43;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;28262:16:0;:24;;-1:-1:-1;;28262:24:0;;;-1:-1:-1;;;45032:977:0:o;30613:818::-;30724:7;30720:40;;30746:14;:12;:14::i;:::-;-1:-1:-1;;;;;30777:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;30801:22:0;;;;;;:11;:22;;;;;;;;30800:23;30777:46;30773:597;;;30840:48;30862:6;30870:9;30881:6;30840:21;:48::i;:::-;30773:597;;;-1:-1:-1;;;;;30911:19:0;;;;;;:11;:19;;;;;;;;30910:20;:46;;;;-1:-1:-1;;;;;;30934:22:0;;;;;;:11;:22;;;;;;;;30910:46;30906:464;;;30973:46;30993:6;31001:9;31012:6;30973:19;:46::i;30906:464::-;-1:-1:-1;;;;;31042:19:0;;;;;;:11;:19;;;;;;;;31041:20;:47;;;;-1:-1:-1;;;;;;31066:22:0;;;;;;:11;:22;;;;;;;;31065:23;31041:47;31037:333;;;31105:44;31123:6;31131:9;31142:6;31105:17;:44::i;31037:333::-;-1:-1:-1;;;;;31171:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;31194:22:0;;;;;;:11;:22;;;;;;;;31171:45;31167:203;;;31233:48;31255:6;31263:9;31274:6;31233:21;:48::i;31167:203::-;31314:44;31332:6;31340:9;31351:6;31314:17;:44::i;:::-;31386:7;31382:41;;31408:15;:13;:15::i;:::-;30613:818;;;;:::o;40623:555::-;40720:7;;40756;;40673;;;;;40774:289;40798:9;:16;40794:20;;40774:289;;;40864:7;40840;:21;40848:9;40858:1;40848:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40848:12:0;40840:21;;;;;;;;;;;;;:31;;:66;;;40899:7;40875;:21;40883:9;40893:1;40883:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40883:12:0;40875:21;;;;;;;;;;;;;:31;40840:66;40836:97;;;40916:7;;40925;;40908:25;;;;;;;;;40836:97;40958:34;40970:7;:21;40978:9;40988:1;40978:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40978:12:0;40970:21;;;;;;;;;;;;;40958:7;;:11;:34::i;:::-;40948:44;;41017:34;41029:7;:21;41037:9;41047:1;41037:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41037:12:0;41029:21;;;;;;;;;;;;;41017:7;;:11;:34::i;:::-;41007:44;-1:-1:-1;40816:3:0;;40774:289;;;-1:-1:-1;41099:7:0;;41087;;:20;;:11;:20::i;:::-;41077:7;:30;41073:61;;;41117:7;;41126;;41109:25;;;;;;;;41073:61;41153:7;;-1:-1:-1;41162:7:0;-1:-1:-1;40623:555:0;;;:::o;3258:278::-;3344:7;3379:12;3372:5;3364:28;;;;-1:-1:-1;;;3364:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3403:9;3419:1;3415;:5;;;;;;;3258:278;-1:-1:-1;;;;;3258:278:0:o;39523:409::-;39583:7;39592;39601;39610;39630:12;39645:24;39661:7;39645:15;:24::i;:::-;39630:39;;39680:18;39701:30;39723:7;39701:21;:30::i;:::-;39680:51;;39742:13;39758:25;39775:7;39758:16;:25::i;:::-;39742:41;-1:-1:-1;39794:23:0;39820:44;39742:41;39820:33;39842:10;39820:33;:7;39832:4;39820:11;:17::i;:::-;:21;;:33::i;:44::-;39794:70;39900:4;;-1:-1:-1;39906:10:0;;-1:-1:-1;39906:10:0;-1:-1:-1;39523:409:0;;-1:-1:-1;;;39523:409:0:o;39940:504::-;40070:7;;;;40126:24;:7;40138:11;40126;:24::i;:::-;40108:42;-1:-1:-1;40161:12:0;40176:21;:4;40185:11;40176:8;:21::i;:::-;40161:36;-1:-1:-1;40208:18:0;40229:27;:10;40244:11;40229:14;:27::i;:::-;40208:48;-1:-1:-1;40267:13:0;40283:22;:5;40293:11;40283:9;:22::i;:::-;40267:38;-1:-1:-1;40316:23:0;40342:44;40267:38;40342:33;40364:10;40342:33;:7;40354:4;40342:11;:17::i;:44::-;40405:7;;;;-1:-1:-1;40431:4:0;;-1:-1:-1;39940:504:0;;-1:-1:-1;;;;;;;;;39940:504:0:o;46017:588::-;46167:16;;;46181:1;46167:16;;;46143:21;46167:16;;;;;46143:21;46167:16;;;;;;;;;;-1:-1:-1;46167:16:0;46143:40;;46212:4;46194;46199:1;46194:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;46194:23:0;;;-1:-1:-1;;;;;46194:23:0;;;;;46238:15;-1:-1:-1;;;;;46238:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46238:21:0;46228:7;;:4;;46233:1;;46228:7;;;;;;;;;;;:31;-1:-1:-1;;;;;46228:31:0;;;-1:-1:-1;;;;;46228:31:0;;;;;46272:62;46289:4;46304:15;46322:11;46272:8;:62::i;:::-;46373:15;-1:-1:-1;;;;;46373:66:0;;46454:11;46480:1;46524:4;46551;46571:15;46373:224;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46373:224:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30019:513;30167:62;30184:4;30199:15;30217:11;30167:8;:62::i;:::-;30272:15;-1:-1:-1;;;;;30272:31:0;;30311:9;30344:4;30364:11;30390:1;30433;30476:7;:5;:7::i;:::-;30498:15;30272:252;;;;;;;;;;;;;-1:-1:-1;;;;;30272:252:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30272:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42049:295;42095:7;;:12;:34;;;;-1:-1:-1;42111:13:0;;:18;42095:34;42092:46;;;42131:7;;42092:46;42168:7;;;42150:15;:25;42210:13;;;42186:21;:37;42253:8;;;42234:16;:27;-1:-1:-1;42274:11:0;;;;42296:17;;;;42324:12;42049:295;:::o;33028:811::-;33131:15;33148:23;33173:12;33187:23;33212:12;33226:18;33246:13;33263:19;33274:7;33263:10;:19::i;:::-;33130:152;;;;;;;;;;;;;;33311:28;33331:7;33311;:15;33319:6;-1:-1:-1;;;;;33311:15:0;-1:-1:-1;;;;;33311:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;33293:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33368:7;:15;;;;:28;;33388:7;33368:19;:28::i;:::-;-1:-1:-1;;;;;33350:15:0;;;;;;;:7;:15;;;;;;:46;;;;33428:18;;;;;;;:39;;33451:15;33428:22;:39::i;:::-;-1:-1:-1;;;;;33407:18:0;;;;;;:7;:18;;;;;:60;33478:26;33493:10;33478:14;:26::i;:::-;33515:23;33527:4;33533;33515:11;:23::i;:::-;33552:8;;:13;33549:223;;33612:11;;-1:-1:-1;;;;;33612:11:0;33604:20;;;;:7;:20;;;;;;:31;;33629:5;33604:24;:31::i;:::-;33589:11;;;-1:-1:-1;;;;;33589:11:0;;;33581:20;;;;:7;:20;;;;;;;;:54;;;;33681:11;;;;;33673:20;;:7;:20;;;;;:31;;33698:5;33673:24;:31::i;:::-;33658:11;;;-1:-1:-1;;;;;33658:11:0;;;33650:20;;;;:7;:20;;;;;;;;;:54;;;;33741:11;;33724:36;;;;;;;33741:11;;;;33724:36;;;;;;;;;;;;;33549:223;33804:9;-1:-1:-1;;;;;33787:44:0;33796:6;-1:-1:-1;;;;;33787:44:0;;33815:15;33787:44;;;;;;;;;;;;;;;;;;33028:811;;;;;;;;;;:::o;32197:823::-;32298:15;32315:23;32340:12;32354:23;32379:12;32393:18;32413:13;32430:19;32441:7;32430:10;:19::i;:::-;32297:152;;;;;;;;;;;;;;32478:28;32498:7;32478;:15;32486:6;-1:-1:-1;;;;;32478:15:0;-1:-1:-1;;;;;32478:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;32460:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;32538:18;;;;;:7;:18;;;;;:39;;32561:15;32538:22;:39::i;:::-;-1:-1:-1;;;;;32517:18:0;;;;;;:7;:18;;;;;;;;:60;;;;32609:7;:18;;;;:39;;32632:15;32609:22;:39::i;31439:750::-;31538:15;31555:23;31580:12;31594:23;31619:12;31633:18;31653:13;31670:19;31681:7;31670:10;:19::i;:::-;31537:152;;;;;;;;;;;;;;31718:28;31738:7;31718;:15;31726:6;-1:-1:-1;;;;;31718:15:0;-1:-1:-1;;;;;31718:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;37098:882::-;37201:15;37218:23;37243:12;37257:23;37282:12;37296:18;37316:13;37333:19;37344:7;37333:10;:19::i;:::-;37200:152;;;;;;;;;;;;;;37381:28;37401:7;37381;:15;37389:6;-1:-1:-1;;;;;37381:15:0;-1:-1:-1;;;;;37381:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;37363:15:0;;;;;;:7;:15;;;;;;;;:46;;;;37438:7;:15;;;;:28;;37458:7;37438:19;:28::i;42352:163::-;42406:15;;42396:7;:25;42448:21;;42432:13;:37;42491:16;;42480:8;:27;42352:163::o;41549:154::-;41613:7;41640:55;41679:5;41640:20;41652:7;;41640;:11;;:20;;;;:::i;41711:166::-;41781:7;41808:61;41853:5;41808:26;41820:13;;41808:7;:11;;:26;;;;:::i;41885:156::-;41950:7;41977:56;42017:5;41977:21;41989:8;;41977:7;:11;;:21;;;;:::i;41186:355::-;41249:19;41272:10;:8;:10::i;:::-;41249:33;-1:-1:-1;41293:18:0;41314:27;:10;41249:33;41314:14;:27::i;:::-;41393:4;41377:22;;;;:7;:22;;;;;;41293:48;;-1:-1:-1;41377:38:0;;41293:48;41377:26;:38::i;:::-;41368:4;41352:22;;;;:7;:22;;;;;;;;:63;;;;41429:11;:26;;;;;;41426:107;;;41511:4;41495:22;;;;:7;:22;;;;;;:38;;41522:10;41495:26;:38::i;:::-;41486:4;41470:22;;;;:7;:22;;;;;:63;41426:107;41186:355;;;:::o;38903:147::-;38981:7;;:17;;38993:4;38981:11;:17::i;:::-;38971:7;:27;39022:10;;:20;;39037:4;39022:14;:20::i;:::-;39009:10;:33;-1:-1:-1;;38903:147:0:o

Swarm Source

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