ETH Price: $3,742.18 (+0.97%)
Gas: 7 Gwei

Token

Childrens Aid Foundation (CAF)
 

Overview

Max Total Supply

200,000,000 CAF

Holders

35

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x28A3586D...9a0613C49
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Token

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-31
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


interface IERC20 {

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

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

    function decimals() external view returns (uint8);

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


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by 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;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}


contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_,uint8 decimals_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return _decimals;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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


}

interface IUniswapV2Router02 is IUniswapV2Router01 {

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

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

}

interface IUniswapV2Factory {

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

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

interface IUniswapV2Pair {

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

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

    function token0() external view returns (address);

    function token1() external view returns (address);

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

}

contract usdtReceiver {
    address public usdt;
    address public owner;
    constructor(address _u) {
        usdt = _u;
        owner = msg.sender;
        IERC20(usdt).approve(msg.sender,~uint256(0));
    }
}

contract Token is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapPair;

    bool private swapping;

    uint256 public swapTokensAtAmount;

    uint256 public buyTokenRewardsFee;
    uint256 public sellTokenRewardsFee;

    uint256 public buyLiquidityFee;
    uint256 public sellLiquidityFee;

    uint256 public buyMarketingFee;
    uint256 public sellMarketingFee;

    uint256 public buyDeadFee;
    uint256 public sellDeadFee;

    uint256 public AmountLiquidityFee;
    uint256 public AmountTokenRewardsFee;
    uint256 public AmountMarketingFee;

    uint256 public addLiquidityFee;
    uint256 public removeLiquidityFee;


    address public deadWallet = 0x000000000000000000000000000000000000dEaD;
    address public usdtAddress;
    address public _marketingWalletAddress;
    address public rewardsAddress;
    uint256 public gasForProcessing;
    bool public swapAndLiquifyEnabled = true;
    uint256 currentIndex;
    uint256 public LPFeeRewardsTimes;
    uint256 public minLPFeeRewards;
    uint256 public first;
    uint256 public kill = 0;
    uint256 public airdropNumbs;
    usdtReceiver public _usdtReceiver;
    uint256 public processRewardWaitBlock = 20;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;

    uint256 public _maxTxAmount;
    uint256 public _walletMax;
    bool public checkWalletLimit = true;
    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    // Whether to distribute dividends in local currency
    bool public currencyFlag;
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;


    mapping(address => bool) private _updated;
    address[] public shareholders;
    mapping(address => uint256) shareholderIndexes;


    event UpdateDividendTracker(address indexed newAddress, address indexed oldAddress);

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event LiquidityWalletUpdated(address indexed newLiquidityWallet, address indexed oldLiquidityWallet);

    event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event SendDividends(
        uint256 tokensSwapped,
        uint256 amount
    );

    event ProcessedDividendTracker(
        uint256 iterations,
        uint256 claims,
        uint256 lastProcessedIndex,
        bool indexed automatic,
        uint256 gas,
        address indexed processor
    );

