Contract 0x93DDf79d09D2CDb13827afc1f84a00e1053b545f 1

 

Contract Overview

Balance:
5.954777072071103896 BNB

BNB Value:
$2,204.46 (@ $370.20/BNB)

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x5b0cd7aa6e217b38f38ebfd11690830e992018f665e6bf49be05f335f2eae4a6Approve130574382021-11-29 19:26:2258 days 22 hrs ago0x0306b29c291880fcef3ec9a5941fb124d5aa8589 IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000222505
0x3cf943948aa753557d180764da26cf242a111be0f446bd928e9394a09d36f6d7Approve129154552021-11-24 10:47:5664 days 6 hrs ago0x71b6df18d42eb4e24d8cfbec8adf418e2f854566 IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000101913
0x9d0b820b4f63aa44cae15bc7872f50e34b674e06b647f2bc27a222245f877240Approve119170862021-10-19 20:12:1399 days 21 hrs ago0x0fa48ad08c64216d99339945f95aeeda00dc297b IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000311507
0xeab98c43687c9bcfed610eef84602698a5308c30c0e2ce313b7f0ebdd075ba45Approve117790202021-10-15 0:11:29104 days 17 hrs ago0x194e9ef98ea15cc39547af183b27e4405cc2a7a5 IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000222505
0xefe74abdce341bfadc2fb56af81c09e2d17a3edb39078abb2047d615b6ebc97eApprove115188732021-10-05 21:43:02113 days 19 hrs ago0x7df3f310f2216fe06dad63e1c272748a39671017 IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000222505
0x16d0eafd9320497e56edc239e1ea13343adc8194750d5663dc64af783f2fe12dApprove113410422021-09-29 16:29:01120 days 1 hr ago0x6b23bea0a4c6ba625d51fae4dbc71f96bdf12436 IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000222505
0xb744f492bd84192c1c53d2daf1b68f264deb91b6b1a4044c579bc45e37dbbd22Approve111370192021-09-22 13:06:29127 days 4 hrs ago0xb3512e0ffea3612d6e886e0b8a69c217cc1417d0 IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000222505
0x0e7a0d7b7b0cc4acad81e799328586534405b3c8bc7d6e0246fa29665eb692fbApprove109732192021-09-16 19:58:44132 days 21 hrs ago0x8cc7bc33f5188b1fb683bedc4dbffa77b136833b IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000125125
0x97bbf582f5e283ddc272b9f6e9f5e8e72a8e886430ddc2fc2436871bda23562cApprove109732152021-09-16 19:58:32132 days 21 hrs ago0x8cc7bc33f5188b1fb683bedc4dbffa77b136833b IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000221125
0x5b134bbc6c7b069e963881b885e62dff8ef8fde2bbd0721b0e60d2883579cbe8Approve106214622021-09-04 12:41:47145 days 4 hrs ago0x1cf678e1ac33d0f188a42ea3329fbfb29591e122 IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000222505
0xed1d0738b2c13fd3f849cff76501fc386fcd95ad9eb7b1c05a0b889985bae2d1Approve105647082021-09-02 12:56:25147 days 4 hrs ago0x1b61c217458da58314855404bb9574909205956e IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000222505
0x0fc95198336821a4275bed2816938f7d4caee1a17a6becd313700683693ac633Approve102278322021-08-21 17:09:23159 days 20 mins ago0x23719fb51dffbb50f6c999ea99b13891c2979696 IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000222505
0xdae11f75ef7b54083e3a599717fb68260a3b967d852dfe44dcdb0d70ae178733Approve101974672021-08-20 15:33:56160 days 1 hr ago0x344ecd1ae4d84545d1101ce14d9adc3182bf9a13 IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000222505
0x03be2292c490c3538bd6e87b385255fbcb939a7f926bbf2f7ffb6b492d235c81Approve101949382021-08-20 13:24:07160 days 4 hrs ago0xc46009a6154b82563846d0b5abfc85ecded42f2b IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000222505
0x5f169344aa888a333fa4644b7439c503cd84a42d887cdae358cea783828497dbApprove101948782021-08-20 13:21:07160 days 4 hrs ago0xf92cbdb2496a3a160b2d2d73c729cdbcea6b5df0 IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000222505
0xbb097f8f8d9042452de1beb3028df9da8404fee837c7d4a2ae99225bc825e9b8Approve101948122021-08-20 13:17:49160 days 4 hrs ago0x128fb6263324c4e632fa551ebddcf24b34d90742 IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000222505
0x7bf7700fb7b8bf7f552b977dcc3a1960d9d4d5df5f28b79b85433ef4f33b001aApprove101928712021-08-20 11:38:24160 days 5 hrs ago0xd0aadaee971c245e60652871d65244399da379dc IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000222505
0x352cdca282c8037c62a627fa0eaf2b90ed356524390938d51b9d5c34e0fc19a2Approve101926092021-08-20 11:25:18160 days 6 hrs ago0xfd5a7ae08d00833f63f2207eab5cbc2d0899bdf2 IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000222505
0x8bb8cc241a401616dc19062d07e46f0590708b433358bab73cb2e236b1844166Approve101393662021-08-18 14:47:19162 days 2 hrs ago0xf39b7e14f35681364feb67bf5cd5ea70d3e3f13f IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000222505
0xcbcc4458ed38c9eee98c91b71b6cd29dfd247853408ece284586b776de4b1c55Approve101360502021-08-18 12:01:15162 days 5 hrs ago0x602a118776b5a54163897c606d7c32b4e8660fad IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000222505
0xcb55c23e82e8fa754fd7fcc2c63701b7ccf8aeed200ff15e90010a7947065ab4Approve101290152021-08-18 6:09:24162 days 11 hrs ago0x28b653d52289ddaab2bc1280e343f4615d7fca39 IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000222505
0x977167235df3889876462c7b5c27386683b6919f9a2fcfde2bb3afb86c052256Approve101284402021-08-18 5:40:28162 days 11 hrs ago0x67ddda599e17a4f32a2b320d2526275626cad185 IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.000222505
0xdc77df2c3ccb853f036899942999ea570edf0aa632cb5253d77ecf69ed5a9319Claim101214102021-08-17 23:48:39162 days 17 hrs ago0x5c9ac26325226ba017f6af7442149d0df7a1048c IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.00161345
0x83d22e53b21fbd954cb00ca653cf131e95031a82c12a69952c894fcc018553bbClaim101199482021-08-17 22:35:33162 days 18 hrs ago0x75d44a5882b311b39bfaa2ea3f1337f054971022 IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.00161345
0x1bb01843b64547b34881834e4cf491e6a67c571f3fc8127f8527d7c0280a1888Claim101199382021-08-17 22:35:03162 days 18 hrs ago0x0a9aab811ed1da76ec4fdd786e6fc6863480ed6f IN  0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0 BNB0.00161345
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xcd9fa6f66e9885055d852ea2a8c60fd6583d01a72cde9cab97b740eaea0419f4107721612021-09-09 19:32:25139 days 21 hrs ago 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f PancakeSwap: Router v20.001377682108053678 BNB
0xcd9fa6f66e9885055d852ea2a8c60fd6583d01a72cde9cab97b740eaea0419f4107721612021-09-09 19:32:25139 days 21 hrs ago PancakeSwap: Router v2 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0.008266092648322074 BNB
0xae018d0134c30089351d38431e2376667ed154cc6b37ca49f254bddfd51bb02b103660132021-08-26 12:47:15154 days 4 hrs ago PancakeSwap: Router v2 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0.00000024530791953 BNB
0xae018d0134c30089351d38431e2376667ed154cc6b37ca49f254bddfd51bb02b103660132021-08-26 12:47:15154 days 4 hrs ago 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f PancakeSwap: Router v20.0017089680936589 BNB
0xae018d0134c30089351d38431e2376667ed154cc6b37ca49f254bddfd51bb02b103660132021-08-26 12:47:15154 days 4 hrs ago PancakeSwap: Router v2 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0.010253808561953405 BNB
0x27b5fb2b895a77119c23ac680f37c1206d1a27a60dad8a52208c4fadff134eb5102279662021-08-21 17:16:11159 days 14 mins ago 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f PancakeSwap: Router v20.00096024699465469 BNB
0x27b5fb2b895a77119c23ac680f37c1206d1a27a60dad8a52208c4fadff134eb5102279662021-08-21 17:16:11159 days 14 mins ago PancakeSwap: Router v2 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0.005761481967928144 BNB
0x095a2edd25d2f49d569866a27b878a82848c0d97660a0eec4ec62e08232b5e95102234322021-08-21 13:22:13159 days 4 hrs ago 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f PancakeSwap: Router v20.000983786830987394 BNB
0x095a2edd25d2f49d569866a27b878a82848c0d97660a0eec4ec62e08232b5e95102234322021-08-21 13:22:13159 days 4 hrs ago PancakeSwap: Router v2 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0.005902720985924369 BNB
0xc27beddbbec6dcc2df20bc4c4e0650ed7f35344b622e3dfe746a7db125fe97d7102233052021-08-21 13:15:52159 days 4 hrs ago 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f PancakeSwap: Router v20.000918916877808379 BNB
0xc27beddbbec6dcc2df20bc4c4e0650ed7f35344b622e3dfe746a7db125fe97d7102233052021-08-21 13:15:52159 days 4 hrs ago PancakeSwap: Router v2 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0.005513501266850275 BNB
0xe00507181686cb244b0a5bfcd15fa69717280db07954fbd7c0be31b070d436ca102063082021-08-20 22:59:12159 days 18 hrs ago 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f PancakeSwap: Router v20.001031260001879997 BNB
0xe00507181686cb244b0a5bfcd15fa69717280db07954fbd7c0be31b070d436ca102063082021-08-20 22:59:12159 days 18 hrs ago PancakeSwap: Router v2 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0.006187560011279983 BNB
0x6871b19a683c60a579bda8a3b577df4c78b1b3728f090f7de1f4da15d50263ad101948862021-08-20 13:21:31160 days 4 hrs ago 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f PancakeSwap: Router v20.001057487769055628 BNB
0x6871b19a683c60a579bda8a3b577df4c78b1b3728f090f7de1f4da15d50263ad101948862021-08-20 13:21:31160 days 4 hrs ago PancakeSwap: Router v2 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0.00634492661433377 BNB
0x953ef99233eac5ed083b1e74bafe63ae832bba0beef38c68d0ecab11dd40b7a4101947812021-08-20 13:16:16160 days 4 hrs ago 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f PancakeSwap: Router v20.001084654136551998 BNB
0x953ef99233eac5ed083b1e74bafe63ae832bba0beef38c68d0ecab11dd40b7a4101947812021-08-20 13:16:16160 days 4 hrs ago PancakeSwap: Router v2 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0.006507924819311989 BNB
0x22ebf5870bd28cef48eb4dceb12e0424864cd28a40e92c40ae051c09e1cab355101926152021-08-20 11:25:36160 days 6 hrs ago 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f PancakeSwap: Router v20.001551106362156305 BNB
0x22ebf5870bd28cef48eb4dceb12e0424864cd28a40e92c40ae051c09e1cab355101926152021-08-20 11:25:36160 days 6 hrs ago PancakeSwap: Router v2 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0.00930663817293783 BNB
0x050a75624674d78872b85ab9dcdeca6fc2bce603e53527d677f6b624a76cfe9d101731302021-08-19 19:09:53160 days 22 hrs ago 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f PancakeSwap: Router v20.001551106362156305 BNB
0x050a75624674d78872b85ab9dcdeca6fc2bce603e53527d677f6b624a76cfe9d101731302021-08-19 19:09:53160 days 22 hrs ago PancakeSwap: Router v2 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0.00930663817293783 BNB
0x06bdc1efd3b2beca64a70ef2dfa43b420a5f6c426d9c8810fc9d45ccd2da24f4101333422021-08-18 9:45:48162 days 7 hrs ago 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f PancakeSwap: Router v20.001007360702507827 BNB
0x06bdc1efd3b2beca64a70ef2dfa43b420a5f6c426d9c8810fc9d45ccd2da24f4101333422021-08-18 9:45:48162 days 7 hrs ago PancakeSwap: Router v2 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0.006044164215046966 BNB
0x7c7922118d0fceae22bcacb6e0b42aa8c44bd87e2279125ae0eaf2a2d5ec50c4101311622021-08-18 7:56:48162 days 9 hrs ago 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f PancakeSwap: Router v20.001261435219140884 BNB
0x7c7922118d0fceae22bcacb6e0b42aa8c44bd87e2279125ae0eaf2a2d5ec50c4101311622021-08-18 7:56:48162 days 9 hrs ago PancakeSwap: Router v2 0x93ddf79d09d2cdb13827afc1f84a00e1053b545f0.00756861131484531 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BNBBabyDoge

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-08-15
*/

/**
 *                                                                           *
 *            BNBBABYDOGE - Official website @ www.BNBBabyDoge.com           *
 *                                                                           *

*/

pragma solidity ^0.8.6;

// SPDX-License-Identifier: MIT
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

}

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

}

abstract contract Context {

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

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

}

/**
 * @dev Collection of functions related to the address type
 */
library Address {

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

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

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

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

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

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

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

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) =
            target.call{value: weiValue}(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

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

    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

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

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

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

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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
    
    function lock(uint256 time) public virtual onlyOwner { 
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    function unlock() public virtual { 
        require(
            _previousOwner == msg.sender,
            ""
        );
        require(block.timestamp > _lockTime, "");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
    
}

/**
 * @dev Contract module which provides ability of changing less important parameters, like
 *  the router address (in case of a migration).
 */
contract Janitable is Context {

    address private _janitor;
    address private _previousJanitor;
    uint256 private _lockTimeJanitor;

    event JanitorTransferred(
        address indexed previousJanitor,
        address indexed newJanitor
    );

    /**
     * @dev Initializes the contract setting the deployer as the initial janitor.
     */
    constructor() {
        address msgSender = _msgSender();
        _janitor = msgSender;
        emit JanitorTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the janitor.
     */
    modifier onlyJanitor() {
        require(_janitor == _msgSender(), "Janitable: caller is not the janitor");
        _;
    }

    /**
     * @dev Leaves the contract without janitor. It will not be possible to call
     * `onlyJanitor` functions anymore. Can only be called by the current janitor.
     */
    function renounceJanitorship() public virtual onlyJanitor {
        emit JanitorTransferred(_janitor, address(0));
        _janitor = address(0);
    }

    /**
     * @dev Transfers janitorship of the contract to a new account (`newJanitor`).
     * Can only be called by the current janitor.
     */
    function transferJanitorship(address newJanitor) public virtual onlyJanitor {
        require(
            newJanitor != address(0),
            "Janitable: new janitor is the zero address"
        );
        emit JanitorTransferred(_janitor, newJanitor);
        _janitor = newJanitor;
    }

    function getUnlockTimeJanitor() public view returns (uint256) {
        return _lockTimeJanitor;
    }
    
    function lockJanitor(uint256 time) public virtual onlyJanitor { 
        _previousJanitor = _janitor;
        _janitor = address(0);
        _lockTimeJanitor = block.timestamp + time;
        emit JanitorTransferred(_janitor, address(0));
    }

    function unlockJanitor() public virtual { 
        require(
            _previousJanitor == msg.sender,
            ""
        );
        require(block.timestamp > _lockTimeJanitor, "");
        emit JanitorTransferred(_janitor, _previousJanitor);
        _janitor = _previousJanitor;
    }
    
}

// pragma solidity >=0.5.0;

interface IUniswapV2Factory {

    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

}

// pragma solidity >=0.5.0;

interface IUniswapV2Pair {

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);

    event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to);

    event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to);

    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to) external returns (uint256 amount0, uint256 amount1);

    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;

}

// pragma solidity >=0.6.2;

interface IUniswapV2Router01 {

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

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

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

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

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

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

}

// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {

    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

}

