ETH Price: $2,705.59 (-5.21%)

Token

PEPESILVER (PEPES)
 

Overview

Max Total Supply

10,000,000 PEPES

Holders

116

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
29,504.34708054 PEPES

Value
$0.00
0x00963fc96837b48973b7e4d935bbbbf84ff7f3e2
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
PEPESILVER

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-13
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.1;
interface IERC20 {
    function totalSupply() external view returns (uint256);

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

    function transfer(address recipient, uint256 amount) external returns (bool);

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}


/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

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

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

        return c;
    }

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

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

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

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


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

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

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

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

    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;

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

}


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

// pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        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;
}


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

    mapping (address => uint256) public _cooldown;
    mapping (address => uint256) public _rOwned;
    mapping (address => uint256) public _tOwned;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => bool) public _blacklisted;
    mapping (address => bool) public _lpPairs;
    mapping (address => bool) public _isExcludedFromFee;
    mapping (address => bool) public _isExcluded;
    mapping (address => bool) public _maxWalletExempt;
    mapping (address => bool) public _preTrader;
    mapping (address => bool) public _lpHolder;
    uint8 public constant _decimals = 9;
    uint16 totalFee;
    uint16 taxFee;
    uint16 public constant taxDivisor = 10000;
    uint256 private constant MAX = ~uint256(0);
    uint256 public constant startingSupply = 10_000_000;
    uint256 public constant _tTotal = startingSupply * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "PEPESILVER";
    string private constant _symbol = "PEPES";

    bool public feesEnabled;
    struct IFees {
        uint16 taxFee;
        uint16 liquidityFee;
        uint16 marketingFee;
        uint16 totalFee;
    }
    struct ILaunch {
        uint256 launchedAt;
        uint256 launchBlock;
        uint256 antiBlocks;
        bool tradingOpen;
        bool launched;
        bool launchProtection;
    }
    struct ICooldown {
        bool buycooldownEnabled;
        bool sellcooldownEnabled;
        uint256 cooldownLimit;
        uint256 cooldownTime;
    }
    struct ILiquiditySettings {
        uint256 liquidityFeeAccumulator;
        uint256 numTokensToSwap;
        uint256 lastSwap;
        uint8 swapInterval;
        bool swapEnabled;
        bool marketing;
        bool inSwap;
    }
    struct ITransactionSettings {
        uint256 maxTxAmount;
        uint256 maxWalletAmount;
        bool txLimits;
    }
    IFees public MaxFees;
    IFees public BuyFees;
    IFees public SellFees;
    IFees public TransferFees;
    ICooldown public Cooldown;
    ILaunch public Launch;
    ILiquiditySettings public LiquiditySettings;
    ITransactionSettings public TransactionSettings;
    IUniswapV2Router02 public immutable router;
    address public lpPair;
    address payable public marketingWallet;
    address[] private _excluded;
    event areFeesEnabled(bool enabled);
    event MinTokensBeforeSwapUpdated(uint256 indexed minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 eth, uint256 tokensIntoLiquidity);
    event SwapToMarketing(uint256 eth);
    modifier lockTheSwap {
        LiquiditySettings.inSwap = true;
        _;
        LiquiditySettings.inSwap = false;
    }
  
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        marketingWallet = payable(owner());
        _lpHolder[owner()] = true;
        Cooldown.cooldownLimit = 60;
        IUniswapV2Router02 _router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        lpPair = IUniswapV2Factory(_router.factory())
            .createPair(address(this), _router.WETH());

        // set the rest of the contract variables
        router = _router;
        _lpPairs[lpPair] = true;
        _approve(_msgSender(), address(_router), type(uint256).max);
        _approve(address(this), address(_router), type(uint256).max);      
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _preTrader[owner()] = true;
        _lpHolder[owner()] = true;        
        _maxWalletExempt[lpPair] = true;
        _maxWalletExempt[owner()] = true;
        _maxWalletExempt[address(this)] = true;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

    function totalSupply() public pure 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 _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "BEP20: approve from the zero address");
        require(spender != address(0), "BEP20: approve to the zero address");

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: 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, "BEP20: decreased allowance below zero"));
        return true;
    }

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

    function deliver(uint256 tAmount) private {
        address sender = _msgSender();
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        if(_isExcluded[msg.sender])
            _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _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 not 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;
            }
        }
    }
    
    // Exclude or Include from Fees
    function excludeFromFee(address account, bool FeeLess) public onlyOwner {
        _isExcludedFromFee[account] = FeeLess;
    }
    
    // Sets marketing wallet
    function setWallet(address payable m) external onlyOwner() {
        marketingWallet = m; 

    }
    
    receive() external payable {}

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

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

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = (tAmount * taxFee) / taxDivisor;
        uint256 tFees = (tAmount * totalFee) / taxDivisor;
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tFees);
        return (tTransferAmount, tFee, tFees);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tFees, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rFees = tFees.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rFees);
        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 getCirculatingSupply() external view returns(uint256){
        return _tTotal - balanceOf(address(0xDead));
    }

    function _takeFees(uint256 tFees) private {
        uint256 currentRate = _getRate();
        uint256 rFees = tFees.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rFees);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tFees);
    }

    function _takeMarketing(uint256 marketing) private {
        uint256 currentRate =  _getRate();
        uint256 rMarketing = marketing.mul(currentRate);
        _rOwned[marketingWallet] = _rOwned[marketingWallet].add(rMarketing);
        if(_isExcluded[marketingWallet])
            _tOwned[marketingWallet] = _tOwned[marketingWallet].add(marketing);
     
    }

    function limits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && tx.origin != owner()
            && !_lpHolder[from]
            && !_lpHolder[to]
            && to != address(0xdead)
            && to != address(0)
            && from != address(this);
    }

    // Transfer functions
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private returns (bool){
        require(from != address(0), "BEP20: transfer from the zero address");
        require(to != address(0), "BEP20: transfer to the zero address");            
        require(!_blacklisted[from], "TOKEN: Your account is blacklisted!");
        require(!_blacklisted[to], "TOKEN: Your account is blacklisted!");
        require(amount > 0, "BEP20: Transfer amount must be greater than zero");
        if(LiquiditySettings.inSwap) return (_basicTransfer(from, to, amount));
        if(from != owner() && to != owner()){
            if(!Launch.tradingOpen){
                require(_preTrader[from] || _preTrader[to]);
            }
            if (limits(from, to)) {
                if(Launch.tradingOpen && Launch.launched && TransactionSettings.txLimits){
                    if(!_maxWalletExempt[to]){
                        require(amount <= TransactionSettings.maxTxAmount && balanceOf(to) + amount <= TransactionSettings.maxWalletAmount, "TOKEN: Amount exceeds Transaction size");
                    }
                    if (_lpPairs[from] && to != address(router) && !_isExcludedFromFee[to] && Cooldown.buycooldownEnabled) {
                        require(_cooldown[to] < block.timestamp);
                         _cooldown[to] = block.timestamp + (Cooldown.cooldownTime);
                    } else if (!_lpPairs[from] && !_isExcludedFromFee[from] && Cooldown.sellcooldownEnabled){
                        require(_cooldown[from] <= block.timestamp);
                        _cooldown[from] = block.timestamp + (Cooldown.cooldownTime);
                    }                     
                }
            }      
            if(LiquiditySettings.swapEnabled && !LiquiditySettings.inSwap && balanceOf(address(this)) >= LiquiditySettings.numTokensToSwap && _lpPairs[to]){
                if(LiquiditySettings.liquidityFeeAccumulator >= LiquiditySettings.numTokensToSwap && block.timestamp >= LiquiditySettings.lastSwap + LiquiditySettings.swapInterval){
                    swapAndLiquify();
                    LiquiditySettings.lastSwap = block.timestamp;
                } else {
                    if(block.timestamp >= LiquiditySettings.lastSwap + LiquiditySettings.swapInterval){
                        swapForMarketing();
                        LiquiditySettings.lastSwap = block.timestamp;
                    }
                }
            }
        }
        // transfer amount, it will set fees and auto blacklist snipers
        return (_tokenTransfer(from,to,amount));
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount) private returns (bool){
        if(Launch.launched){
            setFee(sender, recipient);
            if(Launch.launchProtection){
                if(Launch.launchBlock + Launch.antiBlocks <= block.number) {
                    turnOff();
                }
                if (_lpPairs[sender] && recipient != address(router) && !_isExcludedFromFee[recipient]) {
                    if (block.number  <= Launch.launchBlock + Launch.antiBlocks) {
                        if(!_lpPairs[recipient]){
                            _setSniperStatus(recipient, true);
                        }
                    }
                }
            }
        }

        // transfers and takes fees
        if(!Launch.tradingOpen){
            _basicTransfer(sender, recipient, amount);
        } else 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]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 tAmount) private returns (bool){
        uint256 rAmount = tAmount.mul(_getRate());
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rAmount);
        emit Transfer(sender, recipient, tAmount);
        return true;
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tFees) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        if(!LiquiditySettings.marketing){
            _takeFees(tFees);
            uint16 taxCorrection = (BuyFees.taxFee + SellFees.taxFee + TransferFees.taxFee);
            LiquiditySettings.liquidityFeeAccumulator += (tFees * (BuyFees.liquidityFee + SellFees.liquidityFee + TransferFees.liquidityFee)) / ((BuyFees.totalFee + SellFees.totalFee + TransferFees.totalFee) - taxCorrection) + (BuyFees.liquidityFee + SellFees.liquidityFee + TransferFees.liquidityFee);
        } else {
            _takeMarketing(tFees);
        }      
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);      
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tFees) = _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);        
        if(!LiquiditySettings.marketing){
            _takeFees(tFees);
            uint16 taxCorrection = (BuyFees.taxFee + SellFees.taxFee + TransferFees.taxFee);
            LiquiditySettings.liquidityFeeAccumulator += (tFees * (BuyFees.liquidityFee + SellFees.liquidityFee + TransferFees.liquidityFee)) / ((BuyFees.totalFee + SellFees.totalFee + TransferFees.totalFee) - taxCorrection) + (BuyFees.liquidityFee + SellFees.liquidityFee + TransferFees.liquidityFee);
        } else {
            _takeMarketing(tFees);
        }        
        _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 tFees) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        if(!LiquiditySettings.marketing){
            _takeFees(tFees);
            uint16 taxCorrection = (BuyFees.taxFee + SellFees.taxFee + TransferFees.taxFee);
            LiquiditySettings.liquidityFeeAccumulator += (tFees * (BuyFees.liquidityFee + SellFees.liquidityFee + TransferFees.liquidityFee)) / ((BuyFees.totalFee + SellFees.totalFee + TransferFees.totalFee) - taxCorrection) + (BuyFees.liquidityFee + SellFees.liquidityFee + TransferFees.liquidityFee);
        } else {
            _takeMarketing(tFees);
        }       
        _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 tFees) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        if(!LiquiditySettings.marketing){
            _takeFees(tFees);
            uint16 taxCorrection = (BuyFees.taxFee + SellFees.taxFee + TransferFees.taxFee);
            LiquiditySettings.liquidityFeeAccumulator += (tFees * (BuyFees.liquidityFee + SellFees.liquidityFee + TransferFees.liquidityFee)) / ((BuyFees.totalFee + SellFees.totalFee + TransferFees.totalFee) - taxCorrection) + (BuyFees.liquidityFee + SellFees.liquidityFee + TransferFees.liquidityFee);
        } else {
            _takeMarketing(tFees);
        }        
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    // Sets the  Fees
    function setFee(address sender, address recipient) internal {
        if(feesEnabled){
            if (_lpPairs[recipient]) {
                if(totalFee != SellFees.marketingFee + SellFees.liquidityFee){
                    totalFee = SellFees.marketingFee + SellFees.liquidityFee;            
                }
                if(taxFee != SellFees.taxFee){
                    taxFee = SellFees.taxFee;
                }
            } else if(_lpPairs[sender]){
                if(totalFee != BuyFees.marketingFee + BuyFees.liquidityFee){
                    totalFee = BuyFees.marketingFee + BuyFees.liquidityFee;            
                }
                if(taxFee != BuyFees.taxFee){
                    taxFee = BuyFees.taxFee;
                }
            } else {
                if(totalFee != TransferFees.marketingFee + TransferFees.liquidityFee){
                    totalFee = TransferFees.marketingFee + TransferFees.liquidityFee;            
                }
                if(taxFee != TransferFees.taxFee){
                    taxFee = TransferFees.taxFee;
                }
            }
            if(block.number <= Launch.launchBlock + Launch.antiBlocks){
                totalFee += 500; // Adds 5% tax onto original tax
            }
        }
        // removes fee if sender or recipient is fee excluded or if fees are disabled
        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient] || !feesEnabled) {
            if(totalFee != 0 && taxFee != 0){
                totalFee = 0;
                taxFee = 0;
            }
        }
    }
    
    // set launch
    function setTradingOpen(bool _tradingOpen, uint8 sniperblocks) public onlyOwner {
        require(sniperblocks <= 5);
        require(!Launch.tradingOpen);
        Launch.tradingOpen = _tradingOpen;
        FeesEnabled(_tradingOpen);
        setCooldownEnabled(_tradingOpen, _tradingOpen, 30);
        setNumTokensToSwap(1,1000);
        setTxSettings(5,1000,1,100,_tradingOpen);
        toggleSwap(_tradingOpen, 10);
        if(!Launch.launched) {
            setMaxFee(500,500,500, _tradingOpen);
            Launch.launched = _tradingOpen;
            Launch.antiBlocks = sniperblocks;
            Launch.launchedAt = block.timestamp; 
            Launch.launchBlock = block.number; 
            Launch.launchProtection = _tradingOpen;
        }
    }

    // Swaps tokens and adds to Liquidity
    function swapAndLiquify() private lockTheSwap {
        uint256 liquidityTokens = LiquiditySettings.numTokensToSwap / 2;
        swapTokens(liquidityTokens);
        uint256 toLiquidity = address(this).balance;
        addLiquidity(liquidityTokens, toLiquidity);
        emit SwapAndLiquify(toLiquidity, liquidityTokens);
        LiquiditySettings.liquidityFeeAccumulator -= LiquiditySettings.numTokensToSwap;        
    }

    // Swaps tokens and send to Marketing
    function swapForMarketing() private lockTheSwap {
        swapTokens(LiquiditySettings.numTokensToSwap);
        uint256 toMarketing = address(this).balance;
        marketingWallet.transfer(toMarketing);
        emit SwapToMarketing(toMarketing);
    }

    // Swaps Token for Eth
    function swapTokens(uint256 tokenAmount) private {
        // generate the pancakeswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

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

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

    // Adds eth and token to Liqudity
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tokenAmount);

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

    // Transaction functions
    function setTxSettings(uint256 txp, uint256 txd, uint256 mwp, uint256 mwd, bool limit) public onlyOwner {
        require((_tTotal * txp) / txd >= _tTotal / 1000, "Max Transaction must be above 0.1% of total supply.");
        require((_tTotal * mwp) / mwd >= _tTotal / 1000, "Max Wallet must be above 0.1% of total supply.");
        uint256 newTxAmount = (_tTotal * txp) / txd;
        uint256 newMaxWalletAmount = (_tTotal * mwp) / mwd;
        TransactionSettings = ITransactionSettings ({
            maxTxAmount: newTxAmount,
            maxWalletAmount: newMaxWalletAmount,
            txLimits: limit
        });
    }

    function setWalletExempt(address account, bool enabled) public onlyOwner{
        _maxWalletExempt[account] = enabled;
    }
    // Cooldown Settings
    function setCooldownEnabled(bool onoff, bool offon, uint8 time) public onlyOwner {
        require(time <= Cooldown.cooldownLimit);
        Cooldown.cooldownTime = time;
        Cooldown.buycooldownEnabled = onoff;
        Cooldown.sellcooldownEnabled = offon;
    }

    // contract swap functions
    function toggleSwap(bool _swapEnabled, uint8 swapInterval) public onlyOwner {
        LiquiditySettings.swapEnabled = _swapEnabled;
        LiquiditySettings.swapInterval = swapInterval;
    }

    // Receive tokens instead of Eth
    function toggleMarketing(bool enabled) public onlyOwner {
        LiquiditySettings.marketing = enabled;
    }

    // AirDrop 
    function airDropTokens(address[] memory addresses, uint256[] memory amounts) external {
        require(addresses.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < addresses.length; i++) {
            require(balanceOf(_msgSender()) >= amounts[i]);
            _tokenTransfer(_msgSender(), addresses[i], amounts[i]*10**_decimals);
        }
    }

    // Pretraders
    function allowPreTrading(address account, bool allowed) public onlyOwner {
        require(_preTrader[account] != allowed, "TOKEN: Already enabled.");
        _preTrader[account] = allowed;
    }

    // Clear Stuck Tokens 
    function clearStuckBalance(uint256 amountPercentage) external onlyOwner {
        require(amountPercentage <= 100);
        uint256 amountETH = address(this).balance;
        payable(marketingWallet).transfer(
            (amountETH * amountPercentage) / 100
        );
    }

    function clearStuckToken(address to) external onlyOwner {
        uint256 _balance = balanceOf(address(this));
        _transfer(address(this), to, _balance);
    }

    function clearStuckTokens(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0));
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
    }

    // Blacklist
    function blockBots(address[] memory bots_, bool enabled) public onlyOwner {
        for (uint256 i = 0; i < bots_.length; i++) {
            _blacklisted[bots_[i]] = enabled;
        }
    }

    function _setSniperStatus(address account, bool blacklisted) internal {
        if(_lpPairs[account] || account == address(this) || account == address(router) || _isExcludedFromFee[account]) {revert();}
        
        if (blacklisted == true) {
            _blacklisted[account] = true;
        } else {
            _blacklisted[account] = false;
        }    
    }

    function turnOff() internal {
        Launch.launchProtection = false;
    }
    // Set LP Holders
    function setLpHolder(address holder, bool enabled) external onlyOwner {
        _lpHolder[holder] = enabled;
    }
    // Setting new Lp Pairs
    function setLpPair(address pair, bool enabled) external onlyOwner {
        _lpPairs[pair] = enabled;
    }

    // Set minimum tokens required to swap.
    function setNumTokensToSwap(uint256 percent, uint256 divisor) public onlyOwner {
        LiquiditySettings.numTokensToSwap = (_tTotal * percent) / divisor;
    }

    // Fee Settings
    function FeesEnabled(bool _enabled) public onlyOwner {
        feesEnabled = _enabled;
        emit areFeesEnabled(_enabled);
    }

    function setBuyFees(uint16 _liquidityFee, uint16 _marketingFee, uint16 _taxFee) public onlyOwner {
        require(_liquidityFee <= MaxFees.liquidityFee && _marketingFee <= MaxFees.marketingFee);
        BuyFees = IFees({
            liquidityFee: _liquidityFee,
            marketingFee: _marketingFee,
            taxFee: _taxFee,
            totalFee: _liquidityFee + _marketingFee + _taxFee
        });
    }

    function setSellFees(uint16 _liquidityFee, uint16 _marketingFee, uint16 _taxFee) public onlyOwner {
        require(_liquidityFee <= MaxFees.liquidityFee && _marketingFee <= MaxFees.marketingFee);
        SellFees = IFees({
            liquidityFee: _liquidityFee,
            marketingFee: _marketingFee,
            taxFee: _taxFee,
            totalFee: _liquidityFee + _marketingFee +  _taxFee
        });
    }

    function setTransferFees(uint16 _liquidityFee, uint16 _marketingFee, uint16 _taxFee) public onlyOwner {
        require(_liquidityFee <= MaxFees.liquidityFee && _marketingFee <= MaxFees.marketingFee);
        TransferFees = IFees({
            liquidityFee: _liquidityFee,
            marketingFee: _marketingFee,
            taxFee: _taxFee,
            totalFee: _liquidityFee + _marketingFee + _taxFee
        });
    }
        

    function setMaxFee(uint16 _taxFee, uint16 _liquidityFee, uint16 _marketingFee, bool resetFees) public onlyOwner {
        if(!Launch.launched){
            MaxFees = IFees({
                taxFee: _taxFee,
                liquidityFee: _liquidityFee,
                marketingFee: _marketingFee,
                totalFee: _taxFee + _liquidityFee + _marketingFee
            });
            setBuyFees(_liquidityFee, _marketingFee, _taxFee);                
            setSellFees(_liquidityFee, _marketingFee, _taxFee);
            setTransferFees(_liquidityFee / (10), _marketingFee/ (10), _taxFee / (10));
        }else{
            require(_liquidityFee <= MaxFees.liquidityFee && _marketingFee <= MaxFees.marketingFee && _taxFee <= MaxFees.taxFee);
            MaxFees = IFees({
                taxFee: _taxFee,
                liquidityFee: _liquidityFee,
                marketingFee: _marketingFee,
                totalFee: _taxFee + _liquidityFee + _marketingFee
            });
            if(resetFees){
                setBuyFees(_liquidityFee, _marketingFee, _taxFee);                
                setSellFees(_liquidityFee, _marketingFee, _taxFee);
            }
        }
    }
}

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":true,"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":"eth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"eth","type":"uint256"}],"name":"SwapToMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"areFeesEnabled","type":"event"},{"inputs":[],"name":"BuyFees","outputs":[{"internalType":"uint16","name":"taxFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"totalFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Cooldown","outputs":[{"internalType":"bool","name":"buycooldownEnabled","type":"bool"},{"internalType":"bool","name":"sellcooldownEnabled","type":"bool"},{"internalType":"uint256","name":"cooldownLimit","type":"uint256"},{"internalType":"uint256","name":"cooldownTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"FeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Launch","outputs":[{"internalType":"uint256","name":"launchedAt","type":"uint256"},{"internalType":"uint256","name":"launchBlock","type":"uint256"},{"internalType":"uint256","name":"antiBlocks","type":"uint256"},{"internalType":"bool","name":"tradingOpen","type":"bool"},{"internalType":"bool","name":"launched","type":"bool"},{"internalType":"bool","name":"launchProtection","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LiquiditySettings","outputs":[{"internalType":"uint256","name":"liquidityFeeAccumulator","type":"uint256"},{"internalType":"uint256","name":"numTokensToSwap","type":"uint256"},{"internalType":"uint256","name":"lastSwap","type":"uint256"},{"internalType":"uint8","name":"swapInterval","type":"uint8"},{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"marketing","type":"bool"},{"internalType":"bool","name":"inSwap","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxFees","outputs":[{"internalType":"uint16","name":"taxFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"totalFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellFees","outputs":[{"internalType":"uint16","name":"taxFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"totalFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TransactionSettings","outputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"},{"internalType":"bool","name":"txLimits","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TransferFees","outputs":[{"internalType":"uint16","name":"taxFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"totalFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_blacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_cooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lpHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lpPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_maxWalletExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_preTrader","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_rOwned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_tOwned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowPreTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"blockBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"clearStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"clearStuckTokens","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"FeeLess","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_liquidityFee","type":"uint16"},{"internalType":"uint16","name":"_marketingFee","type":"uint16"},{"internalType":"uint16","name":"_taxFee","type":"uint16"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"},{"internalType":"bool","name":"offon","type":"bool"},{"internalType":"uint8","name":"time","type":"uint8"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_taxFee","type":"uint16"},{"internalType":"uint16","name":"_liquidityFee","type":"uint16"},{"internalType":"uint16","name":"_marketingFee","type":"uint16"},{"internalType":"bool","name":"resetFees","type":"bool"}],"name":"setMaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setNumTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_liquidityFee","type":"uint16"},{"internalType":"uint16","name":"_marketingFee","type":"uint16"},{"internalType":"uint16","name":"_taxFee","type":"uint16"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingOpen","type":"bool"},{"internalType":"uint8","name":"sniperblocks","type":"uint8"}],"name":"setTradingOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_liquidityFee","type":"uint16"},{"internalType":"uint16","name":"_marketingFee","type":"uint16"},{"internalType":"uint16","name":"_taxFee","type":"uint16"}],"name":"setTransferFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"txp","type":"uint256"},{"internalType":"uint256","name":"txd","type":"uint256"},{"internalType":"uint256","name":"mwp","type":"uint256"},{"internalType":"uint256","name":"mwd","type":"uint256"},{"internalType":"bool","name":"limit","type":"bool"}],"name":"setTxSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"m","type":"address"}],"name":"setWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxDivisor","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"},{"internalType":"uint8","name":"swapInterval","type":"uint8"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","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":"pure","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"},{"stateMutability":"payable","type":"receive"}]