    constructor(
        string memory name_,
        string memory symbol_,
        uint256 totalSupply_,
        uint8 decimals_,
        address[4] memory addrs, // router,markting,usdtAddress,rewardsAddress
        uint256[4] memory buyFeeSetting_, // rewards,lp,market,dead
        uint256[4] memory sellFeeSetting_, // rewards,lp,market,dead
        bool flag,
        address service
    ) payable ERC20(name_, symbol_,decimals_)  {
        _marketingWalletAddress = addrs[1];
        usdtAddress = addrs[2];
        _usdtReceiver = new usdtReceiver(usdtAddress);
        currencyFlag = flag;
        if(currencyFlag){
          rewardsAddress = address(this);
        }else{
          rewardsAddress = addrs[3];
        }
        buyTokenRewardsFee = buyFeeSetting_[0];
        buyLiquidityFee = buyFeeSetting_[1];
        buyMarketingFee = buyFeeSetting_[2];
        buyDeadFee = buyFeeSetting_[3];

        sellTokenRewardsFee = sellFeeSetting_[0];
        sellLiquidityFee = sellFeeSetting_[1];
        sellMarketingFee = sellFeeSetting_[2];
        sellDeadFee = sellFeeSetting_[3];

        require(buyTokenRewardsFee.add(buyLiquidityFee).add(buyMarketingFee).add(buyDeadFee) <= 100, "Total buy fee is over 100%");
        require(sellTokenRewardsFee.add(sellLiquidityFee).add(sellMarketingFee).add(sellDeadFee) <= 100, "Total sell fee is over 100%");

        uint256 totalSupply = totalSupply_ * (10 ** decimals_);
        swapTokensAtAmount = totalSupply.mul(2).div(10**6); // 0.002%
        _maxTxAmount = totalSupply;
        _walletMax = totalSupply;
        if(currencyFlag){
          minLPFeeRewards = (10 ** decimals_); // min Lp Rewards Dividend
        }else{
          minLPFeeRewards = (10 ** IERC20(rewardsAddress).decimals()); // min Lp Rewards Dividend
        }


        // use by default 300,000 gas to process auto-claiming dividends
        gasForProcessing = 300000;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(addrs[0]);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), usdtAddress);
        uniswapV2Router = _uniswapV2Router;
        uniswapPair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);


        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(_marketingWalletAddress, true);
        excludeFromFees(address(this), true);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        isWalletLimitExempt[deadWallet] = true;
        isWalletLimitExempt[_marketingWalletAddress] = true;

        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[deadWallet] = true;
        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[_marketingWalletAddress] = true;

        _mint(owner(), totalSupply);
        payable(service).transfer(msg.value);
    }
    receive() external payable {}



    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(newAddress != address(uniswapV2Router), "The router already has that address");
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
        address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
        .createPair(address(this), uniswapV2Router.WETH());
        uniswapPair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        isWalletLimitExempt[address(uniswapPair)] = true;
    }
    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        if (_isExcludedFromFees[account] != excluded) {
            _isExcludedFromFees[account] = excluded;
            emit ExcludeFromFees(account, excluded);
        }
    }

    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }

        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }
    function setMarketingWallet(address payable wallet) external onlyOwner{
        _marketingWalletAddress = wallet;
        _isExcludedFromFees[_marketingWalletAddress] = true;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapPair, "The PancakeSwap pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }


    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(newValue != gasForProcessing, "Cannot update gasForProcessing to same value");
        emit GasForProcessingUpdated(newValue, gasForProcessing);
        gasForProcessing = newValue;
    }


    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function swapManual() public onlyOwner {
        uint256 contractTokenBalance = balanceOf(address(this));
        require(contractTokenBalance > 0, "token balance zero");
        swapping = true;
        if (AmountMarketingFee > 0) swapAndSendMarketing(AmountMarketingFee);
        if(AmountLiquidityFee > 0) swapAndLiquify(AmountLiquidityFee);
        if (AmountTokenRewardsFee > 0) swapAndSendDividends(AmountTokenRewardsFee);
        swapping = false;
    }

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

    function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isWalletLimitExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }


    function setSwapTokensAtAmount(uint256 amount) public onlyOwner {
        swapTokensAtAmount = amount;
    }

    function setRewardsAddr(address _addr) public onlyOwner {
        if(_addr == address(this)){
            currencyFlag = true;
        }else{
            currencyFlag = false;
        }
        rewardsAddress = _addr;
    }

    function setBuyTaxes(uint256 liquidity, uint256 rewardsFee, uint256 marketingFee, uint256 deadFee) external onlyOwner {
        require(rewardsFee.add(liquidity).add(marketingFee).add(deadFee) <= 100, "Total buy fee is over 100%");
        buyTokenRewardsFee = rewardsFee;
        buyLiquidityFee = liquidity;
        buyMarketingFee = marketingFee;
        buyDeadFee = deadFee;

    }

    function setSelTaxes(uint256 liquidity, uint256 rewardsFee, uint256 marketingFee, uint256 deadFee) external onlyOwner {
        require(rewardsFee.add(liquidity).add(marketingFee).add(deadFee) <= 100, "Total sel fee is over 100%");
        sellTokenRewardsFee = rewardsFee;
        sellLiquidityFee = liquidity;
        sellMarketingFee = marketingFee;
        sellDeadFee = deadFee;
    }
    function setAirdropNumbs(uint256 newValue) public onlyOwner {
        require(newValue <= 3, "newValue must <= 3");
        airdropNumbs = newValue;
    }

    function setKing(uint256 newValue) public onlyOwner {
        require(newValue <= 100, "newValue must <= 100");
        kill = newValue;
    }

    function setAddLiquidityFee(uint256 fee) external onlyOwner {
        require(fee <= 25, "Total sel fee is over 25%");
        addLiquidityFee = fee;
    }

    function setRemoveLiquidityFee(uint256 fee) external onlyOwner {
        require(fee <= 25, "Total sel fee is over 25%");
        removeLiquidityFee = fee;
    }

    function setRewardsInfo(uint256 minLpRewards,uint256 waitBlock) public onlyOwner {
        minLPFeeRewards = minLpRewards;
        processRewardWaitBlock = waitBlock;
    }

    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }
    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }


    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if(automatedMarketMakerPairs[to] && balanceOf(address(uniswapPair)) == 0){
            first = block.number;
        }
        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
            if(automatedMarketMakerPairs[from] && block.number < first + kill){
                return super._transfer(from, _marketingWalletAddress, amount);
            }
        }

        if(!isTxLimitExempt[from] && !isTxLimitExempt[to]) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            from != owner() &&
            to != owner() &&
            swapAndLiquifyEnabled &&
            !_isAddLiquidity()
        ) {
            swapping = true;
            if (AmountMarketingFee > 0) swapAndSendMarketing(AmountMarketingFee);
            if(AmountLiquidityFee > 0) swapAndLiquify(AmountLiquidityFee);
            if (AmountTokenRewardsFee > 0) swapAndSendDividends(AmountTokenRewardsFee);
            swapping = false;
        }


        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }


        if(takeFee) {
            uint256 fees;
            uint256 LFee; // Liquidity
            uint256 RFee; // Rewards
            uint256 MFee; // Marketing
            uint256 DFee; // Dead

            bool isRemove;
            bool isAdd;
            if (automatedMarketMakerPairs[to]) {
                isAdd = _isAddLiquidity();
            } else if (automatedMarketMakerPairs[from]) {
                isRemove = _isRemoveLiquidity();
            }

            if(isAdd){
                RFee = amount.mul(addLiquidityFee).div(100);
                AmountTokenRewardsFee += RFee;
                fees = RFee;
            }else if(isRemove){
                RFee = amount.mul(removeLiquidityFee).div(100);
                AmountTokenRewardsFee += RFee;
                fees = RFee;
            }else if(automatedMarketMakerPairs[from]){
                LFee = amount.mul(buyLiquidityFee).div(100);
                AmountLiquidityFee += LFee;
                RFee = amount.mul(buyTokenRewardsFee).div(100);
                AmountTokenRewardsFee += RFee;
                MFee = amount.mul(buyMarketingFee).div(100);
                AmountMarketingFee += MFee;
                DFee = amount.mul(buyDeadFee).div(100);
                fees = LFee.add(RFee).add(MFee).add(DFee);
            }else if(automatedMarketMakerPairs[to]){
                LFee = amount.mul(sellLiquidityFee).div(100);
                AmountLiquidityFee += LFee;
                RFee = amount.mul(sellTokenRewardsFee).div(100);
                AmountTokenRewardsFee += RFee;
                MFee = amount.mul(sellMarketingFee).div(100);
                AmountMarketingFee += MFee;
                DFee = amount.mul(sellDeadFee).div(100);
                fees = LFee.add(RFee).add(MFee).add(DFee);
            }
            // airdrop
            if((automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to]) && !isAdd && !isRemove){
                if (airdropNumbs > 0){
                    address ad;
                    for (uint256 i = 0; i < airdropNumbs; i++) {
                        ad = address(uint160(uint256(keccak256(abi.encodePacked(i, amount, block.timestamp)))));
                        super._transfer(from, ad, 1);
                    }
                    amount -= airdropNumbs * 1;
                }
            }

            amount = amount.sub(fees);
            if(DFee > 0) super._transfer(from, deadWallet, DFee);
            if(fees > 0) super._transfer(from, address(this), fees.sub(DFee));
        }

        if(checkWalletLimit && !isWalletLimitExempt[to]){
            require(balanceOf(to).add(amount) <= _walletMax);
        }

        super._transfer(from, to, amount);

        if (from != address(this) && automatedMarketMakerPairs[to]) {
            setShare(from);
        }

        if (!swapping &&
        from != address(this) &&
        block.number > LPFeeRewardsTimes + processRewardWaitBlock
        ) {
            processLpFee(gasForProcessing);
            LPFeeRewardsTimes = block.number;
        }
    }


    function _isAddLiquidity() internal view returns (bool isAdd){
        IUniswapV2Pair mainPair = IUniswapV2Pair(uniswapPair);
        (uint r0,uint256 r1,) = mainPair.getReserves();

        address tokenOther = usdtAddress;
        uint256 r;
        if (tokenOther < address(this)) {
            r = r0;
        } else {
            r = r1;
        }

        uint bal = IERC20(tokenOther).balanceOf(address(mainPair));
        isAdd = bal > r;
    }

    function _isRemoveLiquidity() internal view returns (bool isRemove) {
        IUniswapV2Pair mainPair = IUniswapV2Pair(uniswapPair);
        (uint r0, uint256 r1, ) = mainPair.getReserves();

        address tokenOther = usdtAddress;
        uint256 r;
        if (tokenOther < address(this)) {
            r = r0;
        } else {
            r = r1;
        }

        uint bal = IERC20(tokenOther).balanceOf(address(mainPair));
        isRemove = r >= bal;
    }


    function swapAndSendMarketing(uint256 tokens) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = usdtAddress;
        _approve(address(this), address(uniswapV2Router), tokens);
        if(usdtAddress == uniswapV2Router.WETH()){
            // make the swap
            uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                tokens,
                0, // accept any amount of ETH
                path,
                _marketingWalletAddress, // The contract
                block.timestamp
            );
        }else{
            // make the swap
            uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
                tokens,
                0, // accept any amount of USDT
                path,
                _marketingWalletAddress,
                block.timestamp
            );
        }
        AmountMarketingFee = AmountMarketingFee - tokens;
    }

    function swapAndLiquify(uint256 tokens) private {
       // split the contract balance into halves
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);

        uint256 initialBalance = IERC20(usdtAddress).balanceOf(address(this));

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

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

        // add liquidity to uniswap
        addLiquidityUSDT(otherHalf, newBalance);
        AmountLiquidityFee = AmountLiquidityFee - tokens;
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function addLiquidityUSDT(uint256 tokenAmount, uint256 USDTAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        IERC20(usdtAddress).approve(address(uniswapV2Router),USDTAmount);
        // add the liquidity
        uniswapV2Router.addLiquidity(
            address(this),
            usdtAddress,
            tokenAmount,
            USDTAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            _marketingWalletAddress,
            block.timestamp
        );
    }

    function swapTokensForUsdt(uint256 tokenAmount,address addr) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = usdtAddress;
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of USDT
            path,
            address(_usdtReceiver),
            block.timestamp
        );
        uint256 amount = IERC20(usdtAddress).balanceOf(address(_usdtReceiver));
        IERC20(usdtAddress).transferFrom(address(_usdtReceiver),addr, amount);
    }

    function swapTokensForRewards(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth -> rewards
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = usdtAddress;
        path[2] = rewardsAddress;
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        try
            uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
                tokenAmount,
                0, // accept any amount of USDT
                path,
                address(this),
                block.timestamp
            )
        {}catch{}

    }

    function swapAndSendDividends(uint256 tokens) private {
        // Judging whether to distribute dividends in the local currency
        if(currencyFlag){
          AmountTokenRewardsFee = AmountTokenRewardsFee - tokens;
          return;
        }
        if(usdtAddress == rewardsAddress){
            swapTokensForUsdt(tokens,address(this));
        }else{
            swapTokensForRewards(tokens);
        }
        AmountTokenRewardsFee = AmountTokenRewardsFee - tokens;
    }

    function processLpFee(uint256 gas) private {
        uint256 total = IERC20(rewardsAddress).balanceOf(address(this));
         if(currencyFlag){
            total = total.sub(AmountLiquidityFee).sub(AmountTokenRewardsFee).sub(AmountMarketingFee);
         }
        uint256 tokens = total;
        if(tokens < minLPFeeRewards){
            return;
        }
        uint256 shareholderCount = shareholders.length;
        if (shareholderCount == 0) return;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;

        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentIndex >= shareholderCount) {
                currentIndex = 0;
            }
            uint256 amount = total.mul(IERC20(uniswapPair).balanceOf(shareholders[currentIndex])).div(IERC20(uniswapPair).totalSupply());
            if (tokens < amount) return;
            if(amount > 0){
                if(currencyFlag){
                  super._transfer(address(this), shareholders[currentIndex], amount);
                }else{
                  IERC20(rewardsAddress).transfer(shareholders[currentIndex], amount);
                }
                tokens = tokens.sub(amount);
            }
            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function setShare(address shareholder) private {
        uint256 size;
        assembly {
            size := extcodesize(shareholder)
        }
        if (size > 0) {
            return;
        }
        if (!_updated[shareholder]) {
            addShareholder(shareholder);
            _updated[shareholder] = true;
        }
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint256","name":"totalSupply_","type":"uint256"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"address[4]","name":"addrs","type":"address[4]"},{"internalType":"uint256[4]","name":"buyFeeSetting_","type":"uint256[4]"},{"internalType":"uint256[4]","name":"sellFeeSetting_","type":"uint256[4]"},{"internalType":"bool","name":"flag","type":"bool"},{"internalType":"address","name":"service","type":"address"}],"stateMutability":"payable","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":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","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":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"AmountLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AmountMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AmountTokenRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LPFeeRewardsTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_usdtReceiver","outputs":[{"internalType":"contract usdtReceiver","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropNumbs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDeadFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTokenRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currencyFlag","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"first","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kill","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minLPFeeRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processRewardWaitBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDeadFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTokenRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setAddLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setAirdropNumbs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"rewardsFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"deadFee","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setKing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setRemoveLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setRewardsAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minLpRewards","type":"uint256"},{"internalType":"uint256","name":"waitBlock","type":"uint256"}],"name":"setRewardsInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"rewardsFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"deadFee","type":"uint256"}],"name":"setSelTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"shareholders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapManual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdtAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040819052601680546001600160a01b03191661dead179055601b805460ff199081166001908117909255600060205560146023556028805490911690911790556200541738819003908190833981016040819052620000619162000dda565b88888782600390805190602001906200007c92919062000bd9565b5081516200009290600490602085019062000bd9565b506005805460ff191660ff9290921691909117905550620000bc9050620000b63390565b62000736565b6020850151601880546001600160a01b03199081166001600160a01b039384161790915560408088015160178054909316931692831790915551620001019062000c68565b6001600160a01b039091168152602001604051809103906000f0801580156200012e573d6000803e3d6000fd5b50602280546001600160a01b0319166001600160a01b0392909216919091179055602a805460ff191683151590811790915560ff16156200018157601980546001600160a01b03191630179055620001a9565b8460036020020151601980546001600160a01b0319166001600160a01b039092169190911790555b83516009819055602080860151600b819055604080880151600d8190556060808a0151600f8190558951600a5589860151600c5592890151600e55880151601055606494620002209492936200020c938492919062001d3062000790821b17901c565b6200079060201b62001d301790919060201c565b1115620002745760405162461bcd60e51b815260206004820152601a60248201527f546f74616c2062757920666565206973206f766572203130302500000000000060448201526064015b60405180910390fd5b6064620002a26010546200020c600e546200020c600c54600a546200079060201b62001d301790919060201c565b1115620002f25760405162461bcd60e51b815260206004820152601b60248201527f546f74616c2073656c6c20666565206973206f7665722031303025000000000060448201526064016200026b565b60006200030187600a6200101c565b6200030d9089620010db565b905062000346620f424062000332600284620007fc60201b62001d961790919060201c565b6200088360201b62001e151790919060201c565b60085560268190556027819055602a5460ff161562000375576200036c87600a6200101c565b601e5562000410565b601960009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620003c457600080fd5b505afa158015620003d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ff919062000f17565b6200040c90600a6200101c565b601e555b620493e0601a5560008681602002015190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200045e57600080fd5b505afa15801562000473573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000499919062000dbc565b6017546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c6539690604401602060405180830381600087803b158015620004e657600080fd5b505af1158015620004fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000521919062000dbc565b600680546001600160a01b038086166001600160a01b0319928316179092556007805492841692909116919091179055905062000560816001620008cd565b620005846200057c60055461010090046001600160a01b031690565b6001620009b8565b6018546200059d906001600160a01b03166001620009b8565b620005aa306001620009b8565b600160246000620005c860055461010090046001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560075482168152602490935281832080548516600190811790915530845282842080548616821790556016548216845282842080548616821790556018549091168352908220805490931681179092556025906200066160055461010090046001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556016548216815260259093528183208054851660019081179091553084528284208054861682179055601854909116835291208054909216179055620006ed620006e660055461010090046001600160a01b031690565b8462000aa1565b6040516001600160a01b038516903480156108fc02916000818181858888f1935050505015801562000723573d6000803e3d6000fd5b5050505050505050505050505062001199565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806200079f838562000f95565b905083811015620007f35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200026b565b90505b92915050565b6000826200080d57506000620007f6565b60006200081b8385620010db565b9050826200082a858362000fb0565b14620007f35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016200026b565b6000620007f383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000b9d60201b60201c565b6001600160a01b0382166000908152602b602052604090205460ff1615158115151415620009645760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084016200026b565b6001600160a01b0382166000818152602b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b0361010090910416331462000a1a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200026b565b6001600160a01b03821660009081526029602052604090205460ff1615158115151462000a9d576001600160a01b038216600081815260296020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25b5050565b6001600160a01b03821662000af95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200026b565b62000b15816002546200079060201b62001d301790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000b4891839062001d3062000790821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000818362000bc15760405162461bcd60e51b81526004016200026b919062000f35565b50600062000bd0848662000fb0565b95945050505050565b82805462000be79062001130565b90600052602060002090601f01602090048101928262000c0b576000855562000c56565b82601f1062000c2657805160ff191683800117855562000c56565b8280016001018555821562000c56579182015b8281111562000c5657825182559160200191906001019062000c39565b5062000c6492915062000c76565b5090565b6101e6806200523183390190565b5b8082111562000c64576000815560010162000c77565b80516001600160a01b038116811462000ca557600080fd5b919050565b600082601f83011262000cbc57600080fd5b62000cc662000f6a565b80838560808601111562000cd957600080fd5b60005b600481101562000cfd57815184526020938401939091019060010162000cdc565b509095945050505050565b8051801515811462000ca557600080fd5b600082601f83011262000d2b57600080fd5b81516001600160401b038082111562000d485762000d4862001183565b604051601f8301601f19908116603f0116810190828211818310171562000d735762000d7362001183565b8160405283815286602085880101111562000d8d57600080fd5b62000da0846020830160208901620010fd565b9695505050505050565b805160ff8116811462000ca557600080fd5b60006020828403121562000dcf57600080fd5b620007f38262000c8d565b60008060008060008060008060006102408a8c03121562000dfa57600080fd5b89516001600160401b038082111562000e1257600080fd5b62000e208d838e0162000d19565b9a5060208c015191508082111562000e3757600080fd5b5062000e468c828d0162000d19565b98505060408a0151965062000e5e60608b0162000daa565b95508a609f8b011262000e7057600080fd5b62000e7a62000f6a565b8060808c016101008d018e81111562000e9257600080fd5b60005b600481101562000ec05762000eaa8362000c8d565b8552602094850194929092019160010162000e95565b5082985062000ed08f8262000caa565b97505050505062000ee68b6101808c0162000caa565b925062000ef76102008b0162000d08565b915062000f086102208b0162000c8d565b90509295985092959850929598565b60006020828403121562000f2a57600080fd5b620007f38262000daa565b602081526000825180602084015262000f56816040850160208701620010fd565b601f01601f19169190910160400192915050565b604051608081016001600160401b038111828210171562000f8f5762000f8f62001183565b60405290565b6000821982111562000fab5762000fab6200116d565b500190565b60008262000fce57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156200101457816000190482111562000ff85762000ff86200116d565b808516156200100657918102915b93841c939080029062000fd8565b509250929050565b6000620007f360ff8416836000826200103857506001620007f6565b816200104757506000620007f6565b81600181146200106057600281146200106b576200108b565b6001915050620007f6565b60ff8411156200107f576200107f6200116d565b50506001821b620007f6565b5060208310610133831016604e8410600b8410161715620010b0575081810a620007f6565b620010bc838362000fd3565b8060001904821115620010d357620010d36200116d565b029392505050565b6000816000190483118215151615620010f857620010f86200116d565b500290565b60005b838110156200111a57818101518382015260200162001100565b838111156200112a576000848401525b50505050565b600181811c908216806200114557607f821691505b602082108114156200116757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b61408880620011a96000396000f3fe6080604052600436106104405760003560e01c80638da5cb5b11610234578063c7f063d31161012e578063e5c2b0a6116100b6578063f2fde38b1161007a578063f2fde38b14610cbe578063f637434214610cde578063f832679514610cf4578063f84ba65d14610d0a578063f872858a14610d2a57600080fd5b8063e5c2b0a614610c28578063eb671e9114610c48578063ec28438a14610c68578063f11a24d314610c88578063f1d5f51714610c9e57600080fd5b8063d2a8b440116100fd578063d2a8b44014610b81578063dd62ed3e14610b96578063e2f4560514610bdc578063e32759cf14610bf2578063e4bf1bed14610c0857600080fd5b8063c7f063d314610afb578063c816841b14610b1b578063c867d60b14610b3b578063cfe0e61914610b6b57600080fd5b8063ab377daa116101bc578063bfc3137e11610180578063bfc3137e14610a65578063c024666814610a7b578063c0973eed14610a9b578063c492f04614610abb578063c49b9a8014610adb57600080fd5b8063ab377daa146109b5578063afa4f3b2146109d5578063b340a954146109f5578063b62496f514610a15578063bba30f8f14610a4557600080fd5b80639a7a23d6116102035780639a7a23d61461091f5780639ab4a4451461093f5780639c1b8af51461095f578063a457c2d714610975578063a9059cbb1461099557600080fd5b80638da5cb5b146108bb5780638de743b3146108de57806392136913146108f457806395d89b411461090a57600080fd5b806341c0e1b51161034557806370a08231116102cd578063807c2d9c11610291578063807c2d9c1461081b57806385141a7714610831578063871c128d14610851578063892400f3146108715780638b42507f1461088b57600080fd5b806370a0823114610784578063715018a6146107ba57806379dc880c146107cf5780637bce5a04146107ef5780637d1db4a51461080557600080fd5b8063557ed1ba11610314578063557ed1ba146106fb5780635d098b381461070e578063615223dc1461072e578063621823e61461074e57806365b8dbc01461076457600080fd5b806341c0e1b51461067c5780634412478b146106925780634a74bb02146106a85780634fbee193146106c257600080fd5b806324942a04116103c8578063395093511161039757806339509351146105f05780633b1cd187146106105780633df4ddf4146106265780633e0e24fa1461063c5780634144d9e41461065c57600080fd5b806324942a04146105825780632563ae8314610598578063313ce567146105b85780633926876d146105da57600080fd5b8063095ea7b31161040f578063095ea7b3146104c35780631694505e146104f357806318160ddd1461052b5780632198cf6c1461054057806323b872dd1461056257600080fd5b806302df64d61461044c57806305d52b9c1461047557806306fdde031461048b57806308b2a12c146104ad57600080fd5b3661044757005b600080fd5b34801561045857600080fd5b5061046260095481565b6040519081526020015b60405180910390f35b34801561048157600080fd5b50610462601e5481565b34801561049757600080fd5b506104a0610d44565b60405161046c9190613d47565b3480156104b957600080fd5b50610462600a5481565b3480156104cf57600080fd5b506104e36104de366004613b09565b610dd6565b604051901515815260200161046c565b3480156104ff57600080fd5b50600654610513906001600160a01b031681565b6040516001600160a01b03909116815260200161046c565b34801561053757600080fd5b50600254610462565b34801561054c57600080fd5b5061056061055b366004613adb565b610ded565b005b34801561056e57600080fd5b506104e361057d366004613a9a565b610e51565b34801561058e57600080fd5b5061046260105481565b3480156105a457600080fd5b506105606105b3366004613bbb565b610eba565b3480156105c457600080fd5b5060055460405160ff909116815260200161046c565b3480156105e657600080fd5b5061046260125481565b3480156105fc57600080fd5b506104e361060b366004613b09565b610efd565b34801561061c57600080fd5b5061046260145481565b34801561063257600080fd5b50610462601f5481565b34801561064857600080fd5b50610560610657366004613c6c565b610f33565b34801561066857600080fd5b50601854610513906001600160a01b031681565b34801561068857600080fd5b5061046260205481565b34801561069e57600080fd5b50610462601d5481565b3480156106b457600080fd5b50601b546104e39060ff1681565b3480156106ce57600080fd5b506104e36106dd366004613a27565b6001600160a01b031660009081526029602052604090205460ff1690565b34801561070757600080fd5b5042610462565b34801561071a57600080fd5b50610560610729366004613a27565b610f6e565b34801561073a57600080fd5b50610560610749366004613a27565b610fd8565b34801561075a57600080fd5b5061046260235481565b34801561077057600080fd5b5061056061077f366004613a27565b611058565b34801561079057600080fd5b5061046261079f366004613a27565b6001600160a01b031660009081526020819052604090205490565b3480156107c657600080fd5b50610560611322565b3480156107db57600080fd5b506105606107ea366004613c3a565b61135e565b3480156107fb57600080fd5b50610462600d5481565b34801561081157600080fd5b5061046260265481565b34801561082757600080fd5b5061046260275481565b34801561083d57600080fd5b50601654610513906001600160a01b031681565b34801561085d57600080fd5b5061056061086c366004613c3a565b6113e0565b34801561087d57600080fd5b50602a546104e39060ff1681565b34801561089757600080fd5b506104e36108a6366004613a27565b60256020526000908152604090205460ff1681565b3480156108c757600080fd5b5060055461010090046001600160a01b0316610513565b3480156108ea57600080fd5b50610462600f5481565b34801561090057600080fd5b50610462600e5481565b34801561091657600080fd5b506104a06114aa565b34801561092b57600080fd5b5061056061093a366004613adb565b6114b9565b34801561094b57600080fd5b50601754610513906001600160a01b031681565b34801561096b57600080fd5b50610462601a5481565b34801561098157600080fd5b506104e3610990366004613b09565b611589565b3480156109a157600080fd5b506104e36109b0366004613b09565b6115d8565b3480156109c157600080fd5b506105136109d0366004613c3a565b6115e5565b3480156109e157600080fd5b506105606109f0366004613c3a565b61160f565b348015610a0157600080fd5b50602254610513906001600160a01b031681565b348015610a2157600080fd5b506104e3610a30366004613a27565b602b6020526000908152604090205460ff1681565b348015610a5157600080fd5b50610560610a60366004613c3a565b611644565b348015610a7157600080fd5b5061046260155481565b348015610a8757600080fd5b50610560610a96366004613adb565b6116c6565b348015610aa757600080fd5b50601954610513906001600160a01b031681565b348015610ac757600080fd5b50610560610ad6366004613b35565b61177b565b348015610ae757600080fd5b50610560610af6366004613bbb565b61185d565b348015610b0757600080fd5b50610560610b16366004613c3a565b6118a0565b348015610b2757600080fd5b50600754610513906001600160a01b031681565b348015610b4757600080fd5b506104e3610b56366004613a27565b60246020526000908152604090205460ff1681565b348015610b7757600080fd5b5061046260135481565b348015610b8d57600080fd5b5061056061191d565b348015610ba257600080fd5b50610462610bb1366004613a61565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610be857600080fd5b5061046260085481565b348015610bfe57600080fd5b5061046260215481565b348015610c1457600080fd5b50610560610c23366004613cbc565b6119fb565b348015610c3457600080fd5b50610560610c43366004613c3a565b611aa8565b348015610c5457600080fd5b50610560610c63366004613cbc565b611b23565b348015610c7457600080fd5b50610560610c83366004613c3a565b611bca565b348015610c9457600080fd5b50610462600b5481565b348015610caa57600080fd5b50610560610cb9366004613c3a565b611bff565b348015610cca57600080fd5b50610560610cd9366004613a27565b611c34565b348015610cea57600080fd5b50610462600c5481565b348015610d0057600080fd5b5061046260115481565b348015610d1657600080fd5b50610560610d25366004613adb565b611cd5565b348015610d3657600080fd5b506028546104e39060ff1681565b606060038054610d5390613f3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7f90613f3a565b8015610dcc5780601f10610da157610100808354040283529160200191610dcc565b820191906000526020600020905b815481529060010190602001808311610daf57829003601f168201915b5050505050905090565b6000610de3338484611e57565b5060015b92915050565b6005546001600160a01b03610100909104163314610e265760405162461bcd60e51b8152600401610e1d90613ddf565b60405180910390fd5b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6000610e5e848484611f7c565b610eb08433610eab85604051806060016040528060288152602001614006602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612790565b611e57565b5060019392505050565b6005546001600160a01b03610100909104163314610eea5760405162461bcd60e51b8152600401610e1d90613ddf565b6028805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610de3918590610eab9086611d30565b6005546001600160a01b03610100909104163314610f635760405162461bcd60e51b8152600401610e1d90613ddf565b601e91909155602355565b6005546001600160a01b03610100909104163314610f9e5760405162461bcd60e51b8152600401610e1d90613ddf565b601880546001600160a01b039092166001600160a01b0319909216821790556000908152602960205260409020805460ff19166001179055565b6005546001600160a01b036101009091041633146110085760405162461bcd60e51b8152600401610e1d90613ddf565b6001600160a01b03811630141561102b57602a805460ff19166001179055611036565b602a805460ff191690555b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b036101009091041633146110885760405162461bcd60e51b8152600401610e1d90613ddf565b6006546001600160a01b03828116911614156110f25760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610e1d565b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a0155916004808301926020929190829003018186803b15801561118457600080fd5b505afa158015611198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bc9190613a44565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561121957600080fd5b505afa15801561122d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112519190613a44565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561129957600080fd5b505af11580156112ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d19190613a44565b600780546001600160a01b0319166001600160a01b03831617905590506112f98160016127ca565b50506007546001600160a01b03166000908152602460205260409020805460ff19166001179055565b6005546001600160a01b036101009091041633146113525760405162461bcd60e51b8152600401610e1d90613ddf565b61135c60006128b3565b565b6005546001600160a01b0361010090910416331461138e5760405162461bcd60e51b8152600401610e1d90613ddf565b60198111156113db5760405162461bcd60e51b8152602060048201526019602482015278546f74616c2073656c20666565206973206f7665722032352560381b6044820152606401610e1d565b601455565b6005546001600160a01b036101009091041633146114105760405162461bcd60e51b8152600401610e1d90613ddf565b601a548114156114775760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460448201526b6f2073616d652076616c756560a01b6064820152608401610e1d565b601a5460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601a55565b606060048054610d5390613f3a565b6005546001600160a01b036101009091041633146114e95760405162461bcd60e51b8152600401610e1d90613ddf565b6007546001600160a01b038381169116141561157b5760405162461bcd60e51b815260206004820152604560248201527f5468652050616e63616b655377617020706169722063616e6e6f74206265207260448201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572606482015264506169727360d81b608482015260a401610e1d565b61158582826127ca565b5050565b6000610de33384610eab8560405180606001604052806025815260200161402e602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612790565b6000610de3338484611f7c565b602d81815481106115f557600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b0361010090910416331461163f5760405162461bcd60e51b8152600401610e1d90613ddf565b600855565b6005546001600160a01b036101009091041633146116745760405162461bcd60e51b8152600401610e1d90613ddf565b60198111156116c15760405162461bcd60e51b8152602060048201526019602482015278546f74616c2073656c20666565206973206f7665722032352560381b6044820152606401610e1d565b601555565b6005546001600160a01b036101009091041633146116f65760405162461bcd60e51b8152600401610e1d90613ddf565b6001600160a01b03821660009081526029602052604090205460ff16151581151514611585576001600160a01b038216600081815260296020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b036101009091041633146117ab5760405162461bcd60e51b8152600401610e1d90613ddf565b60005b8281101561181c5781602960008686858181106117cd576117cd613fa6565b90506020020160208101906117e29190613a27565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061181481613f75565b9150506117ae565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b3583838360405161185093929190613cee565b60405180910390a1505050565b6005546001600160a01b0361010090910416331461188d5760405162461bcd60e51b8152600401610e1d90613ddf565b601b805460ff1916911515919091179055565b6005546001600160a01b036101009091041633146118d05760405162461bcd60e51b8152600401610e1d90613ddf565b60648111156119185760405162461bcd60e51b815260206004820152601460248201527306e657756616c7565206d757374203c3d203130360641b6044820152606401610e1d565b602055565b6005546001600160a01b0361010090910416331461194d5760405162461bcd60e51b8152600401610e1d90613ddf565b306000908152602081905260409020548061199f5760405162461bcd60e51b8152602060048201526012602482015271746f6b656e2062616c616e6365207a65726f60701b6044820152606401610e1d565b6007805460ff60a01b1916600160a01b179055601354156119c5576119c560135461290d565b601154156119d8576119d8601154612b2e565b601254156119eb576119eb601254612cc3565b506007805460ff60a01b19169055565b6005546001600160a01b03610100909104163314611a2b5760405162461bcd60e51b8152600401610e1d90613ddf565b6064611a4382611a3d8581888a611d30565b90611d30565b1115611a915760405162461bcd60e51b815260206004820152601a60248201527f546f74616c2062757920666565206973206f76657220313030250000000000006044820152606401610e1d565b600992909255600b92909255600d91909155600f55565b6005546001600160a01b03610100909104163314611ad85760405162461bcd60e51b8152600401610e1d90613ddf565b6003811115611b1e5760405162461bcd60e51b81526020600482015260126024820152716e657756616c7565206d757374203c3d203360701b6044820152606401610e1d565b602155565b6005546001600160a01b03610100909104163314611b535760405162461bcd60e51b8152600401610e1d90613ddf565b6064611b6582611a3d8581888a611d30565b1115611bb35760405162461bcd60e51b815260206004820152601a60248201527f546f74616c2073656c20666565206973206f76657220313030250000000000006044820152606401610e1d565b600a92909255600c92909255600e91909155601055565b6005546001600160a01b03610100909104163314611bfa5760405162461bcd60e51b8152600401610e1d90613ddf565b602655565b6005546001600160a01b03610100909104163314611c2f5760405162461bcd60e51b8152600401610e1d90613ddf565b602755565b6005546001600160a01b03610100909104163314611c645760405162461bcd60e51b8152600401610e1d90613ddf565b6001600160a01b038116611cc95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e1d565b611cd2816128b3565b50565b6005546001600160a01b03610100909104163314611d055760405162461bcd60e51b8152600401610e1d90613ddf565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b600080611d3d8385613eca565b905083811015611d8f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e1d565b9392505050565b600082611da557506000610de7565b6000611db18385613f04565b905082611dbe8583613ee2565b14611d8f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e1d565b6000611d8f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d21565b6001600160a01b038316611eb95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e1d565b6001600160a01b038216611f1a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e1d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611fa25760405162461bcd60e51b8152600401610e1d90613e14565b6001600160a01b038216611fc85760405162461bcd60e51b8152600401610e1d90613d9c565b80611fde57611fd983836000612d4f565b505050565b6001600160a01b0382166000908152602b602052604090205460ff16801561201e57506007546001600160a01b0316600090815260208190526040902054155b156120285743601f555b6001600160a01b03831660009081526029602052604090205460ff1615801561206a57506001600160a01b03821660009081526029602052604090205460ff16155b156120c2576001600160a01b0383166000908152602b602052604090205460ff1680156120a55750602054601f546120a29190613eca565b43105b156120c257601854611fd99084906001600160a01b031683612d4f565b6001600160a01b03831660009081526025602052604090205460ff1615801561210457506001600160a01b03821660009081526025602052604090205460ff16155b1561216c5760265481111561216c5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610e1d565b306000908152602081905260409020546008548110801590819061219a5750600754600160a01b900460ff16155b80156121bf57506001600160a01b0385166000908152602b602052604090205460ff16155b80156121de57506005546001600160a01b038681166101009092041614155b80156121fd57506005546001600160a01b038581166101009092041614155b801561220b5750601b5460ff165b801561221c575061221a612e58565b155b1561227b576007805460ff60a01b1916600160a01b179055601354156122475761224760135461290d565b6011541561225a5761225a601154612b2e565b6012541561226d5761226d601254612cc3565b6007805460ff60a01b191690555b6007546001600160a01b03861660009081526029602052604090205460ff600160a01b9092048216159116806122c957506001600160a01b03851660009081526029602052604090205460ff165b156122d2575060005b801561268b576001600160a01b0385166000908152602b602052604081205481908190819081908190819060ff16156123145761230d612e58565b9050612340565b6001600160a01b038d166000908152602b602052604090205460ff16156123405761233d612f99565b91505b80156123895761236660646123606014548e611d9690919063ffffffff16565b90611e15565b9450846012600082825461237a9190613eca565b92505081905550849650612561565b81156123a95761236660646123606015548e611d9690919063ffffffff16565b6001600160a01b038d166000908152602b602052604090205460ff1615612487576123e46064612360600b548e611d9690919063ffffffff16565b955085601160008282546123f89190613eca565b909155505060095461241290606490612360908e90611d96565b945084601260008282546124269190613eca565b9091555050600d5461244090606490612360908e90611d96565b935083601360008282546124549190613eca565b9091555050600f5461246e90606490612360908e90611d96565b925061248083611a3d86818a8a611d30565b9650612561565b6001600160a01b038c166000908152602b602052604090205460ff1615612561576124c26064612360600c548e611d9690919063ffffffff16565b955085601160008282546124d69190613eca565b9091555050600a546124f090606490612360908e90611d96565b945084601260008282546125049190613eca565b9091555050600e5461251e90606490612360908e90611d96565b935083601360008282546125329190613eca565b909155505060105461254c90606490612360908e90611d96565b925061255e83611a3d86818a8a611d30565b96505b6001600160a01b038d166000908152602b602052604090205460ff16806125a057506001600160a01b038c166000908152602b602052604090205460ff165b80156125aa575080155b80156125b4575081155b1561263f576021541561263f576000805b6021548110156126225760408051602081018390529081018e90524260608201526080016040516020818303038152906040528051906020012060001c91506126108f836001612d4f565b8061261a81613f75565b9150506125c5565b50602154612631906001613f04565b61263b908d613f23565b9b50505b6126498b886130da565b9a50821561266957601654612669908e906001600160a01b031685612d4f565b8615612683576126838d3061267e8a876130da565b612d4f565b505050505050505b60285460ff1680156126b657506001600160a01b03851660009081526024602052604090205460ff16155b156126ec576027546126e185611a3d886001600160a01b031660009081526020819052604090205490565b11156126ec57600080fd5b6126f7868686612d4f565b6001600160a01b038616301480159061272857506001600160a01b0385166000908152602b602052604090205460ff165b15612736576127368661311c565b600754600160a01b900460ff1615801561275957506001600160a01b0386163014155b80156127735750602354601d546127709190613eca565b43115b1561278857612783601a546131cb565b43601d555b505050505050565b600081848411156127b45760405162461bcd60e51b8152600401610e1d9190613d47565b5060006127c18486613f23565b95945050505050565b6001600160a01b0382166000908152602b602052604090205460ff161515811515141561285f5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610e1d565b6001600160a01b0382166000818152602b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061294257612942613fa6565b6001600160a01b03928316602091820292909201015260175482519116908290600190811061297357612973613fa6565b6001600160a01b0392831660209182029290920101526006546129999130911684611e57565b600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156129e757600080fd5b505afa1580156129fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1f9190613a44565b6017546001600160a01b0390811691161415612aa95760065460185460405163791ac94760e01b81526001600160a01b039283169263791ac94792612a7292879260009288929116904290600401613e59565b600060405180830381600087803b158015612a8c57600080fd5b505af1158015612aa0573d6000803e3d6000fd5b50505050612b19565b600654601854604051635c11d79560e01b81526001600160a01b0392831692635c11d79592612ae692879260009288929116904290600401613e59565b600060405180830381600087803b158015612b0057600080fd5b505af1158015612b14573d6000803e3d6000fd5b505050505b81601354612b279190613f23565b6013555050565b6000612b3b826002611e15565b90506000612b4983836130da565b6017546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015612b9257600080fd5b505afa158015612ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bca9190613c53565b9050612bd68330613575565b6017546040516370a0823160e01b8152306004820152600091612c5e9184916001600160a01b0316906370a082319060240160206040518083038186803b158015612c2057600080fd5b505afa158015612c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c589190613c53565b906130da565b9050612c6a838261378b565b84601154612c789190613f23565b60115560408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b602a5460ff1615612ce25780601254612cdc9190613f23565b60125550565b6019546017546001600160a01b0390811691161415612d0a57612d058130613575565b612d13565b612d13816138e0565b80601254612cdc9190613f23565b60008183612d425760405162461bcd60e51b8152600401610e1d9190613d47565b5060006127c18486613ee2565b6001600160a01b038316612d755760405162461bcd60e51b8152600401610e1d90613e14565b6001600160a01b038216612d9b5760405162461bcd60e51b8152600401610e1d90613d9c565b612dd881604051806060016040528060268152602001613fe0602691396001600160a01b0386166000908152602081905260409020549190612790565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612e079082611d30565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611f6f565b60075460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac91600480820192606092909190829003018186803b158015612ea457600080fd5b505afa158015612eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edc9190613bf5565b506017546001600160701b039283169450911691506001600160a01b0316600030821015612f0b575082612f0e565b50815b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a082319060240160206040518083038186803b158015612f5357600080fd5b505afa158015612f67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8b9190613c53565b919091119695505050505050565b60075460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac91600480820192606092909190829003018186803b158015612fe557600080fd5b505afa158015612ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061301d9190613bf5565b506017546001600160701b039283169450911691506001600160a01b031660003082101561304c57508261304f565b50815b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a082319060240160206040518083038186803b15801561309457600080fd5b505afa1580156130a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130cc9190613c53565b909110159695505050505050565b6000611d8f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612790565b803b8015613128575050565b6001600160a01b0382166000908152602c602052604090205460ff1661158557602d80546001600160a01b0384166000818152602e60205260408120839055600183018455929092527f4a2cc91ee622da3bc833a54c37ffcb6f3ec23b7793efc5eaf5e71b7b406c5c060180546001600160a01b03191690911790556001600160a01b0382166000908152602c60205260409020805460ff191660011790555050565b6019546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561320f57600080fd5b505afa158015613223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132479190613c53565b602a5490915060ff161561327957613276601354612c58601254612c58601154866130da90919063ffffffff16565b90505b601e54819081101561328a57505050565b602d54806132985750505050565b6000805a905060005b86831080156132af57508381105b1561356c5783601c54106132c3576000601c555b6000613405600760009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561331657600080fd5b505afa15801561332a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334e9190613c53565b600754601c54602d8054612360936001600160a01b0316926370a082319291811061337b5761337b613fa6565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b1580156133c657600080fd5b505afa1580156133da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fe9190613c53565b8a90611d96565b905080861015613419575050505050505050565b801561352957602a5460ff16156134635761345e30602d601c548154811061344357613443613fa6565b6000918252602090912001546001600160a01b031683612d4f565b61351c565b601954601c54602d80546001600160a01b039093169263a9059cbb9290811061348e5761348e613fa6565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b1580156134e257600080fd5b505af11580156134f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061351a9190613bd8565b505b61352686826130da565b95505b61353e6135375a85906130da565b8590611d30565b93505a601c8054919450600061355383613f75565b9190505550818061356390613f75565b925050506132a1565b50505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106135aa576135aa613fa6565b6001600160a01b0392831660209182029290920101526017548251911690829060019081106135db576135db613fa6565b6001600160a01b0392831660209182029290920101526006546136019130911685611e57565b600654602254604051635c11d79560e01b81526001600160a01b0392831692635c11d7959261363e92889260009288929116904290600401613e59565b600060405180830381600087803b15801561365857600080fd5b505af115801561366c573d6000803e3d6000fd5b50506017546022546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a082319060240160206040518083038186803b1580156136ba57600080fd5b505afa1580156136ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136f29190613c53565b6017546022546040516323b872dd60e01b81526001600160a01b03918216600482015286821660248201526044810184905292935016906323b872dd90606401602060405180830381600087803b15801561374c57600080fd5b505af1158015613760573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137849190613bd8565b5050505050565b6006546137a39030906001600160a01b031684611e57565b60175460065460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b390604401602060405180830381600087803b1580156137f357600080fd5b505af1158015613807573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061382b9190613bd8565b5060065460175460185460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018690526064810185905260006084820181905260a482015290821660c48201524260e482015291169063e8e337009061010401606060405180830381600087803b1580156138a857600080fd5b505af11580156138bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137849190613c8e565b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061391757613917613fa6565b6001600160a01b03928316602091820292909201015260175482519116908290600190811061394857613948613fa6565b6001600160a01b03928316602091820292909201015260195482519116908290600290811061397957613979613fa6565b6001600160a01b03928316602091820292909201015260065461399f9130911684611e57565b600654604051635c11d79560e01b81526001600160a01b0390911690635c11d795906139d8908590600090869030904290600401613e59565b600060405180830381600087803b1580156139f257600080fd5b505af1925050508015613a03575060015b611585575050565b80516001600160701b0381168114613a2257600080fd5b919050565b600060208284031215613a3957600080fd5b8135611d8f81613fbc565b600060208284031215613a5657600080fd5b8151611d8f81613fbc565b60008060408385031215613a7457600080fd5b8235613a7f81613fbc565b91506020830135613a8f81613fbc565b809150509250929050565b600080600060608486031215613aaf57600080fd5b8335613aba81613fbc565b92506020840135613aca81613fbc565b929592945050506040919091013590565b60008060408385031215613aee57600080fd5b8235613af981613fbc565b91506020830135613a8f81613fd1565b60008060408385031215613b1c57600080fd5b8235613b2781613fbc565b946020939093013593505050565b600080600060408486031215613b4a57600080fd5b833567ffffffffffffffff80821115613b6257600080fd5b818601915086601f830112613b7657600080fd5b813581811115613b8557600080fd5b8760208260051b8501011115613b9a57600080fd5b60209283019550935050840135613bb081613fd1565b809150509250925092565b600060208284031215613bcd57600080fd5b8135611d8f81613fd1565b600060208284031215613bea57600080fd5b8151611d8f81613fd1565b600080600060608486031215613c0a57600080fd5b613c1384613a0b565b9250613c2160208501613a0b565b9150604084015163ffffffff81168114613bb057600080fd5b600060208284031215613c4c57600080fd5b5035919050565b600060208284031215613c6557600080fd5b5051919050565b60008060408385031215613c7f57600080fd5b50508035926020909101359150565b600080600060608486031215613ca357600080fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215613cd257600080fd5b5050823594602084013594506040840135936060013592509050565b6040808252810183905260008460608301825b86811015613d31578235613d1481613fbc565b6001600160a01b0316825260209283019290910190600101613d01565b5080925050508215156020830152949350505050565b600060208083528351808285015260005b81811015613d7457858101830151858201604001528201613d58565b81811115613d86576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613ea95784516001600160a01b031683529383019391830191600101613e84565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613edd57613edd613f90565b500190565b600082613eff57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613f1e57613f1e613f90565b500290565b600082821015613f3557613f35613f90565b500390565b600181811c90821680613f4e57607f821691505b60208210811415613f6f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613f8957613f89613f90565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611cd257600080fd5b8015158114611cd257600080fdfe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ded3310d9a1b789f40a3aab5fa44673bce6c36d5b999e32b66c9aca08f5ee13f64736f6c63430008070033608060405234801561001057600080fd5b506040516101e63803806101e683398101604081905261002f916100d9565b600080546001600160a01b03199081166001600160a01b038416908117909255600180543392168217905560405163095ea7b360e01b81526004810191909152600019602482015263095ea7b390604401602060405180830381600087803b15801561009a57600080fd5b505af11580156100ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100d29190610109565b505061012b565b6000602082840312156100eb57600080fd5b81516001600160a01b038116811461010257600080fd5b9392505050565b60006020828403121561011b57600080fd5b8151801515811461010257600080fd5b60ad806101396000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80632f48ab7d1460375780638da5cb5b146065575b600080fd5b6000546049906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6001546049906001600160a01b03168156fea2646970667358221220acecde831693f01304c5f70b47c470fdb2de671ccccff40a4f9d10c47394c7a764736f6c6343000807003300000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000775f05a07400000000000000000000000000000000000000000000000000000000000000000120000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000f0cd778bad265cd8d159ce802ee32cdfc661626b000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000009bb69e4ddda0a1865fec3ba828787e6f886750f7000000000000000000000000000000000000000000000000000000000000000b546f6b656e20546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025454000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106104405760003560e01c80638da5cb5b11610234578063c7f063d31161012e578063e5c2b0a6116100b6578063f2fde38b1161007a578063f2fde38b14610cbe578063f637434214610cde578063f832679514610cf4578063f84ba65d14610d0a578063f872858a14610d2a57600080fd5b8063e5c2b0a614610c28578063eb671e9114610c48578063ec28438a14610c68578063f11a24d314610c88578063f1d5f51714610c9e57600080fd5b8063d2a8b440116100fd578063d2a8b44014610b81578063dd62ed3e14610b96578063e2f4560514610bdc578063e32759cf14610bf2578063e4bf1bed14610c0857600080fd5b8063c7f063d314610afb578063c816841b14610b1b578063c867d60b14610b3b578063cfe0e61914610b6b57600080fd5b8063ab377daa116101bc578063bfc3137e11610180578063bfc3137e14610a65578063c024666814610a7b578063c0973eed14610a9b578063c492f04614610abb578063c49b9a8014610adb57600080fd5b8063ab377daa146109b5578063afa4f3b2146109d5578063b340a954146109f5578063b62496f514610a15578063bba30f8f14610a4557600080fd5b80639a7a23d6116102035780639a7a23d61461091f5780639ab4a4451461093f5780639c1b8af51461095f578063a457c2d714610975578063a9059cbb1461099557600080fd5b80638da5cb5b146108bb5780638de743b3146108de57806392136913146108f457806395d89b411461090a57600080fd5b806341c0e1b51161034557806370a08231116102cd578063807c2d9c11610291578063807c2d9c1461081b57806385141a7714610831578063871c128d14610851578063892400f3146108715780638b42507f1461088b57600080fd5b806370a0823114610784578063715018a6146107ba57806379dc880c146107cf5780637bce5a04146107ef5780637d1db4a51461080557600080fd5b8063557ed1ba11610314578063557ed1ba146106fb5780635d098b381461070e578063615223dc1461072e578063621823e61461074e57806365b8dbc01461076457600080fd5b806341c0e1b51461067c5780634412478b146106925780634a74bb02146106a85780634fbee193146106c257600080fd5b806324942a04116103c8578063395093511161039757806339509351146105f05780633b1cd187146106105780633df4ddf4146106265780633e0e24fa1461063c5780634144d9e41461065c57600080fd5b806324942a04146105825780632563ae8314610598578063313ce567146105b85780633926876d146105da57600080fd5b8063095ea7b31161040f578063095ea7b3146104c35780631694505e146104f357806318160ddd1461052b5780632198cf6c1461054057806323b872dd1461056257600080fd5b806302df64d61461044c57806305d52b9c1461047557806306fdde031461048b57806308b2a12c146104ad57600080fd5b3661044757005b600080fd5b34801561045857600080fd5b5061046260095481565b6040519081526020015b60405180910390f35b34801561048157600080fd5b50610462601e5481565b34801561049757600080fd5b506104a0610d44565b60405161046c9190613d47565b3480156104b957600080fd5b50610462600a5481565b3480156104cf57600080fd5b506104e36104de366004613b09565b610dd6565b604051901515815260200161046c565b3480156104ff57600080fd5b50600654610513906001600160a01b031681565b6040516001600160a01b03909116815260200161046c565b34801561053757600080fd5b50600254610462565b34801561054c57600080fd5b5061056061055b366004613adb565b610ded565b005b34801561056e57600080fd5b506104e361057d366004613a9a565b610e51565b34801561058e57600080fd5b5061046260105481565b3480156105a457600080fd5b506105606105b3366004613bbb565b610eba565b3480156105c457600080fd5b5060055460405160ff909116815260200161046c565b3480156105e657600080fd5b5061046260125481565b3480156105fc57600080fd5b506104e361060b366004613b09565b610efd565b34801561061c57600080fd5b5061046260145481565b34801561063257600080fd5b50610462601f5481565b34801561064857600080fd5b50610560610657366004613c6c565b610f33565b34801561066857600080fd5b50601854610513906001600160a01b031681565b34801561068857600080fd5b5061046260205481565b34801561069e57600080fd5b50610462601d5481565b3480156106b457600080fd5b50601b546104e39060ff1681565b3480156106ce57600080fd5b506104e36106dd366004613a27565b6001600160a01b031660009081526029602052604090205460ff1690565b34801561070757600080fd5b5042610462565b34801561071a57600080fd5b50610560610729366004613a27565b610f6e565b34801561073a57600080fd5b50610560610749366004613a27565b610fd8565b34801561075a57600080fd5b5061046260235481565b34801561077057600080fd5b5061056061077f366004613a27565b611058565b34801561079057600080fd5b5061046261079f366004613a27565b6001600160a01b031660009081526020819052604090205490565b3480156107c657600080fd5b50610560611322565b3480156107db57600080fd5b506105606107ea366004613c3a565b61135e565b3480156107fb57600080fd5b50610462600d5481565b34801561081157600080fd5b5061046260265481565b34801561082757600080fd5b5061046260275481565b34801561083d57600080fd5b50601654610513906001600160a01b031681565b34801561085d57600080fd5b5061056061086c366004613c3a565b6113e0565b34801561087d57600080fd5b50602a546104e39060ff1681565b34801561089757600080fd5b506104e36108a6366004613a27565b60256020526000908152604090205460ff1681565b3480156108c757600080fd5b5060055461010090046001600160a01b0316610513565b3480156108ea57600080fd5b50610462600f5481565b34801561090057600080fd5b50610462600e5481565b34801561091657600080fd5b506104a06114aa565b34801561092b57600080fd5b5061056061093a366004613adb565b6114b9565b34801561094b57600080fd5b50601754610513906001600160a01b031681565b34801561096b57600080fd5b50610462601a5481565b34801561098157600080fd5b506104e3610990366004613b09565b611589565b3480156109a157600080fd5b506104e36109b0366004613b09565b6115d8565b3480156109c157600080fd5b506105136109d0366004613c3a565b6115e5565b3480156109e157600080fd5b506105606109f0366004613c3a565b61160f565b348015610a0157600080fd5b50602254610513906001600160a01b031681565b348015610a2157600080fd5b506104e3610a30366004613a27565b602b6020526000908152604090205460ff1681565b348015610a5157600080fd5b50610560610a60366004613c3a565b611644565b348015610a7157600080fd5b5061046260155481565b348015610a8757600080fd5b50610560610a96366004613adb565b6116c6565b348015610aa757600080fd5b50601954610513906001600160a01b031681565b348015610ac757600080fd5b50610560610ad6366004613b35565b61177b565b348015610ae757600080fd5b50610560610af6366004613bbb565b61185d565b348015610b0757600080fd5b50610560610b16366004613c3a565b6118a0565b348015610b2757600080fd5b50600754610513906001600160a01b031681565b348015610b4757600080fd5b506104e3610b56366004613a27565b60246020526000908152604090205460ff1681565b348015610b7757600080fd5b5061046260135481565b348015610b8d57600080fd5b5061056061191d565b348015610ba257600080fd5b50610462610bb1366004613a61565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610be857600080fd5b5061046260085481565b348015610bfe57600080fd5b5061046260215481565b348015610c1457600080fd5b50610560610c23366004613cbc565b6119fb565b348015610c3457600080fd5b50610560610c43366004613c3a565b611aa8565b348015610c5457600080fd5b50610560610c63366004613cbc565b611b23565b348015610c7457600080fd5b50610560610c83366004613c3a565b611bca565b348015610c9457600080fd5b50610462600b5481565b348015610caa57600080fd5b50610560610cb9366004613c3a565b611bff565b348015610cca57600080fd5b50610560610cd9366004613a27565b611c34565b348015610cea57600080fd5b50610462600c5481565b348015610d0057600080fd5b5061046260115481565b348015610d1657600080fd5b50610560610d25366004613adb565b611cd5565b348015610d3657600080fd5b506028546104e39060ff1681565b606060038054610d5390613f3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7f90613f3a565b8015610dcc5780601f10610da157610100808354040283529160200191610dcc565b820191906000526020600020905b815481529060010190602001808311610daf57829003601f168201915b5050505050905090565b6000610de3338484611e57565b5060015b92915050565b6005546001600160a01b03610100909104163314610e265760405162461bcd60e51b8152600401610e1d90613ddf565b60405180910390fd5b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6000610e5e848484611f7c565b610eb08433610eab85604051806060016040528060288152602001614006602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612790565b611e57565b5060019392505050565b6005546001600160a01b03610100909104163314610eea5760405162461bcd60e51b8152600401610e1d90613ddf565b6028805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610de3918590610eab9086611d30565b6005546001600160a01b03610100909104163314610f635760405162461bcd60e51b8152600401610e1d90613ddf565b601e91909155602355565b6005546001600160a01b03610100909104163314610f9e5760405162461bcd60e51b8152600401610e1d90613ddf565b601880546001600160a01b039092166001600160a01b0319909216821790556000908152602960205260409020805460ff19166001179055565b6005546001600160a01b036101009091041633146110085760405162461bcd60e51b8152600401610e1d90613ddf565b6001600160a01b03811630141561102b57602a805460ff19166001179055611036565b602a805460ff191690555b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b036101009091041633146110885760405162461bcd60e51b8152600401610e1d90613ddf565b6006546001600160a01b03828116911614156110f25760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610e1d565b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a0155916004808301926020929190829003018186803b15801561118457600080fd5b505afa158015611198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bc9190613a44565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561121957600080fd5b505afa15801561122d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112519190613a44565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561129957600080fd5b505af11580156112ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d19190613a44565b600780546001600160a01b0319166001600160a01b03831617905590506112f98160016127ca565b50506007546001600160a01b03166000908152602460205260409020805460ff19166001179055565b6005546001600160a01b036101009091041633146113525760405162461bcd60e51b8152600401610e1d90613ddf565b61135c60006128b3565b565b6005546001600160a01b0361010090910416331461138e5760405162461bcd60e51b8152600401610e1d90613ddf565b60198111156113db5760405162461bcd60e51b8152602060048201526019602482015278546f74616c2073656c20666565206973206f7665722032352560381b6044820152606401610e1d565b601455565b6005546001600160a01b036101009091041633146114105760405162461bcd60e51b8152600401610e1d90613ddf565b601a548114156114775760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460448201526b6f2073616d652076616c756560a01b6064820152608401610e1d565b601a5460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601a55565b606060048054610d5390613f3a565b6005546001600160a01b036101009091041633146114e95760405162461bcd60e51b8152600401610e1d90613ddf565b6007546001600160a01b038381169116141561157b5760405162461bcd60e51b815260206004820152604560248201527f5468652050616e63616b655377617020706169722063616e6e6f74206265207260448201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572606482015264506169727360d81b608482015260a401610e1d565b61158582826127ca565b5050565b6000610de33384610eab8560405180606001604052806025815260200161402e602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612790565b6000610de3338484611f7c565b602d81815481106115f557600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b0361010090910416331461163f5760405162461bcd60e51b8152600401610e1d90613ddf565b600855565b6005546001600160a01b036101009091041633146116745760405162461bcd60e51b8152600401610e1d90613ddf565b60198111156116c15760405162461bcd60e51b8152602060048201526019602482015278546f74616c2073656c20666565206973206f7665722032352560381b6044820152606401610e1d565b601555565b6005546001600160a01b036101009091041633146116f65760405162461bcd60e51b8152600401610e1d90613ddf565b6001600160a01b03821660009081526029602052604090205460ff16151581151514611585576001600160a01b038216600081815260296020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b036101009091041633146117ab5760405162461bcd60e51b8152600401610e1d90613ddf565b60005b8281101561181c5781602960008686858181106117cd576117cd613fa6565b90506020020160208101906117e29190613a27565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061181481613f75565b9150506117ae565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b3583838360405161185093929190613cee565b60405180910390a1505050565b6005546001600160a01b0361010090910416331461188d5760405162461bcd60e51b8152600401610e1d90613ddf565b601b805460ff1916911515919091179055565b6005546001600160a01b036101009091041633146118d05760405162461bcd60e51b8152600401610e1d90613ddf565b60648111156119185760405162461bcd60e51b815260206004820152601460248201527306e657756616c7565206d757374203c3d203130360641b6044820152606401610e1d565b602055565b6005546001600160a01b0361010090910416331461194d5760405162461bcd60e51b8152600401610e1d90613ddf565b306000908152602081905260409020548061199f5760405162461bcd60e51b8152602060048201526012602482015271746f6b656e2062616c616e6365207a65726f60701b6044820152606401610e1d565b6007805460ff60a01b1916600160a01b179055601354156119c5576119c560135461290d565b601154156119d8576119d8601154612b2e565b601254156119eb576119eb601254612cc3565b506007805460ff60a01b19169055565b6005546001600160a01b03610100909104163314611a2b5760405162461bcd60e51b8152600401610e1d90613ddf565b6064611a4382611a3d8581888a611d30565b90611d30565b1115611a915760405162461bcd60e51b815260206004820152601a60248201527f546f74616c2062757920666565206973206f76657220313030250000000000006044820152606401610e1d565b600992909255600b92909255600d91909155600f55565b6005546001600160a01b03610100909104163314611ad85760405162461bcd60e51b8152600401610e1d90613ddf565b6003811115611b1e5760405162461bcd60e51b81526020600482015260126024820152716e657756616c7565206d757374203c3d203360701b6044820152606401610e1d565b602155565b6005546001600160a01b03610100909104163314611b535760405162461bcd60e51b8152600401610e1d90613ddf565b6064611b6582611a3d8581888a611d30565b1115611bb35760405162461bcd60e51b815260206004820152601a60248201527f546f74616c2073656c20666565206973206f76657220313030250000000000006044820152606401610e1d565b600a92909255600c92909255600e91909155601055565b6005546001600160a01b03610100909104163314611bfa5760405162461bcd60e51b8152600401610e1d90613ddf565b602655565b6005546001600160a01b03610100909104163314611c2f5760405162461bcd60e51b8152600401610e1d90613ddf565b602755565b6005546001600160a01b03610100909104163314611c645760405162461bcd60e51b8152600401610e1d90613ddf565b6001600160a01b038116611cc95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e1d565b611cd2816128b3565b50565b6005546001600160a01b03610100909104163314611d055760405162461bcd60e51b8152600401610e1d90613ddf565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b600080611d3d8385613eca565b905083811015611d8f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e1d565b9392505050565b600082611da557506000610de7565b6000611db18385613f04565b905082611dbe8583613ee2565b14611d8f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e1d565b6000611d8f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d21565b6001600160a01b038316611eb95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e1d565b6001600160a01b038216611f1a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e1d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611fa25760405162461bcd60e51b8152600401610e1d90613e14565b6001600160a01b038216611fc85760405162461bcd60e51b8152600401610e1d90613d9c565b80611fde57611fd983836000612d4f565b505050565b6001600160a01b0382166000908152602b602052604090205460ff16801561201e57506007546001600160a01b0316600090815260208190526040902054155b156120285743601f555b6001600160a01b03831660009081526029602052604090205460ff1615801561206a57506001600160a01b03821660009081526029602052604090205460ff16155b156120c2576001600160a01b0383166000908152602b602052604090205460ff1680156120a55750602054601f546120a29190613eca565b43105b156120c257601854611fd99084906001600160a01b031683612d4f565b6001600160a01b03831660009081526025602052604090205460ff1615801561210457506001600160a01b03821660009081526025602052604090205460ff16155b1561216c5760265481111561216c5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610e1d565b306000908152602081905260409020546008548110801590819061219a5750600754600160a01b900460ff16155b80156121bf57506001600160a01b0385166000908152602b602052604090205460ff16155b80156121de57506005546001600160a01b038681166101009092041614155b80156121fd57506005546001600160a01b038581166101009092041614155b801561220b5750601b5460ff165b801561221c575061221a612e58565b155b1561227b576007805460ff60a01b1916600160a01b179055601354156122475761224760135461290d565b6011541561225a5761225a601154612b2e565b6012541561226d5761226d601254612cc3565b6007805460ff60a01b191690555b6007546001600160a01b03861660009081526029602052604090205460ff600160a01b9092048216159116806122c957506001600160a01b03851660009081526029602052604090205460ff165b156122d2575060005b801561268b576001600160a01b0385166000908152602b602052604081205481908190819081908190819060ff16156123145761230d612e58565b9050612340565b6001600160a01b038d166000908152602b602052604090205460ff16156123405761233d612f99565b91505b80156123895761236660646123606014548e611d9690919063ffffffff16565b90611e15565b9450846012600082825461237a9190613eca565b92505081905550849650612561565b81156123a95761236660646123606015548e611d9690919063ffffffff16565b6001600160a01b038d166000908152602b602052604090205460ff1615612487576123e46064612360600b548e611d9690919063ffffffff16565b955085601160008282546123f89190613eca565b909155505060095461241290606490612360908e90611d96565b945084601260008282546124269190613eca565b9091555050600d5461244090606490612360908e90611d96565b935083601360008282546124549190613eca565b9091555050600f5461246e90606490612360908e90611d96565b925061248083611a3d86818a8a611d30565b9650612561565b6001600160a01b038c166000908152602b602052604090205460ff1615612561576124c26064612360600c548e611d9690919063ffffffff16565b955085601160008282546124d69190613eca565b9091555050600a546124f090606490612360908e90611d96565b945084601260008282546125049190613eca565b9091555050600e5461251e90606490612360908e90611d96565b935083601360008282546125329190613eca565b909155505060105461254c90606490612360908e90611d96565b925061255e83611a3d86818a8a611d30565b96505b6001600160a01b038d166000908152602b602052604090205460ff16806125a057506001600160a01b038c166000908152602b602052604090205460ff165b80156125aa575080155b80156125b4575081155b1561263f576021541561263f576000805b6021548110156126225760408051602081018390529081018e90524260608201526080016040516020818303038152906040528051906020012060001c91506126108f836001612d4f565b8061261a81613f75565b9150506125c5565b50602154612631906001613f04565b61263b908d613f23565b9b50505b6126498b886130da565b9a50821561266957601654612669908e906001600160a01b031685612d4f565b8615612683576126838d3061267e8a876130da565b612d4f565b505050505050505b60285460ff1680156126b657506001600160a01b03851660009081526024602052604090205460ff16155b156126ec576027546126e185611a3d886001600160a01b031660009081526020819052604090205490565b11156126ec57600080fd5b6126f7868686612d4f565b6001600160a01b038616301480159061272857506001600160a01b0385166000908152602b602052604090205460ff165b15612736576127368661311c565b600754600160a01b900460ff1615801561275957506001600160a01b0386163014155b80156127735750602354601d546127709190613eca565b43115b1561278857612783601a546131cb565b43601d555b505050505050565b600081848411156127b45760405162461bcd60e51b8152600401610e1d9190613d47565b5060006127c18486613f23565b95945050505050565b6001600160a01b0382166000908152602b602052604090205460ff161515811515141561285f5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610e1d565b6001600160a01b0382166000818152602b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061294257612942613fa6565b6001600160a01b03928316602091820292909201015260175482519116908290600190811061297357612973613fa6565b6001600160a01b0392831660209182029290920101526006546129999130911684611e57565b600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156129e757600080fd5b505afa1580156129fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1f9190613a44565b6017546001600160a01b0390811691161415612aa95760065460185460405163791ac94760e01b81526001600160a01b039283169263791ac94792612a7292879260009288929116904290600401613e59565b600060405180830381600087803b158015612a8c57600080fd5b505af1158015612aa0573d6000803e3d6000fd5b50505050612b19565b600654601854604051635c11d79560e01b81526001600160a01b0392831692635c11d79592612ae692879260009288929116904290600401613e59565b600060405180830381600087803b158015612b0057600080fd5b505af1158015612b14573d6000803e3d6000fd5b505050505b81601354612b279190613f23565b6013555050565b6000612b3b826002611e15565b90506000612b4983836130da565b6017546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015612b9257600080fd5b505afa158015612ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bca9190613c53565b9050612bd68330613575565b6017546040516370a0823160e01b8152306004820152600091612c5e9184916001600160a01b0316906370a082319060240160206040518083038186803b158015612c2057600080fd5b505afa158015612c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c589190613c53565b906130da565b9050612c6a838261378b565b84601154612c789190613f23565b60115560408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b602a5460ff1615612ce25780601254612cdc9190613f23565b60125550565b6019546017546001600160a01b0390811691161415612d0a57612d058130613575565b612d13565b612d13816138e0565b80601254612cdc9190613f23565b60008183612d425760405162461bcd60e51b8152600401610e1d9190613d47565b5060006127c18486613ee2565b6001600160a01b038316612d755760405162461bcd60e51b8152600401610e1d90613e14565b6001600160a01b038216612d9b5760405162461bcd60e51b8152600401610e1d90613d9c565b612dd881604051806060016040528060268152602001613fe0602691396001600160a01b0386166000908152602081905260409020549190612790565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612e079082611d30565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611f6f565b60075460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac91600480820192606092909190829003018186803b158015612ea457600080fd5b505afa158015612eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edc9190613bf5565b506017546001600160701b039283169450911691506001600160a01b0316600030821015612f0b575082612f0e565b50815b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a082319060240160206040518083038186803b158015612f5357600080fd5b505afa158015612f67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8b9190613c53565b919091119695505050505050565b60075460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac91600480820192606092909190829003018186803b158015612fe557600080fd5b505afa158015612ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061301d9190613bf5565b506017546001600160701b039283169450911691506001600160a01b031660003082101561304c57508261304f565b50815b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a082319060240160206040518083038186803b15801561309457600080fd5b505afa1580156130a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130cc9190613c53565b909110159695505050505050565b6000611d8f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612790565b803b8015613128575050565b6001600160a01b0382166000908152602c602052604090205460ff1661158557602d80546001600160a01b0384166000818152602e60205260408120839055600183018455929092527f4a2cc91ee622da3bc833a54c37ffcb6f3ec23b7793efc5eaf5e71b7b406c5c060180546001600160a01b03191690911790556001600160a01b0382166000908152602c60205260409020805460ff191660011790555050565b6019546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561320f57600080fd5b505afa158015613223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132479190613c53565b602a5490915060ff161561327957613276601354612c58601254612c58601154866130da90919063ffffffff16565b90505b601e54819081101561328a57505050565b602d54806132985750505050565b6000805a905060005b86831080156132af57508381105b1561356c5783601c54106132c3576000601c555b6000613405600760009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561331657600080fd5b505afa15801561332a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334e9190613c53565b600754601c54602d8054612360936001600160a01b0316926370a082319291811061337b5761337b613fa6565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b1580156133c657600080fd5b505afa1580156133da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fe9190613c53565b8a90611d96565b905080861015613419575050505050505050565b801561352957602a5460ff16156134635761345e30602d601c548154811061344357613443613fa6565b6000918252602090912001546001600160a01b031683612d4f565b61351c565b601954601c54602d80546001600160a01b039093169263a9059cbb9290811061348e5761348e613fa6565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b1580156134e257600080fd5b505af11580156134f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061351a9190613bd8565b505b61352686826130da565b95505b61353e6135375a85906130da565b8590611d30565b93505a601c8054919450600061355383613f75565b9190505550818061356390613f75565b925050506132a1565b50505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106135aa576135aa613fa6565b6001600160a01b0392831660209182029290920101526017548251911690829060019081106135db576135db613fa6565b6001600160a01b0392831660209182029290920101526006546136019130911685611e57565b600654602254604051635c11d79560e01b81526001600160a01b0392831692635c11d7959261363e92889260009288929116904290600401613e59565b600060405180830381600087803b15801561365857600080fd5b505af115801561366c573d6000803e3d6000fd5b50506017546022546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a082319060240160206040518083038186803b1580156136ba57600080fd5b505afa1580156136ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136f29190613c53565b6017546022546040516323b872dd60e01b81526001600160a01b03918216600482015286821660248201526044810184905292935016906323b872dd90606401602060405180830381600087803b15801561374c57600080fd5b505af1158015613760573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137849190613bd8565b5050505050565b6006546137a39030906001600160a01b031684611e57565b60175460065460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b390604401602060405180830381600087803b1580156137f357600080fd5b505af1158015613807573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061382b9190613bd8565b5060065460175460185460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018690526064810185905260006084820181905260a482015290821660c48201524260e482015291169063e8e337009061010401606060405180830381600087803b1580156138a857600080fd5b505af11580156138bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137849190613c8e565b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061391757613917613fa6565b6001600160a01b03928316602091820292909201015260175482519116908290600190811061394857613948613fa6565b6001600160a01b03928316602091820292909201015260195482519116908290600290811061397957613979613fa6565b6001600160a01b03928316602091820292909201015260065461399f9130911684611e57565b600654604051635c11d79560e01b81526001600160a01b0390911690635c11d795906139d8908590600090869030904290600401613e59565b600060405180830381600087803b1580156139f257600080fd5b505af1925050508015613a03575060015b611585575050565b80516001600160701b0381168114613a2257600080fd5b919050565b600060208284031215613a3957600080fd5b8135611d8f81613fbc565b600060208284031215613a5657600080fd5b8151611d8f81613fbc565b60008060408385031215613a7457600080fd5b8235613a7f81613fbc565b91506020830135613a8f81613fbc565b809150509250929050565b600080600060608486031215613aaf57600080fd5b8335613aba81613fbc565b92506020840135613aca81613fbc565b929592945050506040919091013590565b60008060408385031215613aee57600080fd5b8235613af981613fbc565b91506020830135613a8f81613fd1565b60008060408385031215613b1c57600080fd5b8235613b2781613fbc565b946020939093013593505050565b600080600060408486031215613b4a57600080fd5b833567ffffffffffffffff80821115613b6257600080fd5b818601915086601f830112613b7657600080fd5b813581811115613b8557600080fd5b8760208260051b8501011115613b9a57600080fd5b60209283019550935050840135613bb081613fd1565b809150509250925092565b600060208284031215613bcd57600080fd5b8135611d8f81613fd1565b600060208284031215613bea57600080fd5b8151611d8f81613fd1565b600080600060608486031215613c0a57600080fd5b613c1384613a0b565b9250613c2160208501613a0b565b9150604084015163ffffffff81168114613bb057600080fd5b600060208284031215613c4c57600080fd5b5035919050565b600060208284031215613c6557600080fd5b5051919050565b60008060408385031215613c7f57600080fd5b50508035926020909101359150565b600080600060608486031215613ca357600080fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215613cd257600080fd5b5050823594602084013594506040840135936060013592509050565b6040808252810183905260008460608301825b86811015613d31578235613d1481613fbc565b6001600160a01b0316825260209283019290910190600101613d01565b5080925050508215156020830152949350505050565b600060208083528351808285015260005b81811015613d7457858101830151858201604001528201613d58565b81811115613d86576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613ea95784516001600160a01b031683529383019391830191600101613e84565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613edd57613edd613f90565b500190565b600082613eff57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613f1e57613f1e613f90565b500290565b600082821015613f3557613f35613f90565b500390565b600181811c90821680613f4e57607f821691505b60208210811415613f6f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613f8957613f89613f90565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611cd257600080fd5b8015158114611cd257600080fdfe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ded3310d9a1b789f40a3aab5fa44673bce6c36d5b999e32b66c9aca08f5ee13f64736f6c63430008070033

Deployed Bytecode Sourcemap

15422:24289:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15653:33;;;;;;;;;;;;;;;;;;;17410:25:1;;;17398:2;17383:18;15653:33:0;;;;;;;;16505:30;;;;;;;;;;;;;;;;4953:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15693:34::-;;;;;;;;;;;;;;;;7127:169;;;;;;;;;;-1:-1:-1;7127:169:0;;;;;:::i;:::-;;:::i;:::-;;;8792:14:1;;8785:22;8767:41;;8755:2;8740:18;7127:169:0;8627:187:1;15497:41:0;;;;;;;;;;-1:-1:-1;15497:41:0;;;;-1:-1:-1;;;;;15497:41:0;;;;;;-1:-1:-1;;;;;6051:32:1;;;6033:51;;6021:2;6006:18;15497:41:0;5887:203:1;6080:108:0;;;;;;;;;;-1:-1:-1;6168:12:0;;6080:108;;24800:135;;;;;;;;;;-1:-1:-1;24800:135:0;;;;;:::i;:::-;;:::i;:::-;;7778:355;;;;;;;;;;-1:-1:-1;7778:355:0;;;;;:::i;:::-;;:::i;15922:26::-;;;;;;;;;;;;;;;;22314:113;;;;;;;;;;-1:-1:-1;22314:113:0;;;;;:::i;:::-;;:::i;5915:100::-;;;;;;;;;;-1:-1:-1;5998:9:0;;5915:100;;5998:9;;;;18897:36:1;;18885:2;18870:18;5915:100:0;18755:184:1;15997:36:0;;;;;;;;;;;;;;;;8542:218;;;;;;;;;;-1:-1:-1;8542:218:0;;;;;:::i;:::-;;:::i;16082:30::-;;;;;;;;;;;;;;;;16542:20;;;;;;;;;;;;;;;;26894:175;;;;;;;;;;-1:-1:-1;26894:175:0;;;;;:::i;:::-;;:::i;16273:38::-;;;;;;;;;;-1:-1:-1;16273:38:0;;;;-1:-1:-1;;;;;16273:38:0;;;16569:23;;;;;;;;;;;;;;;;16466:32;;;;;;;;;;;;;;;;16392:40;;;;;;;;;;-1:-1:-1;16392:40:0;;;;;;;;24065:126;;;;;;;;;;-1:-1:-1;24065:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;24155:28:0;24131:4;24155:28;;;:19;:28;;;;;;;;;24065:126;1090:90;;;;;;;;;;-1:-1:-1;1157:15:0;1090:90;;23012:183;;;;;;;;;;-1:-1:-1;23012:183:0;;;;;:::i;:::-;;:::i;25198:230::-;;;;;;;;;;-1:-1:-1;25198:230:0;;;;;:::i;:::-;;:::i;16673:42::-;;;;;;;;;;;;;;;;21702:606;;;;;;;;;;-1:-1:-1;21702:606:0;;;;;:::i;:::-;;:::i;6251:127::-;;;;;;;;;;-1:-1:-1;6251:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;6352:18:0;6325:7;6352:18;;;;;;;;;;;;6251:127;770:103;;;;;;;;;;;;;:::i;26556:158::-;;;;;;;;;;-1:-1:-1;26556:158:0;;;;;:::i;:::-;;:::i;15813:30::-;;;;;;;;;;;;;;;;16838:27;;;;;;;;;;;;;;;;16872:25;;;;;;;;;;;;;;;;16163:70;;;;;;;;;;-1:-1:-1;16163:70:0;;;;-1:-1:-1;;;;;16163:70:0;;;23779:276;;;;;;;;;;-1:-1:-1;23779:276:0;;;;;:::i;:::-;;:::i;17116:24::-;;;;;;;;;;-1:-1:-1;17116:24:0;;;;;;;;16781:48;;;;;;;;;;-1:-1:-1;16781:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;547:87;;;;;;;;;;-1:-1:-1;620:6:0;;;;;-1:-1:-1;;;;;620:6:0;547:87;;15890:25;;;;;;;;;;;;;;;;15850:31;;;;;;;;;;;;;;;;5172:104;;;;;;;;;;;;;:::i;23203:252::-;;;;;;;;;;-1:-1:-1;23203:252:0;;;;;:::i;:::-;;:::i;16240:26::-;;;;;;;;;;-1:-1:-1;16240:26:0;;;;-1:-1:-1;;;;;16240:26:0;;;16354:31;;;;;;;;;;;;;;;;9263:269;;;;;;;;;;-1:-1:-1;9263:269:0;;;;;:::i;:::-;;:::i;6591:175::-;;;;;;;;;;-1:-1:-1;6591:175:0;;;;;:::i;:::-;;:::i;17412:29::-;;;;;;;;;;-1:-1:-1;17412:29:0;;;;;:::i;:::-;;:::i;25080:110::-;;;;;;;;;;-1:-1:-1;25080:110:0;;;;;:::i;:::-;;:::i;16633:33::-;;;;;;;;;;-1:-1:-1;16633:33:0;;;;-1:-1:-1;;;;;16633:33:0;;;17296:57;;;;;;;;;;-1:-1:-1;17296:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26722:164;;;;;;;;;;-1:-1:-1;26722:164:0;;;;;:::i;:::-;;:::i;16119:33::-;;;;;;;;;;;;;;;;22435:258;;;;;;;;;;-1:-1:-1;22435:258:0;;;;;:::i;:::-;;:::i;16318:29::-;;;;;;;;;;-1:-1:-1;16318:29:0;;;;-1:-1:-1;;;;;16318:29:0;;;22701:305;;;;;;;;;;-1:-1:-1;22701:305:0;;;;;:::i;:::-;;:::i;24675:117::-;;;;;;;;;;-1:-1:-1;24675:117:0;;;;;:::i;:::-;;:::i;26403:145::-;;;;;;;;;;-1:-1:-1;26403:145:0;;;;;:::i;:::-;;:::i;15545:27::-;;;;;;;;;;-1:-1:-1;15545:27:0;;;;-1:-1:-1;;;;;15545:27:0;;;16722:52;;;;;;;;;;-1:-1:-1;16722:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16040:33;;;;;;;;;;;;;;;;24199:468;;;;;;;;;;;;;:::i;6829:151::-;;;;;;;;;;-1:-1:-1;6829:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;6945:18:0;;;6918:7;6945:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6829:151;15611:33;;;;;;;;;;;;;;;;16599:27;;;;;;;;;;;;;;;;25436:393;;;;;;;;;;-1:-1:-1;25436:393:0;;;;;:::i;:::-;;:::i;26238:157::-;;;;;;;;;;-1:-1:-1;26238:157:0;;;;;:::i;:::-;;:::i;25837:395::-;;;;;;;;;;-1:-1:-1;25837:395:0;;;;;:::i;:::-;;:::i;27077:111::-;;;;;;;;;;-1:-1:-1;27077:111:0;;;;;:::i;:::-;;:::i;15736:30::-;;;;;;;;;;;;;;;;27194:102;;;;;;;;;;-1:-1:-1;27194:102:0;;;;;:::i;:::-;;:::i;881:201::-;;;;;;;;;;-1:-1:-1;881:201:0;;;;;:::i;:::-;;:::i;15773:31::-;;;;;;;;;;;;;;;;15957:33;;;;;;;;;;;;;;;;24943:127;;;;;;;;;;-1:-1:-1;24943:127:0;;;;;:::i;:::-;;:::i;16904:35::-;;;;;;;;;;-1:-1:-1;16904:35:0;;;;;;;;4953:100;5007:13;5040:5;5033:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4953:100;:::o;7127:169::-;7210:4;7227:39;173:10;7250:7;7259:6;7227:8;:39::i;:::-;-1:-1:-1;7284:4:0;7127:169;;;;;:::o;24800:135::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;24891:27:0;;;::::1;;::::0;;;:19:::1;:27;::::0;;;;:36;;-1:-1:-1;;24891:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24800:135::o;7778:355::-;7918:4;7935:36;7945:6;7953:9;7964:6;7935:9;:36::i;:::-;7982:121;7991:6;173:10;8013:89;8051:6;8013:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8013:19:0;;;;;;:11;:19;;;;;;;;173:10;8013:33;;;;;;;;;;:37;:89::i;:::-;7982:8;:121::i;:::-;-1:-1:-1;8121:4:0;7778:355;;;;;:::o;22314:113::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;22392:16:::1;:27:::0;;-1:-1:-1;;22392:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22314:113::o;8542:218::-;173:10;8630:4;8679:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8679:34:0;;;;;;;;;;8630:4;;8647:83;;8670:7;;8679:50;;8718:10;8679:38;:50::i;26894:175::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;26986:15:::1;:30:::0;;;;27027:22:::1;:34:::0;26894:175::o;23012:183::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;23093:23:::1;:32:::0;;-1:-1:-1;;;;;23093:32:0;;::::1;-1:-1:-1::0;;;;;;23093:32:0;;::::1;::::0;::::1;::::0;;:23:::1;23136:44:::0;;;:19:::1;:44;::::0;;;;:51;;-1:-1:-1;;23136:51:0::1;23093:32:::0;23136:51:::1;::::0;;23012:183::o;25198:230::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25268:22:0;::::1;25285:4;25268:22;25265:123;;;25306:12;:19:::0;;-1:-1:-1;;25306:19:0::1;25321:4;25306:19;::::0;;25265:123:::1;;;25356:12;:20:::0;;-1:-1:-1;;25356:20:0::1;::::0;;25265:123:::1;25398:14;:22:::0;;-1:-1:-1;;;;;;25398:22:0::1;-1:-1:-1::0;;;;;25398:22:0;;;::::1;::::0;;;::::1;::::0;;25198:230::o;21702:606::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;21811:15:::1;::::0;-1:-1:-1;;;;;21789:38:0;;::::1;21811:15:::0;::::1;21789:38;;21781:86;;;::::0;-1:-1:-1;;;21781:86:0;;13321:2:1;21781:86:0::1;::::0;::::1;13303:21:1::0;13360:2;13340:18;;;13333:30;13399:34;13379:18;;;13372:62;-1:-1:-1;;;13450:18:1;;;13443:33;13493:19;;21781:86:0::1;13119:399:1::0;21781:86:0::1;21925:15;::::0;21883:59:::1;::::0;-1:-1:-1;;;;;21925:15:0;;::::1;::::0;21883:59;::::1;::::0;::::1;::::0;21925:15:::1;::::0;21883:59:::1;21953:15;:48:::0;;-1:-1:-1;;;;;;21953:48:0::1;-1:-1:-1::0;;;;;21953:48:0;::::1;::::0;;::::1;::::0;;;22055:25:::1;::::0;;-1:-1:-1;;;22055:25:0;;;;-1:-1:-1;;21953:48:0;22055:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;21953:48;22055:25;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22037:65:0::1;;22111:4;22118:15;;;;;;;;;-1:-1:-1::0;;;;;22118:15:0::1;-1:-1:-1::0;;;;;22118:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22037:104;::::0;-1:-1:-1;;;;;;22037:104:0::1;::::0;;;;;;-1:-1:-1;;;;;6325:15:1;;;22037:104:0::1;::::0;::::1;6307:34:1::0;6377:15;;6357:18;;;6350:43;6242:18;;22037:104:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22152:11;:28:::0;;-1:-1:-1;;;;;;22152:28:0::1;-1:-1:-1::0;;;;;22152:28:0;::::1;;::::0;;;-1:-1:-1;22191:50:0::1;22152:28:::0;-1:-1:-1;22191:28:0::1;:50::i;:::-;-1:-1:-1::0;;22280:11:0::1;::::0;-1:-1:-1;;;;;22280:11:0::1;22252:41;::::0;;;:19:::1;:41;::::0;;;;:48;;-1:-1:-1;;22252:48:0::1;22296:4;22252:48;::::0;;21702:606::o;770:103::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;835:30:::1;862:1;835:18;:30::i;:::-;770:103::o:0;26556:158::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;26642:2:::1;26635:3;:9;;26627:47;;;::::0;-1:-1:-1;;;26627:47:0;;17112:2:1;26627:47:0::1;::::0;::::1;17094:21:1::0;17151:2;17131:18;;;17124:30;-1:-1:-1;;;17170:18:1;;;17163:55;17235:18;;26627:47:0::1;16910:349:1::0;26627:47:0::1;26685:15;:21:::0;26556:158::o;23779:276::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;23877:16:::1;;23865:8;:28;;23857:85;;;::::0;-1:-1:-1;;;23857:85:0;;12552:2:1;23857:85:0::1;::::0;::::1;12534:21:1::0;12591:2;12571:18;;;12564:30;12630:34;12610:18;;;12603:62;-1:-1:-1;;;12681:18:1;;;12674:42;12733:19;;23857:85:0::1;12350:408:1::0;23857:85:0::1;23992:16;::::0;23958:51:::1;::::0;23982:8;;23958:51:::1;::::0;;;::::1;24020:16;:27:::0;23779:276::o;5172:104::-;5228:13;5261:7;5254:14;;;;;:::i;23203:252::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;23310:11:::1;::::0;-1:-1:-1;;;;;23302:19:0;;::::1;23310:11:::0;::::1;23302:19;;23294:101;;;::::0;-1:-1:-1;;;23294:101:0;;10086:2:1;23294:101:0::1;::::0;::::1;10068:21:1::0;10125:2;10105:18;;;10098:30;10164:34;10144:18;;;10137:62;10235:34;10215:18;;;10208:62;-1:-1:-1;;;10286:19:1;;;10279:36;10332:19;;23294:101:0::1;9884:473:1::0;23294:101:0::1;23406:41;23435:4;23441:5;23406:28;:41::i;:::-;23203:252:::0;;:::o;9263:269::-;9356:4;9373:129;173:10;9396:7;9405:96;9444:15;9405:96;;;;;;;;;;;;;;;;;173:10;9405:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9405:34:0;;;;;;;;;;;;:38;:96::i;6591:175::-;6677:4;6694:42;173:10;6718:9;6729:6;6694:9;:42::i;17412:29::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17412:29:0;;-1:-1:-1;17412:29:0;:::o;25080:110::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;25155:18:::1;:27:::0;25080:110::o;26722:164::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;26811:2:::1;26804:3;:9;;26796:47;;;::::0;-1:-1:-1;;;26796:47:0;;17112:2:1;26796:47:0::1;::::0;::::1;17094:21:1::0;17151:2;17131:18;;;17124:30;-1:-1:-1;;;17170:18:1;;;17163:55;17235:18;;26796:47:0::1;16910:349:1::0;26796:47:0::1;26854:18;:24:::0;26722:164::o;22435:258::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22524:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;:40;;::::0;::::1;;;22520:166;;-1:-1:-1::0;;;;;22581:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22581:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22640:34;;8767:41:1;;;22640:34:0::1;::::0;8740:18:1;22640:34:0::1;;;;;;;22435:258:::0;;:::o;22701:305::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;22819:9:::1;22814:116;22834:19:::0;;::::1;22814:116;;;22910:8;22875:19;:32;22895:8;;22904:1;22895:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22875:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;22875:32:0;:43;;-1:-1:-1;;22875:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22855:3;::::1;::::0;::::1;:::i;:::-;;;;22814:116;;;;22947:51;22979:8;;22989;22947:51;;;;;;;;:::i;:::-;;;;;;;;22701:305:::0;;;:::o;24675:117::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;24752:21:::1;:32:::0;;-1:-1:-1;;24752:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24675:117::o;26403:145::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;26486:3:::1;26474:8;:15;;26466:48;;;::::0;-1:-1:-1;;;26466:48:0;;10968:2:1;26466:48:0::1;::::0;::::1;10950:21:1::0;11007:2;10987:18;;;10980:30;-1:-1:-1;;;11026:18:1;;;11019:50;11086:18;;26466:48:0::1;10766:344:1::0;26466:48:0::1;26525:4;:15:::0;26403:145::o;24199:468::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;24298:4:::1;24249:28;6352:18:::0;;;;;;;;;;;24323:24;24315:55:::1;;;::::0;-1:-1:-1;;;24315:55:0;;14080:2:1;24315:55:0::1;::::0;::::1;14062:21:1::0;14119:2;14099:18;;;14092:30;-1:-1:-1;;;14138:18:1;;;14131:48;14196:18;;24315:55:0::1;13878:342:1::0;24315:55:0::1;24381:8;:15:::0;;-1:-1:-1;;;;24381:15:0::1;-1:-1:-1::0;;;24381:15:0::1;::::0;;24411:18:::1;::::0;:22;24407:68:::1;;24435:40;24456:18;;24435:20;:40::i;:::-;24489:18;::::0;:22;24486:61:::1;;24513:34;24528:18;;24513:14;:34::i;:::-;24562:21;::::0;:25;24558:74:::1;;24589:43;24610:21;;24589:20;:43::i;:::-;-1:-1:-1::0;24643:8:0::1;:16:::0;;-1:-1:-1;;;;24643:16:0::1;::::0;;24199:468::o;25436:393::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;25633:3:::1;25573:56;25621:7:::0;25573:43:::1;25603:12:::0;25573:43;:10;25588:9;25573:14:::1;:25::i;:::-;:29:::0;::::1;:43::i;:56::-;:63;;25565:102;;;::::0;-1:-1:-1;;;25565:102:0;;16757:2:1;25565:102:0::1;::::0;::::1;16739:21:1::0;16796:2;16776:18;;;16769:30;16835:28;16815:18;;;16808:56;16881:18;;25565:102:0::1;16555:350:1::0;25565:102:0::1;25678:18;:31:::0;;;;25720:15:::1;:27:::0;;;;25758:15:::1;:30:::0;;;;25799:10:::1;:20:::0;25436:393::o;26238:157::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;26329:1:::1;26317:8;:13;;26309:44;;;::::0;-1:-1:-1;;;26309:44:0;;16005:2:1;26309:44:0::1;::::0;::::1;15987:21:1::0;16044:2;16024:18;;;16017:30;-1:-1:-1;;;16063:18:1;;;16056:48;16121:18;;26309:44:0::1;15803:342:1::0;26309:44:0::1;26364:12;:23:::0;26238:157::o;25837:395::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;26034:3:::1;25974:56;26022:7:::0;25974:43:::1;26004:12:::0;25974:43;:10;25989:9;25974:14:::1;:25::i;:56::-;:63;;25966:102;;;::::0;-1:-1:-1;;;25966:102:0;;13725:2:1;25966:102:0::1;::::0;::::1;13707:21:1::0;13764:2;13744:18;;;13737:30;13803:28;13783:18;;;13776:56;13849:18;;25966:102:0::1;13523:350:1::0;25966:102:0::1;26079:19;:32:::0;;;;26122:16:::1;:28:::0;;;;26161:16:::1;:31:::0;;;;26203:11:::1;:21:::0;25837:395::o;27077:111::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;27154:12:::1;:26:::0;27077:111::o;27194:102::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;27266:10:::1;:22:::0;27194:102::o;881:201::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;970:22:0;::::1;962:73;;;::::0;-1:-1:-1;;;962:73:0;;11317:2:1;962:73:0::1;::::0;::::1;11299:21:1::0;11356:2;11336:18;;;11329:30;11395:34;11375:18;;;11368:62;-1:-1:-1;;;11446:18:1;;;11439:36;11492:19;;962:73:0::1;11115:402:1::0;962:73:0::1;1046:28;1065:8;1046:18;:28::i;:::-;881:201:::0;:::o;24943:127::-;620:6;;-1:-1:-1;;;;;620:6:0;;;;;173:10;682:23;674:68;;;;-1:-1:-1;;;674:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25030:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;25030:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24943:127::o;2325:181::-;2383:7;;2415:5;2419:1;2415;:5;:::i;:::-;2403:17;;2444:1;2439;:6;;2431:46;;;;-1:-1:-1;;;2431:46:0;;12965:2:1;2431:46:0;;;12947:21:1;13004:2;12984:18;;;12977:30;13043:29;13023:18;;;13016:57;13090:18;;2431:46:0;12763:351:1;2431:46:0;2497:1;2325:181;-1:-1:-1;;;2325:181:0:o;2858:471::-;2916:7;3161:6;3157:47;;-1:-1:-1;3191:1:0;3184:8;;3157:47;3216:9;3228:5;3232:1;3228;:5;:::i;:::-;3216:17;-1:-1:-1;3261:1:0;3252:5;3256:1;3216:17;3252:5;:::i;:::-;:10;3244:56;;;;-1:-1:-1;;;3244:56:0;;14836:2:1;3244:56:0;;;14818:21:1;14875:2;14855:18;;;14848:30;14914:34;14894:18;;;14887:62;-1:-1:-1;;;14965:18:1;;;14958:31;15006:19;;3244:56:0;14634:397:1;3337:132:0;3395:7;3422:39;3426:1;3429;3422:39;;;;;;;;;;;;;;;;;:3;:39::i;12449:380::-;-1:-1:-1;;;;;12585:19:0;;12577:68;;;;-1:-1:-1;;;12577:68:0;;16352:2:1;12577:68:0;;;16334:21:1;16391:2;16371:18;;;16364:30;16430:34;16410:18;;;16403:62;-1:-1:-1;;;16481:18:1;;;16474:34;16525:19;;12577:68:0;16150:400:1;12577:68:0;-1:-1:-1;;;;;12664:21:0;;12656:68;;;;-1:-1:-1;;;12656:68:0;;11724:2:1;12656:68:0;;;11706:21:1;11763:2;11743:18;;;11736:30;11802:34;11782:18;;;11775:62;-1:-1:-1;;;11853:18:1;;;11846:32;11895:19;;12656:68:0;11522:398:1;12656:68:0;-1:-1:-1;;;;;12737:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12789:32;;17410:25:1;;;12789:32:0;;17383:18:1;12789:32:0;;;;;;;;12449:380;;;:::o;27306:4998::-;-1:-1:-1;;;;;27438:18:0;;27430:68;;;;-1:-1:-1;;;27430:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27517:16:0;;27509:64;;;;-1:-1:-1;;;27509:64:0;;;;;;;:::i;:::-;27590:11;27586:93;;27618:28;27634:4;27640:2;27644:1;27618:15;:28::i;:::-;27306:4998;;;:::o;27586:93::-;-1:-1:-1;;;;;27694:29:0;;;;;;:25;:29;;;;;;;;:69;;;;-1:-1:-1;27745:11:0;;-1:-1:-1;;;;;27745:11:0;6325:7;6352:18;;;;;;;;;;;27727:36;27694:69;27691:120;;;27787:12;27779:5;:20;27691:120;-1:-1:-1;;;;;27826:25:0;;;;;;:19;:25;;;;;;;;27825:26;:54;;;;-1:-1:-1;;;;;;27856:23:0;;;;;;:19;:23;;;;;;;;27855:24;27825:54;27821:247;;;-1:-1:-1;;;;;27898:31:0;;;;;;:25;:31;;;;;;;;:62;;;;;27956:4;;27948:5;;:12;;;;:::i;:::-;27933;:27;27898:62;27895:162;;;28009:23;;27987:54;;28003:4;;-1:-1:-1;;;;;28009:23:0;28034:6;27987:15;:54::i;27895:162::-;-1:-1:-1;;;;;28084:21:0;;;;;;:15;:21;;;;;;;;28083:22;:46;;;;-1:-1:-1;;;;;;28110:19:0;;;;;;:15;:19;;;;;;;;28109:20;28083:46;28080:153;;;28164:12;;28154:6;:22;;28146:75;;;;-1:-1:-1;;;28146:75:0;;14427:2:1;28146:75:0;;;14409:21:1;14466:2;14446:18;;;14439:30;14505:34;14485:18;;;14478:62;-1:-1:-1;;;14556:18:1;;;14549:38;14604:19;;28146:75:0;14225:404:1;28146:75:0;28294:4;28245:28;6352:18;;;;;;;;;;;28352;;28328:42;;;;;;;28387:33;;-1:-1:-1;28412:8:0;;-1:-1:-1;;;28412:8:0;;;;28411:9;28387:33;:82;;;;-1:-1:-1;;;;;;28438:31:0;;;;;;:25;:31;;;;;;;;28437:32;28387:82;:114;;;;-1:-1:-1;620:6:0;;-1:-1:-1;;;;;28486:15:0;;;620:6;;;;;28486:15;;28387:114;:144;;;;-1:-1:-1;620:6:0;;-1:-1:-1;;;;;28518:13:0;;;620:6;;;;;28518:13;;28387:144;:182;;;;-1:-1:-1;28548:21:0;;;;28387:182;:217;;;;;28587:17;:15;:17::i;:::-;28586:18;28387:217;28383:554;;;28631:8;:15;;-1:-1:-1;;;;28631:15:0;-1:-1:-1;;;28631:15:0;;;28665:18;;:22;28661:68;;28689:40;28710:18;;28689:20;:40::i;:::-;28747:18;;:22;28744:61;;28771:34;28786:18;;28771:14;:34::i;:::-;28824:21;;:25;28820:74;;28851:43;28872:21;;28851:20;:43::i;:::-;28909:8;:16;;-1:-1:-1;;;;28909:16:0;;;28383:554;28967:8;;-1:-1:-1;;;;;29077:25:0;;28951:12;29077:25;;;:19;:25;;;;;;28967:8;-1:-1:-1;;;28967:8:0;;;;;28966:9;;29077:25;;:52;;-1:-1:-1;;;;;;29106:23:0;;;;;;:19;:23;;;;;;;;29077:52;29073:100;;;-1:-1:-1;29156:5:0;29073:100;29190:7;29187:2571;;;-1:-1:-1;;;;;29453:29:0;;29214:12;29453:29;;;:25;:29;;;;;;29214:12;;;;;;;;;;;;29453:29;;29449:204;;;29511:17;:15;:17::i;:::-;29503:25;;29449:204;;;-1:-1:-1;;;;;29554:31:0;;;;;;:25;:31;;;;;;;;29550:103;;;29617:20;:18;:20::i;:::-;29606:31;;29550:103;29672:5;29669:1343;;;29704:36;29736:3;29704:27;29715:15;;29704:6;:10;;:27;;;;:::i;:::-;:31;;:36::i;:::-;29697:43;;29784:4;29759:21;;:29;;;;;;;:::i;:::-;;;;;;;;29814:4;29807:11;;29669:1343;;;29842:8;29839:1173;;;29877:39;29912:3;29877:30;29888:18;;29877:6;:10;;:30;;;;:::i;29839:1173::-;-1:-1:-1;;;;;30018:31:0;;;;;;:25;:31;;;;;;;;30015:997;;;30076:36;30108:3;30076:27;30087:15;;30076:6;:10;;:27;;;;:::i;:36::-;30069:43;;30153:4;30131:18;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;30194:18:0;;30183:39;;30218:3;;30183:30;;:6;;:10;:30::i;:39::-;30176:46;;30266:4;30241:21;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;30307:15:0;;30296:36;;30328:3;;30296:27;;:6;;:10;:27::i;:36::-;30289:43;;30373:4;30351:18;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;30414:10:0;;30403:31;;30430:3;;30403:22;;:6;;:10;:22::i;:31::-;30396:38;-1:-1:-1;30460:34:0;30396:38;30460:24;30479:4;30460:24;:4;30469;30460:8;:14::i;:34::-;30453:41;;30015:997;;;-1:-1:-1;;;;;30518:29:0;;;;;;:25;:29;;;;;;;;30515:497;;;30574:37;30607:3;30574:28;30585:16;;30574:6;:10;;:28;;;;:::i;:37::-;30567:44;;30652:4;30630:18;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;30693:19:0;;30682:40;;30718:3;;30682:31;;:6;;:10;:31::i;:40::-;30675:47;;30766:4;30741:21;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;30807:16:0;;30796:37;;30829:3;;30796:28;;:6;;:10;:28::i;:37::-;30789:44;;30874:4;30852:18;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;30915:11:0;;30904:32;;30932:3;;30904:23;;:6;;:10;:23::i;:32::-;30897:39;-1:-1:-1;30962:34:0;30897:39;30962:24;30981:4;30962:24;:4;30971;30962:8;:14::i;:34::-;30955:41;;30515:497;-1:-1:-1;;;;;31054:31:0;;;;;;:25;:31;;;;;;;;;:64;;-1:-1:-1;;;;;;31089:29:0;;;;;;:25;:29;;;;;;;;31054:64;31053:76;;;;;31124:5;31123:6;31053:76;:89;;;;;31134:8;31133:9;31053:89;31050:508;;;31166:12;;:16;31162:381;;31206:10;;31239:236;31263:12;;31259:1;:16;31239:236;;;31348:44;;;;;;5755:19:1;;;5790:12;;;5783:28;;;31376:15:0;5827:12:1;;;5820:28;5864:12;;31348:44:0;;;;;;;;;;;;31338:55;;;;;;31330:64;;31309:87;;31423:28;31439:4;31445:2;31449:1;31423:15;:28::i;:::-;31277:3;;;;:::i;:::-;;;;31239:236;;;-1:-1:-1;31507:12:0;;:16;;31522:1;31507:16;:::i;:::-;31497:26;;;;:::i;:::-;;;31183:360;31162:381;31583:16;:6;31594:4;31583:10;:16::i;:::-;31574:25;-1:-1:-1;31617:8:0;;31614:52;;31649:10;;31627:39;;31643:4;;-1:-1:-1;;;;;31649:10:0;31661:4;31627:15;:39::i;:::-;31684:8;;31681:65;;31694:52;31710:4;31724;31731:14;:4;31740;31731:8;:14::i;:::-;31694:15;:52::i;:::-;29199:2559;;;;;;;29187:2571;31773:16;;;;:44;;;;-1:-1:-1;;;;;;31794:23:0;;;;;;:19;:23;;;;;;;;31793:24;31773:44;31770:123;;;31870:10;;31841:25;31859:6;31841:13;31851:2;-1:-1:-1;;;;;6352:18:0;6325:7;6352:18;;;;;;;;;;;;6251:127;31841:25;:39;;31833:48;;;;;;31905:33;31921:4;31927:2;31931:6;31905:15;:33::i;:::-;-1:-1:-1;;;;;31955:21:0;;31971:4;31955:21;;;;:54;;-1:-1:-1;;;;;;31980:29:0;;;;;;:25;:29;;;;;;;;31955:54;31951:101;;;32026:14;32035:4;32026:8;:14::i;:::-;32069:8;;-1:-1:-1;;;32069:8:0;;;;32068:9;:43;;;;-1:-1:-1;;;;;;32090:21:0;;32106:4;32090:21;;32068:43;:113;;;;;32159:22;;32139:17;;:42;;;;:::i;:::-;32124:12;:57;32068:113;32064:233;;;32208:30;32221:16;;32208:12;:30::i;:::-;32273:12;32253:17;:32;32064:233;27419:4885;;;27306:4998;;;:::o;2658:192::-;2744:7;2780:12;2772:6;;;;2764:29;;;;-1:-1:-1;;;2764:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2804:9:0;2816:5;2820:1;2816;:5;:::i;:::-;2804:17;2658:192;-1:-1:-1;;;;;2658:192:0:o;23463:306::-;-1:-1:-1;;;;;23554:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;23546:109;;;;-1:-1:-1;;;23546:109:0;;12127:2:1;23546:109:0;;;12109:21:1;12166:2;12146:18;;;12139:30;12205:34;12185:18;;;12178:62;12276:26;12256:18;;;12249:54;12320:19;;23546:109:0;11925:420:1;23546:109:0;-1:-1:-1;;;;;23666:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;23666:39:0;;;;;;;;;;23721:40;;23666:39;;:31;23721:40;;;23463:306;;:::o;1188:191::-;1281:6;;;-1:-1:-1;;;;;1298:17:0;;;1281:6;1298:17;;;-1:-1:-1;;;;;;1298:17:0;;;;;;1331:40;;1281:6;;;;;;;;1331:40;;1262:16;;1331:40;1251:128;1188:191;:::o;33277:1061::-;33426:16;;;33440:1;33426:16;;;;;;;;33402:21;;33426:16;;;;;;;;;;-1:-1:-1;33426:16:0;33402:40;;33471:4;33453;33458:1;33453:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33453:23:0;;;:7;;;;;;;;;:23;33497:11;;33487:7;;33497:11;;;33487:4;;33497:11;;33487:7;;;;;;:::i;:::-;-1:-1:-1;;;;;33487:21:0;;;:7;;;;;;;;;:21;33551:15;;33519:57;;33536:4;;33551:15;33569:6;33519:8;:57::i;:::-;33605:15;;;;;;;;;-1:-1:-1;;;;;33605:15:0;-1:-1:-1;;;;;33605:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33590:11;;-1:-1:-1;;;;;33590:11:0;;;:37;;;33587:685;;;33673:15;;33854:23;;33673:269;;-1:-1:-1;;;33673:269:0;;-1:-1:-1;;;;;33673:15:0;;;;:66;;:269;;33758:6;;33673:15;;33831:4;;33854:23;;;33912:15;;33673:269;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33587:685;;;34003:15;;34188:23;;34003:257;;-1:-1:-1;;;34003:257:0;;-1:-1:-1;;;;;34003:15:0;;;;:69;;:257;;34091:6;;34003:15;;34165:4;;34188:23;;;34230:15;;34003:257;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33587:685;34324:6;34303:18;;:27;;;;:::i;:::-;34282:18;:48;-1:-1:-1;;33277:1061:0:o;34346:779::-;34455:12;34470:13;:6;34481:1;34470:10;:13::i;:::-;34455:28;-1:-1:-1;34494:17:0;34514:16;:6;34455:28;34514:10;:16::i;:::-;34575:11;;34568:44;;-1:-1:-1;;;34568:44:0;;34606:4;34568:44;;;6033:51:1;34494:36:0;;-1:-1:-1;34543:22:0;;-1:-1:-1;;;;;34575:11:0;;;;34568:29;;6006:18:1;;34568:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34543:69;;34657:37;34675:4;34688;34657:17;:37::i;:::-;34853:11;;34846:44;;-1:-1:-1;;;34846:44:0;;34884:4;34846:44;;;6033:51:1;34825:18:0;;34846:64;;34895:14;;-1:-1:-1;;;;;34853:11:0;;34846:29;;6006:18:1;;34846:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;:64::i;:::-;34825:85;;34960:39;34977:9;34988:10;34960:16;:39::i;:::-;35052:6;35031:18;;:27;;;;:::i;:::-;35010:18;:48;35074:43;;;18633:25:1;;;18689:2;18674:18;;18667:34;;;18717:18;;;18710:34;;;35074:43:0;;18621:2:1;18606:18;35074:43:0;;;;;;;34394:731;;;;34346:779;:::o;37245:493::-;37387:12;;;;37384:114;;;37461:6;37437:21;;:30;;;;:::i;:::-;37413:21;:54;-1:-1:-1;37245:493:0:o;37384:114::-;37526:14;;37511:11;;-1:-1:-1;;;;;37511:11:0;;;37526:14;;37511:29;37508:158;;;37556:39;37574:6;37589:4;37556:17;:39::i;:::-;37508:158;;;37626:28;37647:6;37626:20;:28::i;:::-;37724:6;37700:21;;:30;;;;:::i;3477:278::-;3563:7;3598:12;3591:5;3583:28;;;;-1:-1:-1;;;3583:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3622:9:0;3634:5;3638:1;3634;:5;:::i;10022:573::-;-1:-1:-1;;;;;10162:20:0;;10154:70;;;;-1:-1:-1;;;10154:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10243:23:0;;10235:71;;;;-1:-1:-1;;;10235:71:0;;;;;;;:::i;:::-;10399;10421:6;10399:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10399:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;10379:17:0;;;:9;:17;;;;;;;;;;;:91;;;;10504:20;;;;;;;:32;;10529:6;10504:24;:32::i;:::-;-1:-1:-1;;;;;10481:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;10552:35;17410:25:1;;;10481:20:0;;10552:35;;;;;;17383:18:1;10552:35:0;17264:177:1;32314:466:0;32427:11;;32474:22;;;-1:-1:-1;;;32474:22:0;;;;32364:10;;-1:-1:-1;;;;;32427:11:0;;32364:10;;;;32427:11;;32474:20;;:22;;;;;;;;;;;;;;;32427:11;32474:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;32530:11:0;;-1:-1:-1;;;;;32450:46:0;;;;-1:-1:-1;32450:46:0;;;-1:-1:-1;;;;;;32530:11:0;32509:18;32597:4;32576:26;;32572:104;;;-1:-1:-1;32623:2:0;32572:104;;;-1:-1:-1;32662:2:0;32572:104;32699:47;;-1:-1:-1;;;32699:47:0;;-1:-1:-1;;;;;6051:32:1;;;32699:47:0;;;6033:51:1;32688:8:0;;32699:28;;;;;;6006:18:1;;32699:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32765:7;;;;;32314:466;-1:-1:-1;;;;;;32314:466:0:o;32788:479::-;32908:11;;32957:22;;;-1:-1:-1;;;32957:22:0;;;;32841:13;;-1:-1:-1;;;;;32908:11:0;;32841:13;;;;32908:11;;32957:20;;:22;;;;;;;;;;;;;;;32908:11;32957:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;33013:11:0;;-1:-1:-1;;;;;32931:48:0;;;;-1:-1:-1;32931:48:0;;;-1:-1:-1;;;;;;33013:11:0;32992:18;33080:4;33059:26;;33055:104;;;-1:-1:-1;33106:2:0;33055:104;;;-1:-1:-1;33145:2:0;33055:104;33182:47;;-1:-1:-1;;;33182:47:0;;-1:-1:-1;;;;;6051:32:1;;;33182:47:0;;;6033:51:1;33171:8:0;;33182:28;;;;;;6006:18:1;;33182:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33251:8;;;;;32788:479;-1:-1:-1;;;;;;32788:479:0:o;2514:136::-;2572:7;2599:43;2603:1;2606;2599:43;;;;;;;;;;;;;;;;;:3;:43::i;39184:347::-;39297:24;;39346:8;;39342:47;;39371:7;39184:347;:::o;39342:47::-;-1:-1:-1;;;;;39404:21:0;;;;;;:8;:21;;;;;;;;39399:125;;39638:12;:19;;-1:-1:-1;;;;;39604:31:0;;;;;;:18;:31;;;;;:53;;;39668:30;;;;;;;;;;;;;-1:-1:-1;;;;;;39668:30:0;;;;;;-1:-1:-1;;;;;39484:21:0;;;;;;:8;:21;;;;;:28;;-1:-1:-1;;39484:28:0;39508:4;39484:28;;;39231:300;39184:347;:::o;37746:1430::-;37823:14;;37816:47;;-1:-1:-1;;;37816:47:0;;37857:4;37816:47;;;6033:51:1;37800:13:0;;-1:-1:-1;;;;;37823:14:0;;37816:32;;6006:18:1;;37816:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37878:12;;37800:63;;-1:-1:-1;37878:12:0;;37875:132;;;37914:80;37975:18;;37914:56;37948:21;;37914:29;37924:18;;37914:5;:9;;:29;;;;:::i;:80::-;37906:88;;37875:132;38062:15;;38034:5;;38053:24;;38050:61;;;38093:7;;37746:1430;:::o;38050:61::-;38148:12;:19;38182:21;38178:34;;38205:7;;;37746:1430;:::o;38178:34::-;38222:15;38252;38270:9;38252:27;;38290:18;38325:844;38342:3;38332:7;:13;:46;;;;;38362:16;38349:10;:29;38332:46;38325:844;;;38415:16;38399:12;;:32;38395:89;;38467:1;38452:12;:16;38395:89;38498:14;38515:107;38595:11;;;;;;;;;-1:-1:-1;;;;;38595:11:0;-1:-1:-1;;;;;38588:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38532:11;;38568:12;;38555;:26;;38515:68;;-1:-1:-1;;;;;38532:11:0;;38525:29;;38555:12;:26;;;;;;:::i;:::-;;;;;;;;;;;38525:57;;;;;;-1:-1:-1;;;;;;38525:57:0;;;-1:-1:-1;;;;;38555:26:0;;;38525:57;;;6033:51:1;6006:18;;38525:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38515:5;;:9;:68::i;:107::-;38498:124;;38650:6;38641;:15;38637:28;;;38658:7;;;;;;;37746:1430;:::o;38637:28::-;38682:10;;38679:329;;38715:12;;;;38712:235;;;38749:66;38773:4;38780:12;38793;;38780:26;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;38780:26:0;38808:6;38749:15;:66::i;:::-;38712:235;;;38867:14;;38905:12;;38892;:26;;-1:-1:-1;;;;;38867:14:0;;;;38860:31;;38905:12;38892:26;;;;;;:::i;:::-;;;;;;;;;;;38860:67;;;;;;-1:-1:-1;;;;;;38860:67:0;;;-1:-1:-1;;;;;38892:26:0;;;38860:67;;;7723:51:1;7790:18;;;7783:34;;;7696:18;;38860:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38712:235;38974:18;:6;38985;38974:10;:18::i;:::-;38965:27;;38679:329;39032:35;39044:22;39056:9;39044:7;;:11;:22::i;:::-;39032:7;;:11;:35::i;:::-;39022:45;;39092:9;39116:12;:14;;39082:19;;-1:-1:-1;39116:12:0;:14;;;:::i;:::-;;;;;;39145:12;;;;;:::i;:::-;;;;38380:789;38325:844;;;37789:1387;;;;;;37746:1430;:::o;35778:762::-;35942:16;;;35956:1;35942:16;;;;;;;;35918:21;;35942:16;;;;;;;;;;-1:-1:-1;35942:16:0;35918:40;;35987:4;35969;35974:1;35969:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35969:23:0;;;:7;;;;;;;;;:23;36013:11;;36003:7;;36013:11;;;36003:4;;36013:11;;36003:7;;;;;;:::i;:::-;-1:-1:-1;;;;;36003:21:0;;;:7;;;;;;;;;:21;36067:15;;36035:62;;36052:4;;36067:15;36085:11;36035:8;:62::i;:::-;36134:15;;36316:13;;36134:237;;-1:-1:-1;;;36134:237:0;;-1:-1:-1;;;;;36134:15:0;;;;:69;;:237;;36218:11;;36134:15;;36289:4;;36316:13;;;36345:15;;36134:237;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36406:11:0;;36437:13;;36399:53;;-1:-1:-1;;;36399:53:0;;-1:-1:-1;;;;;36437:13:0;;;36399:53;;;6033:51:1;36382:14:0;;-1:-1:-1;36406:11:0;;;-1:-1:-1;36399:29:0;;6006:18:1;;36399:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36470:11;;36504:13;;36463:69;;-1:-1:-1;;;36463:69:0;;-1:-1:-1;;;;;36504:13:0;;;36463:69;;;6644:34:1;6714:15;;;6694:18;;;6687:43;6746:18;;;6739:34;;;36382:70:0;;-1:-1:-1;36470:11:0;;36463:32;;6579:18:1;;36463:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35847:693;;35778:762;;:::o;35133:637::-;35318:15;;35286:62;;35303:4;;-1:-1:-1;;;;;35318:15:0;35336:11;35286:8;:62::i;:::-;35366:11;;35395:15;;35359:64;;-1:-1:-1;;;35359:64:0;;-1:-1:-1;;;;;35395:15:0;;;35359:64;;;7723:51:1;7790:18;;;7783:34;;;35366:11:0;;;35359:27;;7696:18:1;;35359:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;35464:15:0;;35535:11;;35698:23;;35464:298;;-1:-1:-1;;;35464:298:0;;35515:4;35464:298;;;7181:34:1;-1:-1:-1;;;;;35535:11:0;;;7231:18:1;;;7224:43;7283:18;;;7276:34;;;7326:18;;;7319:34;;;35464:15:0;7369:19:1;;;7362:35;;;7413:19;;;7406:35;35698:23:0;;;7457:19:1;;;7450:44;35736:15:0;7510:19:1;;;7503:35;35464:15:0;;;:28;;7115:19:1;;35464:298:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;36548:689::-;36713:16;;;36727:1;36713:16;;;;;;;;;36689:21;;36713:16;;;;;;;;;;-1:-1:-1;36713:16:0;36689:40;;36758:4;36740;36745:1;36740:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36740:23:0;;;:7;;;;;;;;;:23;36784:11;;36774:7;;36784:11;;;36774:4;;36784:11;;36774:7;;;;;;:::i;:::-;-1:-1:-1;;;;;36774:21:0;;;:7;;;;;;;;;:21;36816:14;;36806:7;;36816:14;;;36806:4;;36811:1;;36806:7;;;;;;:::i;:::-;-1:-1:-1;;;;;36806:24:0;;;:7;;;;;;;;;:24;36873:15;;36841:62;;36858:4;;36873:15;36891:11;36841:8;:62::i;:::-;36957:15;;:252;;-1:-1:-1;;;36957:252:0;;-1:-1:-1;;;;;36957:15:0;;;;:69;;:252;;37045:11;;36957:15;;37124:4;;37155;;37179:15;;36957:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36940:288;;23203:252;;:::o;14:188:1:-;93:13;;-1:-1:-1;;;;;135:42:1;;125:53;;115:81;;192:1;189;182:12;115:81;14:188;;;:::o;207:247::-;266:6;319:2;307:9;298:7;294:23;290:32;287:52;;;335:1;332;325:12;287:52;374:9;361:23;393:31;418:5;393:31;:::i;459:251::-;529:6;582:2;570:9;561:7;557:23;553:32;550:52;;;598:1;595;588:12;550:52;630:9;624:16;649:31;674:5;649:31;:::i;975:388::-;1043:6;1051;1104:2;1092:9;1083:7;1079:23;1075:32;1072:52;;;1120:1;1117;1110:12;1072:52;1159:9;1146:23;1178:31;1203:5;1178:31;:::i;:::-;1228:5;-1:-1:-1;1285:2:1;1270:18;;1257:32;1298:33;1257:32;1298:33;:::i;:::-;1350:7;1340:17;;;975:388;;;;;:::o;1368:456::-;1445:6;1453;1461;1514:2;1502:9;1493:7;1489:23;1485:32;1482:52;;;1530:1;1527;1520:12;1482:52;1569:9;1556:23;1588:31;1613:5;1588:31;:::i;:::-;1638:5;-1:-1:-1;1695:2:1;1680:18;;1667:32;1708:33;1667:32;1708:33;:::i;:::-;1368:456;;1760:7;;-1:-1:-1;;;1814:2:1;1799:18;;;;1786:32;;1368:456::o;1829:382::-;1894:6;1902;1955:2;1943:9;1934:7;1930:23;1926:32;1923:52;;;1971:1;1968;1961:12;1923:52;2010:9;1997:23;2029:31;2054:5;2029:31;:::i;:::-;2079:5;-1:-1:-1;2136:2:1;2121:18;;2108:32;2149:30;2108:32;2149:30;:::i;2216:315::-;2284:6;2292;2345:2;2333:9;2324:7;2320:23;2316:32;2313:52;;;2361:1;2358;2351:12;2313:52;2400:9;2387:23;2419:31;2444:5;2419:31;:::i;:::-;2469:5;2521:2;2506:18;;;;2493:32;;-1:-1:-1;;;2216:315:1:o;2536:750::-;2628:6;2636;2644;2697:2;2685:9;2676:7;2672:23;2668:32;2665:52;;;2713:1;2710;2703:12;2665:52;2753:9;2740:23;2782:18;2823:2;2815:6;2812:14;2809:34;;;2839:1;2836;2829:12;2809:34;2877:6;2866:9;2862:22;2852:32;;2922:7;2915:4;2911:2;2907:13;2903:27;2893:55;;2944:1;2941;2934:12;2893:55;2984:2;2971:16;3010:2;3002:6;2999:14;2996:34;;;3026:1;3023;3016:12;2996:34;3081:7;3074:4;3064:6;3061:1;3057:14;3053:2;3049:23;3045:34;3042:47;3039:67;;;3102:1;3099;3092:12;3039:67;3133:4;3125:13;;;;-1:-1:-1;3157:6:1;-1:-1:-1;;3198:20:1;;3185:34;3228:28;3185:34;3228:28;:::i;:::-;3275:5;3265:15;;;2536:750;;;;;:::o;3291:241::-;3347:6;3400:2;3388:9;3379:7;3375:23;3371:32;3368:52;;;3416:1;3413;3406:12;3368:52;3455:9;3442:23;3474:28;3496:5;3474:28;:::i;3537:245::-;3604:6;3657:2;3645:9;3636:7;3632:23;3628:32;3625:52;;;3673:1;3670;3663:12;3625:52;3705:9;3699:16;3724:28;3746:5;3724:28;:::i;3787:450::-;3874:6;3882;3890;3943:2;3931:9;3922:7;3918:23;3914:32;3911:52;;;3959:1;3956;3949:12;3911:52;3982:40;4012:9;3982:40;:::i;:::-;3972:50;;4041:49;4086:2;4075:9;4071:18;4041:49;:::i;:::-;4031:59;;4133:2;4122:9;4118:18;4112:25;4177:10;4170:5;4166:22;4159:5;4156:33;4146:61;;4203:1;4200;4193:12;4242:180;4301:6;4354:2;4342:9;4333:7;4329:23;4325:32;4322:52;;;4370:1;4367;4360:12;4322:52;-1:-1:-1;4393:23:1;;4242:180;-1:-1:-1;4242:180:1:o;4427:184::-;4497:6;4550:2;4538:9;4529:7;4525:23;4521:32;4518:52;;;4566:1;4563;4556:12;4518:52;-1:-1:-1;4589:16:1;;4427:184;-1:-1:-1;4427:184:1:o;4616:248::-;4684:6;4692;4745:2;4733:9;4724:7;4720:23;4716:32;4713:52;;;4761:1;4758;4751:12;4713:52;-1:-1:-1;;4784:23:1;;;4854:2;4839:18;;;4826:32;;-1:-1:-1;4616:248:1:o;4869:306::-;4957:6;4965;4973;5026:2;5014:9;5005:7;5001:23;4997:32;4994:52;;;5042:1;5039;5032:12;4994:52;5071:9;5065:16;5055:26;;5121:2;5110:9;5106:18;5100:25;5090:35;;5165:2;5154:9;5150:18;5144:25;5134:35;;4869:306;;;;;:::o;5180:385::-;5266:6;5274;5282;5290;5343:3;5331:9;5322:7;5318:23;5314:33;5311:53;;;5360:1;5357;5350:12;5311:53;-1:-1:-1;;5383:23:1;;;5453:2;5438:18;;5425:32;;-1:-1:-1;5504:2:1;5489:18;;5476:32;;5555:2;5540:18;5527:32;;-1:-1:-1;5180:385:1;-1:-1:-1;5180:385:1:o;7828:794::-;8050:2;8062:21;;;8035:18;;8118:22;;;8002:4;8197:6;8171:2;8156:18;;8002:4;8231:304;8245:6;8242:1;8239:13;8231:304;;;8320:6;8307:20;8340:31;8365:5;8340:31;:::i;:::-;-1:-1:-1;;;;;8396:31:1;8384:44;;8451:4;8510:15;;;;8475:12;;;;8424:1;8260:9;8231:304;;;8235:3;8552;8544:11;;;;8607:6;8600:14;8593:22;8586:4;8575:9;8571:20;8564:52;7828:794;;;;;;:::o;9282:597::-;9394:4;9423:2;9452;9441:9;9434:21;9484:6;9478:13;9527:6;9522:2;9511:9;9507:18;9500:34;9552:1;9562:140;9576:6;9573:1;9570:13;9562:140;;;9671:14;;;9667:23;;9661:30;9637:17;;;9656:2;9633:26;9626:66;9591:10;;9562:140;;;9720:6;9717:1;9714:13;9711:91;;;9790:1;9785:2;9776:6;9765:9;9761:22;9757:31;9750:42;9711:91;-1:-1:-1;9863:2:1;9842:15;-1:-1:-1;;9838:29:1;9823:45;;;;9870:2;9819:54;;9282:597;-1:-1:-1;;;9282:597:1:o;10362:399::-;10564:2;10546:21;;;10603:2;10583:18;;;10576:30;10642:34;10637:2;10622:18;;10615:62;-1:-1:-1;;;10708:2:1;10693:18;;10686:33;10751:3;10736:19;;10362:399::o;15036:356::-;15238:2;15220:21;;;15257:18;;;15250:30;15316:34;15311:2;15296:18;;15289:62;15383:2;15368:18;;15036:356::o;15397:401::-;15599:2;15581:21;;;15638:2;15618:18;;;15611:30;15677:34;15672:2;15657:18;;15650:62;-1:-1:-1;;;15743:2:1;15728:18;;15721:35;15788:3;15773:19;;15397:401::o;17446:980::-;17708:4;17756:3;17745:9;17741:19;17787:6;17776:9;17769:25;17813:2;17851:6;17846:2;17835:9;17831:18;17824:34;17894:3;17889:2;17878:9;17874:18;17867:31;17918:6;17953;17947:13;17984:6;17976;17969:22;18022:3;18011:9;18007:19;18000:26;;18061:2;18053:6;18049:15;18035:29;;18082:1;18092:195;18106:6;18103:1;18100:13;18092:195;;;18171:13;;-1:-1:-1;;;;;18167:39:1;18155:52;;18262:15;;;;18227:12;;;;18203:1;18121:9;18092:195;;;-1:-1:-1;;;;;;;18343:32:1;;;;18338:2;18323:18;;18316:60;-1:-1:-1;;;18407:3:1;18392:19;18385:35;18304:3;17446:980;-1:-1:-1;;;17446:980:1:o;18944:128::-;18984:3;19015:1;19011:6;19008:1;19005:13;19002:39;;;19021:18;;:::i;:::-;-1:-1:-1;19057:9:1;;18944:128::o;19077:217::-;19117:1;19143;19133:132;;19187:10;19182:3;19178:20;19175:1;19168:31;19222:4;19219:1;19212:15;19250:4;19247:1;19240:15;19133:132;-1:-1:-1;19279:9:1;;19077:217::o;19299:168::-;19339:7;19405:1;19401;19397:6;19393:14;19390:1;19387:21;19382:1;19375:9;19368:17;19364:45;19361:71;;;19412:18;;:::i;:::-;-1:-1:-1;19452:9:1;;19299:168::o;19472:125::-;19512:4;19540:1;19537;19534:8;19531:34;;;19545:18;;:::i;:::-;-1:-1:-1;19582:9:1;;19472:125::o;19602:380::-;19681:1;19677:12;;;;19724;;;19745:61;;19799:4;19791:6;19787:17;19777:27;;19745:61;19852:2;19844:6;19841:14;19821:18;19818:38;19815:161;;;19898:10;19893:3;19889:20;19886:1;19879:31;19933:4;19930:1;19923:15;19961:4;19958:1;19951:15;19815:161;;19602:380;;;:::o;19987:135::-;20026:3;-1:-1:-1;;20047:17:1;;20044:43;;;20067:18;;:::i;:::-;-1:-1:-1;20114:1:1;20103:13;;19987:135::o;20127:127::-;20188:10;20183:3;20179:20;20176:1;20169:31;20219:4;20216:1;20209:15;20243:4;20240:1;20233:15;20259:127;20320:10;20315:3;20311:20;20308:1;20301:31;20351:4;20348:1;20341:15;20375:4;20372:1;20365:15;20523:131;-1:-1:-1;;;;;20598:31:1;;20588:42;;20578:70;;20644:1;20641;20634:12;20659:118;20745:5;20738:13;20731:21;20724:5;20721:32;20711:60;;20767:1;20764;20757:12

Swarm Source

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