Contract 0xB47D8D9CD415DAE40E364b140ae6aF186e2332f4 1

 

Contract Overview

Balance:
0.54526952265556141 BNB

BNB Value:
$228.12 (@ $418.37/BNB)
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xae30d96fc9100f5563fd9cb3d8ecb47169530e32b8798c6174be2b8828451684Approve109599742021-09-16 8:53:263 days 8 hrs ago0xa6379e88879fe649016dac2e35504c1b83481056 IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000222485
0xa45d1d91ef91dcfb0186f368bafbf16e4b8f849d07d96494ef0929ac45a1175dApprove109400442021-09-15 16:16:474 days 1 hr ago0x0f4248b58a715895861c75f88792882743131cc2 IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000222485
0xfb2ba9fcfb3878ef14e6dd8dafb18169ce4e9ec92453596a6adfda0b1bfb6397Approve108902342021-09-13 22:36:235 days 18 hrs ago0xfeb42e570c35d5d574cf80d58192cb575293cb0a IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000126485
0x596d5e762805b90fb03afdd41328074749a9dfe09394c2b990658426943bd429Approve108902132021-09-13 22:35:205 days 18 hrs ago0xfeb42e570c35d5d574cf80d58192cb575293cb0a IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000222485
0xaff4bd063733208b0dbbe394aab6e9987c7e9199c9fff6cb900e598d6b6d607fTransfer108870572021-09-13 19:57:315 days 21 hrs ago0x66bec06e3c7208c2fa3b870299481689f448208d IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000445905
0xd5f32b7a373fe099ed28d66e5914efa44da71bce77ce4cf56ab63ae9cdbbbc2dTransfer108870402021-09-13 19:56:405 days 21 hrs ago0x66bec06e3c7208c2fa3b870299481689f448208d IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000445905
0x6cb889dcb4696e743bb10fa171fb8af71add5242f65575d74f10eb4c573c3163Approve108869142021-09-13 19:50:225 days 21 hrs ago0x84caf24620bcb4b122dec71dd2650c27837c6fc5 IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000222485
0x6b0f2056a3e11145de00e520debe98cf5cb86f1bb2bc20c3d3162ce9f8a4f64bApprove108354802021-09-12 0:54:307 days 16 hrs ago0xcb9f176f3c90837a727e4678e29515cb2d557f18 IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000101899
0x822c5e5b2a838c8612129af6d5687828667c1ada28fa69497e1c942481e8f625Approve108204762021-09-11 12:17:098 days 4 hrs ago0x294c86fc8e8945e03d9e9f770c69aeb32f47872c IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000222485
0xbb11211619cc67c3528948d7ebdcf72f85b05e432126e43441062e80fcaf63c9Approve108080882021-09-11 1:52:108 days 15 hrs ago0xa83cdd7be517e15aa96eb0cca7c3317262a00cdb IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000222485
0xf1d2bd006d339b2a39de8aa6845c1c93d549f594f65d191a0a15bbcd6acee0caApprove107939192021-09-10 13:50:479 days 3 hrs ago0x9748cd62f497cf4febe9627d916f9d4b602979e7 IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000222485
0x56410d136650dfbad47cd8c28f08e9fbfdda4f47566774c108664f2538b273b5Approve107783232021-09-10 0:44:019 days 16 hrs ago0xcb0165f5fa6c7557113d08f8d8cf7471c8d6cf9d IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000222485
0xd30a5f04069fa0170c47a39bd0657180bd4fb856c2238b6b6a2688e28090f968Approve107488662021-09-08 23:55:4710 days 17 hrs ago0xf4b204ac210316a98397b518b81cc508158aa874 IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000222485
0x57284c83ca3664452b7579ee0169ee4e916e8b80ea5fd1a13c19e32560f329c2Approve107390992021-09-08 15:42:4511 days 1 hr ago0x7448db1e46e33f41568886fa9a44fe01d39de4c7 IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000222485
0x5d070cf0294b54e18aaffe4b06b9e78ebd2d6b3e3e7d52d9ba11fa567b7de0bfApprove107363682021-09-08 13:24:3411 days 3 hrs ago0x0dbe3cf3b6406f583dcdaac2dab8993bc781a5fe IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000266982
0x30ea9f4a996d5d6c44972660117d0756bc361750d8c171db4e4a653dbdb9dabeApprove107128832021-09-07 17:34:2311 days 23 hrs ago0x5d1e001a7a235fc7711999699f694057306fa91b IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000101899
0xb399fb9f2e81e02d860896d6622960d2a1df33c4666086e4722034571da7b84fTransfer107003812021-09-07 6:52:3012 days 10 hrs ago0x906ebce5f5599130115a80af933a38f6409cd485 IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000650005
0x1cb9356f6494937372950b82b8402aa8f7612938dfa7c3533bca1eed91b3b181Approve106737932021-09-06 8:27:4713 days 8 hrs ago0xa06a39db516671bd143bf99f2b0f993d9200fe03 IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000222485
0xd333aaccb76fec331263d7518a00affd7f7f51e74bb95905fe0a10a3b6fc3e5bApprove106725112021-09-06 7:23:4113 days 9 hrs ago0x8eb025f59b898974dcfa2e2820374c860a7d7afe IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000222485
0x58d4959951b67fd0de1b5f3cc5cb91e98eaad468f51c1951a9f214a43674cdd9Approve106597912021-09-05 20:46:5213 days 20 hrs ago0x91700c7d59b2bc76e7277bc44ec07c4b03ca0750 IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000266982
0x07ac65cf246351668086030da666803187aabbfe317294a7de2756c2aa88c185Approve106500392021-09-05 12:38:2814 days 4 hrs ago0x953baa21ea2bba086dc7caf088399a7316286f6c IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000222485
0x260905e91381e0d221dbcbf07ec3154230a22b018c4271ebbd6d63f6546fdd99Approve106497332021-09-05 12:23:1014 days 4 hrs ago0x60522789b6b3641c26788ca3a99e51cb80118234 IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000222485
0xa7b100d745a247fe3ad49228fbe8e4d13517bf93b8c12b6b83aae04c21e45b91Approve106264902021-09-04 16:53:1515 days 23 mins ago0x8fae9ecfd88d65d78c239c522d9b57eecdc437b1 IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000222485
0x494f9a58880ae9e2ad38d2256316bad2586c6dbaaf4ab18db9efaf0f34a6743dTransfer105546372021-09-02 4:28:1817 days 12 hrs ago0x16bb229e4a4e60dbfb5277dc198f498205a9f2f1 IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000650125
0xfba4c2636e503f134150415f296ec798e4da44f433e8cbed13129fe410c03d8aApprove105397762021-09-01 15:58:0718 days 1 hr ago0x9a73e0d124e66051fe6a2ad5606d4a893720350c IN  0xb47d8d9cd415dae40e364b140ae6af186e2332f40 BNB0.000222485
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xbb15d815fdca240afcc290bd6a302e60f63e70ea05eb32fbacbe382b0987bc2679262172021-06-01 20:13:29109 days 21 hrs ago 0xb47d8d9cd415dae40e364b140ae6af186e2332f4 PancakeSwap: Router v20.00004126249454869 BNB
0xbb15d815fdca240afcc290bd6a302e60f63e70ea05eb32fbacbe382b0987bc2679262172021-06-01 20:13:29109 days 21 hrs ago PancakeSwap: Router v2 0xb47d8d9cd415dae40e364b140ae6af186e2332f40.00004126249454869 BNB
0x6f42d1f99351587a5188fb73b1cbf91bad250c068e9ed6118a836bdfd2addceb79258912021-06-01 19:57:11109 days 21 hrs ago 0xb47d8d9cd415dae40e364b140ae6af186e2332f4 PancakeSwap: Router v20.000319041157221116 BNB
0x6f42d1f99351587a5188fb73b1cbf91bad250c068e9ed6118a836bdfd2addceb79258912021-06-01 19:57:11109 days 21 hrs ago PancakeSwap: Router v2 0xb47d8d9cd415dae40e364b140ae6af186e2332f40.000319041157221116 BNB
0x1a4b22c76c276f783d22df1c5600e14e713788a6b87965540c6e7697c091396b79241062021-06-01 18:27:53109 days 22 hrs ago 0xb47d8d9cd415dae40e364b140ae6af186e2332f4 PancakeSwap: Router v20.00017940851736717 BNB
0x1a4b22c76c276f783d22df1c5600e14e713788a6b87965540c6e7697c091396b79241062021-06-01 18:27:53109 days 22 hrs ago PancakeSwap: Router v2 0xb47d8d9cd415dae40e364b140ae6af186e2332f40.00017940851736717 BNB
0xea564497489a0a0cf258929f96fcde1a870f66db204d069a0c7b58841c77368479235732021-06-01 18:01:14109 days 23 hrs ago 0xb47d8d9cd415dae40e364b140ae6af186e2332f4 PancakeSwap: Router v20.000977237547511393 BNB
0xea564497489a0a0cf258929f96fcde1a870f66db204d069a0c7b58841c77368479235732021-06-01 18:01:14109 days 23 hrs ago PancakeSwap: Router v2 0xb47d8d9cd415dae40e364b140ae6af186e2332f40.000977237547511393 BNB
0x0138d5a7b62c7fe500cf6c9e72caae5ee6406ebf714d696df96efae7d91c6d7879231312021-06-01 17:39:08109 days 23 hrs ago 0xb47d8d9cd415dae40e364b140ae6af186e2332f4 PancakeSwap: Router v20.000843584125460703 BNB
0x0138d5a7b62c7fe500cf6c9e72caae5ee6406ebf714d696df96efae7d91c6d7879231312021-06-01 17:39:08109 days 23 hrs ago PancakeSwap: Router v2 0xb47d8d9cd415dae40e364b140ae6af186e2332f40.000843584125460703 BNB
0x6896fb13fb988da54dba2d957a31fe06f782b448e867120644a7a36e2575c50e79205662021-06-01 15:30:53110 days 1 hr ago 0xb47d8d9cd415dae40e364b140ae6af186e2332f4 PancakeSwap: Router v20.000123452961966477 BNB
0x6896fb13fb988da54dba2d957a31fe06f782b448e867120644a7a36e2575c50e79205662021-06-01 15:30:53110 days 1 hr ago PancakeSwap: Router v2 0xb47d8d9cd415dae40e364b140ae6af186e2332f40.000123452961966477 BNB
0x2c577877390ab3e00399137acaed70206a1d903e83c7f7d0edfb00cf0925597979201262021-06-01 15:08:53110 days 2 hrs ago 0xb47d8d9cd415dae40e364b140ae6af186e2332f4 PancakeSwap: Router v20.003263257610743988 BNB
0x2c577877390ab3e00399137acaed70206a1d903e83c7f7d0edfb00cf0925597979201262021-06-01 15:08:53110 days 2 hrs ago PancakeSwap: Router v2 0xb47d8d9cd415dae40e364b140ae6af186e2332f40.003263257610743988 BNB
0xbbeec75d634c692f789f63e15ec87af0ec9f6b153a58c11e548f92e4df20e18a79187672021-06-01 14:00:34110 days 3 hrs ago 0xb47d8d9cd415dae40e364b140ae6af186e2332f4 PancakeSwap: Router v20.000511455484645202 BNB
0xbbeec75d634c692f789f63e15ec87af0ec9f6b153a58c11e548f92e4df20e18a79187672021-06-01 14:00:34110 days 3 hrs ago PancakeSwap: Router v2 0xb47d8d9cd415dae40e364b140ae6af186e2332f40.000511455484645202 BNB
0xe87ed22588f533b85ca4f3ebcb227b430b78cfb63cb51740df91c9dfb4024f8b79186982021-06-01 13:57:07110 days 3 hrs ago 0xb47d8d9cd415dae40e364b140ae6af186e2332f4 PancakeSwap: Router v20.019319696011615549 BNB
0xe87ed22588f533b85ca4f3ebcb227b430b78cfb63cb51740df91c9dfb4024f8b79186982021-06-01 13:57:07110 days 3 hrs ago PancakeSwap: Router v2 0xb47d8d9cd415dae40e364b140ae6af186e2332f40.019319696011615549 BNB
0x52e5cb5de2325245c3b4693263c3dd880b5f949e8b31dba0a40128d7cc5c4bee79178752021-06-01 13:15:58110 days 4 hrs ago 0xb47d8d9cd415dae40e364b140ae6af186e2332f4 PancakeSwap: Router v20.000051843916951278 BNB
0x52e5cb5de2325245c3b4693263c3dd880b5f949e8b31dba0a40128d7cc5c4bee79178752021-06-01 13:15:58110 days 4 hrs ago PancakeSwap: Router v2 0xb47d8d9cd415dae40e364b140ae6af186e2332f40.000051843916951278 BNB
0xef5f701ae8c62178ab54b20b0c949ec69dd85aec6352a66cf7ee4499ec4656b779132762021-06-01 9:25:21110 days 7 hrs ago 0xb47d8d9cd415dae40e364b140ae6af186e2332f4 PancakeSwap: Router v20.004755366486635612 BNB
0xef5f701ae8c62178ab54b20b0c949ec69dd85aec6352a66cf7ee4499ec4656b779132762021-06-01 9:25:21110 days 7 hrs ago PancakeSwap: Router v2 0xb47d8d9cd415dae40e364b140ae6af186e2332f40.004755366486635612 BNB
0x2eaae013acf011b19e090a52e659a1304ee36f7eef0fb8f16c6ac407ae5d83b779130352021-06-01 9:13:17110 days 8 hrs ago 0xb47d8d9cd415dae40e364b140ae6af186e2332f4 PancakeSwap: Router v20.000170810475798604 BNB
0x2eaae013acf011b19e090a52e659a1304ee36f7eef0fb8f16c6ac407ae5d83b779130352021-06-01 9:13:17110 days 8 hrs ago PancakeSwap: Router v2 0xb47d8d9cd415dae40e364b140ae6af186e2332f40.000170810475798604 BNB
0x554b8876296bc0996b2e50d4588b04f92a11f50251ac31b71711cd4e93c37b5c79129712021-06-01 9:10:05110 days 8 hrs ago 0xb47d8d9cd415dae40e364b140ae6af186e2332f4 PancakeSwap: Router v20.00012027032547833 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SWIFTMOON

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

pragma solidity ^0.6.2;

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

pragma solidity ^0.6.0;

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

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

pragma solidity ^0.6.0;

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

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

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

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

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

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

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

pragma solidity 0.6.12;

contract Rebasable is Ownable {
  address private _rebaser;

  event TransferredRebasership(address indexed previousRebaser, address indexed newRebaser);

  constructor() internal {
    address msgSender = _msgSender();
    _rebaser = msgSender;
    emit TransferredRebasership(address(0), msgSender);
  }

  function Rebaser() public view returns(address) {
    return _rebaser;
  }

  modifier onlyRebaser() {
    require(_rebaser == _msgSender(), "caller is not rebaser");
    _;
  }

  function transferRebasership(address newRebaser) public virtual onlyOwner {
    require(newRebaser != address(0), "new rebaser is address zero");
    emit TransferredRebasership(_rebaser, newRebaser);
    _rebaser = newRebaser;
  }
}
/* 
   SPDX-License-Identifier: MIT
   Copyright 2021
*/

/// SWC-103:  Floating Pragma

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Pair {
    function sync() external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
      address token,
      uint liquidity,
      uint amountTokenMin,
      uint amountETHMin,
      address to,
      uint deadline
    ) external returns (uint amountETH);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    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;
}

pragma solidity 0.6.12;

