Contract 0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a09

Contract Overview

Balance:
0.000001500951456892 HT

HT Value:
Less Than $0.01 (@ $13.07/HT)

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0x868ab65eee805464727efe8d37371915da726cfbba29ca1a719aaffdb0031b8a55376422021-06-12 14:04:1012 hrs 55 mins ago0x0ca4034f47fd6d3e8b3d9a2b1e91911d9338d72f IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0001504248
0xa7f2b4f7c515426d307259fcf75235ebeba19fa7c3c1e39f1adc364cc86fa28d55281992021-06-12 6:12:0020 hrs 48 mins ago0x9a84df16265153b38ec8913473c0190b16bfbba6 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0001504248
0x2a4f01f5723c375f1a0546a190bd3a3293d6ff0f33124d1938cd1ab01148602455281882021-06-12 6:11:2720 hrs 48 mins ago0x9a84df16265153b38ec8913473c0190b16bfbba6 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0001324248
0x3ca4086d9d908e4529095e342bb8454d9b9cdff80a69ac8758444f448c34556555280662021-06-12 6:05:2120 hrs 54 mins ago0x9a84df16265153b38ec8913473c0190b16bfbba6 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0001504104
0x767cc3679be8e87745dd156a3d9ca1eb865b37dddb7161fec1a30efd0affd4e155270492021-06-12 5:14:3021 hrs 45 mins ago0x0446f8c36f4b66aeb3d23a57cc40f64d67a44cc1 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0001504104
0x12f424b20b302ce792add720908ae820766016e9e18df529d770e2058cc7a71c55266122021-06-12 4:52:3922 hrs 7 mins ago0x0ca4034f47fd6d3e8b3d9a2b1e91911d9338d72f IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0006609528
0xdab4b1fceebb6a349eca4ae9e9ff8c6b38f707cc2294571be46008a18389096d55202652021-06-11 23:35:171 day 3 hrs ago0xd685d0b2d344560c1bb955228b5f34720dbd0257 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0001504248
0xf8bcf70369648b5288184b10e553dc0794dd0b816da56515cd160d057d67fac555128072021-06-11 17:22:231 day 9 hrs ago0x0446f8c36f4b66aeb3d23a57cc40f64d67a44cc1 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0001324104
0x136d8600c659ccd75fa72cf0af67543dd28f98a281f4d6ed23dd38ef2526109055126452021-06-11 17:14:171 day 9 hrs ago0x0446f8c36f4b66aeb3d23a57cc40f64d67a44cc1 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0006609384
0xe8d5664b8917c04823897fac0b03bc2a810abacc986e9a39427ff7494dde8b2b55122582021-06-11 16:54:561 day 10 hrs ago0x2b70c6e3e6a2afe2aa8fc2aef8467a5b29583cb1 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.00030724
0xeb3f1624cdc6ac1eb8aef33171800d31cef90936bc85cd1e7a4581c642ac5f2155111862021-06-11 16:01:201 day 10 hrs ago0x2b70c6e3e6a2afe2aa8fc2aef8467a5b29583cb1 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0003072592
0xb3d13f39e11f5120c6c78c31d17df68a59aa69610f5313c62f323082d5dad70b55111242021-06-11 15:58:141 day 11 hrs ago0x2b70c6e3e6a2afe2aa8fc2aef8467a5b29583cb1 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.000307248
0xb93a6558c75731bbf507f4881eeaf706143a42200c68be0378f2e5c7bb8e644c55110832021-06-11 15:56:111 day 11 hrs ago0x2b70c6e3e6a2afe2aa8fc2aef8467a5b29583cb1 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0003072416
0x02747950623a5bd1cb6cdb218e62244788585e28ce509c86b7d52646a560219355109762021-06-11 15:50:501 day 11 hrs ago0x2b70c6e3e6a2afe2aa8fc2aef8467a5b29583cb1 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0003072416
0x6cd291997c579f21990195b575b8dc3d297c1c5b115cf40839ae6d68f34806e355109212021-06-11 15:48:051 day 11 hrs ago0x2b70c6e3e6a2afe2aa8fc2aef8467a5b29583cb1 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0003072416
0xe4b11ddb0297bcc9e8dbc2a43d12d80283ff64121697e39b39a3b0c4ce1403c655108682021-06-11 15:45:261 day 11 hrs ago0x2b70c6e3e6a2afe2aa8fc2aef8467a5b29583cb1 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.000307264
0xef94793c416ed1133437341a281c264ef582aca427e67e1a0c35cd0d9f09eb7a55107732021-06-11 15:40:411 day 11 hrs ago0x2b70c6e3e6a2afe2aa8fc2aef8467a5b29583cb1 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0003072416
0xd936d53bda78cda51c105773e9c114089eb1dd0a504601844b745e6c3521424d55105192021-06-11 15:27:591 day 11 hrs ago0x0446f8c36f4b66aeb3d23a57cc40f64d67a44cc1 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0001324248
0x839ff3229bb4586cbe41b98ec4efec15f368cf782229278bf697350bbf7b38b155084402021-06-11 13:44:021 day 13 hrs ago0x0446f8c36f4b66aeb3d23a57cc40f64d67a44cc1 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0001504104
0x6e2dd928000c06ad1498ea833ab9e39b69d6ba6a98ecbdea23572f5550b2f92955077002021-06-11 13:07:021 day 13 hrs ago0x0446f8c36f4b66aeb3d23a57cc40f64d67a44cc1 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0001504104
0xb0a641857cbb2b12e82e011513f7198c9e560688a725355bb5ca415a0471035555074432021-06-11 12:54:111 day 14 hrs ago0x0446f8c36f4b66aeb3d23a57cc40f64d67a44cc1 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0001504104
0x73b996fc02eb48399d7b5ef4821fedc1ccf9bb541ca1e784317ca282ad5106c255061122021-06-11 11:47:381 day 15 hrs ago0x0446f8c36f4b66aeb3d23a57cc40f64d67a44cc1 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.000660924
0xb0bf19767618c07bee0063400d40b2fcc079f2a0f454eda0257a7b7991e38c5c55056552021-06-11 11:24:471 day 15 hrs ago0x0446f8c36f4b66aeb3d23a57cc40f64d67a44cc1 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0001504248
0x6e201ccddeba8c326f8b099e0602e0f7731a04e17648e5033e3af52219ae51a255045142021-06-11 10:27:441 day 16 hrs ago0x0446f8c36f4b66aeb3d23a57cc40f64d67a44cc1 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.0001504248
0x6106f52458d9eb6a9af4a0fbe73a7d8823029e1fa2575b61ee7bacb4fe96815b55045012021-06-11 10:27:051 day 16 hrs ago0x0446f8c36f4b66aeb3d23a57cc40f64d67a44cc1 IN  0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090 HT0.000660924
[ Download CSV Export 
Latest 18 internal transactions
Parent Txn Hash Block From To Value
0x12f424b20b302ce792add720908ae820766016e9e18df529d770e2058cc7a71c55266122021-06-12 4:52:3922 hrs 7 mins ago Mdex: Router 0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090.000000000000068391 HT
0x12f424b20b302ce792add720908ae820766016e9e18df529d770e2058cc7a71c55266122021-06-12 4:52:3922 hrs 7 mins ago 0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a09 Mdex: Router0.000000000000636334 HT
0x12f424b20b302ce792add720908ae820766016e9e18df529d770e2058cc7a71c55266122021-06-12 4:52:3922 hrs 7 mins ago Mdex: Router 0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090.000000000000636334 HT
0x136d8600c659ccd75fa72cf0af67543dd28f98a281f4d6ed23dd38ef2526109055126452021-06-11 17:14:171 day 9 hrs ago Mdex: Router 0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090.00000000000009805 HT
0x136d8600c659ccd75fa72cf0af67543dd28f98a281f4d6ed23dd38ef2526109055126452021-06-11 17:14:171 day 9 hrs ago 0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a09 Mdex: Router0.000000000000787074 HT
0x136d8600c659ccd75fa72cf0af67543dd28f98a281f4d6ed23dd38ef2526109055126452021-06-11 17:14:171 day 9 hrs ago Mdex: Router 0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090.000000000000787074 HT
0x73b996fc02eb48399d7b5ef4821fedc1ccf9bb541ca1e784317ca282ad5106c255061122021-06-11 11:47:381 day 15 hrs ago Mdex: Router 0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090.000000000000155073 HT
0x73b996fc02eb48399d7b5ef4821fedc1ccf9bb541ca1e784317ca282ad5106c255061122021-06-11 11:47:381 day 15 hrs ago 0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a09 Mdex: Router0.000000000001029514 HT
0x73b996fc02eb48399d7b5ef4821fedc1ccf9bb541ca1e784317ca282ad5106c255061122021-06-11 11:47:381 day 15 hrs ago Mdex: Router 0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090.000000000001029514 HT
0x6106f52458d9eb6a9af4a0fbe73a7d8823029e1fa2575b61ee7bacb4fe96815b55045012021-06-11 10:27:051 day 16 hrs ago Mdex: Router 0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090.000000000000308646 HT
0x6106f52458d9eb6a9af4a0fbe73a7d8823029e1fa2575b61ee7bacb4fe96815b55045012021-06-11 10:27:051 day 16 hrs ago 0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a09 Mdex: Router0.000000000001501329 HT
0x6106f52458d9eb6a9af4a0fbe73a7d8823029e1fa2575b61ee7bacb4fe96815b55045012021-06-11 10:27:051 day 16 hrs ago Mdex: Router 0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090.000000000001501329 HT
0x213eb975f06c8d504a170fd2376c67b46ab2a61ea6dcf5bc218e698a4d339f7155030122021-06-11 9:12:381 day 17 hrs ago Mdex: Router 0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090.000000000000941188 HT
0x213eb975f06c8d504a170fd2376c67b46ab2a61ea6dcf5bc218e698a4d339f7155030122021-06-11 9:12:381 day 17 hrs ago 0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a09 Mdex: Router0.000000000002809216 HT
0x213eb975f06c8d504a170fd2376c67b46ab2a61ea6dcf5bc218e698a4d339f7155030122021-06-11 9:12:381 day 17 hrs ago Mdex: Router 0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090.000000000002809216 HT
0xb8a67ff0eb0d8bec5144ebe7abc8d6fafde7014bf7eced3da8742b5d85bc7e1755025002021-06-11 8:47:021 day 18 hrs ago Mdex: Router 0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090.000001500949885544 HT
0xb8a67ff0eb0d8bec5144ebe7abc8d6fafde7014bf7eced3da8742b5d85bc7e1755025002021-06-11 8:47:021 day 18 hrs ago 0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a09 Mdex: Router0.000001500954096095 HT
0xb8a67ff0eb0d8bec5144ebe7abc8d6fafde7014bf7eced3da8742b5d85bc7e1755025002021-06-11 8:47:021 day 18 hrs ago Mdex: Router 0x1d9acd766b89a91fcc8bb9ec6f419831b2ba2a090.000001500954096095 HT
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MRNFT

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2021-06-10
*/

/**
  
   #MRNFT

   #MRNFT 特点:
   1% fee auto add to the liquidity pool to locked forever when selling
   2% fee auto distribute to all holders
   2% fee auto to black hole
   I created a black hole so #MRNFT token will deflate itself in supply with every transaction
   
   Can you make #MRNFT 10000X? 

   1,000,000,000,000,000 total supply
   
 */
pragma solidity ^0.8.3;
// 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 ) {
        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 () {
        _owner = 0x46FbCEb341F3efE8E8CC046072b066232D6CF83A;
        emit OwnershipTransferred(address(0), _owner);
    }

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

}

