Token EBASE

 

Overview [ERC-20]

Price
$0.00 @ 0.000000 Eth
Fully Diluted Market Cap
Max Total Supply:
10,000,000,000 EBASE

Holders:
147,541
Contract:
0x60cbb875d3c6314280dd90a4fe6cafc1d7ce5dfd0x60Cbb875D3c6314280Dd90a4Fe6cAFC1d7Ce5DfD

Decimals:
9

Social Profiles:
Not Available, Update ?

 
Balance
538.422721165 EBASE

Value
$0.00
0xdfef9f0b0d55bb46c5c1e61c56105efb88ec19e2
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
EBASE

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2023-08-23
*/

// SPDX-License-Identifier: MIT
// ███████╗██████╗░░█████╗░░██████╗███████╗  ████████╗░█████╗░██╗░░██╗███████╗███╗░░██╗
// ██╔════╝██╔══██╗██╔══██╗██╔════╝██╔════╝  ╚══██╔══╝██╔══██╗██║░██╔╝██╔════╝████╗░██║
// █████╗░░██████╦╝███████║╚█████╗░█████╗░░  ░░░██║░░░██║░░██║█████═╝░█████╗░░██╔██╗██║
// ██╔══╝░░██╔══██╗██╔══██║░╚═══██╗██╔══╝░░  ░░░██║░░░██║░░██║██╔═██╗░██╔══╝░░██║╚████║
// ███████╗██████╦╝██║░░██║██████╔╝███████╗  ░░░██║░░░╚█████╔╝██║░╚██╗███████╗██║░╚███║
// ╚══════╝╚═════╝░╚═╝░░╚═╝╚═════╝░╚══════╝  ░░░╚═╝░░░░╚════╝░╚═╝░░╚═╝╚══════╝╚═╝░░╚══╝
//  Airdrop for the early Base Chain supporters
//  
//  Website: https://ebasetoken.io/
//  Telegram: https://t.me/ebaseportal
//  Twitter: https://twitter.com/ebasetoken
//
//
// 
pragma solidity ^0.8.9;

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

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) {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

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

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

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

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + 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(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

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 WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    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;
    function sync() external;
}

interface IAirdrop {
    function airdrop(address recipient, uint256 amount) external;
}

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

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

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    
    mapping (address => bool) private botWallets;
    bool botsCantTrade = false;
    
    bool public canTrade = false;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10_000_000_000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    address payable private marketingWallet;
    address payable private devTaxWallet;

    string private _name = "EBASE";
    string private _symbol = "EBASE";
    uint8 private _decimals = 9;
    
    uint256 private _taxFeeOnBuy = 100; // 1%
    uint256 private _taxFeeOnSell = 100; // 1%
    uint256 public _taxFee = _taxFeeOnBuy;
    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousTaxFeeOnBuy = _taxFeeOnBuy;
    uint256 private _previousTaxFeeOnSell = _taxFeeOnSell;

    uint256 private _devFeeOnBuy = 100; // 1%
    uint256 private _devFeeOnSell = 100; // 1%
    uint256 private _devFee = _devFeeOnBuy;
    uint256 private _previousDevFee = _devFee;
    uint256 private _previousDevFeeOnBuy = _devFeeOnBuy;
    uint256 private _previousDevFeeOnSell = _devFeeOnSell;
    
    uint256 private _liquidityFeeOnBuy = 100; //1%
    uint256 private _liquidityFeeOnSell = 100; //1%
    uint256 public _liquidityFee = _liquidityFeeOnBuy;
    uint256 private _previousLiquidityFee = _liquidityFee;
    uint256 private _previousLiquidityFeeOnBuy = _liquidityFeeOnBuy;
    uint256 private _previousLiquidityFeeOnSell = _liquidityFeeOnSell;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify = false;
    bool public swapAndLiquifyEnabled = true;

    uint256 public _maxTxAmount = 10_000_000_000 * 10**9; //
    uint256 public _maxWalletSize = 10_000_000_000 * 10**9; //
    uint256 public _swapTokensAtAmount = 10000000 * 10**9; //0.1%
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x327Df1E6de05895d2ab08513aaDD9313Fe505d86);
        marketingWallet = payable(0x92fB5F1b2Cd07FeD5c2E0376fD082a4D56f21E18);
        devTaxWallet = payable(0x47F616C91A5EAD2EE4a9F882A883e16B22aC27FB);

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());


        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[devTaxWallet] = true;
        _isExcludedFromFee[marketingWallet] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

    function 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 totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function airdrop(address recipient, uint256 amount) external onlyOwner() {
        _removeAllFee();
        _transfer(_msgSender(), recipient, amount * 10**9);
        _restoreAllFee();
    }
    
    function airdropInternal(address recipient, uint256 amount) internal {
        _removeAllFee();
        _transfer(_msgSender(), recipient, amount);
        _restoreAllFee();
    }
    
    function airdropArray(address[] calldata newholders, uint256[] calldata amounts) external onlyOwner(){
        uint256 iterator = 0;
        require(newholders.length == amounts.length, "must be the same length");
        while(iterator < newholders.length){
            airdropInternal(newholders[iterator], amounts[iterator] * 10**9);
            iterator += 1;
        }
    }

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

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

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

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

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setMarketingWallet(address walletAddress) public onlyOwner {
        marketingWallet = payable(walletAddress);
    }
    
    function updateBuyFees(
        uint256 taxFeeOnBuy,
        uint256 liquidityFeeOnBuy,
        uint256 devFeeOnBuy
    ) external onlyOwner {
        _taxFeeOnBuy = taxFeeOnBuy;
        _liquidityFeeOnBuy = liquidityFeeOnBuy;
        _devFeeOnBuy = devFeeOnBuy;
        uint256 buyTotalFees = _taxFeeOnBuy + _liquidityFeeOnBuy + _devFeeOnBuy;
        require(buyTotalFees <= 700, "Must keep fees at 7% or less");
    }

    function updateSellFees(
        uint256 taxFeeOnSell,
        uint256 liquidityFeeOnSell,
        uint256 devFeeOnSell
    ) external onlyOwner {
        _taxFeeOnSell = taxFeeOnSell;
        _liquidityFeeOnSell = liquidityFeeOnSell;
        _devFeeOnSell = devFeeOnSell;
        uint256 sellTotalFees = _taxFeeOnSell + _liquidityFeeOnSell + _devFeeOnSell;
        require(sellTotalFees <= 700, "Must keep fees at 7% or less");
    }

    function removeAllFee() external onlyOwner(){
        _removeAllFee();
    }

    function _removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousDevFee = _devFee;

        _previousTaxFeeOnBuy =_taxFeeOnBuy;
        _previousLiquidityFeeOnBuy = _liquidityFeeOnBuy;
        _previousDevFeeOnBuy  = _devFeeOnBuy;

        _previousTaxFeeOnSell =_taxFeeOnSell;
        _previousLiquidityFeeOnSell = _liquidityFeeOnSell;
        _previousDevFeeOnSell  = _devFeeOnSell;

        _devFee = 0;
        _taxFee = 0;
        _liquidityFee = 0;

        _taxFeeOnBuy = 0;
        _liquidityFeeOnBuy = 0;
        _devFeeOnBuy = 0;

        _taxFeeOnSell = 0;
        _liquidityFeeOnSell = 0;
        _devFeeOnSell = 0;
    }

    function restoreAllFee() external onlyOwner() {
        _restoreAllFee();
    }

    function _restoreAllFee() private{
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _devFee = _previousDevFee;

        _taxFeeOnBuy = _previousTaxFeeOnBuy;
        _liquidityFeeOnBuy = _previousLiquidityFeeOnBuy;
        _devFeeOnBuy = _previousDevFeeOnBuy;

        _taxFeeOnSell = _previousTaxFeeOnSell;
        _liquidityFeeOnSell = _previousLiquidityFeeOnSell;
        _devFeeOnSell = _previousDevFeeOnSell;
    }

    function setTxLimits(uint256 maxTxAmount, uint256 maxWalletSize, uint256 SwapThresholdAmount) external onlyOwner{
        require(maxTxAmount > 10_000_000, "Max Tx Amount cannot be less than 10 Million");
        require(maxWalletSize > 10_000_000, "Max Tx Amount cannot be less than 10 Million");
        require(SwapThresholdAmount > 100_000, "Swap Threshold Amount cannot be less than 100k");
        _swapTokensAtAmount = SwapThresholdAmount * 10**9;
        _maxWalletSize = maxWalletSize*10**9;
        _maxTxAmount = maxTxAmount * 10**9;

    }
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount > 10_000_000, "Max Tx Amount cannot be less than 10 Million");
        _maxTxAmount = maxTxAmount * 10**9;
    }
    
    function setMaxWalletSize(uint256 maxWalletSize) public onlyOwner {
        require(maxWalletSize > 10_000_000, "Max Tx Amount cannot be less than 10 Million");
        _maxWalletSize = maxWalletSize*10**9;
    }

    function setSwapThresholdAmount(uint256 SwapThresholdAmount) external onlyOwner() {
        require(SwapThresholdAmount > 100_000, "Swap Threshold Amount cannot be less than 100k");
        _swapTokensAtAmount = SwapThresholdAmount * 10**9;
    }
    
    function claimTokens () public onlyOwner {
        marketingWallet.transfer(address(this).balance);
    }
    
    function claimOtherTokens(IERC20 tokenAddress, address walletaddress) external onlyOwner() {
        tokenAddress.transfer(walletaddress, tokenAddress.balanceOf(address(this)));
    }
    
    function clearStuckBalance (address walletAddress) external onlyOwner() {
        payable(walletAddress).transfer(address(this).balance);
    }
    
    function addBotWallet(address botwallet) external onlyOwner() {
        botWallets[botwallet] = true;
    }
    
    function removeBotWallet(address botwallet) external onlyOwner() {
        botWallets[botwallet] = false;
    }
    
    function getBotWalletStatus(address botwallet) public view returns (bool) {
        return botWallets[botwallet];
    }
    
    function allowtrading() external onlyOwner() {
        canTrade = true;
    }

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

    function manualswap() external {
        require(_msgSender() == marketingWallet || _msgSender() == owner());
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualsend() external {
        require(_msgSender() == marketingWallet || _msgSender() == owner());
        uint256 contractETHBalance = address(this).balance;
        uint256 marketingBalance = contractETHBalance.mul(90).div(100);
        uint256 devBalance = contractETHBalance.mul(10).div(100);
        sendETHToFee(marketingBalance, devBalance);
    }

    function manualSwapAndLiquify() external {
        require(_msgSender() == marketingWallet || _msgSender() == owner());
        uint256 contractBalance = balanceOf(address(this));
        swapAndLiquify(contractBalance);
    }

    receive() external payable {}

    fallback() external payable {}

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

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

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

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**4);
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(10**4);
    }
    
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        
        if(!canTrade){
            require(from == owner(),"TOKEN: This account cannot send tokens until trading is enabled");
        }
        
        if(botWallets[from] || botWallets[to]){
            require(botsCantTrade, "bots arent allowed to trade");
        }

        if(to != uniswapV2Pair) {
            require(balanceOf(to) + amount < _maxWalletSize, "TOKEN: Balance exceeds wallet size!");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= _swapTokensAtAmount;
        if (overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled) {
            swapAndLiquify(contractTokenBalance);
        }

        bool takeFee = true;
        
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }else{
            if(from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _liquidityFee = _liquidityFeeOnBuy;
                _taxFee = _taxFeeOnBuy + _devFeeOnBuy;
            }

            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _liquidityFee = _liquidityFeeOnSell;
                _taxFee = _taxFeeOnSell + _devFeeOnSell;
            }
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {

        if (contractTokenBalance > _swapTokensAtAmount * 10) {
            contractTokenBalance = _swapTokensAtAmount * 10;
        }

        uint256 totalLiquidityFee = (_liquidityFeeOnBuy+_liquidityFeeOnSell).mul(10**9);
        uint256 totalDevFee = (_devFeeOnBuy+_devFeeOnSell).mul(10**9);
        uint256 totalMarketingFee = (_taxFeeOnBuy+_taxFeeOnSell).mul(10**9);
        uint256 totalFee = totalMarketingFee+totalLiquidityFee+totalDevFee;

        uint256 amountForLiquidity = (contractTokenBalance.mul(totalLiquidityFee)).div(totalFee); 
        uint256 halfForLiquidity = amountForLiquidity.div(2);
        uint256 halfToSwapToETH = amountForLiquidity.sub(halfForLiquidity);

        uint256 amountToSwapForETH = contractTokenBalance.sub(halfForLiquidity);

        uint256 initialBalance = address(this).balance;
        swapTokensForEth(amountToSwapForETH);

        uint256 newBalance = address(this).balance.sub(initialBalance);
        uint256 newTotalFee = totalFee - totalLiquidityFee.div(2);
        uint256 ethForLiquidity = (newBalance*totalLiquidityFee/2).div(newTotalFee);

        if (halfForLiquidity > 0 && ethForLiquidity > 0) {
            addLiquidity(halfForLiquidity, ethForLiquidity);
            emit SwapAndLiquify(halfToSwapToETH, newBalance, halfForLiquidity);
        }
        
        uint256 ethForDev = (newBalance.mul(totalDevFee)).div(newTotalFee);
        uint256 ethForMarketing = newBalance - ethForLiquidity - ethForDev;

        if(ethForMarketing > 0 && ethForDev > 0)
            sendETHToFee(ethForMarketing, ethForDev);

    }


    function sendETHToFee(uint256 marketingBalance, uint256 devBalance) private {
        marketingWallet.transfer(marketingBalance);
        devTaxWallet.transfer(devBalance);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap{
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, 
            0,
            owner(),
            block.timestamp
        );
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        
        if(!takeFee)
            _removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            _restoreAllFee();
    }

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

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

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"addBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowtrading","outputs":[],"stateMutability":"nonpayable","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":"canTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"address","name":"walletaddress","type":"address"}],"name":"claimOtherTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"getBotWalletStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","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":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeAllFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"removeBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreAllFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletSize","type":"uint256"},{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"setTxLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"devFeeOnBuy","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"devFeeOnSell","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600a805461ffff19169055678ac7230489e80000600b8190556200002b9060001962000426565b620000399060001962000449565b600c55604080518082019091526005815264454241534560d81b602082015260109062000067908262000516565b50604080518082019091526005815264454241534560d81b602082015260119062000093908262000516565b506012805460ff1916600917905560646013819055601481905560158190556016819055601781905560188190556019819055601a819055601b819055601c819055601d819055601e819055601f81905560208190556021819055602281905560238190556024556025805461ffff1916610100179055678ac7230489e800006026819055602755662386f26fc100006028553480156200013357600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c543360009081526003602090815260409182902092909255600e80546001600160a01b03199081167392fb5f1b2cd07fed5c2e0376fd082a4d56f21e1817909155600f80549091167347f616c91a5ead2ee4a9f882a883e16b22ac27fb179055805163c45a015560e01b8152905173327df1e6de05895d2ab08513aadd9313fe505d8692839263c45a015592600480830193928290030181865afa15801562000224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024a9190620005e2565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000298573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002be9190620005e2565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200030c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003329190620005e2565b6001600160a01b0390811660a05281166080526001600660006200035e6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526006909352818320805485166001908117909155600f54821684528284208054861682179055600e54909116835291208054909216179055620003cf3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200041791815260200190565b60405180910390a35062000614565b6000826200044457634e487b7160e01b600052601260045260246000fd5b500690565b818103818111156200046b57634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200049c57607f821691505b602082108103620004bd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200051157600081815260208120601f850160051c81016020861015620004ec5750805b601f850160051c820191505b818110156200050d57828155600101620004f8565b5050505b505050565b81516001600160401b0381111562000532576200053262000471565b6200054a8162000543845462000487565b84620004c3565b602080601f831160018114620005825760008415620005695750858301515b600019600386901b1c1916600185901b1785556200050d565b600085815260208120601f198616915b82811015620005b35788860151825594840194600190910190840162000592565b5085821015620005d25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620005f557600080fd5b81516001600160a01b03811681146200060d57600080fd5b9392505050565b60805160a0516139f162000687600039600081816106420152818161223201528181612314015281816123bb015261244d01526000818161040a015281816123f70152818161248901528181612a8501528181612b3e01528181612b7a01528181612fc10152612fe801526139f16000f3fe6080604052600436106103555760003560e01c80636fc3eaec116101b9578063a69df4b5116100f6578063dd4670641161009a578063ea1644d51161006c578063ea1644d514610a31578063ea2f0b3714610a51578063ec28438a14610a71578063f2fde38b14610a9157005b8063dd46706414610996578063dd62ed3e146109b6578063e46b3b3f146109fc578063e7e3e3a714610a1c57005b8063c17b5b8c116100d3578063c17b5b8c14610921578063c3c8cd8014610941578063c49b9a8014610956578063d4a3883f1461097657005b8063a69df4b5146108d7578063a9059cbb146108ec578063b6c523241461090c57005b806388f820201161015d5780638f9a55c01161013a5780638f9a55c01461087757806395d89b411461088d578063a457c2d7146108a2578063a6334231146108c257005b806388f82020146108005780638ba4cc3c146108395780638da5cb5b1461085957005b8063733b864f11610196578063733b864f14610795578063764d72bf146107aa5780637d1db4a5146107ca5780638095d564146107e057005b80636fc3eaec1461074b57806370a0823114610760578063715018a61461078057005b80633685d4191161029257806348c54b9d116102365780635342acb4116102085780635342acb4146106a35780635d098b38146106dc57806360d48489146106fc5780636bc87c3a1461073557005b806348c54b9d1461061b57806349bd5a5e146106305780634a74bb021461066457806352390c021461068357005b80633b124fe71161026f5780633b124fe7146105a55780633bd5d173146105bb578063437823ec146105db5780634549b039146105fb57005b80633685d4191461054557806339509351146105655780633ae7dc201461058557005b806329e04b4a116102f95780632f05205c116102d65780632f05205c146104d95780632fd689e3146104f8578063301370af1461050e578063313ce5671461052357005b806329e04b4a146104795780632a360631146104995780632d838119146104b957005b806313114a9d1161033257806313114a9d146103d95780631694505e146103f857806318160ddd1461044457806323b872dd1461045957005b80630305caff1461035e57806306fdde031461037e578063095ea7b3146103a957005b3661035c57005b005b34801561036a57600080fd5b5061035c61037936600461343b565b610ab1565b34801561038a57600080fd5b50610393610b05565b6040516103a09190613458565b60405180910390f35b3480156103b557600080fd5b506103c96103c43660046134a6565b610b97565b60405190151581526020016103a0565b3480156103e557600080fd5b50600d545b6040519081526020016103a0565b34801561040457600080fd5b5061042c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103a0565b34801561045057600080fd5b50600b546103ea565b34801561046557600080fd5b506103c96104743660046134d2565b610bae565b34801561048557600080fd5b5061035c610494366004613513565b610c17565b3480156104a557600080fd5b5061035c6104b436600461343b565b610c77565b3480156104c557600080fd5b506103ea6104d4366004613513565b610cc5565b3480156104e557600080fd5b50600a546103c990610100900460ff1681565b34801561050457600080fd5b506103ea60285481565b34801561051a57600080fd5b5061035c610d49565b34801561052f57600080fd5b5060125460405160ff90911681526020016103a0565b34801561055157600080fd5b5061035c61056036600461343b565b610d7d565b34801561057157600080fd5b506103c96105803660046134a6565b610f33565b34801561059157600080fd5b5061035c6105a036600461352c565b610f69565b3480156105b157600080fd5b506103ea60155481565b3480156105c757600080fd5b5061035c6105d6366004613513565b611079565b3480156105e757600080fd5b5061035c6105f636600461343b565b611163565b34801561060757600080fd5b506103ea610616366004613573565b6111b1565b34801561062757600080fd5b5061035c61123e565b34801561063c57600080fd5b5061042c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561067057600080fd5b506025546103c990610100900460ff1681565b34801561068f57600080fd5b5061035c61069e36600461343b565b6112a4565b3480156106af57600080fd5b506103c96106be36600461343b565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106e857600080fd5b5061035c6106f736600461343b565b6113f7565b34801561070857600080fd5b506103c961071736600461343b565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561074157600080fd5b506103ea60215481565b34801561075757600080fd5b5061035c611443565b34801561076c57600080fd5b506103ea61077b36600461343b565b6114b1565b34801561078c57600080fd5b5061035c611510565b3480156107a157600080fd5b5061035c611572565b3480156107b657600080fd5b5061035c6107c536600461343b565b6115bd565b3480156107d657600080fd5b506103ea60265481565b3480156107ec57600080fd5b5061035c6107fb366004613598565b61161c565b34801561080c57600080fd5b506103c961081b36600461343b565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561084557600080fd5b5061035c6108543660046134a6565b6116c6565b34801561086557600080fd5b506000546001600160a01b031661042c565b34801561088357600080fd5b506103ea60275481565b34801561089957600080fd5b50610393611718565b3480156108ae57600080fd5b506103c96108bd3660046134a6565b611727565b3480156108ce57600080fd5b5061035c611776565b3480156108e357600080fd5b5061035c6117b1565b3480156108f857600080fd5b506103c96109073660046134a6565b6118b7565b34801561091857600080fd5b506002546103ea565b34801561092d57600080fd5b5061035c61093c366004613598565b6118c4565b34801561094d57600080fd5b5061035c61190a565b34801561096257600080fd5b5061035c6109713660046135c4565b611955565b34801561098257600080fd5b5061035c61099136600461362d565b6119d3565b3480156109a257600080fd5b5061035c6109b1366004613513565b611ac6565b3480156109c257600080fd5b506103ea6109d136600461352c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a0857600080fd5b5061035c610a17366004613598565b611b4b565b348015610a2857600080fd5b5061035c611c13565b348015610a3d57600080fd5b5061035c610a4c366004613513565b611c45565b348015610a5d57600080fd5b5061035c610a6c36600461343b565b611ca5565b348015610a7d57600080fd5b5061035c610a8c366004613513565b611cf0565b348015610a9d57600080fd5b5061035c610aac36600461343b565b611d50565b6000546001600160a01b03163314610ae45760405162461bcd60e51b8152600401610adb90613699565b60405180910390fd5b6001600160a01b03166000908152600960205260409020805460ff19169055565b606060108054610b14906136ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610b40906136ce565b8015610b8d5780601f10610b6257610100808354040283529160200191610b8d565b820191906000526020600020905b815481529060010190602001808311610b7057829003601f168201915b5050505050905090565b6000610ba4338484611e28565b5060015b92915050565b6000610bbb848484611f4c565b610c0d8433610c088560405180606001604052806028815260200161394f602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906124f1565b611e28565b5060019392505050565b6000546001600160a01b03163314610c415760405162461bcd60e51b8152600401610adb90613699565b620186a08111610c635760405162461bcd60e51b8152600401610adb90613708565b610c7181633b9aca0061376c565b60285550565b6000546001600160a01b03163314610ca15760405162461bcd60e51b8152600401610adb90613699565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000600c54821115610d2c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610adb565b6000610d3661252b565b9050610d42838261254e565b9392505050565b6000546001600160a01b03163314610d735760405162461bcd60e51b8152600401610adb90613699565b610d7b612590565b565b6000546001600160a01b03163314610da75760405162461bcd60e51b8152600401610adb90613699565b6001600160a01b03811660009081526007602052604090205460ff16610e0f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610adb565b60005b600854811015610f2f57816001600160a01b031660088281548110610e3957610e39613783565b6000918252602090912001546001600160a01b031603610f1d5760088054610e6390600190613799565b81548110610e7357610e73613783565b600091825260209091200154600880546001600160a01b039092169183908110610e9f57610e9f613783565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610ef757610ef76137ac565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610f27816137c2565b915050610e12565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610ba4918590610c08908661260a565b6000546001600160a01b03163314610f935760405162461bcd60e51b8152600401610adb90613699565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a0823190602401602060405180830381865afa158015610fe1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100591906137db565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611050573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107491906137f4565b505050565b3360008181526007602052604090205460ff16156110ee5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610adb565b60006110f983612669565b505050506001600160a01b038416600090815260036020526040902054919250611125919050826126b8565b6001600160a01b038316600090815260036020526040902055600c5461114b90826126b8565b600c55600d5461115b908461260a565b600d55505050565b6000546001600160a01b0316331461118d5760405162461bcd60e51b8152600401610adb90613699565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600b548311156112055760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610adb565b8161122457600061121584612669565b50939550610ba8945050505050565b600061122f84612669565b50929550610ba8945050505050565b6000546001600160a01b031633146112685760405162461bcd60e51b8152600401610adb90613699565b600e546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156112a1573d6000803e3d6000fd5b50565b6000546001600160a01b031633146112ce5760405162461bcd60e51b8152600401610adb90613699565b6001600160a01b03811660009081526007602052604090205460ff16156113375760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610adb565b6001600160a01b03811660009081526003602052604090205415611391576001600160a01b03811660009081526003602052604090205461137790610cc5565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146114215760405162461bcd60e51b8152600401610adb90613699565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b600e546001600160a01b0316336001600160a01b0316148061146f57506000546001600160a01b031633145b61147857600080fd5b476000611491606461148b84605a6126fa565b9061254e565b905060006114a5606461148b85600a6126fa565b9050611074828261277c565b6001600160a01b03811660009081526007602052604081205460ff16156114ee57506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610ba890610cc5565b6000546001600160a01b0316331461153a5760405162461bcd60e51b8152600401610adb90613699565b600080546040516001600160a01b0390911690600080516020613977833981519152908390a3600080546001600160a01b0319169055565b600e546001600160a01b0316336001600160a01b0316148061159e57506000546001600160a01b031633145b6115a757600080fd5b60006115b2306114b1565b90506112a1816127f1565b6000546001600160a01b031633146115e75760405162461bcd60e51b8152600401610adb90613699565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610f2f573d6000803e3d6000fd5b6000546001600160a01b031633146116465760405162461bcd60e51b8152600401610adb90613699565b6013839055601f82905560198190556000816116628486613811565b61166c9190613811565b90506102bc8111156116c05760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203725206f72206c657373000000006044820152606401610adb565b50505050565b6000546001600160a01b031633146116f05760405162461bcd60e51b8152600401610adb90613699565b6116f8612590565b611710338361170b84633b9aca0061376c565b611f4c565b610f2f6129e9565b606060118054610b14906136ce565b6000610ba43384610c0885604051806060016040528060258152602001613997602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906124f1565b6000546001600160a01b031633146117a05760405162461bcd60e51b8152600401610adb90613699565b600a805461ff001916610100179055565b6001546001600160a01b031633146118175760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610adb565b60025442116118685760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610adb565b600154600080546040516001600160a01b03938416939091169160008051602061397783398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610ba4338484611f4c565b6000546001600160a01b031633146118ee5760405162461bcd60e51b8152600401610adb90613699565b60148390556020829055601a8190556000816116628486613811565b600e546001600160a01b0316336001600160a01b0316148061193657506000546001600160a01b031633145b61193f57600080fd5b600061194a306114b1565b90506112a181612a21565b6000546001600160a01b0316331461197f5760405162461bcd60e51b8152600401610adb90613699565b602580548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906119c890831515815260200190565b60405180910390a150565b6000546001600160a01b031633146119fd5760405162461bcd60e51b8152600401610adb90613699565b6000838214611a4e5760405162461bcd60e51b815260206004820152601760248201527f6d757374206265207468652073616d65206c656e6774680000000000000000006044820152606401610adb565b83811015611abf57611aad858583818110611a6b57611a6b613783565b9050602002016020810190611a80919061343b565b848484818110611a9257611a92613783565b90506020020135633b9aca00611aa8919061376c565b612bf8565b611ab8600182613811565b9050611a4e565b5050505050565b6000546001600160a01b03163314611af05760405162461bcd60e51b8152600401610adb90613699565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611b1f8142613811565b600255600080546040516001600160a01b0390911690600080516020613977833981519152908390a350565b6000546001600160a01b03163314611b755760405162461bcd60e51b8152600401610adb90613699565b629896808311611b975760405162461bcd60e51b8152600401610adb90613824565b629896808211611bb95760405162461bcd60e51b8152600401610adb90613824565b620186a08111611bdb5760405162461bcd60e51b8152600401610adb90613708565b611be981633b9aca0061376c565b602855611bfa82633b9aca0061376c565b602755611c0b83633b9aca0061376c565b602655505050565b6000546001600160a01b03163314611c3d5760405162461bcd60e51b8152600401610adb90613699565b610d7b6129e9565b6000546001600160a01b03163314611c6f5760405162461bcd60e51b8152600401610adb90613699565b629896808111611c915760405162461bcd60e51b8152600401610adb90613824565b611c9f81633b9aca0061376c565b60275550565b6000546001600160a01b03163314611ccf5760405162461bcd60e51b8152600401610adb90613699565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611d1a5760405162461bcd60e51b8152600401610adb90613699565b629896808111611d3c5760405162461bcd60e51b8152600401610adb90613824565b611d4a81633b9aca0061376c565b60265550565b6000546001600160a01b03163314611d7a5760405162461bcd60e51b8152600401610adb90613699565b6001600160a01b038116611ddf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610adb565b600080546040516001600160a01b038085169392169160008051602061397783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611e8a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610adb565b6001600160a01b038216611eeb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610adb565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611fb05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610adb565b6001600160a01b0382166120125760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610adb565b600081116120745760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610adb565b6000546001600160a01b038481169116148015906120a057506000546001600160a01b03838116911614155b15612108576026548111156121085760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610adb565b600a54610100900460ff1661219a576000546001600160a01b0384811691161461219a5760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006064820152608401610adb565b6001600160a01b03831660009081526009602052604090205460ff16806121d957506001600160a01b03821660009081526009602052604090205460ff165b1561223057600a5460ff166122305760405162461bcd60e51b815260206004820152601b60248201527f626f7473206172656e7420616c6c6f77656420746f20747261646500000000006044820152606401610adb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146122d95760275481612276846114b1565b6122809190613811565b106122d95760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b6064820152608401610adb565b60006122e4306114b1565b905060265481106122f457506026545b6028548110801590819061230b575060255460ff16155b801561234957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b801561235c5750602554610100900460ff165b1561236a5761236a826127f1565b6001600160a01b03851660009081526006602052604090205460019060ff16806123ac57506001600160a01b03851660009081526006602052604090205460ff165b156123b9575060006124dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614801561242c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b1561244b57601f546021556019546013546124479190613811565b6015555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161480156124be57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b156124dd57602054602155601a546014546124d99190613811565b6015555b6124e986868684612c0b565b505050505050565b600081848411156125155760405162461bcd60e51b8152600401610adb9190613458565b5060006125228486613799565b95945050505050565b6000806000612538612d79565b9092509050612547828261254e565b9250505090565b6000610d4283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612efb565b6015541580156125a05750602154155b156125a757565b6015805460165560218054602255601b8054601c5560138054601755601f805460235560198054601d556014805460185560208054602455601a8054601e5560009687905597869055958590559284905590839055829055819055908190559055565b6000806126178385613811565b905083811015610d425760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610adb565b60008060008060008060008060006126808a612f29565b925092509250600080600061269e8d868661269961252b565b612f6b565b919f909e50909c50959a5093985091965092945050505050565b6000610d4283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124f1565b60008260000361270c57506000610ba8565b6000612718838561376c565b9050826127258583613870565b14610d425760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610adb565b600e546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156127b6573d6000803e3d6000fd5b50600f546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611074573d6000803e3d6000fd5b6025805460ff1916600117905560285461280c90600a61376c565b8111156128245760285461282190600a61376c565b90505b6000612844633b9aca00602054601f5461283e9190613811565b906126fa565b90506000612860633b9aca00601a5460195461283e9190613811565b9050600061287c633b9aca0060145460135461283e9190613811565b905060008261288b8584613811565b6128959190613811565b905060006128a78261148b88886126fa565b905060006128b682600261254e565b905060006128c483836126b8565b905060006128d289846126b8565b9050476128de82612a21565b60006128ea47836126b8565b905060006128f98b600261254e565b6129039089613799565b905060006129218260026129178f8761376c565b61148b9190613870565b90506000871180156129335750600081115b15612984576129428782612fbb565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60006129948361148b868f6126fa565b90506000816129a38487613799565b6129ad9190613799565b90506000811180156129bf5750600082115b156129ce576129ce818361277c565b50506025805460ff1916905550505050505050505050505050565b601654601555602254602155601c54601b55601754601355602354601f55601d54601955601854601455602454602055601e54601a55565b6025805460ff191660011790556040805160028082526060820183526000926020830190803683370190505090503081600081518110612a6357612a63613783565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b059190613892565b81600181518110612b1857612b18613783565b60200260200101906001600160a01b031690816001600160a01b031681525050612b63307f000000000000000000000000000000000000000000000000000000000000000084611e28565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612bb89085906000908690309042906004016138af565b600060405180830381600087803b158015612bd257600080fd5b505af1158015612be6573d6000803e3d6000fd5b50506025805460ff1916905550505050565b612c00612590565b611710338383611f4c565b80612c1857612c18612590565b6001600160a01b03841660009081526007602052604090205460ff168015612c5957506001600160a01b03831660009081526007602052604090205460ff16155b15612c6e57612c698484846130ba565b612d6c565b6001600160a01b03841660009081526007602052604090205460ff16158015612caf57506001600160a01b03831660009081526007602052604090205460ff165b15612cbf57612c698484846131e0565b6001600160a01b03841660009081526007602052604090205460ff16158015612d0157506001600160a01b03831660009081526007602052604090205460ff16155b15612d1157612c69848484613289565b6001600160a01b03841660009081526007602052604090205460ff168015612d5157506001600160a01b03831660009081526007602052604090205460ff165b15612d6157612c698484846132cd565b612d6c848484613289565b806116c0576116c06129e9565b600c54600b546000918291825b600854811015612ecb57826003600060088481548110612da857612da8613783565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612e135750816004600060088481548110612dec57612dec613783565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612e2957600c54600b54945094505050509091565b612e6f6003600060088481548110612e4357612e43613783565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906126b8565b9250612eb76004600060088481548110612e8b57612e8b613783565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906126b8565b915080612ec3816137c2565b915050612d86565b50600b54600c54612edb9161254e565b821015612ef257600c54600b549350935050509091565b90939092509050565b60008183612f1c5760405162461bcd60e51b8152600401610adb9190613458565b5060006125228486613870565b600080600080612f3885613340565b90506000612f458661335d565b90506000612f5d82612f5789866126b8565b906126b8565b979296509094509092505050565b6000808080612f7a88866126fa565b90506000612f8888876126fa565b90506000612f9688886126fa565b90506000612fa882612f5786866126b8565b939b939a50919850919650505050505050565b612fe6307f000000000000000000000000000000000000000000000000000000000000000084611e28565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d71982308560008061302d6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015613095573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611abf9190613920565b6000806000806000806130cc87612669565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506130fe90886126b8565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461312d90876126b8565b6001600160a01b03808b1660009081526003602052604080822093909355908a168152205461315c908661260a565b6001600160a01b03891660009081526003602052604090205561317e8161337a565b6131888483613402565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516131cd91815260200190565b60405180910390a3505050505050505050565b6000806000806000806131f287612669565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061322490876126b8565b6001600160a01b03808b16600090815260036020908152604080832094909455918b1681526004909152205461325a908461260a565b6001600160a01b03891660009081526004602090815260408083209390935560039052205461315c908661260a565b60008060008060008061329b87612669565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061312d90876126b8565b6000806000806000806132df87612669565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061331190886126b8565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461322490876126b8565b6000610ba861271061148b601554856126fa90919063ffffffff16565b6000610ba861271061148b602154856126fa90919063ffffffff16565b600061338461252b565b9050600061339283836126fa565b306000908152600360205260409020549091506133af908261260a565b3060009081526003602090815260408083209390935560079052205460ff161561107457306000908152600460205260409020546133ed908461260a565b30600090815260046020526040902055505050565b600c5461340f90836126b8565b600c55600d5461341f908261260a565b600d555050565b6001600160a01b03811681146112a157600080fd5b60006020828403121561344d57600080fd5b8135610d4281613426565b600060208083528351808285015260005b8181101561348557858101830151858201604001528201613469565b506000604082860101526040601f19601f8301168501019250505092915050565b600080604083850312156134b957600080fd5b82356134c481613426565b946020939093013593505050565b6000806000606084860312156134e757600080fd5b83356134f281613426565b9250602084013561350281613426565b929592945050506040919091013590565b60006020828403121561352557600080fd5b5035919050565b6000806040838503121561353f57600080fd5b823561354a81613426565b9150602083013561355a81613426565b809150509250929050565b80151581146112a157600080fd5b6000806040838503121561358657600080fd5b82359150602083013561355a81613565565b6000806000606084860312156135ad57600080fd5b505081359360208301359350604090920135919050565b6000602082840312156135d657600080fd5b8135610d4281613565565b60008083601f8401126135f357600080fd5b50813567ffffffffffffffff81111561360b57600080fd5b6020830191508360208260051b850101111561362657600080fd5b9250929050565b6000806000806040858703121561364357600080fd5b843567ffffffffffffffff8082111561365b57600080fd5b613667888389016135e1565b9096509450602087013591508082111561368057600080fd5b5061368d878288016135e1565b95989497509550505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806136e257607f821691505b60208210810361370257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f53776170205468726573686f6c6420416d6f756e742063616e6e6f742062652060408201526d6c657373207468616e203130306b60901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ba857610ba8613756565b634e487b7160e01b600052603260045260246000fd5b81810381811115610ba857610ba8613756565b634e487b7160e01b600052603160045260246000fd5b6000600182016137d4576137d4613756565b5060010190565b6000602082840312156137ed57600080fd5b5051919050565b60006020828403121561380657600080fd5b8151610d4281613565565b80820180821115610ba857610ba8613756565b6020808252602c908201527f4d617820547820416d6f756e742063616e6e6f74206265206c6573732074686160408201526b371018981026b4b63634b7b760a11b606082015260800190565b60008261388d57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156138a457600080fd5b8151610d4281613426565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138ff5784516001600160a01b0316835293830193918301916001016138da565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561393557600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220566caf97b71f95cf6fc1d91443aae68fa20761b4ca23faf18ef28c1dd935dc4164736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103555760003560e01c80636fc3eaec116101b9578063a69df4b5116100f6578063dd4670641161009a578063ea1644d51161006c578063ea1644d514610a31578063ea2f0b3714610a51578063ec28438a14610a71578063f2fde38b14610a9157005b8063dd46706414610996578063dd62ed3e146109b6578063e46b3b3f146109fc578063e7e3e3a714610a1c57005b8063c17b5b8c116100d3578063c17b5b8c14610921578063c3c8cd8014610941578063c49b9a8014610956578063d4a3883f1461097657005b8063a69df4b5146108d7578063a9059cbb146108ec578063b6c523241461090c57005b806388f820201161015d5780638f9a55c01161013a5780638f9a55c01461087757806395d89b411461088d578063a457c2d7146108a2578063a6334231146108c257005b806388f82020146108005780638ba4cc3c146108395780638da5cb5b1461085957005b8063733b864f11610196578063733b864f14610795578063764d72bf146107aa5780637d1db4a5146107ca5780638095d564146107e057005b80636fc3eaec1461074b57806370a0823114610760578063715018a61461078057005b80633685d4191161029257806348c54b9d116102365780635342acb4116102085780635342acb4146106a35780635d098b38146106dc57806360d48489146106fc5780636bc87c3a1461073557005b806348c54b9d1461061b57806349bd5a5e146106305780634a74bb021461066457806352390c021461068357005b80633b124fe71161026f5780633b124fe7146105a55780633bd5d173146105bb578063437823ec146105db5780634549b039146105fb57005b80633685d4191461054557806339509351146105655780633ae7dc201461058557005b806329e04b4a116102f95780632f05205c116102d65780632f05205c146104d95780632fd689e3146104f8578063301370af1461050e578063313ce5671461052357005b806329e04b4a146104795780632a360631146104995780632d838119146104b957005b806313114a9d1161033257806313114a9d146103d95780631694505e146103f857806318160ddd1461044457806323b872dd1461045957005b80630305caff1461035e57806306fdde031461037e578063095ea7b3146103a957005b3661035c57005b005b34801561036a57600080fd5b5061035c61037936600461343b565b610ab1565b34801561038a57600080fd5b50610393610b05565b6040516103a09190613458565b60405180910390f35b3480156103b557600080fd5b506103c96103c43660046134a6565b610b97565b60405190151581526020016103a0565b3480156103e557600080fd5b50600d545b6040519081526020016103a0565b34801561040457600080fd5b5061042c7f000000000000000000000000327df1e6de05895d2ab08513aadd9313fe505d8681565b6040516001600160a01b0390911681526020016103a0565b34801561045057600080fd5b50600b546103ea565b34801561046557600080fd5b506103c96104743660046134d2565b610bae565b34801561048557600080fd5b5061035c610494366004613513565b610c17565b3480156104a557600080fd5b5061035c6104b436600461343b565b610c77565b3480156104c557600080fd5b506103ea6104d4366004613513565b610cc5565b3480156104e557600080fd5b50600a546103c990610100900460ff1681565b34801561050457600080fd5b506103ea60285481565b34801561051a57600080fd5b5061035c610d49565b34801561052f57600080fd5b5060125460405160ff90911681526020016103a0565b34801561055157600080fd5b5061035c61056036600461343b565b610d7d565b34801561057157600080fd5b506103c96105803660046134a6565b610f33565b34801561059157600080fd5b5061035c6105a036600461352c565b610f69565b3480156105b157600080fd5b506103ea60155481565b3480156105c757600080fd5b5061035c6105d6366004613513565b611079565b3480156105e757600080fd5b5061035c6105f636600461343b565b611163565b34801561060757600080fd5b506103ea610616366004613573565b6111b1565b34801561062757600080fd5b5061035c61123e565b34801561063c57600080fd5b5061042c7f000000000000000000000000740243ddb7aab60381d19c85020d66275c8f439681565b34801561067057600080fd5b506025546103c990610100900460ff1681565b34801561068f57600080fd5b5061035c61069e36600461343b565b6112a4565b3480156106af57600080fd5b506103c96106be36600461343b565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106e857600080fd5b5061035c6106f736600461343b565b6113f7565b34801561070857600080fd5b506103c961071736600461343b565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561074157600080fd5b506103ea60215481565b34801561075757600080fd5b5061035c611443565b34801561076c57600080fd5b506103ea61077b36600461343b565b6114b1565b34801561078c57600080fd5b5061035c611510565b3480156107a157600080fd5b5061035c611572565b3480156107b657600080fd5b5061035c6107c536600461343b565b6115bd565b3480156107d657600080fd5b506103ea60265481565b3480156107ec57600080fd5b5061035c6107fb366004613598565b61161c565b34801561080c57600080fd5b506103c961081b36600461343b565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561084557600080fd5b5061035c6108543660046134a6565b6116c6565b34801561086557600080fd5b506000546001600160a01b031661042c565b34801561088357600080fd5b506103ea60275481565b34801561089957600080fd5b50610393611718565b3480156108ae57600080fd5b506103c96108bd3660046134a6565b611727565b3480156108ce57600080fd5b5061035c611776565b3480156108e357600080fd5b5061035c6117b1565b3480156108f857600080fd5b506103c96109073660046134a6565b6118b7565b34801561091857600080fd5b506002546103ea565b34801561092d57600080fd5b5061035c61093c366004613598565b6118c4565b34801561094d57600080fd5b5061035c61190a565b34801561096257600080fd5b5061035c6109713660046135c4565b611955565b34801561098257600080fd5b5061035c61099136600461362d565b6119d3565b3480156109a257600080fd5b5061035c6109b1366004613513565b611ac6565b3480156109c257600080fd5b506103ea6109d136600461352c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a0857600080fd5b5061035c610a17366004613598565b611b4b565b348015610a2857600080fd5b5061035c611c13565b348015610a3d57600080fd5b5061035c610a4c366004613513565b611c45565b348015610a5d57600080fd5b5061035c610a6c36600461343b565b611ca5565b348015610a7d57600080fd5b5061035c610a8c366004613513565b611cf0565b348015610a9d57600080fd5b5061035c610aac36600461343b565b611d50565b6000546001600160a01b03163314610ae45760405162461bcd60e51b8152600401610adb90613699565b60405180910390fd5b6001600160a01b03166000908152600960205260409020805460ff19169055565b606060108054610b14906136ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610b40906136ce565b8015610b8d5780601f10610b6257610100808354040283529160200191610b8d565b820191906000526020600020905b815481529060010190602001808311610b7057829003601f168201915b5050505050905090565b6000610ba4338484611e28565b5060015b92915050565b6000610bbb848484611f4c565b610c0d8433610c088560405180606001604052806028815260200161394f602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906124f1565b611e28565b5060019392505050565b6000546001600160a01b03163314610c415760405162461bcd60e51b8152600401610adb90613699565b620186a08111610c635760405162461bcd60e51b8152600401610adb90613708565b610c7181633b9aca0061376c565b60285550565b6000546001600160a01b03163314610ca15760405162461bcd60e51b8152600401610adb90613699565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000600c54821115610d2c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610adb565b6000610d3661252b565b9050610d42838261254e565b9392505050565b6000546001600160a01b03163314610d735760405162461bcd60e51b8152600401610adb90613699565b610d7b612590565b565b6000546001600160a01b03163314610da75760405162461bcd60e51b8152600401610adb90613699565b6001600160a01b03811660009081526007602052604090205460ff16610e0f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610adb565b60005b600854811015610f2f57816001600160a01b031660088281548110610e3957610e39613783565b6000918252602090912001546001600160a01b031603610f1d5760088054610e6390600190613799565b81548110610e7357610e73613783565b600091825260209091200154600880546001600160a01b039092169183908110610e9f57610e9f613783565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610ef757610ef76137ac565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610f27816137c2565b915050610e12565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610ba4918590610c08908661260a565b6000546001600160a01b03163314610f935760405162461bcd60e51b8152600401610adb90613699565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a0823190602401602060405180830381865afa158015610fe1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100591906137db565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611050573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107491906137f4565b505050565b3360008181526007602052604090205460ff16156110ee5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610adb565b60006110f983612669565b505050506001600160a01b038416600090815260036020526040902054919250611125919050826126b8565b6001600160a01b038316600090815260036020526040902055600c5461114b90826126b8565b600c55600d5461115b908461260a565b600d55505050565b6000546001600160a01b0316331461118d5760405162461bcd60e51b8152600401610adb90613699565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600b548311156112055760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610adb565b8161122457600061121584612669565b50939550610ba8945050505050565b600061122f84612669565b50929550610ba8945050505050565b6000546001600160a01b031633146112685760405162461bcd60e51b8152600401610adb90613699565b600e546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156112a1573d6000803e3d6000fd5b50565b6000546001600160a01b031633146112ce5760405162461bcd60e51b8152600401610adb90613699565b6001600160a01b03811660009081526007602052604090205460ff16156113375760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610adb565b6001600160a01b03811660009081526003602052604090205415611391576001600160a01b03811660009081526003602052604090205461137790610cc5565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146114215760405162461bcd60e51b8152600401610adb90613699565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b600e546001600160a01b0316336001600160a01b0316148061146f57506000546001600160a01b031633145b61147857600080fd5b476000611491606461148b84605a6126fa565b9061254e565b905060006114a5606461148b85600a6126fa565b9050611074828261277c565b6001600160a01b03811660009081526007602052604081205460ff16156114ee57506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610ba890610cc5565b6000546001600160a01b0316331461153a5760405162461bcd60e51b8152600401610adb90613699565b600080546040516001600160a01b0390911690600080516020613977833981519152908390a3600080546001600160a01b0319169055565b600e546001600160a01b0316336001600160a01b0316148061159e57506000546001600160a01b031633145b6115a757600080fd5b60006115b2306114b1565b90506112a1816127f1565b6000546001600160a01b031633146115e75760405162461bcd60e51b8152600401610adb90613699565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610f2f573d6000803e3d6000fd5b6000546001600160a01b031633146116465760405162461bcd60e51b8152600401610adb90613699565b6013839055601f82905560198190556000816116628486613811565b61166c9190613811565b90506102bc8111156116c05760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203725206f72206c657373000000006044820152606401610adb565b50505050565b6000546001600160a01b031633146116f05760405162461bcd60e51b8152600401610adb90613699565b6116f8612590565b611710338361170b84633b9aca0061376c565b611f4c565b610f2f6129e9565b606060118054610b14906136ce565b6000610ba43384610c0885604051806060016040528060258152602001613997602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906124f1565b6000546001600160a01b031633146117a05760405162461bcd60e51b8152600401610adb90613699565b600a805461ff001916610100179055565b6001546001600160a01b031633146118175760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610adb565b60025442116118685760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610adb565b600154600080546040516001600160a01b03938416939091169160008051602061397783398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610ba4338484611f4c565b6000546001600160a01b031633146118ee5760405162461bcd60e51b8152600401610adb90613699565b60148390556020829055601a8190556000816116628486613811565b600e546001600160a01b0316336001600160a01b0316148061193657506000546001600160a01b031633145b61193f57600080fd5b600061194a306114b1565b90506112a181612a21565b6000546001600160a01b0316331461197f5760405162461bcd60e51b8152600401610adb90613699565b602580548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906119c890831515815260200190565b60405180910390a150565b6000546001600160a01b031633146119fd5760405162461bcd60e51b8152600401610adb90613699565b6000838214611a4e5760405162461bcd60e51b815260206004820152601760248201527f6d757374206265207468652073616d65206c656e6774680000000000000000006044820152606401610adb565b83811015611abf57611aad858583818110611a6b57611a6b613783565b9050602002016020810190611a80919061343b565b848484818110611a9257611a92613783565b90506020020135633b9aca00611aa8919061376c565b612bf8565b611ab8600182613811565b9050611a4e565b5050505050565b6000546001600160a01b03163314611af05760405162461bcd60e51b8152600401610adb90613699565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611b1f8142613811565b600255600080546040516001600160a01b0390911690600080516020613977833981519152908390a350565b6000546001600160a01b03163314611b755760405162461bcd60e51b8152600401610adb90613699565b629896808311611b975760405162461bcd60e51b8152600401610adb90613824565b629896808211611bb95760405162461bcd60e51b8152600401610adb90613824565b620186a08111611bdb5760405162461bcd60e51b8152600401610adb90613708565b611be981633b9aca0061376c565b602855611bfa82633b9aca0061376c565b602755611c0b83633b9aca0061376c565b602655505050565b6000546001600160a01b03163314611c3d5760405162461bcd60e51b8152600401610adb90613699565b610d7b6129e9565b6000546001600160a01b03163314611c6f5760405162461bcd60e51b8152600401610adb90613699565b629896808111611c915760405162461bcd60e51b8152600401610adb90613824565b611c9f81633b9aca0061376c565b60275550565b6000546001600160a01b03163314611ccf5760405162461bcd60e51b8152600401610adb90613699565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611d1a5760405162461bcd60e51b8152600401610adb90613699565b629896808111611d3c5760405162461bcd60e51b8152600401610adb90613824565b611d4a81633b9aca0061376c565b60265550565b6000546001600160a01b03163314611d7a5760405162461bcd60e51b8152600401610adb90613699565b6001600160a01b038116611ddf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610adb565b600080546040516001600160a01b038085169392169160008051602061397783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611e8a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610adb565b6001600160a01b038216611eeb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610adb565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611fb05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610adb565b6001600160a01b0382166120125760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610adb565b600081116120745760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610adb565b6000546001600160a01b038481169116148015906120a057506000546001600160a01b03838116911614155b15612108576026548111156121085760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610adb565b600a54610100900460ff1661219a576000546001600160a01b0384811691161461219a5760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006064820152608401610adb565b6001600160a01b03831660009081526009602052604090205460ff16806121d957506001600160a01b03821660009081526009602052604090205460ff165b1561223057600a5460ff166122305760405162461bcd60e51b815260206004820152601b60248201527f626f7473206172656e7420616c6c6f77656420746f20747261646500000000006044820152606401610adb565b7f000000000000000000000000740243ddb7aab60381d19c85020d66275c8f43966001600160a01b0316826001600160a01b0316146122d95760275481612276846114b1565b6122809190613811565b106122d95760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b6064820152608401610adb565b60006122e4306114b1565b905060265481106122f457506026545b6028548110801590819061230b575060255460ff16155b801561234957507f000000000000000000000000740243ddb7aab60381d19c85020d66275c8f43966001600160a01b0316856001600160a01b031614155b801561235c5750602554610100900460ff165b1561236a5761236a826127f1565b6001600160a01b03851660009081526006602052604090205460019060ff16806123ac57506001600160a01b03851660009081526006602052604090205460ff165b156123b9575060006124dd565b7f000000000000000000000000740243ddb7aab60381d19c85020d66275c8f43966001600160a01b0316866001600160a01b031614801561242c57507f000000000000000000000000327df1e6de05895d2ab08513aadd9313fe505d866001600160a01b0316856001600160a01b031614155b1561244b57601f546021556019546013546124479190613811565b6015555b7f000000000000000000000000740243ddb7aab60381d19c85020d66275c8f43966001600160a01b0316856001600160a01b03161480156124be57507f000000000000000000000000327df1e6de05895d2ab08513aadd9313fe505d866001600160a01b0316866001600160a01b031614155b156124dd57602054602155601a546014546124d99190613811565b6015555b6124e986868684612c0b565b505050505050565b600081848411156125155760405162461bcd60e51b8152600401610adb9190613458565b5060006125228486613799565b95945050505050565b6000806000612538612d79565b9092509050612547828261254e565b9250505090565b6000610d4283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612efb565b6015541580156125a05750602154155b156125a757565b6015805460165560218054602255601b8054601c5560138054601755601f805460235560198054601d556014805460185560208054602455601a8054601e5560009687905597869055958590559284905590839055829055819055908190559055565b6000806126178385613811565b905083811015610d425760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610adb565b60008060008060008060008060006126808a612f29565b925092509250600080600061269e8d868661269961252b565b612f6b565b919f909e50909c50959a5093985091965092945050505050565b6000610d4283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124f1565b60008260000361270c57506000610ba8565b6000612718838561376c565b9050826127258583613870565b14610d425760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610adb565b600e546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156127b6573d6000803e3d6000fd5b50600f546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611074573d6000803e3d6000fd5b6025805460ff1916600117905560285461280c90600a61376c565b8111156128245760285461282190600a61376c565b90505b6000612844633b9aca00602054601f5461283e9190613811565b906126fa565b90506000612860633b9aca00601a5460195461283e9190613811565b9050600061287c633b9aca0060145460135461283e9190613811565b905060008261288b8584613811565b6128959190613811565b905060006128a78261148b88886126fa565b905060006128b682600261254e565b905060006128c483836126b8565b905060006128d289846126b8565b9050476128de82612a21565b60006128ea47836126b8565b905060006128f98b600261254e565b6129039089613799565b905060006129218260026129178f8761376c565b61148b9190613870565b90506000871180156129335750600081115b15612984576129428782612fbb565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60006129948361148b868f6126fa565b90506000816129a38487613799565b6129ad9190613799565b90506000811180156129bf5750600082115b156129ce576129ce818361277c565b50506025805460ff1916905550505050505050505050505050565b601654601555602254602155601c54601b55601754601355602354601f55601d54601955601854601455602454602055601e54601a55565b6025805460ff191660011790556040805160028082526060820183526000926020830190803683370190505090503081600081518110612a6357612a63613783565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000327df1e6de05895d2ab08513aadd9313fe505d866001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b059190613892565b81600181518110612b1857612b18613783565b60200260200101906001600160a01b031690816001600160a01b031681525050612b63307f000000000000000000000000327df1e6de05895d2ab08513aadd9313fe505d8684611e28565b60405163791ac94760e01b81526001600160a01b037f000000000000000000000000327df1e6de05895d2ab08513aadd9313fe505d86169063791ac94790612bb89085906000908690309042906004016138af565b600060405180830381600087803b158015612bd257600080fd5b505af1158015612be6573d6000803e3d6000fd5b50506025805460ff1916905550505050565b612c00612590565b611710338383611f4c565b80612c1857612c18612590565b6001600160a01b03841660009081526007602052604090205460ff168015612c5957506001600160a01b03831660009081526007602052604090205460ff16155b15612c6e57612c698484846130ba565b612d6c565b6001600160a01b03841660009081526007602052604090205460ff16158015612caf57506001600160a01b03831660009081526007602052604090205460ff165b15612cbf57612c698484846131e0565b6001600160a01b03841660009081526007602052604090205460ff16158015612d0157506001600160a01b03831660009081526007602052604090205460ff16155b15612d1157612c69848484613289565b6001600160a01b03841660009081526007602052604090205460ff168015612d5157506001600160a01b03831660009081526007602052604090205460ff165b15612d6157612c698484846132cd565b612d6c848484613289565b806116c0576116c06129e9565b600c54600b546000918291825b600854811015612ecb57826003600060088481548110612da857612da8613783565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612e135750816004600060088481548110612dec57612dec613783565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612e2957600c54600b54945094505050509091565b612e6f6003600060088481548110612e4357612e43613783565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906126b8565b9250612eb76004600060088481548110612e8b57612e8b613783565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906126b8565b915080612ec3816137c2565b915050612d86565b50600b54600c54612edb9161254e565b821015612ef257600c54600b549350935050509091565b90939092509050565b60008183612f1c5760405162461bcd60e51b8152600401610adb9190613458565b5060006125228486613870565b600080600080612f3885613340565b90506000612f458661335d565b90506000612f5d82612f5789866126b8565b906126b8565b979296509094509092505050565b6000808080612f7a88866126fa565b90506000612f8888876126fa565b90506000612f9688886126fa565b90506000612fa882612f5786866126b8565b939b939a50919850919650505050505050565b612fe6307f000000000000000000000000327df1e6de05895d2ab08513aadd9313fe505d8684611e28565b7f000000000000000000000000327df1e6de05895d2ab08513aadd9313fe505d866001600160a01b031663f305d71982308560008061302d6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015613095573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611abf9190613920565b6000806000806000806130cc87612669565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506130fe90886126b8565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461312d90876126b8565b6001600160a01b03808b1660009081526003602052604080822093909355908a168152205461315c908661260a565b6001600160a01b03891660009081526003602052604090205561317e8161337a565b6131888483613402565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516131cd91815260200190565b60405180910390a3505050505050505050565b6000806000806000806131f287612669565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061322490876126b8565b6001600160a01b03808b16600090815260036020908152604080832094909455918b1681526004909152205461325a908461260a565b6001600160a01b03891660009081526004602090815260408083209390935560039052205461315c908661260a565b60008060008060008061329b87612669565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061312d90876126b8565b6000806000806000806132df87612669565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061331190886126b8565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461322490876126b8565b6000610ba861271061148b601554856126fa90919063ffffffff16565b6000610ba861271061148b602154856126fa90919063ffffffff16565b600061338461252b565b9050600061339283836126fa565b306000908152600360205260409020549091506133af908261260a565b3060009081526003602090815260408083209390935560079052205460ff161561107457306000908152600460205260409020546133ed908461260a565b30600090815260046020526040902055505050565b600c5461340f90836126b8565b600c55600d5461341f908261260a565b600d555050565b6001600160a01b03811681146112a157600080fd5b60006020828403121561344d57600080fd5b8135610d4281613426565b600060208083528351808285015260005b8181101561348557858101830151858201604001528201613469565b506000604082860101526040601f19601f8301168501019250505092915050565b600080604083850312156134b957600080fd5b82356134c481613426565b946020939093013593505050565b6000806000606084860312156134e757600080fd5b83356134f281613426565b9250602084013561350281613426565b929592945050506040919091013590565b60006020828403121561352557600080fd5b5035919050565b6000806040838503121561353f57600080fd5b823561354a81613426565b9150602083013561355a81613426565b809150509250929050565b80151581146112a157600080fd5b6000806040838503121561358657600080fd5b82359150602083013561355a81613565565b6000806000606084860312156135ad57600080fd5b505081359360208301359350604090920135919050565b6000602082840312156135d657600080fd5b8135610d4281613565565b60008083601f8401126135f357600080fd5b50813567ffffffffffffffff81111561360b57600080fd5b6020830191508360208260051b850101111561362657600080fd5b9250929050565b6000806000806040858703121561364357600080fd5b843567ffffffffffffffff8082111561365b57600080fd5b613667888389016135e1565b9096509450602087013591508082111561368057600080fd5b5061368d878288016135e1565b95989497509550505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806136e257607f821691505b60208210810361370257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f53776170205468726573686f6c6420416d6f756e742063616e6e6f742062652060408201526d6c657373207468616e203130306b60901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ba857610ba8613756565b634e487b7160e01b600052603260045260246000fd5b81810381811115610ba857610ba8613756565b634e487b7160e01b600052603160045260246000fd5b6000600182016137d4576137d4613756565b5060010190565b6000602082840312156137ed57600080fd5b5051919050565b60006020828403121561380657600080fd5b8151610d4281613565565b80820180821115610ba857610ba8613756565b6020808252602c908201527f4d617820547820416d6f756e742063616e6e6f74206265206c6573732074686160408201526b371018981026b4b63634b7b760a11b606082015260800190565b60008261388d57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156138a457600080fd5b8151610d4281613426565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138ff5784516001600160a01b0316835293830193918301916001016138da565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561393557600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220566caf97b71f95cf6fc1d91443aae68fa20761b4ca23faf18ef28c1dd935dc4164736f6c63430008120033

Deployed ByteCode Sourcemap

26256:25677:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39957:113;;;;;;;;;;-1:-1:-1;39957:113:0;;;;;:::i;:::-;;:::i;29864:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30776:161;;;;;;;;;;-1:-1:-1;30776:161:0;;;;;:::i;:::-;;:::i;:::-;;;1440:14:1;;1433:22;1415:41;;1403:2;1388:18;30776:161:0;1275:187:1;31897:87:0;;;;;;;;;;-1:-1:-1;31966:10:0;;31897:87;;;1613:25:1;;;1601:2;1586:18;31897:87:0;1467:177:1;28218:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1840:32:1;;;1822:51;;1810:2;1795:18;28218:51:0;1649:230:1;30141:95:0;;;;;;;;;;-1:-1:-1;30221:7:0;;30141:95;;30945:313;;;;;;;;;;-1:-1:-1;30945:313:0;;;;;:::i;:::-;;:::i;39102:249::-;;;;;;;;;;-1:-1:-1;39102:249:0;;;;;:::i;:::-;;:::i;39836:109::-;;;;;;;;;;-1:-1:-1;39836:109:0;;;;;:::i;:::-;;:::i;33621:253::-;;;;;;;;;;-1:-1:-1;33621:253:0;;;;;:::i;:::-;;:::i;26794:28::-;;;;;;;;;;-1:-1:-1;26794:28:0;;;;;;;;;;;28538:53;;;;;;;;;;;;;;;;36637:78;;;;;;;;;;;;;:::i;30050:83::-;;;;;;;;;;-1:-1:-1;30116:9:0;;30050:83;;30116:9;;;;2672:36:1;;2660:2;2645:18;30050:83:0;2530:184:1;34223:479:0;;;;;;;;;;-1:-1:-1;34223:479:0;;;;;:::i;:::-;;:::i;31266:218::-;;;;;;;;;;-1:-1:-1;31266:218:0;;;;;:::i;:::-;;:::i;39482:185::-;;;;;;;;;;-1:-1:-1;39482:185:0;;;;;:::i;:::-;;:::i;27329:37::-;;;;;;;;;;;;;;;;32792:377;;;;;;;;;;-1:-1:-1;32792:377:0;;;;;:::i;:::-;;:::i;35368:111::-;;;;;;;;;;-1:-1:-1;35368:111:0;;;;;:::i;:::-;;:::i;33177:436::-;;;;;;;;;;-1:-1:-1;33177:436:0;;;;;:::i;:::-;;:::i;39363:107::-;;;;;;;;;;;;;:::i;28276:38::-;;;;;;;;;;;;;;;28363:40;;;;;;;;;;-1:-1:-1;28363:40:0;;;;;;;;;;;33882:333;;;;;;;;;;-1:-1:-1;33882:333:0;;;;;:::i;:::-;;:::i;44169:123::-;;;;;;;;;;-1:-1:-1;44169:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;44257:27:0;44233:4;44257:27;;;:18;:27;;;;;;;;;44169:123;35609:127;;;;;;;;;;-1:-1:-1;35609:127:0;;;;;:::i;:::-;;:::i;40082:121::-;;;;;;;;;;-1:-1:-1;40082:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;40174:21:0;40150:4;40174:21;;;:10;:21;;;;;;;;;40082:121;27958:49;;;;;;;;;;;;;;;;40711:371;;;;;;;;;;;;;:::i;30244:198::-;;;;;;;;;;-1:-1:-1;30244:198:0;;;;;:::i;:::-;;:::i;16832:148::-;;;;;;;;;;;;;:::i;41090:230::-;;;;;;;;;;;;;:::i;39679:145::-;;;;;;;;;;-1:-1:-1;39679:145:0;;;;;:::i;:::-;;:::i;28412:52::-;;;;;;;;;;;;;;;;35748:429;;;;;;;;;;-1:-1:-1;35748:429:0;;;;;:::i;:::-;;:::i;31769:120::-;;;;;;;;;;-1:-1:-1;31769:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;31861:20:0;31837:4;31861:20;;;:11;:20;;;;;;;;;31769:120;31996:195;;;;;;;;;;-1:-1:-1;31996:195:0;;;;;:::i;:::-;;:::i;16189:79::-;;;;;;;;;;-1:-1:-1;16227:7:0;16254:6;-1:-1:-1;;;;;16254:6:0;16189:79;;28474:54;;;;;;;;;;;;;;;;29955:87;;;;;;;;;;;;;:::i;31492:269::-;;;;;;;;;;-1:-1:-1;31492:269:0;;;;;:::i;:::-;;:::i;40215:79::-;;;;;;;;;;;;;:::i;17854:305::-;;;;;;;;;;;;;:::i;30450:167::-;;;;;;;;;;-1:-1:-1;30450:167:0;;;;;:::i;:::-;;:::i;17387:89::-;;;;;;;;;;-1:-1:-1;17459:9:0;;17387:89;;36185:444;;;;;;;;;;-1:-1:-1;36185:444:0;;;;;:::i;:::-;;:::i;40481:222::-;;;;;;;;;;;;;:::i;40302:171::-;;;;;;;;;;-1:-1:-1;40302:171:0;;;;;:::i;:::-;;:::i;32398:386::-;;;;;;;;;;-1:-1:-1;32398:386:0;;;;;:::i;:::-;;:::i;17552:226::-;;;;;;;;;;-1:-1:-1;17552:226:0;;;;;:::i;:::-;;:::i;30625:143::-;;;;;;;;;;-1:-1:-1;30625:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;30733:18:0;;;30706:7;30733:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;30625:143;38091:559;;;;;;;;;;-1:-1:-1;38091:559:0;;;;;:::i;:::-;;:::i;37523:81::-;;;;;;;;;;;;;:::i;38879:215::-;;;;;;;;;;-1:-1:-1;38879:215:0;;;;;:::i;:::-;;:::i;35491:110::-;;;;;;;;;;-1:-1:-1;35491:110:0;;;;;:::i;:::-;;:::i;38656:211::-;;;;;;;;;;-1:-1:-1;38656:211:0;;;;;:::i;:::-;;:::i;17135:244::-;;;;;;;;;;-1:-1:-1;17135:244:0;;;;;:::i;:::-;;:::i;39957:113::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;40033:21:0::1;40057:5;40033:21:::0;;;:10:::1;:21;::::0;;;;:29;;-1:-1:-1;;40033:29:0::1;::::0;;39957:113::o;29864:83::-;29901:13;29934:5;29927:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29864:83;:::o;30776:161::-;30851:4;30868:39;9274:10;30891:7;30900:6;30868:8;:39::i;:::-;-1:-1:-1;30925:4:0;30776:161;;;;;:::o;30945:313::-;31043:4;31060:36;31070:6;31078:9;31089:6;31060:9;:36::i;:::-;31107:121;31116:6;9274:10;31138:89;31176:6;31138:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31138:19:0;;;;;;:11;:19;;;;;;;;9274:10;31138:33;;;;;;;;;;:37;:89::i;:::-;31107:8;:121::i;:::-;-1:-1:-1;31246:4:0;30945:313;;;;;:::o;39102:249::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;39225:7:::1;39203:19;:29;39195:88;;;;-1:-1:-1::0;;;39195:88:0::1;;;;;;;:::i;:::-;39316:27;:19:::0;39338:5:::1;39316:27;:::i;:::-;39294:19;:49:::0;-1:-1:-1;39102:249:0:o;39836:109::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39909:21:0::1;;::::0;;;:10:::1;:21;::::0;;;;:28;;-1:-1:-1;;39909:28:0::1;39933:4;39909:28;::::0;;39836:109::o;33621:253::-;33687:7;33726;;33715;:18;;33707:73;;;;-1:-1:-1;;;33707:73:0;;7548:2:1;33707:73:0;;;7530:21:1;7587:2;7567:18;;;7560:30;7626:34;7606:18;;;7599:62;-1:-1:-1;;;7677:18:1;;;7670:40;7727:19;;33707:73:0;7346:406:1;33707:73:0;33791:19;33814:10;:8;:10::i;:::-;33791:33;-1:-1:-1;33842:24:0;:7;33791:33;33842:11;:24::i;:::-;33835:31;33621:253;-1:-1:-1;;;33621:253:0:o;36637:78::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;36692:15:::1;:13;:15::i;:::-;36637:78::o:0;34223:479::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34305:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;34297:60;;;::::0;-1:-1:-1;;;34297:60:0;;7959:2:1;34297:60:0::1;::::0;::::1;7941:21:1::0;7998:2;7978:18;;;7971:30;8037:29;8017:18;;;8010:57;8084:18;;34297:60:0::1;7757:351:1::0;34297:60:0::1;34373:9;34368:327;34392:9;:16:::0;34388:20;::::1;34368:327;;;34450:7;-1:-1:-1::0;;;;;34434:23:0::1;:9;34444:1;34434:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;34434:12:0::1;:23:::0;34430:254:::1;;34493:9;34503:16:::0;;:20:::1;::::0;34522:1:::1;::::0;34503:20:::1;:::i;:::-;34493:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;34478:9:::1;:12:::0;;-1:-1:-1;;;;;34493:31:0;;::::1;::::0;34488:1;;34478:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;34478:46:0::1;-1:-1:-1::0;;;;;34478:46:0;;::::1;;::::0;;34543:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;34582:11:::1;:20:::0;;;;:28;;-1:-1:-1;;34582:28:0::1;::::0;;34629:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;34629:15:0;;;;;-1:-1:-1;;;;;;34629:15:0::1;::::0;;;;;34368:327:::1;34223:479:::0;:::o;34430:254::-:1;34410:3:::0;::::1;::::0;::::1;:::i;:::-;;;;34368:327;;;;34223:479:::0;:::o;31266:218::-;9274:10;31354:4;31403:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;31403:34:0;;;;;;;;;;31354:4;;31371:83;;31394:7;;31403:50;;31442:10;31403:38;:50::i;39482:185::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;39621:37:::1;::::0;-1:-1:-1;;;39621:37:0;;39652:4:::1;39621:37;::::0;::::1;1822:51:1::0;-1:-1:-1;;;;;39584:21:0;::::1;::::0;::::1;::::0;39606:13;;39584:21;;39621:22:::1;::::0;1795:18:1;;39621:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39584:75;::::0;-1:-1:-1;;;;;;39584:75:0::1;::::0;;;;;;-1:-1:-1;;;;;9031:32:1;;;39584:75:0::1;::::0;::::1;9013:51:1::0;9080:18;;;9073:34;8986:18;;39584:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39482:185:::0;;:::o;32792:377::-;9274:10;32844:14;32893:19;;;:11;:19;;;;;;;;32892:20;32884:77;;;;-1:-1:-1;;;32884:77:0;;9570:2:1;32884:77:0;;;9552:21:1;9609:2;9589:18;;;9582:30;9648:34;9628:18;;;9621:62;-1:-1:-1;;;9699:18:1;;;9692:42;9751:19;;32884:77:0;9368:408:1;32884:77:0;32973:15;32997:19;33008:7;32997:10;:19::i;:::-;-1:-1:-1;;;;;;;;;33045:15:0;;;;;;:7;:15;;;;;;32972:44;;-1:-1:-1;33045:28:0;;:15;-1:-1:-1;32972:44:0;33045:19;:28::i;:::-;-1:-1:-1;;;;;33027:15:0;;;;;;:7;:15;;;;;:46;33094:7;;:20;;33106:7;33094:11;:20::i;:::-;33084:7;:30;33138:10;;:23;;33153:7;33138:14;:23::i;:::-;33125:10;:36;-1:-1:-1;;;32792:377:0:o;35368:111::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35437:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;35437:34:0::1;35467:4;35437:34;::::0;;35368:111::o;33177:436::-;33267:7;33306;;33295;:18;;33287:62;;;;-1:-1:-1;;;33287:62:0;;9983:2:1;33287:62:0;;;9965:21:1;10022:2;10002:18;;;9995:30;10061:33;10041:18;;;10034:61;10112:18;;33287:62:0;9781:355:1;33287:62:0;33365:17;33360:246;;33400:15;33424:19;33435:7;33424:10;:19::i;:::-;-1:-1:-1;33399:44:0;;-1:-1:-1;33458:14:0;;-1:-1:-1;;;;;33458:14:0;33360:246;33507:23;33538:19;33549:7;33538:10;:19::i;:::-;-1:-1:-1;33505:52:0;;-1:-1:-1;33572:22:0;;-1:-1:-1;;;;;33572:22:0;39363:107;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;39415:15:::1;::::0;:47:::1;::::0;-1:-1:-1;;;;;39415:15:0;;::::1;::::0;39440:21:::1;39415:47:::0;::::1;;;::::0;:15:::1;:47:::0;:15;:47;39440:21;39415:15;:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;39363:107::o:0;33882:333::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33965:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;33964:21;33956:61;;;::::0;-1:-1:-1;;;33956:61:0;;7959:2:1;33956:61:0::1;::::0;::::1;7941:21:1::0;7998:2;7978:18;;;7971:30;8037:29;8017:18;;;8010:57;8084:18;;33956:61:0::1;7757:351:1::0;33956:61:0::1;-1:-1:-1::0;;;;;34031:16:0;::::1;34050:1;34031:16:::0;;;:7:::1;:16;::::0;;;;;:20;34028:108:::1;;-1:-1:-1::0;;;;;34107:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;34087:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;34068:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;34028:108:::1;-1:-1:-1::0;;;;;34146:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;34146:27:0::1;34169:4;34146:27:::0;;::::1;::::0;;;34184:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;34184:23:0::1;::::0;;::::1;::::0;;33882:333::o;35609:127::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;35688:15:::1;:40:::0;;-1:-1:-1;;;;;;35688:40:0::1;-1:-1:-1::0;;;;;35688:40:0;;;::::1;::::0;;;::::1;::::0;;35609:127::o;40711:371::-;40777:15;;-1:-1:-1;;;;;40777:15:0;9274:10;-1:-1:-1;;;;;40761:31:0;;:58;;;-1:-1:-1;16227:7:0;16254:6;-1:-1:-1;;;;;16254:6:0;9274:10;40796:23;40761:58;40753:67;;;;;;40860:21;40831:26;40919:35;40950:3;40919:26;40860:21;40942:2;40919:22;:26::i;:::-;:30;;:35::i;:::-;40892:62;-1:-1:-1;40965:18:0;40986:35;41017:3;40986:26;:18;41009:2;40986:22;:26::i;:35::-;40965:56;;41032:42;41045:16;41063:10;41032:12;:42::i;30244:198::-;-1:-1:-1;;;;;30334:20:0;;30310:7;30334:20;;;:11;:20;;;;;;;;30330:49;;;-1:-1:-1;;;;;;30363:16:0;;;;;:7;:16;;;;;;;30244:198::o;30330:49::-;-1:-1:-1;;;;;30417:16:0;;;;;;:7;:16;;;;;;30397:37;;:19;:37::i;16832:148::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;16939:1:::1;16923:6:::0;;16902:40:::1;::::0;-1:-1:-1;;;;;16923:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;16902:40:0;16939:1;;16902:40:::1;16970:1;16953:19:::0;;-1:-1:-1;;;;;;16953:19:0::1;::::0;;16832:148::o;41090:230::-;41166:15;;-1:-1:-1;;;;;41166:15:0;9274:10;-1:-1:-1;;;;;41150:31:0;;:58;;;-1:-1:-1;16227:7:0;16254:6;-1:-1:-1;;;;;16254:6:0;9274:10;41185:23;41150:58;41142:67;;;;;;41220:23;41246:24;41264:4;41246:9;:24::i;:::-;41220:50;;41281:31;41296:15;41281:14;:31::i;39679:145::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;39762:54:::1;::::0;-1:-1:-1;;;;;39762:31:0;::::1;::::0;39794:21:::1;39762:54:::0;::::1;;;::::0;::::1;::::0;;;39794:21;39762:31;:54;::::1;;;;;;;;;;;;;::::0;::::1;;;;35748:429:::0;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;35904:12:::1;:26:::0;;;35941:18:::1;:38:::0;;;35990:12:::1;:26:::0;;;-1:-1:-1;36005:11:0;36050:33:::1;35962:17:::0;35919:11;36050:33:::1;:::i;:::-;:48;;;;:::i;:::-;36027:71;;36133:3;36117:12;:19;;36109:60;;;::::0;-1:-1:-1;;;36109:60:0;;10473:2:1;36109:60:0::1;::::0;::::1;10455:21:1::0;10512:2;10492:18;;;10485:30;10551;10531:18;;;10524:58;10599:18;;36109:60:0::1;10271:352:1::0;36109:60:0::1;35893:284;35748:429:::0;;;:::o;31996:195::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;32080:15:::1;:13;:15::i;:::-;32106:50;9274:10:::0;32130:9;32141:14:::1;:6:::0;32150:5:::1;32141:14;:::i;:::-;32106:9;:50::i;:::-;32167:16;:14;:16::i;29955:87::-:0;29994:13;30027:7;30020:14;;;;;:::i;31492:269::-;31585:4;31602:129;9274:10;31625:7;31634:96;31673:15;31634:96;;;;;;;;;;;;;;;;;9274:10;31634:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;31634:34:0;;;;;;;;;;;;:38;:96::i;40215:79::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;40271:8:::1;:15:::0;;-1:-1:-1;;40271:15:0::1;;;::::0;;40215:79::o;17854:305::-;17906:14;;-1:-1:-1;;;;;17906:14:0;17924:10;17906:28;17898:76;;;;-1:-1:-1;;;17898:76:0;;10830:2:1;17898:76:0;;;10812:21:1;10869:2;10849:18;;;10842:30;10908:34;10888:18;;;10881:62;-1:-1:-1;;;10959:18:1;;;10952:33;11002:19;;17898:76:0;10628:399:1;17898:76:0;18011:9;;17993:15;:27;17985:72;;;;-1:-1:-1;;;17985:72:0;;11234:2:1;17985:72:0;;;11216:21:1;11273:2;11253:18;;;11246:30;11312:33;11292:18;;;11285:61;11363:18;;17985:72:0;11032:355:1;17985:72:0;18102:14;;;18094:6;;18073:44;;-1:-1:-1;;;;;18102:14:0;;;;18094:6;;;;-1:-1:-1;;;;;;;;;;;18073:44:0;;18137:14;;;18128:23;;-1:-1:-1;;;;;;18128:23:0;-1:-1:-1;;;;;18137:14:0;;;18128:23;;;;;;17854:305::o;30450:167::-;30528:4;30545:42;9274:10;30569:9;30580:6;30545:9;:42::i;36185:444::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;36345:13:::1;:28:::0;;;36384:19:::1;:40:::0;;;36435:13:::1;:28:::0;;;-1:-1:-1;36451:12:0;36498:35:::1;36406:18:::0;36361:12;36498:35:::1;:::i;40481:222::-:0;40547:15;;-1:-1:-1;;;;;40547:15:0;9274:10;-1:-1:-1;;;;;40531:31:0;;:58;;;-1:-1:-1;16227:7:0;16254:6;-1:-1:-1;;;;;16254:6:0;9274:10;40566:23;40531:58;40523:67;;;;;;40601:23;40627:24;40645:4;40627:9;:24::i;:::-;40601:50;;40662:33;40679:15;40662:16;:33::i;40302:171::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;40379:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;40379:32:0;;::::1;;::::0;;40427:38:::1;::::0;::::1;::::0;::::1;::::0;40403:8;1440:14:1;1433:22;1415:41;;1403:2;1388:18;;1275:187;40427:38:0::1;;;;;;;;40302:171:::0;:::o;32398:386::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;32510:16:::1;32549:35:::0;;::::1;32541:71;;;::::0;-1:-1:-1;;;32541:71:0;;11594:2:1;32541:71:0::1;::::0;::::1;11576:21:1::0;11633:2;11613:18;;;11606:30;11672:25;11652:18;;;11645:53;11715:18;;32541:71:0::1;11392:347:1::0;32541:71:0::1;32629:28:::0;;::::1;32623:154;;;32673:64;32689:10;;32700:8;32689:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;32711:7;;32719:8;32711:17;;;;;;;:::i;:::-;;;;;;;32731:5;32711:25;;;;:::i;:::-;32673:15;:64::i;:::-;32752:13;32764:1;32752:13:::0;::::1;:::i;:::-;;;32623:154;;;32499:285;32398:386:::0;;;;:::o;17552:226::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;17633:6:::1;::::0;;;17616:23;;-1:-1:-1;;;;;;17616:23:0;;::::1;-1:-1:-1::0;;;;;17633:6:0;::::1;17616:23;::::0;;;17650:19:::1;::::0;;17692:22:::1;17710:4:::0;17692:15:::1;:22;:::i;:::-;17680:9;:34:::0;17767:1:::1;17751:6:::0;;17730:40:::1;::::0;-1:-1:-1;;;;;17751:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17730:40:0;17767:1;;17730:40:::1;17552:226:::0;:::o;38091:559::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;38236:10:::1;38222:11;:24;38214:81;;;;-1:-1:-1::0;;;38214:81:0::1;;;;;;;:::i;:::-;38330:10;38314:13;:26;38306:83;;;;-1:-1:-1::0;;;38306:83:0::1;;;;;;;:::i;:::-;38430:7;38408:19;:29;38400:88;;;;-1:-1:-1::0;;;38400:88:0::1;;;;;;;:::i;:::-;38521:27;:19:::0;38543:5:::1;38521:27;:::i;:::-;38499:19;:49:::0;38576:19:::1;:13:::0;38590:5:::1;38576:19;:::i;:::-;38559:14;:36:::0;38621:19:::1;:11:::0;38635:5:::1;38621:19;:::i;:::-;38606:12;:34:::0;-1:-1:-1;;;38091:559:0:o;37523:81::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;37580:16:::1;:14;:16::i;38879:215::-:0;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;38980:10:::1;38964:13;:26;38956:83;;;;-1:-1:-1::0;;;38956:83:0::1;;;;;;;:::i;:::-;39067:19;:13:::0;39081:5:::1;39067:19;:::i;:::-;39050:14;:36:::0;-1:-1:-1;38879:215:0:o;35491:110::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35558:27:0::1;35588:5;35558:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;35558:35:0::1;::::0;;35491:110::o;38656:211::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;38755:10:::1;38741:11;:24;38733:81;;;;-1:-1:-1::0;;;38733:81:0::1;;;;;;;:::i;:::-;38840:19;:11:::0;38854:5:::1;38840:19;:::i;:::-;38825:12;:34:::0;-1:-1:-1;38656:211:0:o;17135:244::-;16401:6;;-1:-1:-1;;;;;16401:6:0;9274:10;16401:22;16393:67;;;;-1:-1:-1;;;16393:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17224:22:0;::::1;17216:73;;;::::0;-1:-1:-1;;;17216:73:0;;12359:2:1;17216:73:0::1;::::0;::::1;12341:21:1::0;12398:2;12378:18;;;12371:30;12437:34;12417:18;;;12410:62;-1:-1:-1;;;12488:18:1;;;12481:36;12534:19;;17216:73:0::1;12157:402:1::0;17216:73:0::1;17326:6;::::0;;17305:38:::1;::::0;-1:-1:-1;;;;;17305:38:0;;::::1;::::0;17326:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;17305:38:0;::::1;17354:6;:17:::0;;-1:-1:-1;;;;;;17354:17:0::1;-1:-1:-1::0;;;;;17354:17:0;;;::::1;::::0;;;::::1;::::0;;17135:244::o;44300:337::-;-1:-1:-1;;;;;44393:19:0;;44385:68;;;;-1:-1:-1;;;44385:68:0;;12766:2:1;44385:68:0;;;12748:21:1;12805:2;12785:18;;;12778:30;12844:34;12824:18;;;12817:62;-1:-1:-1;;;12895:18:1;;;12888:34;12939:19;;44385:68:0;12564:400:1;44385:68:0;-1:-1:-1;;;;;44472:21:0;;44464:68;;;;-1:-1:-1;;;44464:68:0;;13171:2:1;44464:68:0;;;13153:21:1;13210:2;13190:18;;;13183:30;13249:34;13229:18;;;13222:62;-1:-1:-1;;;13300:18:1;;;13293:32;13342:19;;44464:68:0;12969:398:1;44464:68:0;-1:-1:-1;;;;;44545:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;44597:32;;1613:25:1;;;44597:32:0;;1586:18:1;44597:32:0;;;;;;;44300:337;;;:::o;44645:2001::-;-1:-1:-1;;;;;44767:18:0;;44759:68;;;;-1:-1:-1;;;44759:68:0;;13574:2:1;44759:68:0;;;13556:21:1;13613:2;13593:18;;;13586:30;13652:34;13632:18;;;13625:62;-1:-1:-1;;;13703:18:1;;;13696:35;13748:19;;44759:68:0;13372:401:1;44759:68:0;-1:-1:-1;;;;;44846:16:0;;44838:64;;;;-1:-1:-1;;;44838:64:0;;13980:2:1;44838:64:0;;;13962:21:1;14019:2;13999:18;;;13992:30;14058:34;14038:18;;;14031:62;-1:-1:-1;;;14109:18:1;;;14102:33;14152:19;;44838:64:0;13778:399:1;44838:64:0;44930:1;44921:6;:10;44913:64;;;;-1:-1:-1;;;44913:64:0;;14384:2:1;44913:64:0;;;14366:21:1;14423:2;14403:18;;;14396:30;14462:34;14442:18;;;14435:62;-1:-1:-1;;;14513:18:1;;;14506:39;14562:19;;44913:64:0;14182:405:1;44913:64:0;16227:7;16254:6;-1:-1:-1;;;;;44991:15:0;;;16254:6;;44991:15;;;;:32;;-1:-1:-1;16227:7:0;16254:6;-1:-1:-1;;;;;45010:13:0;;;16254:6;;45010:13;;44991:32;44988:125;;;45056:12;;45046:6;:22;;45038:75;;;;-1:-1:-1;;;45038:75:0;;14794:2:1;45038:75:0;;;14776:21:1;14833:2;14813:18;;;14806:30;14872:34;14852:18;;;14845:62;-1:-1:-1;;;14923:18:1;;;14916:38;14971:19;;45038:75:0;14592:404:1;45038:75:0;45138:8;;;;;;;45134:130;;16227:7;16254:6;-1:-1:-1;;;;;45170:15:0;;;16254:6;;45170:15;45162:90;;;;-1:-1:-1;;;45162:90:0;;15203:2:1;45162:90:0;;;15185:21:1;15242:2;15222:18;;;15215:30;15281:34;15261:18;;;15254:62;15352:33;15332:18;;;15325:61;15403:19;;45162:90:0;15001:427:1;45162:90:0;-1:-1:-1;;;;;45287:16:0;;;;;;:10;:16;;;;;;;;;:34;;-1:-1:-1;;;;;;45307:14:0;;;;;;:10;:14;;;;;;;;45287:34;45284:118;;;45345:13;;;;45337:53;;;;-1:-1:-1;;;45337:53:0;;15635:2:1;45337:53:0;;;15617:21:1;15674:2;15654:18;;;15647:30;15713:29;15693:18;;;15686:57;15760:18;;45337:53:0;15433:351:1;45337:53:0;45423:13;-1:-1:-1;;;;;45417:19:0;:2;-1:-1:-1;;;;;45417:19:0;;45414:138;;45486:14;;45477:6;45461:13;45471:2;45461:9;:13::i;:::-;:22;;;;:::i;:::-;:39;45453:87;;;;-1:-1:-1;;;45453:87:0;;15991:2:1;45453:87:0;;;15973:21:1;16030:2;16010:18;;;16003:30;16069:34;16049:18;;;16042:62;-1:-1:-1;;;16120:18:1;;;16113:33;16163:19;;45453:87:0;15789:399:1;45453:87:0;45564:28;45595:24;45613:4;45595:9;:24::i;:::-;45564:55;;45667:12;;45643:20;:36;45640:112;;-1:-1:-1;45728:12:0;;45640:112;45823:19;;45799:43;;;;;;;45857:40;;-1:-1:-1;45881:16:0;;;;45880:17;45857:40;:65;;;;;45909:13;-1:-1:-1;;;;;45901:21:0;:4;-1:-1:-1;;;;;45901:21:0;;;45857:65;:90;;;;-1:-1:-1;45926:21:0;;;;;;;45857:90;45853:159;;;45964:36;45979:20;45964:14;:36::i;:::-;-1:-1:-1;;;;;46067:24:0;;46024:12;46067:24;;;:18;:24;;;;;;46039:4;;46067:24;;;:50;;-1:-1:-1;;;;;;46095:22:0;;;;;;:18;:22;;;;;;;;46067:50;46064:516;;;-1:-1:-1;46143:5:0;46064:516;;;46190:13;-1:-1:-1;;;;;46182:21:0;:4;-1:-1:-1;;;;;46182:21:0;;:55;;;;;46221:15;-1:-1:-1;;;;;46207:30:0;:2;-1:-1:-1;;;;;46207:30:0;;;46182:55;46179:185;;;46274:18;;46258:13;:34;46336:12;;46321;;:27;;46336:12;46321:27;:::i;:::-;46311:7;:37;46179:185;46390:13;-1:-1:-1;;;;;46384:19:0;:2;-1:-1:-1;;;;;46384:19:0;;:55;;;;;46423:15;-1:-1:-1;;;;;46407:32:0;:4;-1:-1:-1;;;;;46407:32:0;;;46384:55;46380:189;;;46476:19;;46460:13;:35;46540:13;;46524;;:29;;46540:13;46524:29;:::i;:::-;46514:7;:39;46380:189;46600:38;46615:4;46620:2;46623:6;46630:7;46600:14;:38::i;:::-;44748:1898;;;44645:2001;;;:::o;5525:192::-;5611:7;5647:12;5639:6;;;;5631:29;;;;-1:-1:-1;;;5631:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5671:9:0;5683:5;5687:1;5683;:5;:::i;:::-;5671:17;5525:192;-1:-1:-1;;;;;5525:192:0:o;42760:163::-;42801:7;42822:15;42839;42858:19;:17;:19::i;:::-;42821:56;;-1:-1:-1;42821:56:0;-1:-1:-1;42895:20:0;42821:56;;42895:11;:20::i;:::-;42888:27;;;;42760:163;:::o;6923:132::-;6981:7;7008:39;7012:1;7015;7008:39;;;;;;;;;;;;;;;;;:3;:39::i;36723:792::-;36770:7;;:12;:34;;;;-1:-1:-1;36786:13:0;;:18;36770:34;36767:46;;;36723:792::o;36767:46::-;36851:7;;;36833:15;:25;36893:13;;;36869:21;:37;36935:7;;;36917:15;:25;36977:12;;;36955:20;:34;37029:18;;;37000:26;:47;37082:12;;;37058:20;:36;37130:13;;;37107:21;:36;37184:19;;;37154:27;:49;37239:13;;;37214:21;:38;-1:-1:-1;37265:11:0;;;;37287;;;;37309:17;;;;37339:16;;;;37366:22;;;;37399:16;;;37428:17;;;37456:23;;;;37490:17;;36723:792::o;4622:181::-;4680:7;;4712:5;4716:1;4712;:5;:::i;:::-;4700:17;;4741:1;4736;:6;;4728:46;;;;-1:-1:-1;;;4728:46:0;;16395:2:1;4728:46:0;;;16377:21:1;16434:2;16414:18;;;16407:30;16473:29;16453:18;;;16446:57;16520:18;;4728:46:0;16193:351:1;41558:419:0;41617:7;41626;41635;41644;41653;41662;41683:23;41708:12;41722:18;41744:20;41756:7;41744:11;:20::i;:::-;41682:82;;;;;;41776:15;41793:23;41818:12;41834:50;41846:7;41855:4;41861:10;41873;:8;:10::i;:::-;41834:11;:50::i;:::-;41775:109;;;;-1:-1:-1;41775:109:0;;-1:-1:-1;41935:15:0;;-1:-1:-1;41952:4:0;;-1:-1:-1;41958:10:0;;-1:-1:-1;41558:419:0;;-1:-1:-1;;;;;41558:419:0:o;5086:136::-;5144:7;5171:43;5175:1;5178;5171:43;;;;;;;;;;;;;;;;;:3;:43::i;5976:471::-;6034:7;6279:1;6284;6279:6;6275:47;;-1:-1:-1;6309:1:0;6302:8;;6275:47;6334:9;6346:5;6350:1;6346;:5;:::i;:::-;6334:17;-1:-1:-1;6379:1:0;6370:5;6374:1;6334:17;6370:5;:::i;:::-;:10;6362:56;;;;-1:-1:-1;;;6362:56:0;;16973:2:1;6362:56:0;;;16955:21:1;17012:2;16992:18;;;16985:30;17051:34;17031:18;;;17024:62;-1:-1:-1;;;17102:18:1;;;17095:31;17143:19;;6362:56:0;16771:397:1;48354:181:0;48441:15;;:42;;-1:-1:-1;;;;;48441:15:0;;;;:42;;;;;48466:16;;48441:15;:42;:15;:42;48466:16;48441:15;:42;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48494:12:0;;:33;;-1:-1:-1;;;;;48494:12:0;;;;:33;;;;;48516:10;;48494:12;:33;:12;:33;48516:10;48494:12;:33;;;;;;;;;;;;;;;;;;;46654:1690;28905:16;:23;;-1:-1:-1;;28905:23:0;28924:4;28905:23;;;46768:19:::1;::::0;:24:::1;::::0;46790:2:::1;46768:24;:::i;:::-;46745:20;:47;46741:127;;;46832:19;::::0;:24:::1;::::0;46854:2:::1;46832:24;:::i;:::-;46809:47;;46741:127;46880:25;46908:51;46953:5;46928:19;;46909:18;;:38;;;;:::i;:::-;46908:44:::0;::::1;:51::i;:::-;46880:79;;46970:19;46992:39;47025:5;47006:13;;46993:12;;:26;;;;:::i;46992:39::-;46970:61;;47042:25;47070:39;47103:5;47084:13;;47071:12;;:26;;;;:::i;47070:39::-;47042:67:::0;-1:-1:-1;47120:16:0::1;47175:11:::0;47139:35:::1;47157:17:::0;47042:67;47139:35:::1;:::i;:::-;:47;;;;:::i;:::-;47120:66:::0;-1:-1:-1;47199:26:0::1;47228:59;47120:66:::0;47229:43:::1;:20:::0;47254:17;47229:24:::1;:43::i;47228:59::-;47199:88:::0;-1:-1:-1;47299:24:0::1;47326:25;47199:88:::0;47349:1:::1;47326:22;:25::i;:::-;47299:52:::0;-1:-1:-1;47362:23:0::1;47388:40;:18:::0;47299:52;47388:22:::1;:40::i;:::-;47362:66:::0;-1:-1:-1;47441:26:0::1;47470:42;:20:::0;47495:16;47470:24:::1;:42::i;:::-;47441:71:::0;-1:-1:-1;47550:21:0::1;47582:36;47441:71:::0;47582:16:::1;:36::i;:::-;47631:18;47652:41;:21;47678:14:::0;47652:25:::1;:41::i;:::-;47631:62:::0;-1:-1:-1;47704:19:0::1;47737:24;:17:::0;47759:1:::1;47737:21;:24::i;:::-;47726:35;::::0;:8;:35:::1;:::i;:::-;47704:57:::0;-1:-1:-1;47772:23:0::1;47798:49;47704:57:::0;47828:1:::1;47799:28;47810:17:::0;47799:10;:28:::1;:::i;:::-;:30;;;;:::i;47798:49::-;47772:75;;47883:1;47864:16;:20;:43;;;;;47906:1;47888:15;:19;47864:43;47860:204;;;47924:47;47937:16;47955:15;47924:12;:47::i;:::-;47991:61;::::0;;17375:25:1;;;17431:2;17416:18;;17409:34;;;17459:18;;;17452:34;;;47991:61:0::1;::::0;17363:2:1;17348:18;47991:61:0::1;;;;;;;47860:204;48084:17;48104:46;48138:11:::0;48105:27:::1;:10:::0;48120:11;48105:14:::1;:27::i;48104:46::-;48084:66:::0;-1:-1:-1;48161:23:0::1;48084:66:::0;48187:28:::1;48200:15:::0;48187:10;:28:::1;:::i;:::-;:40;;;;:::i;:::-;48161:66;;48261:1;48243:15;:19;:36;;;;;48278:1;48266:9;:13;48243:36;48240:94;;;48294:40;48307:15;48324:9;48294:12;:40::i;:::-;-1:-1:-1::0;;28951:16:0;:24;;-1:-1:-1;;28951:24:0;;;-1:-1:-1;;;;;;;;;;;;;46654:1690:0:o;37612:471::-;37666:15;;37656:7;:25;37708:21;;37692:13;:37;37750:15;;37740:7;:25;37793:20;;37778:12;:35;37845:26;;37824:18;:47;37897:20;;37882:12;:35;37946:21;;37930:13;:37;38000:27;;37978:19;:49;38054:21;;38038:13;:37;37612:471::o;48543:482::-;28905:16;:23;;-1:-1:-1;;28905:23:0;28924:4;28905:23;;;48644:16:::1;::::0;;48658:1:::1;48644:16:::0;;;;;::::1;::::0;;-1:-1:-1;;48644:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;48644:16:0::1;48620:40;;48689:4;48671;48676:1;48671:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;48671:23:0::1;;;-1:-1:-1::0;;;;;48671:23:0::1;;;::::0;::::1;48715:15;-1:-1:-1::0;;;;;48715:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48705:4;48710:1;48705:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1::0;;;;;48705:32:0::1;;;-1:-1:-1::0;;;;;48705:32:0::1;;;::::0;::::1;48748:62;48765:4;48780:15;48798:11;48748:8;:62::i;:::-;48821:196;::::0;-1:-1:-1;;;48821:196:0;;-1:-1:-1;;;;;48821:15:0::1;:66;::::0;::::1;::::0;:196:::1;::::0;48902:11;;48928:1:::1;::::0;48944:4;;48971::::1;::::0;48991:15:::1;::::0;48821:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;28951:16:0;:24;;-1:-1:-1;;28951:24:0;;;-1:-1:-1;;;;48543:482:0:o;32203:183::-;32283:15;:13;:15::i;:::-;32309:42;9274:10;32333:9;32344:6;32309:9;:42::i;49404:846::-;49525:7;49521:41;;49547:15;:13;:15::i;:::-;-1:-1:-1;;;;;49587:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;49611:22:0;;;;;;:11;:22;;;;;;;;49610:23;49587:46;49583:597;;;49650:48;49672:6;49680:9;49691:6;49650:21;:48::i;:::-;49583:597;;;-1:-1:-1;;;;;49721:19:0;;;;;;:11;:19;;;;;;;;49720:20;:46;;;;-1:-1:-1;;;;;;49744:22:0;;;;;;:11;:22;;;;;;;;49720:46;49716:464;;;49783:46;49803:6;49811:9;49822:6;49783:19;:46::i;49716:464::-;-1:-1:-1;;;;;49852:19:0;;;;;;:11;:19;;;;;;;;49851:20;:47;;;;-1:-1:-1;;;;;;49876:22:0;;;;;;:11;:22;;;;;;;;49875:23;49851:47;49847:333;;;49915:44;49933:6;49941:9;49952:6;49915:17;:44::i;49847:333::-;-1:-1:-1;;;;;49981:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;50004:22:0;;;;;;:11;:22;;;;;;;;49981:45;49977:203;;;50043:48;50065:6;50073:9;50084:6;50043:21;:48::i;49977:203::-;50124:44;50142:6;50150:9;50161:6;50124:17;:44::i;:::-;50204:7;50200:42;;50226:16;:14;:16::i;42931:561::-;43028:7;;43064;;42981;;;;;43088:289;43112:9;:16;43108:20;;43088:289;;;43178:7;43154;:21;43162:9;43172:1;43162:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43162:12:0;43154:21;;;;;;;;;;;;;:31;;:66;;;43213:7;43189;:21;43197:9;43207:1;43197:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43197:12:0;43189:21;;;;;;;;;;;;;:31;43154:66;43150:97;;;43230:7;;43239;;43222:25;;;;;;;42931:561;;:::o;43150:97::-;43272:34;43284:7;:21;43292:9;43302:1;43292:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43292:12:0;43284:21;;;;;;;;;;;;;43272:7;;:11;:34::i;:::-;43262:44;;43331:34;43343:7;:21;43351:9;43361:1;43351:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43351:12:0;43343:21;;;;;;;;;;;;;43331:7;;:11;:34::i;:::-;43321:44;-1:-1:-1;43130:3:0;;;;:::i;:::-;;;;43088:289;;;-1:-1:-1;43413:7:0;;43401;;:20;;:11;:20::i;:::-;43391:7;:30;43387:61;;;43431:7;;43440;;43423:25;;;;;;42931:561;;:::o;43387:61::-;43467:7;;43476;;-1:-1:-1;42931:561:0;-1:-1:-1;42931:561:0:o;7551:278::-;7637:7;7672:12;7665:5;7657:28;;;;-1:-1:-1;;;7657:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7696:9:0;7708:5;7712:1;7708;:5;:::i;41985:330::-;42045:7;42054;42063;42083:12;42098:24;42114:7;42098:15;:24::i;:::-;42083:39;;42133:18;42154:30;42176:7;42154:21;:30::i;:::-;42133:51;-1:-1:-1;42195:23:0;42221:33;42133:51;42221:17;:7;42233:4;42221:11;:17::i;:::-;:21;;:33::i;:::-;42195:59;42290:4;;-1:-1:-1;42296:10:0;;-1:-1:-1;41985:330:0;;-1:-1:-1;;;41985:330:0:o;42323:429::-;42438:7;;;;42494:24;:7;42506:11;42494;:24::i;:::-;42476:42;-1:-1:-1;42529:12:0;42544:21;:4;42553:11;42544:8;:21::i;:::-;42529:36;-1:-1:-1;42576:18:0;42597:27;:10;42612:11;42597:14;:27::i;:::-;42576:48;-1:-1:-1;42635:23:0;42661:33;42576:48;42661:17;:7;42673:4;42661:11;:17::i;:33::-;42713:7;;;;-1:-1:-1;42739:4:0;;-1:-1:-1;42323:429:0;;-1:-1:-1;;;;;;;42323:429:0:o;49033:363::-;49114:62;49131:4;49146:15;49164:11;49114:8;:62::i;:::-;49189:15;-1:-1:-1;;;;;49189:31:0;;49228:9;49261:4;49281:11;49307:1;49324;49340:7;16227;16254:6;-1:-1:-1;;;;;16254:6:0;;16189:79;49340:7;49189:199;;;;;;-1:-1:-1;;;;;;49189:199:0;;;-1:-1:-1;;;;;19229:15:1;;;49189:199:0;;;19211:34:1;19261:18;;;19254:34;;;;19304:18;;;19297:34;;;;19347:18;;;19340:34;19411:15;;;19390:19;;;19383:44;49362:15:0;19443:19:1;;;19436:35;19145:19;;49189:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;51362:566::-;51465:15;51482:23;51507:12;51521:23;51546:12;51560:18;51582:19;51593:7;51582:10;:19::i;:::-;-1:-1:-1;;;;;51630:15:0;;;;;;:7;:15;;;;;;51464:137;;-1:-1:-1;51464:137:0;;-1:-1:-1;51464:137:0;;-1:-1:-1;51464:137:0;-1:-1:-1;51464:137:0;-1:-1:-1;51464:137:0;-1:-1:-1;51630:28:0;;51650:7;51630:19;:28::i;:::-;-1:-1:-1;;;;;51612:15:0;;;;;;:7;:15;;;;;;;;:46;;;;51687:7;:15;;;;:28;;51707:7;51687:19;:28::i;:::-;-1:-1:-1;;;;;51669:15:0;;;;;;;:7;:15;;;;;;:46;;;;51747:18;;;;;;;:39;;51770:15;51747:22;:39::i;:::-;-1:-1:-1;;;;;51726:18:0;;;;;;:7;:18;;;;;:60;51800:26;51815:10;51800:14;:26::i;:::-;51837:23;51849:4;51855;51837:11;:23::i;:::-;51893:9;-1:-1:-1;;;;;51876:44:0;51885:6;-1:-1:-1;;;;;51876:44:0;;51904:15;51876:44;;;;1613:25:1;;1601:2;1586:18;;1467:177;51876:44:0;;;;;;;;51453:475;;;;;;51362:566;;;:::o;50768:586::-;50869:15;50886:23;50911:12;50925:23;50950:12;50964:18;50986:19;50997:7;50986:10;:19::i;:::-;-1:-1:-1;;;;;51034:15:0;;;;;;:7;:15;;;;;;50868:137;;-1:-1:-1;50868:137:0;;-1:-1:-1;50868:137:0;;-1:-1:-1;50868:137:0;-1:-1:-1;50868:137:0;-1:-1:-1;50868:137:0;-1:-1:-1;51034:28:0;;50868:137;51034:19;:28::i;:::-;-1:-1:-1;;;;;51016:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;51094:18;;;;;:7;:18;;;;;:39;;51117:15;51094:22;:39::i;:::-;-1:-1:-1;;;;;51073:18:0;;;;;;:7;:18;;;;;;;;:60;;;;51165:7;:18;;;;:39;;51188:15;51165:22;:39::i;50258:502::-;50357:15;50374:23;50399:12;50413:23;50438:12;50452:18;50474:19;50485:7;50474:10;:19::i;:::-;-1:-1:-1;;;;;50522:15:0;;;;;;:7;:15;;;;;;50356:137;;-1:-1:-1;50356:137:0;;-1:-1:-1;50356:137:0;;-1:-1:-1;50356:137:0;-1:-1:-1;50356:137:0;-1:-1:-1;50356:137:0;-1:-1:-1;50522:28:0;;50356:137;50522:19;:28::i;34714:642::-;34817:15;34834:23;34859:12;34873:23;34898:12;34912:18;34934:19;34945:7;34934:10;:19::i;:::-;-1:-1:-1;;;;;34982:15:0;;;;;;:7;:15;;;;;;34816:137;;-1:-1:-1;34816:137:0;;-1:-1:-1;34816:137:0;;-1:-1:-1;34816:137:0;-1:-1:-1;34816:137:0;-1:-1:-1;34816:137:0;-1:-1:-1;34982:28:0;;35002:7;34982:19;:28::i;:::-;-1:-1:-1;;;;;34964:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35039:7;:15;;;;:28;;35059:7;35039:19;:28::i;43871:130::-;43935:7;43962:31;43987:5;43962:20;43974:7;;43962;:11;;:20;;;;:::i;44009:142::-;44079:7;44106:37;44137:5;44106:26;44118:13;;44106:7;:11;;:26;;;;:::i;43504:355::-;43567:19;43590:10;:8;:10::i;:::-;43567:33;-1:-1:-1;43611:18:0;43632:27;:10;43567:33;43632:14;:27::i;:::-;43711:4;43695:22;;;;:7;:22;;;;;;43611:48;;-1:-1:-1;43695:38:0;;43611:48;43695:26;:38::i;:::-;43686:4;43670:22;;;;:7;:22;;;;;;;;:63;;;;43747:11;:26;;;;;;43744:107;;;43829:4;43813:22;;;;:7;:22;;;;;;:38;;43840:10;43813:26;:38::i;:::-;43804:4;43788:22;;;;:7;:22;;;;;:63;43556:303;;43504:355;:::o;41403:147::-;41481:7;;:17;;41493:4;41481:11;:17::i;:::-;41471:7;:27;41522:10;;:20;;41537:4;41522:14;:20::i;:::-;41509:10;:33;-1:-1:-1;;41403:147:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:548::-;514:4;543:2;572;561:9;554:21;604:6;598:13;647:6;642:2;631:9;627:18;620:34;672:1;682:140;696:6;693:1;690:13;682:140;;;791:14;;;787:23;;781:30;757:17;;;776:2;753:26;746:66;711:10;;682:140;;;686:3;871:1;866:2;857:6;846:9;842:22;838:31;831:42;941:2;934;930:7;925:2;917:6;913:15;909:29;898:9;894:45;890:54;882:62;;;;402:548;;;;:::o;955:315::-;1023:6;1031;1084:2;1072:9;1063:7;1059:23;1055:32;1052:52;;;1100:1;1097;1090:12;1052:52;1139:9;1126:23;1158:31;1183:5;1158:31;:::i;:::-;1208:5;1260:2;1245:18;;;;1232:32;;-1:-1:-1;;;955:315:1:o;1884:456::-;1961:6;1969;1977;2030:2;2018:9;2009:7;2005:23;2001:32;1998:52;;;2046:1;2043;2036:12;1998:52;2085:9;2072:23;2104:31;2129:5;2104:31;:::i;:::-;2154:5;-1:-1:-1;2211:2:1;2196:18;;2183:32;2224:33;2183:32;2224:33;:::i;:::-;1884:456;;2276:7;;-1:-1:-1;;;2330:2:1;2315:18;;;;2302:32;;1884:456::o;2345:180::-;2404:6;2457:2;2445:9;2436:7;2432:23;2428:32;2425:52;;;2473:1;2470;2463:12;2425:52;-1:-1:-1;2496:23:1;;2345:180;-1:-1:-1;2345:180:1:o;2719:401::-;2800:6;2808;2861:2;2849:9;2840:7;2836:23;2832:32;2829:52;;;2877:1;2874;2867:12;2829:52;2916:9;2903:23;2935:31;2960:5;2935:31;:::i;:::-;2985:5;-1:-1:-1;3042:2:1;3027:18;;3014:32;3055:33;3014:32;3055:33;:::i;:::-;3107:7;3097:17;;;2719:401;;;;;:::o;3125:118::-;3211:5;3204:13;3197:21;3190:5;3187:32;3177:60;;3233:1;3230;3223:12;3248:309;3313:6;3321;3374:2;3362:9;3353:7;3349:23;3345:32;3342:52;;;3390:1;3387;3380:12;3342:52;3426:9;3413:23;3403:33;;3486:2;3475:9;3471:18;3458:32;3499:28;3521:5;3499:28;:::i;3770:316::-;3847:6;3855;3863;3916:2;3904:9;3895:7;3891:23;3887:32;3884:52;;;3932:1;3929;3922:12;3884:52;-1:-1:-1;;3955:23:1;;;4025:2;4010:18;;3997:32;;-1:-1:-1;4076:2:1;4061:18;;;4048:32;;3770:316;-1:-1:-1;3770:316:1:o;4091:241::-;4147:6;4200:2;4188:9;4179:7;4175:23;4171:32;4168:52;;;4216:1;4213;4206:12;4168:52;4255:9;4242:23;4274:28;4296:5;4274:28;:::i;4337:367::-;4400:8;4410:6;4464:3;4457:4;4449:6;4445:17;4441:27;4431:55;;4482:1;4479;4472:12;4431:55;-1:-1:-1;4505:20:1;;4548:18;4537:30;;4534:50;;;4580:1;4577;4570:12;4534:50;4617:4;4609:6;4605:17;4593:29;;4677:3;4670:4;4660:6;4657:1;4653:14;4645:6;4641:27;4637:38;4634:47;4631:67;;;4694:1;4691;4684:12;4631:67;4337:367;;;;;:::o;4709:773::-;4831:6;4839;4847;4855;4908:2;4896:9;4887:7;4883:23;4879:32;4876:52;;;4924:1;4921;4914:12;4876:52;4964:9;4951:23;4993:18;5034:2;5026:6;5023:14;5020:34;;;5050:1;5047;5040:12;5020:34;5089:70;5151:7;5142:6;5131:9;5127:22;5089:70;:::i;:::-;5178:8;;-1:-1:-1;5063:96:1;-1:-1:-1;5266:2:1;5251:18;;5238:32;;-1:-1:-1;5282:16:1;;;5279:36;;;5311:1;5308;5301:12;5279:36;;5350:72;5414:7;5403:8;5392:9;5388:24;5350:72;:::i;:::-;4709:773;;;;-1:-1:-1;5441:8:1;-1:-1:-1;;;;4709:773:1:o;5880:356::-;6082:2;6064:21;;;6101:18;;;6094:30;6160:34;6155:2;6140:18;;6133:62;6227:2;6212:18;;5880:356::o;6241:380::-;6320:1;6316:12;;;;6363;;;6384:61;;6438:4;6430:6;6426:17;6416:27;;6384:61;6491:2;6483:6;6480:14;6460:18;6457:38;6454:161;;6537:10;6532:3;6528:20;6525:1;6518:31;6572:4;6569:1;6562:15;6600:4;6597:1;6590:15;6454:161;;6241:380;;;:::o;6626:410::-;6828:2;6810:21;;;6867:2;6847:18;;;6840:30;6906:34;6901:2;6886:18;;6879:62;-1:-1:-1;;;6972:2:1;6957:18;;6950:44;7026:3;7011:19;;6626:410::o;7041:127::-;7102:10;7097:3;7093:20;7090:1;7083:31;7133:4;7130:1;7123:15;7157:4;7154:1;7147:15;7173:168;7246:9;;;7277;;7294:15;;;7288:22;;7274:37;7264:71;;7315:18;;:::i;8113:127::-;8174:10;8169:3;8165:20;8162:1;8155:31;8205:4;8202:1;8195:15;8229:4;8226:1;8219:15;8245:128;8312:9;;;8333:11;;;8330:37;;;8347:18;;:::i;8378:127::-;8439:10;8434:3;8430:20;8427:1;8420:31;8470:4;8467:1;8460:15;8494:4;8491:1;8484:15;8510:135;8549:3;8570:17;;;8567:43;;8590:18;;:::i;:::-;-1:-1:-1;8637:1:1;8626:13;;8510:135::o;8650:184::-;8720:6;8773:2;8761:9;8752:7;8748:23;8744:32;8741:52;;;8789:1;8786;8779:12;8741:52;-1:-1:-1;8812:16:1;;8650:184;-1:-1:-1;8650:184:1:o;9118:245::-;9185:6;9238:2;9226:9;9217:7;9213:23;9209:32;9206:52;;;9254:1;9251;9244:12;9206:52;9286:9;9280:16;9305:28;9327:5;9305:28;:::i;10141:125::-;10206:9;;;10227:10;;;10224:36;;;10240:18;;:::i;11744:408::-;11946:2;11928:21;;;11985:2;11965:18;;;11958:30;12024:34;12019:2;12004:18;;11997:62;-1:-1:-1;;;12090:2:1;12075:18;;12068:42;12142:3;12127:19;;11744:408::o;16549:217::-;16589:1;16615;16605:132;;16659:10;16654:3;16650:20;16647:1;16640:31;16694:4;16691:1;16684:15;16722:4;16719:1;16712:15;16605:132;-1:-1:-1;16751:9:1;;16549:217::o;17629:251::-;17699:6;17752:2;17740:9;17731:7;17727:23;17723:32;17720:52;;;17768:1;17765;17758:12;17720:52;17800:9;17794:16;17819:31;17844:5;17819:31;:::i;17885:980::-;18147:4;18195:3;18184:9;18180:19;18226:6;18215:9;18208:25;18252:2;18290:6;18285:2;18274:9;18270:18;18263:34;18333:3;18328:2;18317:9;18313:18;18306:31;18357:6;18392;18386:13;18423:6;18415;18408:22;18461:3;18450:9;18446:19;18439:26;;18500:2;18492:6;18488:15;18474:29;;18521:1;18531:195;18545:6;18542:1;18539:13;18531:195;;;18610:13;;-1:-1:-1;;;;;18606:39:1;18594:52;;18701:15;;;;18666:12;;;;18642:1;18560:9;18531:195;;;-1:-1:-1;;;;;;;18782:32:1;;;;18777:2;18762:18;;18755:60;-1:-1:-1;;;18846:3:1;18831:19;18824:35;18743:3;17885:980;-1:-1:-1;;;17885:980:1:o;19482:306::-;19570:6;19578;19586;19639:2;19627:9;19618:7;19614:23;19610:32;19607:52;;;19655:1;19652;19645:12;19607:52;19684:9;19678:16;19668:26;;19734:2;19723:9;19719:18;19713:25;19703:35;;19778:2;19767:9;19763:18;19757:25;19747:35;;19482:306;;;;;:::o

Swarm Source

ipfs://566caf97b71f95cf6fc1d91443aae68fa20761b4ca23faf18ef28c1dd935dc41
Loading