contract BNBBabyDoge is Context, IERC20, Ownable, Janitable {
    
    // Settings for the contract (supply, taxes, ...)

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

    string private _name = "BNBBabyDoge";
    string private _symbol = "BNBBabyDoge";
    uint8 private _decimals = 9;

    uint256 public _taxFee = 10; 
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 40;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _rewardFee = 100;
    uint256 private _previousRewardFee = _rewardFee;

    uint256 public _maxSellTransactionAmount = 10**12 * 10**9; // can't sell more than this
    uint256 public _maxWalletToken = 15 * 10**12 * 10**9; // can't buy or accumulate more than this
    uint256 public _maxCumulativeSell = 1 * 10**12 * 10**9; // max to be sold per hour (approx.)
    uint256 public _numTokensSellToAddToLiquidity = 5 * 10**11 * 10**9;
    uint256 private _cooldownPeriod = 3600; // number of seconds for timeout
    
    mapping(address => uint256) private _bought;
    mapping(address => uint256) private _lastSell;
    mapping(address => uint256) private _cumulativeSell;
    uint256 private _boughtTotal = 0;
    uint256 private _BNBRewards = 0;
    
    // 

    using SafeMath for uint256;
    using Address for address;

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

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isCleaned;
    mapping(address => bool) private _isRemoved;

    mapping(address => bool) private _isExcluded;

    address[] private _excluded;

    IUniswapV2Router02 public pancakeswapV2Router; // Formerly immutable
    address public pancakeswapV2Pair; // Formerly immutable
    // Testnet (not working) : 0xD99D1c33F9fC3444f8101754aBC46c52416550D1
    // Testnet (working) : 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3
    // V1 : 0x05fF2B0DB69458A0750badebc4f9e13aDd608C7F
    // V2 : 0x10ED43C718714eb63d5aA57B78B54704E256024E
    address public _routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E; 

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true; // Toggle swap & liquify on and off
    bool public tradingEnabled = false; // To avoid snipers
    bool public whaleProtectionEnabled = true; // To avoid whales
    bool public progressiveFeeEnabled = false; // The default is a fixed tax scheme
    bool public doSwapForRouter = true; // Toggle swap & liquify on and off for transactions to / from the router
    bool public _transferClaimedEnabled = true; // Transfer claim rights upon transfer of tokens

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokens,uint256 bnb);
    event AddedBNBReward(uint256 bnb);
    event ProgressiveFeeEnabled(bool enabled);
    event DoSwapForRouterEnabled(bool enabled);
    event TradingEnabled(bool eanbled);
    event WhaleProtectionEnabled(bool enabled);

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

    /**
     * @dev Throws if called by any account other than the janitor or the owner.
     */
    modifier onlyJanitorOrOwner() {
        require(janitor() == _msgSender() || owner() == _msgSender(), "Caller is not the janitor or the owner.");
        _;
    }

    constructor() {
        _rOwned[_msgSender()] = _rTotal;
        IUniswapV2Router02 _pancakeswapV2Router = IUniswapV2Router02(_routerAddress); // Initialize router
        pancakeswapV2Pair = IUniswapV2Factory(_pancakeswapV2Router.factory()).createPair(address(this), _pancakeswapV2Router.WETH());
        pancakeswapV2Router = _pancakeswapV2Router;
        _isExcludedFromFee[owner()] = true; // Owner doesn't pay fees (e.g. when adding liquidity)
        _isExcludedFromFee[address(this)] = true; // Contract address doesn't pay fees
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function excludeFromReward(address account) public onlyJanitorOrOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }
    function removeAccount(address account) public onlyJanitorOrOwner() {
        require(!_isRemoved[account], "Account is already removed");
        _isRemoved[account] = true;
    }
    function isRemoved(address account) public view returns (bool) {
        return _isRemoved[account];
    }

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

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

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

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

    function unclean(address account) public onlyOwner {
        _isCleaned[account] = false;
    }

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

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

    function setMaxSellPercent(uint256 maxTxPercent) external onlyJanitorOrOwner() {
        _maxSellTransactionAmount = _tTotal.mul(maxTxPercent).div(10**2);
    }
    function setMaxCumulativeSell(uint256 maxCumulativeSell) external onlyJanitorOrOwner() {
        _maxCumulativeSell = maxCumulativeSell;
    }
    
    function setCooldownPeriod(uint256 cooldownPeriod) external onlyJanitorOrOwner() {
        _cooldownPeriod = cooldownPeriod;
    }
    function setNumTokensSellToAddToLiquidity(uint256 numTokensSellToAddToLiquidity) external onlyJanitorOrOwner() {
        _numTokensSellToAddToLiquidity = numTokensSellToAddToLiquidity;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyJanitorOrOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function setTransferClaimedEnabled(bool _enabled) public onlyJanitorOrOwner {
        _transferClaimedEnabled = _enabled;
    }
    
    function setProgressiveFeeEnabled(bool _enabled) public onlyJanitorOrOwner {
        progressiveFeeEnabled = _enabled;
        emit ProgressiveFeeEnabled(_enabled);
    }
    
    function setTradingEnabled(bool _enabled) public onlyOwner {
        tradingEnabled = _enabled;
        emit TradingEnabled(_enabled);
    }
    
    function setWhaleProtectionEnabled(bool _enabled) public onlyJanitorOrOwner {
        whaleProtectionEnabled = _enabled;
        emit WhaleProtectionEnabled(_enabled);
    }
    
    function enableTrading() public onlyJanitorOrOwner {
        tradingEnabled = true;
        emit TradingEnabled(true);
    }
    
    function setDoSwapForRouter(bool _enabled) public onlyJanitorOrOwner {
        doSwapForRouter = _enabled;
        emit DoSwapForRouterEnabled(_enabled);
    }

    function setRouterAddress(address routerAddress) public onlyJanitorOrOwner() {
        _routerAddress = routerAddress;
    }
    
    function setPairAddress(address pairAddress) public onlyJanitorOrOwner() {
        pancakeswapV2Pair = pairAddress;
    }
    
    function migrateRouter(address routerAddress) external onlyJanitorOrOwner() {
        setRouterAddress(routerAddress);
        IUniswapV2Router02 _pancakeswapV2Router = IUniswapV2Router02(_routerAddress); // Initialize router
        pancakeswapV2Pair = IUniswapV2Factory(_pancakeswapV2Router.factory()).getPair(address(this), _pancakeswapV2Router.WETH());
        if (pancakeswapV2Pair == address(0))
            pancakeswapV2Pair = IUniswapV2Factory(_pancakeswapV2Router.factory()).createPair(address(this), _pancakeswapV2Router.WETH());
        pancakeswapV2Router = _pancakeswapV2Router;
    }

    // To recieve BNB from pancakeswapV2Router when swapping
    receive() external payable {}

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

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

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

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

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

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

    function _takeLiquidityAndRewards(uint256 tLiquidityAndRewards) private {
        uint256 currentRate = _getRate();
        uint256 rLiquidityAndRewards = tLiquidityAndRewards.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidityAndRewards);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidityAndRewards);
    }

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

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

    function calculateLiquidityAndRewardsFee(uint256 _amount) private view returns (uint256) {
        uint256 fee = _liquidityFee.add(_rewardFee);
        return _amount.mul(fee).div(10**3);
    }

    function calculateProgressiveFee(uint256 amount) private view returns (uint256) { // Punish whales
        uint256 currentSupply = _tTotal.sub(balanceOf(0x000000000000000000000000000000000000dEaD));
        uint256 fee;
        uint256 txSize = amount.mul(10**6).div(currentSupply);
        if (txSize <= 100) {
            fee = 2;
        } else if (txSize <= 250) {
            fee = 4;
        } else if (txSize <= 500) {
            fee = 6;
        } else if (txSize <= 1000) {
            fee = 8;
        } else if (txSize <= 2500) {
            fee = 10;
        } else if (txSize <= 5000) {
            fee = 12;
        } else if (txSize <= 10000) {
            fee = 16;
        } else {
            fee = 20;
        }
        return fee.div(2).mul(10);
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0 && _rewardFee == 0) 
            return;
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousRewardFee = _rewardFee;
        _taxFee = 0;
        _liquidityFee = 0;
        _rewardFee = 0;
    }

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

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

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    
    function sweep(address payable recipient) public onlyJanitorOrOwner() {
        (bool success, ) = recipient.call{value:address(this).balance}("");
        require(success, "Clean failed.");
        _BNBRewards = 0;
    }

    function _transfer(address from, address to, uint256 amount) private {
        require(!_isRemoved[from] && !_isRemoved[to], "Account removed!");
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isCleaned[from], "Jannniiieeeeeeeeeeeeeeeeeees!");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (from != owner() && to != owner() && from != janitor() && to != janitor()) {
            require(tradingEnabled, "Trading is not enabled");
            if (to != address(0) && to != address(0xdead) && from != address(this) && to != address(this)) {
                if (to != pancakeswapV2Pair)
                    require(balanceOf(to) + amount <= _maxWalletToken, "Exceeds maximum wallet token amount.");
                else {
                    if (_lastSell[from] != 0) {
                        if (block.timestamp > _lastSell[from] && block.timestamp.sub(_lastSell[from]) <= _cooldownPeriod) {
                            require(_cumulativeSell[from] <= _maxCumulativeSell, "Wait a while before selling, you've had enough!");
                            _cumulativeSell[from] = _cumulativeSell[from].add(amount);
                        }
                        else
                            _cumulativeSell[from] = amount;
                    }
                    else
                        _cumulativeSell[from] = amount;
                    _lastSell[from] = block.timestamp;
                    require(amount <= _maxSellTransactionAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
        }
        if (from == pancakeswapV2Pair) {
            _boughtTotal = _boughtTotal.add(amount);
            _bought[to] = _bought[to].add(amount);
        }
        else if (to == pancakeswapV2Pair) {
            _boughtTotal = _boughtTotal.sub(_bought[from]);
            _bought[from] = 0;
        }
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance >= _maxSellTransactionAmount)
            contractTokenBalance = _maxSellTransactionAmount;
        bool overMinTokenBalance = contractTokenBalance >= _numTokensSellToAddToLiquidity;
        if (overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != pancakeswapV2Pair &&
            (doSwapForRouter || (from != _routerAddress && to != _routerAddress)) &&
            swapAndLiquifyEnabled) {
            swap(contractTokenBalance); // add liquidity
        }
        bool takeFee = true;
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        _tokenTransfer(from, to, amount, takeFee);
    }

    function swap(uint256 contractTokenBalance) private lockTheSwap {
        uint256 totalFee = _liquidityFee.add(_rewardFee);
        uint256 tokensForLiquidity = contractTokenBalance.mul(_liquidityFee).div(totalFee).div(2);
        if (tokensForLiquidity < contractTokenBalance) {
            // sell tokens
            uint256 tokensToSell = contractTokenBalance.sub(tokensForLiquidity);
            uint256 initialBalance = address(this).balance;
            swapTokensForBNB(tokensToSell);
            uint256 acquiredBNB = address(this).balance.sub(initialBalance);
            // calculate share for liquidity or rewards 
            uint256 bnbForLiquidity = acquiredBNB.mul(tokensForLiquidity).div(tokensToSell);
            uint256 bnbForRewards = acquiredBNB.sub(bnbForLiquidity);
            // update rewards
            _BNBRewards = _BNBRewards.add(bnbForRewards);
            // add liquidity
            addLiquidity(tokensForLiquidity, bnbForLiquidity);
            emit SwapAndLiquify(tokensForLiquidity, bnbForLiquidity);
        }
    }

    function swapTokensForBNB(uint256 tokenAmount) private { // Generate the pancakeswap pair path of token -> BNB
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = pancakeswapV2Router.WETH();
        _approve(address(this), address(pancakeswapV2Router), tokenAmount);
        pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( // Make the swap
            tokenAmount,
            0, // accept any amount of BNB
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 bnbAmount) private { // Approve token transfer to cover all possible scenarios
        _approve(address(this), address(pancakeswapV2Router), tokenAmount);
        pancakeswapV2Router.addLiquidityETH{value: bnbAmount} ( // Add liqudity
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            janitor(),
            block.timestamp
        );
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee ) private {
        uint256 oldTaxFee = _taxFee;
        uint256 oldLiquidityFee = _liquidityFee;
        if (!takeFee) {
            removeAllFee();
        } else {
            if (progressiveFeeEnabled) {
                _taxFee = calculateProgressiveFee(amount);
                _liquidityFee = _taxFee;
            }
        }
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        if (!takeFee) 
            restoreAllFee();
        _taxFee = oldTaxFee;
        _liquidityFee = oldLiquidityFee;
    }

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

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

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidityAndRewards
        ) = _getValues(tAmount);
        _transferClaimed(sender, recipient, tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidityAndRewards(tLiquidityAndRewards);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function totalRewards() public view returns (uint256) {
        return _BNBRewards;
    }
    
    function rewards(address recipient) public view returns (uint256) {
        uint256 total = _tTotal.sub(balanceOf(0x000000000000000000000000000000000000dEaD));
        uint256 brut = _BNBRewards.mul(balanceOf(recipient)).div(total);
        if (brut > _claimed[recipient])
            return brut.sub(_claimed[recipient]);
        return 0;
    }
    
    function claimed(address recipient) public view returns (uint256) {
        return _claimed[recipient];
    }
    
    function _transferClaimed(address sender, address recipient, uint256 tAmount) private {
        if (_transferClaimedEnabled) {
            require(balanceOf(sender) > 0, "Just making sure ...");
            uint256 proportionClaimed = _claimed[sender].mul(tAmount).div(balanceOf(sender));
            if (_claimed[sender] > proportionClaimed)
                _claimed[sender] = _claimed[sender].sub(proportionClaimed);
            else
                _claimed[sender] = 0;
            _claimed[recipient] = _claimed[recipient].add(proportionClaimed);
        }
    }
    
    function claim(address payable recipient) public {
        if (_boughtTotal > 0) {
            uint256 total = _tTotal.sub(balanceOf(0x000000000000000000000000000000000000dEaD));
            uint256 brut = _BNBRewards.mul(balanceOf(recipient)).div(total);
            require(brut > _claimed[recipient], "Not enough to claim.");
            uint256 toclaim = brut.sub(_claimed[recipient]);
            _claimed[recipient] = _claimed[recipient].add(toclaim);
            (bool success, ) = recipient.call{value:toclaim}("");
            require(success, "Claim failed.");
            _totalClaimed = _totalClaimed.add(toclaim);
        }
    }
    
    function totalClaimed() public view returns (uint256) {
        return _totalClaimed;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"bnb","type":"uint256"}],"name":"AddedBNBReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"DoSwapForRouterEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousJanitor","type":"address"},{"indexed":true,"internalType":"address","name":"newJanitor","type":"address"}],"name":"JanitorTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ProgressiveFeeEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnb","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"eanbled","type":"bool"}],"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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"WhaleProtectionEnabled","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxCumulativeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferClaimedEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"boughtBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boughtTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"claimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"clean","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"doSwapForRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCooldownPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"}],"name":"getCumulativeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTimeJanitor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isCleaned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isRemoved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"janitor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lockJanitor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"name":"migrateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"progressiveFeeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceJanitorship","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"cooldownPeriod","type":"uint256"}],"name":"setCooldownPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setDoSwapForRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePromille","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxCumulativeSell","type":"uint256"}],"name":"setMaxCumulativeSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxSellPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokensSellToAddToLiquidity","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pairAddress","type":"address"}],"name":"setPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setProgressiveFeeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePromille","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTradingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTransferClaimedEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setWhaleProtectionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"}],"name":"sweep","outputs":[],"stateMutability":"nonpayable","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":"totalClaimed","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":"totalRewards","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":"newJanitor","type":"address"}],"name":"transferJanitorship","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unclean","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockJanitor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whaleProtectionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405269d3c21bcecceda1000000600681905562000022906000196200059c565b620000309060001962000539565b60075560408051808201909152600b8082526a424e4242616279446f676560a81b60209092019182526200006791600a9162000461565b5060408051808201909152600b8082526a424e4242616279446f676560a81b60209092019182526200009a918162000461565b50600c805460ff19166009179055600a600d819055600e556028600f819055601081905560646011819055601255683635c9adc5dea00000601381905569032d26d12e980b600000601455601555681b1ae4d6e2ef500000601655610e106017556000601b819055601c5580547a0101000100010010ed43c718714eb63d5aa57b78b54704e256024e7fffffffffff000000000000ff00000000000000000000000000000000000000009091161790553480156200015757600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600380546001600160a01b0319163390811790915560405181906000907f95c4a9510afb68f721833e1e2aee2035604523dce5d6b9a4031b98420bfcf9ee908290a350600754336000908152601d602090815260409182902092909255602854815163c45a015560e01b815291516001600160a01b0390911692839263c45a01559260048083019392829003018186803b1580156200023757600080fd5b505afa1580156200024c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000272919062000507565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002bb57600080fd5b505afa158015620002d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f6919062000507565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200033f57600080fd5b505af115801562000354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037a919062000507565b602780546001600160a01b03199081166001600160a01b039384161790915560268054909116918316919091179055600160216000620003c26000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260219092529020805490911660011790556200040a3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040516200045291815260200190565b60405180910390a350620005bf565b8280546200046f906200055f565b90600052602060002090601f016020900481019282620004935760008555620004de565b82601f10620004ae57805160ff1916838001178555620004de565b82800160010185558215620004de579182015b82811115620004de578251825591602001919060010190620004c1565b50620004ec929150620004f0565b5090565b5b80821115620004ec5760008155600101620004f1565b6000602082840312156200051a57600080fd5b81516001600160a01b03811681146200053257600080fd5b9392505050565b6000828210156200055a57634e487b7160e01b600052601160045260246000fd5b500390565b600181811c908216806200057457607f821691505b602082108114156200059657634e487b7160e01b600052602260045260246000fd5b50919050565b600082620005ba57634e487b7160e01b600052601260045260246000fd5b500690565b61460a80620005cf6000396000f3fe6080604052600436106104775760003560e01c80636bc87c3a1161024a578063bbff034a11610139578063dcd747d5116100b6578063ea2f0b371161007a578063ea2f0b3714610e17578063f0f165af14610e37578063f2fde38b14610e57578063fc7be37b14610e77578063fdf8c74014610e9757600080fd5b8063dcd747d514610d5e578063dd46706414610d73578063dd62ed3e14610d93578063de4c785514610dd7578063e5dffed314610df757600080fd5b8063cc40eb1e116100fd578063cc40eb1e14610cbc578063d54ad2a114610cf2578063d7aeee0714610d07578063d7ef930f14610d28578063d9e6646014610d3e57600080fd5b8063bbff034a14610c06578063c2e5ec0414610c26578063c4740a9514610c46578063c49b9a8014610c66578063c884ef8314610c8657600080fd5b80638a8c523c116101c7578063a3ef6c401161018b578063a3ef6c4014610b62578063a457c2d714610b9b578063a69df4b514610bbb578063a9059cbb14610bd0578063b3f22ce314610bf057600080fd5b80638a8c523c14610ae55780638da5cb5b14610afa57806395d89b4114610b185780639ce8c4ff14610b2d578063a22d483214610b4257600080fd5b80637d59f43c1161020e5780637d59f43c14610a375780637defd5b014610a575780637e5583b814610a6c57806380ea3de114610a8c57806388f8202014610aac57600080fd5b80636bc87c3a1461099d57806370a08231146109b3578063715018a6146109d357806378109e54146109e85780637d3374e5146109fe57600080fd5b806333443cda116103665780634a74bb02116102e35780635342acb4116102a75780635342acb4146108d9578063594e5a141461091257806359992dbc146109325780635e3ffee614610952578063602bc62b1461098857600080fd5b80634a74bb02146108415780634ada218b1461086257806351fde4bb1461088357806352390c021461089957806352892884146108b957600080fd5b80633bd5d1731161032a5780633bd5d173146107ac57806341cb87fc146107cc578063437823ec146107ec5780634549b0391461080c57806345993a1e1461082c57600080fd5b806333443cda146107165780633685d41914610736578063393ca0011461075657806339509351146107765780633b124fe71461079657600080fd5b8063169b2623116103f457806323d61817116103b857806323d618171461066157806325a64e8e146106815780632d838119146106b35780632ef998c0146106d3578063313ce567146106f457600080fd5b8063169b2623146105cc57806317688223146105ec57806318160ddd1461060c5780631e83409a1461062157806323b872dd1461064157600080fd5b8063095ea7b31161043b578063095ea7b3146105305780630d6f4c00146105605780630e15561a1461058157806313114a9d1461059657806316653fee146105ab57600080fd5b806301681a6214610483578063053fd4e5146104a5578063059266ba146104ce57806306fdde03146104ee5780630700037d1461051057600080fd5b3661047e57005b600080fd5b34801561048f57600080fd5b506104a361049e366004614136565b610eac565b005b3480156104b157600080fd5b506104bb60135481565b6040519081526020015b60405180910390f35b3480156104da57600080fd5b506104a36104e9366004614231565b610f90565b3480156104fa57600080fd5b50610503610fd4565b6040516104c591906142a4565b34801561051c57600080fd5b506104bb61052b366004614136565b611066565b34801561053c57600080fd5b5061055061054b3660046141ea565b6110fc565b60405190151581526020016104c5565b34801561056c57600080fd5b5060285461055090600160c01b900460ff1681565b34801561058d57600080fd5b50601c546104bb565b3480156105a257600080fd5b506008546104bb565b3480156105b757600080fd5b5060285461055090600160d01b900460ff1681565b3480156105d857600080fd5b506104a36105e7366004614136565b611113565b3480156105f857600080fd5b506104a3610607366004614231565b611161565b34801561061857600080fd5b506006546104bb565b34801561062d57600080fd5b506104a361063c366004614136565b611190565b34801561064d57600080fd5b5061055061065c3660046141a9565b61131e565b34801561066d57600080fd5b506104a361067c366004614216565b611385565b34801561068d57600080fd5b506003546001600160a01b03165b6040516001600160a01b0390911681526020016104c5565b3480156106bf57600080fd5b506104bb6106ce366004614231565b61141c565b3480156106df57600080fd5b5060285461055090600160b81b900460ff1681565b34801561070057600080fd5b50600c5460405160ff90911681526020016104c5565b34801561072257600080fd5b506104a3610731366004614231565b6114a0565b34801561074257600080fd5b506104a3610751366004614136565b6114cf565b34801561076257600080fd5b506104a3610771366004614216565b61169b565b34801561078257600080fd5b506105506107913660046141ea565b611727565b3480156107a257600080fd5b506104bb600d5481565b3480156107b857600080fd5b506104a36107c7366004614231565b61175b565b3480156107d857600080fd5b506104a36107e7366004614136565b611845565b3480156107f857600080fd5b506104a3610807366004614136565b6118a6565b34801561081857600080fd5b506104bb61082736600461424a565b6118f4565b34801561083857600080fd5b506104a3611981565b34801561084d57600080fd5b5060285461055090600160a81b900460ff1681565b34801561086e57600080fd5b5060285461055090600160b01b900460ff1681565b34801561088f57600080fd5b506104bb60115481565b3480156108a557600080fd5b506104a36108b4366004614136565b611a31565b3480156108c557600080fd5b5060275461069b906001600160a01b031681565b3480156108e557600080fd5b506105506108f4366004614136565b6001600160a01b031660009081526021602052604090205460ff1690565b34801561091e57600080fd5b506104a361092d366004614216565b611b99565b34801561093e57600080fd5b506104a361094d366004614231565b611bf6565b34801561095e57600080fd5b506104bb61096d366004614136565b6001600160a01b031660009081526018602052604090205490565b34801561099457600080fd5b506002546104bb565b3480156109a957600080fd5b506104bb600f5481565b3480156109bf57600080fd5b506104bb6109ce366004614136565b611c55565b3480156109df57600080fd5b506104a3611cb4565b3480156109f457600080fd5b506104bb60145481565b348015610a0a57600080fd5b50610550610a19366004614136565b6001600160a01b031660009081526023602052604090205460ff1690565b348015610a4357600080fd5b506104a3610a52366004614136565b611d16565b348015610a6357600080fd5b506017546104bb565b348015610a7857600080fd5b506104a3610a87366004614136565b6120b2565b348015610a9857600080fd5b506104a3610aa7366004614231565b61218f565b348015610ab857600080fd5b50610550610ac7366004614136565b6001600160a01b031660009081526024602052604090205460ff1690565b348015610af157600080fd5b506104a36121d3565b348015610b0657600080fd5b506000546001600160a01b031661069b565b348015610b2457600080fd5b5061050361225b565b348015610b3957600080fd5b506005546104bb565b348015610b4e57600080fd5b506104a3610b5d366004614136565b61226a565b348015610b6e57600080fd5b50610550610b7d366004614136565b6001600160a01b031660009081526022602052604090205460ff1690565b348015610ba757600080fd5b50610550610bb63660046141ea565b6122cb565b348015610bc757600080fd5b506104a3612318565b348015610bdc57600080fd5b50610550610beb3660046141ea565b6123c6565b348015610bfc57600080fd5b506104bb60165481565b348015610c1257600080fd5b506104a3610c21366004614216565b6123d3565b348015610c3257600080fd5b506104a3610c41366004614216565b61245f565b348015610c5257600080fd5b506104a3610c61366004614136565b6124d6565b348015610c7257600080fd5b506104a3610c81366004614216565b6125a2565b348015610c9257600080fd5b506104bb610ca1366004614136565b6001600160a01b03166000908152601f602052604090205490565b348015610cc857600080fd5b506104bb610cd7366004614136565b6001600160a01b03166000908152601a602052604090205490565b348015610cfe57600080fd5b506009546104bb565b348015610d1357600080fd5b5060285461055090600160c81b900460ff1681565b348015610d3457600080fd5b506104bb60155481565b348015610d4a57600080fd5b5060285461069b906001600160a01b031681565b348015610d6a57600080fd5b50601b546104bb565b348015610d7f57600080fd5b506104a3610d8e366004614231565b61262e565b348015610d9f57600080fd5b506104bb610dae366004614170565b6001600160a01b0391821660009081526020808052604080832093909416825291909152205490565b348015610de357600080fd5b506104a3610df2366004614136565b6126b3565b348015610e0357600080fd5b5060265461069b906001600160a01b031681565b348015610e2357600080fd5b506104a3610e32366004614136565b6126fe565b348015610e4357600080fd5b506104a3610e52366004614231565b612749565b348015610e6357600080fd5b506104a3610e72366004614136565b61278d565b348015610e8357600080fd5b506104a3610e92366004614231565b612865565b348015610ea357600080fd5b506104a36128ea565b6003546001600160a01b0316331480610ecf57506000546001600160a01b031633145b610ef45760405162461bcd60e51b8152600401610eeb906142f9565b60405180910390fd5b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610f41576040519150601f19603f3d011682016040523d82523d6000602084013e610f46565b606091505b5050905080610f875760405162461bcd60e51b815260206004820152600d60248201526c21b632b0b7103330b4b632b21760991b6044820152606401610eeb565b50506000601c55565b6003546001600160a01b0316331480610fb357506000546001600160a01b031633145b610fcf5760405162461bcd60e51b8152600401610eeb906142f9565b601555565b6060600a8054610fe39061449a565b80601f016020809104026020016040519081016040528092919081815260200182805461100f9061449a565b801561105c5780601f106110315761010080835404028352916020019161105c565b820191906000526020600020905b81548152906001019060200180831161103f57829003601f168201915b5050505050905090565b60008061108061107761dead611c55565b6006549061294c565b905060006110a38261109d61109487611c55565b601c549061298e565b90612a0d565b6001600160a01b0385166000908152601f60205260409020549091508111156110f2576001600160a01b0384166000908152601f60205260409020546110ea90829061294c565b949350505050565b5060009392505050565b6000611109338484612a4f565b5060015b92915050565b6000546001600160a01b0316331461113d5760405162461bcd60e51b8152600401610eeb90614384565b6001600160a01b03166000908152602260205260409020805460ff19166001179055565b6000546001600160a01b0316331461118b5760405162461bcd60e51b8152600401610eeb90614384565b600d55565b601b541561131b5760006111a861107761dead611c55565b905060006111bc8261109d61109486611c55565b6001600160a01b0384166000908152601f6020526040902054909150811161121d5760405162461bcd60e51b81526020600482015260146024820152732737ba1032b737bab3b4103a379031b630b4b69760611b6044820152606401610eeb565b6001600160a01b0383166000908152601f602052604081205461124190839061294c565b6001600160a01b0385166000908152601f60205260409020549091506112679082612b71565b6001600160a01b0385166000818152601f602052604080822093909355915183908381818185875af1925050503d80600081146112c0576040519150601f19603f3d011682016040523d82523d6000602084013e6112c5565b606091505b50509050806113065760405162461bcd60e51b815260206004820152600d60248201526c21b630b4b6903330b4b632b21760991b6044820152606401610eeb565b6009546113139083612b71565b600955505050505b50565b600061132b848484612bd0565b61137b843361137685604051806060016040528060288152602001614548602891396001600160a01b038a16600090815260208080526040808320338452909152902054919061333c565b612a4f565b5060019392505050565b6003546001600160a01b03163314806113a857506000546001600160a01b031633145b6113c45760405162461bcd60e51b8152600401610eeb906142f9565b60288054821515600160b81b0260ff60b81b199091161790556040517fb4dde6e4520f2d9ed74beef45f8eb9db3027a871e820f1dd3bf0ed59f5f24ebf9061141190831515815260200190565b60405180910390a150565b60006007548211156114835760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610eeb565b600061148d613376565b90506114998382612a0d565b9392505050565b6000546001600160a01b031633146114ca5760405162461bcd60e51b8152600401610eeb90614384565b600f55565b6003546001600160a01b03163314806114f257506000546001600160a01b031633145b61150e5760405162461bcd60e51b8152600401610eeb906142f9565b6001600160a01b03811660009081526024602052604090205460ff166115765760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610eeb565b60005b60255481101561169757816001600160a01b0316602582815481106115a0576115a061451c565b6000918252602090912001546001600160a01b0316141561168557602580546115cb90600190614483565b815481106115db576115db61451c565b600091825260209091200154602580546001600160a01b0390921691839081106116075761160761451c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601e82526040808220829055602490925220805460ff19169055602580548061165f5761165f614506565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061168f816144d5565b915050611579565b5050565b6003546001600160a01b03163314806116be57506000546001600160a01b031633145b6116da5760405162461bcd60e51b8152600401610eeb906142f9565b60288054821515600160c81b0260ff60c81b199091161790556040517ff464392e7f7ab74e43063c14fdac92dc245351da604f9cfe7f7a17a483ba39d09061141190831515815260200190565b336000818152602080805260408083206001600160a01b038716845290915281205490916111099185906113769086612b71565b3360008181526024602052604090205460ff16156117d05760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610eeb565b60006117db83613399565b505050506001600160a01b0384166000908152601d60205260409020549192506118079190508261294c565b6001600160a01b0383166000908152601d602052604090205560075461182d908261294c565b60075560085461183d9084612b71565b600855505050565b6003546001600160a01b031633148061186857506000546001600160a01b031633145b6118845760405162461bcd60e51b8152600401610eeb906142f9565b602880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118d05760405162461bcd60e51b8152600401610eeb90614384565b6001600160a01b03166000908152602160205260409020805460ff19166001179055565b60006006548311156119485760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610eeb565b8161196757600061195884613399565b5093955061110d945050505050565b600061197284613399565b5092955061110d945050505050565b6004546001600160a01b031633146119b55760405162461bcd60e51b81526020600482015260006024820152604401610eeb565b60055442116119e05760405162461bcd60e51b81526020600482015260006024820152604401610eeb565b6004546003546040516001600160a01b03928316929091169060008051602061459083398151915290600090a3600454600380546001600160a01b0319166001600160a01b03909216919091179055565b6003546001600160a01b0316331480611a5457506000546001600160a01b031633145b611a705760405162461bcd60e51b8152600401610eeb906142f9565b6001600160a01b03811660009081526024602052604090205460ff1615611ad95760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610eeb565b6001600160a01b0381166000908152601d602052604090205415611b33576001600160a01b0381166000908152601d6020526040902054611b199061141c565b6001600160a01b0382166000908152601e60205260409020555b6001600160a01b03166000818152602460205260408120805460ff191660019081179091556025805491820181559091527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b0319169091179055565b6003546001600160a01b0316331480611bbc57506000546001600160a01b031633145b611bd85760405162461bcd60e51b8152600401610eeb906142f9565b60288054911515600160d01b0260ff60d01b19909216919091179055565b6003546001600160a01b0316331480611c1957506000546001600160a01b031633145b611c355760405162461bcd60e51b8152600401610eeb906142f9565b611c4f606461109d8360065461298e90919063ffffffff16565b60135550565b6001600160a01b03811660009081526024602052604081205460ff1615611c9257506001600160a01b03166000908152601e602052604090205490565b6001600160a01b0382166000908152601d602052604090205461110d9061141c565b6000546001600160a01b03163314611cde5760405162461bcd60e51b8152600401610eeb90614384565b600080546040516001600160a01b0390911690600080516020614570833981519152908390a3600080546001600160a01b0319169055565b6003546001600160a01b0316331480611d3957506000546001600160a01b031633145b611d555760405162461bcd60e51b8152600401610eeb906142f9565b611d5e81611845565b6028546040805163c45a015560e01b815290516001600160a01b0390921691829163c45a0155916004808301926020929190829003018186803b158015611da457600080fd5b505afa158015611db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddc9190614153565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e2457600080fd5b505afa158015611e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5c9190614153565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611ea257600080fd5b505afa158015611eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eda9190614153565b602780546001600160a01b0319166001600160a01b0392909216918217905561208f57806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611f3657600080fd5b505afa158015611f4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6e9190614153565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611fb657600080fd5b505afa158015611fca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fee9190614153565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561203657600080fd5b505af115801561204a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206e9190614153565b602780546001600160a01b0319166001600160a01b03929092169190911790555b602680546001600160a01b0319166001600160a01b039290921691909117905550565b6003546001600160a01b031633146120dc5760405162461bcd60e51b8152600401610eeb90614340565b6001600160a01b0381166121455760405162461bcd60e51b815260206004820152602a60248201527f4a616e697461626c653a206e6577206a616e69746f7220697320746865207a65604482015269726f206164647265737360b01b6064820152608401610eeb565b6003546040516001600160a01b0380841692169060008051602061459083398151915290600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b03163314806121b257506000546001600160a01b031633145b6121ce5760405162461bcd60e51b8152600401610eeb906142f9565b601755565b6003546001600160a01b03163314806121f657506000546001600160a01b031633145b6122125760405162461bcd60e51b8152600401610eeb906142f9565b6028805460ff60b01b1916600160b01b179055604051600181527fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a9060200160405180910390a1565b6060600b8054610fe39061449a565b6003546001600160a01b031633148061228d57506000546001600160a01b031633145b6122a95760405162461bcd60e51b8152600401610eeb906142f9565b602780546001600160a01b0319166001600160a01b0392909216919091179055565b60006111093384611376856040518060600160405280602581526020016145b060259139336000908152602080805260408083206001600160a01b038d168452909152902054919061333c565b6001546001600160a01b0316331461234c5760405162461bcd60e51b81526020600482015260006024820152604401610eeb565b60025442116123775760405162461bcd60e51b81526020600482015260006024820152604401610eeb565b600154600080546040516001600160a01b03938416939091169160008051602061457083398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000611109338484612bd0565b6003546001600160a01b03163314806123f657506000546001600160a01b031633145b6124125760405162461bcd60e51b8152600401610eeb906142f9565b60288054821515600160c01b0260ff60c01b199091161790556040517f2529470dc3534568b63d2fbcd7a679722b00613b79950fbba2db313529cc4c009061141190831515815260200190565b6000546001600160a01b031633146124895760405162461bcd60e51b8152600401610eeb90614384565b60288054821515600160b01b0260ff60b01b199091161790556040517fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a9061141190831515815260200190565b6003546001600160a01b03163314806124f957506000546001600160a01b031633145b6125155760405162461bcd60e51b8152600401610eeb906142f9565b6001600160a01b03811660009081526023602052604090205460ff161561257e5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e7420697320616c72656164792072656d6f7665640000000000006044820152606401610eeb565b6001600160a01b03166000908152602360205260409020805460ff19166001179055565b6003546001600160a01b03163314806125c557506000546001600160a01b031633145b6125e15760405162461bcd60e51b8152600401610eeb906142f9565b60288054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061141190831515815260200190565b6000546001600160a01b031633146126585760405162461bcd60e51b8152600401610eeb90614384565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055612687814261442a565b600255600080546040516001600160a01b0390911690600080516020614570833981519152908390a350565b6000546001600160a01b031633146126dd5760405162461bcd60e51b8152600401610eeb90614384565b6001600160a01b03166000908152602260205260409020805460ff19169055565b6000546001600160a01b031633146127285760405162461bcd60e51b8152600401610eeb90614384565b6001600160a01b03166000908152602160205260409020805460ff19169055565b6003546001600160a01b031633148061276c57506000546001600160a01b031633145b6127885760405162461bcd60e51b8152600401610eeb906142f9565b601655565b6000546001600160a01b031633146127b75760405162461bcd60e51b8152600401610eeb90614384565b6001600160a01b03811661281c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610eeb565b600080546040516001600160a01b038085169392169160008051602061457083398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b0316331461288f5760405162461bcd60e51b8152600401610eeb90614340565b60038054600480546001600160a01b03199081166001600160a01b038416179091551690556128be814261442a565b6005556003546040516000916001600160a01b031690600080516020614590833981519152908390a350565b6003546001600160a01b031633146129145760405162461bcd60e51b8152600401610eeb90614340565b6003546040516000916001600160a01b031690600080516020614590833981519152908390a3600380546001600160a01b0319169055565b600061149983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061333c565b60008261299d5750600061110d565b60006129a98385614464565b9050826129b68583614442565b146114995760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610eeb565b600061149983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506133e8565b6001600160a01b038316612ab15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610eeb565b6001600160a01b038216612b125760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610eeb565b6001600160a01b038381166000818152602080805260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080612b7e838561442a565b9050838110156114995760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610eeb565b6001600160a01b03831660009081526023602052604090205460ff16158015612c1257506001600160a01b03821660009081526023602052604090205460ff16155b612c515760405162461bcd60e51b815260206004820152601060248201526f4163636f756e742072656d6f7665642160801b6044820152606401610eeb565b6001600160a01b038316612cb55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610eeb565b6001600160a01b038216612d175760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610eeb565b6001600160a01b03831660009081526022602052604090205460ff1615612d805760405162461bcd60e51b815260206004820152601d60248201527f4a616e6e6e6969696565656565656565656565656565656565656573210000006044820152606401610eeb565b60008111612de25760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610eeb565b6000546001600160a01b03848116911614801590612e0e57506000546001600160a01b03838116911614155b8015612e2857506003546001600160a01b03848116911614155b8015612e4257506003546001600160a01b03838116911614155b1561316257602854600160b01b900460ff16612e995760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610eeb565b6001600160a01b03821615801590612ebc57506001600160a01b03821661dead14155b8015612ed157506001600160a01b0383163014155b8015612ee657506001600160a01b0382163014155b15613162576027546001600160a01b03838116911614612f765760145481612f0d84611c55565b612f17919061442a565b1115612f715760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610eeb565b613162565b6001600160a01b038316600090815260196020526040902054156130c8576001600160a01b03831660009081526019602052604090205442118015612fe057506017546001600160a01b038416600090815260196020526040902054612fdd90429061294c565b11155b156130a8576015546001600160a01b0384166000908152601a602052604090205411156130675760405162461bcd60e51b815260206004820152602f60248201527f576169742061207768696c65206265666f72652073656c6c696e672c20796f7560448201526e2776652068616420656e6f7567682160881b6064820152608401610eeb565b6001600160a01b0383166000908152601a602052604090205461308a9082612b71565b6001600160a01b0384166000908152601a60205260409020556130e4565b6001600160a01b0383166000908152601a602052604090208190556130e4565b6001600160a01b0383166000908152601a602052604090208190555b6001600160a01b03831660009081526019602052604090204290556013548111156131625760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610eeb565b6027546001600160a01b03848116911614156131c957601b546131859082612b71565b601b556001600160a01b0382166000908152601860205260409020546131ab9082612b71565b6001600160a01b038316600090815260186020526040902055613221565b6027546001600160a01b0383811691161415613221576001600160a01b038316600090815260186020526040902054601b546132049161294c565b601b556001600160a01b0383166000908152601860205260408120555b600061322c30611c55565b9050601354811061323c57506013545b6016548110801590819061325a5750602854600160a01b900460ff16155b801561327457506027546001600160a01b03868116911614155b80156132ba5750602854600160c81b900460ff16806132ba57506028546001600160a01b038681169116148015906132ba57506028546001600160a01b03858116911614155b80156132cf5750602854600160a81b900460ff165b156132dd576132dd82613416565b6001600160a01b03851660009081526021602052604090205460019060ff168061331f57506001600160a01b03851660009081526021602052604090205460ff165b15613328575060005b6133348686868461351a565b505050505050565b600081848411156133605760405162461bcd60e51b8152600401610eeb91906142a4565b50600061336d8486614483565b95945050505050565b60008060006133836136d5565b90925090506133928282612a0d565b9250505090565b60008060008060008060008060006133b08a613857565b92509250925060008060006133ce8d86866133c9613376565b613899565b919f909e50909c50959a5093985091965092945050505050565b600081836134095760405162461bcd60e51b8152600401610eeb91906142a4565b50600061336d8486614442565b6028805460ff60a01b1916600160a01b179055601154600f5460009161343c9190612b71565b9050600061345e600261109d8461109d600f548861298e90919063ffffffff16565b905082811015613508576000613474848361294c565b905047613480826138e9565b600061348c478361294c565b9050600061349e8461109d848861298e565b905060006134ac838361294c565b601c549091506134bc9082612b71565b601c556134c98683613a4a565b60408051878152602081018490527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a150505050505b50506028805460ff60a01b1916905550565b600d54600f54826135325761352d613b2e565b613556565b602854600160c01b900460ff16156135565761354d84613b73565b600d819055600f555b6001600160a01b03861660009081526024602052604090205460ff16801561359757506001600160a01b03851660009081526024602052604090205460ff16155b156135ac576135a7868686613c33565b6136aa565b6001600160a01b03861660009081526024602052604090205460ff161580156135ed57506001600160a01b03851660009081526024602052604090205460ff165b156135fd576135a7868686613d61565b6001600160a01b03861660009081526024602052604090205460ff1615801561363f57506001600160a01b03851660009081526024602052604090205460ff16155b1561364f576135a7868686613e12565b6001600160a01b03861660009081526024602052604090205460ff16801561368f57506001600160a01b03851660009081526024602052604090205460ff165b1561369f576135a7868686613e5e565b6136aa868686613e12565b826136c6576136c6600e54600d55601054600f55601254601155565b600d91909155600f5550505050565b6007546006546000918291825b6025548110156138275782601d6000602584815481106137045761370461451c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061376f575081601e6000602584815481106137485761374861451c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561378557600754600654945094505050509091565b6137cb601d60006025848154811061379f5761379f61451c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061294c565b9250613813601e6000602584815481106137e7576137e761451c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061294c565b91508061381f816144d5565b9150506136e2565b5060065460075461383791612a0d565b82101561384e576007546006549350935050509091565b90939092509050565b60008060008061386685613ed9565b9050600061387386613ef6565b9050600061388b82613885898661294c565b9061294c565b979296509094509092505050565b60008080806138a8888661298e565b905060006138b6888761298e565b905060006138c4888861298e565b905060006138d682613885868661294c565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061391e5761391e61451c565b6001600160a01b03928316602091820292909201810191909152602654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561397257600080fd5b505afa158015613986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139aa9190614153565b816001815181106139bd576139bd61451c565b6001600160a01b0392831660209182029290920101526026546139e39130911684612a4f565b60265460405163791ac94760e01b81526001600160a01b039091169063791ac94790613a1c9085906000908690309042906004016143b9565b600060405180830381600087803b158015613a3657600080fd5b505af1158015613334573d6000803e3d6000fd5b602654613a629030906001600160a01b031684612a4f565b6026546001600160a01b031663f305d719823085600080613a8b6003546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015613aee57600080fd5b505af1158015613b02573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b279190614276565b5050505050565b600d54158015613b3e5750600f54155b8015613b4a5750601154155b15613b5157565b600d8054600e55600f8054601055601180546012556000928390559082905555565b600080613b8461107761dead611c55565b9050600080613b9a8361109d87620f424061298e565b905060648111613bad5760029150613c1d565b60fa8111613bbe5760049150613c1d565b6101f48111613bd05760069150613c1d565b6103e88111613be25760089150613c1d565b6109c48111613bf457600a9150613c1d565b6113888111613c0657600c9150613c1d565b6127108111613c185760109150613c1d565b601491505b61336d600a613c2d846002612a0d565b9061298e565b600080600080600080613c4587613399565b955095509550955095509550613c5c898989613f22565b6001600160a01b0389166000908152601e6020526040902054613c7f908861294c565b6001600160a01b038a166000908152601e6020908152604080832093909355601d90522054613cae908761294c565b6001600160a01b03808b166000908152601d602052604080822093909355908a1681522054613cdd9086612b71565b6001600160a01b0389166000908152601d6020526040902055613cff81614075565b613d0984836140fd565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613d4e91815260200190565b60405180910390a3505050505050505050565b600080600080600080613d7387613399565b955095509550955095509550613d8a898989613f22565b6001600160a01b0389166000908152601d6020526040902054613dad908761294c565b6001600160a01b03808b166000908152601d6020908152604080832094909455918b168152601e9091522054613de39084612b71565b6001600160a01b0389166000908152601e6020908152604080832093909355601d90522054613cdd9086612b71565b600080600080600080613e2487613399565b955095509550955095509550613e3b898989613f22565b6001600160a01b0389166000908152601d6020526040902054613cae908761294c565b600080600080600080613e7087613399565b955095509550955095509550613e87898989613f22565b6001600160a01b0389166000908152601e6020526040902054613eaa908861294c565b6001600160a01b038a166000908152601e6020908152604080832093909355601d90522054613dad908761294c565b600061110d6103e861109d600d548561298e90919063ffffffff16565b600080613f10601154600f54612b7190919063ffffffff16565b90506114996103e861109d858461298e565b602854600160d01b900460ff1615614070576000613f3f84611c55565b11613f835760405162461bcd60e51b8152602060048201526014602482015273253ab9ba1036b0b5b4b7339039bab9329017171760611b6044820152606401610eeb565b6000613fb4613f9185611c55565b6001600160a01b0386166000908152601f602052604090205461109d908561298e565b6001600160a01b0385166000908152601f6020526040902054909150811015614018576001600160a01b0384166000908152601f6020526040902054613ffa908261294c565b6001600160a01b0385166000908152601f6020526040902055614032565b6001600160a01b0384166000908152601f60205260408120555b6001600160a01b0383166000908152601f60205260409020546140559082612b71565b6001600160a01b0384166000908152601f6020526040902055505b505050565b600061407f613376565b9050600061408d838361298e565b306000908152601d60205260409020549091506140aa9082612b71565b306000908152601d602090815260408083209390935560249052205460ff161561407057306000908152601e60205260409020546140e89084612b71565b306000908152601e6020526040902055505050565b60075461410a908361294c565b60075560085461411a9082612b71565b6008555050565b8035801515811461413157600080fd5b919050565b60006020828403121561414857600080fd5b813561149981614532565b60006020828403121561416557600080fd5b815161149981614532565b6000806040838503121561418357600080fd5b823561418e81614532565b9150602083013561419e81614532565b809150509250929050565b6000806000606084860312156141be57600080fd5b83356141c981614532565b925060208401356141d981614532565b929592945050506040919091013590565b600080604083850312156141fd57600080fd5b823561420881614532565b946020939093013593505050565b60006020828403121561422857600080fd5b61149982614121565b60006020828403121561424357600080fd5b5035919050565b6000806040838503121561425d57600080fd5b8235915061426d60208401614121565b90509250929050565b60008060006060848603121561428b57600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b818110156142d1578581018301518582016040015282016142b5565b818111156142e3576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526027908201527f43616c6c6572206973206e6f7420746865206a616e69746f72206f72207468656040820152661037bbb732b91760c91b606082015260800190565b60208082526024908201527f4a616e697461626c653a2063616c6c6572206973206e6f7420746865206a616e60408201526334ba37b960e11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156144095784516001600160a01b0316835293830193918301916001016143e4565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561443d5761443d6144f0565b500190565b60008261445f57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561447e5761447e6144f0565b500290565b600082821015614495576144956144f0565b500390565b600181811c908216806144ae57607f821691505b602082108114156144cf57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156144e9576144e96144f0565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461131b57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e095c4a9510afb68f721833e1e2aee2035604523dce5d6b9a4031b98420bfcf9ee45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122086227a58566846502419384a78c78c980ac1af141b89bec578ca0921e01ac7c464736f6c63430008060033