// 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 MRNFT is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address[] private _addressList;
    mapping (address => bool) private _AddressExists;
    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 = 10 ** 6 * 10 ** 9 * 10 ** 18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _tBurnTotal;

    string private _name = "MRNFT";
    string private _symbol = "MRNFT";
    uint8 private _decimals = 18;
    
    address private _burnPool = 0x000000000000000000000000000000000000dEaD;
    
    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _burnFee = 2;
    uint256 private _previousBurnFee = _burnFee;
    
    uint256 public _liquidityFee = 1;
    uint256 private _previousLiquidityFee = _liquidityFee;

    IMdexRouter public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public _maxTxAmount = 500000000 * 10**6 * 10**18;
    uint256 private numTokensSellToAddToLiquidity = 1000000 * 10**6 * 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[owner()] = _rTotal;
        
		addAddress(owner());
        
        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
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), owner(), _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
        );
    }
    
    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 totalBurn() public view returns (uint256) {
        return _tBurnTotal;
    }

    function reflect(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 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 excludeAccount(address account) external onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }
    
    function includeAccount(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 _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;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidity) = _getValues(tAmount);
        
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        
        _takeLiquidity(tLiquidity);
        
        _reflectFee(rFee, tBurn.mul(currentRate),tFee, tBurn);
        
        emit Transfer(sender, recipient, tTransferAmount);
        
        emit Transfer(sender, _burnPool, tBurn);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

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

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

    function removeAllFee() private {
        if(_taxFee == 0 && _burnFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousBurnFee = _burnFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _burnFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _burnFee = _previousBurnFee;
        _liquidityFee = _previousLiquidityFee;
    }
 
    function _reflectFee(uint256 rFee, uint256 rBurn, uint256 tFee, uint256 tBurn) private {
        _rTotal = _rTotal.sub(rFee).sub(rBurn);
        _tFeeTotal = _tFeeTotal.add(tFee);
        _tBurnTotal = _tBurnTotal.add(tBurn);
        
        _tTotal = _tTotal.sub(tBurn);
    }  
    
    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tBurn, tLiquidity);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tBurn,  tLiquidity);
    }

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

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    //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 _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn,uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tBurn.mul(currentRate),tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
        emit Transfer(sender, _burnPool, tBurn);
    }

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

    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 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee,uint256 tBurn, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tBurn.mul(currentRate),tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
        emit Transfer(sender, _burnPool, tBurn);
    }
    
        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 addAddress(address adr) private {
        if(_AddressExists[adr])
            return;
        _AddressExists[adr] = true;
        _addressList.push(adr);
    }

    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 isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    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":"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":"excludeAccount","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":"includeAccount","outputs":[],"stateMutability":"nonpayable","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":[],"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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","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":"totalBurn","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"},{"stateMutability":"payable","type":"receive"}]