60a06040526200001762989680633b9aca00620005e3565b62000025906000196200061f565b620000339060001962000605565b600e553480156200004357600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e54336000908152600360209081526040808320939093558154602480546001600160a01b0319166001600160a01b0390921691821790558252600c815290829020805460ff19166001179055603c601655815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480840193829003018186803b1580156200011f57600080fd5b505afa15801562000134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015a9190620005b1565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001a357600080fd5b505afa158015620001b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001de9190620005b1565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200022757600080fd5b505af11580156200023c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002629190620005b1565b602380546001600160a01b0319166001600160a01b03929092169182179055606082901b6001600160601b0319166080526000908152600760205260409020805460ff19166001179055620002c2620002b83390565b8260001962000485565b620002d1308260001962000485565b600160086000620002ea6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526008909252812080549092166001908117909255600b90620003436000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600190600c90620003876000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556023549091168152600a9283905290812080549093166001908117909355620003e66000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600a9092529020805490911660011790556200042e3390565b6001600160a01b031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200046d62989680633b9aca00620005e3565b60405190815260200160405180910390a35062000658565b6001600160a01b038316620004ed5760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620005505760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004e4565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600060208284031215620005c457600080fd5b81516001600160a01b0381168114620005dc57600080fd5b9392505050565b600081600019048311821515161562000600576200060062000642565b500290565b6000828210156200061a576200061a62000642565b500390565b6000826200063d57634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b60805160601c614c9b620006af60003960008181610eb501528181612aff01528181612ef50152818161398601528181613f1001528181613fd8015281816140140152818161408e01526140b50152614c9b6000f3fe6080604052600436106103f25760003560e01c806375f0a87411610208578063af465a2711610118578063dcfeb250116100ab578063e6a233c11161007a578063e6a233c114610e1a578063f2421d2c14610e4a578063f2fde38b14610e83578063f887ea4014610ea3578063fc6c2bda14610ed757600080fd5b8063dcfeb25014610d74578063dd62ed3e14610d94578063deaa59df14610dda578063df8408fe14610dfa57600080fd5b8063c40fedc6116100e7578063c40fedc614610cdb578063d478a06c14610cfb578063d921485814610d1b578063dc77036714610d3b57600080fd5b8063af465a2714610bda578063b0782df714610bef578063b2c57fff14610c3c578063b410cccb14610cbb57600080fd5b80638da5cb5b1161019b578063a0ecf0a51161016a578063a0ecf0a514610b30578063a457c2d714610b50578063a64e4f8a14610b70578063a6bcae3f14610b8a578063a9059cbb14610bba57600080fd5b80638da5cb5b14610aa45780639163525914610ac257806395d89b4114610ae25780639be953b314610b1057600080fd5b80637a6d69b4116101d75780637a6d69b414610a1457806380c581d114610a4457806380f44a6214610a6457806383597a4214610a8457600080fd5b806375f0a87414610977578063768dc710146109975780637862a67f146109c757806379c1a626146109f457600080fd5b80633685d419116103035780634de5ae711161029657806365468fab1161026557806365468fab146108b95780636951a079146108e957806370a0823114610909578063715018a6146109295780637303df9a1461093e57600080fd5b80634de5ae7114610820578063512094ea1461084057806352390c021461087057806357880e3c1461089057600080fd5b8063452ed4f1116102d2578063452ed4f1146107885780634549b039146107c0578063461a4450146107e05780634c57f8d21461080057600080fd5b80633685d4191461070457806339509351146107245780633b7e6d4a1461074457806341c531621461077157600080fd5b80631d9daeb8116103865780632b112e49116103555780632b112e49146106785780632d8381191461068d5780632f9c4569146106ad578063313ce567146106cd57806332424aa3146106ef57600080fd5b80631d9daeb8146105d75780631da1db5e146105f957806323b872dd1461061957806325cef4581461063957600080fd5b80630b285b1f116103c25780630b285b1f146105425780630cfc15f91461057257806313114a9d146105ad57806318160ddd146105c257600080fd5b8062167e93146103fe57806302ac81681461046a57806306fdde03146104d6578063095ea7b31461051257600080fd5b366103f957005b600080fd5b34801561040a57600080fd5b506014546104379061ffff80821691620100008104821691600160201b8204811691600160301b90041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080015b60405180910390f35b34801561047657600080fd5b50601854601954601a54601b546104a39392919060ff808216916101008104821691620100009091041686565b604080519687526020870195909552938501929092521515606084015215156080830152151560a082015260c001610461565b3480156104e257600080fd5b5060408051808201909152600a8152692822a822a9a4a62b22a960b11b60208201525b60405161046191906147fc565b34801561051e57600080fd5b5061053261052d36600461448d565b610ef7565b6040519015158152602001610461565b34801561054e57600080fd5b5061053261055d3660046143ab565b60096020526000908152604090205460ff1681565b34801561057e57600080fd5b5061059f61058d3660046143ab565b60036020526000908152604090205481565b604051908152602001610461565b3480156105b957600080fd5b50600f5461059f565b3480156105ce57600080fd5b5061059f610f0e565b3480156105e357600080fd5b506105f76105f23660046147af565b610f26565b005b34801561060557600080fd5b506105f7610614366004614708565b611141565b34801561062557600080fd5b5061053261063436600461441e565b6111cd565b34801561064557600080fd5b5060205460215460225461065b92919060ff1683565b604080519384526020840192909252151590820152606001610461565b34801561068457600080fd5b5061059f611238565b34801561069957600080fd5b5061059f6106a8366004614708565b611260565b3480156106b957600080fd5b506105f76106c836600461445f565b6112dd565b3480156106d957600080fd5b5060095b60405160ff9091168152602001610461565b3480156106fb57600080fd5b506106dd600981565b34801561071057600080fd5b506105f761071f3660046143ab565b6113a1565b34801561073057600080fd5b5061053261073f36600461448d565b611558565b34801561075057600080fd5b5061059f61075f3660046143ab565b60046020526000908152604090205481565b34801561077d57600080fd5b5061059f6298968081565b34801561079457600080fd5b506023546107a8906001600160a01b031681565b6040516001600160a01b039091168152602001610461565b3480156107cc57600080fd5b5061059f6107db36600461473a565b61158e565b3480156107ec57600080fd5b506105f76107fb3660046145fc565b611629565b34801561080c57600080fd5b506105f761081b3660046144b9565b61168f565b34801561082c57600080fd5b506105f761083b3660046146b2565b611787565b34801561084c57600080fd5b5061053261085b3660046143ab565b600b6020526000908152604090205460ff1681565b34801561087c57600080fd5b506105f761088b3660046143ab565b6119c7565b34801561089c57600080fd5b506108a661271081565b60405161ffff9091168152602001610461565b3480156108c557600080fd5b506105326108d43660046143ab565b600a6020526000908152604090205460ff1681565b3480156108f557600080fd5b506105f7610904366004614678565b611b1a565b34801561091557600080fd5b5061059f6109243660046143ab565b611c2e565b34801561093557600080fd5b506105f7611c8d565b34801561094a57600080fd5b506011546104379061ffff80821691620100008104821691600160201b8204811691600160301b90041684565b34801561098357600080fd5b506024546107a8906001600160a01b031681565b3480156109a357600080fd5b506105326109b23660046143ab565b60086020526000908152604090205460ff1681565b3480156109d357600080fd5b5061059f6109e23660046143ab565b60026020526000908152604090205481565b348015610a0057600080fd5b506105f7610a0f366004614678565b611d01565b348015610a2057600080fd5b50610532610a2f3660046143ab565b60066020526000908152604090205460ff1681565b348015610a5057600080fd5b506105f7610a5f36600461445f565b611e15565b348015610a7057600080fd5b506105f7610a7f36600461445f565b611e6a565b348015610a9057600080fd5b506105f7610a9f366004614643565b611ebf565b348015610ab057600080fd5b506000546001600160a01b03166107a8565b348015610ace57600080fd5b506105f7610add36600461445f565b611fb3565b348015610aee57600080fd5b50604080518082019091526005815264504550455360d81b6020820152610505565b348015610b1c57600080fd5b506105f7610b2b3660046143ab565b612008565b348015610b3c57600080fd5b506105f7610b4b3660046145c2565b61204a565b348015610b5c57600080fd5b50610532610b6b36600461448d565b6120bb565b348015610b7c57600080fd5b506010546105329060ff1681565b348015610b9657600080fd5b50610532610ba53660046143ab565b600c6020526000908152604090205460ff1681565b348015610bc657600080fd5b50610532610bd536600461448d565b61210a565b348015610be657600080fd5b5061059f612117565b348015610bfb57600080fd5b50601554601654601754610c1a9260ff80821693610100909204169184565b6040805194151585529215156020850152918301526060820152608001610461565b348015610c4857600080fd5b50601c54601d54601e54601f54610c7e9392919060ff808216916101008104821691620100008204811691630100000090041687565b6040805197885260208801969096529486019390935260ff909116606085015215156080840152151560a0830152151560c082015260e001610461565b348015610cc757600080fd5b506105f7610cd63660046145c2565b61212b565b348015610ce757600080fd5b50610532610cf63660046143e5565b612171565b348015610d0757600080fd5b506105f7610d1636600461457b565b6122b7565b348015610d2757600080fd5b506105f7610d36366004614643565b612348565b348015610d4757600080fd5b506012546104379061ffff80821691620100008104821691600160201b8204811691600160301b90041684565b348015610d8057600080fd5b506105f7610d8f36600461475f565b612398565b348015610da057600080fd5b5061059f610daf3660046143e5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610de657600080fd5b506105f7610df53660046143ab565b6123f0565b348015610e0657600080fd5b506105f7610e1536600461445f565b61243c565b348015610e2657600080fd5b50610532610e353660046143ab565b60076020526000908152604090205460ff1681565b348015610e5657600080fd5b506013546104379061ffff80821691620100008104821691600160201b8204811691600160301b90041684565b348015610e8f57600080fd5b506105f7610e9e3660046143ab565b612491565b348015610eaf57600080fd5b506107a87f000000000000000000000000000000000000000000000000000000000000000081565b348015610ee357600080fd5b506105f7610ef2366004614678565b61257b565b6000610f0433848461268f565b5060015b92915050565b6000610f2162989680633b9aca00614af0565b905090565b6000546001600160a01b03163314610f595760405162461bcd60e51b8152600401610f5090614894565b60405180910390fd5b6103e8610f6d62989680633b9aca00614af0565b610f7791906149ee565b8486610f8a62989680633b9aca00614af0565b610f949190614af0565b610f9e91906149ee565b10156110085760405162461bcd60e51b815260206004820152603360248201527f4d6178205472616e73616374696f6e206d7573742062652061626f766520302e60448201527218929037b3103a37ba30b61039bab838363c9760691b6064820152608401610f50565b6103e861101c62989680633b9aca00614af0565b61102691906149ee565b828461103962989680633b9aca00614af0565b6110439190614af0565b61104d91906149ee565b10156110b25760405162461bcd60e51b815260206004820152602e60248201527f4d61782057616c6c6574206d7573742062652061626f766520302e3125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610f50565b600084866110c762989680633b9aca00614af0565b6110d19190614af0565b6110db91906149ee565b9050600083856110f262989680633b9aca00614af0565b6110fc9190614af0565b61110691906149ee565b604080516060810182528481526020808201849052951515910181905292909355506021919091556022805460ff1916909117905550505050565b6000546001600160a01b0316331461116b5760405162461bcd60e51b8152600401610f5090614894565b606481111561117957600080fd5b60245447906001600160a01b03166108fc60646111968585614af0565b6111a091906149ee565b6040518115909202916000818181858888f193505050501580156111c8573d6000803e3d6000fd5b505050565b60006111da8484846127b3565b5061122d843361122885604051806060016040528060288152602001614c19602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190612d2e565b61268f565b5060015b9392505050565b600061124561dead611c2e565b61125662989680633b9aca00614af0565b610f219190614b32565b6000600e548211156112c75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610f50565b60006112d1612d68565b90506112318382612d8b565b6000546001600160a01b031633146113075760405162461bcd60e51b8152600401610f5090614894565b6001600160a01b0382166000908152600b602052604090205460ff16151581151514156113765760405162461bcd60e51b815260206004820152601760248201527f544f4b454e3a20416c726561647920656e61626c65642e0000000000000000006044820152606401610f50565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113cb5760405162461bcd60e51b8152600401610f5090614894565b6001600160a01b03811660009081526009602052604090205460ff166114335760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610f50565b60005b60255481101561155457816001600160a01b03166025828154811061145d5761145d614bc6565b6000918252602090912001546001600160a01b03161415611542576025805461148890600190614b32565b8154811061149857611498614bc6565b600091825260209091200154602580546001600160a01b0390921691839081106114c4576114c4614bc6565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600990925220805460ff19169055602580548061151c5761151c614bb0565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061154c81614b49565b915050611436565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f049185906112289086612dcd565b60006115a162989680633b9aca00614af0565b8311156115f05760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610f50565b8161160f57600061160084612e2c565b50939550610f08945050505050565b600061161a84612e2c565b50929550610f08945050505050565b6000546001600160a01b031633146116535760405162461bcd60e51b8152600401610f5090614894565b60165460ff8216111561166557600080fd5b60ff166017556015805461ffff191692151561ff0019169290921761010091151591909102179055565b80518251146116d85760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610f50565b60005b82518160ff1610156111c857818160ff16815181106116fc576116fc614bc6565b602002602001015161170e6109243390565b101561171957600080fd5b61177433848360ff168151811061173257611732614bc6565b60200260200101516009600a6117489190614a45565b858560ff168151811061175d5761175d614bc6565b602002602001015161176f9190614af0565b612e7b565b508061177f81614b64565b9150506116db565b6000546001600160a01b031633146117b15760405162461bcd60e51b8152600401610f5090614894565b601b54610100900460ff166118aa5760405180608001604052808561ffff1681526020018461ffff1681526020018361ffff1681526020018385876117f6919061498f565b611800919061498f565b61ffff9081169091528151601180546020850151604086015160609096015193851663ffffffff199092169190911762010000918516919091021767ffffffff000000001916600160201b9484169490940261ffff60301b191693909317600160301b9190921602179055611876838386611b1a565b61188183838661257b565b6118a561188f600a856149cd565b61189a600a856149cd565b610a0f600a886149cd565b6119c1565b60115461ffff620100009091048116908416118015906118db575060115461ffff600160201b909104811690831611155b80156118f1575060115461ffff90811690851611155b6118fa57600080fd5b60405180608001604052808561ffff1681526020018461ffff1681526020018361ffff168152602001838587611930919061498f565b61193a919061498f565b61ffff9081169091528151601180546020850151604086015160609096015193851663ffffffff199092169190911762010000918516919091021767ffffffff000000001916600160201b9484169490940261ffff60301b191693909317600160301b919092160217905580156119c1576119b6838386611b1a565b6119c183838661257b565b50505050565b6000546001600160a01b031633146119f15760405162461bcd60e51b8152600401610f5090614894565b6001600160a01b03811660009081526009602052604090205460ff1615611a5a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610f50565b6001600160a01b03811660009081526003602052604090205415611ab4576001600160a01b038116600090815260036020526040902054611a9a90611260565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600960205260408120805460ff191660019081179091556025805491820181559091527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b0319169091179055565b6000546001600160a01b03163314611b445760405162461bcd60e51b8152600401610f5090614894565b60115461ffff62010000909104811690841611801590611b75575060115461ffff600160201b909104811690831611155b611b7e57600080fd5b60405180608001604052808261ffff1681526020018461ffff1681526020018361ffff168152602001828486611bb4919061498f565b611bbe919061498f565b61ffff9081169091528151601280546020850151604086015160609096015193851663ffffffff199092169190911762010000918516919091021767ffffffff000000001916600160201b9484169490940261ffff60301b191693909317600160301b9190921602179055505050565b6001600160a01b03811660009081526009602052604081205460ff1615611c6b57506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610f0890611260565b6000546001600160a01b03163314611cb75760405162461bcd60e51b8152600401610f5090614894565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611d2b5760405162461bcd60e51b8152600401610f5090614894565b60115461ffff62010000909104811690841611801590611d5c575060115461ffff600160201b909104811690831611155b611d6557600080fd5b60405180608001604052808261ffff1681526020018461ffff1681526020018361ffff168152602001828486611d9b919061498f565b611da5919061498f565b61ffff9081169091528151601480546020850151604086015160609096015193851663ffffffff199092169190911762010000918516919091021767ffffffff000000001916600160201b9484169490940261ffff60301b191693909317600160301b9190921602179055505050565b6000546001600160a01b03163314611e3f5760405162461bcd60e51b8152600401610f5090614894565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611e945760405162461bcd60e51b8152600401610f5090614894565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ee95760405162461bcd60e51b8152600401610f5090614894565b60058160ff161115611efa57600080fd5b601b5460ff1615611f0a57600080fd5b601b805460ff1916831515179055611f218261204a565b611f2d8283601e611629565b611f3a60016103e8612398565b611f4c60056103e86001606486610f26565b611f5782600a612348565b601b54610100900460ff1661155457611f766101f4806101f485611787565b601b805460ff92909216601a55426018554360195562ffff001990911661010092151592830262ff00001916176201000092909202919091179055565b6000546001600160a01b03163314611fdd5760405162461bcd60e51b8152600401610f5090614894565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146120325760405162461bcd60e51b8152600401610f5090614894565b600061203d30611c2e565b90506111c83083836127b3565b6000546001600160a01b031633146120745760405162461bcd60e51b8152600401610f5090614894565b6010805460ff19168215159081179091556040519081527f98b34ab297c11cc48e456cc816801e434b47485532f1101c314921260beab76c9060200160405180910390a150565b6000610f04338461122885604051806060016040528060258152602001614c41602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190612d2e565b600061122d3384846127b3565b61212862989680633b9aca00614af0565b81565b6000546001600160a01b031633146121555760405162461bcd60e51b8152600401610f5090614894565b601f8054911515620100000262ff000019909216919091179055565b600080546001600160a01b0316331461219c5760405162461bcd60e51b8152600401610f5090614894565b6001600160a01b0383166121af57600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b1580156121f157600080fd5b505afa158015612205573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122299190614721565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561227757600080fd5b505af115801561228b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122af91906145df565b949350505050565b6000546001600160a01b031633146122e15760405162461bcd60e51b8152600401610f5090614894565b60005b82518110156111c857816006600085848151811061230457612304614bc6565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061234081614b49565b9150506122e4565b6000546001600160a01b031633146123725760405162461bcd60e51b8152600401610f5090614894565b601f805461ffff19166101009315159390930260ff19169290921760ff91909116179055565b6000546001600160a01b031633146123c25760405162461bcd60e51b8152600401610f5090614894565b80826123d562989680633b9aca00614af0565b6123df9190614af0565b6123e991906149ee565b601d555050565b6000546001600160a01b0316331461241a5760405162461bcd60e51b8152600401610f5090614894565b602480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146124665760405162461bcd60e51b8152600401610f5090614894565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146124bb5760405162461bcd60e51b8152600401610f5090614894565b6001600160a01b0381166125205760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f50565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125a55760405162461bcd60e51b8152600401610f5090614894565b60115461ffff620100009091048116908416118015906125d6575060115461ffff600160201b909104811690831611155b6125df57600080fd5b60405180608001604052808261ffff1681526020018461ffff1681526020018361ffff168152602001828486612615919061498f565b61261f919061498f565b61ffff9081169091528151601380546020850151604086015160609096015193851663ffffffff199092169190911762010000918516919091021767ffffffff000000001916600160201b9484169490940261ffff60301b191693909317600160301b9190921602179055505050565b6001600160a01b0383166126f15760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f50565b6001600160a01b0382166127525760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f50565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166128195760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f50565b6001600160a01b03831661287b5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610f50565b6001600160a01b03841660009081526006602052604090205460ff16156128b45760405162461bcd60e51b8152600401610f5090614851565b6001600160a01b03831660009081526006602052604090205460ff16156128ed5760405162461bcd60e51b8152600401610f5090614851565b600082116129565760405162461bcd60e51b815260206004820152603060248201527f42455032303a205472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b6064820152608401610f50565b601f546301000000900460ff161561297a576129738484846130b2565b9050611231565b6000546001600160a01b038581169116148015906129a657506000546001600160a01b03848116911614155b15612d2357601b5460ff166129fd576001600160a01b0384166000908152600b602052604090205460ff16806129f457506001600160a01b0383166000908152600b602052604090205460ff165b6129fd57600080fd5b612a078484613183565b15612c6157601b5460ff168015612a255750601b54610100900460ff165b8015612a33575060225460ff165b15612c61576001600160a01b0383166000908152600a602052604090205460ff16612ada576020548211801590612a7f575060215482612a7285611c2e565b612a7c91906149b5565b11155b612ada5760405162461bcd60e51b815260206004820152602660248201527f544f4b454e3a20416d6f756e742065786365656473205472616e73616374696f6044820152656e2073697a6560d01b6064820152608401610f50565b6001600160a01b03841660009081526007602052604090205460ff168015612b3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b8015612b5957506001600160a01b03831660009081526008602052604090205460ff16155b8015612b67575060155460ff165b15612bbb576001600160a01b0383166000908152600260205260409020544211612b9057600080fd5b601754612b9d90426149b5565b6001600160a01b038416600090815260026020526040902055612c61565b6001600160a01b03841660009081526007602052604090205460ff16158015612bfd57506001600160a01b03841660009081526008602052604090205460ff16155b8015612c105750601554610100900460ff165b15612c61576001600160a01b038416600090815260026020526040902054421015612c3a57600080fd5b601754612c4790426149b5565b6001600160a01b0385166000908152600260205260409020555b601f54610100900460ff168015612c825750601f546301000000900460ff16155b8015612c985750601d54612c9530611c2e565b10155b8015612cbc57506001600160a01b03831660009081526007602052604090205460ff165b15612d2357601d54601c5410801590612ce75750601f54601e54612ce39160ff16906149b5565b4210155b15612cfd57612cf4613254565b42601e55612d23565b601f54601e54612d109160ff16906149b5565b4210612d2357612d1e6132f3565b42601e555b6122af848484612e7b565b60008184841115612d525760405162461bcd60e51b8152600401610f5091906147fc565b506000612d5f8486614b32565b95945050505050565b6000806000612d75613390565b9092509050612d848282612d8b565b9250505090565b600061123183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061354e565b600080612dda83856149b5565b9050838110156112315760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610f50565b6000806000806000806000806000612e438a61357c565b9250925092506000806000612e618d8686612e5c612d68565b6135f5565b919f909e50909c50959a5093985091965092945050505050565b601b54600090610100900460ff1615612f9557612e988484613645565b601b5462010000900460ff1615612f9557601a546019544391612eba916149b5565b11612ed057612ed0601b805462ff000019169055565b6001600160a01b03841660009081526007602052604090205460ff168015612f2a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b8015612f4f57506001600160a01b03831660009081526008602052604090205460ff16155b15612f9557601a54601954612f6491906149b5565b4311612f95576001600160a01b03831660009081526007602052604090205460ff16612f9557612f9583600161394f565b601b5460ff16612fb057612faa8484846130b2565b5061122d565b6001600160a01b03841660009081526009602052604090205460ff168015612ff157506001600160a01b03831660009081526009602052604090205460ff16155b1561300657613001848484613a3b565b61122d565b6001600160a01b03841660009081526009602052604090205460ff1615801561304757506001600160a01b03831660009081526009602052604090205460ff165b1561305757613001848484613c98565b6001600160a01b03841660009081526009602052604090205460ff16801561309757506001600160a01b03831660009081526009602052604090205460ff165b156130a757613001848484613d41565b61122d848484613db4565b6000806130c76130c0612d68565b8490613df8565b6001600160a01b0386166000908152600360205260409020549091506130ed9082613e77565b6001600160a01b03808716600090815260036020526040808220939093559086168152205461311c9082612dcd565b6001600160a01b0380861660008181526003602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906131709087815260200190565b60405180910390a3506001949350505050565b600080546001600160a01b038481169116148015906131b057506000546001600160a01b03838116911614155b80156131c757506000546001600160a01b03163214155b80156131ec57506001600160a01b0383166000908152600c602052604090205460ff16155b801561321157506001600160a01b0382166000908152600c602052604090205460ff16155b801561322857506001600160a01b03821661dead14155b801561323c57506001600160a01b03821615155b8015611231575050506001600160a01b031630141590565b601f805463ff00000019166301000000179055601d54600090613279906002906149ee565b905061328481613eb9565b4761328f8282614088565b60408051828152602081018490527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a1601d54601c80546000906132dd908490614b32565b9091555050601f805463ff000000191690555050565b601f805463ff00000019166301000000179055601d5461331290613eb9565b60245460405147916001600160a01b03169082156108fc029083906000818181858888f1935050505015801561334c573d6000803e3d6000fd5b506040518181527f381c830610fe960b400618dbe552986a3f0213eda41b5daf350d2a36f9f99e809060200160405180910390a150601f805463ff00000019169055565b600e546000908190816133aa62989680633b9aca00614af0565b905060005b602554811015613502578260036000602584815481106133d1576133d1614bc6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061343c575081600460006025848154811061341557613415614bc6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561346057600e5461345562989680633b9aca00614af0565b945094505050509091565b6134a6600360006025848154811061347a5761347a614bc6565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490613e77565b92506134ee60046000602584815481106134c2576134c2614bc6565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390613e77565b9150806134fa81614b49565b9150506133af565b5061352061351762989680633b9aca00614af0565b600e5490612d8b565b82101561354557600e5461353b62989680633b9aca00614af0565b9350935050509091565b90939092509050565b6000818361356f5760405162461bcd60e51b8152600401610f5091906147fc565b506000612d5f84866149ee565b600d54600090819081908190612710906135a09062010000900461ffff1687614af0565b6135aa91906149ee565b600d54909150600090612710906135c59061ffff1688614af0565b6135cf91906149ee565b905060006135e7826135e18986613e77565b90613e77565b979296509094509092505050565b60008080806136048886613df8565b905060006136128887613df8565b905060006136208888613df8565b90506000613632826135e18686613e77565b939b939a50919850919650505050505050565b60105460ff16156138c7576001600160a01b03811660009081526007602052604090205460ff1615613716576013546136919061ffff620100008204811691600160201b90041661498f565b600d5461ffff9081169116146136d8576013546136c19061ffff620100008204811691600160201b90041661498f565b600d805461ffff191661ffff929092169190911790555b601354600d5462010000900461ffff90811691161461371157601354600d805463ffff0000191661ffff90921662010000029190911790555b61387b565b6001600160a01b03821660009081526007602052604090205460ff16156137db576012546137579061ffff620100008204811691600160201b90041661498f565b600d5461ffff90811691161461379e576012546137879061ffff620100008204811691600160201b90041661498f565b600d805461ffff191661ffff929092169190911790555b601254600d5462010000900461ffff90811691161461371157601254600d805463ffff0000191661ffff909216620100000291909117905561387b565b6014546137fb9061ffff620100008204811691600160201b90041661498f565b600d5461ffff9081169116146138425760145461382b9061ffff620100008204811691600160201b90041661498f565b600d805461ffff191661ffff929092169190911790555b601454600d5462010000900461ffff90811691161461387b57601454600d805463ffff0000191661ffff90921662010000029190911790555b601a5460195461388b91906149b5565b43116138c757600d80546101f491906000906138ac90849061ffff1661498f565b92506101000a81548161ffff021916908361ffff1602179055505b6001600160a01b03821660009081526008602052604090205460ff168061390657506001600160a01b03811660009081526008602052604090205460ff165b80613914575060105460ff16155b1561155457600d5461ffff16158015906139395750600d5462010000900461ffff1615155b1561155457600d805463ffffffff191690555050565b6001600160a01b03821660009081526007602052604090205460ff168061397e57506001600160a01b03821630145b806139ba57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b806139dd57506001600160a01b03821660009081526008602052604090205460ff165b156139e757600080fd5b60018115151415613a19576001600160a01b0382166000908152600660205260409020805460ff191660011790555050565b506001600160a01b03166000908152600660205260409020805460ff19169055565b600080600080600080613a4d87612e2c565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613a7f9088613e77565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054613aae9087613e77565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054613add9086612dcd565b6001600160a01b038916600090815260036020526040902055601f5462010000900460ff16613c2d57613b0f8161419d565b60145460135460125460009261ffff90811692613b3092908216911661498f565b613b3a919061498f565b60145460135460125492935061ffff6201000092839004811693613b67939283900482169290041661498f565b613b71919061498f565b60145460135460125461ffff938416938593600160301b90819004821693613ba393908290048316929190041661498f565b613bad919061498f565b613bb79190614b0f565b60145460135460125461ffff938416936201000093849004811693613be393819004821692041661498f565b613bed919061498f565b613bfb9061ffff1685614af0565b613c0591906149ee565b613c0f91906149b5565b601c8054600090613c219084906149b5565b90915550613c36915050565b613c3681614225565b613c4084836142e4565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613c8591815260200190565b60405180910390a3505050505050505050565b600080600080600080613caa87612e2c565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150613cdc9087613e77565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054613d129084612dcd565b6001600160a01b038916600090815260046020908152604080832093909355600390522054613add9086612dcd565b600080600080600080613d5387612e2c565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613d859088613e77565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054613cdc9087613e77565b600080600080600080613dc687612e2c565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150613aae9087613e77565b600082613e0757506000610f08565b6000613e138385614af0565b905082613e2085836149ee565b146112315760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610f50565b600061123183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d2e565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613eee57613eee614bc6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613f6757600080fd5b505afa158015613f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f9f91906143c8565b81600181518110613fb257613fb2614bc6565b60200260200101906001600160a01b031690816001600160a01b031681525050613ffd307f00000000000000000000000000000000000000000000000000000000000000008461268f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906140529085906000908690309042906004016148c9565b600060405180830381600087803b15801561406c57600080fd5b505af1158015614080573d6000803e3d6000fd5b505050505050565b6140b3307f00000000000000000000000000000000000000000000000000000000000000008461268f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230856000806140fa6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561415d57600080fd5b505af1158015614171573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141969190614781565b5050505050565b60006141a7612d68565b905060006141b58383613df8565b306000908152600360205260409020549091506141d29082612dcd565b3060009081526003602090815260408083209390935560099052205460ff16156111c857306000908152600460205260409020546142109084612dcd565b30600090815260046020526040902055505050565b600061422f612d68565b9050600061423d8383613df8565b6024546001600160a01b03166000908152600360205260409020549091506142659082612dcd565b602480546001600160a01b03908116600090815260036020908152604080832095909555925490911681526009909152205460ff16156111c8576024546001600160a01b03166000908152600460205260409020546142c49084612dcd565b6024546001600160a01b0316600090815260046020526040902055505050565b600e546142f19083613e77565b600e55600f546143019082612dcd565b600f555050565b600082601f83011261431957600080fd5b8135602061432e6143298361496b565b61493a565b80838252828201915082860187848660051b890101111561434e57600080fd5b60005b8581101561437657813561436481614bf2565b84529284019290840190600101614351565b5090979650505050505050565b803561ffff8116811461439557600080fd5b919050565b803560ff8116811461439557600080fd5b6000602082840312156143bd57600080fd5b813561123181614bf2565b6000602082840312156143da57600080fd5b815161123181614bf2565b600080604083850312156143f857600080fd5b823561440381614bf2565b9150602083013561441381614bf2565b809150509250929050565b60008060006060848603121561443357600080fd5b833561443e81614bf2565b9250602084013561444e81614bf2565b929592945050506040919091013590565b6000806040838503121561447257600080fd5b823561447d81614bf2565b9150602083013561441381614c0a565b600080604083850312156144a057600080fd5b82356144ab81614bf2565b946020939093013593505050565b600080604083850312156144cc57600080fd5b823567ffffffffffffffff808211156144e457600080fd5b6144f086838701614308565b935060209150818501358181111561450757600080fd5b85019050601f8101861361451a57600080fd5b80356145286143298261496b565b80828252848201915084840189868560051b870101111561454857600080fd5b600094505b8385101561456b57803583526001949094019391850191850161454d565b5080955050505050509250929050565b6000806040838503121561458e57600080fd5b823567ffffffffffffffff8111156145a557600080fd5b6145b185828601614308565b925050602083013561441381614c0a565b6000602082840312156145d457600080fd5b813561123181614c0a565b6000602082840312156145f157600080fd5b815161123181614c0a565b60008060006060848603121561461157600080fd5b833561461c81614c0a565b9250602084013561462c81614c0a565b915061463a6040850161439a565b90509250925092565b6000806040838503121561465657600080fd5b823561466181614c0a565b915061466f6020840161439a565b90509250929050565b60008060006060848603121561468d57600080fd5b61469684614383565b92506146a460208501614383565b915061463a60408501614383565b600080600080608085870312156146c857600080fd5b6146d185614383565b93506146df60208601614383565b92506146ed60408601614383565b915060608501356146fd81614c0a565b939692955090935050565b60006020828403121561471a57600080fd5b5035919050565b60006020828403121561473357600080fd5b5051919050565b6000806040838503121561474d57600080fd5b82359150602083013561441381614c0a565b6000806040838503121561477257600080fd5b50508035926020909101359150565b60008060006060848603121561479657600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a086880312156147c757600080fd5b8535945060208601359350604086013592506060860135915060808601356147ee81614c0a565b809150509295509295909350565b600060208083528351808285015260005b818110156148295785810183015185820160400152820161480d565b8181111561483b576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460408201526265642160e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156149195784516001600160a01b0316835293830193918301916001016148f4565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561496357614963614bdc565b604052919050565b600067ffffffffffffffff82111561498557614985614bdc565b5060051b60200190565b600061ffff8083168185168083038211156149ac576149ac614b84565b01949350505050565b600082198211156149c8576149c8614b84565b500190565b600061ffff808416806149e2576149e2614b9a565b92169190910492915050565b6000826149fd576149fd614b9a565b500490565b600181815b80851115614a3d578160001904821115614a2357614a23614b84565b80851615614a3057918102915b93841c9390800290614a07565b509250929050565b600061123160ff841683600082614a5e57506001610f08565b81614a6b57506000610f08565b8160018114614a815760028114614a8b57614aa7565b6001915050610f08565b60ff841115614a9c57614a9c614b84565b50506001821b610f08565b5060208310610133831016604e8410600b8410161715614aca575081810a610f08565b614ad48383614a02565b8060001904821115614ae857614ae8614b84565b029392505050565b6000816000190483118215151615614b0a57614b0a614b84565b500290565b600061ffff83811690831681811015614b2a57614b2a614b84565b039392505050565b600082821015614b4457614b44614b84565b500390565b6000600019821415614b5d57614b5d614b84565b5060010190565b600060ff821660ff811415614b7b57614b7b614b84565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114614c0757600080fd5b50565b8015158114614c0757600080fdfe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122082a4e7a644e56a076807387c6d33ac16b5657a6c713ad8cd24dd57dba33ad01f64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103f25760003560e01c806375f0a87411610208578063af465a2711610118578063dcfeb250116100ab578063e6a233c11161007a578063e6a233c114610e1a578063f2421d2c14610e4a578063f2fde38b14610e83578063f887ea4014610ea3578063fc6c2bda14610ed757600080fd5b8063dcfeb25014610d74578063dd62ed3e14610d94578063deaa59df14610dda578063df8408fe14610dfa57600080fd5b8063c40fedc6116100e7578063c40fedc614610cdb578063d478a06c14610cfb578063d921485814610d1b578063dc77036714610d3b57600080fd5b8063af465a2714610bda578063b0782df714610bef578063b2c57fff14610c3c578063b410cccb14610cbb57600080fd5b80638da5cb5b1161019b578063a0ecf0a51161016a578063a0ecf0a514610b30578063a457c2d714610b50578063a64e4f8a14610b70578063a6bcae3f14610b8a578063a9059cbb14610bba57600080fd5b80638da5cb5b14610aa45780639163525914610ac257806395d89b4114610ae25780639be953b314610b1057600080fd5b80637a6d69b4116101d75780637a6d69b414610a1457806380c581d114610a4457806380f44a6214610a6457806383597a4214610a8457600080fd5b806375f0a87414610977578063768dc710146109975780637862a67f146109c757806379c1a626146109f457600080fd5b80633685d419116103035780634de5ae711161029657806365468fab1161026557806365468fab146108b95780636951a079146108e957806370a0823114610909578063715018a6146109295780637303df9a1461093e57600080fd5b80634de5ae7114610820578063512094ea1461084057806352390c021461087057806357880e3c1461089057600080fd5b8063452ed4f1116102d2578063452ed4f1146107885780634549b039146107c0578063461a4450146107e05780634c57f8d21461080057600080fd5b80633685d4191461070457806339509351146107245780633b7e6d4a1461074457806341c531621461077157600080fd5b80631d9daeb8116103865780632b112e49116103555780632b112e49146106785780632d8381191461068d5780632f9c4569146106ad578063313ce567146106cd57806332424aa3146106ef57600080fd5b80631d9daeb8146105d75780631da1db5e146105f957806323b872dd1461061957806325cef4581461063957600080fd5b80630b285b1f116103c25780630b285b1f146105425780630cfc15f91461057257806313114a9d146105ad57806318160ddd146105c257600080fd5b8062167e93146103fe57806302ac81681461046a57806306fdde03146104d6578063095ea7b31461051257600080fd5b366103f957005b600080fd5b34801561040a57600080fd5b506014546104379061ffff80821691620100008104821691600160201b8204811691600160301b90041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080015b60405180910390f35b34801561047657600080fd5b50601854601954601a54601b546104a39392919060ff808216916101008104821691620100009091041686565b604080519687526020870195909552938501929092521515606084015215156080830152151560a082015260c001610461565b3480156104e257600080fd5b5060408051808201909152600a8152692822a822a9a4a62b22a960b11b60208201525b60405161046191906147fc565b34801561051e57600080fd5b5061053261052d36600461448d565b610ef7565b6040519015158152602001610461565b34801561054e57600080fd5b5061053261055d3660046143ab565b60096020526000908152604090205460ff1681565b34801561057e57600080fd5b5061059f61058d3660046143ab565b60036020526000908152604090205481565b604051908152602001610461565b3480156105b957600080fd5b50600f5461059f565b3480156105ce57600080fd5b5061059f610f0e565b3480156105e357600080fd5b506105f76105f23660046147af565b610f26565b005b34801561060557600080fd5b506105f7610614366004614708565b611141565b34801561062557600080fd5b5061053261063436600461441e565b6111cd565b34801561064557600080fd5b5060205460215460225461065b92919060ff1683565b604080519384526020840192909252151590820152606001610461565b34801561068457600080fd5b5061059f611238565b34801561069957600080fd5b5061059f6106a8366004614708565b611260565b3480156106b957600080fd5b506105f76106c836600461445f565b6112dd565b3480156106d957600080fd5b5060095b60405160ff9091168152602001610461565b3480156106fb57600080fd5b506106dd600981565b34801561071057600080fd5b506105f761071f3660046143ab565b6113a1565b34801561073057600080fd5b5061053261073f36600461448d565b611558565b34801561075057600080fd5b5061059f61075f3660046143ab565b60046020526000908152604090205481565b34801561077d57600080fd5b5061059f6298968081565b34801561079457600080fd5b506023546107a8906001600160a01b031681565b6040516001600160a01b039091168152602001610461565b3480156107cc57600080fd5b5061059f6107db36600461473a565b61158e565b3480156107ec57600080fd5b506105f76107fb3660046145fc565b611629565b34801561080c57600080fd5b506105f761081b3660046144b9565b61168f565b34801561082c57600080fd5b506105f761083b3660046146b2565b611787565b34801561084c57600080fd5b5061053261085b3660046143ab565b600b6020526000908152604090205460ff1681565b34801561087c57600080fd5b506105f761088b3660046143ab565b6119c7565b34801561089c57600080fd5b506108a661271081565b60405161ffff9091168152602001610461565b3480156108c557600080fd5b506105326108d43660046143ab565b600a6020526000908152604090205460ff1681565b3480156108f557600080fd5b506105f7610904366004614678565b611b1a565b34801561091557600080fd5b5061059f6109243660046143ab565b611c2e565b34801561093557600080fd5b506105f7611c8d565b34801561094a57600080fd5b506011546104379061ffff80821691620100008104821691600160201b8204811691600160301b90041684565b34801561098357600080fd5b506024546107a8906001600160a01b031681565b3480156109a357600080fd5b506105326109b23660046143ab565b60086020526000908152604090205460ff1681565b3480156109d357600080fd5b5061059f6109e23660046143ab565b60026020526000908152604090205481565b348015610a0057600080fd5b506105f7610a0f366004614678565b611d01565b348015610a2057600080fd5b50610532610a2f3660046143ab565b60066020526000908152604090205460ff1681565b348015610a5057600080fd5b506105f7610a5f36600461445f565b611e15565b348015610a7057600080fd5b506105f7610a7f36600461445f565b611e6a565b348015610a9057600080fd5b506105f7610a9f366004614643565b611ebf565b348015610ab057600080fd5b506000546001600160a01b03166107a8565b348015610ace57600080fd5b506105f7610add36600461445f565b611fb3565b348015610aee57600080fd5b50604080518082019091526005815264504550455360d81b6020820152610505565b348015610b1c57600080fd5b506105f7610b2b3660046143ab565b612008565b348015610b3c57600080fd5b506105f7610b4b3660046145c2565b61204a565b348015610b5c57600080fd5b50610532610b6b36600461448d565b6120bb565b348015610b7c57600080fd5b506010546105329060ff1681565b348015610b9657600080fd5b50610532610ba53660046143ab565b600c6020526000908152604090205460ff1681565b348015610bc657600080fd5b50610532610bd536600461448d565b61210a565b348015610be657600080fd5b5061059f612117565b348015610bfb57600080fd5b50601554601654601754610c1a9260ff80821693610100909204169184565b6040805194151585529215156020850152918301526060820152608001610461565b348015610c4857600080fd5b50601c54601d54601e54601f54610c7e9392919060ff808216916101008104821691620100008204811691630100000090041687565b6040805197885260208801969096529486019390935260ff909116606085015215156080840152151560a0830152151560c082015260e001610461565b348015610cc757600080fd5b506105f7610cd63660046145c2565b61212b565b348015610ce757600080fd5b50610532610cf63660046143e5565b612171565b348015610d0757600080fd5b506105f7610d1636600461457b565b6122b7565b348015610d2757600080fd5b506105f7610d36366004614643565b612348565b348015610d4757600080fd5b506012546104379061ffff80821691620100008104821691600160201b8204811691600160301b90041684565b348015610d8057600080fd5b506105f7610d8f36600461475f565b612398565b348015610da057600080fd5b5061059f610daf3660046143e5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610de657600080fd5b506105f7610df53660046143ab565b6123f0565b348015610e0657600080fd5b506105f7610e1536600461445f565b61243c565b348015610e2657600080fd5b50610532610e353660046143ab565b60076020526000908152604090205460ff1681565b348015610e5657600080fd5b506013546104379061ffff80821691620100008104821691600160201b8204811691600160301b90041684565b348015610e8f57600080fd5b506105f7610e9e3660046143ab565b612491565b348015610eaf57600080fd5b506107a87f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610ee357600080fd5b506105f7610ef2366004614678565b61257b565b6000610f0433848461268f565b5060015b92915050565b6000610f2162989680633b9aca00614af0565b905090565b6000546001600160a01b03163314610f595760405162461bcd60e51b8152600401610f5090614894565b60405180910390fd5b6103e8610f6d62989680633b9aca00614af0565b610f7791906149ee565b8486610f8a62989680633b9aca00614af0565b610f949190614af0565b610f9e91906149ee565b10156110085760405162461bcd60e51b815260206004820152603360248201527f4d6178205472616e73616374696f6e206d7573742062652061626f766520302e60448201527218929037b3103a37ba30b61039bab838363c9760691b6064820152608401610f50565b6103e861101c62989680633b9aca00614af0565b61102691906149ee565b828461103962989680633b9aca00614af0565b6110439190614af0565b61104d91906149ee565b10156110b25760405162461bcd60e51b815260206004820152602e60248201527f4d61782057616c6c6574206d7573742062652061626f766520302e3125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610f50565b600084866110c762989680633b9aca00614af0565b6110d19190614af0565b6110db91906149ee565b9050600083856110f262989680633b9aca00614af0565b6110fc9190614af0565b61110691906149ee565b604080516060810182528481526020808201849052951515910181905292909355506021919091556022805460ff1916909117905550505050565b6000546001600160a01b0316331461116b5760405162461bcd60e51b8152600401610f5090614894565b606481111561117957600080fd5b60245447906001600160a01b03166108fc60646111968585614af0565b6111a091906149ee565b6040518115909202916000818181858888f193505050501580156111c8573d6000803e3d6000fd5b505050565b60006111da8484846127b3565b5061122d843361122885604051806060016040528060288152602001614c19602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190612d2e565b61268f565b5060015b9392505050565b600061124561dead611c2e565b61125662989680633b9aca00614af0565b610f219190614b32565b6000600e548211156112c75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610f50565b60006112d1612d68565b90506112318382612d8b565b6000546001600160a01b031633146113075760405162461bcd60e51b8152600401610f5090614894565b6001600160a01b0382166000908152600b602052604090205460ff16151581151514156113765760405162461bcd60e51b815260206004820152601760248201527f544f4b454e3a20416c726561647920656e61626c65642e0000000000000000006044820152606401610f50565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113cb5760405162461bcd60e51b8152600401610f5090614894565b6001600160a01b03811660009081526009602052604090205460ff166114335760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610f50565b60005b60255481101561155457816001600160a01b03166025828154811061145d5761145d614bc6565b6000918252602090912001546001600160a01b03161415611542576025805461148890600190614b32565b8154811061149857611498614bc6565b600091825260209091200154602580546001600160a01b0390921691839081106114c4576114c4614bc6565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600990925220805460ff19169055602580548061151c5761151c614bb0565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061154c81614b49565b915050611436565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f049185906112289086612dcd565b60006115a162989680633b9aca00614af0565b8311156115f05760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610f50565b8161160f57600061160084612e2c565b50939550610f08945050505050565b600061161a84612e2c565b50929550610f08945050505050565b6000546001600160a01b031633146116535760405162461bcd60e51b8152600401610f5090614894565b60165460ff8216111561166557600080fd5b60ff166017556015805461ffff191692151561ff0019169290921761010091151591909102179055565b80518251146116d85760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610f50565b60005b82518160ff1610156111c857818160ff16815181106116fc576116fc614bc6565b602002602001015161170e6109243390565b101561171957600080fd5b61177433848360ff168151811061173257611732614bc6565b60200260200101516009600a6117489190614a45565b858560ff168151811061175d5761175d614bc6565b602002602001015161176f9190614af0565b612e7b565b508061177f81614b64565b9150506116db565b6000546001600160a01b031633146117b15760405162461bcd60e51b8152600401610f5090614894565b601b54610100900460ff166118aa5760405180608001604052808561ffff1681526020018461ffff1681526020018361ffff1681526020018385876117f6919061498f565b611800919061498f565b61ffff9081169091528151601180546020850151604086015160609096015193851663ffffffff199092169190911762010000918516919091021767ffffffff000000001916600160201b9484169490940261ffff60301b191693909317600160301b9190921602179055611876838386611b1a565b61188183838661257b565b6118a561188f600a856149cd565b61189a600a856149cd565b610a0f600a886149cd565b6119c1565b60115461ffff620100009091048116908416118015906118db575060115461ffff600160201b909104811690831611155b80156118f1575060115461ffff90811690851611155b6118fa57600080fd5b60405180608001604052808561ffff1681526020018461ffff1681526020018361ffff168152602001838587611930919061498f565b61193a919061498f565b61ffff9081169091528151601180546020850151604086015160609096015193851663ffffffff199092169190911762010000918516919091021767ffffffff000000001916600160201b9484169490940261ffff60301b191693909317600160301b919092160217905580156119c1576119b6838386611b1a565b6119c183838661257b565b50505050565b6000546001600160a01b031633146119f15760405162461bcd60e51b8152600401610f5090614894565b6001600160a01b03811660009081526009602052604090205460ff1615611a5a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610f50565b6001600160a01b03811660009081526003602052604090205415611ab4576001600160a01b038116600090815260036020526040902054611a9a90611260565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600960205260408120805460ff191660019081179091556025805491820181559091527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b0319169091179055565b6000546001600160a01b03163314611b445760405162461bcd60e51b8152600401610f5090614894565b60115461ffff62010000909104811690841611801590611b75575060115461ffff600160201b909104811690831611155b611b7e57600080fd5b60405180608001604052808261ffff1681526020018461ffff1681526020018361ffff168152602001828486611bb4919061498f565b611bbe919061498f565b61ffff9081169091528151601280546020850151604086015160609096015193851663ffffffff199092169190911762010000918516919091021767ffffffff000000001916600160201b9484169490940261ffff60301b191693909317600160301b9190921602179055505050565b6001600160a01b03811660009081526009602052604081205460ff1615611c6b57506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610f0890611260565b6000546001600160a01b03163314611cb75760405162461bcd60e51b8152600401610f5090614894565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611d2b5760405162461bcd60e51b8152600401610f5090614894565b60115461ffff62010000909104811690841611801590611d5c575060115461ffff600160201b909104811690831611155b611d6557600080fd5b60405180608001604052808261ffff1681526020018461ffff1681526020018361ffff168152602001828486611d9b919061498f565b611da5919061498f565b61ffff9081169091528151601480546020850151604086015160609096015193851663ffffffff199092169190911762010000918516919091021767ffffffff000000001916600160201b9484169490940261ffff60301b191693909317600160301b9190921602179055505050565b6000546001600160a01b03163314611e3f5760405162461bcd60e51b8152600401610f5090614894565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611e945760405162461bcd60e51b8152600401610f5090614894565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ee95760405162461bcd60e51b8152600401610f5090614894565b60058160ff161115611efa57600080fd5b601b5460ff1615611f0a57600080fd5b601b805460ff1916831515179055611f218261204a565b611f2d8283601e611629565b611f3a60016103e8612398565b611f4c60056103e86001606486610f26565b611f5782600a612348565b601b54610100900460ff1661155457611f766101f4806101f485611787565b601b805460ff92909216601a55426018554360195562ffff001990911661010092151592830262ff00001916176201000092909202919091179055565b6000546001600160a01b03163314611fdd5760405162461bcd60e51b8152600401610f5090614894565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146120325760405162461bcd60e51b8152600401610f5090614894565b600061203d30611c2e565b90506111c83083836127b3565b6000546001600160a01b031633146120745760405162461bcd60e51b8152600401610f5090614894565b6010805460ff19168215159081179091556040519081527f98b34ab297c11cc48e456cc816801e434b47485532f1101c314921260beab76c9060200160405180910390a150565b6000610f04338461122885604051806060016040528060258152602001614c41602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190612d2e565b600061122d3384846127b3565b61212862989680633b9aca00614af0565b81565b6000546001600160a01b031633146121555760405162461bcd60e51b8152600401610f5090614894565b601f8054911515620100000262ff000019909216919091179055565b600080546001600160a01b0316331461219c5760405162461bcd60e51b8152600401610f5090614894565b6001600160a01b0383166121af57600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b1580156121f157600080fd5b505afa158015612205573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122299190614721565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561227757600080fd5b505af115801561228b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122af91906145df565b949350505050565b6000546001600160a01b031633146122e15760405162461bcd60e51b8152600401610f5090614894565b60005b82518110156111c857816006600085848151811061230457612304614bc6565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061234081614b49565b9150506122e4565b6000546001600160a01b031633146123725760405162461bcd60e51b8152600401610f5090614894565b601f805461ffff19166101009315159390930260ff19169290921760ff91909116179055565b6000546001600160a01b031633146123c25760405162461bcd60e51b8152600401610f5090614894565b80826123d562989680633b9aca00614af0565b6123df9190614af0565b6123e991906149ee565b601d555050565b6000546001600160a01b0316331461241a5760405162461bcd60e51b8152600401610f5090614894565b602480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146124665760405162461bcd60e51b8152600401610f5090614894565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146124bb5760405162461bcd60e51b8152600401610f5090614894565b6001600160a01b0381166125205760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f50565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125a55760405162461bcd60e51b8152600401610f5090614894565b60115461ffff620100009091048116908416118015906125d6575060115461ffff600160201b909104811690831611155b6125df57600080fd5b60405180608001604052808261ffff1681526020018461ffff1681526020018361ffff168152602001828486612615919061498f565b61261f919061498f565b61ffff9081169091528151601380546020850151604086015160609096015193851663ffffffff199092169190911762010000918516919091021767ffffffff000000001916600160201b9484169490940261ffff60301b191693909317600160301b9190921602179055505050565b6001600160a01b0383166126f15760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f50565b6001600160a01b0382166127525760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f50565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166128195760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f50565b6001600160a01b03831661287b5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610f50565b6001600160a01b03841660009081526006602052604090205460ff16156128b45760405162461bcd60e51b8152600401610f5090614851565b6001600160a01b03831660009081526006602052604090205460ff16156128ed5760405162461bcd60e51b8152600401610f5090614851565b600082116129565760405162461bcd60e51b815260206004820152603060248201527f42455032303a205472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b6064820152608401610f50565b601f546301000000900460ff161561297a576129738484846130b2565b9050611231565b6000546001600160a01b038581169116148015906129a657506000546001600160a01b03848116911614155b15612d2357601b5460ff166129fd576001600160a01b0384166000908152600b602052604090205460ff16806129f457506001600160a01b0383166000908152600b602052604090205460ff165b6129fd57600080fd5b612a078484613183565b15612c6157601b5460ff168015612a255750601b54610100900460ff165b8015612a33575060225460ff165b15612c61576001600160a01b0383166000908152600a602052604090205460ff16612ada576020548211801590612a7f575060215482612a7285611c2e565b612a7c91906149b5565b11155b612ada5760405162461bcd60e51b815260206004820152602660248201527f544f4b454e3a20416d6f756e742065786365656473205472616e73616374696f6044820152656e2073697a6560d01b6064820152608401610f50565b6001600160a01b03841660009081526007602052604090205460ff168015612b3457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316836001600160a01b031614155b8015612b5957506001600160a01b03831660009081526008602052604090205460ff16155b8015612b67575060155460ff165b15612bbb576001600160a01b0383166000908152600260205260409020544211612b9057600080fd5b601754612b9d90426149b5565b6001600160a01b038416600090815260026020526040902055612c61565b6001600160a01b03841660009081526007602052604090205460ff16158015612bfd57506001600160a01b03841660009081526008602052604090205460ff16155b8015612c105750601554610100900460ff165b15612c61576001600160a01b038416600090815260026020526040902054421015612c3a57600080fd5b601754612c4790426149b5565b6001600160a01b0385166000908152600260205260409020555b601f54610100900460ff168015612c825750601f546301000000900460ff16155b8015612c985750601d54612c9530611c2e565b10155b8015612cbc57506001600160a01b03831660009081526007602052604090205460ff165b15612d2357601d54601c5410801590612ce75750601f54601e54612ce39160ff16906149b5565b4210155b15612cfd57612cf4613254565b42601e55612d23565b601f54601e54612d109160ff16906149b5565b4210612d2357612d1e6132f3565b42601e555b6122af848484612e7b565b60008184841115612d525760405162461bcd60e51b8152600401610f5091906147fc565b506000612d5f8486614b32565b95945050505050565b6000806000612d75613390565b9092509050612d848282612d8b565b9250505090565b600061123183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061354e565b600080612dda83856149b5565b9050838110156112315760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610f50565b6000806000806000806000806000612e438a61357c565b9250925092506000806000612e618d8686612e5c612d68565b6135f5565b919f909e50909c50959a5093985091965092945050505050565b601b54600090610100900460ff1615612f9557612e988484613645565b601b5462010000900460ff1615612f9557601a546019544391612eba916149b5565b11612ed057612ed0601b805462ff000019169055565b6001600160a01b03841660009081526007602052604090205460ff168015612f2a57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316836001600160a01b031614155b8015612f4f57506001600160a01b03831660009081526008602052604090205460ff16155b15612f9557601a54601954612f6491906149b5565b4311612f95576001600160a01b03831660009081526007602052604090205460ff16612f9557612f9583600161394f565b601b5460ff16612fb057612faa8484846130b2565b5061122d565b6001600160a01b03841660009081526009602052604090205460ff168015612ff157506001600160a01b03831660009081526009602052604090205460ff16155b1561300657613001848484613a3b565b61122d565b6001600160a01b03841660009081526009602052604090205460ff1615801561304757506001600160a01b03831660009081526009602052604090205460ff165b1561305757613001848484613c98565b6001600160a01b03841660009081526009602052604090205460ff16801561309757506001600160a01b03831660009081526009602052604090205460ff165b156130a757613001848484613d41565b61122d848484613db4565b6000806130c76130c0612d68565b8490613df8565b6001600160a01b0386166000908152600360205260409020549091506130ed9082613e77565b6001600160a01b03808716600090815260036020526040808220939093559086168152205461311c9082612dcd565b6001600160a01b0380861660008181526003602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906131709087815260200190565b60405180910390a3506001949350505050565b600080546001600160a01b038481169116148015906131b057506000546001600160a01b03838116911614155b80156131c757506000546001600160a01b03163214155b80156131ec57506001600160a01b0383166000908152600c602052604090205460ff16155b801561321157506001600160a01b0382166000908152600c602052604090205460ff16155b801561322857506001600160a01b03821661dead14155b801561323c57506001600160a01b03821615155b8015611231575050506001600160a01b031630141590565b601f805463ff00000019166301000000179055601d54600090613279906002906149ee565b905061328481613eb9565b4761328f8282614088565b60408051828152602081018490527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a1601d54601c80546000906132dd908490614b32565b9091555050601f805463ff000000191690555050565b601f805463ff00000019166301000000179055601d5461331290613eb9565b60245460405147916001600160a01b03169082156108fc029083906000818181858888f1935050505015801561334c573d6000803e3d6000fd5b506040518181527f381c830610fe960b400618dbe552986a3f0213eda41b5daf350d2a36f9f99e809060200160405180910390a150601f805463ff00000019169055565b600e546000908190816133aa62989680633b9aca00614af0565b905060005b602554811015613502578260036000602584815481106133d1576133d1614bc6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061343c575081600460006025848154811061341557613415614bc6565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561346057600e5461345562989680633b9aca00614af0565b945094505050509091565b6134a6600360006025848154811061347a5761347a614bc6565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490613e77565b92506134ee60046000602584815481106134c2576134c2614bc6565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390613e77565b9150806134fa81614b49565b9150506133af565b5061352061351762989680633b9aca00614af0565b600e5490612d8b565b82101561354557600e5461353b62989680633b9aca00614af0565b9350935050509091565b90939092509050565b6000818361356f5760405162461bcd60e51b8152600401610f5091906147fc565b506000612d5f84866149ee565b600d54600090819081908190612710906135a09062010000900461ffff1687614af0565b6135aa91906149ee565b600d54909150600090612710906135c59061ffff1688614af0565b6135cf91906149ee565b905060006135e7826135e18986613e77565b90613e77565b979296509094509092505050565b60008080806136048886613df8565b905060006136128887613df8565b905060006136208888613df8565b90506000613632826135e18686613e77565b939b939a50919850919650505050505050565b60105460ff16156138c7576001600160a01b03811660009081526007602052604090205460ff1615613716576013546136919061ffff620100008204811691600160201b90041661498f565b600d5461ffff9081169116146136d8576013546136c19061ffff620100008204811691600160201b90041661498f565b600d805461ffff191661ffff929092169190911790555b601354600d5462010000900461ffff90811691161461371157601354600d805463ffff0000191661ffff90921662010000029190911790555b61387b565b6001600160a01b03821660009081526007602052604090205460ff16156137db576012546137579061ffff620100008204811691600160201b90041661498f565b600d5461ffff90811691161461379e576012546137879061ffff620100008204811691600160201b90041661498f565b600d805461ffff191661ffff929092169190911790555b601254600d5462010000900461ffff90811691161461371157601254600d805463ffff0000191661ffff909216620100000291909117905561387b565b6014546137fb9061ffff620100008204811691600160201b90041661498f565b600d5461ffff9081169116146138425760145461382b9061ffff620100008204811691600160201b90041661498f565b600d805461ffff191661ffff929092169190911790555b601454600d5462010000900461ffff90811691161461387b57601454600d805463ffff0000191661ffff90921662010000029190911790555b601a5460195461388b91906149b5565b43116138c757600d80546101f491906000906138ac90849061ffff1661498f565b92506101000a81548161ffff021916908361ffff1602179055505b6001600160a01b03821660009081526008602052604090205460ff168061390657506001600160a01b03811660009081526008602052604090205460ff165b80613914575060105460ff16155b1561155457600d5461ffff16158015906139395750600d5462010000900461ffff1615155b1561155457600d805463ffffffff191690555050565b6001600160a01b03821660009081526007602052604090205460ff168061397e57506001600160a01b03821630145b806139ba57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b0316145b806139dd57506001600160a01b03821660009081526008602052604090205460ff165b156139e757600080fd5b60018115151415613a19576001600160a01b0382166000908152600660205260409020805460ff191660011790555050565b506001600160a01b03166000908152600660205260409020805460ff19169055565b600080600080600080613a4d87612e2c565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613a7f9088613e77565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054613aae9087613e77565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054613add9086612dcd565b6001600160a01b038916600090815260036020526040902055601f5462010000900460ff16613c2d57613b0f8161419d565b60145460135460125460009261ffff90811692613b3092908216911661498f565b613b3a919061498f565b60145460135460125492935061ffff6201000092839004811693613b67939283900482169290041661498f565b613b71919061498f565b60145460135460125461ffff938416938593600160301b90819004821693613ba393908290048316929190041661498f565b613bad919061498f565b613bb79190614b0f565b60145460135460125461ffff938416936201000093849004811693613be393819004821692041661498f565b613bed919061498f565b613bfb9061ffff1685614af0565b613c0591906149ee565b613c0f91906149b5565b601c8054600090613c219084906149b5565b90915550613c36915050565b613c3681614225565b613c4084836142e4565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613c8591815260200190565b60405180910390a3505050505050505050565b600080600080600080613caa87612e2c565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150613cdc9087613e77565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054613d129084612dcd565b6001600160a01b038916600090815260046020908152604080832093909355600390522054613add9086612dcd565b600080600080600080613d5387612e2c565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613d859088613e77565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054613cdc9087613e77565b600080600080600080613dc687612e2c565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150613aae9087613e77565b600082613e0757506000610f08565b6000613e138385614af0565b905082613e2085836149ee565b146112315760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610f50565b600061123183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d2e565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613eee57613eee614bc6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613f6757600080fd5b505afa158015613f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f9f91906143c8565b81600181518110613fb257613fb2614bc6565b60200260200101906001600160a01b031690816001600160a01b031681525050613ffd307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461268f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906140529085906000908690309042906004016148c9565b600060405180830381600087803b15801561406c57600080fd5b505af1158015614080573d6000803e3d6000fd5b505050505050565b6140b3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461268f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230856000806140fa6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561415d57600080fd5b505af1158015614171573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141969190614781565b5050505050565b60006141a7612d68565b905060006141b58383613df8565b306000908152600360205260409020549091506141d29082612dcd565b3060009081526003602090815260408083209390935560099052205460ff16156111c857306000908152600460205260409020546142109084612dcd565b30600090815260046020526040902055505050565b600061422f612d68565b9050600061423d8383613df8565b6024546001600160a01b03166000908152600360205260409020549091506142659082612dcd565b602480546001600160a01b03908116600090815260036020908152604080832095909555925490911681526009909152205460ff16156111c8576024546001600160a01b03166000908152600460205260409020546142c49084612dcd565b6024546001600160a01b0316600090815260046020526040902055505050565b600e546142f19083613e77565b600e55600f546143019082612dcd565b600f555050565b600082601f83011261431957600080fd5b8135602061432e6143298361496b565b61493a565b80838252828201915082860187848660051b890101111561434e57600080fd5b60005b8581101561437657813561436481614bf2565b84529284019290840190600101614351565b5090979650505050505050565b803561ffff8116811461439557600080fd5b919050565b803560ff8116811461439557600080fd5b6000602082840312156143bd57600080fd5b813561123181614bf2565b6000602082840312156143da57600080fd5b815161123181614bf2565b600080604083850312156143f857600080fd5b823561440381614bf2565b9150602083013561441381614bf2565b809150509250929050565b60008060006060848603121561443357600080fd5b833561443e81614bf2565b9250602084013561444e81614bf2565b929592945050506040919091013590565b6000806040838503121561447257600080fd5b823561447d81614bf2565b9150602083013561441381614c0a565b600080604083850312156144a057600080fd5b82356144ab81614bf2565b946020939093013593505050565b600080604083850312156144cc57600080fd5b823567ffffffffffffffff808211156144e457600080fd5b6144f086838701614308565b935060209150818501358181111561450757600080fd5b85019050601f8101861361451a57600080fd5b80356145286143298261496b565b80828252848201915084840189868560051b870101111561454857600080fd5b600094505b8385101561456b57803583526001949094019391850191850161454d565b5080955050505050509250929050565b6000806040838503121561458e57600080fd5b823567ffffffffffffffff8111156145a557600080fd5b6145b185828601614308565b925050602083013561441381614c0a565b6000602082840312156145d457600080fd5b813561123181614c0a565b6000602082840312156145f157600080fd5b815161123181614c0a565b60008060006060848603121561461157600080fd5b833561461c81614c0a565b9250602084013561462c81614c0a565b915061463a6040850161439a565b90509250925092565b6000806040838503121561465657600080fd5b823561466181614c0a565b915061466f6020840161439a565b90509250929050565b60008060006060848603121561468d57600080fd5b61469684614383565b92506146a460208501614383565b915061463a60408501614383565b600080600080608085870312156146c857600080fd5b6146d185614383565b93506146df60208601614383565b92506146ed60408601614383565b915060608501356146fd81614c0a565b939692955090935050565b60006020828403121561471a57600080fd5b5035919050565b60006020828403121561473357600080fd5b5051919050565b6000806040838503121561474d57600080fd5b82359150602083013561441381614c0a565b6000806040838503121561477257600080fd5b50508035926020909101359150565b60008060006060848603121561479657600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a086880312156147c757600080fd5b8535945060208601359350604086013592506060860135915060808601356147ee81614c0a565b809150509295509295909350565b600060208083528351808285015260005b818110156148295785810183015185820160400152820161480d565b8181111561483b576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460408201526265642160e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156149195784516001600160a01b0316835293830193918301916001016148f4565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561496357614963614bdc565b604052919050565b600067ffffffffffffffff82111561498557614985614bdc565b5060051b60200190565b600061ffff8083168185168083038211156149ac576149ac614b84565b01949350505050565b600082198211156149c8576149c8614b84565b500190565b600061ffff808416806149e2576149e2614b9a565b92169190910492915050565b6000826149fd576149fd614b9a565b500490565b600181815b80851115614a3d578160001904821115614a2357614a23614b84565b80851615614a3057918102915b93841c9390800290614a07565b509250929050565b600061123160ff841683600082614a5e57506001610f08565b81614a6b57506000610f08565b8160018114614a815760028114614a8b57614aa7565b6001915050610f08565b60ff841115614a9c57614a9c614b84565b50506001821b610f08565b5060208310610133831016604e8410600b8410161715614aca575081810a610f08565b614ad48383614a02565b8060001904821115614ae857614ae8614b84565b029392505050565b6000816000190483118215151615614b0a57614b0a614b84565b500290565b600061ffff83811690831681811015614b2a57614b2a614b84565b039392505050565b600082821015614b4457614b44614b84565b500390565b6000600019821415614b5d57614b5d614b84565b5060010190565b600060ff821660ff811415614b7b57614b7b614b84565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114614c0757600080fd5b50565b8015158114614c0757600080fdfe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122082a4e7a644e56a076807387c6d33ac16b5657a6c713ad8cd24dd57dba33ad01f64736f6c63430008070033