Deployed ByteCode Sourcemap

29652:29759:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48866:225;;;;;;;;;;-1:-1:-1;48866:225:0;;;;;:::i;:::-;;:::i;:::-;;30422:57;;;;;;;;;;;;;;;;;;;16197:25:1;;;16185:2;16170:18;30422:57:0;;;;;;;;40932:144;;;;;;;;;;-1:-1:-1;40932:144:0;;;;;:::i;:::-;;:::i;34097:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;57572:352::-;;;;;;;;;;-1:-1:-1;57572:352:0;;;;;:::i;:::-;;:::i;35231:161::-;;;;;;;;;;-1:-1:-1;35231:161:0;;;;;:::i;:::-;;:::i;:::-;;;4559:14:1;;4552:22;4534:41;;4522:2;4507:18;35231:161:0;4489:92:1;32384:41:0;;;;;;;;;;-1:-1:-1;32384:41:0;;;;-1:-1:-1;;;32384:41:0;;;;;;57469:91;;;;;;;;;;-1:-1:-1;57541:11:0;;57469:91;;36723:87;;;;;;;;;;-1:-1:-1;36792:10:0;;36723:87;;32584:42;;;;;;;;;;-1:-1:-1;32584:42:0;;;;-1:-1:-1;;;32584:42:0;;;;;;40319:94;;;;;;;;;;-1:-1:-1;40319:94:0;;;;;:::i;:::-;;:::i;40526:99::-;;;;;;;;;;-1:-1:-1;40526:99:0;;;;;:::i;:::-;;:::i;34374:95::-;;;;;;;;;;-1:-1:-1;34454:7:0;;34374:95;;58648:653;;;;;;;;;;-1:-1:-1;58648:653:0;;;;;:::i;:::-;;:::i;35403:412::-;;;;;;;;;;-1:-1:-1;35403:412:0;;;;;:::i;:::-;;:::i;42099:176::-;;;;;;;;;;-1:-1:-1;42099:176:0;;;;;:::i;:::-;;:::i;18799:83::-;;;;;;;;;;-1:-1:-1;18866:8:0;;-1:-1:-1;;;;;18866:8:0;18799:83;;;-1:-1:-1;;;;;3429:32:1;;;3411:51;;3399:2;3384:18;18799:83:0;3366:102:1;37700:290:0;;;;;;;;;;-1:-1:-1;37700:290:0;;;;;:::i;:::-;;:::i;32317:41::-;;;;;;;;;;-1:-1:-1;32317:41:0;;;;-1:-1:-1;;;32317:41:0;;;;;;34283:83;;;;;;;;;;-1:-1:-1;34349:9:0;;34283:83;;34349:9;;;;17613:36:1;;17601:2;17586:18;34283:83:0;17568:87:1;40633:123:0;;;;;;;;;;-1:-1:-1;40633:123:0;;;;;:::i;:::-;;:::i;38766:488::-;;;;;;;;;;-1:-1:-1;38766:488:0;;;;;:::i;:::-;;:::i;42426:162::-;;;;;;;;;;-1:-1:-1;42426:162:0;;;;;:::i;:::-;;:::i;35823:268::-;;;;;;;;;;-1:-1:-1;35823:268:0;;;;;:::i;:::-;;:::i;30141:27::-;;;;;;;;;;;;;;;;36818:419;;;;;;;;;;-1:-1:-1;36818:419:0;;;;;:::i;:::-;;:::i;42596:126::-;;;;;;;;;;-1:-1:-1;42596:126:0;;;;;:::i;:::-;;:::i;40078:111::-;;;;;;;;;;-1:-1:-1;40078:111:0;;;;;:::i;:::-;;:::i;37245:447::-;;;;;;;;;;-1:-1:-1;37245:447:0;;;;;:::i;:::-;;:::i;20291:298::-;;;;;;;;;;;;;:::i;32173:40::-;;;;;;;;;;-1:-1:-1;32173:40:0;;;;-1:-1:-1;;;32173:40:0;;;;;;32256:34;;;;;;;;;;-1:-1:-1;32256:34:0;;;;-1:-1:-1;;;32256:34:0;;;;;;30328:31;;;;;;;;;;;;;;;;37998:457;;;;;;;;;;-1:-1:-1;37998:457:0;;;;;:::i;:::-;;:::i;31742:32::-;;;;;;;;;;-1:-1:-1;31742:32:0;;;;-1:-1:-1;;;;;31742:32:0;;;48387:124;;;;;;;;;;-1:-1:-1;48387:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;48476:27:0;48452:4;48476:27;;;:18;:27;;;;;;;;;48387:124;41618:129;;;;;;;;;;-1:-1:-1;41618:129:0;;;;;:::i;:::-;;:::i;40764:162::-;;;;;;;;;;-1:-1:-1;40764:162:0;;;;;:::i;:::-;;:::i;34687:107::-;;;;;;;;;;-1:-1:-1;34687:107:0;;;;;:::i;:::-;-1:-1:-1;;;;;34770:16:0;34743:7;34770:16;;;:7;:16;;;;;;;34687:107;17415:90;;;;;;;;;;-1:-1:-1;17488:9:0;;17415:90;;30226:33;;;;;;;;;;;;;;;;34477:198;;;;;;;;;;-1:-1:-1;34477:198:0;;;;;:::i;:::-;;:::i;16823:148::-;;;;;;;;;;;;;:::i;30515:52::-;;;;;;;;;;;;;;;;38650:108;;;;;;;;;;-1:-1:-1;38650:108:0;;;;;:::i;:::-;-1:-1:-1;;;;;38731:19:0;38707:4;38731:19;;;:10;:19;;;;;;;;;38650:108;42869:604;;;;;;;;;;-1:-1:-1;42869:604:0;;;;;:::i;:::-;;:::i;45437:100::-;;;;;;;;;;-1:-1:-1;45514:15:0;;45437:100;;19611:299;;;;;;;;;;-1:-1:-1;19611:299:0;;;;;:::i;:::-;;:::i;41088:132::-;;;;;;;;;;-1:-1:-1;41088:132:0;;;;;:::i;:::-;;:::i;36475:120::-;;;;;;;;;;-1:-1:-1;36475:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;36567:20:0;36543:4;36567:20;;;:11;:20;;;;;;;;;36475:120;42287:127;;;;;;;;;;;;;:::i;16181:79::-;;;;;;;;;;-1:-1:-1;16219:7:0;16246:6;-1:-1:-1;;;;;16246:6:0;16181:79;;34188:87;;;;;;;;;;;;;:::i;19918:104::-;;;;;;;;;;-1:-1:-1;19998:16:0;;19918:104;;42734:123;;;;;;;;;;-1:-1:-1;42734:123:0;;;;;:::i;:::-;;:::i;36607:108::-;;;;;;;;;;-1:-1:-1;36607:108:0;;;;;:::i;:::-;-1:-1:-1;;;;;36688:19:0;36664:4;36688:19;;;:10;:19;;;;;;;;;36607:108;36099:368;;;;;;;;;;-1:-1:-1;36099:368:0;;;;;:::i;:::-;;:::i;17752:276::-;;;;;;;;;;;;;:::i;34905:167::-;;;;;;;;;;-1:-1:-1;34905:167:0;;;;;:::i;:::-;;:::i;30714:66::-;;;;;;;;;;;;;;;;41759:173;;;;;;;;;;-1:-1:-1;41759:173:0;;;;;:::i;:::-;;:::i;41944:143::-;;;;;;;;;;-1:-1:-1;41944:143:0;;;;;:::i;:::-;;:::i;38461:183::-;;;;;;;;;;-1:-1:-1;38461:183:0;;;;;:::i;:::-;;:::i;41426:180::-;;;;;;;;;;-1:-1:-1;41426:180:0;;;;;:::i;:::-;;:::i;57936:111::-;;;;;;;;;;-1:-1:-1;57936:111:0;;;;;:::i;:::-;-1:-1:-1;;;;;58020:19:0;57993:7;58020:19;;;:8;:19;;;;;;;57936:111;45307:118;;;;;;;;;;-1:-1:-1;45307:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;45396:21:0;45369:7;45396:21;;;:15;:21;;;;;;;45307:118;59313:93;;;;;;;;;;-1:-1:-1;59385:13:0;;59313:93;;32469:34;;;;;;;;;;-1:-1:-1;32469:34:0;;;;-1:-1:-1;;;32469:34:0;;;;;;30616:54;;;;;;;;;;;;;;;;32061:74;;;;;;;;;;-1:-1:-1;32061:74:0;;;;-1:-1:-1;;;;;32061:74:0;;;34806:91;;;;;;;;;;-1:-1:-1;34877:12:0;;34806:91;;17517:227;;;;;;;;;;-1:-1:-1;17517:227:0;;;;;:::i;:::-;;:::i;35080:143::-;;;;;;;;;;-1:-1:-1;35080:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;35188:18:0;;;35161:7;35188:18;;;:11;:18;;;;;;;:27;;;;;;;;;;;;;35080:143;40421:97;;;;;;;;;;-1:-1:-1;40421:97:0;;;;;:::i;:::-;;:::i;31668:45::-;;;;;;;;;;-1:-1:-1;31668:45:0;;;;-1:-1:-1;;;;;31668:45:0;;;40197:110;;;;;;;;;;-1:-1:-1;40197:110:0;;;;;:::i;:::-;;:::i;41226:192::-;;;;;;;;;;-1:-1:-1;41226:192:0;;;;;:::i;:::-;;:::i;17126:281::-;;;;;;;;;;-1:-1:-1;17126:281:0;;;;;:::i;:::-;;:::i;20034:249::-;;;;;;;;;;-1:-1:-1;20034:249:0;;;;;:::i;:::-;;:::i;19296:154::-;;;;;;;;;;;;;:::i;48866:225::-;18866:8;;-1:-1:-1;;;;;18866:8:0;8458:10;33358:25;;:52;;-1:-1:-1;16219:7:0;16246:6;-1:-1:-1;;;;;16246:6:0;8458:10;33387:23;33358:52;33350:104;;;;-1:-1:-1;;;33350:104:0;;;;;;;:::i;:::-;;;;;;;;;48948:12:::1;48966:9;-1:-1:-1::0;;;;;48966:14:0::1;48987:21;48966:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48947:66;;;49032:7;49024:33;;;::::0;-1:-1:-1;;;49024:33:0;;9535:2:1;49024:33:0::1;::::0;::::1;9517:21:1::0;9574:2;9554:18;;;9547:30;-1:-1:-1;;;9593:18:1;;;9586:43;9646:18;;49024:33:0::1;9507:163:1::0;49024:33:0::1;-1:-1:-1::0;;49082:1:0::1;49068:11;:15:::0;48866:225::o;40932:144::-;18866:8;;-1:-1:-1;;;;;18866:8:0;8458:10;33358:25;;:52;;-1:-1:-1;16219:7:0;16246:6;-1:-1:-1;;;;;16246:6:0;8458:10;33387:23;33358:52;33350:104;;;;-1:-1:-1;;;33350:104:0;;;;;;;:::i;:::-;41030:18:::1;:38:::0;40932:144::o;34097:83::-;34134:13;34167:5;34160:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34097:83;:::o;57572:352::-;57629:7;57649:13;57665:66;57677:53;57687:42;57677:9;:53::i;:::-;57665:7;;;:11;:66::i;:::-;57649:82;;57742:12;57757:48;57799:5;57757:37;57773:20;57783:9;57773;:20::i;:::-;57757:11;;;:15;:37::i;:::-;:41;;:48::i;:::-;-1:-1:-1;;;;;57827:19:0;;;;;;:8;:19;;;;;;57742:63;;-1:-1:-1;57820:26:0;;57816:81;;;-1:-1:-1;;;;;57877:19:0;;;;;;:8;:19;;;;;;57868:29;;:4;;:8;:29::i;:::-;57861:36;57572:352;-1:-1:-1;;;;57572:352:0:o;57816:81::-;-1:-1:-1;57915:1:0;;57572:352;-1:-1:-1;;;57572:352:0:o;35231:161::-;35306:4;35323:39;8458:10;35346:7;35355:6;35323:8;:39::i;:::-;-1:-1:-1;35380:4:0;35231:161;;;;;:::o;40319:94::-;16393:6;;-1:-1:-1;;;;;16393:6:0;8458:10;16393:22;16385:67;;;;-1:-1:-1;;;16385:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40379:19:0::1;;::::0;;;:10:::1;:19;::::0;;;;:26;;-1:-1:-1;;40379:26:0::1;40401:4;40379:26;::::0;;40319:94::o;40526:99::-;16393:6;;-1:-1:-1;;;;;16393:6:0;8458:10;16393:22;16385:67;;;;-1:-1:-1;;;16385:67:0;;;;;;;:::i;:::-;40601:7:::1;:16:::0;40526:99::o;58648:653::-;58712:12;;:16;58708:586;;58745:13;58761:66;58773:53;58783:42;58773:9;:53::i;58761:66::-;58745:82;;58842:12;58857:48;58899:5;58857:37;58873:20;58883:9;58873;:20::i;58857:48::-;-1:-1:-1;;;;;58935:19:0;;;;;;:8;:19;;;;;;58842:63;;-1:-1:-1;58928:26:0;;58920:59;;;;-1:-1:-1;;;58920:59:0;;13280:2:1;58920:59:0;;;13262:21:1;13319:2;13299:18;;;13292:30;-1:-1:-1;;;13338:18:1;;;13331:50;13398:18;;58920:59:0;13252:170:1;58920:59:0;-1:-1:-1;;;;;59021:19:0;;58994:15;59021:19;;;:8;:19;;;;;;59012:29;;:4;;:8;:29::i;:::-;-1:-1:-1;;;;;59078:19:0;;;;;;:8;:19;;;;;;58994:47;;-1:-1:-1;59078:32:0;;58994:47;59078:23;:32::i;:::-;-1:-1:-1;;;;;59056:19:0;;;;;;:8;:19;;;;;;:54;;;;59144:33;;59165:7;;59056:19;59144:33;59056:19;59144:33;59165:7;59056:19;59144:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59125:52;;;59200:7;59192:33;;;;-1:-1:-1;;;59192:33:0;;5625:2:1;59192:33:0;;;5607:21:1;5664:2;5644:18;;;5637:30;-1:-1:-1;;;5683:18:1;;;5676:43;5736:18;;59192:33:0;5597:163:1;59192:33:0;59256:13;;:26;;59274:7;59256:17;:26::i;:::-;59240:13;:42;-1:-1:-1;;;;58708:586:0;58648:653;:::o;35403:412::-;35501:4;35518:36;35528:6;35536:9;35547:6;35518:9;:36::i;:::-;35565:220;35588:6;8458:10;35636:138;35692:6;35636:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35636:19:0;;;;;;:11;:19;;;;;;;8458:10;35636:33;;;;;;;;;;:37;:138::i;:::-;35565:8;:220::i;:::-;-1:-1:-1;35803:4:0;35403:412;;;;;:::o;42099:176::-;18866:8;;-1:-1:-1;;;;;18866:8:0;8458:10;33358:25;;:52;;-1:-1:-1;16219:7:0;16246:6;-1:-1:-1;;;;;16246:6:0;8458:10;33387:23;33358:52;33350:104;;;;-1:-1:-1;;;33350:104:0;;;;;;;:::i;:::-;42186:22:::1;:33:::0;;;::::1;;-1:-1:-1::0;;;42186:33:0::1;-1:-1:-1::0;;;;42186:33:0;;::::1;;::::0;;42235:32:::1;::::0;::::1;::::0;::::1;::::0;42211:8;4559:14:1;4552:22;4534:41;;4522:2;4507:18;;4489:92;42235:32:0::1;;;;;;;;42099:176:::0;:::o;37700:290::-;37767:7;37820;;37809;:18;;37787:110;;;;-1:-1:-1;;;37787:110:0;;7600:2:1;37787:110:0;;;7582:21:1;7639:2;7619:18;;;7612:30;7678:34;7658:18;;;7651:62;-1:-1:-1;;;7729:18:1;;;7722:40;7779:19;;37787:110:0;7572:232:1;37787:110:0;37908:19;37930:10;:8;:10::i;:::-;37908:32;-1:-1:-1;37958:24:0;:7;37908:32;37958:11;:24::i;:::-;37951:31;37700:290;-1:-1:-1;;;37700:290:0:o;40633:123::-;16393:6;;-1:-1:-1;;;;;16393:6:0;8458:10;16393:22;16385:67;;;;-1:-1:-1;;;16385:67:0;;;;;;;:::i;:::-;40720:13:::1;:28:::0;40633:123::o;38766:488::-;18866:8;;-1:-1:-1;;;;;18866:8:0;8458:10;33358:25;;:52;;-1:-1:-1;16219:7:0;16246:6;-1:-1:-1;;;;;16246:6:0;8458:10;33387:23;33358:52;33350:104;;;;-1:-1:-1;;;33350:104:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38857:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;38849:60;;;::::0;-1:-1:-1;;;38849:60:0;;10228:2:1;38849:60:0::1;::::0;::::1;10210:21:1::0;10267:2;10247:18;;;10240:30;10306:29;10286:18;;;10279:57;10353:18;;38849:60:0::1;10200:177:1::0;38849:60:0::1;38925:9;38920:327;38944:9;:16:::0;38940:20;::::1;38920:327;;;39002:7;-1:-1:-1::0;;;;;38986:23:0::1;:9;38996:1;38986:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;38986:12:0::1;:23;38982:254;;;39045:9;39055:16:::0;;:20:::1;::::0;39074:1:::1;::::0;39055:20:::1;:::i;:::-;39045:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;39030:9:::1;:12:::0;;-1:-1:-1;;;;;39045:31:0;;::::1;::::0;39040:1;;39030:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;39030:46:0::1;-1:-1:-1::0;;;;;39030:46:0;;::::1;;::::0;;39095:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;39134:11:::1;:20:::0;;;;:28;;-1:-1:-1;;39134:28:0::1;::::0;;39181:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;39181:15:0;;;;;-1:-1:-1;;;;;;39181:15:0::1;::::0;;;;;38920:327:::1;38766:488:::0;:::o;38982:254::-:1;38962:3:::0;::::1;::::0;::::1;:::i;:::-;;;;38920:327;;;;38766:488:::0;:::o;42426:162::-;18866:8;;-1:-1:-1;;;;;18866:8:0;8458:10;33358:25;;:52;;-1:-1:-1;16219:7:0;16246:6;-1:-1:-1;;;;;16246:6:0;8458:10;33387:23;33358:52;33350:104;;;;-1:-1:-1;;;33350:104:0;;;;;;;:::i;:::-;42506:15:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;42506:26:0::1;-1:-1:-1::0;;;;42506:26:0;;::::1;;::::0;;42548:32:::1;::::0;::::1;::::0;::::1;::::0;42524:8;4559:14:1;4552:22;4534:41;;4522:2;4507:18;;4489:92;35823:268:0;8458:10;35911:4;36000:25;;;:11;:25;;;;;;;-1:-1:-1;;;;;36000:34:0;;;;;;;;;;35911:4;;35928:133;;35978:7;;36000:50;;36039:10;36000:38;:50::i;36818:419::-;8458:10;36870:14;36933:19;;;:11;:19;;;;;;;;36932:20;36910:114;;;;-1:-1:-1;;;36910:114:0;;15495:2:1;36910:114:0;;;15477:21:1;15534:2;15514:18;;;15507:30;15573:34;15553:18;;;15546:62;-1:-1:-1;;;15624:18:1;;;15617:42;15676:19;;36910:114:0;15467:234:1;36910:114:0;37036:15;37065:19;37076:7;37065:10;:19::i;:::-;-1:-1:-1;;;;;;;;;37113:15:0;;;;;;:7;:15;;;;;;37035:49;;-1:-1:-1;37113:28:0;;:15;-1:-1:-1;37035:49:0;37113:19;:28::i;:::-;-1:-1:-1;;;;;37095:15:0;;;;;;:7;:15;;;;;:46;37162:7;;:20;;37174:7;37162:11;:20::i;:::-;37152:7;:30;37206:10;;:23;;37221:7;37206:14;:23::i;:::-;37193:10;:36;-1:-1:-1;;;36818:419:0:o;42596:126::-;18866:8;;-1:-1:-1;;;;;18866:8:0;8458:10;33358:25;;:52;;-1:-1:-1;16219:7:0;16246:6;-1:-1:-1;;;;;16246:6:0;8458:10;33387:23;33358:52;33350:104;;;;-1:-1:-1;;;33350:104:0;;;;;;;:::i;:::-;42684:14:::1;:30:::0;;-1:-1:-1;;;;;;42684:30:0::1;-1:-1:-1::0;;;;;42684:30:0;;;::::1;::::0;;;::::1;::::0;;42596:126::o;40078:111::-;16393:6;;-1:-1:-1;;;;;16393:6:0;8458:10;16393:22;16385:67;;;;-1:-1:-1;;;16385:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40147:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;40147:34:0::1;40177:4;40147:34;::::0;;40078:111::o;37245:447::-;37336:7;37375;;37364;:18;;37356:62;;;;-1:-1:-1;;;37356:62:0;;10933:2:1;37356:62:0;;;10915:21:1;10972:2;10952:18;;;10945:30;11011:33;10991:18;;;10984:61;11062:18;;37356:62:0;10905:181:1;37356:62:0;37434:17;37429:256;;37469:15;37498:19;37509:7;37498:10;:19::i;:::-;-1:-1:-1;37468:49:0;;-1:-1:-1;37532:14:0;;-1:-1:-1;;;;;37532:14:0;37429:256;37582:23;37617:19;37628:7;37617:10;:19::i;:::-;-1:-1:-1;37579:57:0;;-1:-1:-1;37651:22:0;;-1:-1:-1;;;;;37651:22:0;20291:298;20365:16;;-1:-1:-1;;;;;20365:16:0;20385:10;20365:30;20343:80;;;;-1:-1:-1;;;20343:80:0;;14035:2:1;20343:80:0;;;14017:21:1;-1:-1:-1;14054:18:1;;;14047:29;14093:18;;20343:80:0;14007:110:1;20343:80:0;20460:16;;20442:15;:34;20434:47;;;;-1:-1:-1;;;20434:47:0;;14035:2:1;20434:47:0;;;14017:21:1;-1:-1:-1;14054:18:1;;;14047:29;14093:18;;20434:47:0;14007:110:1;20434:47:0;20526:16;;20516:8;;20497:46;;-1:-1:-1;;;;;20526:16:0;;;;20516:8;;;;-1:-1:-1;;;;;;;;;;;20497:46:0;20526:16;;20497:46;20565:16;;20554:8;:27;;-1:-1:-1;;;;;;20554:27:0;-1:-1:-1;;;;;20565:16:0;;;20554:27;;;;;;20291:298::o;37998:457::-;18866:8;;-1:-1:-1;;;;;18866:8:0;8458:10;33358:25;;:52;;-1:-1:-1;16219:7:0;16246:6;-1:-1:-1;;;;;16246:6:0;8458:10;33387:23;33358:52;33350:104;;;;-1:-1:-1;;;33350:104:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38204:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;38203:21;38195:61;;;::::0;-1:-1:-1;;;38195:61:0;;10228:2:1;38195:61:0::1;::::0;::::1;10210:21:1::0;10267:2;10247:18;;;10240:30;10306:29;10286:18;;;10279:57;10353:18;;38195:61:0::1;10200:177:1::0;38195:61:0::1;-1:-1:-1::0;;;;;38271:16:0;::::1;38290:1;38271:16:::0;;;:7:::1;:16;::::0;;;;;:20;38267:109:::1;;-1:-1:-1::0;;;;;38347:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;38327:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;38308:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;38267:109:::1;-1:-1:-1::0;;;;;38386:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;38386:27:0::1;38409:4;38386:27:::0;;::::1;::::0;;;38424:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;38424:23:0::1;::::0;;::::1;::::0;;37998:457::o;41618:129::-;18866:8;;-1:-1:-1;;;;;18866:8:0;8458:10;33358:25;;:52;;-1:-1:-1;16219:7:0;16246:6;-1:-1:-1;;;;;16246:6:0;8458:10;33387:23;33358:52;33350:104;;;;-1:-1:-1;;;33350:104:0;;;;;;;:::i;:::-;41705:23:::1;:34:::0;;;::::1;;-1:-1:-1::0;;;41705:34:0::1;-1:-1:-1::0;;;;41705:34:0;;::::1;::::0;;;::::1;::::0;;41618:129::o;40764:162::-;18866:8;;-1:-1:-1;;;;;18866:8:0;8458:10;33358:25;;:52;;-1:-1:-1;16219:7:0;16246:6;-1:-1:-1;;;;;16246:6:0;8458:10;33387:23;33358:52;33350:104;;;;-1:-1:-1;;;33350:104:0;;;;;;;:::i;:::-;40882:36:::1;40912:5;40882:25;40894:12;40882:7;;:11;;:25;;;;:::i;:36::-;40854:25;:64:::0;-1:-1:-1;40764:162:0:o;34477:198::-;-1:-1:-1;;;;;34567:20:0;;34543:7;34567:20;;;:11;:20;;;;;;;;34563:49;;;-1:-1:-1;;;;;;34596:16:0;;;;;:7;:16;;;;;;;34477:198::o;34563:49::-;-1:-1:-1;;;;;34650:16:0;;;;;;:7;:16;;;;;;34630:37;;:19;:37::i;16823:148::-;16393:6;;-1:-1:-1;;;;;16393:6:0;8458:10;16393:22;16385:67;;;;-1:-1:-1;;;16385:67:0;;;;;;;:::i;:::-;16930:1:::1;16914:6:::0;;16893:40:::1;::::0;-1:-1:-1;;;;;16914:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;16893:40:0;16930:1;;16893:40:::1;16961:1;16944:19:::0;;-1:-1:-1;;;;;;16944:19:0::1;::::0;;16823:148::o;42869:604::-;18866:8;;-1:-1:-1;;;;;18866:8:0;8458:10;33358:25;;:52;;-1:-1:-1;16219:7:0;16246:6;-1:-1:-1;;;;;16246:6:0;8458:10;33387:23;33358:52;33350:104;;;;-1:-1:-1;;;33350:104:0;;;;;;;:::i;:::-;42956:31:::1;42973:13;42956:16;:31::i;:::-;43059:14;::::0;43144:30:::1;::::0;;-1:-1:-1;;;43144:30:0;;;;-1:-1:-1;;;;;43059:14:0;;::::1;::::0;;;43144:28:::1;::::0;:30:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;43059:14;43144:30;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43126:57:0::1;;43192:4;43199:20;-1:-1:-1::0;;;;;43199:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43126:101;::::0;-1:-1:-1;;;;;;43126:101:0::1;::::0;;;;;;-1:-1:-1;;;;;3703:15:1;;;43126:101:0::1;::::0;::::1;3685:34:1::0;3755:15;;3735:18;;;3728:43;3620:18;;43126:101:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43106:17;:121:::0;;-1:-1:-1;;;;;;43106:121:0::1;-1:-1:-1::0;;;;;43106:121:0;;;::::1;::::0;;::::1;::::0;;43238:174:::1;;43326:20;-1:-1:-1::0;;;;;43326:28:0::1;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43308:60:0::1;;43377:4;43384:20;-1:-1:-1::0;;;;;43384:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43308:104;::::0;-1:-1:-1;;;;;;43308:104:0::1;::::0;;;;;;-1:-1:-1;;;;;3703:15:1;;;43308:104:0::1;::::0;::::1;3685:34:1::0;3755:15;;3735:18;;;3728:43;3620:18;;43308:104:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43288:17;:124:::0;;-1:-1:-1;;;;;;43288:124:0::1;-1:-1:-1::0;;;;;43288:124:0;;;::::1;::::0;;;::::1;::::0;;43238:174:::1;43423:19;:42:::0;;-1:-1:-1;;;;;;43423:42:0::1;-1:-1:-1::0;;;;;43423:42:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;42869:604:0:o;19611:299::-;19019:8;;-1:-1:-1;;;;;19019:8:0;8458:10;19019:24;19011:73;;;;-1:-1:-1;;;19011:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19720:24:0;::::1;19698:116;;;::::0;-1:-1:-1;;;19698:116:0;;14729:2:1;19698:116:0::1;::::0;::::1;14711:21:1::0;14768:2;14748:18;;;14741:30;14807:34;14787:18;;;14780:62;-1:-1:-1;;;14858:18:1;;;14851:40;14908:19;;19698:116:0::1;14701:232:1::0;19698:116:0::1;19849:8;::::0;19830:40:::1;::::0;-1:-1:-1;;;;;19830:40:0;;::::1;::::0;19849:8:::1;::::0;-1:-1:-1;;;;;;;;;;;19830:40:0;19849:8:::1;::::0;19830:40:::1;19881:8;:21:::0;;-1:-1:-1;;;;;;19881:21:0::1;-1:-1:-1::0;;;;;19881:21:0;;;::::1;::::0;;;::::1;::::0;;19611:299::o;41088:132::-;18866:8;;-1:-1:-1;;;;;18866:8:0;8458:10;33358:25;;:52;;-1:-1:-1;16219:7:0;16246:6;-1:-1:-1;;;;;16246:6:0;8458:10;33387:23;33358:52;33350:104;;;;-1:-1:-1;;;33350:104:0;;;;;;;:::i;:::-;41180:15:::1;:32:::0;41088:132::o;42287:127::-;18866:8;;-1:-1:-1;;;;;18866:8:0;8458:10;33358:25;;:52;;-1:-1:-1;16219:7:0;16246:6;-1:-1:-1;;;;;16246:6:0;8458:10;33387:23;33358:52;33350:104;;;;-1:-1:-1;;;33350:104:0;;;;;;;:::i;:::-;42349:14:::1;:21:::0;;-1:-1:-1;;;;42349:21:0::1;-1:-1:-1::0;;;42349:21:0::1;::::0;;42386:20:::1;::::0;-1:-1:-1;4534:41:1;;42386:20:0::1;::::0;4522:2:1;4507:18;42386:20:0::1;;;;;;;42287:127::o:0;34188:87::-;34227:13;34260:7;34253:14;;;;;:::i;42734:123::-;18866:8;;-1:-1:-1;;;;;18866:8:0;8458:10;33358:25;;:52;;-1:-1:-1;16219:7:0;16246:6;-1:-1:-1;;;;;16246:6:0;8458:10;33387:23;33358:52;33350:104;;;;-1:-1:-1;;;33350:104:0;;;;;;;:::i;:::-;42818:17:::1;:31:::0;;-1:-1:-1;;;;;;42818:31:0::1;-1:-1:-1::0;;;;;42818:31:0;;;::::1;::::0;;;::::1;::::0;;42734:123::o;36099:368::-;36192:4;36209:228;8458:10;36259:7;36281:145;36338:15;36281:145;;;;;;;;;;;;;;;;;8458:10;36281:25;;;;:11;:25;;;;;;;-1:-1:-1;;;;;36281:34:0;;;;;;;;;;;;:38;:145::i;17752:276::-;17819:14;;-1:-1:-1;;;;;17819:14:0;17837:10;17819:28;17797:78;;;;-1:-1:-1;;;17797:78:0;;14035:2:1;17797:78:0;;;14017:21:1;-1:-1:-1;14054:18:1;;;14047:29;14093:18;;17797:78:0;14007:110:1;17797:78:0;17912:9;;17894:15;:27;17886:40;;;;-1:-1:-1;;;17886:40:0;;14035:2:1;17886:40:0;;;14017:21:1;-1:-1:-1;14054:18:1;;;14047:29;14093:18;;17886:40:0;14007:110:1;17886:40:0;17971:14;;;17963:6;;17942:44;;-1:-1:-1;;;;;17971:14:0;;;;17963:6;;;;-1:-1:-1;;;;;;;;;;;17942:44:0;;18006:14;;;17997:23;;-1:-1:-1;;;;;;17997:23:0;-1:-1:-1;;;;;18006:14:0;;;17997:23;;;;;;17752:276::o;34905:167::-;34983:4;35000:42;8458:10;35024:9;35035:6;35000:9;:42::i;41759:173::-;18866:8;;-1:-1:-1;;;;;18866:8:0;8458:10;33358:25;;:52;;-1:-1:-1;16219:7:0;16246:6;-1:-1:-1;;;;;16246:6:0;8458:10;33387:23;33358:52;33350:104;;;;-1:-1:-1;;;33350:104:0;;;;;;;:::i;:::-;41845:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;41845:32:0::1;-1:-1:-1::0;;;;41845:32:0;;::::1;;::::0;;41893:31:::1;::::0;::::1;::::0;::::1;::::0;41869:8;4559:14:1;4552:22;4534:41;;4522:2;4507:18;;4489:92;41944:143:0;16393:6;;-1:-1:-1;;;;;16393:6:0;8458:10;16393:22;16385:67;;;;-1:-1:-1;;;16385:67:0;;;;;;;:::i;:::-;42014:14:::1;:25:::0;;;::::1;;-1:-1:-1::0;;;42014:25:0::1;-1:-1:-1::0;;;;42014:25:0;;::::1;;::::0;;42055:24:::1;::::0;::::1;::::0;::::1;::::0;42031:8;4559:14:1;4552:22;4534:41;;4522:2;4507:18;;4489:92;38461:183:0;18866:8;;-1:-1:-1;;;;;18866:8:0;8458:10;33358:25;;:52;;-1:-1:-1;16219:7:0;16246:6;-1:-1:-1;;;;;16246:6:0;8458:10;33387:23;33358:52;33350:104;;;;-1:-1:-1;;;33350:104:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38549:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;38548:20;38540:59;;;::::0;-1:-1:-1;;;38540:59:0;;15140:2:1;38540:59:0::1;::::0;::::1;15122:21:1::0;15179:2;15159:18;;;15152:30;15218:28;15198:18;;;15191:56;15264:18;;38540:59:0::1;15112:176:1::0;38540:59:0::1;-1:-1:-1::0;;;;;38610:19:0::1;;::::0;;;:10:::1;:19;::::0;;;;:26;;-1:-1:-1;;38610:26:0::1;38632:4;38610:26;::::0;;38461:183::o;41426:180::-;18866:8;;-1:-1:-1;;;;;18866:8:0;8458:10;33358:25;;:52;;-1:-1:-1;16219:7:0;16246:6;-1:-1:-1;;;;;16246:6:0;8458:10;33387:23;33358:52;33350:104;;;;-1:-1:-1;;;33350:104:0;;;;;;;:::i;:::-;41512:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;41512:32:0::1;-1:-1:-1::0;;;;41512:32:0;;::::1;;::::0;;41560:38:::1;::::0;::::1;::::0;::::1;::::0;41536:8;4559:14:1;4552:22;4534:41;;4522:2;4507:18;;4489:92;17517:227:0;16393:6;;-1:-1:-1;;;;;16393:6:0;8458:10;16393:22;16385:67;;;;-1:-1:-1;;;16385:67:0;;;;;;;:::i;:::-;17599:6:::1;::::0;;;17582:23;;-1:-1:-1;;;;;;17582:23:0;;::::1;-1:-1:-1::0;;;;;17599:6:0;::::1;17582:23;::::0;;;17616:19:::1;::::0;;17658:22:::1;17676:4:::0;17658:15:::1;:22;:::i;:::-;17646:9;:34:::0;17733:1:::1;17717:6:::0;;17696:40:::1;::::0;-1:-1:-1;;;;;17717:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17696:40:0;17733:1;;17696:40:::1;17517:227:::0;:::o;40421:97::-;16393:6;;-1:-1:-1;;;;;16393:6:0;8458:10;16393:22;16385:67;;;;-1:-1:-1;;;16385:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40483:19:0::1;40505:5;40483:19:::0;;;:10:::1;:19;::::0;;;;:27;;-1:-1:-1;;40483:27:0::1;::::0;;40421:97::o;40197:110::-;16393:6;;-1:-1:-1;;;;;16393:6:0;8458:10;16393:22;16385:67;;;;-1:-1:-1;;;16385:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40264:27:0::1;40294:5;40264:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;40264:35:0::1;::::0;;40197:110::o;41226:192::-;18866:8;;-1:-1:-1;;;;;18866:8:0;8458:10;33358:25;;:52;;-1:-1:-1;16219:7:0;16246:6;-1:-1:-1;;;;;16246:6:0;8458:10;33387:23;33358:52;33350:104;;;;-1:-1:-1;;;33350:104:0;;;;;;;:::i;:::-;41348:30:::1;:62:::0;41226:192::o;17126:281::-;16393:6;;-1:-1:-1;;;;;16393:6:0;8458:10;16393:22;16385:67;;;;-1:-1:-1;;;16385:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17229:22:0;::::1;17207:110;;;::::0;-1:-1:-1;;;17207:110:0;;8011:2:1;17207:110:0::1;::::0;::::1;7993:21:1::0;8050:2;8030:18;;;8023:30;8089:34;8069:18;;;8062:62;-1:-1:-1;;;8140:18:1;;;8133:36;8186:19;;17207:110:0::1;7983:228:1::0;17207:110:0::1;17354:6;::::0;;17333:38:::1;::::0;-1:-1:-1;;;;;17333:38:0;;::::1;::::0;17354:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;17333:38:0;::::1;17382:6;:17:::0;;-1:-1:-1;;;;;;17382:17:0::1;-1:-1:-1::0;;;;;17382:17:0;;;::::1;::::0;;;::::1;::::0;;17126:281::o;20034:249::-;19019:8;;-1:-1:-1;;;;;19019:8:0;8458:10;19019:24;19011:73;;;;-1:-1:-1;;;19011:73:0;;;;;;;:::i;:::-;20127:8:::1;::::0;;20108:16:::1;:27:::0;;-1:-1:-1;;;;;;20108:27:0;;::::1;-1:-1:-1::0;;;;;20127:8:0;::::1;20108:27;::::0;;;20146:21:::1;::::0;;20197:22:::1;20215:4:::0;20197:15:::1;:22;:::i;:::-;20178:16;:41:::0;20254:8:::1;::::0;20235:40:::1;::::0;20272:1:::1;::::0;-1:-1:-1;;;;;20254:8:0::1;::::0;-1:-1:-1;;;;;;;;;;;20235:40:0;20272:1;;20235:40:::1;20034:249:::0;:::o;19296:154::-;19019:8;;-1:-1:-1;;;;;19019:8:0;8458:10;19019:24;19011:73;;;;-1:-1:-1;;;19011:73:0;;;;;;;:::i;:::-;19389:8:::1;::::0;19370:40:::1;::::0;19407:1:::1;::::0;-1:-1:-1;;;;;19389:8:0::1;::::0;-1:-1:-1;;;;;;;;;;;19370:40:0;19407:1;;19370:40:::1;19421:8;:21:::0;;-1:-1:-1;;;;;;19421:21:0::1;::::0;;19296:154::o;4301:136::-;4359:7;4386:43;4390:1;4393;4386:43;;;;;;;;;;;;;;;;;:3;:43::i;5225:467::-;5283:7;5528:6;5524:47;;-1:-1:-1;5558:1:0;5551:8;;5524:47;5581:9;5593:5;5597:1;5593;:5;:::i;:::-;5581:17;-1:-1:-1;5626:1:0;5617:5;5621:1;5581:17;5617:5;:::i;:::-;:10;5609:56;;;;-1:-1:-1;;;5609:56:0;;12107:2:1;5609:56:0;;;12089:21:1;12146:2;12126:18;;;12119:30;12185:34;12165:18;;;12158:62;-1:-1:-1;;;12236:18:1;;;12229:31;12277:19;;5609:56:0;12079:223:1;6168:132:0;6226:7;6253:39;6257:1;6260;6253:39;;;;;;;;;;;;;;;;;:3;:39::i;48519:335::-;-1:-1:-1;;;;;48612:19:0;;48604:68;;;;-1:-1:-1;;;48604:68:0;;14324:2:1;48604:68:0;;;14306:21:1;14363:2;14343:18;;;14336:30;14402:34;14382:18;;;14375:62;-1:-1:-1;;;14453:18:1;;;14446:34;14497:19;;48604:68:0;14296:226:1;48604:68:0;-1:-1:-1;;;;;48691:21:0;;48683:68;;;;-1:-1:-1;;;48683:68:0;;8418:2:1;48683:68:0;;;8400:21:1;8457:2;8437:18;;;8430:30;8496:34;8476:18;;;8469:62;-1:-1:-1;;;8547:18:1;;;8540:32;8589:19;;48683:68:0;8390:224:1;48683:68:0;-1:-1:-1;;;;;48762:18:0;;;;;;;:11;:18;;;;;;;:27;;;;;;;;;;;;;:36;;;48814:32;;16197:25:1;;;48814:32:0;;16170:18:1;48814:32:0;;;;;;;48519:335;;;:::o;3837:181::-;3895:7;;3927:5;3931:1;3927;:5;:::i;:::-;3915:17;;3956:1;3951;:6;;3943:46;;;;-1:-1:-1;;;3943:46:0;;8821:2:1;3943:46:0;;;8803:21:1;8860:2;8840:18;;;8833:30;8899:29;8879:18;;;8872:57;8946:18;;3943:46:0;8793:177:1;49099:2818:0;-1:-1:-1;;;;;49188:16:0;;;;;;:10;:16;;;;;;;;49187:17;:36;;;;-1:-1:-1;;;;;;49209:14:0;;;;;;:10;:14;;;;;;;;49208:15;49187:36;49179:65;;;;-1:-1:-1;;;49179:65:0;;15908:2:1;49179:65:0;;;15890:21:1;15947:2;15927:18;;;15920:30;-1:-1:-1;;;15966:18:1;;;15959:46;16022:18;;49179:65:0;15880:166:1;49179:65:0;-1:-1:-1;;;;;49263:18:0;;49255:68;;;;-1:-1:-1;;;49255:68:0;;13629:2:1;49255:68:0;;;13611:21:1;13668:2;13648:18;;;13641:30;13707:34;13687:18;;;13680:62;-1:-1:-1;;;13758:18:1;;;13751:35;13803:19;;49255:68:0;13601:227:1;49255:68:0;-1:-1:-1;;;;;49342:16:0;;49334:64;;;;-1:-1:-1;;;49334:64:0;;5967:2:1;49334:64:0;;;5949:21:1;6006:2;5986:18;;;5979:30;6045:34;6025:18;;;6018:62;-1:-1:-1;;;6096:18:1;;;6089:33;6139:19;;49334:64:0;5939:225:1;49334:64:0;-1:-1:-1;;;;;49418:16:0;;;;;;:10;:16;;;;;;;;49417:17;49409:59;;;;-1:-1:-1;;;49409:59:0;;9177:2:1;49409:59:0;;;9159:21:1;9216:2;9196:18;;;9189:30;9255:31;9235:18;;;9228:59;9304:18;;49409:59:0;9149:179:1;49409:59:0;49496:1;49487:6;:10;49479:64;;;;-1:-1:-1;;;49479:64:0;;12870:2:1;49479:64:0;;;12852:21:1;12909:2;12889:18;;;12882:30;12948:34;12928:18;;;12921:62;-1:-1:-1;;;12999:18:1;;;12992:39;13048:19;;49479:64:0;12842:231:1;49479:64:0;16219:7;16246:6;-1:-1:-1;;;;;49558:15:0;;;16246:6;;49558:15;;;;:32;;-1:-1:-1;16219:7:0;16246:6;-1:-1:-1;;;;;49577:13:0;;;16246:6;;49577:13;;49558:32;:53;;;;-1:-1:-1;18866:8:0;;-1:-1:-1;;;;;49594:17:0;;;18866:8;;49594:17;;49558:53;:72;;;;-1:-1:-1;18866:8:0;;-1:-1:-1;;;;;49615:15:0;;;18866:8;;49615:15;;49558:72;49554:1268;;;49655:14;;-1:-1:-1;;;49655:14:0;;;;49647:49;;;;-1:-1:-1;;;49647:49:0;;9877:2:1;49647:49:0;;;9859:21:1;9916:2;9896:18;;;9889:30;-1:-1:-1;;;9935:18:1;;;9928:52;9997:18;;49647:49:0;9849:172:1;49647:49:0;-1:-1:-1;;;;;49715:16:0;;;;;;:41;;-1:-1:-1;;;;;;49735:21:0;;49749:6;49735:21;;49715:41;:66;;;;-1:-1:-1;;;;;;49760:21:0;;49776:4;49760:21;;49715:66;:89;;;;-1:-1:-1;;;;;;49785:19:0;;49799:4;49785:19;;49715:89;49711:1100;;;49835:17;;-1:-1:-1;;;;;49829:23:0;;;49835:17;;49829:23;49825:971;;49909:15;;49899:6;49883:13;49893:2;49883:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;49875:90;;;;-1:-1:-1;;;49875:90:0;;11702:2:1;49875:90:0;;;11684:21:1;11741:2;11721:18;;;11714:30;11780:34;11760:18;;;11753:62;-1:-1:-1;;;11831:18:1;;;11824:34;11875:19;;49875:90:0;11674:226:1;49875:90:0;49825:971;;;-1:-1:-1;;;;;50016:15:0;;;;;;:9;:15;;;;;;:20;50012:597;;-1:-1:-1;;;;;50087:15:0;;;;;;:9;:15;;;;;;50069;:33;:92;;;;-1:-1:-1;50146:15:0;;-1:-1:-1;;;;;50126:15:0;;;;;;:9;:15;;;;;;50106:36;;:15;;:19;:36::i;:::-;:55;;50069:92;50065:438;;;50227:18;;-1:-1:-1;;;;;50202:21:0;;;;;;:15;:21;;;;;;:43;;50194:103;;;;-1:-1:-1;;;50194:103:0;;7184:2:1;50194:103:0;;;7166:21:1;7223:2;7203:18;;;7196:30;7262:34;7242:18;;;7235:62;-1:-1:-1;;;7313:18:1;;;7306:45;7368:19;;50194:103:0;7156:237:1;50194:103:0;-1:-1:-1;;;;;50352:21:0;;;;;;:15;:21;;;;;;:33;;50378:6;50352:25;:33::i;:::-;-1:-1:-1;;;;;50328:21:0;;;;;;:15;:21;;;;;:57;50012:597;;50065:438;-1:-1:-1;;;;;50473:21:0;;;;;;:15;:21;;;;;:30;;;50012:597;;;-1:-1:-1;;;;;50579:21:0;;;;;;:15;:21;;;;;:30;;;50012:597;-1:-1:-1;;;;;50632:15:0;;;;;;:9;:15;;;;;50650;50632:33;;50706:25;;50696:35;;;50688:88;;;;-1:-1:-1;;;50688:88:0;;11293:2:1;50688:88:0;;;11275:21:1;11332:2;11312:18;;;11305:30;11371:34;11351:18;;;11344:62;-1:-1:-1;;;11422:18:1;;;11415:38;11470:19;;50688:88:0;11265:230:1;50688:88:0;50844:17;;-1:-1:-1;;;;;50836:25:0;;;50844:17;;50836:25;50832:298;;;50893:12;;:24;;50910:6;50893:16;:24::i;:::-;50878:12;:39;-1:-1:-1;;;;;50946:11:0;;;;;;:7;:11;;;;;;:23;;50962:6;50946:15;:23::i;:::-;-1:-1:-1;;;;;50932:11:0;;;;;;:7;:11;;;;;:37;50832:298;;;51006:17;;-1:-1:-1;;;;;51000:23:0;;;51006:17;;51000:23;50996:134;;;-1:-1:-1;;;;;51072:13:0;;;;;;:7;:13;;;;;;51055:12;;:31;;:16;:31::i;:::-;51040:12;:46;-1:-1:-1;;;;;51101:13:0;;51117:1;51101:13;;;:7;:13;;;;;:17;50996:134;51140:28;51171:24;51189:4;51171:9;:24::i;:::-;51140:55;;51234:25;;51210:20;:49;51206:116;;-1:-1:-1;51297:25:0;;51206:116;51384:30;;51360:54;;;;;;;51429:53;;-1:-1:-1;51466:16:0;;-1:-1:-1;;;51466:16:0;;;;51465:17;51429:53;:95;;;;-1:-1:-1;51507:17:0;;-1:-1:-1;;;;;51499:25:0;;;51507:17;;51499:25;;51429:95;:181;;;;-1:-1:-1;51542:15:0;;-1:-1:-1;;;51542:15:0;;;;;:67;;-1:-1:-1;51570:14:0;;-1:-1:-1;;;;;51562:22:0;;;51570:14;;51562:22;;;;:46;;-1:-1:-1;51594:14:0;;-1:-1:-1;;;;;51588:20:0;;;51594:14;;51588:20;;51562:46;51429:219;;;;-1:-1:-1;51627:21:0;;-1:-1:-1;;;51627:21:0;;;;51429:219;51425:295;;;51665:26;51670:20;51665:4;:26::i;:::-;-1:-1:-1;;;;;51764:24:0;;51730:12;51764:24;;;:18;:24;;;;;;51745:4;;51764:24;;;:50;;-1:-1:-1;;;;;;51792:22:0;;;;;;:18;:22;;;;;;;;51764:50;51760:98;;;-1:-1:-1;51841:5:0;51760:98;51868:41;51883:4;51889:2;51893:6;51901:7;51868:14;:41::i;:::-;49168:2749;;;49099:2818;;;:::o;4740:226::-;4860:7;4896:12;4888:6;;;;4880:29;;;;-1:-1:-1;;;4880:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4920:9:0;4932:5;4936:1;4932;:5;:::i;:::-;4920:17;4740:226;-1:-1:-1;;;;;4740:226:0:o;45135:164::-;45177:7;45198:15;45215;45234:19;:17;:19::i;:::-;45197:56;;-1:-1:-1;45197:56:0;-1:-1:-1;45271:20:0;45197:56;;45271:11;:20::i;:::-;45264:27;;;;45135:164;:::o;43735:538::-;43794:7;43803;43812;43821;43830;43839;43860:23;43885:12;43899:28;43931:20;43943:7;43931:11;:20::i;:::-;43859:92;;;;;;43963:15;43980:23;44005:12;44021:60;44033:7;44042:4;44048:20;44070:10;:8;:10::i;:::-;44021:11;:60::i;:::-;43962:119;;;;-1:-1:-1;43962:119:0;;-1:-1:-1;44185:15:0;;-1:-1:-1;44215:4:0;;-1:-1:-1;44234:20:0;;-1:-1:-1;43735:538:0;;-1:-1:-1;;;;;43735:538:0:o;6796:276::-;6882:7;6917:12;6910:5;6902:28;;;;-1:-1:-1;;;6902:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6941:9:0;6953:5;6957:1;6953;:5;:::i;51925:1072::-;33123:16;:23;;-1:-1:-1;;;;33123:23:0;-1:-1:-1;;;33123:23:0;;;52037:10:::1;::::0;52019:13:::1;::::0;33123:23;;52019:29:::1;::::0;:13;:17:::1;:29::i;:::-;52000:48;;52059:26;52088:60;52146:1;52088:53;52132:8;52088:39;52113:13;;52088:20;:24;;:39;;;;:::i;:60::-;52059:89;;52184:20;52163:18;:41;52159:831;;;52249:20;52272:44;:20:::0;52297:18;52272:24:::1;:44::i;:::-;52249:67:::0;-1:-1:-1;52356:21:0::1;52392:30;52249:67:::0;52392:16:::1;:30::i;:::-;52437:19;52459:41;:21;52485:14:::0;52459:25:::1;:41::i;:::-;52437:63:::0;-1:-1:-1;52573:23:0::1;52599:53;52639:12:::0;52599:35:::1;52437:63:::0;52615:18;52599:15:::1;:35::i;:53::-;52573:79:::0;-1:-1:-1;52667:21:0::1;52691:32;:11:::0;52573:79;52691:15:::1;:32::i;:::-;52783:11;::::0;52667:56;;-1:-1:-1;52783:30:0::1;::::0;52667:56;52783:15:::1;:30::i;:::-;52769:11;:44:::0;52858:49:::1;52871:18:::0;52891:15;52858:12:::1;:49::i;:::-;52927:51;::::0;;17392:25:1;;;17448:2;17433:18;;17426:34;;;52927:51:0::1;::::0;17365:18:1;52927:51:0::1;;;;;;;52206:784;;;;;52159:831;-1:-1:-1::0;;33169:16:0;:24;;-1:-1:-1;;;;33169:24:0;;;-1:-1:-1;51925:1072:0:o;54102:1169::-;54231:7;;54275:13;;54304:7;54299:232;;54328:14;:12;:14::i;:::-;54299:232;;;54379:21;;-1:-1:-1;;;54379:21:0;;;;54375:145;;;54431:31;54455:6;54431:23;:31::i;:::-;54421:7;:41;;;54481:13;:23;54375:145;-1:-1:-1;;;;;54545:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;54569:22:0;;;;;;:11;:22;;;;;;;;54568:23;54545:46;54541:597;;;54608:48;54630:6;54638:9;54649:6;54608:21;:48::i;:::-;54541:597;;;-1:-1:-1;;;;;54679:19:0;;;;;;:11;:19;;;;;;;;54678:20;:46;;;;-1:-1:-1;;;;;;54702:22:0;;;;;;:11;:22;;;;;;;;54678:46;54674:464;;;54741:46;54761:6;54769:9;54780:6;54741:19;:46::i;54674:464::-;-1:-1:-1;;;;;54810:19:0;;;;;;:11;:19;;;;;;;;54809:20;:47;;;;-1:-1:-1;;;;;;54834:22:0;;;;;;:11;:22;;;;;;;;54833:23;54809:47;54805:333;;;54873:44;54891:6;54899:9;54910:6;54873:17;:44::i;54805:333::-;-1:-1:-1;;;;;54939:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;54962:22:0;;;;;;:11;:22;;;;;;;;54939:45;54935:203;;;55001:48;55023:6;55031:9;55042:6;55001:21;:48::i;54935:203::-;55082:44;55100:6;55108:9;55119:6;55082:17;:44::i;:::-;55153:7;55148:43;;55176:15;48266;;48256:7;:25;48308:21;;48292:13;:37;48353:18;;48340:10;:31;48212:167;55176:15;55202:7;:19;;;;55232:13;:31;-1:-1:-1;;;;54102:1169:0:o;45543:605::-;45641:7;;45677;;45594;;;;;45695:338;45719:9;:16;45715:20;;45695:338;;;45803:7;45779;:21;45787:9;45797:1;45787:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;45787:12:0;45779:21;;;;;;;;;;;;;:31;;:83;;;45855:7;45831;:21;45839:9;45849:1;45839:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;45839:12:0;45831:21;;;;;;;;;;;;;:31;45779:83;45757:146;;;45886:7;;45895;;45878:25;;;;;;;45543:605;;:::o;45757:146::-;45928:34;45940:7;:21;45948:9;45958:1;45948:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;45948:12:0;45940:21;;;;;;;;;;;;;45928:7;;:11;:34::i;:::-;45918:44;;45987:34;45999:7;:21;46007:9;46017:1;46007:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;46007:12:0;45999:21;;;;;;;;;;;;;45987:7;;:11;:34::i;:::-;45977:44;-1:-1:-1;45737:3:0;;;;:::i;:::-;;;;45695:338;;;-1:-1:-1;46069:7:0;;46057;;:20;;:11;:20::i;:::-;46047:7;:30;46043:61;;;46087:7;;46096;;46079:25;;;;;;45543:605;;:::o;46043:61::-;46123:7;;46132;;-1:-1:-1;45543:605:0;-1:-1:-1;45543:605:0:o;44281:369::-;44341:7;44350;44359;44378:12;44393:24;44409:7;44393:15;:24::i;:::-;44378:39;;44428:28;44459:40;44491:7;44459:31;:40::i;:::-;44428:71;-1:-1:-1;44510:23:0;44536:43;44428:71;44536:17;:7;44548:4;44536:11;:17::i;:::-;:21;;:43::i;:::-;44510:69;44615:4;;-1:-1:-1;44621:20:0;;-1:-1:-1;44281:369:0;;-1:-1:-1;;;44281:369:0:o;44658:469::-;44783:7;;;;44839:24;:7;44851:11;44839;:24::i;:::-;44821:42;-1:-1:-1;44874:12:0;44889:21;:4;44898:11;44889:8;:21::i;:::-;44874:36;-1:-1:-1;44921:28:0;44952:37;:20;44977:11;44952:24;:37::i;:::-;44921:68;-1:-1:-1;45000:23:0;45026:43;44921:68;45026:17;:7;45038:4;45026:11;:17::i;:43::-;45088:7;;;;-1:-1:-1;45114:4:0;;-1:-1:-1;44658:469:0;;-1:-1:-1;;;;;;;44658:469:0:o;53005:582::-;53149:16;;;53163:1;53149:16;;;;;;;;53125:21;;53149:16;;;;;;;;;;-1:-1:-1;53149:16:0;53125:40;;53194:4;53176;53181:1;53176:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;53176:23:0;;;:7;;;;;;;;;;:23;;;;53220:19;;:26;;;-1:-1:-1;;;53220:26:0;;;;:19;;;;;:24;;:26;;;;;53176:7;;53220:26;;;;;:19;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53210:4;53215:1;53210:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;53210:36:0;;;:7;;;;;;;;;:36;53289:19;;53257:66;;53274:4;;53289:19;53311:11;53257:8;:66::i;:::-;53334:19;;:245;;-1:-1:-1;;;53334:245:0;;-1:-1:-1;;;;;53334:19:0;;;;:70;;:245;;53436:11;;53334:19;;53506:4;;53533;;53553:15;;53334:245;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53595:499;53766:19;;53734:66;;53751:4;;-1:-1:-1;;;;;53766:19:0;53788:11;53734:8;:66::i;:::-;53811:19;;-1:-1:-1;;;;;53811:19:0;:35;53854:9;53904:4;53924:11;53811:19;;54036:9;18866:8;;-1:-1:-1;;;;;18866:8:0;;18799:83;54036:9;53811:275;;;;;;-1:-1:-1;;;;;;53811:275:0;;;-1:-1:-1;;;;;4141:15:1;;;53811:275:0;;;4123:34:1;4173:18;;;4166:34;;;;4216:18;;;4209:34;;;;4259:18;;;4252:34;4323:15;;;4302:19;;;4295:44;54060:15:0;4355:19:1;;;4348:35;4057:19;;53811:275:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;53595:499;;:::o;47873:331::-;47920:7;;:12;:34;;;;-1:-1:-1;47936:13:0;;:18;47920:34;:53;;;;-1:-1:-1;47958:10:0;;:15;47920:53;47916:80;;;47873:331::o;47916:80::-;48024:7;;;48006:15;:25;48066:13;;;48042:21;:37;48111:10;;;48090:18;:31;-1:-1:-1;48132:11:0;;;;48154:17;;;;48182:14;47873:331::o;47071:794::-;47142:7;47179:21;47203:66;47215:53;47225:42;47215:9;:53::i;47203:66::-;47179:90;-1:-1:-1;47280:11:0;;47319:36;47179:90;47319:17;:6;47330:5;47319:10;:17::i;:36::-;47302:53;;47380:3;47370:6;:13;47366:456;;47406:1;47400:7;;47366:456;;;47439:3;47429:6;:13;47425:397;;47465:1;47459:7;;47425:397;;;47498:3;47488:6;:13;47484:338;;47524:1;47518:7;;47484:338;;;47557:4;47547:6;:14;47543:279;;47584:1;47578:7;;47543:279;;;47617:4;47607:6;:14;47603:219;;47644:2;47638:8;;47603:219;;;47678:4;47668:6;:14;47664:158;;47705:2;47699:8;;47664:158;;;47739:5;47729:6;:15;47725:97;;47767:2;47761:8;;47725:97;;;47808:2;47802:8;;47725:97;47839:18;47854:2;47839:10;:3;47847:1;47839:7;:10::i;:::-;:14;;:18::i;56720:737::-;56837:15;56867:23;56905:12;56932:23;56970:12;56997:28;57039:19;57050:7;57039:10;:19::i;:::-;56822:236;;;;;;;;;;;;57069:44;57086:6;57094:9;57105:7;57069:16;:44::i;:::-;-1:-1:-1;;;;;57142:15:0;;;;;;:7;:15;;;;;;:28;;57162:7;57142:19;:28::i;:::-;-1:-1:-1;;;;;57124:15:0;;;;;;:7;:15;;;;;;;;:46;;;;57199:7;:15;;;;:28;;57219:7;57199:19;:28::i;:::-;-1:-1:-1;;;;;57181:15:0;;;;;;;:7;:15;;;;;;:46;;;;57259:18;;;;;;;:39;;57282:15;57259:22;:39::i;:::-;-1:-1:-1;;;;;57238:18:0;;;;;;:7;:18;;;;;:60;57309:46;57334:20;57309:24;:46::i;:::-;57366:23;57378:4;57384;57366:11;:23::i;:::-;57422:9;-1:-1:-1;;;;;57405:44:0;57414:6;-1:-1:-1;;;;;57405:44:0;;57433:15;57405:44;;;;16197:25:1;;16185:2;16170:18;;16152:76;57405:44:0;;;;;;;;56811:646;;;;;;56720:737;;;:::o;55963:749::-;56078:15;56108:23;56146:12;56173:23;56211:12;56238:28;56280:19;56291:7;56280:10;:19::i;:::-;56063:236;;;;;;;;;;;;56310:44;56327:6;56335:9;56346:7;56310:16;:44::i;:::-;-1:-1:-1;;;;;56383:15:0;;;;;;:7;:15;;;;;;:28;;56403:7;56383:19;:28::i;:::-;-1:-1:-1;;;;;56365:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;56443:18;;;;;:7;:18;;;;;:39;;56466:15;56443:22;:39::i;:::-;-1:-1:-1;;;;;56422:18:0;;;;;;:7;:18;;;;;;;;:60;;;;56514:7;:18;;;;:39;;56537:15;56514:22;:39::i;55279:676::-;55392:15;55422:23;55460:12;55487:23;55525:12;55552:28;55594:19;55605:7;55594:10;:19::i;:::-;55377:236;;;;;;;;;;;;55624:44;55641:6;55649:9;55660:7;55624:16;:44::i;:::-;-1:-1:-1;;;;;55697:15:0;;;;;;:7;:15;;;;;;:28;;55717:7;55697:19;:28::i;39262:808::-;39379:15;39409:23;39447:12;39474:23;39512:12;39539:28;39581:19;39592:7;39581:10;:19::i;:::-;39364:236;;;;;;;;;;;;39611:44;39628:6;39636:9;39647:7;39611:16;:44::i;:::-;-1:-1:-1;;;;;39684:15:0;;;;;;:7;:15;;;;;;:28;;39704:7;39684:19;:28::i;:::-;-1:-1:-1;;;;;39666:15:0;;;;;;:7;:15;;;;;;;;:46;;;;39741:7;:15;;;;:28;;39761:7;39741:19;:28::i;46579:130::-;46643:7;46670:31;46695:5;46670:20;46682:7;;46670;:11;;:20;;;;:::i;46867:196::-;46947:7;46967:11;46981:29;46999:10;;46981:13;;:17;;:29;;;;:::i;:::-;46967:43;-1:-1:-1;47028:27:0;47049:5;47028:16;:7;46967:43;47028:11;:16::i;58059:577::-;58160:23;;-1:-1:-1;;;58160:23:0;;;;58156:473;;;58228:1;58208:17;58218:6;58208:9;:17::i;:::-;:21;58200:54;;;;-1:-1:-1;;;58200:54:0;;10584:2:1;58200:54:0;;;10566:21:1;10623:2;10603:18;;;10596:30;-1:-1:-1;;;10642:18:1;;;10635:50;10702:18;;58200:54:0;10556:170:1;58200:54:0;58269:25;58297:52;58331:17;58341:6;58331:9;:17::i;:::-;-1:-1:-1;;;;;58297:16:0;;;;;;:8;:16;;;;;;:29;;58318:7;58297:20;:29::i;:52::-;-1:-1:-1;;;;;58368:16:0;;;;;;:8;:16;;;;;;58269:80;;-1:-1:-1;58368:36:0;-1:-1:-1;58364:174:0;;;-1:-1:-1;;;;;58442:16:0;;;;;;:8;:16;;;;;;:39;;58463:17;58442:20;:39::i;:::-;-1:-1:-1;;;;;58423:16:0;;;;;;:8;:16;;;;;:58;58364:174;;;-1:-1:-1;;;;;58518:16:0;;58537:1;58518:16;;;:8;:16;;;;;:20;58364:174;-1:-1:-1;;;;;58575:19:0;;;;;;:8;:19;;;;;;:42;;58599:17;58575:23;:42::i;:::-;-1:-1:-1;;;;;58553:19:0;;;;;;:8;:19;;;;;:64;-1:-1:-1;58156:473:0;58059:577;;;:::o;46156:415::-;46239:19;46261:10;:8;:10::i;:::-;46239:32;-1:-1:-1;46282:28:0;46313:37;:20;46239:32;46313:24;:37::i;:::-;46402:4;46386:22;;;;:7;:22;;;;;;46282:68;;-1:-1:-1;46386:48:0;;46282:68;46386:26;:48::i;:::-;46377:4;46361:22;;;;:7;:22;;;;;;;;:73;;;;46449:11;:26;;;;;;46445:118;;;46531:4;46515:22;;;;:7;:22;;;;;;:48;;46542:20;46515:26;:48::i;:::-;46506:4;46490:22;;;;:7;:22;;;;;:73;46228:343;;46156:415;:::o;43580:147::-;43658:7;;:17;;43670:4;43658:11;:17::i;:::-;43648:7;:27;43699:10;;:20;;43714:4;43699:14;:20::i;:::-;43686:10;:33;-1:-1:-1;;43580:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;307:1;304;297:12;259:2;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:2;;;570:1;567;560:12;522:2;602:9;596:16;621:31;646:5;621:31;:::i;947:388::-;1015:6;1023;1076:2;1064:9;1055:7;1051:23;1047:32;1044:2;;;1092:1;1089;1082:12;1044:2;1131:9;1118:23;1150:31;1175:5;1150:31;:::i;:::-;1200:5;-1:-1:-1;1257:2:1;1242:18;;1229:32;1270:33;1229:32;1270:33;:::i;:::-;1322:7;1312:17;;;1034:301;;;;;:::o;1340:456::-;1417:6;1425;1433;1486:2;1474:9;1465:7;1461:23;1457:32;1454:2;;;1502:1;1499;1492:12;1454:2;1541:9;1528:23;1560:31;1585:5;1560:31;:::i;:::-;1610:5;-1:-1:-1;1667:2:1;1652:18;;1639:32;1680:33;1639:32;1680:33;:::i;:::-;1444:352;;1732:7;;-1:-1:-1;;;1786:2:1;1771:18;;;;1758:32;;1444:352::o;1801:315::-;1869:6;1877;1930:2;1918:9;1909:7;1905:23;1901:32;1898:2;;;1946:1;1943;1936:12;1898:2;1985:9;1972:23;2004:31;2029:5;2004:31;:::i;:::-;2054:5;2106:2;2091:18;;;;2078:32;;-1:-1:-1;;;1888:228:1:o;2121:180::-;2177:6;2230:2;2218:9;2209:7;2205:23;2201:32;2198:2;;;2246:1;2243;2236:12;2198:2;2269:26;2285:9;2269:26;:::i;2306:180::-;2365:6;2418:2;2406:9;2397:7;2393:23;2389:32;2386:2;;;2434:1;2431;2424:12;2386:2;-1:-1:-1;2457:23:1;;2376:110;-1:-1:-1;2376:110:1:o;2491:248::-;2556:6;2564;2617:2;2605:9;2596:7;2592:23;2588:32;2585:2;;;2633:1;2630;2623:12;2585:2;2669:9;2656:23;2646:33;;2698:35;2729:2;2718:9;2714:18;2698:35;:::i;:::-;2688:45;;2575:164;;;;;:::o;2744:306::-;2832:6;2840;2848;2901:2;2889:9;2880:7;2876:23;2872:32;2869:2;;;2917:1;2914;2907:12;2869:2;2946:9;2940:16;2930:26;;2996:2;2985:9;2981:18;2975:25;2965:35;;3040:2;3029:9;3025:18;3019:25;3009:35;;2859:191;;;;;:::o;4821:597::-;4933:4;4962:2;4991;4980:9;4973:21;5023:6;5017:13;5066:6;5061:2;5050:9;5046:18;5039:34;5091:1;5101:140;5115:6;5112:1;5109:13;5101:140;;;5210:14;;;5206:23;;5200:30;5176:17;;;5195:2;5172:26;5165:66;5130:10;;5101:140;;;5259:6;5256:1;5253:13;5250:2;;;5329:1;5324:2;5315:6;5304:9;5300:22;5296:31;5289:42;5250:2;-1:-1:-1;5402:2:1;5381:15;-1:-1:-1;;5377:29:1;5362:45;;;;5409:2;5358:54;;4942:476;-1:-1:-1;;;4942:476:1:o;6169:403::-;6371:2;6353:21;;;6410:2;6390:18;;;6383:30;6449:34;6444:2;6429:18;;6422:62;-1:-1:-1;;;6515:2:1;6500:18;;6493:37;6562:3;6547:19;;6343:229::o;6577:400::-;6779:2;6761:21;;;6818:2;6798:18;;;6791:30;6857:34;6852:2;6837:18;;6830:62;-1:-1:-1;;;6923:2:1;6908:18;;6901:34;6967:3;6952:19;;6751:226::o;12307:356::-;12509:2;12491:21;;;12528:18;;;12521:30;12587:34;12582:2;12567:18;;12560:62;12654:2;12639:18;;12481:182::o;16233:980::-;16495:4;16543:3;16532:9;16528:19;16574:6;16563:9;16556:25;16600:2;16638:6;16633:2;16622:9;16618:18;16611:34;16681:3;16676:2;16665:9;16661:18;16654:31;16705:6;16740;16734:13;16771:6;16763;16756:22;16809:3;16798:9;16794:19;16787:26;;16848:2;16840:6;16836:15;16822:29;;16869:1;16879:195;16893:6;16890:1;16887:13;16879:195;;;16958:13;;-1:-1:-1;;;;;16954:39:1;16942:52;;17049:15;;;;17014:12;;;;16990:1;16908:9;16879:195;;;-1:-1:-1;;;;;;;17130:32:1;;;;17125:2;17110:18;;17103:60;-1:-1:-1;;;17194:3:1;17179:19;17172:35;17091:3;16504:709;-1:-1:-1;;;16504:709:1:o;17660:128::-;17700:3;17731:1;17727:6;17724:1;17721:13;17718:2;;;17737:18;;:::i;:::-;-1:-1:-1;17773:9:1;;17708:80::o;17793:217::-;17833:1;17859;17849:2;;17903:10;17898:3;17894:20;17891:1;17884:31;17938:4;17935:1;17928:15;17966:4;17963:1;17956:15;17849:2;-1:-1:-1;17995:9:1;;17839:171::o;18015:168::-;18055:7;18121:1;18117;18113:6;18109:14;18106:1;18103:21;18098:1;18091:9;18084:17;18080:45;18077:2;;;18128:18;;:::i;:::-;-1:-1:-1;18168:9:1;;18067:116::o;18188:125::-;18228:4;18256:1;18253;18250:8;18247:2;;;18261:18;;:::i;:::-;-1:-1:-1;18298:9:1;;18237:76::o;18318:380::-;18397:1;18393:12;;;;18440;;;18461:2;;18515:4;18507:6;18503:17;18493:27;;18461:2;18568;18560:6;18557:14;18537:18;18534:38;18531:2;;;18614:10;18609:3;18605:20;18602:1;18595:31;18649:4;18646:1;18639:15;18677:4;18674:1;18667:15;18531:2;;18373:325;;;:::o;18703:135::-;18742:3;-1:-1:-1;;18763:17:1;;18760:2;;;18783:18;;:::i;:::-;-1:-1:-1;18830:1:1;18819:13;;18750:88::o;18843:127::-;18904:10;18899:3;18895:20;18892:1;18885:31;18935:4;18932:1;18925:15;18959:4;18956:1;18949:15;18975:127;19036:10;19031:3;19027:20;19024:1;19017:31;19067:4;19064:1;19057:15;19091:4;19088:1;19081:15;19107:127;19168:10;19163:3;19159:20;19156:1;19149:31;19199:4;19196:1;19189:15;19223:4;19220:1;19213:15;19371:131;-1:-1:-1;;;;;19446:31:1;;19436:42;;19426:2;;19492:1;19489;19482:12

Swarm Source

ipfs://86227a58566846502419384a78c78c980ac1af141b89bec578ca0921e01ac7c4
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.