60c06040526d314dc6448d9338c15b0a00000000600b8190556200002690600019620005ea565b620000349060001962000589565b600c5560408051808201909152600580825264135493919560da1b60209092019182526200006591600f91620004b3565b5060408051808201909152600580825264135493919560da1b60209092019182526200009491601091620004b3565b506011805462dead126001600160a81b03199091161790556002601281905560138190556014819055601555600160168190556017556018805461ff0019166101001790556d18a6e32246c99c60ad85000000006019556c0c9f2c9cd04674edea40000000601a553480156200010957600080fd5b50600080546001600160a01b0319167346fbceb341f3efe8e8cc046072b066232d6cf83a90811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600c5460056000620001776000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620001ae620001a86000546001600160a01b031690565b62000422565b600073ed7d5f38c79115ca12fe6c0041abb22f0a06c3009050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200020157600080fd5b505afa15801562000216573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023c919062000559565b6001600160a01b031663c9c6539630836001600160a01b0316635cb485926040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028557600080fd5b505afa1580156200029a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c0919062000559565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200030957600080fd5b505af11580156200031e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000344919062000559565b6001600160601b0319606091821b811660a0529082901b16608052600160086000620003786000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526008909252902080549091166001179055620003cb6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200041391815260200190565b60405180910390a3506200060b565b6001600160a01b03811660009081526004602052604090205460ff16156200044a57620004b0565b6001600160a01b0381166000818152600460205260408120805460ff191660019081179091556003805491820181559091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b03191690911790555b50565b828054620004c190620005ad565b90600052602060002090601f016020900481019282620004e5576000855562000530565b82601f106200050057805160ff191683800117855562000530565b8280016001018555821562000530579182015b828111156200053057825182559160200191906001019062000513565b506200053e92915062000542565b5090565b5b808211156200053e576000815560010162000543565b6000602082840312156200056b578081fd5b81516001600160a01b038116811462000582578182fd5b9392505050565b600082821015620005a857634e487b7160e01b81526011600452602481fd5b500390565b600181811c90821680620005c257607f821691505b60208210811415620005e457634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200060657634e487b7160e01b81526012600452602481fd5b500690565b60805160601c60a05160601c61290a6200066160003960008181610487015261166d01526000818161031901528181611dce01528181611ea401528181611ee001528181611f520152611f79015261290a6000f3fe60806040526004361061023f5760003560e01c80635342acb41161012e578063a9059cbb116100ab578063dd62ed3e1161006f578063dd62ed3e146106b9578063ea2f0b37146106ff578063f2cc0c18146104c8578063f2fde38b1461071f578063f84354f11461073f57610246565b8063a9059cbb1461062e578063b6c523241461064e578063c0b0fda214610663578063c49b9a8014610679578063d543dbeb1461069957610246565b806388f82020116100f257806388f82020146105825780638da5cb5b146105bb5780638ee88c53146105d957806395d89b41146105f9578063a457c2d71461060e57610246565b80635342acb4146104e85780636bc87c3a1461052157806370a0823114610537578063715018a6146105575780637d1db4a51461056c57610246565b80633685d419116101bc578063437823ec11610180578063437823ec146104355780634549b0391461045557806349bd5a5e146104755780634a74bb02146104a957806352390c02146104c857610246565b80633685d419146103ca57806339509351146103ea5780633b124fe71461040a5780633bd5d1731461024b5780633c9f861d1461042057610246565b80631694505e116102035780631694505e1461030757806318160ddd1461035357806323b872dd146103685780632d83811914610388578063313ce567146103a857610246565b8063053ab1821461024b578063061c82d01461026d57806306fdde031461028d578063095ea7b3146102b857806313114a9d146102e857610246565b3661024657005b600080fd5b34801561025757600080fd5b5061026b6102663660046125f6565b61075f565b005b34801561027957600080fd5b5061026b6102883660046125f6565b610850565b34801561029957600080fd5b506102a261087f565b6040516102af9190612666565b60405180910390f35b3480156102c457600080fd5b506102d86102d33660046125b1565b610911565b60405190151581526020016102af565b3480156102f457600080fd5b50600d545b6040519081526020016102af565b34801561031357600080fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102af565b34801561035f57600080fd5b50600b546102f9565b34801561037457600080fd5b506102d8610383366004612571565b610928565b34801561039457600080fd5b506102f96103a33660046125f6565b610991565b3480156103b457600080fd5b5060115460405160ff90911681526020016102af565b3480156103d657600080fd5b5061026b6103e5366004612501565b610a17565b3480156103f657600080fd5b506102d86104053660046125b1565b610bd7565b34801561041657600080fd5b506102f960125481565b34801561042c57600080fd5b50600e546102f9565b34801561044157600080fd5b5061026b610450366004612501565b610c0d565b34801561046157600080fd5b506102f961047036600461260e565b610c5b565b34801561048157600080fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b557600080fd5b506018546102d890610100900460ff1681565b3480156104d457600080fd5b5061026b6104e3366004612501565b610cea565b3480156104f457600080fd5b506102d8610503366004612501565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561052d57600080fd5b506102f960165481565b34801561054357600080fd5b506102f9610552366004612501565b610e0d565b34801561056357600080fd5b5061026b610e6f565b34801561057857600080fd5b506102f960195481565b34801561058e57600080fd5b506102d861059d366004612501565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156105c757600080fd5b506000546001600160a01b031661033b565b3480156105e557600080fd5b5061026b6105f43660046125f6565b610ee3565b34801561060557600080fd5b506102a2610f12565b34801561061a57600080fd5b506102d86106293660046125b1565b610f21565b34801561063a57600080fd5b506102d86106493660046125b1565b610f70565b34801561065a57600080fd5b506002546102f9565b34801561066f57600080fd5b506102f960145481565b34801561068557600080fd5b5061026b6106943660046125dc565b610f7d565b3480156106a557600080fd5b5061026b6106b43660046125f6565b610ffb565b3480156106c557600080fd5b506102f96106d4366004612539565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b34801561070b57600080fd5b5061026b61071a366004612501565b61104b565b34801561072b57600080fd5b5061026b61073a366004612501565b611096565b34801561074b57600080fd5b5061026b61075a366004612501565b611180565b3360008181526009602052604090205460ff16156107d95760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084015b60405180910390fd5b60006107e483611257565b5050506001600160a01b038616600090815260056020526040902054939450610812939250849150506112aa565b6001600160a01b038316600090815260056020526040902055600c5461083890826112aa565b600c55600d5461084890846112f3565b600d55505050565b6000546001600160a01b0316331461087a5760405162461bcd60e51b81526004016107d0906126f0565b601255565b6060600f805461088e90612803565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba90612803565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b5050505050905090565b600061091e338484611352565b5060015b92915050565b6000610935848484611476565b610987843361098285604051806060016040528060288152602001612888602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190611727565b611352565b5060019392505050565b6000600c548211156109f85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016107d0565b6000610a02611761565b9050610a0e8382611784565b9150505b919050565b6000546001600160a01b03163314610a415760405162461bcd60e51b81526004016107d0906126f0565b6001600160a01b03811660009081526009602052604090205460ff16610a795760405162461bcd60e51b81526004016107d0906126b9565b60005b600a54811015610bd357816001600160a01b0316600a8281548110610ab157634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610bc157600a8054610adc906001906127ec565b81548110610afa57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600a80546001600160a01b039092169183908110610b3457634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600990925220805460ff19169055600a805480610b9a57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610bd3565b80610bcb8161283e565b915050610a7c565b5050565b3360008181526007602090815260408083206001600160a01b0387168452909152812054909161091e91859061098290866112f3565b6000546001600160a01b03163314610c375760405162461bcd60e51b81526004016107d0906126f0565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000600b54831115610caf5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016107d0565b81610ccf576000610cbf84611257565b5094965061092295505050505050565b6000610cda84611257565b5093965061092295505050505050565b6000546001600160a01b03163314610d145760405162461bcd60e51b81526004016107d0906126f0565b6001600160a01b03811660009081526009602052604090205460ff1615610d4d5760405162461bcd60e51b81526004016107d0906126b9565b6001600160a01b03811660009081526005602052604090205415610da7576001600160a01b038116600090815260056020526040902054610d8d90610991565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6001600160a01b03811660009081526009602052604081205460ff1615610e4d57506001600160a01b038116600090815260066020526040902054610a12565b6001600160a01b03821660009081526005602052604090205461092290610991565b6000546001600160a01b03163314610e995760405162461bcd60e51b81526004016107d0906126f0565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f0d5760405162461bcd60e51b81526004016107d0906126f0565b601655565b60606010805461088e90612803565b600061091e3384610982856040518060600160405280602581526020016128b0602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190611727565b600061091e338484611476565b6000546001600160a01b03163314610fa75760405162461bcd60e51b81526004016107d0906126f0565b601880548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610ff090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146110255760405162461bcd60e51b81526004016107d0906126f0565b611045606461103f83600b546117c690919063ffffffff16565b90611784565b60195550565b6000546001600160a01b031633146110755760405162461bcd60e51b81526004016107d0906126f0565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b031633146110c05760405162461bcd60e51b81526004016107d0906126f0565b6001600160a01b0381166111255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107d0565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111aa5760405162461bcd60e51b81526004016107d0906126f0565b6001600160a01b03811660009081526009602052604090205460ff166111e25760405162461bcd60e51b81526004016107d0906126b9565b60005b600a54811015610bd357816001600160a01b0316600a828154811061121a57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561124557600a8054610adc906001906127ec565b8061124f8161283e565b9150506111e5565b60008060008060008060008060008060006112718c611845565b9350935093509350600080600061128a8f87878761189a565b919f509d509b509599509397509195509350505050919395979092949650565b60006112ec83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611727565b9392505050565b6000806113008385612795565b9050838110156112ec5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107d0565b6001600160a01b0383166113b45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107d0565b6001600160a01b0382166114155760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107d0565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114da5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107d0565b6001600160a01b03821661153c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107d0565b6000811161159e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107d0565b6000546001600160a01b038481169116148015906115ca57506000546001600160a01b03838116911614155b15611632576019548111156116325760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016107d0565b600061163d30610e0d565b9050601954811061164d57506019545b601a5481108015908190611664575060185460ff16155b80156116a257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80156116b55750601854610100900460ff165b156116c857601a5491506116c882611909565b6001600160a01b03851660009081526008602052604090205460019060ff168061170a57506001600160a01b03851660009081526008602052604090205460ff165b15611713575060005b61171f868686846119a7565b505050505050565b6000818484111561174b5760405162461bcd60e51b81526004016107d09190612666565b50600061175884866127ec565b95945050505050565b600080600061176e611b2a565b909250905061177d8282611784565b9250505090565b60006112ec83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ce7565b6000826117d557506000610922565b60006117e183856127cd565b9050826117ee85836127ad565b146112ec5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107d0565b600080600080600061185686611d15565b9050600061186387611d31565b9050600061187088611d4d565b9050600061188a8261188485818d896112aa565b906112aa565b9993985091965094509092505050565b6000806000806118a8611761565b905060006118b689836117c6565b905060006118c489846117c6565b905060006118d289856117c6565b905060006118e089866117c6565b905060006118f482611884858189896112aa565b949d949c50929a509298505050505050505050565b6018805460ff191660011790556000611923826002611784565b9050600061193183836112aa565b90504761193d83611d69565b600061194947836112aa565b90506119558382611f4c565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506018805460ff19169055505050565b806119b4576119b4612061565b6001600160a01b03841660009081526009602052604090205460ff1680156119f557506001600160a01b03831660009081526009602052604090205460ff16155b15611a0a57611a058484846120aa565b611b08565b6001600160a01b03841660009081526009602052604090205460ff16158015611a4b57506001600160a01b03831660009081526009602052604090205460ff165b15611a5b57611a05848484612250565b6001600160a01b03841660009081526009602052604090205460ff16158015611a9d57506001600160a01b03831660009081526009602052604090205460ff16155b15611aad57611a0584848461231b565b6001600160a01b03841660009081526009602052604090205460ff168015611aed57506001600160a01b03831660009081526009602052604090205460ff165b15611afd57611a05848484612381565b611b0884848461231b565b80611b2457611b24601354601255601554601455601754601655565b50505050565b600c54600b546000918291825b600a54811015611cb5578260056000600a8481548110611b6757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611be057508160066000600a8481548110611bb957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611bf757600c54600b5494509450505050611ce3565b611c4b60056000600a8481548110611c1f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906112aa565b9250611ca160066000600a8481548110611c7557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906112aa565b915080611cad8161283e565b915050611b37565b50600b54600c54611cc591611784565b821015611cdd57600c54600b54935093505050611ce3565b90925090505b9091565b60008183611d085760405162461bcd60e51b81526004016107d09190612666565b50600061175884866127ad565b6000610922606461103f601254856117c690919063ffffffff16565b6000610922606461103f601454856117c690919063ffffffff16565b6000610922606461103f601654856117c690919063ffffffff16565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611dac57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635cb485926040518163ffffffff1660e01b815260040160206040518083038186803b158015611e2557600080fd5b505afa158015611e39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5d919061251d565b81600181518110611e7e57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050611ec9307f000000000000000000000000000000000000000000000000000000000000000084611352565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611f1e908590600090869030904290600401612725565b600060405180830381600087803b158015611f3857600080fd5b505af115801561171f573d6000803e3d6000fd5b611f77307f000000000000000000000000000000000000000000000000000000000000000084611352565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719823085600080611fbe6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561202157600080fd5b505af1158015612035573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061205a9190612639565b5050505050565b6012541580156120715750601454155b801561207d5750601654155b15612087576120a8565b60128054601355601480546015556016805460175560009283905590829055555b565b60006120b4611761565b905060008060008060008060006120ca89611257565b965096509650965096509650965061211089600660008e6001600160a01b03166001600160a01b03168152602001908152602001600020546112aa90919063ffffffff16565b6001600160a01b038c1660009081526006602090815260408083209390935560059052205461213f90886112aa565b6001600160a01b03808d1660009081526005602052604080822093909355908c168152205461216e90876112f3565b6001600160a01b038b1660009081526005602052604090205561219081612416565b6121a58561219e848b6117c6565b858561249f565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516121ea91815260200190565b60405180910390a36011546040516001600160a01b036101009092048216918d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061223b9086815260200190565b60405180910390a35050505050505050505050565b600061225a611761565b9050600080600080600080600061227089611257565b96509650965096509650965096506122b687600560008e6001600160a01b03166001600160a01b03168152602001908152602001600020546112aa90919063ffffffff16565b6001600160a01b03808d16600090815260056020908152604080832094909455918d168152600690915220546122ec90856112f3565b6001600160a01b038b1660009081526006602090815260408083209390935560059052205461216e90876112f3565b6000612325611761565b9050600080600080600080600061233b89611257565b965096509650965096509650965061213f87600560008e6001600160a01b03166001600160a01b03168152602001908152602001600020546112aa90919063ffffffff16565b600061238b611761565b905060008060008060008060006123a189611257565b96509650965096509650965096506123e789600660008e6001600160a01b03166001600160a01b03168152602001908152602001600020546112aa90919063ffffffff16565b6001600160a01b038c166000908152600660209081526040808320939093556005905220546122b690886112aa565b6000612420611761565b9050600061242e83836117c6565b3060009081526005602052604090205490915061244b90826112f3565b3060009081526005602090815260408083209390935560099052205460ff161561249a573060009081526006602052604090205461248990846112f3565b306000908152600660205260409020555b505050565b6124b88361188486600c546112aa90919063ffffffff16565b600c55600d546124c890836112f3565b600d55600e546124d890826112f3565b600e55600b546124e890826112aa565b600b5550505050565b80358015158114610a1257600080fd5b600060208284031215612512578081fd5b81356112ec8161286f565b60006020828403121561252e578081fd5b81516112ec8161286f565b6000806040838503121561254b578081fd5b82356125568161286f565b915060208301356125668161286f565b809150509250929050565b600080600060608486031215612585578081fd5b83356125908161286f565b925060208401356125a08161286f565b929592945050506040919091013590565b600080604083850312156125c3578182fd5b82356125ce8161286f565b946020939093013593505050565b6000602082840312156125ed578081fd5b6112ec826124f1565b600060208284031215612607578081fd5b5035919050565b60008060408385031215612620578182fd5b82359150612630602084016124f1565b90509250929050565b60008060006060848603121561264d578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b8181101561269257858101830151858201604001528201612676565b818111156126a35783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156127745784516001600160a01b03168352938301939183019160010161274f565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156127a8576127a8612859565b500190565b6000826127c857634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156127e7576127e7612859565b500290565b6000828210156127fe576127fe612859565b500390565b600181811c9082168061281757607f821691505b6020821081141561283857634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561285257612852612859565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461288457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200217f4aac13ebfe9ca1a2222b5b673d4e5533c8e2a6437139ff62dfcc137629f64736f6c63430008030033