Deployed Bytecode Sourcemap

19162:31996:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21348:25;;;;;;;;;;-1:-1:-1;21348:25:0;;;;;;;;;;;;;;;-1:-1:-1;;;21348:25:0;;;;;-1:-1:-1;;;21348:25:0;;;;;;;;;19470:6:1;19503:15;;;19485:34;;19555:15;;;19550:2;19535:18;;19528:43;19607:15;;;19587:18;;;19580:43;;;;19659:15;;;19654:2;19639:18;;19632:43;19447:3;19432:19;21348:25:0;;;;;;;;21412:21;;;;;;;;;;-1:-1:-1;21412:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21709:25:1;;;21765:2;21750:18;;21743:34;;;;21793:18;;;21786:34;;;;21863:14;21856:22;21851:2;21836:18;;21829:50;21923:14;21916:22;21910:3;21895:19;;21888:51;21983:14;21976:22;21970:3;21955:19;;21948:51;21696:3;21681:19;21412:21:0;21440:565:1;23261:83:0;;;;;;;;;;-1:-1:-1;23331:5:0;;;;;;;;;;;;-1:-1:-1;;;23331:5:0;;;;23261:83;;;;;;;:::i;24174:161::-;;;;;;;;;;-1:-1:-1;24174:161:0;;;;;:::i;:::-;;:::i;:::-;;;10376:14:1;;10369:22;10351:41;;10339:2;10324:18;24174:161:0;10211:187:1;19660:44:0;;;;;;;;;;-1:-1:-1;19660:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19334:43;;;;;;;;;;-1:-1:-1;19334:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;19832:25:1;;;19820:2;19805:18;19334:43:0;19686:177:1;25514:87:0;;;;;;;;;;-1:-1:-1;25583:10:0;;25514:87;;23539:95;;;;;;;;;;;;;:::i;44376:636::-;;;;;;;;;;-1:-1:-1;44376:636:0;;;;;:::i;:::-;;:::i;:::-;;46512:281;;;;;;;;;;-1:-1:-1;46512:281:0;;;;;:::i;:::-;;:::i;24688:315::-;;;;;;;;;;-1:-1:-1;24688:315:0;;;;;:::i;:::-;;:::i;21490:47::-;;;;;;;;;;-1:-1:-1;21490:47:0;;;;;;;;;;;;;;;;;;21302:25:1;;;21358:2;21343:18;;21336:34;;;;21413:14;21406:22;21386:18;;;21379:50;21290:2;21275:18;21490:47:0;21106:329:1;29957:124:0;;;;;;;;;;;;;:::i;26451:253::-;;;;;;;;;;-1:-1:-1;26451:253:0;;;;;:::i;:::-;;:::i;46278:198::-;;;;;;;;;;-1:-1:-1;46278:198:0;;;;;:::i;:::-;;:::i;23448:83::-;;;;;;;;;;-1:-1:-1;19900:1:0;23448:83;;;22831:4:1;22819:17;;;22801:36;;22789:2;22774:18;23448:83:0;22659:184:1;19866:35:0;;;;;;;;;;;;19900:1;19866:35;;27053:475;;;;;;;;;;-1:-1:-1;27053:475:0;;;;;:::i;:::-;;:::i;25011:218::-;;;;;;;;;;-1:-1:-1;25011:218:0;;;;;:::i;:::-;;:::i;19384:43::-;;;;;;;;;;-1:-1:-1;19384:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;20047:51;;;;;;;;;;;;20088:10;20047:51;;21593:21;;;;;;;;;;-1:-1:-1;21593:21:0;;;;-1:-1:-1;;;;;21593:21:0;;;;;;-1:-1:-1;;;;;9052:32:1;;;9034:51;;9022:2;9007:18;21593:21:0;8888:203:1;26007:436:0;;;;;;;;;;-1:-1:-1;26007:436:0;;;;;:::i;:::-;;:::i;45178:271::-;;;;;;;;;;-1:-1:-1;45178:271:0;;;;;:::i;:::-;;:::i;45867:384::-;;;;;;;;;;-1:-1:-1;45867:384:0;;;;;:::i;:::-;;:::i;49934:1221::-;;;;;;;;;;-1:-1:-1;49934:1221:0;;;;;:::i;:::-;;:::i;19767:43::-;;;;;;;;;;-1:-1:-1;19767:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26712:333;;;;;;;;;;-1:-1:-1;26712:333:0;;;;;:::i;:::-;;:::i;19950:41::-;;;;;;;;;;;;19986:5;19950:41;;;;;19218:6:1;19206:19;;;19188:38;;19176:2;19161:18;19950:41:0;19044:188:1;19711:49:0;;;;;;;;;;-1:-1:-1;19711:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;48627:420;;;;;;;;;;-1:-1:-1;48627:420:0;;;;;:::i;:::-;;:::i;23642:198::-;;;;;;;;;;-1:-1:-1;23642:198:0;;;;;:::i;:::-;;:::i;10739:148::-;;;;;;;;;;;;;:::i;21266:20::-;;;;;;;;;;-1:-1:-1;21266:20:0;;;;;;;;;;;;;;;-1:-1:-1;;;21266:20:0;;;;;-1:-1:-1;;;21266:20:0;;;;;21621:38;;;;;;;;;;-1:-1:-1;21621:38:0;;;;-1:-1:-1;;;;;21621:38:0;;;19602:51;;;;;;;;;;-1:-1:-1;19602:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19282:45;;;;;;;;;;-1:-1:-1;19282:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;49486:430;;;;;;;;;;-1:-1:-1;49486:430:0;;;;;:::i;:::-;;:::i;19502:45::-;;;;;;;;;;-1:-1:-1;19502:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;48131:109;;;;;;;;;;-1:-1:-1;48131:109:0;;;;;:::i;:::-;;:::i;47980:116::-;;;;;;;;;;-1:-1:-1;47980:116:0;;;;;:::i;:::-;;:::i;41630:771::-;;;;;;;;;;-1:-1:-1;41630:771:0;;;;;:::i;:::-;;:::i;10096:79::-;;;;;;;;;;-1:-1:-1;10134:7:0;10161:6;-1:-1:-1;;;;;10161:6:0;10096:79;;45020:126;;;;;;;;;;-1:-1:-1;45020:126:0;;;;;:::i;:::-;;:::i;23352:88::-;;;;;;;;;;-1:-1:-1;23425:7:0;;;;;;;;;;;;-1:-1:-1;;;23425:7:0;;;;23352:88;;46801:167;;;;;;;;;;-1:-1:-1;46801:167:0;;;;;:::i;:::-;;:::i;48485:134::-;;;;;;;;;;-1:-1:-1;48485:134:0;;;;;:::i;:::-;;:::i;25237:269::-;;;;;;;;;;-1:-1:-1;25237:269:0;;;;;:::i;:::-;;:::i;20360:23::-;;;;;;;;;;-1:-1:-1;20360:23:0;;;;;;;;19817:42;;;;;;;;;;-1:-1:-1;19817:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23848:167;;;;;;;;;;-1:-1:-1;23848:167:0;;;;;:::i;:::-;;:::i;20105:56::-;;;;;;;;;;;;;:::i;21380:25::-;;;;;;;;;;-1:-1:-1;21380:25:0;;;;;;;;;;;;;;;;;;;;;;;;;10647:14:1;;10640:22;10622:41;;10706:14;;10699:22;10694:2;10679:18;;10672:50;10738:18;;;10731:34;10796:2;10781:18;;10774:34;10609:3;10594:19;21380:25:0;10403:411:1;21440:43:0;;;;;;;;;;-1:-1:-1;21440:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22303:25:1;;;22359:2;22344:18;;22337:34;;;;22387:18;;;22380:34;;;;22462:4;22450:17;;;22445:2;22430:18;;22423:45;22512:14;22505:22;22499:3;22484:19;;22477:51;22572:14;22565:22;22559:3;22544:19;;22537:51;22632:14;22625:22;22619:3;22604:19;;22597:51;22290:3;22275:19;21440:43:0;22010:644:1;45730:112:0;;;;;;;;;;-1:-1:-1;45730:112:0;;;;;:::i;:::-;;:::i;46976:285::-;;;;;;;;;;-1:-1:-1;46976:285:0;;;;;:::i;:::-;;:::i;47287:194::-;;;;;;;;;;-1:-1:-1;47287:194:0;;;;;:::i;:::-;;:::i;45489:195::-;;;;;;;;;;-1:-1:-1;45489:195:0;;;;;:::i;:::-;;:::i;21293:20::-;;;;;;;;;;-1:-1:-1;21293:20:0;;;;;;;;;;;;;;;-1:-1:-1;;;21293:20:0;;;;;-1:-1:-1;;;21293:20:0;;;;;48293:163;;;;;;;;;;-1:-1:-1;48293:163:0;;;;;:::i;:::-;;:::i;24023:143::-;;;;;;;;;;-1:-1:-1;24023:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;24131:18:0;;;24104:7;24131:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;24023:143;27747:100;;;;;;;;;;-1:-1:-1;27747:100:0;;;;;:::i;:::-;;:::i;27577:128::-;;;;;;;;;;-1:-1:-1;27577:128:0;;;;;:::i;:::-;;:::i;19554:41::-;;;;;;;;;;-1:-1:-1;19554:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21320:21;;;;;;;;;;-1:-1:-1;21320:21:0;;;;;;;;;;;;;;;-1:-1:-1;;;21320:21:0;;;;;-1:-1:-1;;;21320:21:0;;;;;11042:244;;;;;;;;;;-1:-1:-1;11042:244:0;;;;;:::i;:::-;;:::i;21544:42::-;;;;;;;;;;;;;;;49055:423;;;;;;;;;;-1:-1:-1;49055:423:0;;;;;:::i;:::-;;:::i;24174:161::-;24249:4;24266:39;6242:10;24289:7;24298:6;24266:8;:39::i;:::-;-1:-1:-1;24323:4:0;24174:161;;;;;:::o;23539:95::-;23592:7;20139:22;20088:10;20156:5;20139:22;:::i;:::-;23612:14;;23539:95;:::o;44376:636::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;;;;;;;;;44534:4:::1;20139:22;20088:10;20156:5;20139:22;:::i;:::-;44524:14;;;;:::i;:::-;44517:3:::0;44510;20139:22:::1;20088:10;20156:5;20139:22;:::i;:::-;44500:13;;;;:::i;:::-;44499:21;;;;:::i;:::-;:39;;44491:103;;;::::0;-1:-1:-1;;;44491:103:0;;18423:2:1;44491:103:0::1;::::0;::::1;18405:21:1::0;18462:2;18442:18;;;18435:30;18501:34;18481:18;;;18474:62;-1:-1:-1;;;18552:18:1;;;18545:49;18611:19;;44491:103:0::1;18221:415:1::0;44491:103:0::1;44648:4;20139:22;20088:10;20156:5;20139:22;:::i;:::-;44638:14;;;;:::i;:::-;44631:3:::0;44624;20139:22:::1;20088:10;20156:5;20139:22;:::i;:::-;44614:13;;;;:::i;:::-;44613:21;;;;:::i;:::-;:39;;44605:98;;;::::0;-1:-1:-1;;;44605:98:0;;16074:2:1;44605:98:0::1;::::0;::::1;16056:21:1::0;16113:2;16093:18;;;16086:30;16152:34;16132:18;;;16125:62;-1:-1:-1;;;16203:18:1;;;16196:44;16257:19;;44605:98:0::1;15872:410:1::0;44605:98:0::1;44714:19;44754:3:::0;44747;20139:22:::1;20088:10;20156:5;20139:22;:::i;:::-;44737:13;;;;:::i;:::-;44736:21;;;;:::i;:::-;44714:43:::0;-1:-1:-1;44768:26:0::1;44815:3:::0;44808;20139:22:::1;20088:10;20156:5;20139:22;:::i;:::-;44798:13;;;;:::i;:::-;44797:21;;;;:::i;:::-;44851:153;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;::::1;;::::0;;;;;44829:175;;;;-1:-1:-1;44829:175:0;;;;;;;;-1:-1:-1;;44829:175:0::1;::::0;;::::1;::::0;;-1:-1:-1;;;;44376:636:0:o;46512:281::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;46623:3:::1;46603:16;:23;;46595:32;;;::::0;::::1;;46698:15;::::0;46658:21:::1;::::0;-1:-1:-1;;;;;46698:15:0::1;46690:95;46771:3;46739:28;46751:16:::0;46658:21;46739:28:::1;:::i;:::-;46738:36;;;;:::i;:::-;46690:95;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;46584:209;46512:281:::0;:::o;24688:315::-;24786:4;24803:36;24813:6;24821:9;24832:6;24803:9;:36::i;:::-;-1:-1:-1;24850:121:0;24859:6;6242:10;24881:89;24919:6;24881:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24881:19:0;;;;;;:11;:19;;;;;;;;6242:10;24881:33;;;;;;;;;;:37;:89::i;:::-;24850:8;:121::i;:::-;-1:-1:-1;24991:4:0;24688:315;;;;;;:::o;29957:124::-;30011:7;30047:26;30065:6;30047:9;:26::i;:::-;20139:22;20088:10;20156:5;20139:22;:::i;:::-;30037:36;;;;:::i;26451:253::-;26517:7;26556;;26545;:18;;26537:73;;;;-1:-1:-1;;;26537:73:0;;12669:2:1;26537:73:0;;;12651:21:1;12708:2;12688:18;;;12681:30;12747:34;12727:18;;;12720:62;-1:-1:-1;;;12798:18:1;;;12791:40;12848:19;;26537:73:0;12467:406:1;26537:73:0;26621:19;26644:10;:8;:10::i;:::-;26621:33;-1:-1:-1;26672:24:0;:7;26621:33;26672:11;:24::i;46278:198::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46370:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;:30;;::::0;::::1;;;;46362:66;;;::::0;-1:-1:-1;;;46362:66:0;;14603:2:1;46362:66:0::1;::::0;::::1;14585:21:1::0;14642:2;14622:18;;;14615:30;14681:25;14661:18;;;14654:53;14724:18;;46362:66:0::1;14401:347:1::0;46362:66:0::1;-1:-1:-1::0;;;;;46439:19:0;;;::::1;;::::0;;;:10:::1;:19;::::0;;;;:29;;-1:-1:-1;;46439:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46278:198::o;27053:475::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27135:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27127:56;;;::::0;-1:-1:-1;;;27127:56:0;;15362:2:1;27127:56:0::1;::::0;::::1;15344:21:1::0;15401:2;15381:18;;;15374:30;15440:25;15420:18;;;15413:53;15483:18;;27127:56:0::1;15160:347:1::0;27127:56:0::1;27199:9;27194:327;27218:9;:16:::0;27214:20;::::1;27194:327;;;27276:7;-1:-1:-1::0;;;;;27260:23:0::1;:9;27270:1;27260:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27260:12:0::1;:23;27256:254;;;27319:9;27329:16:::0;;:20:::1;::::0;27348:1:::1;::::0;27329:20:::1;:::i;:::-;27319:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;27304:9:::1;:12:::0;;-1:-1:-1;;;;;27319:31:0;;::::1;::::0;27314:1;;27304:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;27304:46:0::1;-1:-1:-1::0;;;;;27304:46:0;;::::1;;::::0;;27369:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;27408:11:::1;:20:::0;;;;:28;;-1:-1:-1;;27408:28:0::1;::::0;;27455:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;27455:15:0;;;;;-1:-1:-1;;;;;;27455:15:0::1;::::0;;;;;27194:327:::1;27053:475:::0;:::o;27256:254::-:1;27236:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27194:327;;;;27053:475:::0;:::o;25011:218::-;6242:10;25099:4;25148:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25148:34:0;;;;;;;;;;25099:4;;25116:83;;25139:7;;25148:50;;25187:10;25148:38;:50::i;26007:436::-;26097:7;20139:22;20088:10;20156:5;20139:22;:::i;:::-;26125:7;:18;;26117:62;;;;-1:-1:-1;;;26117:62:0;;15714:2:1;26117:62:0;;;15696:21:1;15753:2;15733:18;;;15726:30;15792:33;15772:18;;;15765:61;15843:18;;26117:62:0;15512:355:1;26117:62:0;26195:17;26190:246;;26230:15;26254:19;26265:7;26254:10;:19::i;:::-;-1:-1:-1;26229:44:0;;-1:-1:-1;26288:14:0;;-1:-1:-1;;;;;26288:14:0;26190:246;26337:23;26368:19;26379:7;26368:10;:19::i;:::-;-1:-1:-1;26335:52:0;;-1:-1:-1;26402:22:0;;-1:-1:-1;;;;;26402:22:0;45178:271;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;45286:22;;45278:30:::1;::::0;::::1;;;45270:39;;;::::0;::::1;;45320:28;;:21:::0;:28;:8:::1;45359:35:::0;;-1:-1:-1;;45405:36:0;45359:35;::::1;;-1:-1:-1::0;;45405:36:0;;;;;45359:35:::1;45405:36:::0;::::1;;::::0;;;::::1;;::::0;;45178:271::o;45867:384::-;45992:7;:14;45972:9;:16;:34;45964:68;;;;-1:-1:-1;;;45964:68:0;;17669:2:1;45964:68:0;;;17651:21:1;17708:2;17688:18;;;17681:30;-1:-1:-1;;;17727:18:1;;;17720:51;17788:18;;45964:68:0;17467:345:1;45964:68:0;46048:7;46043:201;46065:9;:16;46061:1;:20;;;46043:201;;;46138:7;46146:1;46138:10;;;;;;;;;;:::i;:::-;;;;;;;46111:23;46121:12;6242:10;;6162:98;46111:23;:37;;46103:46;;;;;;46164:68;6242:10;46193:9;46203:1;46193:12;;;;;;;;;;:::i;:::-;;;;;;;19900:1;46218:2;:13;;;;:::i;:::-;46207:7;46215:1;46207:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;46164:14;:68::i;:::-;-1:-1:-1;46083:3:0;;;;:::i;:::-;;;;46043:201;;49934:1221;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;50061:15;;::::1;::::0;::::1;;;50057:1091;;50102:216;;;;;;;;50135:7;50102:216;;;;;;50175:13;50102:216;;;;;;50221:13;50102:216;;;;;;50289:13;50273;50263:7;:23;;;;:::i;:::-;:39;;;;:::i;:::-;50102:216;::::0;;::::1;::::0;;;50092:226;;:7:::1;:226:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;50092:226:0;;;;;;;;;;::::1;::::0;;;::::1;;-1:-1:-1::0;;50092:226:0;-1:-1:-1;;;50092:226:0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;50092:226:0;;;;;-1:-1:-1;;;50092:226:0;;;::::1;;;::::0;;50333:49:::1;50344:13:::0;50359;50374:7;50333:10:::1;:49::i;:::-;50413:50;50425:13;50440;50455:7;50413:11;:50::i;:::-;50478:74;50494:20;50511:2;50494:13:::0;:20:::1;:::i;:::-;50516:19;50532:2;50516:13:::0;:19:::1;:::i;:::-;50537:14;50548:2;50537:7:::0;:14:::1;:::i;50478:74::-;50057:1091;;;50608:7;:20:::0;::::1;::::0;;;::::1;::::0;::::1;50591:37:::0;;::::1;;::::0;::::1;::::0;:78:::1;;-1:-1:-1::0;50649:7:0::1;:20:::0;::::1;-1:-1:-1::0;;;50649:20:0;;::::1;::::0;::::1;50632:37:::0;;::::1;;;50591:78;:107;;;;-1:-1:-1::0;50684:7:0::1;:14:::0;::::1;::::0;;::::1;50673:25:::0;;::::1;;;50591:107;50583:116;;;::::0;::::1;;50724:216;;;;;;;;50757:7;50724:216;;;;;;50797:13;50724:216;;;;;;50843:13;50724:216;;;;;;50911:13;50895;50885:7;:23;;;;:::i;:::-;:39;;;;:::i;:::-;50724:216;::::0;;::::1;::::0;;;50714:226;;:7:::1;:226:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;50714:226:0;;;;;;;;;;::::1;::::0;;;::::1;;-1:-1:-1::0;;50714:226:0;-1:-1:-1;;;50714:226:0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;50714:226:0;;;;;-1:-1:-1;;;50714:226:0;;;::::1;;;::::0;;50955:182;::::1;;;50987:49;50998:13;51013;51028:7;50987:10;:49::i;:::-;51071:50;51083:13;51098;51113:7;51071:11;:50::i;:::-;49934:1221:::0;;;;:::o;26712:333::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26795:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26794:21;26786:61;;;::::0;-1:-1:-1;;;26786:61:0;;14247:2:1;26786:61:0::1;::::0;::::1;14229:21:1::0;14286:2;14266:18;;;14259:30;14325:29;14305:18;;;14298:57;14372:18;;26786:61:0::1;14045:351:1::0;26786:61:0::1;-1:-1:-1::0;;;;;26861:16:0;::::1;26880:1;26861:16:::0;;;:7:::1;:16;::::0;;;;;:20;26858:108:::1;;-1:-1:-1::0;;;;;26937:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;26917:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;26898:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;26858:108:::1;-1:-1:-1::0;;;;;26976:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;26976:27:0::1;26999:4;26976:27:::0;;::::1;::::0;;;27014:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;27014:23:0::1;::::0;;::::1;::::0;;26712:333::o;48627:420::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;48760:7:::1;:20:::0;::::1;::::0;;;::::1;::::0;::::1;48743:37:::0;;::::1;;::::0;::::1;::::0;:78:::1;;-1:-1:-1::0;48801:7:0::1;:20:::0;::::1;-1:-1:-1::0;;;48801:20:0;;::::1;::::0;::::1;48784:37:::0;;::::1;;;48743:78;48735:87;;;::::0;::::1;;48843:196;;;;;;;;48956:7;48843:196;;;;;;48878:13;48843:196;;;;;;48920:13;48843:196;;;;;;49020:7;49004:13;48988;:29;;;;:::i;:::-;:39;;;;:::i;:::-;48843:196;::::0;;::::1;::::0;;;48833:206;;:7:::1;:206:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;48833:206:0;;;;;;;;;;::::1;::::0;;;::::1;;-1:-1:-1::0;;48833:206:0;-1:-1:-1;;;48833:206:0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;48833:206:0;;;;;-1:-1:-1;;;48833:206:0;;;::::1;;;::::0;;-1:-1:-1;;;48627:420:0:o;23642:198::-;-1:-1:-1;;;;;23732:20:0;;23708:7;23732:20;;;:11;:20;;;;;;;;23728:49;;;-1:-1:-1;;;;;;23761:16:0;;;;;:7;:16;;;;;;;23642:198::o;23728:49::-;-1:-1:-1;;;;;23815:16:0;;;;;;:7;:16;;;;;;23795:37;;:19;:37::i;10739:148::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;10846:1:::1;10830:6:::0;;10809:40:::1;::::0;-1:-1:-1;;;;;10830:6:0;;::::1;::::0;10809:40:::1;::::0;10846:1;;10809:40:::1;10877:1;10860:19:::0;;-1:-1:-1;;;;;;10860:19:0::1;::::0;;10739:148::o;49486:430::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;49624:7:::1;:20:::0;::::1;::::0;;;::::1;::::0;::::1;49607:37:::0;;::::1;;::::0;::::1;::::0;:78:::1;;-1:-1:-1::0;49665:7:0::1;:20:::0;::::1;-1:-1:-1::0;;;49665:20:0;;::::1;::::0;::::1;49648:37:::0;;::::1;;;49607:78;49599:87;;;::::0;::::1;;49712:196;;;;;;;;49825:7;49712:196;;;;;;49747:13;49712:196;;;;;;49789:13;49712:196;;;;;;49889:7;49873:13;49857;:29;;;;:::i;:::-;:39;;;;:::i;:::-;49712:196;::::0;;::::1;::::0;;;49697:211;;:12:::1;:211:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;49697:211:0;;;;;;;;;;::::1;::::0;;;::::1;;-1:-1:-1::0;;49697:211:0;-1:-1:-1;;;49697:211:0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;49697:211:0;;;;;-1:-1:-1;;;49697:211:0;;;::::1;;;::::0;;-1:-1:-1;;;49486:430:0:o;48131:109::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48208:14:0;;;::::1;;::::0;;;:8:::1;:14;::::0;;;;:24;;-1:-1:-1;;48208:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48131:109::o;47980:116::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48061:17:0;;;::::1;;::::0;;;:9:::1;:17;::::0;;;;:27;;-1:-1:-1;;48061:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;47980:116::o;41630:771::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;41745:1:::1;41729:12;:17;;;;41721:26;;;::::0;::::1;;41767:18:::0;;::::1;;41766:19;41758:28;;;::::0;::::1;;41797:18:::0;:33;;-1:-1:-1;;41797:33:0::1;::::0;::::1;;;::::0;;41841:25:::1;41797:33:::0;41841:11:::1;:25::i;:::-;41877:50;41896:12;41910;41924:2;41877:18;:50::i;:::-;41938:26;41957:1;41959:4;41938:18;:26::i;:::-;41975:40;41989:1;41991:4;41996:1;41998:3;42002:12;41975:13;:40::i;:::-;42026:28;42037:12;42051:2;42026:10;:28::i;:::-;42069:15:::0;;::::1;::::0;::::1;;;42065:329;;42101:36;42111:3;42115::::0;42119::::1;42124:12;42101:9;:36::i;:::-;42152:15:::0;:30;;::::1;42197:32:::0;;;::::1;:17:::0;:32;42264:15:::1;42152:6;42244:35:::0;42316:12:::1;42295:18:::0;:33;-1:-1:-1;;42344:38:0;;;42152:30:::1;::::0;::::1;;::::0;;::::1;-1:-1:-1::0;;42344:38:0;;;;;;::::1;::::0;;;::::1;::::0;;41630:771::o;45020:126::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45103:25:0;;;::::1;;::::0;;;:16:::1;:25;::::0;;;;:35;;-1:-1:-1;;45103:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45020:126::o;46801:167::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;46868:16:::1;46887:24;46905:4;46887:9;:24::i;:::-;46868:43;;46922:38;46940:4;46947:2;46951:8;46922:9;:38::i;48485:134::-:0;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;48549:11:::1;:22:::0;;-1:-1:-1;;48549:22:0::1;::::0;::::1;;::::0;;::::1;::::0;;;48587:24:::1;::::0;10351:41:1;;;48587:24:0::1;::::0;10339:2:1;10324:18;48587:24:0::1;;;;;;;48485:134:::0;:::o;25237:269::-;25330:4;25347:129;6242:10;25370:7;25379:96;25418:15;25379:96;;;;;;;;;;;;;;;;;6242:10;25379:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25379:34:0;;;;;;;;;;;;:38;:96::i;23848:167::-;23926:4;23943:42;6242:10;23967:9;23978:6;23943:9;:42::i;20105:56::-;20139:22;20088:10;20156:5;20139:22;:::i;:::-;20105:56;:::o;45730:112::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;45797:27;:37;;;::::1;;::::0;::::1;-1:-1:-1::0;;45797:37:0;;::::1;::::0;;;::::1;::::0;;45730:112::o;46976:285::-;47059:10;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47090:20:0;::::1;47082:29;;;::::0;::::1;;47149:39;::::0;-1:-1:-1;;;47149:39:0;;47182:4:::1;47149:39;::::0;::::1;9034:51:1::0;47122:24:0::1;::::0;-1:-1:-1;;;;;47149:24:0;::::1;::::0;::::1;::::0;9007:18:1;;47149:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47207:46;::::0;-1:-1:-1;;;47207:46:0;;-1:-1:-1;;;;;9512:32:1;;;47207:46:0::1;::::0;::::1;9494:51:1::0;9561:18;;;9554:34;;;47122:66:0;;-1:-1:-1;47207:23:0;;::::1;::::0;::::1;::::0;9467:18:1;;47207:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47199:54:::0;46976:285;-1:-1:-1;;;;46976:285:0:o;47287:194::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;47377:9:::1;47372:102;47396:5;:12;47392:1;:16;47372:102;;;47455:7;47430:12;:22;47443:5;47449:1;47443:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;47430:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;47430:22:0;:32;;-1:-1:-1;;47430:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;47410:3;::::1;::::0;::::1;:::i;:::-;;;;47372:102;;45489:195:::0;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;45576:29;:44;;-1:-1:-1;;45631:45:0;45576:44:::1;::::0;::::1;;::::0;;;::::1;-1:-1:-1::0;;45631:45:0;;;;;45576:44:::1;45631:45:::0;;;::::1;;::::0;;45489:195::o;48293:163::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;48441:7;48430;20139:22:::1;20088:10;20156:5;20139:22;:::i;:::-;48420:17;;;;:::i;:::-;48419:29;;;;:::i;:::-;48383:33:::0;:65;-1:-1:-1;;48293:163:0:o;27747:100::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;27817:15:::1;:19:::0;;-1:-1:-1;;;;;;27817:19:0::1;-1:-1:-1::0;;;;;27817:19:0;;;::::1;::::0;;;::::1;::::0;;27747:100::o;27577:128::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27660:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:37;;-1:-1:-1;;27660:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27577:128::o;11042:244::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11131:22:0;::::1;11123:73;;;::::0;-1:-1:-1;;;11123:73:0;;13080:2:1;11123:73:0::1;::::0;::::1;13062:21:1::0;13119:2;13099:18;;;13092:30;13158:34;13138:18;;;13131:62;-1:-1:-1;;;13209:18:1;;;13202:36;13255:19;;11123:73:0::1;12878:402:1::0;11123:73:0::1;11233:6;::::0;;11212:38:::1;::::0;-1:-1:-1;;;;;11212:38:0;;::::1;::::0;11233:6;::::1;::::0;11212:38:::1;::::0;::::1;11261:6;:17:::0;;-1:-1:-1;;;;;;11261:17:0::1;-1:-1:-1::0;;;;;11261:17:0;;;::::1;::::0;;;::::1;::::0;;11042:244::o;49055:423::-;10308:6;;-1:-1:-1;;;;;10308:6:0;6242:10;10308:22;10300:67;;;;-1:-1:-1;;;10300:67:0;;;;;;;:::i;:::-;49189:7:::1;:20:::0;::::1;::::0;;;::::1;::::0;::::1;49172:37:::0;;::::1;;::::0;::::1;::::0;:78:::1;;-1:-1:-1::0;49230:7:0::1;:20:::0;::::1;-1:-1:-1::0;;;49230:20:0;;::::1;::::0;::::1;49213:37:::0;;::::1;;;49172:78;49164:87;;;::::0;::::1;;49273:197;;;;;;;;49386:7;49273:197;;;;;;49308:13;49273:197;;;;;;49350:13;49273:197;;;;;;49451:7;49434:13;49418;:29;;;;:::i;:::-;:40;;;;:::i;:::-;49273:197;::::0;;::::1;::::0;;;49262:208;;:8:::1;:208:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;49262:208:0;;;;;;;;;;::::1;::::0;;;::::1;;-1:-1:-1::0;;49262:208:0;-1:-1:-1;;;49262:208:0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;49262:208:0;;;;;-1:-1:-1;;;49262:208:0;;;::::1;;;::::0;;-1:-1:-1;;;49055:423:0:o;24343:337::-;-1:-1:-1;;;;;24436:19:0;;24428:68;;;;-1:-1:-1;;;24428:68:0;;12264:2:1;24428:68:0;;;12246:21:1;12303:2;12283:18;;;12276:30;12342:34;12322:18;;;12315:62;-1:-1:-1;;;12393:18:1;;;12386:34;12437:19;;24428:68:0;12062:400:1;24428:68:0;-1:-1:-1;;;;;24515:21:0;;24507:68;;;;-1:-1:-1;;;24507:68:0;;18843:2:1;24507:68:0;;;18825:21:1;18882:2;18862:18;;;18855:30;18921:34;18901:18;;;18894:62;-1:-1:-1;;;18972:18:1;;;18965:32;19014:19;;24507:68:0;18641:398:1;24507:68:0;-1:-1:-1;;;;;24588:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24640:32;;19832:25:1;;;24640:32:0;;19805:18:1;24640:32:0;;;;;;;24343:337;;;:::o;31184:2668::-;31296:4;-1:-1:-1;;;;;31320:18:0;;31312:68;;;;-1:-1:-1;;;31312:68:0;;11858:2:1;31312:68:0;;;11840:21:1;11897:2;11877:18;;;11870:30;11936:34;11916:18;;;11909:62;-1:-1:-1;;;11987:18:1;;;11980:35;12032:19;;31312:68:0;11656:401:1;31312:68:0;-1:-1:-1;;;;;31399:16:0;;31391:64;;;;-1:-1:-1;;;31391:64:0;;18019:2:1;31391:64:0;;;18001:21:1;18058:2;18038:18;;;18031:30;18097:34;18077:18;;;18070:62;-1:-1:-1;;;18148:18:1;;;18141:33;18191:19;;31391:64:0;17817:399:1;31391:64:0;-1:-1:-1;;;;;31487:18:0;;;;;;:12;:18;;;;;;;;31486:19;31478:67;;;;-1:-1:-1;;;31478:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31565:16:0;;;;;;:12;:16;;;;;;;;31564:17;31556:65;;;;-1:-1:-1;;;31556:65:0;;;;;;;:::i;:::-;31649:1;31640:6;:10;31632:71;;;;-1:-1:-1;;;31632:71:0;;17252:2:1;31632:71:0;;;17234:21:1;17291:2;17271:18;;;17264:30;17330:34;17310:18;;;17303:62;-1:-1:-1;;;17381:18:1;;;17374:46;17437:19;;31632:71:0;17050:412:1;31632:71:0;31717:24;;;;;;;31714:70;;;31751:32;31766:4;31772:2;31776:6;31751:14;:32::i;:::-;31743:41;;;;31714:70;10134:7;10161:6;-1:-1:-1;;;;;31798:15:0;;;10161:6;;31798:15;;;;:32;;-1:-1:-1;10134:7:0;10161:6;-1:-1:-1;;;;;31817:13:0;;;10161:6;;31817:13;;31798:32;31795:1927;;;31850:18;;;;31846:101;;-1:-1:-1;;;;;31896:16:0;;;;;;:10;:16;;;;;;;;;:34;;-1:-1:-1;;;;;;31916:14:0;;;;;;:10;:14;;;;;;;;31896:34;31888:43;;;;;;31965:16;31972:4;31978:2;31965:6;:16::i;:::-;31961:993;;;32005:18;;;;:37;;;;-1:-1:-1;32027:15:0;;;;;;;32005:37;:69;;;;-1:-1:-1;32046:28:0;;;;32005:69;32002:937;;;-1:-1:-1;;;;;32102:20:0;;;;;;:16;:20;;;;;;;;32098:233;;32168:19;:31;32158:41;;;;;:106;;-1:-1:-1;32229:35:0;;32219:6;32203:13;32213:2;32203:9;:13::i;:::-;:22;;;;:::i;:::-;:61;;32158:106;32150:157;;;;-1:-1:-1;;;32150:157:0;;14955:2:1;32150:157:0;;;14937:21:1;14994:2;14974:18;;;14967:30;15033:34;15013:18;;;15006:62;-1:-1:-1;;;15084:18:1;;;15077:36;15130:19;;32150:157:0;14753:402:1;32150:157:0;-1:-1:-1;;;;;32357:14:0;;;;;;:8;:14;;;;;;;;:39;;;;;32389:6;-1:-1:-1;;;;;32375:21:0;:2;-1:-1:-1;;;;;32375:21:0;;;32357:39;:66;;;;-1:-1:-1;;;;;;32401:22:0;;;;;;:18;:22;;;;;;;;32400:23;32357:66;:97;;;;-1:-1:-1;32427:8:0;:27;;;32357:97;32353:546;;;-1:-1:-1;;;;;32491:13:0;;;;;;:9;:13;;;;;;32507:15;-1:-1:-1;32483:40:0;;;;;;32586:21;;32567:41;;:15;:41;:::i;:::-;-1:-1:-1;;;;;32551:13:0;;;;;;:9;:13;;;;;:57;32353:546;;;-1:-1:-1;;;;;32643:14:0;;;;;;:8;:14;;;;;;;;32642:15;:44;;;;-1:-1:-1;;;;;;32662:24:0;;;;;;:18;:24;;;;;;;;32661:25;32642:44;:76;;;;-1:-1:-1;32690:8:0;:28;;;;;;32642:76;32638:261;;;-1:-1:-1;;;;;32754:15:0;;;;;;:9;:15;;;;;;32773;-1:-1:-1;32754:34:0;32746:43;;;;;;32853:21;;32834:41;;:15;:41;:::i;:::-;-1:-1:-1;;;;;32816:15:0;;;;;;:9;:15;;;;;:59;32638:261;32977:29;;;;;;;:58;;;;-1:-1:-1;33011:24:0;;;;;;;33010:25;32977:58;:123;;;;-1:-1:-1;33067:33:0;;33039:24;33057:4;33039:9;:24::i;:::-;:61;;32977:123;:139;;;;-1:-1:-1;;;;;;33104:12:0;;;;;;:8;:12;;;;;;;;32977:139;32974:737;;;33184:33;;:17;33139:41;:78;;;;:160;;-1:-1:-1;33269:30:0;;33240:26;;:59;;33269:30;;;33240:59;:::i;:::-;33221:15;:78;;33139:160;33136:560;;;33323:16;:14;:16::i;:::-;33391:15;33362:26;:44;33136:560;;;33506:30;;33477:26;;:59;;33506:30;;;33477:59;:::i;:::-;33458:15;:78;33455:222;;33564:18;:16;:18::i;:::-;33638:15;33609:26;:44;33455:222;33813:30;33828:4;33833:2;33836:6;33813:14;:30::i;2572:192::-;2658:7;2694:12;2686:6;;;;2678:29;;;;-1:-1:-1;;;2678:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2718:9:0;2730:5;2734:1;2730;:5;:::i;:::-;2718:17;2572:192;-1:-1:-1;;;;;2572:192:0:o;29213:163::-;29254:7;29275:15;29292;29311:19;:17;:19::i;:::-;29274:56;;-1:-1:-1;29274:56:0;-1:-1:-1;29348:20:0;29274:56;;29348:11;:20::i;:::-;29341:27;;;;29213:163;:::o;3970:132::-;4028:7;4055:39;4059:1;4062;4055:39;;;;;;;;;;;;;;;;;:3;:39::i;1669:181::-;1727:7;;1759:5;1763:1;1759;:5;:::i;:::-;1747:17;;1788:1;1783;:6;;1775:46;;;;-1:-1:-1;;;1775:46:0;;13891:2:1;1775:46:0;;;13873:21:1;13930:2;13910:18;;;13903:30;13969:29;13949:18;;;13942:57;14016:18;;1775:46:0;13689:351:1;28051:404:0;28110:7;28119;28128;28137;28146;28155;28176:23;28201:12;28215:13;28232:20;28244:7;28232:11;:20::i;:::-;28175:77;;;;;;28264:15;28281:23;28306:12;28322:45;28334:7;28343:4;28349:5;28356:10;:8;:10::i;:::-;28322:11;:45::i;:::-;28263:104;;;;-1:-1:-1;28263:104:0;;-1:-1:-1;28418:15:0;;-1:-1:-1;28435:4:0;;-1:-1:-1;28441:5:0;;-1:-1:-1;28051:404:0;;-1:-1:-1;;;;;28051:404:0:o;33860:1384::-;33971:15;;33952:4;;33971:15;;;;;33968:632;;;34002:25;34009:6;34017:9;34002:6;:25::i;:::-;34045:23;;;;;;;34042:547;;;34112:17;;34091:18;;34133:12;;34091:38;;;:::i;:::-;:54;34088:111;;34170:9;47912:23;:31;;-1:-1:-1;;47912:31:0;;;47873:78;34170:9;-1:-1:-1;;;;;34221:16:0;;;;;;:8;:16;;;;;;;;:48;;;;;34262:6;-1:-1:-1;;;;;34241:28:0;:9;-1:-1:-1;;;;;34241:28:0;;;34221:48;:82;;;;-1:-1:-1;;;;;;34274:29:0;;;;;;:18;:29;;;;;;;;34273:30;34221:82;34217:357;;;34370:17;;34349:18;;:38;;34370:17;34349:38;:::i;:::-;34332:12;:55;34328:227;;-1:-1:-1;;;;;34420:19:0;;;;;;:8;:19;;;;;;;;34416:116;;34471:33;34488:9;34499:4;34471:16;:33::i;:::-;34653:18;;;;34649:564;;34687:41;34702:6;34710:9;34721:6;34687:14;:41::i;:::-;;34649:564;;;-1:-1:-1;;;;;34750:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;34774:22:0;;;;;;:11;:22;;;;;;;;34773:23;34750:46;34746:467;;;34813:48;34835:6;34843:9;34854:6;34813:21;:48::i;:::-;34746:467;;;-1:-1:-1;;;;;34884:19:0;;;;;;:11;:19;;;;;;;;34883:20;:46;;;;-1:-1:-1;;;;;;34907:22:0;;;;;;:11;:22;;;;;;;;34883:46;34879:334;;;34946:46;34966:6;34974:9;34985:6;34946:19;:46::i;34879:334::-;-1:-1:-1;;;;;35014:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;35037:22:0;;;;;;:11;:22;;;;;;;;35014:45;35010:203;;;35076:48;35098:6;35106:9;35117:6;35076:21;:48::i;35010:203::-;35157:44;35175:6;35183:9;35194:6;35157:17;:44::i;35252:352::-;35345:4;35361:15;35379:23;35391:10;:8;:10::i;:::-;35379:7;;:11;:23::i;:::-;-1:-1:-1;;;;;35431:15:0;;;;;;:7;:15;;;;;;35361:41;;-1:-1:-1;35431:28:0;;35361:41;35431:19;:28::i;:::-;-1:-1:-1;;;;;35413:15:0;;;;;;;:7;:15;;;;;;:46;;;;35491:18;;;;;;;:31;;35514:7;35491:22;:31::i;:::-;-1:-1:-1;;;;;35470:18:0;;;;;;;:7;:18;;;;;;;:52;;;;35538:36;;;;;;;;;;35566:7;19832:25:1;;19820:2;19805:18;;19686:177;35538:36:0;;;;;;;;-1:-1:-1;35592:4:0;;35252:352;-1:-1:-1;;;;35252:352:0:o;30798:351::-;30862:4;10161:6;;-1:-1:-1;;;;;30886:15:0;;;10161:6;;30886:15;;;;:45;;-1:-1:-1;10134:7:0;10161:6;-1:-1:-1;;;;;30918:13:0;;;10161:6;;30918:13;;30886:45;:82;;;;-1:-1:-1;10134:7:0;10161:6;-1:-1:-1;;;;;10161:6:0;30948:9;:20;;30886:82;:115;;;;-1:-1:-1;;;;;;30986:15:0;;;;;;:9;:15;;;;;;;;30985:16;30886:115;:146;;;;-1:-1:-1;;;;;;31019:13:0;;;;;;:9;:13;;;;;;;;31018:14;30886:146;:184;;;;-1:-1:-1;;;;;;31049:21:0;;31063:6;31049:21;;30886:184;:217;;;;-1:-1:-1;;;;;;31087:16:0;;;;30886:217;:255;;;;-1:-1:-1;;;;;;;;31120:21:0;31136:4;31120:21;;;30798:351::o;42452:430::-;22014:24;:31;;-1:-1:-1;;22014:31:0;;;;;42535:33;;22014:31;;42535:37:::1;::::0;42571:1:::1;::::0;42535:37:::1;:::i;:::-;42509:63;;42583:27;42594:15;42583:10;:27::i;:::-;42643:21;42675:42;42688:15:::0;42643:21;42675:12:::1;:42::i;:::-;42733:44;::::0;;21027:25:1;;;21083:2;21068:18;;21061:34;;;42733:44:0::1;::::0;21000:18:1;42733:44:0::1;;;;;;;42833:33:::0;;:17:::1;42788:78:::0;;:41:::1;::::0;:78:::1;::::0;42833:33;;42788:78:::1;:::i;:::-;::::0;;;-1:-1:-1;;22068:24:0;:32;;-1:-1:-1;;22068:32:0;;;-1:-1:-1;;42452:430:0:o;42933:258::-;22014:24;:31;;-1:-1:-1;;22014:31:0;;;;;43003:33;;42992:45:::1;::::0;:10:::1;:45::i;:::-;43102:15;::::0;:37:::1;::::0;43070:21:::1;::::0;-1:-1:-1;;;;;43102:15:0::1;::::0;:37;::::1;;;::::0;43070:21;;43048:19:::1;43102:37:::0;43048:19;43102:37;43070:21;43102:15;:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;43155:28:0::1;::::0;19832:25:1;;;43155:28:0::1;::::0;19820:2:1;19805:18;43155:28:0::1;;;;;;;-1:-1:-1::0;22068:24:0;:32;;-1:-1:-1;;22068:32:0;;;42933:258::o;29384:561::-;29481:7;;29434;;;;;20139:22;20088:10;20156:5;20139:22;:::i;:::-;29499:25;;29546:9;29541:289;29565:9;:16;29561:20;;29541:289;;;29631:7;29607;:21;29615:9;29625:1;29615:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29615:12:0;29607:21;;;;;;;;;;;;;:31;;:66;;;29666:7;29642;:21;29650:9;29660:1;29650:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29650:12:0;29642:21;;;;;;;;;;;;;:31;29607:66;29603:97;;;29683:7;;20139:22;20088:10;20156:5;20139:22;:::i;:::-;29675:25;;;;;;;29384:561;;:::o;29603:97::-;29725:34;29737:7;:21;29745:9;29755:1;29745:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29745:12:0;29737:21;;;;;;;;;;;;;29725:7;;:11;:34::i;:::-;29715:44;;29784:34;29796:7;:21;29804:9;29814:1;29804:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29804:12:0;29796:21;;;;;;;;;;;;;29784:7;;:11;:34::i;:::-;29774:44;-1:-1:-1;29583:3:0;;;;:::i;:::-;;;;29541:289;;;-1:-1:-1;29854:20:0;20139:22;20088:10;20156:5;20139:22;:::i;:::-;29854:7;;;:11;:20::i;:::-;29844:7;:30;29840:61;;;29884:7;;20139:22;20088:10;20156:5;20139:22;:::i;:::-;29876:25;;;;;;29384:561;;:::o;29840:61::-;29920:7;;29929;;-1:-1:-1;29384:561:0;-1:-1:-1;29384:561:0:o;4598:278::-;4684:7;4719:12;4712:5;4704:28;;;;-1:-1:-1;;;4704:28:0;;;;;;;;:::i;:::-;-1:-1:-1;4743:9:0;4755:5;4759:1;4755;:5;:::i;28463:325::-;28587:6;;28523:7;;;;;;;;19986:5;;28577:16;;28587:6;;;28576:31;28587:6;28577:7;:16;:::i;:::-;28576:31;;;;:::i;:::-;28645:8;;28561:46;;-1:-1:-1;28618:13:0;;19986:5;;28635:18;;28634:33;28645:8;28635:7;:18;:::i;:::-;28634:33;;;;:::i;:::-;28618:49;-1:-1:-1;28678:23:0;28704:28;28618:49;28704:17;:7;28716:4;28704:11;:17::i;:::-;:21;;:28::i;:::-;28678:54;28768:4;;-1:-1:-1;28774:5:0;;-1:-1:-1;28463:325:0;;-1:-1:-1;;;28463:325:0:o;28796:409::-;28906:7;;;;28962:24;:7;28974:11;28962;:24::i;:::-;28944:42;-1:-1:-1;28997:12:0;29012:21;:4;29021:11;29012:8;:21::i;:::-;28997:36;-1:-1:-1;29044:13:0;29060:22;:5;29070:11;29060:9;:22::i;:::-;29044:38;-1:-1:-1;29093:23:0;29119:28;29044:38;29119:17;:7;29131:4;29119:11;:17::i;:28::-;29166:7;;;;-1:-1:-1;29192:4:0;;-1:-1:-1;28796:409:0;;-1:-1:-1;;;;;;;28796:409:0:o;39978:1621::-;40052:11;;;;40049:1231;;;-1:-1:-1;;;;;40083:19:0;;;;;;:8;:19;;;;;;;;40079:1035;;;40162:8;:21;40138:45;;40162:21;;;;;;;-1:-1:-1;;;40138:21:0;;;:45;:::i;:::-;40126:8;;:57;:8;;;:57;;;40123:172;;40242:8;:21;40218:45;;40242:21;;;;;;;-1:-1:-1;;;40218:21:0;;;:45;:::i;:::-;40207:8;:56;;-1:-1:-1;;40207:56:0;;;;;;;;;;;;40123:172;40326:8;:15;40316:6;;;;;40326:15;40316:6;;;40326:15;;40316:25;40313:96;;40374:8;:15;40365:6;:24;;-1:-1:-1;;40365:24:0;40374:15;;;;40365:24;;;;;;;;40313:96;40079:1035;;;-1:-1:-1;;;;;40433:16:0;;;;;;:8;:16;;;;;;;;40430:684;;;40507:7;:20;40484:43;;40507:20;;;;;;;-1:-1:-1;;;40484:20:0;;;:43;:::i;:::-;40472:8;;:55;:8;;;:55;;;40469:168;;40585:7;:20;40562:43;;40585:20;;;;;;;-1:-1:-1;;;40562:20:0;;;:43;:::i;:::-;40551:8;:54;;-1:-1:-1;;40551:54:0;;;;;;;;;;;;40469:168;40668:7;:14;40658:6;;;;;40668:14;40658:6;;;40668:14;;40658:24;40655:94;;40715:7;:14;40706:6;:23;;-1:-1:-1;;40706:23:0;40715:14;;;;40706:23;;;;;;;;40430:684;;;40832:12;:25;40804:53;;40832:25;;;;;;;-1:-1:-1;;;40804:25:0;;;:53;:::i;:::-;40792:8;;:65;:8;;;:65;;;40789:188;;40920:12;:25;40892:53;;40920:25;;;;;;;-1:-1:-1;;;40892:25:0;;;:53;:::i;:::-;40881:8;:64;;-1:-1:-1;;40881:64:0;;;;;;;;;;;;40789:188;41008:12;:19;40998:6;;;;;41008:19;40998:6;;;41008:19;;40998:29;40995:104;;41060:12;:19;41051:6;:28;;-1:-1:-1;;41051:28:0;41060:19;;;;41051:28;;;;;;;;40995:104;41168:17;;41147:18;;:38;;41168:17;41147:38;:::i;:::-;41131:12;:54;41128:141;;41205:8;:15;;41217:3;;41205:8;;;:15;;41217:3;;41205:15;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;41128:141;-1:-1:-1;;;;;41381:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;41411:29:0;;;;;;:18;:29;;;;;;;;41381:59;:75;;;-1:-1:-1;41445:11:0;;;;41444:12;41381:75;41377:215;;;41476:8;;;;:13;;;;:28;;-1:-1:-1;41493:6:0;;;;;;;:11;;41476:28;41473:108;;;41524:8;:12;;-1:-1:-1;;41555:10:0;;;39978:1621;;:::o;47489:376::-;-1:-1:-1;;;;;47573:17:0;;;;;;:8;:17;;;;;;;;;:45;;-1:-1:-1;;;;;;47594:24:0;;47613:4;47594:24;47573:45;:75;;;;47641:6;-1:-1:-1;;;;;47622:26:0;:7;-1:-1:-1;;;;;47622:26:0;;47573:75;:106;;;-1:-1:-1;;;;;;47652:27:0;;;;;;:18;:27;;;;;;;;47573:106;47570:122;;;47682:8;;;47570:122;47731:4;47716:19;;;;47712:142;;;-1:-1:-1;;;;;47752:21:0;;;;;;:12;:21;;;;;:28;;-1:-1:-1;;47752:28:0;47776:4;47752:28;;;27194:327:::1;27053:475:::0;:::o;47712:142::-;-1:-1:-1;;;;;;47813:21:0;47837:5;47813:21;;;:12;:21;;;;;:29;;-1:-1:-1;;47813:29:0;;;47489:376::o;38878:1069::-;38981:15;38998:23;39023:12;39037:23;39062:12;39076:13;39093:19;39104:7;39093:10;:19::i;:::-;-1:-1:-1;;;;;39141:15:0;;;;;;:7;:15;;;;;;38980:132;;-1:-1:-1;38980:132:0;;-1:-1:-1;38980:132:0;;-1:-1:-1;38980:132:0;-1:-1:-1;38980:132:0;-1:-1:-1;38980:132:0;-1:-1:-1;39141:28:0;;39161:7;39141:19;:28::i;:::-;-1:-1:-1;;;;;39123:15:0;;;;;;:7;:15;;;;;;;;:46;;;;39198:7;:15;;;;:28;;39218:7;39198:19;:28::i;:::-;-1:-1:-1;;;;;39180:15:0;;;;;;;:7;:15;;;;;;:46;;;;39258:18;;;;;;;:39;;39281:15;39258:22;:39::i;:::-;-1:-1:-1;;;;;39237:18:0;;;;;;:7;:18;;;;;:60;39315:27;;;;;;;39311:527;;39358:16;39368:5;39358:9;:16::i;:::-;39448:12;:19;39430:8;:15;39413:7;:14;39389:20;;39448:19;;;;;39413:32;;39430:15;;;;39413:14;:32;:::i;:::-;:54;;;;:::i;:::-;39746:12;:25;39722:8;:21;39699:7;:20;39389:79;;-1:-1:-1;39746:25:0;;;;;;;;;39699:44;;39722:21;;;;;;;39699:20;;;:44;:::i;:::-;:72;;;;:::i;:::-;39656:12;:21;39636:8;:17;39617:7;:16;39528:244;;;;;39681:13;;-1:-1:-1;;;39656:21:0;;;;;;;39617:36;;39636:17;;;;;;;39617:16;;;;:36;:::i;:::-;:60;;;;:::i;:::-;39616:78;;;;:::i;:::-;39585:12;:25;39561:8;:21;39538:7;:20;39528:167;;;;;39585:25;;;;;;;;39538:44;;39561:21;;;;;;39538:20;;:44;:::i;:::-;:72;;;;:::i;:::-;39529:82;;;;:5;:82;:::i;:::-;39528:167;;;;:::i;:::-;:244;;;;:::i;:::-;39483:17;:289;;:41;;:289;;;;;:::i;:::-;;;;-1:-1:-1;39311:527:0;;-1:-1:-1;;39311:527:0;;39805:21;39820:5;39805:14;:21::i;:::-;39856:23;39868:4;39874;39856:11;:23::i;:::-;39912:9;-1:-1:-1;;;;;39895:44:0;39904:6;-1:-1:-1;;;;;39895:44:0;;39923:15;39895:44;;;;19832:25:1;;19820:2;19805:18;;19686:177;39895:44:0;;;;;;;;38969:978;;;;;;38878:1069;;;:::o;37782:1088::-;37883:15;37900:23;37925:12;37939:23;37964:12;37978:13;37995:19;38006:7;37995:10;:19::i;:::-;-1:-1:-1;;;;;38043:15:0;;;;;;:7;:15;;;;;;37882:132;;-1:-1:-1;37882:132:0;;-1:-1:-1;37882:132:0;;-1:-1:-1;37882:132:0;-1:-1:-1;37882:132:0;-1:-1:-1;37882:132:0;-1:-1:-1;38043:28:0;;37882:132;38043:19;:28::i;:::-;-1:-1:-1;;;;;38025:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;38103:18;;;;;:7;:18;;;;;:39;;38126:15;38103:22;:39::i;:::-;-1:-1:-1;;;;;38082:18:0;;;;;;:7;:18;;;;;;;;:60;;;;38174:7;:18;;;;:39;;38197:15;38174:22;:39::i;36629:1145::-;36732:15;36749:23;36774:12;36788:23;36813:12;36827:13;36844:19;36855:7;36844:10;:19::i;:::-;-1:-1:-1;;;;;36892:15:0;;;;;;:7;:15;;;;;;36731:132;;-1:-1:-1;36731:132:0;;-1:-1:-1;36731:132:0;;-1:-1:-1;36731:132:0;-1:-1:-1;36731:132:0;-1:-1:-1;36731:132:0;-1:-1:-1;36892:28:0;;36912:7;36892:19;:28::i;:::-;-1:-1:-1;;;;;36874:15:0;;;;;;:7;:15;;;;;;;;:46;;;;36949:7;:15;;;;:28;;36969:7;36949:19;:28::i;35612:1009::-;35711:15;35728:23;35753:12;35767:23;35792:12;35806:13;35823:19;35834:7;35823:10;:19::i;:::-;-1:-1:-1;;;;;35871:15:0;;;;;;:7;:15;;;;;;35710:132;;-1:-1:-1;35710:132:0;;-1:-1:-1;35710:132:0;;-1:-1:-1;35710:132:0;-1:-1:-1;35710:132:0;-1:-1:-1;35710:132:0;-1:-1:-1;35871:28:0;;35710:132;35871:19;:28::i;3023:471::-;3081:7;3326:6;3322:47;;-1:-1:-1;3356:1:0;3349:8;;3322:47;3381:9;3393:5;3397:1;3393;:5;:::i;:::-;3381:17;-1:-1:-1;3426:1:0;3417:5;3421:1;3381:17;3417:5;:::i;:::-;:10;3409:56;;;;-1:-1:-1;;;3409:56:0;;16489:2:1;3409:56:0;;;16471:21:1;16528:2;16508:18;;;16501:30;16567:34;16547:18;;;16540:62;-1:-1:-1;;;16618:18:1;;;16611:31;16659:19;;3409:56:0;16287:397:1;2133:136:0;2191:7;2218:43;2222:1;2225;2218:43;;;;;;;;;;;;;;;;;:3;:43::i;43227:560::-;43375:16;;;43389:1;43375:16;;;;;;;;43351:21;;43375:16;;;;;;;;;;-1:-1:-1;43375:16:0;43351:40;;43420:4;43402;43407:1;43402:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;43402:23:0;;;-1:-1:-1;;;;;43402:23:0;;;;;43446:6;-1:-1:-1;;;;;43446:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43436:4;43441:1;43436:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;43436:23:0;;;-1:-1:-1;;;;;43436:23:0;;;;;43472:53;43489:4;43504:6;43513:11;43472:8;:53::i;:::-;43564:215;;-1:-1:-1;;;43564:215:0;;-1:-1:-1;;;;;43564:6:0;:57;;;;:215;;43636:11;;43662:1;;43706:4;;43733;;43753:15;;43564:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43276:511;43227:560;:::o;43834:504::-;43982:53;43999:4;44014:6;44023:11;43982:8;:53::i;:::-;44078:6;-1:-1:-1;;;;;44078:22:0;;44108:9;44141:4;44161:11;44187:1;44230;44281:7;10134;10161:6;-1:-1:-1;;;;;10161:6:0;;10096:79;44281:7;44078:252;;;;;;-1:-1:-1;;;;;;44078:252:0;;;-1:-1:-1;;;;;9958:15:1;;;44078:252:0;;;9940:34:1;9990:18;;;9983:34;;;;10033:18;;;10026:34;;;;10076:18;;;10069:34;10140:15;;;10119:19;;;10112:44;44304:15:0;10172:19:1;;;10165:35;9874:19;;44078:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43834:504;;:::o;30089:324::-;30142:19;30164:10;:8;:10::i;:::-;30142:32;-1:-1:-1;30185:13:0;30201:22;:5;30142:32;30201:9;:22::i;:::-;30275:4;30259:22;;;;:7;:22;;;;;;30185:38;;-1:-1:-1;30259:33:0;;30185:38;30259:26;:33::i;:::-;30250:4;30234:22;;;;:7;:22;;;;;;;;:58;;;;30306:11;:26;;;;;;30303:102;;;30388:4;30372:22;;;;:7;:22;;;;;;:33;;30399:5;30372:26;:33::i;:::-;30363:4;30347:22;;;;:7;:22;;;;;:58;30131:282;;30089:324;:::o;30421:369::-;30483:19;30506:10;:8;:10::i;:::-;30483:33;-1:-1:-1;30527:18:0;30548:26;:9;30483:33;30548:13;:26::i;:::-;30620:15;;-1:-1:-1;;;;;30620:15:0;30612:24;;;;:7;:24;;;;;;30527:47;;-1:-1:-1;30612:40:0;;30527:47;30612:28;:40::i;:::-;30593:15;;;-1:-1:-1;;;;;30593:15:0;;;30585:24;;;;:7;:24;;;;;;;;:67;;;;30678:15;;;;;30666:28;;:11;:28;;;;;;;30663:112;;;30744:15;;-1:-1:-1;;;;;30744:15:0;30736:24;;;;:7;:24;;;;;;:39;;30765:9;30736:28;:39::i;:::-;30717:15;;-1:-1:-1;;;;;30717:15:0;30709:24;;;;:7;:24;;;;;:66;30472:318;;30421:369;:::o;27896:147::-;27974:7;;:17;;27986:4;27974:11;:17::i;:::-;27964:7;:27;28015:10;;:20;;28030:4;28015:14;:20::i;:::-;28002:10;:33;-1:-1:-1;;27896:147:0:o;14:748:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;175:6;162:20;201:4;225:60;241:43;281:2;241:43;:::i;:::-;225:60;:::i;:::-;307:3;331:2;326:3;319:15;359:2;354:3;350:12;343:19;;394:2;386:6;382:15;446:3;441:2;435;432:1;428:10;420:6;416:23;412:32;409:41;406:61;;;463:1;460;453:12;406:61;485:1;495:238;509:2;506:1;503:9;495:238;;;580:3;567:17;597:31;622:5;597:31;:::i;:::-;641:18;;679:12;;;;711;;;;527:1;520:9;495:238;;;-1:-1:-1;751:5:1;;14:748;-1:-1:-1;;;;;;;14:748:1:o;767:159::-;834:20;;894:6;883:18;;873:29;;863:57;;916:1;913;906:12;863:57;767:159;;;:::o;931:156::-;997:20;;1057:4;1046:16;;1036:27;;1026:55;;1077:1;1074;1067:12;1092:247;1151:6;1204:2;1192:9;1183:7;1179:23;1175:32;1172:52;;;1220:1;1217;1210:12;1172:52;1259:9;1246:23;1278:31;1303:5;1278:31;:::i;1344:251::-;1414:6;1467:2;1455:9;1446:7;1442:23;1438:32;1435:52;;;1483:1;1480;1473:12;1435:52;1515:9;1509:16;1534:31;1559:5;1534:31;:::i;1860:388::-;1928:6;1936;1989:2;1977:9;1968:7;1964:23;1960:32;1957:52;;;2005:1;2002;1995:12;1957:52;2044:9;2031:23;2063:31;2088:5;2063:31;:::i;:::-;2113:5;-1:-1:-1;2170:2:1;2155:18;;2142:32;2183:33;2142:32;2183:33;:::i;:::-;2235:7;2225:17;;;1860:388;;;;;:::o;2253:456::-;2330:6;2338;2346;2399:2;2387:9;2378:7;2374:23;2370:32;2367:52;;;2415:1;2412;2405:12;2367:52;2454:9;2441:23;2473:31;2498:5;2473:31;:::i;:::-;2523:5;-1:-1:-1;2580:2:1;2565:18;;2552:32;2593:33;2552:32;2593:33;:::i;:::-;2253:456;;2645:7;;-1:-1:-1;;;2699:2:1;2684:18;;;;2671:32;;2253:456::o;2714:382::-;2779:6;2787;2840:2;2828:9;2819:7;2815:23;2811:32;2808:52;;;2856:1;2853;2846:12;2808:52;2895:9;2882:23;2914:31;2939:5;2914:31;:::i;:::-;2964:5;-1:-1:-1;3021:2:1;3006:18;;2993:32;3034:30;2993:32;3034:30;:::i;3101:315::-;3169:6;3177;3230:2;3218:9;3209:7;3205:23;3201:32;3198:52;;;3246:1;3243;3236:12;3198:52;3285:9;3272:23;3304:31;3329:5;3304:31;:::i;:::-;3354:5;3406:2;3391:18;;;;3378:32;;-1:-1:-1;;;3101:315:1:o;3421:1149::-;3539:6;3547;3600:2;3588:9;3579:7;3575:23;3571:32;3568:52;;;3616:1;3613;3606:12;3568:52;3656:9;3643:23;3685:18;3726:2;3718:6;3715:14;3712:34;;;3742:1;3739;3732:12;3712:34;3765:61;3818:7;3809:6;3798:9;3794:22;3765:61;:::i;:::-;3755:71;;3845:2;3835:12;;3900:2;3889:9;3885:18;3872:32;3929:2;3919:8;3916:16;3913:36;;;3945:1;3942;3935:12;3913:36;3968:24;;;-1:-1:-1;4023:4:1;4015:13;;4011:27;-1:-1:-1;4001:55:1;;4052:1;4049;4042:12;4001:55;4088:2;4075:16;4111:60;4127:43;4167:2;4127:43;:::i;4111:60::-;4193:3;4217:2;4212:3;4205:15;4245:2;4240:3;4236:12;4229:19;;4276:2;4272;4268:11;4324:7;4319:2;4313;4310:1;4306:10;4302:2;4298:19;4294:28;4291:41;4288:61;;;4345:1;4342;4335:12;4288:61;4367:1;4358:10;;4377:163;4391:2;4388:1;4385:9;4377:163;;;4448:17;;4436:30;;4409:1;4402:9;;;;;4486:12;;;;4518;;4377:163;;;4381:3;4559:5;4549:15;;;;;;;3421:1149;;;;;:::o;4575:477::-;4665:6;4673;4726:2;4714:9;4705:7;4701:23;4697:32;4694:52;;;4742:1;4739;4732:12;4694:52;4782:9;4769:23;4815:18;4807:6;4804:30;4801:50;;;4847:1;4844;4837:12;4801:50;4870:61;4923:7;4914:6;4903:9;4899:22;4870:61;:::i;:::-;4860:71;;;4981:2;4970:9;4966:18;4953:32;4994:28;5016:5;4994:28;:::i;5057:241::-;5113:6;5166:2;5154:9;5145:7;5141:23;5137:32;5134:52;;;5182:1;5179;5172:12;5134:52;5221:9;5208:23;5240:28;5262:5;5240:28;:::i;5303:245::-;5370:6;5423:2;5411:9;5402:7;5398:23;5394:32;5391:52;;;5439:1;5436;5429:12;5391:52;5471:9;5465:16;5490:28;5512:5;5490:28;:::i;5553:446::-;5622:6;5630;5638;5691:2;5679:9;5670:7;5666:23;5662:32;5659:52;;;5707:1;5704;5697:12;5659:52;5746:9;5733:23;5765:28;5787:5;5765:28;:::i;:::-;5812:5;-1:-1:-1;5869:2:1;5854:18;;5841:32;5882:30;5841:32;5882:30;:::i;:::-;5931:7;-1:-1:-1;5957:36:1;5989:2;5974:18;;5957:36;:::i;:::-;5947:46;;5553:446;;;;;:::o;6004:311::-;6067:6;6075;6128:2;6116:9;6107:7;6103:23;6099:32;6096:52;;;6144:1;6141;6134:12;6096:52;6183:9;6170:23;6202:28;6224:5;6202:28;:::i;:::-;6249:5;-1:-1:-1;6273:36:1;6305:2;6290:18;;6273:36;:::i;:::-;6263:46;;6004:311;;;;;:::o;6320:328::-;6394:6;6402;6410;6463:2;6451:9;6442:7;6438:23;6434:32;6431:52;;;6479:1;6476;6469:12;6431:52;6502:28;6520:9;6502:28;:::i;:::-;6492:38;;6549:37;6582:2;6571:9;6567:18;6549:37;:::i;:::-;6539:47;;6605:37;6638:2;6627:9;6623:18;6605:37;:::i;6653:458::-;6733:6;6741;6749;6757;6810:3;6798:9;6789:7;6785:23;6781:33;6778:53;;;6827:1;6824;6817:12;6778:53;6850:28;6868:9;6850:28;:::i;:::-;6840:38;;6897:37;6930:2;6919:9;6915:18;6897:37;:::i;:::-;6887:47;;6953:37;6986:2;6975:9;6971:18;6953:37;:::i;:::-;6943:47;;7040:2;7029:9;7025:18;7012:32;7053:28;7075:5;7053:28;:::i;:::-;6653:458;;;;-1:-1:-1;6653:458:1;;-1:-1:-1;;6653:458:1:o;7116:180::-;7175:6;7228:2;7216:9;7207:7;7203:23;7199:32;7196:52;;;7244:1;7241;7234:12;7196:52;-1:-1:-1;7267:23:1;;7116:180;-1:-1:-1;7116:180:1:o;7301:184::-;7371:6;7424:2;7412:9;7403:7;7399:23;7395:32;7392:52;;;7440:1;7437;7430:12;7392:52;-1:-1:-1;7463:16:1;;7301:184;-1:-1:-1;7301:184:1:o;7490:309::-;7555:6;7563;7616:2;7604:9;7595:7;7591:23;7587:32;7584:52;;;7632:1;7629;7622:12;7584:52;7668:9;7655:23;7645:33;;7728:2;7717:9;7713:18;7700:32;7741:28;7763:5;7741:28;:::i;7804:248::-;7872:6;7880;7933:2;7921:9;7912:7;7908:23;7904:32;7901:52;;;7949:1;7946;7939:12;7901:52;-1:-1:-1;;7972:23:1;;;8042:2;8027:18;;;8014:32;;-1:-1:-1;7804:248:1:o;8057:306::-;8145:6;8153;8161;8214:2;8202:9;8193:7;8189:23;8185:32;8182:52;;;8230:1;8227;8220:12;8182:52;8259:9;8253:16;8243:26;;8309:2;8298:9;8294:18;8288:25;8278:35;;8353:2;8342:9;8338:18;8332:25;8322:35;;8057:306;;;;;:::o;8368:515::-;8460:6;8468;8476;8484;8492;8545:3;8533:9;8524:7;8520:23;8516:33;8513:53;;;8562:1;8559;8552:12;8513:53;8598:9;8585:23;8575:33;;8655:2;8644:9;8640:18;8627:32;8617:42;;8706:2;8695:9;8691:18;8678:32;8668:42;;8757:2;8746:9;8742:18;8729:32;8719:42;;8811:3;8800:9;8796:19;8783:33;8825:28;8847:5;8825:28;:::i;:::-;8872:5;8862:15;;;8368:515;;;;;;;;:::o;11054:597::-;11166:4;11195:2;11224;11213:9;11206:21;11256:6;11250:13;11299:6;11294:2;11283:9;11279:18;11272:34;11324:1;11334:140;11348:6;11345:1;11342:13;11334:140;;;11443:14;;;11439:23;;11433:30;11409:17;;;11428:2;11405:26;11398:66;11363:10;;11334:140;;;11492:6;11489:1;11486:13;11483:91;;;11562:1;11557:2;11548:6;11537:9;11533:22;11529:31;11522:42;11483:91;-1:-1:-1;11635:2:1;11614:15;-1:-1:-1;;11610:29:1;11595:45;;;;11642:2;11591:54;;11054:597;-1:-1:-1;;;11054:597:1:o;13285:399::-;13487:2;13469:21;;;13526:2;13506:18;;;13499:30;13565:34;13560:2;13545:18;;13538:62;-1:-1:-1;;;13631:2:1;13616:18;;13609:33;13674:3;13659:19;;13285:399::o;16689:356::-;16891:2;16873:21;;;16910:18;;;16903:30;16969:34;16964:2;16949:18;;16942:62;17036:2;17021:18;;16689:356::o;19868:980::-;20130:4;20178:3;20167:9;20163:19;20209:6;20198:9;20191:25;20235:2;20273:6;20268:2;20257:9;20253:18;20246:34;20316:3;20311:2;20300:9;20296:18;20289:31;20340:6;20375;20369:13;20406:6;20398;20391:22;20444:3;20433:9;20429:19;20422:26;;20483:2;20475:6;20471:15;20457:29;;20504:1;20514:195;20528:6;20525:1;20522:13;20514:195;;;20593:13;;-1:-1:-1;;;;;20589:39:1;20577:52;;20684:15;;;;20649:12;;;;20625:1;20543:9;20514:195;;;-1:-1:-1;;;;;;;20765:32:1;;;;20760:2;20745:18;;20738:60;-1:-1:-1;;;20829:3:1;20814:19;20807:35;20726:3;19868:980;-1:-1:-1;;;19868:980:1:o;22848:275::-;22919:2;22913:9;22984:2;22965:13;;-1:-1:-1;;22961:27:1;22949:40;;23019:18;23004:34;;23040:22;;;23001:62;22998:88;;;23066:18;;:::i;:::-;23102:2;23095:22;22848:275;;-1:-1:-1;22848:275:1:o;23128:183::-;23188:4;23221:18;23213:6;23210:30;23207:56;;;23243:18;;:::i;:::-;-1:-1:-1;23288:1:1;23284:14;23300:4;23280:25;;23128:183::o;23316:224::-;23355:3;23383:6;23416:2;23413:1;23409:10;23446:2;23443:1;23439:10;23477:3;23473:2;23469:12;23464:3;23461:21;23458:47;;;23485:18;;:::i;:::-;23521:13;;23316:224;-1:-1:-1;;;;23316:224:1:o;23545:128::-;23585:3;23616:1;23612:6;23609:1;23606:13;23603:39;;;23622:18;;:::i;:::-;-1:-1:-1;23658:9:1;;23545:128::o;23678:187::-;23717:1;23743:6;23776:2;23773:1;23769:10;23798:3;23788:37;;23805:18;;:::i;:::-;23843:10;;23839:20;;;;;23678:187;-1:-1:-1;;23678:187:1:o;23870:120::-;23910:1;23936;23926:35;;23941:18;;:::i;:::-;-1:-1:-1;23975:9:1;;23870:120::o;23995:422::-;24084:1;24127:5;24084:1;24141:270;24162:7;24152:8;24149:21;24141:270;;;24221:4;24217:1;24213:6;24209:17;24203:4;24200:27;24197:53;;;24230:18;;:::i;:::-;24280:7;24270:8;24266:22;24263:55;;;24300:16;;;;24263:55;24379:22;;;;24339:15;;;;24141:270;;;24145:3;23995:422;;;;;:::o;24422:140::-;24480:5;24509:47;24550:4;24540:8;24536:19;24530:4;24616:5;24646:8;24636:80;;-1:-1:-1;24687:1:1;24701:5;;24636:80;24735:4;24725:76;;-1:-1:-1;24772:1:1;24786:5;;24725:76;24817:4;24835:1;24830:59;;;;24903:1;24898:130;;;;24810:218;;24830:59;24860:1;24851:10;;24874:5;;;24898:130;24935:3;24925:8;24922:17;24919:43;;;24942:18;;:::i;:::-;-1:-1:-1;;24998:1:1;24984:16;;25013:5;;24810:218;;25112:2;25102:8;25099:16;25093:3;25087:4;25084:13;25080:36;25074:2;25064:8;25061:16;25056:2;25050:4;25047:12;25043:35;25040:77;25037:159;;;-1:-1:-1;25149:19:1;;;25181:5;;25037:159;25228:34;25253:8;25247:4;25228:34;:::i;:::-;25298:6;25294:1;25290:6;25286:19;25277:7;25274:32;25271:58;;;25309:18;;:::i;:::-;25347:20;;24567:806;-1:-1:-1;;;24567:806:1:o;25378:168::-;25418:7;25484:1;25480;25476:6;25472:14;25469:1;25466:21;25461:1;25454:9;25447:17;25443:45;25440:71;;;25491:18;;:::i;:::-;-1:-1:-1;25531:9:1;;25378:168::o;25551:217::-;25590:4;25619:6;25675:10;;;;25645;;25697:12;;;25694:38;;;25712:18;;:::i;:::-;25749:13;;25551:217;-1:-1:-1;;;25551:217:1:o;25773:125::-;25813:4;25841:1;25838;25835:8;25832:34;;;25846:18;;:::i;:::-;-1:-1:-1;25883:9:1;;25773:125::o;25903:135::-;25942:3;-1:-1:-1;;25963:17:1;;25960:43;;;25983:18;;:::i;:::-;-1:-1:-1;26030:1:1;26019:13;;25903:135::o;26043:175::-;26080:3;26124:4;26117:5;26113:16;26153:4;26144:7;26141:17;26138:43;;;26161:18;;:::i;:::-;26210:1;26197:15;;26043:175;-1:-1:-1;;26043:175:1:o;26223:127::-;26284:10;26279:3;26275:20;26272:1;26265:31;26315:4;26312:1;26305:15;26339:4;26336:1;26329:15;26355:127;26416:10;26411:3;26407:20;26404:1;26397:31;26447:4;26444:1;26437:15;26471:4;26468:1;26461:15;26487:127;26548:10;26543:3;26539:20;26536:1;26529:31;26579:4;26576:1;26569:15;26603:4;26600:1;26593:15;26619:127;26680:10;26675:3;26671:20;26668:1;26661:31;26711:4;26708:1;26701:15;26735:4;26732:1;26725:15;26751:127;26812:10;26807:3;26803:20;26800:1;26793:31;26843:4;26840:1;26833:15;26867:4;26864:1;26857:15;26883:131;-1:-1:-1;;;;;26958:31:1;;26948:42;;26938:70;;27004:1;27001;26994:12;26938:70;26883:131;:::o;27019:118::-;27105:5;27098:13;27091:21;27084:5;27081:32;27071:60;;27127:1;27124;27117:12

Swarm Source

ipfs://82a4e7a644e56a076807387c6d33ac16b5657a6c713ad8cd24dd57dba33ad01f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.