contract SWIFTMOON is Ownable, Rebasable
{
    using SMOONSafeMath for uint256;
	using Address for address;
	
	IUniswapV2Router02 public immutable _uniswapV2Router;

    event Transfer(address indexed from, address indexed to, uint amount);
    event Approval(address indexed owner, address indexed spender, uint amount);

    event Rebase(uint256 indexed epoch, uint256 scalingFactor);

    event WhitelistFrom(address _addr, bool _whitelisted);
    event WhitelistTo(address _addr, bool _whitelisted);
    event UniswapPairAddress(address _addr, bool _whitelisted);

    string public name     = "SWIFTMOON";
    string public symbol   = "SMOON";
    uint8  public decimals = 18;

    address public BurnAddress = 0x000000000000000000000000000000000000dEaD;
	
    address public rewardAddress;

    /**
     * @notice Internal decimals used to handle scaling factor
     */
    uint256 public constant internalDecimals = 10**18;

    /**
     * @notice Used for percentage maths
     */
    uint256 public constant BASE = 10**18;

    /**
     * @notice Scaling factor that adjusts everyone's balances
     */
    uint256 public SMOONScalingFactor  = BASE;

	mapping (address => uint256) private _rOwned;
	mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) internal _allowedFragments;
	
	mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    mapping(address => bool) public whitelistFrom;
    mapping(address => bool) public whitelistTo;
    mapping(address => bool) public uniswapPairAddress;
	address private currentPoolAddress;
	address private currentPairTokenAddress;
	address public uniswapETHPool;
	address[] public futurePools;


    uint256 initSupply = 10**8 * 10**18;
    uint256 _totalSupply = 10**8 * 10**18;
    uint16 public SELL_FEE = 5;
    uint16 public TX_FEE = 0;
    uint16 public BURN_TOP = 1;
	uint16 public BURN_BOTTOM = 3;
	uint256 private _tFeeTotal;
	uint256 private constant MAX = ~uint256(0);
    uint256 private _rTotal = (MAX - (MAX % _totalSupply));
	uint16 public FYFee = 50;
	uint256 public _maxTxAmount = 10**8 * 10**18;
	uint256 public _minTokensBeforeSwap = 100 * 10**18;
	uint256 public _autoSwapCallerFee = 2 * 10**18;
	uint256 public liquidityRewardRate = 2;
	
	bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled;
    bool public tradingEnabled;
	
	event MaxTxAmountUpdated(uint256 maxTxAmount);
	event TradingEnabled();
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        address indexed pairTokenAddress,
        uint256 tokensSwapped,
        uint256 pairTokenReceived,
        uint256 tokensIntoLiqudity
    );
	event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event AutoSwapCallerFeeUpdated(uint256 autoSwapCallerFee);
	
	modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor(IUniswapV2Router02 uniswapV2Router)
    public
    Ownable()
    Rebasable()
    {
		_uniswapV2Router = uniswapV2Router;
        
        currentPoolAddress = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());
        currentPairTokenAddress = uniswapV2Router.WETH();
        uniswapETHPool = currentPoolAddress;
		rewardAddress = address(this);
        
        updateSwapAndLiquifyEnabled(false);
        
        _rOwned[_msgSender()] = reflectionFromToken(_totalSupply, false);
        
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

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

    function getSellBurn(uint256 value) public view returns (uint256)
    {
        uint256 nPercent = value.mul(SELL_FEE).divRound(100);
        return nPercent;
    }

    function getTxBurn(uint256 value) public view returns (uint256)
    {
        uint256 nPercent = value.mul(TX_FEE).divRound(100);
        return nPercent;
    }

    function _isWhitelisted(address _from, address _to) internal view returns (bool)
    {
        return whitelistFrom[_from]||whitelistTo[_to];
    }

    function _isUniswapPairAddress(address _addr) internal view returns (bool)
    {
        return uniswapPairAddress[_addr];
    }

    function setWhitelistedTo(address _addr, bool _whitelisted) external onlyOwner
    {
        emit WhitelistTo(_addr, _whitelisted);
        whitelistTo[_addr] = _whitelisted;
    }

    function setTxFee(uint16 fee) external onlyOwner
    {
		require(fee < 90, 'SMOON: Transaction fee should be less than 90%');
        TX_FEE = fee;
    }
	
	function setFYFee(uint16 fee) external onlyOwner
    {
		require(fee > 2, 'SMOON: Frictionless yield fee should be less than 50%');
        FYFee = fee;
    }

    function setSellFee(uint16 fee) external onlyOwner
    {
		require(fee < 90, 'SMOON: Sell fee should be less than 90%');
        SELL_FEE = fee;
    }
	
    function setBurnTop(uint16 burntop) external onlyOwner
    {
        BURN_TOP = burntop;
    }
	
	function setBurnBottom(uint16 burnbottom) external onlyOwner
    {
        BURN_BOTTOM = burnbottom;
    }
	
    function setWhitelistedFrom(address _addr, bool _whitelisted) external onlyOwner
    {
        emit WhitelistFrom(_addr, _whitelisted);
        whitelistFrom[_addr] = _whitelisted;
    }

    function setUniswapPairAddress(address _addr, bool _whitelisted) external onlyOwner 
	{
        emit UniswapPairAddress(_addr, _whitelisted);
        uniswapPairAddress[_addr] = _whitelisted;
    }
	
	function addfuturePool(address futurePool) external onlyOwner
	{
		IUniswapV2Pair(futurePool).sync();
		futurePools.push(futurePool);
	}

    function maxScalingFactor() external view returns (uint256)
    {
        return _maxScalingFactor();
    }

    function _maxScalingFactor() internal view returns (uint256)
    {
        // scaling factor can only go up to 2**256-1 = initSupply * SMOONScalingFactor
        // this is used to check if SMOONScalingFactor will be too high to compute balances when rebasing.
        return uint256(-1) / initSupply;
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
		_transfer(sender, recipient, amount);
		// decrease allowance
        _approve(sender, _msgSender(), _allowedFragments[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

	function balanceOf(address account) public view returns (uint256) {
	  
        if (_isExcluded[account]) return _tOwned[account].mul(SMOONScalingFactor).div(internalDecimals);
        uint256 tOwned = tokenFromReflection(_rOwned[account]);
		return _scaling(tOwned);
	}

    function balanceOfUnderlying(address account) external view returns (uint256)
    {
        return tokenFromReflection(_rOwned[account]);
    }

    
    function allowance(address owner_, address spender) external view returns (uint256)
    {
        return _allowedFragments[owner_][spender];
    }

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

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool)
    {
        _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][spender].add(addedValue);
        emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool)
    {
        uint256 oldValue = _allowedFragments[msg.sender][spender];
        if (subtractedValue >= oldValue)
        {
            _allowedFragments[msg.sender][spender] = 0;
        }
        else
        {
            _allowedFragments[msg.sender][spender] = oldValue.sub(subtractedValue);
        }

        emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]);
        return true;
    }
	
	function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "SMOON: approve from the zero address");
        require(spender != address(0), "SMOON: approve to the zero address");

        _allowedFragments[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
	
	function isExcluded(address account) public view returns (bool) 
	{
        return _isExcluded[account];
    }
	
	function totalFees() public view returns (uint256) 
	{
        return _tFeeTotal;
    }
	
	function reflect(uint256 tAmount) public 
	{
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        uint256 currentRate = _getRate();
        uint256 TAmount = tAmount.mul(internalDecimals).div(SMOONScalingFactor);
		uint256 rAmount = TAmount.mul(currentRate);
        _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 <= _totalSupply, "Amount must be less than supply");
        uint256 currentRate = _getRate();
        uint256 TAmount = tAmount.mul(internalDecimals).div(SMOONScalingFactor);
        uint256 fee = getTxBurn(TAmount);
		uint256 rAmount = TAmount.mul(currentRate);
        if (!deductTransferFee) {
            return rAmount;
        } else {
            (uint256 rTransferAmount,,,) = _getRValues(TAmount, fee, currentRate);
            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) {
            _rOwned[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];
                _rOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
	
	function _transfer(address sender, address recipient, uint256 amount) private 
	{
        
		require(sender != address(0), "SMOON: cannot transfer from the zero address");
        require(recipient != address(0), "SMOON: cannot transfer to the zero address");
        require(amount > 0, "SMOON: Transfer amount must be greater than zero");
		
		if(sender != owner() && recipient != owner() && !inSwapAndLiquify) {
            require(amount <= _maxTxAmount, "SMOON: Transfer amount exceeds the maxTxAmount.");
            if((_msgSender() == currentPoolAddress || _msgSender() == address(_uniswapV2Router)) && !tradingEnabled)
                require(false, "SMOON: trading is disabled.");
        }
        
        if(!inSwapAndLiquify) {
            uint256 lockedBalanceForPool = balanceOf(address(this));
            bool overMinTokenBalance = lockedBalanceForPool >= _minTokensBeforeSwap;
			currentPairTokenAddress == _uniswapV2Router.WETH();
            if (
                overMinTokenBalance &&
                msg.sender != currentPoolAddress &&
                swapAndLiquifyEnabled
            ) {
                swapAndLiquifyForEth(lockedBalanceForPool);
            }
        }
		
        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);
        }
    }
	
	receive() external payable {}
    
    function swapAndLiquifyForEth(uint256 lockedBalanceForPool) private lockTheSwap {
        // split the contract balance except swapCallerFee into halves
        uint256 lockedForSwap = lockedBalanceForPool.sub(_autoSwapCallerFee);
		uint256 forLiquidity = lockedForSwap.divRound(liquidityRewardRate);
		uint256 forLiquidityReward = lockedForSwap.sub(forLiquidity);
        uint256 half = forLiquidity.div(2);
        uint256 otherHalf = forLiquidity.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);
        
        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidityForEth(otherHalf, newBalance);
        
        emit SwapAndLiquify(_uniswapV2Router.WETH(), half, newBalance, otherHalf);
        
		_transfer(address(this), uniswapETHPool, forLiquidityReward);
        _transfer(address(this), tx.origin, _autoSwapCallerFee);
    }
    
    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.WETH();

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

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

    function addLiquidityForEth(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
            address(this),
            block.timestamp
        );
    }

	
	function _transferStandard(address sender, address recipient, uint256 tAmount) private 
	{
	    uint256 currentRate =  _getRate();
		uint256 TAmount = tAmount.mul(internalDecimals).div(SMOONScalingFactor);
		uint256 rAmount = TAmount.mul(currentRate);
		_rOwned[sender] = _rOwned[sender].sub(rAmount);
		
		if(inSwapAndLiquify) {
            _rOwned[recipient] = _rOwned[recipient].add(rAmount);
            emit Transfer(sender, recipient, tAmount);
		}
		
	    else if (_isUniswapPairAddress(recipient))
        {
		 uint256 fee = getSellBurn(TAmount);
		(uint256 rTransferAmount, uint256 rBurnFee, uint256 rFYFee, uint256 rRewardFee) = _getRValues(rAmount, fee, currentRate);
		(uint256 tTransferAmount, uint256 tFYFee, uint256 tBurnFee, uint256 tRewardFee) = _getTValues(TAmount, fee);
		_totalSupply = _totalSupply.sub(_scaling(tBurnFee));
		_reflectFee(rFYFee, tFYFee);
		_transferStandardSell(sender, recipient, tBurnFee, rTransferAmount, rBurnFee, rRewardFee, tTransferAmount, tRewardFee);
        }
        else
        {
            if(!_isWhitelisted(sender, recipient))
            {
	     uint256 fee = getTxBurn(TAmount);
		(uint256 rTransferAmount, uint256 rBurnFee, uint256 rFYFee, uint256 rRewardFee) = _getRValues(rAmount, fee, currentRate);
		(uint256 tTransferAmount, uint256 tFYFee, uint256 tBurnFee, uint256 tRewardFee) = _getTValues(TAmount, fee);
		_totalSupply = _totalSupply.sub(_scaling(tBurnFee));
		_reflectFee(rFYFee, tFYFee);
		_transferStandardTx(sender, recipient, tBurnFee, rTransferAmount, rBurnFee, rRewardFee, tTransferAmount, tRewardFee);
            }
            else
            {           
                _rOwned[recipient] = _rOwned[recipient].add(rAmount);
                emit Transfer(sender, recipient, tAmount);
             }
        }
    }
    
    function _transferStandardSell(address sender, address recipient, uint256 tBurnFee, uint256 rTransferAmount, uint256 rBurnFee, uint256 rRewardFee, uint256 tTransferAmount, uint256 tRewardFee) private 
	{
            _rOwned[BurnAddress] = _rOwned[BurnAddress].add(rBurnFee);        
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _rOwned[rewardAddress] = _rOwned[rewardAddress].add(rRewardFee);
		
            emit Transfer(sender, recipient, _scaling(tTransferAmount));
            emit Transfer(sender, BurnAddress, _scaling(tBurnFee));
            emit Transfer(sender, rewardAddress, _scaling(tRewardFee));
        
    }
    
    function _transferStandardTx(address sender, address recipient, uint256 tBurnFee, uint256 rTransferAmount, uint256 rBurnFee, uint256 rRewardFee, uint256 tTransferAmount, uint256 tRewardFee) private 
	{        
                _rOwned[BurnAddress] = _rOwned[BurnAddress].add(rBurnFee);                
                _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
                _rOwned[rewardAddress] = _rOwned[rewardAddress].add(rRewardFee);
			
                emit Transfer(sender, recipient, _scaling(tTransferAmount));
                emit Transfer(sender, BurnAddress, _scaling(tBurnFee));
                emit Transfer(sender, rewardAddress, _scaling(tRewardFee));
        
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private 
	{
		uint256 currentRate =  _getRate();
		uint256 TAmount = tAmount.mul(internalDecimals).div(SMOONScalingFactor);
		uint256 rAmount = TAmount.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);

		if(inSwapAndLiquify) {
            _rOwned[recipient] = _rOwned[recipient].add(rAmount);
            emit Transfer(sender, recipient, tAmount);
		}
		
		else if(_isUniswapPairAddress(recipient))
        {
		 uint256 fee = getSellBurn(TAmount);
		(, uint256 rBurnFee, uint256 rFYFee, uint256 rRewardFee) = _getRValues(rAmount, fee, currentRate);
		(uint256 tTransferAmount, uint256 tFYFee, uint256 tBurnFee, uint256 tRewardFee) = _getTValues(TAmount, fee);
		_totalSupply = _totalSupply.sub(_scaling(tBurnFee));
		_reflectFee(rFYFee, tFYFee);
		_transferToExcludedSell(sender, recipient, tBurnFee, rBurnFee, rRewardFee, tTransferAmount, tRewardFee);
        }
        else
        {
            if(!_isWhitelisted(sender, recipient))
            {
	     uint256 fee = getTxBurn(TAmount);
		(, uint256 rBurnFee, uint256 rFYFee, uint256 rRewardFee) = _getRValues(rAmount, fee, currentRate);
		(uint256 tTransferAmount, uint256 tFYFee, uint256 tBurnFee, uint256 tRewardFee) = _getTValues(TAmount, fee);
		_totalSupply = _totalSupply.sub(_scaling(tBurnFee));
		_reflectFee(rFYFee, tFYFee);
        _transferToExcludedSell(sender, recipient, tBurnFee, rBurnFee, rRewardFee, tTransferAmount, tRewardFee);
            }
            else
            {
                _tOwned[recipient] = _tOwned[recipient].add(TAmount);
                emit Transfer(sender, recipient, tAmount);
             }
        }
    }
    
    function _transferToExcludedSell (address sender, address recipient, uint256 tBurnFee, uint256 tTransferAmount, uint256 rBurnFee, uint256 rRewardFee, uint256 tRewardFee) private 
	{
            _rOwned[BurnAddress] = _rOwned[BurnAddress].add(rBurnFee);
            _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
            _rOwned[rewardAddress] = _rOwned[rewardAddress].add(rRewardFee);
            emit Transfer(sender, recipient, _scaling(tTransferAmount));
            emit Transfer(sender, BurnAddress, _scaling(tBurnFee));
            emit Transfer(sender, rewardAddress, _scaling(tRewardFee));
        
    }
    
    function _transferToExcludedTx (address sender, address recipient, uint256 tBurnFee, uint256 tTransferAmount, uint256 rBurnFee, uint256 rRewardFee, uint256 tRewardFee) private 
	{        
                _rOwned[BurnAddress] = _rOwned[BurnAddress].add(rBurnFee);
                _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
                _rOwned[rewardAddress] = _rOwned[rewardAddress].add(rRewardFee);
                emit Transfer(sender, recipient, _scaling(tTransferAmount));
                emit Transfer(sender, BurnAddress, _scaling(tBurnFee));
                emit Transfer(sender, rewardAddress, _scaling(tRewardFee));
    }
         
    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private 
	{
		uint256 currentRate =  _getRate();
		uint256 TAmount = tAmount.mul(internalDecimals).div(SMOONScalingFactor);
		uint256 rAmount = TAmount.mul(currentRate);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
		_rOwned[sender] = _rOwned[sender].sub(rAmount);
		
		if(inSwapAndLiquify) {
            _rOwned[recipient] = _rOwned[recipient].add(rAmount);
            emit Transfer(sender, recipient, tAmount);
		}
		
		else if(_isUniswapPairAddress(recipient))
        {
		 uint256 fee = getSellBurn(TAmount);
		(uint256 rTransferAmount, uint256 rBurnFee, uint256 rFYFee, uint256 rRewardFee) = _getRValues(rAmount, fee, currentRate);
		(uint256 tTransferAmount, uint256 tFYFee, uint256 tBurnFee, uint256 tRewardFee) = _getTValues(TAmount, fee);
		_totalSupply = _totalSupply.sub(_scaling(tBurnFee));
		_reflectFee(rFYFee, tFYFee);
		_transferFromExcludedSell(sender, recipient, tBurnFee, rTransferAmount, rBurnFee, rRewardFee, tTransferAmount, tRewardFee);
        }
        else
        {
            if(!_isWhitelisted(sender, recipient))
            {
	     uint256 fee = getTxBurn(TAmount);
		(uint256 rTransferAmount, uint256 rBurnFee, uint256 rFYFee, uint256 rRewardFee) = _getRValues(rAmount, fee, currentRate);
		(uint256 tTransferAmount, uint256 tFYFee, uint256 tBurnFee, uint256 tRewardFee) = _getTValues(TAmount, fee);
		_totalSupply = _totalSupply.sub(_scaling(tBurnFee));
		_reflectFee(rFYFee, tFYFee);
		_transferFromExcludedTx(sender, recipient, tBurnFee, rTransferAmount, rBurnFee, rRewardFee, tTransferAmount, tRewardFee);
                
            }
            else
            {
                _rOwned[recipient] = _rOwned[recipient].add(rAmount);
                emit Transfer(sender, recipient, tAmount);
             }
        }
    }
    
    function _transferFromExcludedSell(address sender, address recipient, uint256 tBurnFee, uint256 rTransferAmount, uint256 rBurnFee, uint256 rRewardFee, uint256 tTransferAmount, uint256 tRewardFee) private 
	{
            _rOwned[BurnAddress] = _rOwned[BurnAddress].add(rBurnFee);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _rOwned[rewardAddress] = _rOwned[rewardAddress].add(rRewardFee);
            emit Transfer(sender, recipient, _scaling(tTransferAmount));
            emit Transfer(sender, BurnAddress, _scaling(tBurnFee));
            emit Transfer(sender, rewardAddress, _scaling(tRewardFee));
    }
    
    function _transferFromExcludedTx(address sender, address recipient, uint256 tBurnFee, uint256 rTransferAmount, uint256 rBurnFee, uint256 rRewardFee, uint256 tTransferAmount, uint256 tRewardFee) private 
	{
                _rOwned[BurnAddress] = _rOwned[BurnAddress].add(rBurnFee);
                _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
                _rOwned[rewardAddress] = _rOwned[rewardAddress].add(rRewardFee);
                emit Transfer(sender, recipient, _scaling(tTransferAmount));
                emit Transfer(sender, BurnAddress, _scaling(tBurnFee));
                emit Transfer(sender, rewardAddress, _scaling(tRewardFee));
    }
    
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private 
	{
	    uint256 currentRate =  _getRate();
		uint256 TAmount = tAmount.mul(internalDecimals).div(SMOONScalingFactor);
		uint256 rAmount = TAmount.mul(currentRate);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
		_rOwned[sender] = _rOwned[sender].sub(rAmount);
		
		if(inSwapAndLiquify) {
            _rOwned[recipient] = _rOwned[recipient].add(rAmount);
            emit Transfer(sender, recipient, tAmount);
		}
		
        else if(_isUniswapPairAddress(recipient))
        {
		 uint256 fee = getSellBurn(TAmount);
		(uint256 rTransferAmount, uint256 rBurnFee, uint256 rFYFee, uint256 rRewardFee) = _getRValues(rAmount, fee, currentRate);
		(uint256 tTransferAmount, uint256 tFYFee, uint256 tBurnFee, uint256 tRewardFee) = _getTValues(TAmount, fee);
            _totalSupply = _totalSupply.sub(_scaling(tBurnFee));
            _reflectFee(rFYFee, tFYFee);
            _transferBothExcludedSell(sender, recipient, tBurnFee, rTransferAmount, rBurnFee, rRewardFee, tTransferAmount, tRewardFee);
            
        }
        else
        {
            if(!_isWhitelisted(sender, recipient))
            {
	     uint256 fee = getTxBurn(TAmount);
		(uint256 rTransferAmount, uint256 rBurnFee, uint256 rFYFee, uint256 rRewardFee) = _getRValues(rAmount, fee, currentRate);
		(uint256 tTransferAmount, uint256 tFYFee, uint256 tBurnFee, uint256 tRewardFee) = _getTValues(TAmount, fee);
           _totalSupply = _totalSupply.sub(_scaling(tBurnFee));
            _reflectFee(rFYFee, tFYFee);
            _transferBothExcludedTx(sender, recipient, tBurnFee, rTransferAmount, rBurnFee, rRewardFee, tTransferAmount, tRewardFee);
            }
            else
            {
                _rOwned[recipient] = _rOwned[recipient].add(rAmount);
				_tOwned[recipient] = _tOwned[recipient].add(TAmount);
                emit Transfer(sender, recipient, tAmount);
             }
        }
    }
    
    function _transferBothExcludedSell(address sender, address recipient, uint256 tBurnFee, uint256 rTransferAmount, uint256 rBurnFee, uint256 tTransferAmount, uint256 rRewardFee, uint256 tRewardFee) private 
	{   
            _rOwned[BurnAddress] = _rOwned[BurnAddress].add(rBurnFee);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
			_tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
            _rOwned[rewardAddress] = _rOwned[rewardAddress].add(rRewardFee);
			
            emit Transfer(sender, recipient, _scaling(tTransferAmount));
            emit Transfer(sender, BurnAddress, _scaling(tBurnFee));
            emit Transfer(sender, rewardAddress, _scaling(tRewardFee));
        
    }
    
     function _transferBothExcludedTx(address sender, address recipient, uint256 tBurnFee, uint256 rTransferAmount, uint256 rBurnFee, uint256 tTransferAmount, uint256 rRewardFee, uint256 tRewardFee) private 
	 {
                _rOwned[BurnAddress] = _rOwned[BurnAddress].add(rBurnFee);
                _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
				_tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
                _rOwned[rewardAddress] = _rOwned[rewardAddress].add(rRewardFee);
				
                emit Transfer(sender, recipient, _scaling(tTransferAmount));
                emit Transfer(sender, BurnAddress, _scaling(tBurnFee));
                emit Transfer(sender, rewardAddress, _scaling(tRewardFee));
     }
	 
	function _scaling(uint256 amount) private view returns (uint256)
	
	{
		uint256 scaledAmount = amount.mul(SMOONScalingFactor).div(internalDecimals);
		return(scaledAmount);
	}

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

    function _getTValues(uint256 TAmount, uint256 fee) private view returns (uint256, uint256, uint256, uint256) 
	{
        uint256 tFYFee = TAmount.div(FYFee); 
		uint256 tBurnFee = BURN_TOP*fee/BURN_BOTTOM;
		uint256 tRewardFee = fee.sub(tBurnFee);
        uint256 tTransferAmount = TAmount.sub(tFYFee).sub(tBurnFee).sub(tRewardFee);
        return (tTransferAmount, tFYFee, tBurnFee, tRewardFee);
    }
	
    function _getRValues(uint256 rAmount, uint256 fee, uint256 currentRate) private view returns (uint256, uint256, uint256, uint256) 
	{
        uint256 rFYFee = rAmount.div(FYFee);
		uint256 rBurnFee = (BURN_TOP*fee/BURN_BOTTOM).mul(currentRate);
		uint256 rRewardFee = fee.mul(currentRate).sub(rBurnFee);
		uint256 rTransferAmount = _getRValues2(rAmount, rFYFee, rBurnFee, rRewardFee);
        return (rTransferAmount, rBurnFee, rFYFee, rRewardFee);
    }
	
	function _getRValues2(uint256 rAmount, uint256 rFYFee, uint256 rBurnFee, uint256 rRewardFee) private pure returns (uint256) 
	{
        uint256 rTransferAmount = rAmount.sub(rFYFee).sub(rBurnFee).sub(rRewardFee);
        return (rTransferAmount);
    }
	

    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 = initSupply;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, initSupply);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(initSupply)) return (_rTotal, initSupply);
        return (rSupply, tSupply);
    }

    function _setRewardAddress(address rewards_) external onlyOwner
    {
        rewardAddress = rewards_;
    }

    /**
    * @notice Initiates a new rebase operation, provided the minimum time period has elapsed.
    *
    * @dev The supply adjustment equals (totalSupply * DeviationFromTargetRate) / rebaseLag
    *      Where DeviationFromTargetRate is (MarketOracleRate - targetRate) / targetRate
    *      and targetRate is CpiOracleRate / baseCpi
    */
    function rebase(uint256 epoch, uint256 indexDelta, bool positive) external onlyRebaser returns (uint256)
    {
		uint256 currentRate = _getRate();
        if (!positive)
        {
		uint256 newScalingFactor = SMOONScalingFactor.mul(BASE.sub(indexDelta)).div(BASE);
		SMOONScalingFactor = newScalingFactor;
        _totalSupply = ((initSupply.sub(_rOwned[BurnAddress].div(currentRate))
            .mul(SMOONScalingFactor).div(internalDecimals)));
        emit Rebase(epoch, SMOONScalingFactor);
		IUniswapV2Pair(uniswapETHPool).sync();
		for (uint256 i = 0; i < futurePools.length; i++) {
			address futurePoolAddress = futurePools[i];
			IUniswapV2Pair(futurePoolAddress).sync();
		}
        return _totalSupply;
        }
		
        else 
		{
        uint256 newScalingFactor = SMOONScalingFactor.mul(BASE.add(indexDelta)).div(BASE);
        if (newScalingFactor < _maxScalingFactor())
        {
            SMOONScalingFactor = newScalingFactor;
        }
        else
        {
            SMOONScalingFactor = _maxScalingFactor();
        }

        _totalSupply = ((initSupply.sub(_rOwned[BurnAddress].div(currentRate))
            .mul(SMOONScalingFactor).div(internalDecimals)));
        emit Rebase(epoch, SMOONScalingFactor);
		IUniswapV2Pair(uniswapETHPool).sync();
		for (uint256 i = 0; i < futurePools.length; i++) {
			address futurePoolAddress = futurePools[i];
			IUniswapV2Pair(futurePoolAddress).sync();
		}
        return _totalSupply;
		}
	}
	
	function getCurrentPoolAddress() public view returns(address) {
        return currentPoolAddress;
    }
    
    function getCurrentPairTokenAddress() public view returns(address) {
        return currentPairTokenAddress;
    }
	
	function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= 10**8 , 'SMOON: maxTxAmount should be greater than 0.1 SMOON');
        _maxTxAmount = maxTxAmount;
        emit MaxTxAmountUpdated(maxTxAmount);
    }
	
	function _setMinTokensBeforeSwap(uint256 minTokensBeforeSwap) external onlyOwner() {
        require(minTokensBeforeSwap >= 1 * 10**18 && minTokensBeforeSwap <= 2000 * 10**18, 'SMOON: minTokenBeforeSwap should be between 1 and 2000 SMOON');
        require(minTokensBeforeSwap > _autoSwapCallerFee , 'SMOON: minTokenBeforeSwap should be greater than autoSwapCallerFee');
        _minTokensBeforeSwap = minTokensBeforeSwap;
        emit MinTokensBeforeSwapUpdated(minTokensBeforeSwap);
    }
	
	function _setAutoSwapCallerFee(uint256 autoSwapCallerFee) external onlyOwner() {
        require(autoSwapCallerFee >= 10**8, 'SMOON: autoSwapCallerFee should be greater than 0.1 SMOON');
        _autoSwapCallerFee = autoSwapCallerFee;
        emit AutoSwapCallerFeeUpdated(autoSwapCallerFee);
    }
	
	function updateSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
	
	function _enableTrading() external onlyOwner() {
        tradingEnabled = true;
        TradingEnabled();
    }
}