Deployed ByteCode Sourcemap

26090:21415:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31545:378;;;;;;;;;;-1:-1:-1;31545:378:0;;;;;:::i;:::-;;:::i;:::-;;44555:98;;;;;;;;;;-1:-1:-1;44555:98:0;;;;;:::i;:::-;;:::i;28784:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30225:161;;;;;;;;;;-1:-1:-1;30225:161:0;;;;;:::i;:::-;;:::i;:::-;;;3870:14:1;;3863:22;3845:41;;3833:2;3818:18;30225:161:0;3800:92:1;31350:87:0;;;;;;;;;;-1:-1:-1;31419:10:0;;31350:87;;;10382:25:1;;;10370:2;10355:18;31350:87:0;10337:76:1;27348:44:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3049:32:1;;;3031:51;;3019:2;3004:18;27348:44:0;2986:102:1;29061:95:0;;;;;;;;;;-1:-1:-1;29141:7:0;;29061:95;;30394:313;;;;;;;;;;-1:-1:-1;30394:313:0;;;;;:::i;:::-;;:::i;32775:253::-;;;;;;;;;;-1:-1:-1;32775:253:0;;;;;:::i;:::-;;:::i;28970:83::-;;;;;;;;;;-1:-1:-1;29036:9:0;;28970:83;;29036:9;;;;11872:36:1;;11860:2;11845:18;28970:83:0;11827:87:1;43025:479:0;;;;;;;;;;-1:-1:-1;43025:479:0;;;;;:::i;:::-;;:::i;30719:218::-;;;;;;;;;;-1:-1:-1;30719:218:0;;;;;:::i;:::-;;:::i;27070:26::-;;;;;;;;;;;;;;;;31449:88;;;;;;;;;;-1:-1:-1;31518:11:0;;31449:88;;44310:111;;;;;;;;;;-1:-1:-1;44310:111:0;;;;;:::i;:::-;;:::i;32325:438::-;;;;;;;;;;-1:-1:-1;32325:438:0;;;;;:::i;:::-;;:::i;27399:38::-;;;;;;;;;;;;;;;27478:40;;;;;;;;;;-1:-1:-1;27478:40:0;;;;;;;;;;;42570:447;;;;;;;;;;-1:-1:-1;42570:447:0;;;;;:::i;:::-;;:::i;45790:123::-;;;;;;;;;;-1:-1:-1;45790:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;45878:27:0;45854:4;45878:27;;;:18;:27;;;;;;;;;45790:123;27247:32;;;;;;;;;;;;;;;;29164:198;;;;;;;;;;-1:-1:-1;29164:198:0;;;;;:::i;:::-;;:::i;15959:148::-;;;;;;;;;;;;;:::i;27531:56::-;;;;;;;;;;;;;;;;31222:120;;;;;;;;;;-1:-1:-1;31222:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;31314:20:0;31290:4;31314:20;;;:11;:20;;;;;;;;;31222:120;15316:79;;;;;;;;;;-1:-1:-1;15354:7:0;15381:6;-1:-1:-1;;;;;15381:6:0;15316:79;;44665:122;;;;;;;;;;-1:-1:-1;44665:122:0;;;;;:::i;:::-;;:::i;28875:87::-;;;;;;;;;;;;;:::i;30945:269::-;;;;;;;;;;-1:-1:-1;30945:269:0;;;;;:::i;:::-;;:::i;29370:167::-;;;;;;;;;;-1:-1:-1;29370:167:0;;;;;:::i;:::-;;:::i;16514:89::-;;;;;;;;;;-1:-1:-1;16586:9:0;;16514:89;;27157:27;;;;;;;;;;;;;;;;44968:171;;;;;;;;;;-1:-1:-1;44968:171:0;;;;;:::i;:::-;;:::i;44798:162::-;;;;;;;;;;-1:-1:-1;44798:162:0;;;;;:::i;:::-;;:::i;29545:143::-;;;;;;;;;;-1:-1:-1;29545:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;29653:18:0;;;29626:7;29653:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29545:143;44433:110;;;;;;;;;;-1:-1:-1;44433:110:0;;;;;:::i;:::-;;:::i;16262:244::-;;;;;;;;;;-1:-1:-1;16262:244:0;;;;;:::i;:::-;;:::i;33384:478::-;;;;;;;;;;-1:-1:-1;33384:478:0;;;;;:::i;:::-;;:::i;31545:378::-;7834:10;31597:14;31646:19;;;:11;:19;;;;;;;;31645:20;31637:77;;;;-1:-1:-1;;;31637:77:0;;10025:2:1;31637:77:0;;;10007:21:1;10064:2;10044:18;;;10037:30;10103:34;10083:18;;;10076:62;-1:-1:-1;;;10154:18:1;;;10147:42;10206:19;;31637:77:0;;;;;;;;;31726:15;31751:19;31762:7;31751:10;:19::i;:::-;-1:-1:-1;;;;;;;;31799:15:0;;;;;;:7;:15;;;;;;31725:45;;-1:-1:-1;31799:28:0;;:15;-1:-1:-1;31725:45:0;;-1:-1:-1;;31799:19:0;:28::i;:::-;-1:-1:-1;;;;;31781:15:0;;;;;;:7;:15;;;;;:46;31848:7;;:20;;31860:7;31848:11;:20::i;:::-;31838:7;:30;31892:10;;:23;;31907:7;31892:14;:23::i;:::-;31879:10;:36;-1:-1:-1;;;31545:378:0:o;44555:98::-;15528:6;;-1:-1:-1;;;;;15528:6:0;7834:10;15528:22;15520:67;;;;-1:-1:-1;;;15520:67:0;;;;;;;:::i;:::-;44629:7:::1;:16:::0;44555:98::o;28784:83::-;28821:13;28854:5;28847:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28784:83;:::o;30225:161::-;30300:4;30317:39;7834:10;30340:7;30349:6;30317:8;:39::i;:::-;-1:-1:-1;30374:4:0;30225:161;;;;;:::o;30394:313::-;30492:4;30509:36;30519:6;30527:9;30538:6;30509:9;:36::i;:::-;30556:121;30565:6;7834:10;30587:89;30625:6;30587:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30587:19:0;;;;;;:11;:19;;;;;;;;7834:10;30587:33;;;;;;;;;;:37;:89::i;:::-;30556:8;:121::i;:::-;-1:-1:-1;30695:4:0;30394:313;;;;;:::o;32775:253::-;32841:7;32880;;32869;:18;;32861:73;;;;-1:-1:-1;;;32861:73:0;;5339:2:1;32861:73:0;;;5321:21:1;5378:2;5358:18;;;5351:30;5417:34;5397:18;;;5390:62;-1:-1:-1;;;5468:18:1;;;5461:40;5518:19;;32861:73:0;5311:232:1;32861:73:0;32945:19;32968:10;:8;:10::i;:::-;32945:33;-1:-1:-1;32996:24:0;:7;32945:33;32996:11;:24::i;:::-;32989:31;;;32775:253;;;;:::o;43025:479::-;15528:6;;-1:-1:-1;;;;;15528:6:0;7834:10;15528:22;15520:67;;;;-1:-1:-1;;;15520:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43107:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;43099:60;;;;-1:-1:-1::0;;;43099:60:0::1;;;;;;;:::i;:::-;43175:9;43170:327;43194:9;:16:::0;43190:20;::::1;43170:327;;;43252:7;-1:-1:-1::0;;;;;43236:23:0::1;:9;43246:1;43236:12;;;;;;-1:-1:-1::0;;;43236:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;43236:12:0::1;:23;43232:254;;;43295:9;43305:16:::0;;:20:::1;::::0;43324:1:::1;::::0;43305:20:::1;:::i;:::-;43295:31;;;;;;-1:-1:-1::0;;;43295:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;43280:9:::1;:12:::0;;-1:-1:-1;;;;;43295:31:0;;::::1;::::0;43290:1;;43280:12;::::1;;;-1:-1:-1::0;;;43280:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;43280:46:0::1;-1:-1:-1::0;;;;;43280:46:0;;::::1;;::::0;;43345:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;43384:11:::1;:20:::0;;;;:28;;-1:-1:-1;;43384:28:0::1;::::0;;43431:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;43431:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;43431:15:0;;;;;-1:-1:-1;;;;;;43431:15:0::1;::::0;;;;;43465:5:::1;;43232:254;43212:3:::0;::::1;::::0;::::1;:::i;:::-;;;;43170:327;;;;43025:479:::0;:::o;30719:218::-;7834:10;30807:4;30856:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30856:34:0;;;;;;;;;;30807:4;;30824:83;;30847:7;;30856:50;;30895:10;30856:38;:50::i;44310:111::-;15528:6;;-1:-1:-1;;;;;15528:6:0;7834:10;15528:22;15520:67;;;;-1:-1:-1;;;15520:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44379:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;44379:34:0::1;44409:4;44379:34;::::0;;44310:111::o;32325:438::-;32415:7;32454;;32443;:18;;32435:62;;;;-1:-1:-1;;;32435:62:0;;7272:2:1;32435:62:0;;;7254:21:1;7311:2;7291:18;;;7284:30;7350:33;7330:18;;;7323:61;7401:18;;32435:62:0;7244:181:1;32435:62:0;32513:17;32508:248;;32548:15;32573:19;32584:7;32573:10;:19::i;:::-;-1:-1:-1;32547:45:0;;-1:-1:-1;32607:14:0;;-1:-1:-1;;;;;;32607:14:0;32508:248;32656:23;32688:19;32699:7;32688:10;:19::i;:::-;-1:-1:-1;32654:53:0;;-1:-1:-1;32722:22:0;;-1:-1:-1;;;;;;32722:22:0;42570:447;15528:6;;-1:-1:-1;;;;;15528:6:0;7834:10;15528:22;15520:67;;;;-1:-1:-1;;;15520:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42767:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;42766:21;42758:61;;;;-1:-1:-1::0;;;42758:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42833:16:0;::::1;42852:1;42833:16:::0;;;:7:::1;:16;::::0;;;;;:20;42830:108:::1;;-1:-1:-1::0;;;;;42909:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;42889:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;42870:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;42830:108:::1;-1:-1:-1::0;;;;;42948:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;42948:27:0::1;42971:4;42948:27:::0;;::::1;::::0;;;42986:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;42986:23:0::1;::::0;;::::1;::::0;;42570:447::o;29164:198::-;-1:-1:-1;;;;;29254:20:0;;29230:7;29254:20;;;:11;:20;;;;;;;;29250:49;;;-1:-1:-1;;;;;;29283:16:0;;;;;;:7;:16;;;;;;29276:23;;29250:49;-1:-1:-1;;;;;29337:16:0;;;;;;:7;:16;;;;;;29317:37;;:19;:37::i;15959:148::-;15528:6;;-1:-1:-1;;;;;15528:6:0;7834:10;15528:22;15520:67;;;;-1:-1:-1;;;15520:67:0;;;;;;;:::i;:::-;16066:1:::1;16050:6:::0;;16029:40:::1;::::0;-1:-1:-1;;;;;16050:6:0;;::::1;::::0;16029:40:::1;::::0;16066:1;;16029:40:::1;16097:1;16080:19:::0;;-1:-1:-1;;;;;;16080:19:0::1;::::0;;15959:148::o;44665:122::-;15528:6;;-1:-1:-1;;;;;15528:6:0;7834:10;15528:22;15520:67;;;;-1:-1:-1;;;15520:67:0;;;;;;;:::i;:::-;44751:13:::1;:28:::0;44665:122::o;28875:87::-;28914:13;28947:7;28940:14;;;;;:::i;30945:269::-;31038:4;31055:129;7834:10;31078:7;31087:96;31126:15;31087:96;;;;;;;;;;;;;;;;;7834:10;31087:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;31087:34:0;;;;;;;;;;;;:38;:96::i;29370:167::-;29448:4;29465:42;7834:10;29489:9;29500:6;29465:9;:42::i;44968:171::-;15528:6;;-1:-1:-1;;;;;15528:6:0;7834:10;15528:22;15520:67;;;;-1:-1:-1;;;15520:67:0;;;;;;;:::i;:::-;45045:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;45045:32:0;;::::1;;::::0;;45093:38:::1;::::0;::::1;::::0;::::1;::::0;45069:8;3870:14:1;3863:22;3845:41;;3833:2;3818:18;;3800:92;45093:38:0::1;;;;;;;;44968:171:::0;:::o;44798:162::-;15528:6;;-1:-1:-1;;;;;15528:6:0;7834:10;15528:22;15520:67;;;;-1:-1:-1;;;15520:67:0;;;;;;;:::i;:::-;44892:60:::1;44936:5;44892:25;44904:12;44892:7;;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:60::i;:::-;44877:12;:75:::0;-1:-1:-1;44798:162:0:o;44433:110::-;15528:6;;-1:-1:-1;;;;;15528:6:0;7834:10;15528:22;15520:67;;;;-1:-1:-1;;;15520:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44500:27:0::1;44530:5;44500:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;44500:35:0::1;::::0;;44433:110::o;16262:244::-;15528:6;;-1:-1:-1;;;;;15528:6:0;7834:10;15528:22;15520:67;;;;-1:-1:-1;;;15520:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16351:22:0;::::1;16343:73;;;::::0;-1:-1:-1;;;16343:73:0;;5750:2:1;16343:73:0::1;::::0;::::1;5732:21:1::0;5789:2;5769:18;;;5762:30;5828:34;5808:18;;;5801:62;-1:-1:-1;;;5879:18:1;;;5872:36;5925:19;;16343:73:0::1;5722:228:1::0;16343:73:0::1;16453:6;::::0;;16432:38:::1;::::0;-1:-1:-1;;;;;16432:38:0;;::::1;::::0;16453:6;::::1;::::0;16432:38:::1;::::0;::::1;16481:6;:17:::0;;-1:-1:-1;;;;;;16481:17:0::1;-1:-1:-1::0;;;;;16481:17:0;;;::::1;::::0;;;::::1;::::0;;16262:244::o;33384:478::-;15528:6;;-1:-1:-1;;;;;15528:6:0;7834:10;15528:22;15520:67;;;;-1:-1:-1;;;15520:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33465:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;33457:60;;;;-1:-1:-1::0;;;33457:60:0::1;;;;;;;:::i;:::-;33533:9;33528:327;33552:9;:16:::0;33548:20;::::1;33528:327;;;33610:7;-1:-1:-1::0;;;;;33594:23:0::1;:9;33604:1;33594:12;;;;;;-1:-1:-1::0;;;33594:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;33594:12:0::1;:23;33590:254;;;33653:9;33663:16:::0;;:20:::1;::::0;33682:1:::1;::::0;33663:20:::1;:::i;33590:254::-;33570:3:::0;::::1;::::0;::::1;:::i;:::-;;;;33528:327;;38042:446:::0;38101:7;38110;38119;38128;38137;38146;38155;38176:23;38201:12;38215:13;38230:18;38252:20;38264:7;38252:11;:20::i;:::-;38175:97;;;;;;;;38284:15;38301:23;38326:12;38342:45;38354:7;38363:4;38369:5;38376:10;38342:11;:45::i;:::-;38283:104;;-1:-1:-1;38283:104:0;-1:-1:-1;38283:104:0;-1:-1:-1;38438:15:0;;-1:-1:-1;38455:4:0;;-1:-1:-1;38461:5:0;;-1:-1:-1;38469:10:0;-1:-1:-1;;;;38042:446:0;;;;;;;;;:::o;1161:136::-;1219:7;1246:43;1250:1;1253;1246:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1239:50;1161:136;-1:-1:-1;;;1161:136:0:o;699:179::-;757:7;;789:5;793:1;789;:5;:::i;:::-;777:17;;818:1;813;:6;;805:46;;;;-1:-1:-1;;;805:46:0;;6560:2:1;805:46:0;;;6542:21:1;6599:2;6579:18;;;6572:30;6638:29;6618:18;;;6611:57;6685:18;;805:46:0;6532:177:1;33874:337:0;-1:-1:-1;;;;;33967:19:0;;33959:68;;;;-1:-1:-1;;;33959:68:0;;9620:2:1;33959:68:0;;;9602:21:1;9659:2;9639:18;;;9632:30;9698:34;9678:18;;;9671:62;-1:-1:-1;;;9749:18:1;;;9742:34;9793:19;;33959:68:0;9592:226:1;33959:68:0;-1:-1:-1;;;;;34046:21:0;;34038:68;;;;-1:-1:-1;;;34038:68:0;;6157:2:1;34038:68:0;;;6139:21:1;6196:2;6176:18;;;6169:30;6235:34;6215:18;;;6208:62;-1:-1:-1;;;6286:18:1;;;6279:32;6328:19;;34038:68:0;6129:224:1;34038:68:0;-1:-1:-1;;;;;34119:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;34171:32;;10382:25:1;;;34171:32:0;;10355:18:1;34171:32:0;;;;;;;33874:337;;;:::o;34219:1777::-;-1:-1:-1;;;;;34305:18:0;;34297:68;;;;-1:-1:-1;;;34297:68:0;;9214:2:1;34297:68:0;;;9196:21:1;9253:2;9233:18;;;9226:30;9292:34;9272:18;;;9265:62;-1:-1:-1;;;9343:18:1;;;9336:35;9388:19;;34297:68:0;9186:227:1;34297:68:0;-1:-1:-1;;;;;34384:16:0;;34376:64;;;;-1:-1:-1;;;34376:64:0;;4935:2:1;34376:64:0;;;4917:21:1;4974:2;4954:18;;;4947:30;5013:34;4993:18;;;4986:62;-1:-1:-1;;;5064:18:1;;;5057:33;5107:19;;34376:64:0;4907:225:1;34376:64:0;34468:1;34459:6;:10;34451:64;;;;-1:-1:-1;;;34451:64:0;;8804:2:1;34451:64:0;;;8786:21:1;8843:2;8823:18;;;8816:30;8882:34;8862:18;;;8855:62;-1:-1:-1;;;8933:18:1;;;8926:39;8982:19;;34451:64:0;8776:231:1;34451:64:0;15354:7;15381:6;-1:-1:-1;;;;;34529:15:0;;;15381:6;;34529:15;;;;:32;;-1:-1:-1;15354:7:0;15381:6;-1:-1:-1;;;;;34548:13:0;;;15381:6;;34548:13;;34529:32;34526:125;;;34594:12;;34584:6;:22;;34576:75;;;;-1:-1:-1;;;34576:75:0;;7632:2:1;34576:75:0;;;7614:21:1;7671:2;7651:18;;;7644:30;7710:34;7690:18;;;7683:62;-1:-1:-1;;;7761:18:1;;;7754:38;7809:19;;34576:75:0;7604:230:1;34576:75:0;34946:28;34977:24;34995:4;34977:9;:24::i;:::-;34946:55;;35049:12;;35025:20;:36;35022:112;;-1:-1:-1;35110:12:0;;35022:112;35205:29;;35181:53;;;;;;;35263;;-1:-1:-1;35300:16:0;;;;35299:17;35263:53;:91;;;;;35341:13;-1:-1:-1;;;;;35333:21:0;:4;-1:-1:-1;;;;;35333:21:0;;;35263:91;:129;;;;-1:-1:-1;35371:21:0;;;;;;;35263:129;35245:318;;;35442:29;;35419:52;;35515:36;35530:20;35515:14;:36::i;:::-;-1:-1:-1;;;;;35771:24:0;;35644:12;35771:24;;;:18;:24;;;;;;35659:4;;35771:24;;;:50;;-1:-1:-1;;;;;;35799:22:0;;;;;;:18;:22;;;;;;;;35771:50;35768:96;;;-1:-1:-1;35847:5:0;35768:96;35950:38;35965:4;35970:2;35973:6;35980:7;35950:14;:38::i;:::-;34219:1777;;;;;;:::o;1600:192::-;1686:7;1722:12;1714:6;;;;1706:29;;;;-1:-1:-1;;;1706:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1746:9:0;1758:5;1762:1;1758;:5;:::i;:::-;1746:17;1600:192;-1:-1:-1;;;;;1600:192:0:o;39467:163::-;39508:7;39529:15;39546;39565:19;:17;:19::i;:::-;39528:56;;-1:-1:-1;39528:56:0;-1:-1:-1;39602:20:0;39528:56;;39602:11;:20::i;:::-;39595:27;;;;39467:163;:::o;2998:132::-;3056:7;3083:39;3087:1;3090;3083:39;;;;;;;;;;;;;;;;;:3;:39::i;2051:471::-;2109:7;2354:6;2350:47;;-1:-1:-1;2384:1:0;2377:8;;2350:47;2409:9;2421:5;2425:1;2421;:5;:::i;:::-;2409:17;-1:-1:-1;2454:1:0;2445:5;2449:1;2409:17;2445:5;:::i;:::-;:10;2437:56;;;;-1:-1:-1;;;2437:56:0;;8041:2:1;2437:56:0;;;8023:21:1;8080:2;8060:18;;;8053:30;8119:34;8099:18;;;8092:62;-1:-1:-1;;;8170:18:1;;;8163:31;8211:19;;2437:56:0;8013:223:1;38496:408:0;38556:7;38565;38573;38582;38602:12;38617:24;38633:7;38617:15;:24::i;:::-;38602:39;;38652:13;38668:25;38685:7;38668:16;:25::i;:::-;38652:41;;38704:18;38725:30;38747:7;38725:21;:30::i;:::-;38704:51;-1:-1:-1;38766:23:0;38792:44;38704:51;38792:28;38814:5;38792:28;:7;38804:4;38792:11;:17::i;:::-;:21;;:28::i;:44::-;38766:70;38872:4;;-1:-1:-1;38878:5:0;;-1:-1:-1;38878:5:0;-1:-1:-1;38496:408:0;;-1:-1:-1;;;38496:408:0:o;38912:547::-;39021:7;39030;39039;39069:19;39092:10;:8;:10::i;:::-;39069:33;-1:-1:-1;39123:15:0;39141:24;:7;39069:33;39141:11;:24::i;:::-;39123:42;-1:-1:-1;39176:12:0;39191:21;:4;39200:11;39191:8;:21::i;:::-;39176:36;-1:-1:-1;39223:13:0;39239:22;:5;39249:11;39239:9;:22::i;:::-;39223:38;-1:-1:-1;39272:18:0;39293:27;:10;39308:11;39293:14;:27::i;:::-;39272:48;-1:-1:-1;39331:23:0;39357:44;39272:48;39357:28;39379:5;39357:28;:7;39369:4;39357:11;:17::i;:44::-;39420:7;;;;-1:-1:-1;39446:4:0;;-1:-1:-1;38912:547:0;;-1:-1:-1;;;;;;;;;38912:547:0:o;45921:985::-;27973:16;:23;;-1:-1:-1;;27973:23:0;27992:4;27973:23;;;:16;46072:27:::1;:20:::0;46097:1:::1;46072:24;:27::i;:::-;46057:42:::0;-1:-1:-1;46110:17:0::1;46130:30;:20:::0;46057:42;46130:24:::1;:30::i;:::-;46110:50:::0;-1:-1:-1;46463:21:0::1;46529:22;46546:4:::0;46529:16:::1;:22::i;:::-;46682:18;46703:41;:21;46729:14:::0;46703:25:::1;:41::i;:::-;46682:62;;46794:35;46807:9;46818:10;46794:12;:35::i;:::-;46855:43;::::0;;11608:25:1;;;11664:2;11649:18;;11642:34;;;11692:18;;;11685:34;;;46855:43:0::1;::::0;11596:2:1;11581:18;46855:43:0::1;;;;;;;-1:-1:-1::0;;28019:16:0;:24;;-1:-1:-1;;28019:24:0;;;-1:-1:-1;;;45921:985:0:o;40284:834::-;40395:7;40391:40;;40417:14;:12;:14::i;:::-;-1:-1:-1;;;;;40456:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;40480:22:0;;;;;;:11;:22;;;;;;;;40479:23;40456:46;40452:597;;;40519:48;40541:6;40549:9;40560:6;40519:21;:48::i;:::-;40452:597;;;-1:-1:-1;;;;;40590:19:0;;;;;;:11;:19;;;;;;;;40589:20;:46;;;;-1:-1:-1;;;;;;40613:22:0;;;;;;:11;:22;;;;;;;;40589:46;40585:464;;;40652:46;40672:6;40680:9;40691:6;40652:19;:46::i;40585:464::-;-1:-1:-1;;;;;40721:19:0;;;;;;:11;:19;;;;;;;;40720:20;:47;;;;-1:-1:-1;;;;;;40745:22:0;;;;;;:11;:22;;;;;;;;40744:23;40720:47;40716:333;;;40784:44;40802:6;40810:9;40821:6;40784:17;:44::i;40716:333::-;-1:-1:-1;;;;;40850:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;40873:22:0;;;;;;:11;:22;;;;;;;;40850:45;40846:203;;;40912:48;40934:6;40942:9;40953:6;40912:21;:48::i;40846:203::-;40993:44;41011:6;41019:9;41030:6;40993:17;:44::i;:::-;41073:7;41069:41;;41095:15;37626;;37616:7;:25;37663:16;;37652:8;:27;37706:21;;37690:13;:37;37572:163;41095:15;40284:834;;;;:::o;39638:561::-;39735:7;;39771;;39688;;;;;39795:289;39819:9;:16;39815:20;;39795:289;;;39885:7;39861;:21;39869:9;39879:1;39869:12;;;;;;-1:-1:-1;;;39869:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39869:12:0;39861:21;;;;;;;;;;;;;:31;;:66;;;39920:7;39896;:21;39904:9;39914:1;39904:12;;;;;;-1:-1:-1;;;39904:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39904:12:0;39896:21;;;;;;;;;;;;;:31;39861:66;39857:97;;;39937:7;;39946;;39929:25;;;;;;;;;39857:97;39979:34;39991:7;:21;39999:9;40009:1;39999:12;;;;;;-1:-1:-1;;;39999:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39999:12:0;39991:21;;;;;;;;;;;;;39979:7;;:11;:34::i;:::-;39969:44;;40038:34;40050:7;:21;40058:9;40068:1;40058:12;;;;;;-1:-1:-1;;;40058:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40058:12:0;40050:21;;;;;;;;;;;;;40038:7;;:11;:34::i;:::-;40028:44;-1:-1:-1;39837:3:0;;;;:::i;:::-;;;;39795:289;;;-1:-1:-1;40120:7:0;;40108;;:20;;:11;:20::i;:::-;40098:7;:30;40094:61;;;40138:7;;40147;;40130:25;;;;;;;;40094:61;40174:7;;-1:-1:-1;40183:7:0;-1:-1:-1;39638:561:0;;;:::o;3626:278::-;3712:7;3747:12;3740:5;3732:28;;;;-1:-1:-1;;;3732:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3771:9:0;3783:5;3787:1;3783;:5;:::i;36727:154::-;36791:7;36818:55;36857:5;36818:20;36830:7;;36818;:11;;:20;;;;:::i;36888:156::-;36953:7;36980:56;37020:5;36980:21;36992:8;;36980:7;:11;;:21;;;;:::i;37058:166::-;37128:7;37155:61;37200:5;37155:26;37167:13;;37155:7;:11;;:26;;;;:::i;46914:588::-;47064:16;;;47078:1;47064:16;;;;;;;;47040:21;;47064:16;;;;;;;;;;-1:-1:-1;47064:16:0;47040:40;;47109:4;47091;47096:1;47091:7;;;;;;-1:-1:-1;;;47091:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;47091:23:0;;;-1:-1:-1;;;;;47091:23:0;;;;;47135:15;-1:-1:-1;;;;;47135:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47125:4;47130:1;47125:7;;;;;;-1:-1:-1;;;47125:7:0;;;;;;;;;;;;;;:31;-1:-1:-1;;;;;47125:31:0;;;-1:-1:-1;;;;;47125:31:0;;;;;47169:62;47186:4;47201:15;47219:11;47169:8;:62::i;:::-;47270:224;;-1:-1:-1;;;47270:224:0;;-1:-1:-1;;;;;47270:15:0;:66;;;;:224;;47351:11;;47377:1;;47421:4;;47448;;47468:15;;47270:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29700:513;29848:62;29865:4;29880:15;29898:11;29848:8;:62::i;:::-;29953:15;-1:-1:-1;;;;;29953:31:0;;29992:9;30025:4;30045:11;30071:1;30114;30157:7;15354;15381:6;-1:-1:-1;;;;;15381:6:0;15316:79;;30157:7;29953:252;;;;;;-1:-1:-1;;;;;;29953:252:0;;;-1:-1:-1;;;;;3452:15:1;;;29953:252:0;;;3434:34:1;3484:18;;;3477:34;;;;3527:18;;;3520:34;;;;3570:18;;;3563:34;3634:15;;;3613:19;;;3606:44;30179:15:0;3666:19:1;;;3659:35;3368:19;;29953:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29700:513;;:::o;37232:328::-;37278:7;;:12;:29;;;;-1:-1:-1;37294:8:0;;:13;37278:29;:51;;;;-1:-1:-1;37311:13:0;;:18;37278:51;37275:63;;;37331:7;;37275:63;37376:7;;;37358:15;:25;37413:8;;;37394:16;:27;37456:13;;;37432:21;:37;-1:-1:-1;37490:11:0;;;;37512:12;;;;37535:17;37232:328;:::o;41858:704::-;41960:19;41983:10;:8;:10::i;:::-;41960:33;;42005:15;42022:23;42047:12;42061:23;42086:12;42099:13;42114:18;42136:19;42147:7;42136:10;:19::i;:::-;42004:151;;;;;;;;;;;;;;42184:28;42204:7;42184;:15;42192:6;-1:-1:-1;;;;;42184:15:0;-1:-1:-1;;;;;42184:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;42166:15:0;;;;;;:7;:15;;;;;;;;:46;;;;42241:7;:15;;;;:28;;42261:7;42241:19;:28::i;:::-;-1:-1:-1;;;;;42223:15:0;;;;;;;:7;:15;;;;;;:46;;;;42301:18;;;;;;;:39;;42324:15;42301:22;:39::i;:::-;-1:-1:-1;;;;;42280:18:0;;;;;;:7;:18;;;;;:60;42354:26;42369:10;42354:14;:26::i;:::-;42391:53;42403:4;42409:22;:5;42419:11;42409:9;:22::i;:::-;42432:4;42438:5;42391:11;:53::i;:::-;42477:9;-1:-1:-1;;;;;42460:44:0;42469:6;-1:-1:-1;;;;;42460:44:0;;42488:15;42460:44;;;;10382:25:1;;10370:2;10355:18;;10337:76;42460:44:0;;;;;;;;42537:9;;42520:34;;-1:-1:-1;;;;;42537:9:0;;;;;;;42520:34;;;;;;;42548:5;10382:25:1;;10370:2;10355:18;;10337:76;42520:34:0;;;;;;;;41858:704;;;;;;;;;;;:::o;41126:724::-;41226:19;41249:10;:8;:10::i;:::-;41226:33;;41271:15;41288:23;41313:12;41327:23;41352:12;41366:13;41380:18;41402:19;41413:7;41402:10;:19::i;:::-;41270:151;;;;;;;;;;;;;;41450:28;41470:7;41450;:15;41458:6;-1:-1:-1;;;;;41450:15:0;-1:-1:-1;;;;;41450:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;41432:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;41510:18;;;;;:7;:18;;;;;:39;;41533:15;41510:22;:39::i;:::-;-1:-1:-1;;;;;41489:18:0;;;;;;:7;:18;;;;;;;;:60;;;;41581:7;:18;;;;:39;;41604:15;41581:22;:39::i;36004:711::-;36102:19;36125:10;:8;:10::i;:::-;36102:33;;36157:15;36174:23;36199:12;36213:23;36238:12;36252:13;36267:18;36289:19;36300:7;36289:10;:19::i;:::-;36156:152;;;;;;;;;;;;;;36347:28;36367:7;36347;:15;36355:6;-1:-1:-1;;;;;36347:15:0;-1:-1:-1;;;;;36347:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;43514:780::-;43616:19;43639:10;:8;:10::i;:::-;43616:33;;43661:15;43678:23;43703:12;43717:23;43742:12;43755:13;43770:18;43792:19;43803:7;43792:10;:19::i;:::-;43660:151;;;;;;;;;;;;;;43840:28;43860:7;43840;:15;43848:6;-1:-1:-1;;;;;43840:15:0;-1:-1:-1;;;;;43840:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;43822:15:0;;;;;;:7;:15;;;;;;;;:46;;;;43897:7;:15;;;;:28;;43917:7;43897:19;:28::i;45423:355::-;45486:19;45509:10;:8;:10::i;:::-;45486:33;-1:-1:-1;45530:18:0;45551:27;:10;45486:33;45551:14;:27::i;:::-;45630:4;45614:22;;;;:7;:22;;;;;;45530:48;;-1:-1:-1;45614:38:0;;45530:48;45614:26;:38::i;:::-;45605:4;45589:22;;;;:7;:22;;;;;;;;:63;;;;45666:11;:26;;;;;;45663:107;;;45748:4;45732:22;;;;:7;:22;;;;;;:38;;45759:10;45732:26;:38::i;:::-;45723:4;45707:22;;;;:7;:22;;;;;:63;45663:107;45423:355;;;:::o;37744:284::-;37852:28;37874:5;37852:17;37864:4;37852:7;;:11;;:17;;;;:::i;:28::-;37842:7;:38;37904:10;;:20;;37919:4;37904:14;:20::i;:::-;37891:10;:33;37949:11;;:22;;37965:5;37949:15;:22::i;:::-;37935:11;:36;38002:7;;:18;;38014:5;38002:11;:18::i;:::-;37992:7;:28;-1:-1:-1;;;;37744:284:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;179:257;;291:2;279:9;270:7;266:23;262:32;259:2;;;312:6;304;297:22;259:2;356:9;343:23;375:31;400:5;375:31;:::i;441:261::-;;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:31;666:5;641:31;:::i;707:398::-;;;836:2;824:9;815:7;811:23;807:32;804:2;;;857:6;849;842:22;804:2;901:9;888:23;920:31;945:5;920:31;:::i;:::-;970:5;-1:-1:-1;1027:2:1;1012:18;;999:32;1040:33;999:32;1040:33;:::i;:::-;1092:7;1082:17;;;794:311;;;;;:::o;1110:466::-;;;;1256:2;1244:9;1235:7;1231:23;1227:32;1224:2;;;1277:6;1269;1262:22;1224:2;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;-1:-1:-1;1447:2:1;1432:18;;1419:32;1460:33;1419:32;1460:33;:::i;:::-;1214:362;;1512:7;;-1:-1:-1;;;1566:2:1;1551:18;;;;1538:32;;1214:362::o;1581:325::-;;;1710:2;1698:9;1689:7;1685:23;1681:32;1678:2;;;1731:6;1723;1716:22;1678:2;1775:9;1762:23;1794:31;1819:5;1794:31;:::i;:::-;1844:5;1896:2;1881:18;;;;1868:32;;-1:-1:-1;;;1668:238:1:o;1911:190::-;;2020:2;2008:9;1999:7;1995:23;1991:32;1988:2;;;2041:6;2033;2026:22;1988:2;2069:26;2085:9;2069:26;:::i;2106:190::-;;2218:2;2206:9;2197:7;2193:23;2189:32;2186:2;;;2239:6;2231;2224:22;2186:2;-1:-1:-1;2267:23:1;;2176:120;-1:-1:-1;2176:120:1:o;2301:258::-;;;2427:2;2415:9;2406:7;2402:23;2398:32;2395:2;;;2448:6;2440;2433:22;2395:2;2489:9;2476:23;2466:33;;2518:35;2549:2;2538:9;2534:18;2518:35;:::i;:::-;2508:45;;2385:174;;;;;:::o;2564:316::-;;;;2721:2;2709:9;2700:7;2696:23;2692:32;2689:2;;;2742:6;2734;2727:22;2689:2;2776:9;2770:16;2760:26;;2826:2;2815:9;2811:18;2805:25;2795:35;;2870:2;2859:9;2855:18;2849:25;2839:35;;2679:201;;;;;:::o;4125:603::-;;4266:2;4295;4284:9;4277:21;4327:6;4321:13;4370:6;4365:2;4354:9;4350:18;4343:34;4395:4;4408:140;4422:6;4419:1;4416:13;4408:140;;;4517:14;;;4513:23;;4507:30;4483:17;;;4502:2;4479:26;4472:66;4437:10;;4408:140;;;4566:6;4563:1;4560:13;4557:2;;;4636:4;4631:2;4622:6;4611:9;4607:22;4603:31;4596:45;4557:2;-1:-1:-1;4712:2:1;4691:15;-1:-1:-1;;4687:29:1;4672:45;;;;4719:2;4668:54;;4246:482;-1:-1:-1;;;4246:482:1:o;6714:351::-;6916:2;6898:21;;;6955:2;6935:18;;;6928:30;6994:29;6989:2;6974:18;;6967:57;7056:2;7041:18;;6888:177::o;8241:356::-;8443:2;8425:21;;;8462:18;;;8455:30;8521:34;8516:2;8501:18;;8494:62;8588:2;8573:18;;8415:182::o;10418:983::-;;10728:3;10717:9;10713:19;10759:6;10748:9;10741:25;10785:2;10823:6;10818:2;10807:9;10803:18;10796:34;10866:3;10861:2;10850:9;10846:18;10839:31;10890:6;10925;10919:13;10956:6;10948;10941:22;10994:3;10983:9;10979:19;10972:26;;11033:2;11025:6;11021:15;11007:29;;11054:4;11067:195;11081:6;11078:1;11075:13;11067:195;;;11146:13;;-1:-1:-1;;;;;11142:39:1;11130:52;;11237:15;;;;11202:12;;;;11178:1;11096:9;11067:195;;;-1:-1:-1;;;;;;;11318:32:1;;;;11313:2;11298:18;;11291:60;-1:-1:-1;;;11382:3:1;11367:19;11360:35;11279:3;10689:712;-1:-1:-1;;;10689:712:1:o;11919:128::-;;11990:1;11986:6;11983:1;11980:13;11977:2;;;11996:18;;:::i;:::-;-1:-1:-1;12032:9:1;;11967:80::o;12052:217::-;;12118:1;12108:2;;-1:-1:-1;;;12143:31:1;;12197:4;12194:1;12187:15;12225:4;12150:1;12215:15;12108:2;-1:-1:-1;12254:9:1;;12098:171::o;12274:168::-;;12380:1;12376;12372:6;12368:14;12365:1;12362:21;12357:1;12350:9;12343:17;12339:45;12336:2;;;12387:18;;:::i;:::-;-1:-1:-1;12427:9:1;;12326:116::o;12447:125::-;;12515:1;12512;12509:8;12506:2;;;12520:18;;:::i;:::-;-1:-1:-1;12557:9:1;;12496:76::o;12577:380::-;12656:1;12652:12;;;;12699;;;12720:2;;12774:4;12766:6;12762:17;12752:27;;12720:2;12827;12819:6;12816:14;12796:18;12793:38;12790:2;;;12873:10;12868:3;12864:20;12861:1;12854:31;12908:4;12905:1;12898:15;12936:4;12933:1;12926:15;12790:2;;12632:325;;;:::o;12962:135::-;;-1:-1:-1;;13022:17:1;;13019:2;;;13042:18;;:::i;:::-;-1:-1:-1;13089:1:1;13078:13;;13009:88::o;13102:127::-;13163:10;13158:3;13154:20;13151:1;13144:31;13194:4;13191:1;13184:15;13218:4;13215:1;13208:15;13234:131;-1:-1:-1;;;;;13309:31:1;;13299:42;;13289:2;;13355:1;13352;13345:12;13289:2;13279:86;:::o

Swarm Source

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