pragma solidity ^0.6.0;

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

    function ceil(uint256 a, uint256 m) internal pure returns (uint256)
    {
        uint256 c = add(a,m);
        uint256 d = sub(c,1);
        return mul(div(d,m),m);
    }

    function divRound(uint256 x, uint256 y) internal pure returns (uint256) {
        require(y != 0, "Div by zero");
        uint256 r = x / y;
        if (x % y != 0) {
            r = r + 1;
        }

        return r;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IUniswapV2Router02","name":"uniswapV2Router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"autoSwapCallerFee","type":"uint256"}],"name":"AutoSwapCallerFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"scalingFactor","type":"uint256"}],"name":"Rebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pairTokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"pairTokenReceived","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":[],"name":"TradingEnabled","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousRebaser","type":"address"},{"indexed":true,"internalType":"address","name":"newRebaser","type":"address"}],"name":"TransferredRebasership","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"UniswapPairAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"WhitelistFrom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"WhitelistTo","type":"event"},{"inputs":[],"name":"BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BURN_BOTTOM","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BURN_TOP","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BurnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FYFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Rebaser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SELL_FEE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SMOONScalingFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TX_FEE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_autoSwapCallerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"autoSwapCallerFee","type":"uint256"}],"name":"_setAutoSwapCallerFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"_setMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rewards_","type":"address"}],"name":"_setRewardAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"futurePool","type":"address"}],"name":"addfuturePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOfUnderlying","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":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"futurePools","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentPairTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentPoolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"getSellBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"getTxBurn","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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"internalDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityRewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxScalingFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"epoch","type":"uint256"},{"internalType":"uint256","name":"indexDelta","type":"uint256"},{"internalType":"bool","name":"positive","type":"bool"}],"name":"rebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","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":[],"name":"rewardAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"burnbottom","type":"uint16"}],"name":"setBurnBottom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"burntop","type":"uint16"}],"name":"setBurnTop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"fee","type":"uint16"}],"name":"setFYFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"fee","type":"uint16"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"fee","type":"uint16"}],"name":"setTxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setUniswapPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelistedFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelistedTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"newRebaser","type":"address"}],"name":"transferRebasership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapETHPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"uniswapPairAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052600960a08190526829aba4a32a26a7a7a760b91b60c09081526200002c916002919062000c35565b506040805180820190915260058082526429a6a7a7a760d91b60209092019182526200005b9160039162000c35565b5060048054601260ff1990911617610100600160a81b03191662dead00179055670de0b6b3a76400006006556a52b7d2dcc80cd2e40000006013819055601481905560158054640100000000600561ffff199092169190911765ffffffff000019161761ffff60301b1916660300000000000017905560001906196017556018805461ffff191660321790556a52b7d2dcc80cd2e400000060195568056bc75e2d63100000601a55671bc16d674ec80000601b556002601c553480156200012157600080fd5b506040516200563e3803806200563e833981810160405260208110156200014757600080fd5b5051600062000155620004dc565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000620001ab620004dc565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907fe8a195812977ad9c31215cd36cddec4a0a2cef58eb984d1169225de6e823ff43908290a350806001600160a01b03166080816001600160a01b031660601b81525050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025057600080fd5b505afa15801562000265573d6000803e3d6000fd5b505050506040513d60208110156200027c57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b158015620002cd57600080fd5b505afa158015620002e2573d6000803e3d6000fd5b505050506040513d6020811015620002f957600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200034c57600080fd5b505af115801562000361573d6000803e3d6000fd5b505050506040513d60208110156200037857600080fd5b5051600f80546001600160a01b0319166001600160a01b03928316179055604080516315ab88c960e31b815290519183169163ad5c464891600480820192602092909190829003018186803b158015620003d157600080fd5b505afa158015620003e6573d6000803e3d6000fd5b505050506040513d6020811015620003fd57600080fd5b5051601080546001600160a01b039283166001600160a01b031991821617909155600f5460118054831691909316179091556005805490911630179055620004466000620004e0565b601454620004569060006200059c565b6007600062000464620004dc565b6001600160a01b0316815260208101919091526040016000205562000488620004dc565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6014546040518082815260200191505060405180910390a35062000cd1565b3390565b620004ea620004dc565b6000546001600160a01b039081169116146200054d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601d8054821515610100810261ff00199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b6000601454831115620005f6576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b600062000602620006ab565b90506000620006436006546200062f670de0b6b3a764000088620006de60201b62002b9b1790919060201c565b6200074360201b62002bf41790919060201c565b9050600062000652826200078d565b90506000620006708484620006de60201b62002b9b1790919060201c565b90508562000684579350620006a592505050565b600062000693848487620007d8565b50919750620006a59650505050505050565b92915050565b60008080620006b9620008b0565b91509150620006d781836200074360201b62002bf41790919060201c565b9250505090565b600082620006ef57506000620006a5565b82820282848281620006fd57fe5b04146200073c5760405162461bcd60e51b81526004018080602001828103825260218152602001806200561d6021913960400191505060405180910390fd5b9392505050565b60006200073c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000a4960201b60201c565b6000806200073c6064620007c4601560029054906101000a900461ffff1661ffff1686620006de60201b62002b9b1790919060201c565b62000af060201b62002c361790919060201c565b60008060008060006200080e601860009054906101000a900461ffff1661ffff16896200074360201b62002bf41790919060201c565b6015549091506000906200085690889061ffff660100000000000082048116916401000000009004168b02816200084157fe5b04620006de60201b62002b9b1790919060201c565b905060006200088d82620008798a8c620006de60201b62002b9b1790919060201c565b62000b5d60201b62002c9f1790919060201c565b905060006200089f8b85858562000ba7565b9b929a509298509650945050505050565b6017546013546000918291825b600b5481101562000a06578260076000600b8481548110620008db57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806200094257508160086000600b84815481106200091b57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156200095b576017546013549450945050505062000a45565b620009aa60076000600b84815481106200097157fe5b60009182526020808320909101546001600160a01b03168352828101939093526040909101902054859162002c9f62000b5d821b17901c565b9250620009fb60086000600b8481548110620009c257fe5b60009182526020808320909101546001600160a01b03168352828101939093526040909101902054849162002c9f62000b5d821b17901c565b9150600101620008bd565b5062000a256013546017546200074360201b62002bf41790919060201c565b82101562000a3f5760175460135493509350505062000a45565b90925090505b9091565b6000818362000ad95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000a9d57818101518382015260200162000a83565b50505050905090810190601f16801562000acb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000ae657fe5b0495945050505050565b60008162000b33576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b600082848162000b3f57fe5b04905082848162000b4c57fe5b06156200073c576001019392505050565b60006200073c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000bd860201b60201c565b60008062000bce83620008798662000879898b62000b5d60201b62002c9f1790919060201c565b9695505050505050565b6000818484111562000c2d5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831562000a9d57818101518382015260200162000a83565b505050900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000c7857805160ff191683800117855562000ca8565b8280016001018555821562000ca8579182015b8281111562000ca857825182559160200191906001019062000c8b565b5062000cb692915062000cba565b5090565b5b8082111562000cb6576000815560010162000cbb565b60805160601c61490662000d176000398061189d5280612fe952806130ae528061365d5280613dd95280613e915280613eb85280613f9e528061400552506149066000f3fe6080604052600436106103e85760003560e01c80637d1db4a511610208578063cba0e99611610118578063edcdb806116100ab578063f2fde38b1161007a578063f2fde38b14610d77578063f84354f114610daa578063fcdc7b1d14610ddd578063fd72c23614610e10578063ff12bbf414610e43576103ef565b8063edcdb80614610cf0578063efeb97e114610d05578063f2029d6b14610d2f578063f2cc0c1814610d44576103ef565b8063de52014b116100e7578063de52014b14610c7f578063de9eb45814610c94578063e064648a14610cc2578063ec342ad014610907576103ef565b8063cba0e99614610bce578063cc2d025914610c01578063cdfd3b2514610c16578063dd62ed3e14610c44576103ef565b80639f9a4e7f1161019b578063a6f8fe451161016a578063a6f8fe4514610b2c578063a9059cbb14610b41578063c835e7e114610b7a578063c9e6da1914610ba4578063cabcc71814610bb9576103ef565b80639f9a4e7f14610a77578063a0ac5e1914610aa3578063a457c2d714610ab8578063a486309d14610af1576103ef565b80638cf57cb9116101d75780638cf57cb914610a055780638da5cb5b14610a1a5780639437b8fa14610a2f57806395d89b4114610a62576103ef565b80637d1db4a51461099c5780637dbaed88146109b157806389687116146109db5780638aadb809146109f0576103ef565b80633986829d116103035780634ada218b1161029657806361fd49e21161026557806361fd49e2146108f257806364dd48f51461090757806370a082311461091c578063715018a61461094f5780637af548c114610964576103ef565b80634ada218b14610882578063583e0568146108975780635afbfd38146108c85780635b3f337e146108dd576103ef565b8063465b5381116102d2578063465b5381146108025780634773a6a91461082e5780634a1e7726146108435780634a74bb021461086d576103ef565b80633986829d1461073c5780633af9e6691461076a57806343684b211461079d5780634549b039146107d0576103ef565b806318160ddd1161037b5780632d8381191161034a5780632d83811914610680578063313ce567146106aa578063319d30e2146106d55780633950935114610703576103ef565b806318160ddd146105cb5780631bbae6e0146105e057806323b872dd1461060a5780632411e7171461064d576103ef565b80630e4db802116103b75780630e4db8021461053357806311d3e6c41461056e57806313114a9d1461058357806316b627d114610598576103ef565b806304cf8682146103f4578063053ab1821461043057806306fdde031461045c578063095ea7b3146104e6576103ef565b366103ef57005b600080fd5b34801561040057600080fd5b5061041e6004803603602081101561041757600080fd5b5035610e7e565b60408051918252519081900360200190f35b34801561043c57600080fd5b5061045a6004803603602081101561045357600080fd5b5035610eab565b005b34801561046857600080fd5b50610471610fb9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104ab578181015183820152602001610493565b50505050905090810190601f1680156104d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104f257600080fd5b5061051f6004803603604081101561050957600080fd5b506001600160a01b038135169060200135611044565b604080519115158252519081900360200190f35b34801561053f57600080fd5b5061045a6004803603604081101561055657600080fd5b506001600160a01b0381351690602001351515611062565b34801561057a57600080fd5b5061041e61112a565b34801561058f57600080fd5b5061041e611139565b3480156105a457600080fd5b5061051f600480360360208110156105bb57600080fd5b50356001600160a01b031661113f565b3480156105d757600080fd5b5061041e611154565b3480156105ec57600080fd5b5061045a6004803603602081101561060357600080fd5b503561115a565b34801561061657600080fd5b5061051f6004803603606081101561062d57600080fd5b506001600160a01b03813581169160208101359091169060400135611230565b34801561065957600080fd5b5061045a6004803603602081101561067057600080fd5b50356001600160a01b03166112b8565b34801561068c57600080fd5b5061041e600480360360208110156106a357600080fd5b50356113c7565b3480156106b657600080fd5b506106bf611420565b6040805160ff9092168252519081900360200190f35b3480156106e157600080fd5b5061045a600480360360208110156106f857600080fd5b503561ffff16611429565b34801561070f57600080fd5b5061051f6004803603604081101561072657600080fd5b506001600160a01b0381351690602001356114dc565b34801561074857600080fd5b5061045a6004803603602081101561075f57600080fd5b503561ffff1661156f565b34801561077657600080fd5b5061041e6004803603602081101561078d57600080fd5b50356001600160a01b031661162a565b3480156107a957600080fd5b5061051f600480360360208110156107c057600080fd5b50356001600160a01b031661164c565b3480156107dc57600080fd5b5061041e600480360360408110156107f357600080fd5b50803590602001351515611661565b34801561080e57600080fd5b50610817611734565b6040805161ffff9092168252519081900360200190f35b34801561083a57600080fd5b50610817611745565b34801561084f57600080fd5b5061045a6004803603602081101561086657600080fd5b503561174f565b34801561087957600080fd5b5061051f61187e565b34801561088e57600080fd5b5061051f61188c565b3480156108a357600080fd5b506108ac61189b565b604080516001600160a01b039092168252519081900360200190f35b3480156108d457600080fd5b506108ac6118bf565b3480156108e957600080fd5b5061041e6118ce565b3480156108fe57600080fd5b5061041e6118d4565b34801561091357600080fd5b5061041e6118da565b34801561092857600080fd5b5061041e6004803603602081101561093f57600080fd5b50356001600160a01b03166118e6565b34801561095b57600080fd5b5061045a61196e565b34801561097057600080fd5b5061041e6004803603606081101561098757600080fd5b50803590602081013590604001351515611a10565b3480156109a857600080fd5b5061041e611df9565b3480156109bd57600080fd5b5061041e600480360360208110156109d457600080fd5b5035611dff565b3480156109e757600080fd5b506108ac611e23565b3480156109fc57600080fd5b5061041e611e32565b348015610a1157600080fd5b506108ac611e38565b348015610a2657600080fd5b506108ac611e47565b348015610a3b57600080fd5b5061051f60048036036020811015610a5257600080fd5b50356001600160a01b0316611e56565b348015610a6e57600080fd5b50610471611e6b565b348015610a8357600080fd5b5061045a60048036036020811015610a9a57600080fd5b50351515611ec6565b348015610aaf57600080fd5b5061045a611f6d565b348015610ac457600080fd5b5061051f60048036036040811015610adb57600080fd5b506001600160a01b038135169060200135612001565b348015610afd57600080fd5b5061045a60048036036040811015610b1457600080fd5b506001600160a01b03813516906020013515156120ea565b348015610b3857600080fd5b506108176121b2565b348015610b4d57600080fd5b5061051f60048036036040811015610b6457600080fd5b506001600160a01b0381351690602001356121c4565b348015610b8657600080fd5b506108ac60048036036020811015610b9d57600080fd5b50356121d8565b348015610bb057600080fd5b506108ac6121ff565b348015610bc557600080fd5b506108ac61220e565b348015610bda57600080fd5b5061051f60048036036020811015610bf157600080fd5b50356001600160a01b0316612222565b348015610c0d57600080fd5b50610817612240565b348015610c2257600080fd5b5061045a60048036036020811015610c3957600080fd5b503561ffff1661224a565b348015610c5057600080fd5b5061041e60048036036040811015610c6757600080fd5b506001600160a01b03813581169160200135166122c7565b348015610c8b57600080fd5b506108176122f2565b348015610ca057600080fd5b5061045a60048036036020811015610cb757600080fd5b503561ffff16612302565b348015610cce57600080fd5b5061045a60048036036020811015610ce557600080fd5b503561ffff1661237e565b348015610cfc57600080fd5b5061041e612431565b348015610d1157600080fd5b5061045a60048036036020811015610d2857600080fd5b5035612437565b348015610d3b57600080fd5b506108ac61250d565b348015610d5057600080fd5b5061045a60048036036020811015610d6757600080fd5b50356001600160a01b031661251c565b348015610d8357600080fd5b5061045a60048036036020811015610d9a57600080fd5b50356001600160a01b03166126a2565b348015610db657600080fd5b5061045a60048036036020811015610dcd57600080fd5b50356001600160a01b031661279a565b348015610de957600080fd5b5061045a60048036036020811015610e0057600080fd5b50356001600160a01b031661295b565b348015610e1c57600080fd5b5061045a60048036036020811015610e3357600080fd5b50356001600160a01b03166129d5565b348015610e4f57600080fd5b5061045a60048036036040811015610e6657600080fd5b506001600160a01b0381351690602001351515612ad3565b6015546000908190610ea290606490610e9c90869061ffff16612b9b565b90612c36565b9150505b919050565b6000610eb5612ce1565b6001600160a01b0381166000908152600a602052604090205490915060ff1615610f105760405162461bcd60e51b815260040180806020018281038252602c8152602001806148a5602c913960400191505060405180910390fd5b6000610f1a612ce5565b90506000610f45600654610f3f670de0b6b3a764000087612b9b90919063ffffffff16565b90612bf4565b90506000610f538284612b9b565b6001600160a01b038516600090815260076020526040902054909150610f799082612c9f565b6001600160a01b038516600090815260076020526040902055601754610f9f9082612c9f565b601755601654610faf9086612d08565b6016555050505050565b6002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152929183018282801561103c5780601f106110115761010080835404028352916020019161103c565b820191906000526020600020905b81548152906001019060200180831161101f57829003601f168201915b505050505081565b6000611058611051612ce1565b8484612d62565b5060015b92915050565b61106a612ce1565b6000546001600160a01b039081169116146110ba576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fccb445f982fb5bec43b7eaff800f9e4bea4ae44fb3d94599db92469b49fbf34f929181900390910190a16001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000611134612e4e565b905090565b60165490565b600d6020526000908152604090205460ff1681565b60145490565b611162612ce1565b6000546001600160a01b039081169116146111b2576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b6305f5e1008110156111f55760405162461bcd60e51b815260040180806020018281038252603381526020018061484e6033913960400191505060405180910390fd5b60198190556040805182815290517f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf9181900360200190a150565b600061123d848484612e63565b6112ad84611249612ce1565b6112a8856040518060600160405280602881526020016147b1602891396001600160a01b038a16600090815260096020526040812090611287612ce1565b6001600160a01b0316815260208101919091526040016000205491906132c7565b612d62565b5060015b9392505050565b6112c0612ce1565b6000546001600160a01b03908116911614611310576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b6001600160a01b03811661136b576040805162461bcd60e51b815260206004820152601b60248201527f6e657720726562617365722069732061646472657373207a65726f0000000000604482015290519081900360640190fd5b6001546040516001600160a01b038084169216907fe8a195812977ad9c31215cd36cddec4a0a2cef58eb984d1169225de6e823ff4390600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b600060175482111561140a5760405162461bcd60e51b815260040180806020018281038252602a81526020018061464c602a913960400191505060405180910390fd5b6000611414612ce5565b9050610ea28382612bf4565b60045460ff1681565b611431612ce1565b6000546001600160a01b03908116911614611481576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b60028161ffff16116114c45760405162461bcd60e51b81526004018080602001828103825260358152602001806147d96035913960400191505060405180910390fd5b6018805461ffff191661ffff92909216919091179055565b3360009081526009602090815260408083206001600160a01b038616845290915281205461150a9083612d08565b3360008181526009602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b611577612ce1565b6000546001600160a01b039081169116146115c7576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b605a8161ffff161061160a5760405162461bcd60e51b815260040180806020018281038252602e8152602001806145f4602e913960400191505060405180910390fd5b6015805461ffff909216620100000263ffff000019909216919091179055565b6001600160a01b03811660009081526007602052604081205461105c906113c7565b600c6020526000908152604090205460ff1681565b60006014548311156116ba576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b60006116c4612ce5565b905060006116e9600654610f3f670de0b6b3a764000088612b9b90919063ffffffff16565b905060006116f682611dff565b905060006117048385612b9b565b90508561171657935061105c92505050565b600061172384848761335e565b5091975061105c9650505050505050565b601554600160301b900461ffff1681565b60155461ffff1681565b611757612ce1565b6000546001600160a01b039081169116146117a7576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b670de0b6b3a764000081101580156117c85750686c6b935b8bbd4000008111155b6118035760405162461bcd60e51b815260040180806020018281038252603c8152602001806145b8603c913960400191505060405180910390fd5b601b5481116118435760405162461bcd60e51b81526004018080602001828103825260428152602001806146cc6042913960600191505060405180910390fd5b601a8190556040805182815290517f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c009181900360200190a150565b601d54610100900460ff1681565b601d5462010000900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6010546001600160a01b031690565b60065481565b601c5481565b670de0b6b3a764000081565b6001600160a01b0381166000908152600a602052604081205460ff1615611941576006546001600160a01b03831660009081526008602052604090205461193a91670de0b6b3a764000091610f3f91612b9b565b9050610ea6565b6001600160a01b038216600090815260076020526040812054611963906113c7565b9050610ea2816133e9565b611976612ce1565b6000546001600160a01b039081169116146119c6576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000611a1a612ce1565b6001546001600160a01b03908116911614611a74576040805162461bcd60e51b815260206004820152601560248201527431b0b63632b91034b9903737ba103932b130b9b2b960591b604482015290519081900360640190fd5b6000611a7e612ce5565b905082611c41576000611aa9670de0b6b3a7640000610f3f611aa08289612c9f565b60065490612b9b565b600681905560045461010090046001600160a01b0316600090815260076020526040902054909150611b0290670de0b6b3a764000090610f3f908490611afc90611af39088612bf4565b60135490612c9f565b90612b9b565b601455600654604080519182525187917f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511919081900360200190a2601160009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b8d57600080fd5b505af1158015611ba1573d6000803e3d6000fd5b5050505060005b601254811015611c3457600060128281548110611bc157fe5b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169350839263fff6cae99260048084019382900301818387803b158015611c0f57600080fd5b505af1158015611c23573d6000803e3d6000fd5b505060019093019250611ba8915050565b50601454925050506112b1565b6000611c5c670de0b6b3a7640000610f3f611aa08289612d08565b9050611c66612e4e565b811015611c77576006819055611c83565b611c7f612e4e565b6006555b60065460045461010090046001600160a01b0316600090815260076020526040902054611cc791670de0b6b3a764000091610f3f9190611afc90611af39088612bf4565b601455600654604080519182525187917f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511919081900360200190a2601160009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d5257600080fd5b505af1158015611d66573d6000803e3d6000fd5b5050505060005b601254811015611c3457600060128281548110611d8657fe5b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169350839263fff6cae99260048084019382900301818387803b158015611dd457600080fd5b505af1158015611de8573d6000803e3d6000fd5b505060019093019250611d6d915050565b60195481565b6015546000908190610ea290606490610e9c90869062010000900461ffff16612b9b565b6001546001600160a01b031690565b601a5481565b6005546001600160a01b031681565b6000546001600160a01b031690565b600e6020526000908152604090205460ff1681565b6003805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561103c5780601f106110115761010080835404028352916020019161103c565b611ece612ce1565b6000546001600160a01b03908116911614611f1e576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b601d8054821515610100810261ff00199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b611f75612ce1565b6000546001600160a01b03908116911614611fc5576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b601d805462ff00001916620100001790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b3360009081526009602090815260408083206001600160a01b0386168452909152812054808310612055573360009081526009602090815260408083206001600160a01b0388168452909152812055612084565b61205f8184612c9f565b3360009081526009602090815260408083206001600160a01b03891684529091529020555b3360008181526009602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6120f2612ce1565b6000546001600160a01b03908116911614612142576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f11382929181900390910190a16001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b601554640100000000900461ffff1681565b60006110586121d1612ce1565b8484612e63565b601281815481106121e557fe5b6000918252602090912001546001600160a01b0316905081565b600f546001600160a01b031690565b60045461010090046001600160a01b031681565b6001600160a01b03166000908152600a602052604090205460ff1690565b60185461ffff1681565b612252612ce1565b6000546001600160a01b039081169116146122a2576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b6015805461ffff909216600160301b0267ffff00000000000019909216919091179055565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b60155462010000900461ffff1681565b61230a612ce1565b6000546001600160a01b0390811691161461235a576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b6015805461ffff9092166401000000000265ffff0000000019909216919091179055565b612386612ce1565b6000546001600160a01b039081169116146123d6576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b605a8161ffff16106124195760405162461bcd60e51b815260040180806020018281038252602781526020018061478a6027913960400191505060405180910390fd5b6015805461ffff191661ffff92909216919091179055565b601b5481565b61243f612ce1565b6000546001600160a01b0390811691161461248f576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b6305f5e1008110156124d25760405162461bcd60e51b81526004018080602001828103825260398152602001806147306039913960400191505060405180910390fd5b601b8190556040805182815290517f74272e6f6c75e19c6f48bb75e2724eb55e3e1726f8b81d97f1db21d22ead93dc9181900360200190a150565b6011546001600160a01b031681565b612524612ce1565b6000546001600160a01b03908116911614612574576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600a602052604090205460ff16156125e2576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152600760205260409020541561263c576001600160a01b038116600090815260076020526040902054612622906113c7565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6126aa612ce1565b6000546001600160a01b039081169116146126fa576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b6001600160a01b03811661273f5760405162461bcd60e51b81526004018080602001828103825260268152602001806146766026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6127a2612ce1565b6000546001600160a01b039081169116146127f2576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600a602052604090205460ff1661285f576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600b5481101561295757816001600160a01b0316600b828154811061288357fe5b6000918252602090912001546001600160a01b0316141561294f57600b805460001981019081106128b057fe5b600091825260209091200154600b80546001600160a01b0390921691839081106128d657fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600b80548061292857fe5b600082815260209020810160001990810180546001600160a01b0319169055019055612957565b600101612862565b5050565b612963612ce1565b6000546001600160a01b039081169116146129b3576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6129dd612ce1565b6000546001600160a01b03908116911614612a2d576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a6857600080fd5b505af1158015612a7c573d6000803e3d6000fd5b5050601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0394909416939093179092555050565b612adb612ce1565b6000546001600160a01b03908116911614612b2b576040805162461bcd60e51b8152602060048201819052602482015260008051602061480e833981519152604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a929181900390910190a16001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b600082612baa5750600061105c565b82820282848281612bb757fe5b04146112b15760405162461bcd60e51b81526004018080602001828103825260218152602001806147696021913960400191505060405180910390fd5b60006112b183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061340d565b600081612c78576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b6000828481612c8357fe5b049050828481612c8f57fe5b06156112b1576001019392505050565b60006112b183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132c7565b3390565b6000806000612cf2613472565b9092509050612d018282612bf4565b9250505090565b6000828201838110156112b1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b038316612da75760405162461bcd60e51b81526004018080602001828103825260248152602001806148816024913960400191505060405180910390fd5b6001600160a01b038216612dec5760405162461bcd60e51b815260040180806020018281038252602281526020018061470e6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260096020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600060135460001981612e5d57fe5b04905090565b6001600160a01b038316612ea85760405162461bcd60e51b815260040180806020018281038252602c81526020018061458c602c913960400191505060405180910390fd5b6001600160a01b038216612eed5760405162461bcd60e51b815260040180806020018281038252602a815260200180614622602a913960400191505060405180910390fd5b60008111612f2c5760405162461bcd60e51b815260040180806020018281038252603081526020018061469c6030913960400191505060405180910390fd5b612f34611e47565b6001600160a01b0316836001600160a01b031614158015612f6e5750612f58611e47565b6001600160a01b0316826001600160a01b031614155b8015612f7d5750601d5460ff16155b1561308b57601954811115612fc35760405162461bcd60e51b815260040180806020018281038252602f81526020018061455d602f913960400191505060405180910390fd5b600f546001600160a01b0316612fd7612ce1565b6001600160a01b0316148061302457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316613019612ce1565b6001600160a01b0316145b80156130395750601d5462010000900460ff16155b1561308b576040805162461bcd60e51b815260206004820152601b60248201527f534d4f4f4e3a2074726164696e672069732064697361626c65642e0000000000604482015290519081900360640190fd5b601d5460ff1661316e5760006130a0306118e6565b90506000601a5482101590507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561310557600080fd5b505afa158015613119573d6000803e3d6000fd5b505050506040513d602081101561312f57600080fd5b50819050801561314a5750600f546001600160a01b03163314155b801561315d5750601d54610100900460ff165b1561316b5761316b826135d5565b50505b6001600160a01b0383166000908152600a602052604090205460ff1680156131af57506001600160a01b0382166000908152600a602052604090205460ff16155b156131c4576131bf838383613765565b6132c2565b6001600160a01b0383166000908152600a602052604090205460ff1615801561320557506001600160a01b0382166000908152600a602052604090205460ff165b15613215576131bf83838361399e565b6001600160a01b0383166000908152600a602052604090205460ff1615801561325757506001600160a01b0382166000908152600a602052604090205460ff16155b15613267576131bf838383613b50565b6001600160a01b0383166000908152600a602052604090205460ff1680156132a757506001600160a01b0382166000908152600a602052604090205460ff165b156132b7576131bf838383613bb3565b6132c2838383613b50565b505050565b600081848411156133565760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561331b578181015183820152602001613303565b50505050905090810190601f1680156133485780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b601854600090819081908190819061337b90899061ffff16612bf4565b6015549091506000906133b090889061ffff600160301b82048116916401000000009004168b02816133a957fe5b0490612b9b565b905060006133c8826133c28b8b612b9b565b90612c9f565b905060006133d88b858585613d6c565b9b929a509298509650945050505050565b600080610ea2670de0b6b3a7640000610f3f60065486612b9b90919063ffffffff16565b6000818361345c5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561331b578181015183820152602001613303565b50600083858161346857fe5b0495945050505050565b6017546013546000918291825b600b548110156135a3578260076000600b848154811061349b57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061350057508160086000600b84815481106134d957fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561351757601754601354945094505050506135d1565b61355760076000600b848154811061352b57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612c9f565b925061359960086000600b848154811061356d57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612c9f565b915060010161347f565b506013546017546135b391612bf4565b8210156135cb576017546013549350935050506135d1565b90925090505b9091565b601d805460ff19166001179055601b546000906135f3908390612c9f565b9050600061360c601c5483612c3690919063ffffffff16565b9050600061361a8383612c9f565b90506000613629836002612bf4565b905060006136378483612c9f565b90504761364383613d89565b600061364f4783612c9f565b905061365b8382613f98565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156136b457600080fd5b505afa1580156136c8573d6000803e3d6000fd5b505050506040513d60208110156136de57600080fd5b5051604080518681526020810184905280820186905290516001600160a01b03909216917fa5edfeb09a3d7a0edab24279a4ca1c35b82bb038f8a7eb53339c904a217fe1f69181900360600190a26011546137449030906001600160a01b031687612e63565b6137513032601b54612e63565b5050601d805460ff19169055505050505050565b600061376f612ce5565b90506000613794600654610f3f670de0b6b3a764000086612b9b90919063ffffffff16565b905060006137a28284612b9b565b6001600160a01b0387166000908152600860205260409020549091506137c89085612c9f565b6001600160a01b0387166000908152600860209081526040808320939093556007905220546137f79082612c9f565b6001600160a01b038716600090815260076020526040902055601d5460ff1615613888576001600160a01b03851660009081526007602052604090205461383e9082612d08565b6001600160a01b0380871660008181526007602090815260409182902094909455805188815290519193928a169260008051602061482e83398151915292918290030190a3613996565b61389185614080565b156139145760006138a183610e7e565b90506000806000806138b486868a61335e565b93509350935093506000806000806138cc8b8a61409e565b93509350935093506138e96138e0836133e9565b60145490612c9f565b6014556138f68684614117565b6139068f8f848b8b8a8a8861413b565b505050505050505050613996565b61391e86866142a0565b61392d5760006138a183611dff565b6001600160a01b0385166000908152600760205260409020546139509082612d08565b6001600160a01b0380871660008181526007602090815260409182902094909455805188815290519193928a169260008051602061482e83398151915292918290030190a35b505050505050565b60006139a8612ce5565b905060006139cd600654610f3f670de0b6b3a764000086612b9b90919063ffffffff16565b905060006139db8284612b9b565b6001600160a01b038716600090815260076020526040902054909150613a019082612c9f565b6001600160a01b038716600090815260076020526040902055601d5460ff1615613a48576001600160a01b03851660009081526007602052604090205461383e9082612d08565b613a5185614080565b15613ac7576000613a6183610e7e565b90506000806000613a7385858961335e565b93509350935050600080600080613a8a8a8961409e565b9350935093509350613a9e6138e0836133e9565b601455613aab8684614117565b613aba8e8e848a8989876142e3565b5050505050505050613996565b613ad186866142a0565b613ae0576000613a6183611dff565b6001600160a01b038516600090815260086020526040902054613b039083612d08565b6001600160a01b0380871660008181526008602090815260409182902094909455805188815290519193928a169260008051602061482e83398151915292918290030190a3505050505050565b6000613b5a612ce5565b90506000613b7f600654610f3f670de0b6b3a764000086612b9b90919063ffffffff16565b90506000613b8d8284612b9b565b6001600160a01b0387166000908152600760205260409020549091506137f79082612c9f565b6000613bbd612ce5565b90506000613be2600654610f3f670de0b6b3a764000086612b9b90919063ffffffff16565b90506000613bf08284612b9b565b6001600160a01b038716600090815260086020526040902054909150613c169085612c9f565b6001600160a01b038716600090815260086020908152604080832093909355600790522054613c459082612c9f565b6001600160a01b038716600090815260076020526040902055601d5460ff1615613c8c576001600160a01b03851660009081526007602052604090205461383e9082612d08565b613c9585614080565b15613d01576000613ca583610e7e565b9050600080600080613cb886868a61335e565b9350935093509350600080600080613cd08b8a61409e565b9350935093509350613ce46138e0836133e9565b601455613cf18684614117565b6139068f8f848b8b8a8a88614455565b613d0b86866142a0565b613d1a576000613ca583611dff565b6001600160a01b038516600090815260076020526040902054613d3d9082612d08565b6001600160a01b038616600090815260076020908152604080832093909355600890522054613b039083612d08565b600080613d7f836133c286818a8a612c9f565b9695505050505050565b60408051600280825260608083018452926020830190803683370190505090503081600081518110613db757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e3057600080fd5b505afa158015613e44573d6000803e3d6000fd5b505050506040513d6020811015613e5a57600080fd5b5051815182906001908110613e6b57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050613eb6307f000000000000000000000000000000000000000000000000000000000000000084612d62565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613f5b578181015183820152602001613f43565b505050509050019650505050505050600060405180830381600087803b158015613f8457600080fd5b505af1158015613996573d6000803e3d6000fd5b613fc3307f000000000000000000000000000000000000000000000000000000000000000084612d62565b6040805163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a482015290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163f305d71991849160c48082019260609290919082900301818588803b15801561404f57600080fd5b505af1158015614063573d6000803e3d6000fd5b50505050506040513d606081101561407a57600080fd5b50505050565b6001600160a01b03166000908152600e602052604090205460ff1690565b60185460009081908190819081906140bb90889061ffff16612bf4565b60155490915060009061ffff600160301b82048116916401000000009004168802816140e357fe5b04905060006140f28883612c9f565b90506000614106826133c285818e89612c9f565b9a9399509197509550909350505050565b6017546141249083612c9f565b6017556016546141349082612d08565b6016555050565b60045461010090046001600160a01b03166000908152600760205260409020546141659085612d08565b6004546001600160a01b036101009091048116600090815260076020526040808220939093559089168152205461419c9086612d08565b6001600160a01b0380891660009081526007602052604080822093909355600554909116815220546141ce9084612d08565b6005546001600160a01b0390811660009081526007602052604090209190915587811690891660008051602061482e83398151915261420c856133e9565b60408051918252519081900360200190a36004546001600160a01b03610100909104811690891660008051602061482e83398151915261424b896133e9565b60408051918252519081900360200190a36005546001600160a01b0390811690891660008051602061482e833981519152614285846133e9565b60408051918252519081900360200190a35050505050505050565b6001600160a01b0382166000908152600c602052604081205460ff16806112b15750506001600160a01b03166000908152600d602052604090205460ff16919050565b60045461010090046001600160a01b031660009081526007602052604090205461430d9084612d08565b6004546001600160a01b03610100909104811660009081526007602090815260408083209490945591891681526008909152205461434b9085612d08565b6001600160a01b038088166000908152600860209081526040808320949094556005549092168152600790915220546143849083612d08565b6005546001600160a01b0390811660009081526007602052604090209190915586811690881660008051602061482e8339815191526143c2876133e9565b60408051918252519081900360200190a36004546001600160a01b03610100909104811690881660008051602061482e833981519152614401886133e9565b60408051918252519081900360200190a36005546001600160a01b0390811690881660008051602061482e83398151915261443b846133e9565b60408051918252519081900360200190a350505050505050565b60045461010090046001600160a01b031660009081526007602052604090205461447f9085612d08565b6004546001600160a01b03610100909104811660009081526007602052604080822093909355908916815220546144b69086612d08565b6001600160a01b0388166000908152600760209081526040808320939093556008905220546144e59084612d08565b6001600160a01b0380891660009081526008602090815260408083209490945560055490921681526007909152205461451e9083612d08565b6005546001600160a01b0390811660009081526007602052604090209190915587811690891660008051602061482e83398151915261420c866133e956fe534d4f4f4e3a205472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e534d4f4f4e3a2063616e6e6f74207472616e736665722066726f6d20746865207a65726f2061646472657373534d4f4f4e3a206d696e546f6b656e4265666f7265537761702073686f756c64206265206265747765656e203120616e64203230303020534d4f4f4e534d4f4f4e3a205472616e73616374696f6e206665652073686f756c64206265206c657373207468616e20393025534d4f4f4e3a2063616e6e6f74207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373534d4f4f4e3a205472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f534d4f4f4e3a206d696e546f6b656e4265666f7265537761702073686f756c642062652067726561746572207468616e206175746f5377617043616c6c6572466565534d4f4f4e3a20617070726f766520746f20746865207a65726f2061646472657373534d4f4f4e3a206175746f5377617043616c6c65724665652073686f756c642062652067726561746572207468616e20302e3120534d4f4f4e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77534d4f4f4e3a2053656c6c206665652073686f756c64206265206c657373207468616e2039302545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365534d4f4f4e3a204672696374696f6e6c657373207969656c64206665652073686f756c64206265206c657373207468616e203530254f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef534d4f4f4e3a206d61785478416d6f756e742073686f756c642062652067726561746572207468616e20302e3120534d4f4f4e534d4f4f4e3a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6ea2646970667358221220f162ad90558eeed715c1acf01816912063f756625260d4d8a245cb5577f6640364736f6c634300060c0033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7700000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e

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

00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e

-----Decoded View---------------
Arg [0] : uniswapV2Router (address): 0x10ed43c718714eb63d5aa57b78b54704e256024e

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e


Deployed ByteCode Sourcemap

12157:34576:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15941:168;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15941:168:0;;:::i;:::-;;;;;;;;;;;;;;;;21162:497;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21162:497:0;;:::i;:::-;;12746:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19585:152;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19585:152:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;17693:201;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17693:201:0;;;;;;;;;;:::i;18048:110::-;;;;;;;;;;;;;:::i;21066:90::-;;;;;;;;;;;;;:::i;13679:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13679:43:0;-1:-1:-1;;;;;13679:43:0;;:::i;15837:96::-;;;;;;;;;;;;;:::i;45366:255::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45366:255:0;;:::i;18651:329::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18651:329:0;;;;;;;;;;;;;;;;;:::i;9948:235::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9948:235:0;-1:-1:-1;;;;;9948:235:0;;:::i;22288:256::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22288:256:0;;:::i;12828:27::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16941:162;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16941:162:0;;;;:::i;19745:314::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19745:314:0;;;;;;;;:::i;16778:157::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16778:157:0;;;;:::i;19268:146::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19268:146:0;-1:-1:-1;;;;;19268:146:0;;:::i;13627:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13627:45:0;-1:-1:-1;;;;;13627:45:0;;:::i;21665:617::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21665:617:0;;;;;;;;;:::i;14116:29::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14022:26;;;;;;;;;;;;;:::i;45627:495::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45627:495:0;;:::i;14547:33::-;;;;;;;;;;;;;:::i;14587:26::-;;;;;;;;;;;;;:::i;12273:52::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;12273:52:0;;;;;;;;;;;;;;45244:116;;;;;;;;;;;;;:::i;13310:41::-;;;;;;;;;;;;;:::i;14466:38::-;;;;;;;;;;;;;:::i;13064:49::-;;;;;;;;;;;;;:::i;18985:275::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18985:275:0;-1:-1:-1;;;;;18985:275:0;;:::i;8857:148::-;;;;;;;;;;;;;:::i;43619:1501::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43619:1501:0;;;;;;;;;;;;;;:::i;14314:44::-;;;;;;;;;;;;;:::i;16117:164::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16117:164:0;;:::i;9758:76::-;;;;;;;;;;;;;:::i;14362:50::-;;;;;;;;;;;;;:::i;12945:28::-;;;;;;;;;;;;;:::i;8215:79::-;;;;;;;;;;;;;:::i;13729:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13729:50:0;-1:-1:-1;;;;;13729:50:0;;:::i;12789:32::-;;;;;;;;;;;;;:::i;46436:174::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46436:174:0;;;;:::i;46616:114::-;;;;;;;;;;;;;:::i;20067:525::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20067:525:0;;;;;;;;:::i;16586:184::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16586:184:0;;;;;;;;;;:::i;14086:26::-;;;;;;;;;;;;;:::i;18485:158::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18485:158:0;;;;;;;;:::i;13897:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13897:28:0;;:::i;45126:106::-;;;;;;;;;;;;;:::i;12864:71::-;;;;;;;;;;;;;:::i;20947:113::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20947:113:0;-1:-1:-1;;;;;20947:113:0;;:::i;14286:24::-;;;;;;;;;;;;;:::i;17377:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17377:109:0;;;;:::i;19428:149::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19428:149:0;;;;;;;;;;:::i;14055:24::-;;;;;;;;;;;;;:::i;17274:97::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17274:97:0;;;;:::i;17111:154::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17111:154:0;;;;:::i;14416:46::-;;;;;;;;;;;;;:::i;46128:302::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46128:302:0;;:::i;13864:29::-;;;;;;;;;;;;;:::i;22550:335::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22550:335:0;-1:-1:-1;;;;;22550:335:0;;:::i;9160:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9160:244:0;-1:-1:-1;;;;;9160:244:0;;:::i;22891:481::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22891:481:0;-1:-1:-1;;;;;22891:481:0;;:::i;43143:112::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43143:112:0;-1:-1:-1;;;;;43143:112:0;;:::i;17900:140::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17900:140:0;-1:-1:-1;;;;;17900:140:0;;:::i;17495:190::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17495:190:0;;;;;;;;;;:::i;15941:168::-;16052:8;;15998:7;;;;16042:33;;16071:3;;16042:19;;:5;;16052:8;;16042:9;:19::i;:::-;:28;;:33::i;:::-;16023:52;-1:-1:-1;;15941:168:0;;;;:::o;21162:497::-;21217:14;21234:12;:10;:12::i;:::-;-1:-1:-1;;;;;21266:19:0;;;;;;:11;:19;;;;;;21217:29;;-1:-1:-1;21266:19:0;;21265:20;21257:77;;;;-1:-1:-1;;;21257:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21345:19;21367:10;:8;:10::i;:::-;21345:32;;21388:15;21406:53;21440:18;;21406:29;13107:6;21406:7;:11;;:29;;;;:::i;:::-;:33;;:53::i;:::-;21388:71;-1:-1:-1;21464:15:0;21482:24;21388:71;21494:11;21482;:24::i;:::-;-1:-1:-1;;;;;21535:15:0;;;;;;:7;:15;;;;;;21464:42;;-1:-1:-1;21535:28:0;;21464:42;21535:19;:28::i;:::-;-1:-1:-1;;;;;21517:15:0;;;;;;:7;:15;;;;;:46;21584:7;;:20;;21596:7;21584:11;:20::i;:::-;21574:7;:30;21628:10;;:23;;21643:7;21628:14;:23::i;:::-;21615:10;:36;-1:-1:-1;;;;;21162:497:0:o;12746:36::-;;;;;;;;;;;;;;-1:-1:-1;;12746:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19585:152::-;19651:4;19668:39;19677:12;:10;:12::i;:::-;19691:7;19700:6;19668:8;:39::i;:::-;-1:-1:-1;19725:4:0;19585:152;;;;;:::o;17693:201::-;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;17796:39:::1;::::0;;-1:-1:-1;;;;;17796:39:0;::::1;::::0;;;::::1;;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;;;;;17846:25:0;;;::::1;;::::0;;;:18:::1;:25;::::0;;;;:40;;-1:-1:-1;;17846:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17693:201::o;18048:110::-;18099:7;18131:19;:17;:19::i;:::-;18124:26;;18048:110;:::o;21066:90::-;21138:10;;21066:90;:::o;13679:43::-;;;;;;;;;;;;;;;:::o;15837:96::-;15913:12;;15837:96;:::o;45366:255::-;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;45467:5:::1;45452:11;:20;;45444:85;;;;-1:-1:-1::0;;;45444:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45540:12;:26:::0;;;45582:31:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;45366:255:::0;:::o;18651:329::-;18740:4;18751:36;18761:6;18769:9;18780:6;18751:9;:36::i;:::-;18823:127;18832:6;18840:12;:10;:12::i;:::-;18854:95;18898:6;18854:95;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18854:25:0;;;;;;:17;:25;;;;;;18880:12;:10;:12::i;:::-;-1:-1:-1;;;;;18854:39:0;;;;;;;;;;;;-1:-1:-1;18854:39:0;;;:95;:43;:95::i;:::-;18823:8;:127::i;:::-;-1:-1:-1;18968:4:0;18651:329;;;;;;:::o;9948:235::-;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10037:24:0;::::1;10029:64;;;::::0;;-1:-1:-1;;;10029:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;10128:8;::::0;10105:44:::1;::::0;-1:-1:-1;;;;;10105:44:0;;::::1;::::0;10128:8:::1;::::0;10105:44:::1;::::0;10128:8:::1;::::0;10105:44:::1;10156:8;:21:::0;;-1:-1:-1;;;;;;10156:21:0::1;-1:-1:-1::0;;;;;10156:21:0;;;::::1;::::0;;;::::1;::::0;;9948:235::o;22288:256::-;22354:7;22396;;22385;:18;;22377:73;;;;-1:-1:-1;;;22377:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22461:19;22484:10;:8;:10::i;:::-;22461:33;-1:-1:-1;22512:24:0;:7;22461:33;22512:11;:24::i;12828:27::-;;;;;;:::o;16941:162::-;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;17014:1:::1;17008:3;:7;;;17000:73;;;;-1:-1:-1::0;;;17000:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17084:5;:11:::0;;-1:-1:-1;;17084:11:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;16941:162::o;19745:314::-;19908:10;19827:4;19890:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;19890:38:0;;;;;;;;;;:54;;19933:10;19890:42;:54::i;:::-;19867:10;19849:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;19849:38:0;;;;;;;;;;;;:95;;;19960:69;;;;;;19849:38;;19960:69;;;;;;;;;;;-1:-1:-1;20047:4:0;19745:314;;;;:::o;16778:157::-;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;16851:2:::1;16845:3;:8;;;16837:67;;;;-1:-1:-1::0;;;16837:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16915:6;:12:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;16915:12:0;;::::1;::::0;;;::::1;::::0;;16778:157::o;19268:146::-;-1:-1:-1;;;;;19389:16:0;;19337:7;19389:16;;;:7;:16;;;;;;19369:37;;:19;:37::i;13627:45::-;;;;;;;;;;;;;;;:::o;21665:617::-;21755:7;21797:12;;21786:7;:23;;21778:67;;;;;-1:-1:-1;;;21778:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21856:19;21878:10;:8;:10::i;:::-;21856:32;;21899:15;21917:53;21951:18;;21917:29;13107:6;21917:7;:11;;:29;;;;:::i;:53::-;21899:71;;21981:11;21995:18;22005:7;21995:9;:18::i;:::-;21981:32;-1:-1:-1;22018:15:0;22036:24;:7;22048:11;22036;:24::i;:::-;22018:42;;22076:17;22071:204;;22117:7;-1:-1:-1;22110:14:0;;-1:-1:-1;;;22110:14:0;22071:204;22158:23;22188:38;22200:7;22209:3;22214:11;22188;:38::i;:::-;-1:-1:-1;22157:69:0;;-1:-1:-1;22241:22:0;;-1:-1:-1;;;;;;;22241:22:0;14116:29;;;-1:-1:-1;;;14116:29:0;;;;;:::o;14022:26::-;;;;;;:::o;45627:495::-;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;45752:10:::1;45729:19;:33;;:73;;;;;45789:13;45766:19;:36;;45729:73;45721:146;;;;-1:-1:-1::0;;;45721:146:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45908:18;;45886:19;:40;45878:120;;;;-1:-1:-1::0;;;45878:120:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46009:20;:42:::0;;;46067:47:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;45627:495:::0;:::o;14547:33::-;;;;;;;;;:::o;14587:26::-;;;;;;;;;:::o;12273:52::-;;;:::o;45244:116::-;45329:23;;-1:-1:-1;;;;;45329:23:0;45244:116;:::o;13310:41::-;;;;:::o;14466:38::-;;;;:::o;13064:49::-;13107:6;13064:49;:::o;18985:275::-;-1:-1:-1;;;;;19071:20:0;;19042:7;19071:20;;;:11;:20;;;;;;;;19067:95;;;19121:18;;-1:-1:-1;;;;;19100:16:0;;;;;;:7;:16;;;;;;:62;;13107:6;;19100:40;;:20;:40::i;:62::-;19093:69;;;;19067:95;-1:-1:-1;;;;;19210:16:0;;19173:14;19210:16;;;:7;:16;;;;;;19190:37;;:19;:37::i;:::-;19173:54;;19239:16;19248:6;19239:8;:16::i;8857:148::-;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;8964:1:::1;8948:6:::0;;8927:40:::1;::::0;-1:-1:-1;;;;;8948:6:0;;::::1;::::0;8927:40:::1;::::0;8964:1;;8927:40:::1;8995:1;8978:19:::0;;-1:-1:-1;;;;;;8978:19:0::1;::::0;;8857:148::o;43619:1501::-;43715:7;9890:12;:10;:12::i;:::-;9878:8;;-1:-1:-1;;;;;9878:8:0;;;:24;;;9870:58;;;;;-1:-1:-1;;;9870:58:0;;;;;;;;;;;;-1:-1:-1;;;9870:58:0;;;;;;;;;;;;;;;43734:19:::1;43756:10;:8;:10::i;:::-;43734:32;;43782:8;43777:1339;;43806:24;43833:54;13213:6;43833:44;43856:20;13213:6:::0;43865:10;43856:8:::1;:20::i;:::-;43833:18;::::0;;:22:::1;:44::i;:54::-;43892:18;:37:::0;;;43980:11:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;43980:11:0::1;43972:20;::::0;;;:7:::1;:20;::::0;;;;;43892:37;;-1:-1:-1;43957:113:0::1;::::0;13107:6:::1;::::0;43957:91:::1;::::0;43892:37;;43957:53:::1;::::0;43972:37:::1;::::0;43997:11;43972:24:::1;:37::i;:::-;43957:10;::::0;;:14:::1;:53::i;:::-;:71:::0;::::1;:91::i;:113::-;43940:12;:132:::0;44102:18:::1;::::0;44088:33:::1;::::0;;;;;;44095:5;;44088:33:::1;::::0;;;;;::::1;::::0;;::::1;44141:14;;;;;;;;;-1:-1:-1::0;;;;;44141:14:0::1;-1:-1:-1::0;;;;;44126:35:0::1;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44173:9;44168:149;44192:11;:18:::0;44188:22;::::1;44168:149;;;44223:25;44251:11;44263:1;44251:14;;;;;;;;;::::0;;;::::1;::::0;;::::1;::::0;44271:40:::1;::::0;;-1:-1:-1;;;;;;44271:40:0;;;;-1:-1:-1;;;;;44251:14:0;;::::1;::::0;-1:-1:-1;44251:14:0;;44271:38:::1;::::0;:40:::1;::::0;;::::1;::::0;;;;;;44251:14;;44271:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;44212:3:0::1;::::0;;::::1;::::0;-1:-1:-1;44168:149:0::1;::::0;-1:-1:-1;;44168:149:0::1;;;44334:12;;44327:19;;;;;;43777:1339;44392:24;44419:54;13213:6;44419:44;44442:20;13213:6:::0;44451:10;44442:8:::1;:20::i;44419:54::-;44392:81;;44507:19;:17;:19::i;:::-;44488:16;:38;44484:208;;;44552:18;:37:::0;;;44484:208:::1;;;44661:19;:17;:19::i;:::-;44640:18;:40:::0;44484:208:::1;44793:18;::::0;44744:11:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;44744:11:0::1;44736:20;::::0;;;:7:::1;:20;::::0;;;;;44721:113:::1;::::0;13107:6:::1;::::0;44721:91:::1;::::0;44793:18;44721:53:::1;::::0;44736:37:::1;::::0;44761:11;44736:24:::1;:37::i;44721:113::-;44704:12;:132:::0;44866:18:::1;::::0;44852:33:::1;::::0;;;;;;44859:5;;44852:33:::1;::::0;;;;;::::1;::::0;;::::1;44905:14;;;;;;;;;-1:-1:-1::0;;;;;44905:14:0::1;-1:-1:-1::0;;;;;44890:35:0::1;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44937:9;44932:149;44956:11;:18:::0;44952:22;::::1;44932:149;;;44987:25;45015:11;45027:1;45015:14;;;;;;;;;::::0;;;::::1;::::0;;::::1;::::0;45035:40:::1;::::0;;-1:-1:-1;;;;;;45035:40:0;;;;-1:-1:-1;;;;;45015:14:0;;::::1;::::0;-1:-1:-1;45015:14:0;;45035:38:::1;::::0;:40:::1;::::0;;::::1;::::0;;;;;;45015:14;;45035:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;44976:3:0::1;::::0;;::::1;::::0;-1:-1:-1;44932:149:0::1;::::0;-1:-1:-1;;44932:149:0::1;14314:44:::0;;;;:::o;16117:164::-;16226:6;;16172:7;;;;16216:31;;16243:3;;16216:17;;:5;;16226:6;;;;;16216:9;:17::i;9758:76::-;9820:8;;-1:-1:-1;;;;;9820:8:0;9758:76;:::o;14362:50::-;;;;:::o;12945:28::-;;;-1:-1:-1;;;;;12945:28:0;;:::o;8215:79::-;8253:7;8280:6;-1:-1:-1;;;;;8280:6:0;8215:79;:::o;13729:50::-;;;;;;;;;;;;;;;:::o;12789:32::-;;;;;;;;;;;;;;;-1:-1:-1;;12789:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46436:174;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;46516:21:::1;:32:::0;;;::::1;;;::::0;::::1;-1:-1:-1::0;;46516:32:0;;::::1;::::0;;;::::1;::::0;;;46564:38:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;46436:174:::0;:::o;46616:114::-;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;46674:14:::1;:21:::0;;-1:-1:-1;;46674:21:0::1;::::0;::::1;::::0;;46706:16:::1;::::0;::::1;::::0;46674:21;;46706:16:::1;46616:114::o:0;20067:525::-;20213:10;20154:4;20195:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;20195:38:0;;;;;;;;;;20248:27;;;20244:232;;20319:10;20342:1;20301:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;20301:38:0;;;;;;;;;:42;20244:232;;;20435:29;:8;20448:15;20435:12;:29::i;:::-;20412:10;20394:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;20394:38:0;;;;;;;;;:70;20244:232;20502:10;20523:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;20493:69:0;;20523:38;;;;;;;;;;;20493:69;;;;;;;;;20502:10;20493:69;;;;;;;;;;;-1:-1:-1;20580:4:0;;20067:525;-1:-1:-1;;;20067:525:0:o;16586:184::-;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;16686:32:::1;::::0;;-1:-1:-1;;;;;16686:32:0;::::1;::::0;;;::::1;;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;;;;;16729:18:0;;;::::1;;::::0;;;:11:::1;:18;::::0;;;;:33;;-1:-1:-1;;16729:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16586:184::o;14086:26::-;;;;;;;;;:::o;18485:158::-;18554:4;18571:42;18581:12;:10;:12::i;:::-;18595:9;18606:6;18571:9;:42::i;13897:28::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13897:28:0;;-1:-1:-1;13897:28:0;:::o;45126:106::-;45206:18;;-1:-1:-1;;;;;45206:18:0;45126:106;:::o;12864:71::-;;;;;;-1:-1:-1;;;;;12864:71:0;;:::o;20947:113::-;-1:-1:-1;;;;;21032:20:0;21005:4;21032:20;;;:11;:20;;;;;;;;;20947:113::o;14286:24::-;;;;;;:::o;17377:109::-;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;17454:11:::1;:24:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;17454:24:0::1;-1:-1:-1::0;;17454:24:0;;::::1;::::0;;;::::1;::::0;;17377:109::o;19428:149::-;-1:-1:-1;;;;;19535:25:0;;;19503:7;19535:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;19428:149::o;14055:24::-;;;;;;;;;:::o;17274:97::-;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;17345:8:::1;:18:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;17345:18:0;;::::1;::::0;;;::::1;::::0;;17274:97::o;17111:154::-;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;17186:2:::1;17180:3;:8;;;17172:60;;;;-1:-1:-1::0;;;17172:60:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17243:8;:14:::0;;-1:-1:-1;;17243:14:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;17111:154::o;14416:46::-;;;;:::o;46128:302::-;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;46247:5:::1;46226:17;:26;;46218:96;;;;-1:-1:-1::0;;;46218:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46325:18;:38:::0;;;46379:43:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;46128:302:::0;:::o;13864:29::-;;;-1:-1:-1;;;;;13864:29:0;;:::o;22550:335::-;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22635:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22634:21;22626:61;;;::::0;;-1:-1:-1;;;22626:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;22701:16:0;::::1;22720:1;22701:16:::0;;;:7:::1;:16;::::0;;;;;:20;22698:108:::1;;-1:-1:-1::0;;;;;22777:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22757:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22738:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22698:108:::1;-1:-1:-1::0;;;;;22816:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22816:27:0::1;22839:4;22816:27:::0;;::::1;::::0;;;22854:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22854:23:0::1;::::0;;::::1;::::0;;22550:335::o;9160:244::-;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;9249:22:0;::::1;9241:73;;;;-1:-1:-1::0;;;9241:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9351:6;::::0;;9330:38:::1;::::0;-1:-1:-1;;;;;9330:38:0;;::::1;::::0;9351:6;::::1;::::0;9330:38:::1;::::0;::::1;9379:6;:17:::0;;-1:-1:-1;;;;;;9379:17:0::1;-1:-1:-1::0;;;;;9379:17:0;;;::::1;::::0;;;::::1;::::0;;9160:244::o;22891:481::-;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22975:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22967:60;;;::::0;;-1:-1:-1;;;22967:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23043:9;23038:327;23062:9;:16:::0;23058:20;::::1;23038:327;;;23120:7;-1:-1:-1::0;;;;;23104:23:0::1;:9;23114:1;23104:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23104:12:0::1;:23;23100:254;;;23163:9;23173:16:::0;;-1:-1:-1;;23173:20:0;;;23163:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;23148:9:::1;:12:::0;;-1:-1:-1;;;;;23163:31:0;;::::1;::::0;23158:1;;23148:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23148:46:0::1;-1:-1:-1::0;;;;;23148:46:0;;::::1;;::::0;;23213:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23252:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23252:28:0::1;::::0;;23299:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23299:15:0;;;;;-1:-1:-1;;;;;;23299:15:0::1;::::0;;;;;23333:5:::1;;23100:254;23080:3;;23038:327;;;;22891:481:::0;:::o;43143:112::-;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;43223:13:::1;:24:::0;;-1:-1:-1;;;;;;43223:24:0::1;-1:-1:-1::0;;;;;43223:24:0;;;::::1;::::0;;;::::1;::::0;;43143:112::o;17900:140::-;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;17984:10:::1;-1:-1:-1::0;;;;;17969:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;18007:11:0::1;:28:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;18007:28:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;18007:28:0::1;-1:-1:-1::0;;;;;18007:28:0;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;17900:140:0:o;17495:190::-;8437:12;:10;:12::i;:::-;8427:6;;-1:-1:-1;;;;;8427:6:0;;;:22;;;8419:67;;;;;-1:-1:-1;;;8419:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8419:67:0;;;;;;;;;;;;;;;17597:34:::1;::::0;;-1:-1:-1;;;;;17597:34:0;::::1;::::0;;;::::1;;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;;;;;17642:20:0;;;::::1;;::::0;;;:13:::1;:20;::::0;;;;:35;;-1:-1:-1;;17642:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17495:190::o;48963:471::-;49021:7;49266:6;49262:47;;-1:-1:-1;49296:1:0;49289:8;;49262:47;49333:5;;;49337:1;49333;:5;:1;49357:5;;;;;:10;49349:56;;;;-1:-1:-1;;;49349:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49910:132;49968:7;49995:39;49999:1;50002;49995:39;;;;;;;;;;;;;;;;;:3;:39::i;52254:232::-;52317:7;52345:6;52337:30;;;;;-1:-1:-1;;;52337:30:0;;;;;;;;;;;;-1:-1:-1;;;52337:30:0;;;;;;;;;;;;;;;52378:9;52394:1;52390;:5;;;;;;52378:17;;52414:1;52410;:5;;;;;;:10;52406:52;;52445:1;52441:5;;52254:232;-1:-1:-1;;;52254:232:0:o;48073:136::-;48131:7;48158:43;48162:1;48165;48158:43;;;;;;;;;;;;;;;;;:3;:43::i;6826:106::-;6914:10;6826:106;:::o;42385:166::-;42426:7;42450:15;42467;42486:19;:17;:19::i;:::-;42449:56;;-1:-1:-1;42449:56:0;-1:-1:-1;42523:20:0;42449:56;;42523:11;:20::i;:::-;42516:27;;;;42385:166;:::o;47609:181::-;47667:7;47699:5;;;47723:6;;;;47715:46;;;;;-1:-1:-1;;;47715:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;20598:343;-1:-1:-1;;;;;20691:19:0;;20683:68;;;;-1:-1:-1;;;20683:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20770:21:0;;20762:68;;;;-1:-1:-1;;;20762:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20843:24:0;;;;;;;:17;:24;;;;;;;;:33;;;;;;;;;;;;;:42;;;20901:32;;;;;;;;;;;;;;;;;20598:343;;;:::o;18166:312::-;18218:7;18460:10;;-1:-1:-1;;18446:24:0;;;;;;18439:31;;18166:312;:::o;23378:1838::-;-1:-1:-1;;;;;23482:20:0;;23474:77;;;;-1:-1:-1;;;23474:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23570:23:0;;23562:78;;;;-1:-1:-1;;;23562:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23668:1;23659:6;:10;23651:71;;;;-1:-1:-1;;;23651:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23744:7;:5;:7::i;:::-;-1:-1:-1;;;;;23734:17:0;:6;-1:-1:-1;;;;;23734:17:0;;;:41;;;;;23768:7;:5;:7::i;:::-;-1:-1:-1;;;;;23755:20:0;:9;-1:-1:-1;;;;;23755:20:0;;;23734:41;:62;;;;-1:-1:-1;23780:16:0;;;;23779:17;23734:62;23731:358;;;23831:12;;23821:6;:22;;23813:82;;;;-1:-1:-1;;;23813:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23930:18;;-1:-1:-1;;;;;23930:18:0;23914:12;:10;:12::i;:::-;-1:-1:-1;;;;;23914:34:0;;:79;;;;23976:16;-1:-1:-1;;;;;23952:41:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;23952:41:0;;23914:79;23913:100;;;;-1:-1:-1;23999:14:0;;;;;;;23998:15;23913:100;23910:167;;;24032:45;;;-1:-1:-1;;;24032:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24113:16;;;;24109:489;;24146:28;24177:24;24195:4;24177:9;:24::i;:::-;24146:55;;24216:24;24267:20;;24243;:44;;24216:71;;24320:16;-1:-1:-1;;;;;24320:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24380:19:0;;-1:-1:-1;24380:72:0;;;;-1:-1:-1;24434:18:0;;-1:-1:-1;;;;;24434:18:0;24420:10;:32;;24380:72;:114;;;;-1:-1:-1;24473:21:0;;;;;;;24380:114;24358:229;;;24529:42;24550:20;24529;:42::i;:::-;24109:489;;;-1:-1:-1;;;;;24616:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;24640:22:0;;;;;;:11;:22;;;;;;;;24639:23;24616:46;24612:597;;;24679:48;24701:6;24709:9;24720:6;24679:21;:48::i;:::-;24612:597;;;-1:-1:-1;;;;;24750:19:0;;;;;;:11;:19;;;;;;;;24749:20;:46;;;;-1:-1:-1;;;;;;24773:22:0;;;;;;:11;:22;;;;;;;;24749:46;24745:464;;;24812:46;24832:6;24840:9;24851:6;24812:19;:46::i;24745:464::-;-1:-1:-1;;;;;24881:19:0;;;;;;:11;:19;;;;;;;;24880:20;:47;;;;-1:-1:-1;;;;;;24905:22:0;;;;;;:11;:22;;;;;;;;24904:23;24880:47;24876:333;;;24944:44;24962:6;24970:9;24981:6;24944:17;:44::i;24876:333::-;-1:-1:-1;;;;;25010:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;25033:22:0;;;;;;:11;:22;;;;;;;;25010:45;25006:203;;;25072:48;25094:6;25102:9;25113:6;25072:21;:48::i;25006:203::-;25153:44;25171:6;25179:9;25190:6;25153:17;:44::i;:::-;23378:1838;;;:::o;48512:192::-;48598:7;48634:12;48626:6;;;;48618:29;;;;-1:-1:-1;;;48618:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;48670:5:0;;;48512:192::o;41651:461::-;41824:5;;41745:7;;;;;;;;;;41812:18;;:7;;41824:5;;41812:11;:18::i;:::-;41868:11;;41795:35;;-1:-1:-1;41835:16:0;;41854:43;;41885:11;;41868;-1:-1:-1;;;41868:11:0;;;;;41855:8;;;;:12;;41868:11;41855:24;;;;;;41854:30;:43::i;:::-;41835:62;-1:-1:-1;41902:18:0;41923:34;41835:62;41923:20;:3;41931:11;41923:7;:20::i;:::-;:24;;:34::i;:::-;41902:55;;41962:23;41988:51;42001:7;42010:6;42018:8;42028:10;41988:12;:51::i;:::-;41962:77;42075:8;;-1:-1:-1;42085:6:0;;-1:-1:-1;42085:6:0;-1:-1:-1;41651:461:0;-1:-1:-1;;;;;41651:461:0:o;40887:180::-;40943:7;40962:20;40985:52;13107:6;40985:30;40996:18;;40985:6;:10;;:30;;;;:::i;50538:278::-;50624:7;50659:12;50652:5;50644:28;;;;-1:-1:-1;;;50644:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50683:9;50699:1;50695;:5;;;;;;;50538:278;-1:-1:-1;;;;;50538:278:0:o;42559:576::-;42659:7;;42695:10;;42609:7;;;;;42722:292;42746:9;:16;42742:20;;42722:292;;;42812:7;42788;:21;42796:9;42806:1;42796:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42796:12:0;42788:21;;;;;;;;;;;;;:31;;:66;;;42847:7;42823;:21;42831:9;42841:1;42831:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42831:12:0;42823:21;;;;;;;;;;;;;:31;42788:66;42784:100;;;42864:7;;42873:10;;42856:28;;;;;;;;;42784:100;42909:34;42921:7;:21;42929:9;42939:1;42929:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42929:12:0;42921:21;;;;;;;;;;;;;42909:7;;:11;:34::i;:::-;42899:44;;42968:34;42980:7;:21;42988:9;42998:1;42988:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42988:12:0;42980:21;;;;;;;;;;;;;42968:7;;:11;:34::i;:::-;42958:44;-1:-1:-1;42764:3:0;;42722:292;;;-1:-1:-1;43050:10:0;;43038:7;;:23;;:11;:23::i;:::-;43028:7;:33;43024:67;;;43071:7;;43080:10;;43063:28;;;;;;;;43024:67;43110:7;;-1:-1:-1;43119:7:0;-1:-1:-1;42559:576:0;;;:::o;25263:1321::-;15096:16;:23;;-1:-1:-1;;15096:23:0;15115:4;15096:23;;;25475:18:::1;::::0;15096:16;;25450:44:::1;::::0;:20;;:24:::1;:44::i;:::-;25426:68;;25499:20;25522:43;25545:19;;25522:13;:22;;:43;;;;:::i;:::-;25499:66:::0;-1:-1:-1;25570:26:0::1;25599:31;:13:::0;25499:66;25599:17:::1;:31::i;:::-;25570:60:::0;-1:-1:-1;25641:12:0::1;25656:19;:12:::0;25673:1:::1;25656:16;:19::i;:::-;25641:34:::0;-1:-1:-1;25686:17:0::1;25706:22;:12:::0;25641:34;25706:16:::1;:22::i;:::-;25686:42:::0;-1:-1:-1;26031:21:0::1;26097:22;26114:4:::0;26097:16:::1;:22::i;:::-;26188:18;26209:41;:21;26235:14:::0;26209:25:::1;:41::i;:::-;26188:62;;26300:41;26319:9;26330:10;26300:18;:41::i;:::-;26382:16;-1:-1:-1::0;;;;;26382:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;26382:23:0;26367:68:::1;::::0;;;;;26382:23:::1;26367:68:::0;::::1;::::0;;;;;;;;;;;-1:-1:-1;;;;;26367:68:0;;::::1;::::0;::::1;::::0;;;;;;;::::1;26475:14;::::0;26450:60:::1;::::0;26468:4:::1;::::0;-1:-1:-1;;;;;26475:14:0::1;26491:18:::0;26450:9:::1;:60::i;:::-;26521:55;26539:4;26546:9;26557:18;;26521:9;:55::i;:::-;-1:-1:-1::0;;15142:16:0;:24;;-1:-1:-1;;15142:24:0;;;-1:-1:-1;;;;;;25263:1321:0:o;34071:1899::-;34170:19;34193:10;:8;:10::i;:::-;34170:33;;34208:15;34226:53;34260:18;;34226:29;13107:6;34226:7;:11;;:29;;;;:::i;:53::-;34208:71;-1:-1:-1;34284:15:0;34302:24;34208:71;34314:11;34302;:24::i;:::-;-1:-1:-1;;;;;34355:15:0;;;;;;:7;:15;;;;;;34284:42;;-1:-1:-1;34355:28:0;;34375:7;34355:19;:28::i;:::-;-1:-1:-1;;;;;34337:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34406:7;:15;;;;:28;;34426:7;34406:19;:28::i;:::-;-1:-1:-1;;;;;34388:15:0;;;;;;:7;:15;;;;;:46;34446:16;;;;34443:1520;;;-1:-1:-1;;;;;34500:18:0;;;;;;:7;:18;;;;;;:31;;34523:7;34500:22;:31::i;:::-;-1:-1:-1;;;;;34479:18:0;;;;;;;:7;:18;;;;;;;;;:52;;;;34551:36;;;;;;;34479:18;;34551:36;;;;-1:-1:-1;;;;;;;;;;;34551:36:0;;;;;;;;34443:1520;;;34609:32;34631:9;34609:21;:32::i;:::-;34606:1357;;;34658:11;34672:20;34684:7;34672:11;:20::i;:::-;34658:34;;34698:23;34723:16;34741:14;34757:18;34779:38;34791:7;34800:3;34805:11;34779;:38::i;:::-;34697:120;;;;;;;;34823:23;34848:14;34864:16;34882:18;34904:25;34916:7;34925:3;34904:11;:25::i;:::-;34822:107;;;;;;;;34949:36;34966:18;34975:8;34966;:18::i;:::-;34949:12;;;:16;:36::i;:::-;34934:12;:51;34990:27;35002:6;35010;34990:11;:27::i;:::-;35022:122;35048:6;35056:9;35067:8;35077:15;35094:8;35104:10;35116:15;35133:10;35022:25;:122::i;:::-;34606:1357;;;;;;;;;;;;35199:33;35214:6;35222:9;35199:14;:33::i;:::-;35195:757;;35256:11;35270:18;35280:7;35270:9;:18::i;35195:757::-;-1:-1:-1;;;;;35844:18:0;;;;;;:7;:18;;;;;;:31;;35867:7;35844:22;:31::i;:::-;-1:-1:-1;;;;;35823:18:0;;;;;;;:7;:18;;;;;;;;;:52;;;;35899:36;;;;;;;35823:18;;35899:36;;;;-1:-1:-1;;;;;;;;;;;35899:36:0;;;;;;;;35195:757;34071:1899;;;;;;:::o;30980:1750::-;31077:19;31100:10;:8;:10::i;:::-;31077:33;;31115:15;31133:53;31167:18;;31133:29;13107:6;31133:7;:11;;:29;;;;:::i;:53::-;31115:71;-1:-1:-1;31191:15:0;31209:24;31115:71;31221:11;31209;:24::i;:::-;-1:-1:-1;;;;;31262:15:0;;;;;;:7;:15;;;;;;31191:42;;-1:-1:-1;31262:28:0;;31191:42;31262:19;:28::i;:::-;-1:-1:-1;;;;;31244:15:0;;;;;;:7;:15;;;;;:46;31300:16;;;;31297:1426;;;-1:-1:-1;;;;;31354:18:0;;;;;;:7;:18;;;;;;:31;;31377:7;31354:22;:31::i;31297:1426::-;31463:32;31485:9;31463:21;:32::i;:::-;31460:1263;;;31512:11;31526:20;31538:7;31526:11;:20::i;:::-;31512:34;;31554:16;31572:14;31588:18;31610:38;31622:7;31631:3;31636:11;31610;:38::i;:::-;31551:97;;;;;;;31654:23;31679:14;31695:16;31713:18;31735:25;31747:7;31756:3;31735:11;:25::i;:::-;31653:107;;;;;;;;31780:36;31797:18;31806:8;31797;:18::i;31780:36::-;31765:12;:51;31821:27;31833:6;31841;31821:11;:27::i;:::-;31853:103;31877:6;31885:9;31896:8;31906;31916:10;31928:15;31945:10;31853:23;:103::i;:::-;31460:1263;;;;;;;;;;;32011:33;32026:6;32034:9;32011:14;:33::i;:::-;32007:705;;32068:11;32082:18;32092:7;32082:9;:18::i;32007:705::-;-1:-1:-1;;;;;32604:18:0;;;;;;:7;:18;;;;;;:31;;32627:7;32604:22;:31::i;:::-;-1:-1:-1;;;;;32583:18:0;;;;;;;:7;:18;;;;;;;;;:52;;;;32659:36;;;;;;;32583:18;;32659:36;;;;-1:-1:-1;;;;;;;;;;;32659:36:0;;;;;;;;30980:1750;;;;;;:::o;27731:1830::-;27829:19;27852:10;:8;:10::i;:::-;27829:33;;27867:15;27885:53;27919:18;;27885:29;13107:6;27885:7;:11;;:29;;;;:::i;:53::-;27867:71;-1:-1:-1;27943:15:0;27961:24;27867:71;27973:11;27961;:24::i;:::-;-1:-1:-1;;;;;28008:15:0;;;;;;:7;:15;;;;;;27943:42;;-1:-1:-1;28008:28:0;;27943:42;28008:19;:28::i;37340:2022::-;37442:19;37465:10;:8;:10::i;:::-;37442:33;;37480:15;37498:53;37532:18;;37498:29;13107:6;37498:7;:11;;:29;;;;:::i;:53::-;37480:71;-1:-1:-1;37556:15:0;37574:24;37480:71;37586:11;37574;:24::i;:::-;-1:-1:-1;;;;;37627:15:0;;;;;;:7;:15;;;;;;37556:42;;-1:-1:-1;37627:28:0;;37647:7;37627:19;:28::i;:::-;-1:-1:-1;;;;;37609:15:0;;;;;;:7;:15;;;;;;;;:46;;;;37678:7;:15;;;;:28;;37698:7;37678:19;:28::i;:::-;-1:-1:-1;;;;;37660:15:0;;;;;;:7;:15;;;;;:46;37718:16;;;;37715:1640;;;-1:-1:-1;;;;;37772:18:0;;;;;;:7;:18;;;;;;:31;;37795:7;37772:22;:31::i;37715:1640::-;37887:32;37909:9;37887:21;:32::i;:::-;37884:1471;;;37936:11;37950:20;37962:7;37950:11;:20::i;:::-;37936:34;;37976:23;38001:16;38019:14;38035:18;38057:38;38069:7;38078:3;38083:11;38057;:38::i;:::-;37975:120;;;;;;;;38101:23;38126:14;38142:16;38160:18;38182:25;38194:7;38203:3;38182:11;:25::i;:::-;38100:107;;;;;;;;38237:36;38254:18;38263:8;38254;:18::i;38237:36::-;38222:12;:51;38288:27;38300:6;38308;38288:11;:27::i;:::-;38330:122;38356:6;38364:9;38375:8;38385:15;38402:8;38412:10;38424:15;38441:10;38330:25;:122::i;37884:1471::-;38521:33;38536:6;38544:9;38521:14;:33::i;:::-;38517:827;;38578:11;38592:18;38602:7;38592:9;:18::i;38517:827::-;-1:-1:-1;;;;;39177:18:0;;;;;;:7;:18;;;;;;:31;;39200:7;39177:22;:31::i;:::-;-1:-1:-1;;;;;39156:18:0;;;;;;:7;:18;;;;;;;;:52;;;;39236:7;:18;;;;:31;;39259:7;39236:22;:31::i;42118:256::-;42233:7;;42282:49;42320:10;42282:33;42306:8;42282:33;:7;42294:6;42282:11;:19::i;:49::-;42256:75;42118:256;-1:-1:-1;;;;;;42118:256:0:o;26596:592::-;26746:16;;;26760:1;26746:16;;;26722:21;26746:16;;;;;26722:21;26746:16;;;;;;;;;;-1:-1:-1;26746:16:0;26722:40;;26791:4;26773;26778:1;26773:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;26773:23:0;;;-1:-1:-1;;;;;26773:23:0;;;;;26817:16;-1:-1:-1;;;;;26817:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26817:23:0;26807:7;;:4;;26812:1;;26807:7;;;;;;;;;;;:33;-1:-1:-1;;;;;26807:33:0;;;-1:-1:-1;;;;;26807:33:0;;;;;26853:63;26870:4;26885:16;26904:11;26853:8;:63::i;:::-;26955:16;-1:-1:-1;;;;;26955:67:0;;27037:11;27063:1;27107:4;27134;27154:15;26955:225;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26955:225:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27196:527;27350:63;27367:4;27382:16;27401:11;27350:8;:63::i;:::-;27456:259;;;-1:-1:-1;;;27456:259:0;;27529:4;27456:259;;;;;;;;;;;;27575:1;27456:259;;;;;;;;;;;;;;27689:15;27456:259;;;;;;-1:-1:-1;;;;;27456:16:0;:32;;;;27496:9;;27456:259;;;;;;;;;;;;;;;27496:9;27456:32;:259;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;27196:527:0:o;16447:131::-;-1:-1:-1;;;;;16545:25:0;16516:4;16545:25;;;:18;:25;;;;;;;;;16447:131::o;41233:409::-;41385:5;;41306:7;;;;;;;;;;41373:18;;:7;;41385:5;;41373:11;:18::i;:::-;41429:11;;41356:35;;-1:-1:-1;41397:16:0;;41429:11;-1:-1:-1;;;41429:11:0;;;;;41416:8;;;;:12;;41429:11;41416:24;;;;;;-1:-1:-1;41445:18:0;41466:17;:3;41416:24;41466:7;:17::i;:::-;41445:38;-1:-1:-1;41494:23:0;41520:49;41445:38;41520:33;41544:8;41520:33;:7;41532:6;41520:11;:19::i;:49::-;41494:75;41605:6;;-1:-1:-1;41613:8:0;;-1:-1:-1;41613:8:0;-1:-1:-1;41233:409:0;;-1:-1:-1;;;;41233:409:0:o;41075:150::-;41156:7;;:17;;41168:4;41156:11;:17::i;:::-;41146:7;:27;41197:10;;:20;;41212:4;41197:14;:20::i;:::-;41184:10;:33;-1:-1:-1;;41075:150:0:o;35982:656::-;36235:11;;;;;-1:-1:-1;;;;;36235:11:0;36227:20;;;;:7;:20;;;;;;:34;;36252:8;36227:24;:34::i;:::-;36212:11;;-1:-1:-1;;;;;36212:11:0;;;;;;36204:20;;;;:7;:20;;;;;;:57;;;;36297:18;;;;;;;:39;;36320:15;36297:22;:39::i;:::-;-1:-1:-1;;;;;36276:18:0;;;;;;;:7;:18;;;;;;:60;;;;36384:13;;;;;36376:22;;;;:38;;36403:10;36376:26;:38::i;:::-;36359:13;;-1:-1:-1;;;;;36359:13:0;;;36351:22;;;;:7;:22;;;;;:63;;;;36434:54;;;;;;-1:-1:-1;;;;;;;;;;;36462:25:0;36471:15;36462:8;:25::i;:::-;36434:54;;;;;;;;;;;;;;;36525:11;;-1:-1:-1;;;;;36525:11:0;;;;;;;36508:49;;-1:-1:-1;;;;;;;;;;;36538:18:0;36547:8;36538;:18::i;:::-;36508:49;;;;;;;;;;;;;;;36594:13;;-1:-1:-1;;;;;36594:13:0;;;;36577:53;;-1:-1:-1;;;;;;;;;;;36609:20:0;36618:10;36609:8;:20::i;:::-;36577:53;;;;;;;;;;;;;;;35982:656;;;;;;;;:::o;16289:150::-;-1:-1:-1;;;;;16393:20:0;;16364:4;16393:20;;;:13;:20;;;;;;;;;:38;;-1:-1:-1;;;;;;;16415:16:0;;;;;:11;:16;;;;;;;;;16289:150;-1:-1:-1;16289:150:0:o;32742:640::-;32969:11;;;;;-1:-1:-1;;;;;32969:11:0;32961:20;;;;:7;:20;;;;;;:34;;32986:8;32961:24;:34::i;:::-;32946:11;;-1:-1:-1;;;;;32946:11:0;;;;;;32938:20;;;;:7;:20;;;;;;;;:57;;;;33031:18;;;;;:7;:18;;;;;:39;;33054:15;33031:22;:39::i;:::-;-1:-1:-1;;;;;33010:18:0;;;;;;;:7;:18;;;;;;;;:60;;;;33118:13;;;;;33110:22;;:7;:22;;;;;:38;;33137:10;33110:26;:38::i;:::-;33093:13;;-1:-1:-1;;;;;33093:13:0;;;33085:22;;;;:7;:22;;;;;:63;;;;33168:54;;;;;;-1:-1:-1;;;;;;;;;;;33196:25:0;33205:15;33196:8;:25::i;:::-;33168:54;;;;;;;;;;;;;;;33259:11;;-1:-1:-1;;;;;33259:11:0;;;;;;;33242:49;;-1:-1:-1;;;;;;;;;;;33272:18:0;33281:8;33272;:18::i;:::-;33242:49;;;;;;;;;;;;;;;33328:13;;-1:-1:-1;;;;;33328:13:0;;;;33311:53;;-1:-1:-1;;;;;;;;;;;33343:20:0;33352:10;33343:8;:20::i;:::-;33311:53;;;;;;;;;;;;;;;32742:640;;;;;;;:::o;39374:740::-;39630:11;;;;;-1:-1:-1;;;;;39630:11:0;39622:20;;;;:7;:20;;;;;;:34;;39647:8;39622:24;:34::i;:::-;39607:11;;-1:-1:-1;;;;;39607:11:0;;;;;;39599:20;;;;:7;:20;;;;;;:57;;;;39692:18;;;;;;;:39;;39715:15;39692:22;:39::i;:::-;-1:-1:-1;;;;;39671:18:0;;;;;;:7;:18;;;;;;;;:60;;;;39758:7;:18;;;;:39;;39781:15;39758:22;:39::i;:::-;-1:-1:-1;;;;;39737:18:0;;;;;;;:7;:18;;;;;;;;:60;;;;39845:13;;;;;39837:22;;:7;:22;;;;;:38;;39864:10;39837:26;:38::i;:::-;39820:13;;-1:-1:-1;;;;;39820:13:0;;;39812:22;;;;:7;:22;;;;;:63;;;;39900:54;;;;;;-1:-1:-1;;;;;;;;;;;39928:25:0;39937:15;39928:8;:25::i

Swarm Source

ipfs://f162ad90558eeed715c1acf01816912063f756625260d4d8a245cb5577f66403
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.