ETH Price: $3,438.57 (-0.50%)
Gas: 3 Gwei

Token

Kobito (Kobito)
 

Overview

Max Total Supply

521,000,000,000,000 Kobito

Holders

238

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
20,000,000,000 Kobito

Value
$0.00
0xc7058056ce6d79026a15e1d6f1598f8fbf192d80
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Kobito

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-01
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

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

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

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

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

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

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

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

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(
        bytes memory returndata,
        string memory errorMessage
    ) private pure {
        if (returndata.length > 0) {
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

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

    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

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

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

    function totalSupply() external view returns (uint256);

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

    function transfer(address to, 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 oldAllowance = token.allowance(address(this), spender);
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                oldAllowance + value
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(
                oldAllowance >= value,
                "SafeERC20: decreased allowance below zero"
            );
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(
                    token.approve.selector,
                    spender,
                    oldAllowance - value
                )
            );
        }
    }

    function forceApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        bytes memory approvalCall = abi.encodeWithSelector(
            token.approve.selector,
            spender,
            value
        );

        if (!_callOptionalReturnBool(token, approvalCall)) {
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(token.approve.selector, spender, 0)
            );
            _callOptionalReturn(token, approvalCall);
        }
    }

    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(
            nonceAfter == nonceBefore + 1,
            "SafeERC20: permit did not succeed"
        );
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        require(
            returndata.length == 0 || abi.decode(returndata, (bool)),
            "SafeERC20: ERC20 operation did not succeed"
        );
    }

    function _callOptionalReturnBool(
        IERC20 token,
        bytes memory data
    ) private returns (bool) {
        (bool success, bytes memory returndata) = address(token).call(data);
        return
            success &&
            (returndata.length == 0 || abi.decode(returndata, (bool))) &&
            Address.isContract(address(token));
    }
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

    function decimals() external view returns (uint8);
}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        _status = _NOT_ENTERED;
    }

    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;

            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        unchecked {
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;

            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

abstract contract Ownable is Context {
    address private _owner;

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

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

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        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 _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract Kobito is Ownable, ReentrancyGuard, ERC20 {
    using SafeERC20 for IERC20;

    uint256 public burnTaxBuy;
    uint256 public burnTaxSell;

    uint256 public buybackTaxBuy;
    uint256 public buybackTaxSell;

    uint256 public developmentTaxBuy;
    uint256 public developmentTaxSell;

    uint256 public liquidityTaxBuy;
    uint256 public liquidityTaxSell;

    uint256 public marketingTaxBuy;
    uint256 public marketingTaxSell;

    uint256 public immutable denominator;

    uint256 public buybackTokenAmount;
    uint256 public developmentTokenAmount;
    uint256 public liquidityTokenAmount;
    uint256 public marketingTokenAmount;

    address public buybackWallet;
    address public developmentWallet;
    address public marketingWallet;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    bool public isSwapBackEnabled;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    mapping(address => bool) private _isAutomatedMarketMakerPair;
    mapping(address => bool) private _isExcludedFromFees;

    modifier inSwap() {
        swapping = true;
        _;
        swapping = false;
    }

    event UpdateBuyTax(
        uint256 burnTaxBuy,
        uint256 buybackTaxBuy,
        uint256 developmentTaxBuy,
        uint256 liquidityTaxBuy,
        uint256 marketingTaxBuy
    );
    event UpdateSellTax(
        uint256 burnTaxSell,
        uint256 buybackTaxSell,
        uint256 developmentTaxSell,
        uint256 liquidityTaxSell,
        uint256 marketingTaxSell
    );
    event UpdateBuybackWallet(address indexed buybackWallet);
    event UpdateDevelopmentWallet(address indexed developmentWallet);
    event UpdateMarketingWallet(address indexed marketingWallet);
    event UpdateSwapTokensAtAmount(uint256 swapTokensAtAmount);
    event UpdateSwapBackStatus(bool status);
    event UpdateAutomatedMarketMakerPair(address indexed pair, bool status);
    event UpdateExcludeFromFees(address indexed account, bool isExcluded);

    constructor() ERC20("Kobito", "Kobito") {
        _transferOwnership(0x300481351DE963286b3912eEED2b70144C549d95);
        _mint(owner(), 521_000_000_000_000 * (10 ** 18));

        burnTaxBuy = 100;
        burnTaxSell = 100;

        buybackTaxBuy = 80;
        buybackTaxSell = 80;

        developmentTaxBuy = 20;
        developmentTaxSell = 20;

        liquidityTaxBuy = 50;
        liquidityTaxSell = 50;

        marketingTaxBuy = 50;
        marketingTaxSell = 50;

        denominator = 10_000;

        buybackWallet = 0x7bc2089D8975A385786aA3A9D46f057D608e3DCd;
        developmentWallet = 0xDe578B01D975E02572e61c7A0aB8b2436a459C63;
        marketingWallet = 0xC34431387C3EDCD836fb12e8675C07044B8e943d;

        swapTokensAtAmount = totalSupply() / 100_000;
        isSwapBackEnabled = true;

        address router = getRouterAddress();
        uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        _isAutomatedMarketMakerPair[address(uniswapV2Pair)] = true;

        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(uniswapV2Router)] = true;
        _isExcludedFromFees[address(owner())] = true;
        _isExcludedFromFees[address(0xdead)] = true;
    }

    receive() external payable {}

    fallback() external payable {}

    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function getRouterAddress() public view returns (address) {
        if (block.chainid == 56) {
            return 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            return 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if (block.chainid == 1 || block.chainid == 5) {
            return 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert("Cannot found router on this network");
        }
    }

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");

        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.safeTransfer(msg.sender, balance);
    }

    function setBuyTax(
        uint256 _burnTaxBuy,
        uint256 _buybackTaxBuy,
        uint256 _developmentTaxBuy,
        uint256 _liquidityTaxBuy,
        uint256 _marketingTaxBuy
    ) external onlyOwner {
        require(
            burnTaxBuy != _burnTaxBuy ||
                buybackTaxBuy != _buybackTaxBuy ||
                developmentTaxBuy != _developmentTaxBuy ||
                liquidityTaxBuy != _liquidityTaxBuy ||
                marketingTaxBuy != _marketingTaxBuy,
            "Buy Tax already on that amount"
        );
        require(
            _burnTaxBuy +
                _buybackTaxBuy +
                _developmentTaxBuy +
                _liquidityTaxBuy +
                _marketingTaxBuy <=
                500,
            "Buy Tax cannot be more than 5%"
        );

        burnTaxBuy = _burnTaxBuy;
        buybackTaxBuy = _buybackTaxBuy;
        developmentTaxBuy = _developmentTaxBuy;
        liquidityTaxBuy = _liquidityTaxBuy;
        marketingTaxBuy = _marketingTaxBuy;

        emit UpdateBuyTax(
            _burnTaxBuy,
            _buybackTaxBuy,
            _developmentTaxBuy,
            _liquidityTaxBuy,
            _marketingTaxBuy
        );
    }

    function setSellTax(
        uint256 _burnTaxSell,
        uint256 _buybackTaxSell,
        uint256 _developmentTaxSell,
        uint256 _liquidityTaxSell,
        uint256 _marketingTaxSell
    ) external onlyOwner {
        require(
            burnTaxSell != _burnTaxSell ||
                buybackTaxSell != _buybackTaxSell ||
                developmentTaxSell != _developmentTaxSell ||
                liquidityTaxSell != _liquidityTaxSell ||
                marketingTaxSell != _marketingTaxSell,
            "Sell Tax already on that amount"
        );
        require(
            _burnTaxSell +
                _buybackTaxSell +
                _developmentTaxSell +
                _liquidityTaxSell +
                _marketingTaxSell <=
                500,
            "Sell Tax cannot be more than 5%"
        );

        burnTaxSell = _burnTaxSell;
        buybackTaxSell = _buybackTaxSell;
        developmentTaxSell = _developmentTaxSell;
        liquidityTaxSell = _liquidityTaxSell;
        marketingTaxSell = _marketingTaxSell;

        emit UpdateSellTax(
            _burnTaxSell,
            _buybackTaxSell,
            _developmentTaxSell,
            _liquidityTaxSell,
            _marketingTaxSell
        );
    }

    function setBuybackWallet(address _buybackWallet) external onlyOwner {
        require(
            _buybackWallet != buybackWallet,
            "Buyback wallet is already that address"
        );
        require(
            _buybackWallet != address(0),
            "Buyback wallet cannot be the zero address"
        );
        require(
            !isContract(_buybackWallet),
            "Buyback wallet cannot be a contract"
        );

        buybackWallet = _buybackWallet;
        emit UpdateBuybackWallet(_buybackWallet);
    }

    function setDevelopmentWallet(
        address _developmentWallet
    ) external onlyOwner {
        require(
            _developmentWallet != developmentWallet,
            "Development wallet is already that address"
        );
        require(
            _developmentWallet != address(0),
            "Development wallet cannot be the zero address"
        );
        require(
            !isContract(_developmentWallet),
            "Development wallet cannot be a contract"
        );

        developmentWallet = _developmentWallet;
        emit UpdateDevelopmentWallet(_developmentWallet);
    }

    function setMarketingWallet(address _marketingWallet) external onlyOwner {
        require(
            _marketingWallet != marketingWallet,
            "Marketing wallet is already that address"
        );
        require(
            _marketingWallet != address(0),
            "Marketing wallet cannot be the zero address"
        );
        require(
            !isContract(_marketingWallet),
            "Marketing wallet cannot be a contract"
        );

        marketingWallet = _marketingWallet;
        emit UpdateMarketingWallet(_marketingWallet);
    }

    function setSwapTokensAtAmount(uint256 amount) external onlyOwner {
        require(
            swapTokensAtAmount != amount,
            "SwapTokensAtAmount already on that amount"
        );
        require(
            amount >= totalSupply() / 1_000_000,
            "Amount must be equal or greater than 0.000001% of Total Supply"
        );

        swapTokensAtAmount = amount;

        emit UpdateSwapTokensAtAmount(amount);
    }

    function toggleSwapBack(bool status) external onlyOwner {
        require(isSwapBackEnabled != status, "SwapBack already on status");

        isSwapBackEnabled = status;
        emit UpdateSwapBackStatus(status);
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool status
    ) external onlyOwner {
        require(
            _isAutomatedMarketMakerPair[pair] != status,
            "Pair address is already the value of 'status'"
        );
        require(pair != address(uniswapV2Pair), "Cannot set this pair");

        _isAutomatedMarketMakerPair[pair] = status;

        emit UpdateAutomatedMarketMakerPair(pair, status);
    }

    function isAutomatedMarketMakerPair(
        address pair
    ) external view returns (bool) {
        return _isAutomatedMarketMakerPair[pair];
    }

    function setExcludeFromFees(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;

        emit UpdateExcludeFromFees(account, excluded);
    }

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            !swapping &&
            _isAutomatedMarketMakerPair[to] &&
            isSwapBackEnabled &&
            buybackTokenAmount +
                developmentTokenAmount +
                liquidityTokenAmount +
                marketingTokenAmount >
            0
        ) {
            swapBack();
        }

        bool takeFee = true;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            takeFee = false;
        }

        if (takeFee) {
            uint256 tempBurnAmount;
            uint256 tempBuybackAmount;
            uint256 tempDevelopmentAmount;
            uint256 tempLiquidityAmount;
            uint256 tempMarketingAmount;

            if (_isAutomatedMarketMakerPair[from]) {
                tempBurnAmount = (amount * burnTaxBuy) / denominator;
                tempBuybackAmount = (amount * buybackTaxBuy) / denominator;
                tempDevelopmentAmount =
                    (amount * developmentTaxBuy) /
                    denominator;
                tempLiquidityAmount = (amount * liquidityTaxBuy) / denominator;
                tempMarketingAmount = (amount * marketingTaxBuy) / denominator;
            } else if (_isAutomatedMarketMakerPair[to]) {
                tempBurnAmount = (amount * burnTaxSell) / denominator;
                tempBuybackAmount = (amount * buybackTaxSell) / denominator;
                tempDevelopmentAmount =
                    (amount * developmentTaxSell) /
                    denominator;
                tempLiquidityAmount = (amount * liquidityTaxSell) / denominator;
                tempMarketingAmount = (amount * marketingTaxSell) / denominator;
            }

            buybackTokenAmount += tempBuybackAmount;
            developmentTokenAmount += tempDevelopmentAmount;
            liquidityTokenAmount += tempLiquidityAmount;
            marketingTokenAmount += tempMarketingAmount;

            uint256 fees = tempBuybackAmount +
                tempDevelopmentAmount +
                tempLiquidityAmount +
                tempMarketingAmount;

            if (tempBurnAmount > 0) {
                amount -= tempBurnAmount;
                super._transfer(from, address(0xdead), tempBurnAmount);
            }

            if (fees > 0) {
                amount -= fees;
                super._transfer(from, address(this), fees);
            }
        }

        super._transfer(from, to, amount);
    }

    function swapBack() internal inSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uint256 contractTokenBalance = balanceOf(address(this));

        uint256 totalTax = buybackTokenAmount +
            developmentTokenAmount +
            liquidityTokenAmount +
            marketingTokenAmount;

        uint256 liquifyToken = (contractTokenBalance *
            (liquidityTokenAmount / 2)) / totalTax;

        uint256 swapBackAmount = contractTokenBalance - liquifyToken;

        totalTax -= (liquidityTokenAmount) / 2;

        uint256 liquidityTokenRemaining = liquidityTokenAmount -
            ((liquidityTokenAmount) / 2);

        try
            uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                swapBackAmount,
                0,
                path,
                address(this),
                block.timestamp
            )
        {} catch {
            return;
        }

        uint256 newBalance = address(this).balance;

        uint256 buybackETH = (newBalance * buybackTokenAmount) / totalTax;
        uint256 developmentETH = (newBalance * developmentTokenAmount) /
            totalTax;
        uint256 liquifyETH = (newBalance * liquidityTokenRemaining) / totalTax;
        uint256 marketingETH = newBalance -
            buybackETH -
            developmentETH -
            liquifyETH;

        if (buybackETH > 0) {
            sendBNB(buybackWallet, buybackETH);
        }
        if (developmentETH > 0) {
            sendBNB(developmentWallet, developmentETH);
        }
        if (liquifyToken > 0 && liquifyETH > 0) {
            try
                uniswapV2Router.addLiquidityETH{value: liquifyETH}(
                    address(this),
                    liquifyToken,
                    0,
                    0,
                    address(0xdead),
                    block.timestamp
                )
            {} catch {}
        }
        if (marketingETH > 0) {
            sendBNB(marketingWallet, marketingETH);
        }

        buybackTokenAmount = 0;
        developmentTokenAmount = 0;
        liquidityTokenAmount = 0;
        marketingTokenAmount = 0;
    }

    function sendBNB(
        address _to,
        uint256 amount
    ) internal nonReentrant returns (bool) {
        if (address(this).balance < amount) return false;

        (bool success, ) = payable(_to).call{value: amount}("");

        return success;
    }

    function manualSwapBack() external {
        uint256 contractTokenBalance = balanceOf(address(this));

        require(contractTokenBalance > 0, "Cant Swap Back 0 Token!");

        swapBack();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"burnTaxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buybackTaxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"developmentTaxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityTaxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxBuy","type":"uint256"}],"name":"UpdateBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buybackWallet","type":"address"}],"name":"UpdateBuybackWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"developmentWallet","type":"address"}],"name":"UpdateDevelopmentWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"burnTaxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buybackTaxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"developmentTaxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityTaxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxSell","type":"uint256"}],"name":"UpdateSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateSwapBackStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"UpdateSwapTokensAtAmount","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"denominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"pair","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnTaxBuy","type":"uint256"},{"internalType":"uint256","name":"_buybackTaxBuy","type":"uint256"},{"internalType":"uint256","name":"_developmentTaxBuy","type":"uint256"},{"internalType":"uint256","name":"_liquidityTaxBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxBuy","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_buybackWallet","type":"address"}],"name":"setBuybackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_developmentWallet","type":"address"}],"name":"setDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnTaxSell","type":"uint256"},{"internalType":"uint256","name":"_buybackTaxSell","type":"uint256"},{"internalType":"uint256","name":"_developmentTaxSell","type":"uint256"},{"internalType":"uint256","name":"_liquidityTaxSell","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxSell","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","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":[{"internalType":"bool","name":"status","type":"bool"}],"name":"toggleSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040523480156200001157600080fd5b50604051806040016040528060068152602001654b6f6269746f60d01b815250604051806040016040528060068152602001654b6f6269746f60d01b8152506200006a620000646200040f60201b60201c565b62000413565b6001805560056200007c8382620007c7565b5060066200008b8282620007c7565b505050620000b373300481351de963286b3912eeed2b70144c549d956200041360201b60201c565b620000df620000ca6000546001600160a01b031690565b6d19aff1cb23df63f831bc4000000062000463565b6064600781905560085560506009819055600a556014600b819055600c556032600d819055600e819055600f819055601055612710608052601580546001600160a01b0319908116737bc2089d8975a385786aa3a9d46f057d608e3dcd1790915560168054821673de578b01d975e02572e61c7a0ab8b2436a459c631790556017805490911673c34431387c3edcd836fb12e8675c07044b8e943d179055620186a06200018b60045490565b62000197919062000893565b6018556019805460ff191660011790556000620001b36200052c565b9050806001600160a01b031660a0816001600160a01b03168152505060a0516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000210573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002369190620008b6565b6001600160a01b031663c9c653963060a0516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000286573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ac9190620008b6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003209190620008b6565b6001600160a01b031660c05260a0516200033f903090600019620005f6565b60c0516001600160a01b039081166000908152601a602090815260408083208054600160ff199182168117909255308552601b93849052828520805482168317905560a05190951684529083208054909416811790935590620003aa6000546001600160a01b031690565b6001600160a01b031681526020808201929092526040016000908120805493151560ff1994851617905561dead9052601b90527f6790d4910a095e0e04c8daa388834616a295bac3f59038957b6d0b93a2d21684805490911660011790555062000910565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216620004bf5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060046000828254620004d39190620008e8565b90915550506001600160a01b0382166000818152600260209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000466038036200055057507310ed43c718714eb63d5aa57b78b54704e256024e90565b4660610362000572575073d99d1c33f9fc3444f8101754abc46c52416550d190565b4660011480620005825750466005145b15620005a15750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b60405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e6574776044820152626f726b60e81b6064820152608401620004b6565b6001600160a01b0383166200065a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620004b6565b6001600160a01b038216620006bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004b6565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200074e57607f821691505b6020821081036200076f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200071e57600081815260208120601f850160051c810160208610156200079e5750805b601f850160051c820191505b81811015620007bf57828155600101620007aa565b505050505050565b81516001600160401b03811115620007e357620007e362000723565b620007fb81620007f4845462000739565b8462000775565b602080601f8311600181146200083357600084156200081a5750858301515b600019600386901b1c1916600185901b178555620007bf565b600085815260208120601f198616915b82811015620008645788860151825594840194600190910190840162000843565b5085821015620008835787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082620008b157634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620008c957600080fd5b81516001600160a01b0381168114620008e157600080fd5b9392505050565b808201808211156200090a57634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c051613328620009a2600039600081816104d601526112170152600081816103970152818161245c015281816125e8015261277c01526000818161072301528181612076015281816120b1015281816120ec0152818161212701528181612162015281816121c3015281816121fe015281816122390152818161227401526122af01526133286000f3fe6080604052600436106102fd5760003560e01c806372ac24861161018d578063afa4f3b2116100e0578063dd62ed3e1161008f578063e5a47e941161006c578063e5a47e94146108d8578063f2fde38b146108f8578063f9d0831a14610918578063fced1e7b1461093857005b8063dd62ed3e1461085c578063deab8aea146108a2578063e2f45605146108c257005b8063d07d2cd0116100bd578063d07d2cd014610811578063d54f7d5e14610827578063d63cad221461083c57005b8063afa4f3b2146107bb578063bdf95f04146107db578063c04a5414146107f157005b806395d89b411161013c5780639a7a23d6116101195780639a7a23d61461075b578063a457c2d71461077b578063a9059cbb1461079b57005b806395d89b41146106fc57806396ce0795146107115780639a5c48501461074557005b80638123bdc81161016a5780638123bdc8146106b25780638a093af8146106c85780638da5cb5b146106de57005b806372ac24861461063957806375f0a874146106595780637949a4031461067957005b806342d0b0bc116102505780635d098b38116101ff57806370a08231116101dc57806370a08231146105c2578063715018a6146105f857806371afc7131461060d578063721e62331461062357005b80635d098b3814610577578063600461911461059757806366eb3785146105ad57005b8063526f77221161022d578063526f77221461053157806352dfc8d014610547578063574165031461056157005b806342d0b0bc146104ae57806349bd5a5e146104c45780634fbee193146104f857005b80631f88a23e116102ac5780632b175cf8116102895780632b175cf81461045c578063313ce56714610472578063395093511461048e57005b80631f88a23e1461040657806323b872dd14610426578063248ba7ed1461044657005b80631694505e116102da5780631694505e1461038557806318160ddd146103d15780631d0adc07146103e657005b806306fdde0314610306578063095ea7b3146103315780630abc8e7b1461036157005b3661030457005b005b34801561031257600080fd5b5061031b610958565b6040516103289190612ede565b60405180910390f35b34801561033d57600080fd5b5061035161034c366004612f44565b6109ea565b6040519015158152602001610328565b34801561036d57600080fd5b50610377600d5481565b604051908152602001610328565b34801561039157600080fd5b506103b97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610328565b3480156103dd57600080fd5b50600454610377565b3480156103f257600080fd5b50610304610401366004612f70565b610a04565b34801561041257600080fd5b50610304610421366004612fa2565b610bf1565b34801561043257600080fd5b50610351610441366004612fbf565b610cb9565b34801561045257600080fd5b50610377600e5481565b34801561046857600080fd5b5061037760095481565b34801561047e57600080fd5b5060405160128152602001610328565b34801561049a57600080fd5b506103516104a9366004612f44565b610cdd565b3480156104ba57600080fd5b5061037760105481565b3480156104d057600080fd5b506103b97f000000000000000000000000000000000000000000000000000000000000000081565b34801561050457600080fd5b50610351610513366004612f70565b6001600160a01b03166000908152601b602052604090205460ff1690565b34801561053d57600080fd5b5061037760075481565b34801561055357600080fd5b506019546103519060ff1681565b34801561056d57600080fd5b50610377600b5481565b34801561058357600080fd5b50610304610592366004612f70565b610d1c565b3480156105a357600080fd5b5061037760125481565b3480156105b957600080fd5b50610304610f04565b3480156105ce57600080fd5b506103776105dd366004612f70565b6001600160a01b031660009081526002602052604090205490565b34801561060457600080fd5b50610304610f6c565b34801561061957600080fd5b5061037760145481565b34801561062f57600080fd5b50610377600f5481565b34801561064557600080fd5b50610304610654366004612f70565b610f80565b34801561066557600080fd5b506017546103b9906001600160a01b031681565b34801561068557600080fd5b50610351610694366004612f70565b6001600160a01b03166000908152601a602052604090205460ff1690565b3480156106be57600080fd5b5061037760135481565b3480156106d457600080fd5b50610377600a5481565b3480156106ea57600080fd5b506000546001600160a01b03166103b9565b34801561070857600080fd5b5061031b611168565b34801561071d57600080fd5b506103777f000000000000000000000000000000000000000000000000000000000000000081565b34801561075157600080fd5b5061037760115481565b34801561076757600080fd5b50610304610776366004613000565b611177565b34801561078757600080fd5b50610351610796366004612f44565b611314565b3480156107a757600080fd5b506103516107b6366004612f44565b6113be565b3480156107c757600080fd5b506103046107d6366004613039565b6113cc565b3480156107e757600080fd5b50610377600c5481565b3480156107fd57600080fd5b506016546103b9906001600160a01b031681565b34801561081d57600080fd5b5061037760085481565b34801561083357600080fd5b506103b961150c565b34801561084857600080fd5b50610304610857366004613000565b6115eb565b34801561086857600080fd5b50610377610877366004613052565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156108ae57600080fd5b506015546103b9906001600160a01b031681565b3480156108ce57600080fd5b5061037760185481565b3480156108e457600080fd5b506103046108f3366004613080565b6116ff565b34801561090457600080fd5b50610304610913366004612f70565b611879565b34801561092457600080fd5b50610304610933366004612f70565b611906565b34801561094457600080fd5b50610304610953366004613080565b611a45565b606060058054610967906130bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610993906130bb565b80156109e05780601f106109b5576101008083540402835291602001916109e0565b820191906000526020600020905b8154815290600101906020018083116109c357829003601f168201915b5050505050905090565b6000336109f8818585611bb4565b60019150505b92915050565b610a0c611d0c565b6015546001600160a01b0390811690821603610a955760405162461bcd60e51b815260206004820152602660248201527f4275796261636b2077616c6c657420697320616c72656164792074686174206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b038116610b115760405162461bcd60e51b815260206004820152602960248201527f4275796261636b2077616c6c65742063616e6e6f7420626520746865207a657260448201527f6f206164647265737300000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b0381163b15610b8f5760405162461bcd60e51b815260206004820152602360248201527f4275796261636b2077616c6c65742063616e6e6f74206265206120636f6e747260448201527f61637400000000000000000000000000000000000000000000000000000000006064820152608401610a8c565b601580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517ff598e8d6690c77e212cb5fae7b0d3a1ccf7123f4d40ae43d5465cd7827c99fec90600090a250565b610bf9611d0c565b60195481151560ff909116151503610c535760405162461bcd60e51b815260206004820152601a60248201527f537761704261636b20616c7265616479206f6e207374617475730000000000006044820152606401610a8c565b601980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040519081527fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b7906020015b60405180910390a150565b600033610cc7858285611d66565b610cd2858585611e16565b506001949350505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091906109f89082908690610d1790879061313d565b611bb4565b610d24611d0c565b6017546001600160a01b0390811690821603610da85760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460448201527f20616464726573730000000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b038116610e245760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201527f65726f20616464726573730000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b0381163b15610ea25760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60448201527f74726163740000000000000000000000000000000000000000000000000000006064820152608401610a8c565b601780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f090600090a250565b3060009081526002602052604090205480610f615760405162461bcd60e51b815260206004820152601760248201527f43616e742053776170204261636b203020546f6b656e210000000000000000006044820152606401610a8c565b610f696123c6565b50565b610f74611d0c565b610f7e600061287a565b565b610f88611d0c565b6016546001600160a01b039081169082160361100c5760405162461bcd60e51b815260206004820152602a60248201527f446576656c6f706d656e742077616c6c657420697320616c726561647920746860448201527f61742061646472657373000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b0381166110885760405162461bcd60e51b815260206004820152602d60248201527f446576656c6f706d656e742077616c6c65742063616e6e6f742062652074686560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b0381163b156111065760405162461bcd60e51b815260206004820152602760248201527f446576656c6f706d656e742077616c6c65742063616e6e6f742062652061206360448201527f6f6e7472616374000000000000000000000000000000000000000000000000006064820152608401610a8c565b601680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517fcdc029fe43fba990bcf122937ee89820d18c02bf1d65ae8df6148ebb166848ff90600090a250565b606060068054610967906130bb565b61117f611d0c565b6001600160a01b0382166000908152601a602052604090205481151560ff9091161515036112155760405162461bcd60e51b815260206004820152602d60248201527f50616972206164647265737320697320616c7265616479207468652076616c7560448201527f65206f66202773746174757327000000000000000000000000000000000000006064820152608401610a8c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036112965760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f7420736574207468697320706169720000000000000000000000006044820152606401610a8c565b6001600160a01b0382166000818152601a602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320591015b60405180910390a25050565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909190838110156113b15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610a8c565b610cd28286868403611bb4565b6000336109f8818585611e16565b6113d4611d0c565b806018540361144b5760405162461bcd60e51b815260206004820152602960248201527f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e20746860448201527f617420616d6f756e7400000000000000000000000000000000000000000000006064820152608401610a8c565b620f424061145860045490565b6114629190613150565b8110156114d75760405162461bcd60e51b815260206004820152603e60248201527f416d6f756e74206d75737420626520657175616c206f7220677265617465722060448201527f7468616e20302e30303030303125206f6620546f74616c20537570706c7900006064820152608401610a8c565b60188190556040518181527fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e4890602001610cae565b60004660380361152f57507310ed43c718714eb63d5aa57b78b54704e256024e90565b46606103611550575073d99d1c33f9fc3444f8101754abc46c52416550d190565b466001148061155f5750466005145b1561157d5750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b60405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e65747760448201527f6f726b00000000000000000000000000000000000000000000000000000000006064820152608401610a8c565b6115f3611d0c565b6001600160a01b0382166000908152601b602052604090205481151560ff9091161515036116895760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f662060448201527f276578636c7564656427000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b0382166000818152601b602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe19101611308565b611707611d0c565b8460075414158061171a57508360095414155b80611727575082600b5414155b80611734575081600d5414155b80611741575080600f5414155b61178d5760405162461bcd60e51b815260206004820152601e60248201527f4275792054617820616c7265616479206f6e207468617420616d6f756e7400006044820152606401610a8c565b6101f481838561179d888a61313d565b6117a7919061313d565b6117b1919061313d565b6117bb919061313d565b11156118095760405162461bcd60e51b815260206004820152601e60248201527f427579205461782063616e6e6f74206265206d6f7265207468616e20352500006044820152606401610a8c565b60078590556009849055600b839055600d829055600f819055604080518681526020810186905290810184905260608101839052608081018290527f6eaceae9236c29c27f3e2ff41613be4eacf481fe9f6d5339f9e2690876558d609060a0015b60405180910390a15050505050565b611881611d0c565b6001600160a01b0381166118fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a8c565b610f698161287a565b61190e611d0c565b306001600160a01b038216036119665760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610a8c565b6001600160a01b0381166119a45760405133904780156108fc02916000818181858888f193505050501580156119a0573d6000803e3d6000fd5b5050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611a06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2a919061318b565b9050611a406001600160a01b03831633836128e2565b505050565b611a4d611d0c565b84600854141580611a60575083600a5414155b80611a6d575082600c5414155b80611a7a575081600e5414155b80611a8757508060105414155b611ad35760405162461bcd60e51b815260206004820152601f60248201527f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e74006044820152606401610a8c565b6101f4818385611ae3888a61313d565b611aed919061313d565b611af7919061313d565b611b01919061313d565b1115611b4f5760405162461bcd60e51b815260206004820152601f60248201527f53656c6c205461782063616e6e6f74206265206d6f7265207468616e203525006044820152606401610a8c565b6008859055600a849055600c839055600e8290556010819055604080518681526020810186905290810184905260608101839052608081018290527fe239d188cdc892ade954e5ca9d66ba24c4110d46ff4e37cba09ea07c4def60dc9060a00161186a565b6001600160a01b038316611c2f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b038216611cab5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b03163314610f7e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a8c565b6001600160a01b038381166000908152600360209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611e105781811015611e035760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a8c565b611e108484848403611bb4565b50505050565b6001600160a01b038316611e925760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b038216611f0e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a8c565b80600003611f2257611a4083836000612962565b3060009081526002602052604090205460185481108015908190611f61575060175474010000000000000000000000000000000000000000900460ff16155b8015611f8557506001600160a01b0384166000908152601a602052604090205460ff165b8015611f93575060195460ff165b8015611fc857506000601454601354601254601154611fb2919061313d565b611fbc919061313d565b611fc6919061313d565b115b15611fd557611fd56123c6565b6001600160a01b0385166000908152601b602052604090205460019060ff168061201757506001600160a01b0385166000908152601b602052604090205460ff165b8061203c575060175474010000000000000000000000000000000000000000900460ff165b15612045575060005b80156123b3576001600160a01b0386166000908152601a6020526040812054819081908190819060ff16156121a0577f00000000000000000000000000000000000000000000000000000000000000006007548a6120a391906131a4565b6120ad9190613150565b94507f00000000000000000000000000000000000000000000000000000000000000006009548a6120de91906131a4565b6120e89190613150565b93507f0000000000000000000000000000000000000000000000000000000000000000600b548a61211991906131a4565b6121239190613150565b92507f0000000000000000000000000000000000000000000000000000000000000000600d548a61215491906131a4565b61215e9190613150565b91507f0000000000000000000000000000000000000000000000000000000000000000600f548a61218f91906131a4565b6121999190613150565b90506122e9565b6001600160a01b038a166000908152601a602052604090205460ff16156122e9577f00000000000000000000000000000000000000000000000000000000000000006008548a6121f091906131a4565b6121fa9190613150565b94507f0000000000000000000000000000000000000000000000000000000000000000600a548a61222b91906131a4565b6122359190613150565b93507f0000000000000000000000000000000000000000000000000000000000000000600c548a61226691906131a4565b6122709190613150565b92507f0000000000000000000000000000000000000000000000000000000000000000600e548a6122a191906131a4565b6122ab9190613150565b91507f00000000000000000000000000000000000000000000000000000000000000006010548a6122dc91906131a4565b6122e69190613150565b90505b83601160008282546122fb919061313d565b925050819055508260126000828254612314919061313d565b92505081905550816013600082825461232d919061313d565b925050819055508060146000828254612346919061313d565b9091555060009050818361235a868861313d565b612364919061313d565b61236e919061313d565b9050851561238f57612380868b6131bb565b995061238f8c61dead88612962565b80156123ac5761239f818b6131bb565b99506123ac8c3083612962565b5050505050505b6123be868686612962565b505050505050565b601780547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061243a5761243a6131ce565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124dc91906131fd565b816001815181106124ef576124ef6131ce565b6001600160a01b039092166020928302919091018201523060009081526002909152604081205490506000601454601354601254601154612530919061313d565b61253a919061313d565b612544919061313d565b905060008160026013546125589190613150565b61256290856131a4565b61256c9190613150565b9050600061257a82856131bb565b9050600260135461258b9190613150565b61259590846131bb565b9250600060026013546125a89190613150565b6013546125b591906131bb565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906126269085906000908b903090429060040161321a565b600060405180830381600087803b15801561264057600080fd5b505af1925050508015612651575060015b61266057505050505050612850565b6011544790600090869061267490846131a4565b61267e9190613150565b90506000866012548461269191906131a4565b61269b9190613150565b90506000876126aa86866131a4565b6126b49190613150565b9050600081836126c486886131bb565b6126ce91906131bb565b6126d891906131bb565b905083156126f8576015546126f6906001600160a01b031685612b56565b505b821561271657601654612714906001600160a01b031684612b56565b505b6000881180156127265750600082115b15612812576040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101899052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990849060c40160606040518083038185885af193505050508015612809575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526128069181019061328b565b60015b15612812575050505b80156128305760175461282e906001600160a01b031682612b56565b505b505060006011819055601281905560138190556014555050505050505050505b601780547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611a40908490612bd2565b6001600160a01b0383166129de5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b038216612a5a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b03831660009081526002602052604090205481811015612ae95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b0380851660008181526002602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612b499086815260200190565b60405180910390a3611e10565b6000612b60612cba565b81471015612b7057506000612bc9565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114612bbd576040519150601f19603f3d011682016040523d82523d6000602084013e612bc2565b606091505b5090925050505b6109fe60018055565b6000612c27826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612d139092919063ffffffff16565b9050805160001480612c48575080806020019051810190612c4891906132b9565b611a405760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610a8c565b600260015403612d0c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a8c565b6002600155565b6060612d228484600085612d2a565b949350505050565b606082471015612da25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610a8c565b600080866001600160a01b03168587604051612dbe91906132d6565b60006040518083038185875af1925050503d8060008114612dfb576040519150601f19603f3d011682016040523d82523d6000602084013e612e00565b606091505b5091509150612e1187838387612e1c565b979650505050505050565b60608315612e8b578251600003612e84576001600160a01b0385163b612e845760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a8c565b5081612d22565b612d228383815115612ea05781518083602001fd5b8060405162461bcd60e51b8152600401610a8c9190612ede565b60005b83811015612ed5578181015183820152602001612ebd565b50506000910152565b6020815260008251806020840152612efd816040850160208701612eba565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6001600160a01b0381168114610f6957600080fd5b60008060408385031215612f5757600080fd5b8235612f6281612f2f565b946020939093013593505050565b600060208284031215612f8257600080fd5b8135612f8d81612f2f565b9392505050565b8015158114610f6957600080fd5b600060208284031215612fb457600080fd5b8135612f8d81612f94565b600080600060608486031215612fd457600080fd5b8335612fdf81612f2f565b92506020840135612fef81612f2f565b929592945050506040919091013590565b6000806040838503121561301357600080fd5b823561301e81612f2f565b9150602083013561302e81612f94565b809150509250929050565b60006020828403121561304b57600080fd5b5035919050565b6000806040838503121561306557600080fd5b823561307081612f2f565b9150602083013561302e81612f2f565b600080600080600060a0868803121561309857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600181811c908216806130cf57607f821691505b602082108103613108577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156109fe576109fe61310e565b600082613186577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561319d57600080fd5b5051919050565b80820281158282048414176109fe576109fe61310e565b818103818111156109fe576109fe61310e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561320f57600080fd5b8151612f8d81612f2f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561326a5784516001600160a01b031683529383019391830191600101613245565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132a057600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156132cb57600080fd5b8151612f8d81612f94565b600082516132e8818460208701612eba565b919091019291505056fea26469706673582212208c5bd986b1d638ee29c2578b1e9c5c4c7a035e609827c78783e678d64f34949064736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102fd5760003560e01c806372ac24861161018d578063afa4f3b2116100e0578063dd62ed3e1161008f578063e5a47e941161006c578063e5a47e94146108d8578063f2fde38b146108f8578063f9d0831a14610918578063fced1e7b1461093857005b8063dd62ed3e1461085c578063deab8aea146108a2578063e2f45605146108c257005b8063d07d2cd0116100bd578063d07d2cd014610811578063d54f7d5e14610827578063d63cad221461083c57005b8063afa4f3b2146107bb578063bdf95f04146107db578063c04a5414146107f157005b806395d89b411161013c5780639a7a23d6116101195780639a7a23d61461075b578063a457c2d71461077b578063a9059cbb1461079b57005b806395d89b41146106fc57806396ce0795146107115780639a5c48501461074557005b80638123bdc81161016a5780638123bdc8146106b25780638a093af8146106c85780638da5cb5b146106de57005b806372ac24861461063957806375f0a874146106595780637949a4031461067957005b806342d0b0bc116102505780635d098b38116101ff57806370a08231116101dc57806370a08231146105c2578063715018a6146105f857806371afc7131461060d578063721e62331461062357005b80635d098b3814610577578063600461911461059757806366eb3785146105ad57005b8063526f77221161022d578063526f77221461053157806352dfc8d014610547578063574165031461056157005b806342d0b0bc146104ae57806349bd5a5e146104c45780634fbee193146104f857005b80631f88a23e116102ac5780632b175cf8116102895780632b175cf81461045c578063313ce56714610472578063395093511461048e57005b80631f88a23e1461040657806323b872dd14610426578063248ba7ed1461044657005b80631694505e116102da5780631694505e1461038557806318160ddd146103d15780631d0adc07146103e657005b806306fdde0314610306578063095ea7b3146103315780630abc8e7b1461036157005b3661030457005b005b34801561031257600080fd5b5061031b610958565b6040516103289190612ede565b60405180910390f35b34801561033d57600080fd5b5061035161034c366004612f44565b6109ea565b6040519015158152602001610328565b34801561036d57600080fd5b50610377600d5481565b604051908152602001610328565b34801561039157600080fd5b506103b97f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610328565b3480156103dd57600080fd5b50600454610377565b3480156103f257600080fd5b50610304610401366004612f70565b610a04565b34801561041257600080fd5b50610304610421366004612fa2565b610bf1565b34801561043257600080fd5b50610351610441366004612fbf565b610cb9565b34801561045257600080fd5b50610377600e5481565b34801561046857600080fd5b5061037760095481565b34801561047e57600080fd5b5060405160128152602001610328565b34801561049a57600080fd5b506103516104a9366004612f44565b610cdd565b3480156104ba57600080fd5b5061037760105481565b3480156104d057600080fd5b506103b97f0000000000000000000000004ffb3d2c9183028eca7f671a7b8bd87d6b2c233d81565b34801561050457600080fd5b50610351610513366004612f70565b6001600160a01b03166000908152601b602052604090205460ff1690565b34801561053d57600080fd5b5061037760075481565b34801561055357600080fd5b506019546103519060ff1681565b34801561056d57600080fd5b50610377600b5481565b34801561058357600080fd5b50610304610592366004612f70565b610d1c565b3480156105a357600080fd5b5061037760125481565b3480156105b957600080fd5b50610304610f04565b3480156105ce57600080fd5b506103776105dd366004612f70565b6001600160a01b031660009081526002602052604090205490565b34801561060457600080fd5b50610304610f6c565b34801561061957600080fd5b5061037760145481565b34801561062f57600080fd5b50610377600f5481565b34801561064557600080fd5b50610304610654366004612f70565b610f80565b34801561066557600080fd5b506017546103b9906001600160a01b031681565b34801561068557600080fd5b50610351610694366004612f70565b6001600160a01b03166000908152601a602052604090205460ff1690565b3480156106be57600080fd5b5061037760135481565b3480156106d457600080fd5b50610377600a5481565b3480156106ea57600080fd5b506000546001600160a01b03166103b9565b34801561070857600080fd5b5061031b611168565b34801561071d57600080fd5b506103777f000000000000000000000000000000000000000000000000000000000000271081565b34801561075157600080fd5b5061037760115481565b34801561076757600080fd5b50610304610776366004613000565b611177565b34801561078757600080fd5b50610351610796366004612f44565b611314565b3480156107a757600080fd5b506103516107b6366004612f44565b6113be565b3480156107c757600080fd5b506103046107d6366004613039565b6113cc565b3480156107e757600080fd5b50610377600c5481565b3480156107fd57600080fd5b506016546103b9906001600160a01b031681565b34801561081d57600080fd5b5061037760085481565b34801561083357600080fd5b506103b961150c565b34801561084857600080fd5b50610304610857366004613000565b6115eb565b34801561086857600080fd5b50610377610877366004613052565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156108ae57600080fd5b506015546103b9906001600160a01b031681565b3480156108ce57600080fd5b5061037760185481565b3480156108e457600080fd5b506103046108f3366004613080565b6116ff565b34801561090457600080fd5b50610304610913366004612f70565b611879565b34801561092457600080fd5b50610304610933366004612f70565b611906565b34801561094457600080fd5b50610304610953366004613080565b611a45565b606060058054610967906130bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610993906130bb565b80156109e05780601f106109b5576101008083540402835291602001916109e0565b820191906000526020600020905b8154815290600101906020018083116109c357829003601f168201915b5050505050905090565b6000336109f8818585611bb4565b60019150505b92915050565b610a0c611d0c565b6015546001600160a01b0390811690821603610a955760405162461bcd60e51b815260206004820152602660248201527f4275796261636b2077616c6c657420697320616c72656164792074686174206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b038116610b115760405162461bcd60e51b815260206004820152602960248201527f4275796261636b2077616c6c65742063616e6e6f7420626520746865207a657260448201527f6f206164647265737300000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b0381163b15610b8f5760405162461bcd60e51b815260206004820152602360248201527f4275796261636b2077616c6c65742063616e6e6f74206265206120636f6e747260448201527f61637400000000000000000000000000000000000000000000000000000000006064820152608401610a8c565b601580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517ff598e8d6690c77e212cb5fae7b0d3a1ccf7123f4d40ae43d5465cd7827c99fec90600090a250565b610bf9611d0c565b60195481151560ff909116151503610c535760405162461bcd60e51b815260206004820152601a60248201527f537761704261636b20616c7265616479206f6e207374617475730000000000006044820152606401610a8c565b601980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040519081527fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b7906020015b60405180910390a150565b600033610cc7858285611d66565b610cd2858585611e16565b506001949350505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091906109f89082908690610d1790879061313d565b611bb4565b610d24611d0c565b6017546001600160a01b0390811690821603610da85760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460448201527f20616464726573730000000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b038116610e245760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201527f65726f20616464726573730000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b0381163b15610ea25760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60448201527f74726163740000000000000000000000000000000000000000000000000000006064820152608401610a8c565b601780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f090600090a250565b3060009081526002602052604090205480610f615760405162461bcd60e51b815260206004820152601760248201527f43616e742053776170204261636b203020546f6b656e210000000000000000006044820152606401610a8c565b610f696123c6565b50565b610f74611d0c565b610f7e600061287a565b565b610f88611d0c565b6016546001600160a01b039081169082160361100c5760405162461bcd60e51b815260206004820152602a60248201527f446576656c6f706d656e742077616c6c657420697320616c726561647920746860448201527f61742061646472657373000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b0381166110885760405162461bcd60e51b815260206004820152602d60248201527f446576656c6f706d656e742077616c6c65742063616e6e6f742062652074686560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b0381163b156111065760405162461bcd60e51b815260206004820152602760248201527f446576656c6f706d656e742077616c6c65742063616e6e6f742062652061206360448201527f6f6e7472616374000000000000000000000000000000000000000000000000006064820152608401610a8c565b601680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517fcdc029fe43fba990bcf122937ee89820d18c02bf1d65ae8df6148ebb166848ff90600090a250565b606060068054610967906130bb565b61117f611d0c565b6001600160a01b0382166000908152601a602052604090205481151560ff9091161515036112155760405162461bcd60e51b815260206004820152602d60248201527f50616972206164647265737320697320616c7265616479207468652076616c7560448201527f65206f66202773746174757327000000000000000000000000000000000000006064820152608401610a8c565b7f0000000000000000000000004ffb3d2c9183028eca7f671a7b8bd87d6b2c233d6001600160a01b0316826001600160a01b0316036112965760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f7420736574207468697320706169720000000000000000000000006044820152606401610a8c565b6001600160a01b0382166000818152601a602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320591015b60405180910390a25050565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909190838110156113b15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610a8c565b610cd28286868403611bb4565b6000336109f8818585611e16565b6113d4611d0c565b806018540361144b5760405162461bcd60e51b815260206004820152602960248201527f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e20746860448201527f617420616d6f756e7400000000000000000000000000000000000000000000006064820152608401610a8c565b620f424061145860045490565b6114629190613150565b8110156114d75760405162461bcd60e51b815260206004820152603e60248201527f416d6f756e74206d75737420626520657175616c206f7220677265617465722060448201527f7468616e20302e30303030303125206f6620546f74616c20537570706c7900006064820152608401610a8c565b60188190556040518181527fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e4890602001610cae565b60004660380361152f57507310ed43c718714eb63d5aa57b78b54704e256024e90565b46606103611550575073d99d1c33f9fc3444f8101754abc46c52416550d190565b466001148061155f5750466005145b1561157d5750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b60405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e65747760448201527f6f726b00000000000000000000000000000000000000000000000000000000006064820152608401610a8c565b6115f3611d0c565b6001600160a01b0382166000908152601b602052604090205481151560ff9091161515036116895760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f662060448201527f276578636c7564656427000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b0382166000818152601b602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe19101611308565b611707611d0c565b8460075414158061171a57508360095414155b80611727575082600b5414155b80611734575081600d5414155b80611741575080600f5414155b61178d5760405162461bcd60e51b815260206004820152601e60248201527f4275792054617820616c7265616479206f6e207468617420616d6f756e7400006044820152606401610a8c565b6101f481838561179d888a61313d565b6117a7919061313d565b6117b1919061313d565b6117bb919061313d565b11156118095760405162461bcd60e51b815260206004820152601e60248201527f427579205461782063616e6e6f74206265206d6f7265207468616e20352500006044820152606401610a8c565b60078590556009849055600b839055600d829055600f819055604080518681526020810186905290810184905260608101839052608081018290527f6eaceae9236c29c27f3e2ff41613be4eacf481fe9f6d5339f9e2690876558d609060a0015b60405180910390a15050505050565b611881611d0c565b6001600160a01b0381166118fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a8c565b610f698161287a565b61190e611d0c565b306001600160a01b038216036119665760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610a8c565b6001600160a01b0381166119a45760405133904780156108fc02916000818181858888f193505050501580156119a0573d6000803e3d6000fd5b5050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611a06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2a919061318b565b9050611a406001600160a01b03831633836128e2565b505050565b611a4d611d0c565b84600854141580611a60575083600a5414155b80611a6d575082600c5414155b80611a7a575081600e5414155b80611a8757508060105414155b611ad35760405162461bcd60e51b815260206004820152601f60248201527f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e74006044820152606401610a8c565b6101f4818385611ae3888a61313d565b611aed919061313d565b611af7919061313d565b611b01919061313d565b1115611b4f5760405162461bcd60e51b815260206004820152601f60248201527f53656c6c205461782063616e6e6f74206265206d6f7265207468616e203525006044820152606401610a8c565b6008859055600a849055600c839055600e8290556010819055604080518681526020810186905290810184905260608101839052608081018290527fe239d188cdc892ade954e5ca9d66ba24c4110d46ff4e37cba09ea07c4def60dc9060a00161186a565b6001600160a01b038316611c2f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b038216611cab5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b03163314610f7e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a8c565b6001600160a01b038381166000908152600360209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611e105781811015611e035760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a8c565b611e108484848403611bb4565b50505050565b6001600160a01b038316611e925760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b038216611f0e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a8c565b80600003611f2257611a4083836000612962565b3060009081526002602052604090205460185481108015908190611f61575060175474010000000000000000000000000000000000000000900460ff16155b8015611f8557506001600160a01b0384166000908152601a602052604090205460ff165b8015611f93575060195460ff165b8015611fc857506000601454601354601254601154611fb2919061313d565b611fbc919061313d565b611fc6919061313d565b115b15611fd557611fd56123c6565b6001600160a01b0385166000908152601b602052604090205460019060ff168061201757506001600160a01b0385166000908152601b602052604090205460ff165b8061203c575060175474010000000000000000000000000000000000000000900460ff165b15612045575060005b80156123b3576001600160a01b0386166000908152601a6020526040812054819081908190819060ff16156121a0577f00000000000000000000000000000000000000000000000000000000000027106007548a6120a391906131a4565b6120ad9190613150565b94507f00000000000000000000000000000000000000000000000000000000000027106009548a6120de91906131a4565b6120e89190613150565b93507f0000000000000000000000000000000000000000000000000000000000002710600b548a61211991906131a4565b6121239190613150565b92507f0000000000000000000000000000000000000000000000000000000000002710600d548a61215491906131a4565b61215e9190613150565b91507f0000000000000000000000000000000000000000000000000000000000002710600f548a61218f91906131a4565b6121999190613150565b90506122e9565b6001600160a01b038a166000908152601a602052604090205460ff16156122e9577f00000000000000000000000000000000000000000000000000000000000027106008548a6121f091906131a4565b6121fa9190613150565b94507f0000000000000000000000000000000000000000000000000000000000002710600a548a61222b91906131a4565b6122359190613150565b93507f0000000000000000000000000000000000000000000000000000000000002710600c548a61226691906131a4565b6122709190613150565b92507f0000000000000000000000000000000000000000000000000000000000002710600e548a6122a191906131a4565b6122ab9190613150565b91507f00000000000000000000000000000000000000000000000000000000000027106010548a6122dc91906131a4565b6122e69190613150565b90505b83601160008282546122fb919061313d565b925050819055508260126000828254612314919061313d565b92505081905550816013600082825461232d919061313d565b925050819055508060146000828254612346919061313d565b9091555060009050818361235a868861313d565b612364919061313d565b61236e919061313d565b9050851561238f57612380868b6131bb565b995061238f8c61dead88612962565b80156123ac5761239f818b6131bb565b99506123ac8c3083612962565b5050505050505b6123be868686612962565b505050505050565b601780547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061243a5761243a6131ce565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124dc91906131fd565b816001815181106124ef576124ef6131ce565b6001600160a01b039092166020928302919091018201523060009081526002909152604081205490506000601454601354601254601154612530919061313d565b61253a919061313d565b612544919061313d565b905060008160026013546125589190613150565b61256290856131a4565b61256c9190613150565b9050600061257a82856131bb565b9050600260135461258b9190613150565b61259590846131bb565b9250600060026013546125a89190613150565b6013546125b591906131bb565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081529091506001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906126269085906000908b903090429060040161321a565b600060405180830381600087803b15801561264057600080fd5b505af1925050508015612651575060015b61266057505050505050612850565b6011544790600090869061267490846131a4565b61267e9190613150565b90506000866012548461269191906131a4565b61269b9190613150565b90506000876126aa86866131a4565b6126b49190613150565b9050600081836126c486886131bb565b6126ce91906131bb565b6126d891906131bb565b905083156126f8576015546126f6906001600160a01b031685612b56565b505b821561271657601654612714906001600160a01b031684612b56565b505b6000881180156127265750600082115b15612812576040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101899052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990849060c40160606040518083038185885af193505050508015612809575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526128069181019061328b565b60015b15612812575050505b80156128305760175461282e906001600160a01b031682612b56565b505b505060006011819055601281905560138190556014555050505050505050505b601780547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611a40908490612bd2565b6001600160a01b0383166129de5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b038216612a5a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b03831660009081526002602052604090205481811015612ae95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610a8c565b6001600160a01b0380851660008181526002602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612b499086815260200190565b60405180910390a3611e10565b6000612b60612cba565b81471015612b7057506000612bc9565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114612bbd576040519150601f19603f3d011682016040523d82523d6000602084013e612bc2565b606091505b5090925050505b6109fe60018055565b6000612c27826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612d139092919063ffffffff16565b9050805160001480612c48575080806020019051810190612c4891906132b9565b611a405760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610a8c565b600260015403612d0c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a8c565b6002600155565b6060612d228484600085612d2a565b949350505050565b606082471015612da25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610a8c565b600080866001600160a01b03168587604051612dbe91906132d6565b60006040518083038185875af1925050503d8060008114612dfb576040519150601f19603f3d011682016040523d82523d6000602084013e612e00565b606091505b5091509150612e1187838387612e1c565b979650505050505050565b60608315612e8b578251600003612e84576001600160a01b0385163b612e845760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a8c565b5081612d22565b612d228383815115612ea05781518083602001fd5b8060405162461bcd60e51b8152600401610a8c9190612ede565b60005b83811015612ed5578181015183820152602001612ebd565b50506000910152565b6020815260008251806020840152612efd816040850160208701612eba565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6001600160a01b0381168114610f6957600080fd5b60008060408385031215612f5757600080fd5b8235612f6281612f2f565b946020939093013593505050565b600060208284031215612f8257600080fd5b8135612f8d81612f2f565b9392505050565b8015158114610f6957600080fd5b600060208284031215612fb457600080fd5b8135612f8d81612f94565b600080600060608486031215612fd457600080fd5b8335612fdf81612f2f565b92506020840135612fef81612f2f565b929592945050506040919091013590565b6000806040838503121561301357600080fd5b823561301e81612f2f565b9150602083013561302e81612f94565b809150509250929050565b60006020828403121561304b57600080fd5b5035919050565b6000806040838503121561306557600080fd5b823561307081612f2f565b9150602083013561302e81612f2f565b600080600080600060a0868803121561309857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600181811c908216806130cf57607f821691505b602082108103613108577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156109fe576109fe61310e565b600082613186577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561319d57600080fd5b5051919050565b80820281158282048414176109fe576109fe61310e565b818103818111156109fe576109fe61310e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561320f57600080fd5b8151612f8d81612f2f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561326a5784516001600160a01b031683529383019391830191600101613245565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132a057600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156132cb57600080fd5b8151612f8d81612f94565b600082516132e8818460208701612eba565b919091019291505056fea26469706673582212208c5bd986b1d638ee29c2578b1e9c5c4c7a035e609827c78783e678d64f34949064736f6c63430008130033

Deployed Bytecode Sourcemap

23955:16742:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17583:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18581:226;;;;;;;;;;-1:-1:-1;18581:226:0;;;;;:::i;:::-;;:::i;:::-;;;1373:14:1;;1366:22;1348:41;;1336:2;1321:18;18581:226:0;1208:187:1;24269:30:0;;;;;;;;;;;;;;;;;;;1546:25:1;;;1534:2;1519:18;24269:30:0;1400:177:1;24857:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1772:55:1;;;1754:74;;1742:2;1727:18;24857:51:0;1582:252:1;17904:108:0;;;;;;;;;;-1:-1:-1;17992:12:0;;17904:108;;31229:554;;;;;;;;;;-1:-1:-1;31229:554:0;;;;;:::i;:::-;;:::i;33469:224::-;;;;;;;;;;-1:-1:-1;33469:224:0;;;;;:::i;:::-;;:::i;18815:295::-;;;;;;;;;;-1:-1:-1;18815:295:0;;;;;:::i;:::-;;:::i;24306:31::-;;;;;;;;;;;;;;;;24115:28;;;;;;;;;;;;;;;;17803:93;;;;;;;;;;-1:-1:-1;17803:93:0;;17886:2;3063:36:1;;3051:2;3036:18;17803:93:0;2921:184:1;19118:263:0;;;;;;;;;;-1:-1:-1;19118:263:0;;;;;:::i;:::-;;:::i;24383:31::-;;;;;;;;;;;;;;;;24915:38;;;;;;;;;;;;;;;34698:128;;;;;;;;;;-1:-1:-1;34698:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;34790:28:0;34766:4;34790:28;;;:19;:28;;;;;;;;;34698:128;24048:25;;;;;;;;;;;;;;;;24819:29;;;;;;;;;;-1:-1:-1;24819:29:0;;;;;;;;24188:32;;;;;;;;;;;;;;;;32421:580;;;;;;;;;;-1:-1:-1;32421:580:0;;;;;:::i;:::-;;:::i;24508:37::-;;;;;;;;;;;;;;;;40489:205;;;;;;;;;;;;;:::i;18020:143::-;;;;;;;;;;-1:-1:-1;18020:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18137:18:0;18110:7;18137:18;;;:9;:18;;;;;;;18020:143;23400:103;;;;;;;;;;;;;:::i;24594:35::-;;;;;;;;;;;;;;;;24346:30;;;;;;;;;;;;;;;;31791:622;;;;;;;;;;-1:-1:-1;31791:622:0;;;;;:::i;:::-;;:::i;24712:30::-;;;;;;;;;;-1:-1:-1;24712:30:0;;;;-1:-1:-1;;;;;24712:30:0;;;34165:154;;;;;;;;;;-1:-1:-1;34165:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;34278:33:0;34254:4;34278:33;;;:27;:33;;;;;;;;;34165:154;24552:35;;;;;;;;;;;;;;;;24150:29;;;;;;;;;;;;;;;;23165:87;;;;;;;;;;-1:-1:-1;23211:7:0;23238:6;-1:-1:-1;;;;;23238:6:0;23165:87;;17691:104;;;;;;;;;;;;;:::i;24423:36::-;;;;;;;;;;;;;;;24468:33;;;;;;;;;;;;;;;;33701:456;;;;;;;;;;-1:-1:-1;33701:456:0;;;;;:::i;:::-;;:::i;19389:498::-;;;;;;;;;;-1:-1:-1;19389:498:0;;;;;:::i;:::-;;:::i;18171:218::-;;;;;;;;;;-1:-1:-1;18171:218:0;;;;;:::i;:::-;;:::i;33009:452::-;;;;;;;;;;-1:-1:-1;33009:452:0;;;;;:::i;:::-;;:::i;24227:33::-;;;;;;;;;;;;;;;;24673:32;;;;;;;;;;-1:-1:-1;24673:32:0;;;;-1:-1:-1;;;;;24673:32:0;;;24080:26;;;;;;;;;;;;;;;;27739:490;;;;;;;;;;;;;:::i;34327:363::-;;;;;;;;;;-1:-1:-1;34327:363:0;;;;;:::i;:::-;;:::i;18397:176::-;;;;;;;;;;-1:-1:-1;18397:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;18538:18:0;;;18511:7;18538:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18397:176;24638:28;;;;;;;;;;-1:-1:-1;24638:28:0;;;;-1:-1:-1;;;;;24638:28:0;;;24779:33;;;;;;;;;;;;;;;;28692:1241;;;;;;;;;;-1:-1:-1;28692:1241:0;;;;;:::i;:::-;;:::i;23511:238::-;;;;;;;;;;-1:-1:-1;23511:238:0;;;;;:::i;:::-;;:::i;28237:447::-;;;;;;;;;;-1:-1:-1;28237:447:0;;;;;:::i;:::-;;:::i;29941:1280::-;;;;;;;;;;-1:-1:-1;29941:1280:0;;;;;:::i;:::-;;:::i;17583:100::-;17637:13;17670:5;17663:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17583:100;:::o;18581:226::-;18689:4;17043:10;18745:32;17043:10;18761:7;18770:6;18745:8;:32::i;:::-;18795:4;18788:11;;;18581:226;;;;;:::o;31229:554::-;23124:13;:11;:13::i;:::-;31349::::1;::::0;-1:-1:-1;;;;;31349:13:0;;::::1;31331:31:::0;;::::1;::::0;31309:119:::1;;;::::0;-1:-1:-1;;;31309:119:0;;5409:2:1;31309:119:0::1;::::0;::::1;5391:21:1::0;5448:2;5428:18;;;5421:30;5487:34;5467:18;;;5460:62;5558:8;5538:18;;;5531:36;5584:19;;31309:119:0::1;;;;;;;;;-1:-1:-1::0;;;;;31461:28:0;::::1;31439:119;;;::::0;-1:-1:-1;;;31439:119:0;;5816:2:1;31439:119:0::1;::::0;::::1;5798:21:1::0;5855:2;5835:18;;;5828:30;5894:34;5874:18;;;5867:62;5965:11;5945:18;;;5938:39;5994:19;;31439:119:0::1;5614:405:1::0;31439:119:0::1;-1:-1:-1::0;;;;;27700:19:0;;;:23;31569:112:::1;;;::::0;-1:-1:-1;;;31569:112:0;;6226:2:1;31569:112:0::1;::::0;::::1;6208:21:1::0;6265:2;6245:18;;;6238:30;6304:34;6284:18;;;6277:62;6375:5;6355:18;;;6348:33;6398:19;;31569:112:0::1;6024:399:1::0;31569:112:0::1;31694:13;:30:::0;;;::::1;-1:-1:-1::0;;;;;31694:30:0;::::1;::::0;;::::1;::::0;;;31740:35:::1;::::0;::::1;::::0;-1:-1:-1;;31740:35:0::1;31229:554:::0;:::o;33469:224::-;23124:13;:11;:13::i;:::-;33544:17:::1;::::0;:27;::::1;;:17;::::0;;::::1;:27;;::::0;33536:66:::1;;;::::0;-1:-1:-1;;;33536:66:0;;6630:2:1;33536:66:0::1;::::0;::::1;6612:21:1::0;6669:2;6649:18;;;6642:30;6708:28;6688:18;;;6681:56;6754:18;;33536:66:0::1;6428:350:1::0;33536:66:0::1;33615:17;:26:::0;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;33657:28:::1;::::0;1348:41:1;;;33657:28:0::1;::::0;1336:2:1;1321:18;33657:28:0::1;;;;;;;;33469:224:::0;:::o;18815:295::-;18946:4;17043:10;19004:38;19020:4;17043:10;19035:6;19004:15;:38::i;:::-;19053:27;19063:4;19069:2;19073:6;19053:9;:27::i;:::-;-1:-1:-1;19098:4:0;;18815:295;-1:-1:-1;;;;18815:295:0:o;19118:263::-;17043:10;19231:4;18538:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;18538:27:0;;;;;;;;;;19231:4;;17043:10;19287:64;;17043:10;;18538:27;;19312:38;;19340:10;;19312:38;:::i;:::-;19287:8;:64::i;32421:580::-;23124:13;:11;:13::i;:::-;32547:15:::1;::::0;-1:-1:-1;;;;;32547:15:0;;::::1;32527:35:::0;;::::1;::::0;32505:125:::1;;;::::0;-1:-1:-1;;;32505:125:0;;7304:2:1;32505:125:0::1;::::0;::::1;7286:21:1::0;7343:2;7323:18;;;7316:30;7382:34;7362:18;;;7355:62;7453:10;7433:18;;;7426:38;7481:19;;32505:125:0::1;7102:404:1::0;32505:125:0::1;-1:-1:-1::0;;;;;32663:30:0;::::1;32641:123;;;::::0;-1:-1:-1;;;32641:123:0;;7713:2:1;32641:123:0::1;::::0;::::1;7695:21:1::0;7752:2;7732:18;;;7725:30;7791:34;7771:18;;;7764:62;7862:13;7842:18;;;7835:41;7893:19;;32641:123:0::1;7511:407:1::0;32641:123:0::1;-1:-1:-1::0;;;;;27700:19:0;;;:23;32775:116:::1;;;::::0;-1:-1:-1;;;32775:116:0;;8125:2:1;32775:116:0::1;::::0;::::1;8107:21:1::0;8164:2;8144:18;;;8137:30;8203:34;8183:18;;;8176:62;8274:7;8254:18;;;8247:35;8299:19;;32775:116:0::1;7923:401:1::0;32775:116:0::1;32904:15;:34:::0;;;::::1;-1:-1:-1::0;;;;;32904:34:0;::::1;::::0;;::::1;::::0;;;32954:39:::1;::::0;::::1;::::0;-1:-1:-1;;32954:39:0::1;32421:580:::0;:::o;40489:205::-;40584:4;40535:28;18137:18;;;:9;:18;;;;;;40611:24;40603:60;;;;-1:-1:-1;;;40603:60:0;;8531:2:1;40603:60:0;;;8513:21:1;8570:2;8550:18;;;8543:30;8609:25;8589:18;;;8582:53;8652:18;;40603:60:0;8329:347:1;40603:60:0;40676:10;:8;:10::i;:::-;40524:170;40489:205::o;23400:103::-;23124:13;:11;:13::i;:::-;23465:30:::1;23492:1;23465:18;:30::i;:::-;23400:103::o:0;31791:622::-;23124:13;:11;:13::i;:::-;31939:17:::1;::::0;-1:-1:-1;;;;;31939:17:0;;::::1;31917:39:::0;;::::1;::::0;31895:131:::1;;;::::0;-1:-1:-1;;;31895:131:0;;8883:2:1;31895:131:0::1;::::0;::::1;8865:21:1::0;8922:2;8902:18;;;8895:30;8961:34;8941:18;;;8934:62;9032:12;9012:18;;;9005:40;9062:19;;31895:131:0::1;8681:406:1::0;31895:131:0::1;-1:-1:-1::0;;;;;32059:32:0;::::1;32037:127;;;::::0;-1:-1:-1;;;32037:127:0;;9294:2:1;32037:127:0::1;::::0;::::1;9276:21:1::0;9333:2;9313:18;;;9306:30;9372:34;9352:18;;;9345:62;9443:15;9423:18;;;9416:43;9476:19;;32037:127:0::1;9092:409:1::0;32037:127:0::1;-1:-1:-1::0;;;;;27700:19:0;;;:23;32175:120:::1;;;::::0;-1:-1:-1;;;32175:120:0;;9708:2:1;32175:120:0::1;::::0;::::1;9690:21:1::0;9747:2;9727:18;;;9720:30;9786:34;9766:18;;;9759:62;9857:9;9837:18;;;9830:37;9884:19;;32175:120:0::1;9506:403:1::0;32175:120:0::1;32308:17;:38:::0;;;::::1;-1:-1:-1::0;;;;;32308:38:0;::::1;::::0;;::::1;::::0;;;32362:43:::1;::::0;::::1;::::0;-1:-1:-1;;32362:43:0::1;31791:622:::0;:::o;17691:104::-;17747:13;17780:7;17773:14;;;;;:::i;33701:456::-;23124:13;:11;:13::i;:::-;-1:-1:-1;;;;;33842:33:0;::::1;;::::0;;;:27:::1;:33;::::0;;;;;:43;::::1;;:33;::::0;;::::1;:43;;::::0;33820:138:::1;;;::::0;-1:-1:-1;;;33820:138:0;;10116:2:1;33820:138:0::1;::::0;::::1;10098:21:1::0;10155:2;10135:18;;;10128:30;10194:34;10174:18;;;10167:62;10265:15;10245:18;;;10238:43;10298:19;;33820:138:0::1;9914:409:1::0;33820:138:0::1;33993:13;-1:-1:-1::0;;;;;33977:30:0::1;:4;-1:-1:-1::0;;;;;33977:30:0::1;::::0;33969:63:::1;;;::::0;-1:-1:-1;;;33969:63:0;;10530:2:1;33969:63:0::1;::::0;::::1;10512:21:1::0;10569:2;10549:18;;;10542:30;10608:22;10588:18;;;10581:50;10648:18;;33969:63:0::1;10328:344:1::0;33969:63:0::1;-1:-1:-1::0;;;;;34045:33:0;::::1;;::::0;;;:27:::1;:33;::::0;;;;;;;;:42;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;34105:44;;1348:41:1;;;34105:44:0::1;::::0;1321:18:1;34105:44:0::1;;;;;;;;33701:456:::0;;:::o;19389:498::-;17043:10;19507:4;18538:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;18538:27:0;;;;;;;;;;19507:4;;17043:10;19668:15;19648:16;:35;;19626:122;;;;-1:-1:-1;;;19626:122:0;;10879:2:1;19626:122:0;;;10861:21:1;10918:2;10898:18;;;10891:30;10957:34;10937:18;;;10930:62;11028:7;11008:18;;;11001:35;11053:19;;19626:122:0;10677:401:1;19626:122:0;19784:60;19793:5;19800:7;19828:15;19809:16;:34;19784:8;:60::i;18171:218::-;18275:4;17043:10;18331:28;17043:10;18348:2;18352:6;18331:9;:28::i;33009:452::-;23124:13;:11;:13::i;:::-;33130:6:::1;33108:18;;:28:::0;33086:119:::1;;;::::0;-1:-1:-1;;;33086:119:0;;11285:2:1;33086:119:0::1;::::0;::::1;11267:21:1::0;11324:2;11304:18;;;11297:30;11363:34;11343:18;;;11336:62;11434:11;11414:18;;;11407:39;11463:19;;33086:119:0::1;11083:405:1::0;33086:119:0::1;33264:9;33248:13;17992:12:::0;;;17904:108;33248:13:::1;:25;;;;:::i;:::-;33238:6;:35;;33216:147;;;::::0;-1:-1:-1;;;33216:147:0;;11974:2:1;33216:147:0::1;::::0;::::1;11956:21:1::0;12013:2;11993:18;;;11986:30;12052:34;12032:18;;;12025:62;12123:32;12103:18;;;12096:60;12173:19;;33216:147:0::1;11772:426:1::0;33216:147:0::1;33376:18;:27:::0;;;33421:32:::1;::::0;1546:25:1;;;33421:32:0::1;::::0;1534:2:1;1519:18;33421:32:0::1;1400:177:1::0;27739:490:0;27788:7;27812:13;27829:2;27812:19;27808:414;;-1:-1:-1;27855:42:0;;27739:490::o;27808:414::-;27919:13;27936:2;27919:19;27915:307;;-1:-1:-1;27962:42:0;;27739:490::o;27915:307::-;28026:13;28043:1;28026:18;:40;;;;28048:13;28065:1;28048:18;28026:40;28022:200;;;-1:-1:-1;28090:42:0;;27739:490::o;28022:200::-;28165:45;;-1:-1:-1;;;28165:45:0;;12405:2:1;28165:45:0;;;12387:21:1;12444:2;12424:18;;;12417:30;12483:34;12463:18;;;12456:62;12554:5;12534:18;;;12527:33;12577:19;;28165:45:0;12203:399:1;34327:363:0;23124:13;:11;:13::i;:::-;-1:-1:-1;;;;;34464:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;34442:132:::1;;;::::0;-1:-1:-1;;;34442:132:0;;12809:2:1;34442:132:0::1;::::0;::::1;12791:21:1::0;12848:2;12828:18;;;12821:30;12887:34;12867:18;;;12860:62;12958:12;12938:18;;;12931:40;12988:19;;34442:132:0::1;12607:406:1::0;34442:132:0::1;-1:-1:-1::0;;;;;34585:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;34642:40;;1348:41:1;;;34642:40:0::1;::::0;1321:18:1;34642:40:0::1;1208:187:1::0;28692:1241:0;23124:13;:11;:13::i;:::-;28954:11:::1;28940:10;;:25;;:77;;;;29003:14;28986:13;;:31;;28940:77;:137;;;;29059:18;29038:17;;:39;;28940:137;:193;;;;29117:16;29098:15;;:35;;28940:193;:249;;;;29173:16;29154:15;;:35;;28940:249;28918:329;;;::::0;-1:-1:-1;;;28918:329:0;;13220:2:1;28918:329:0::1;::::0;::::1;13202:21:1::0;13259:2;13239:18;;;13232:30;13298:32;13278:18;;;13271:60;13348:18;;28918:329:0::1;13018:354:1::0;28918:329:0::1;29456:3;29419:16:::0;29383;29345:18;29280:45:::1;29311:14:::0;29280:11;:45:::1;:::i;:::-;:83;;;;:::i;:::-;:119;;;;:::i;:::-;:155;;;;:::i;:::-;:179;;29258:259;;;::::0;-1:-1:-1;;;29258:259:0;;13579:2:1;29258:259:0::1;::::0;::::1;13561:21:1::0;13618:2;13598:18;;;13591:30;13657:32;13637:18;;;13630:60;13707:18;;29258:259:0::1;13377:354:1::0;29258:259:0::1;29530:10;:24:::0;;;29565:13:::1;:30:::0;;;29606:17:::1;:38:::0;;;29655:15:::1;:34:::0;;;29700:15:::1;:34:::0;;;29752:173:::1;::::0;;13995:25:1;;;14051:2;14036:18;;14029:34;;;14079:18;;;14072:34;;;14137:2;14122:18;;14115:34;;;14180:3;14165:19;;14158:35;;;29752:173:0::1;::::0;13982:3:1;13967:19;29752:173:0::1;;;;;;;;28692:1241:::0;;;;;:::o;23511:238::-;23124:13;:11;:13::i;:::-;-1:-1:-1;;;;;23614:22:0;::::1;23592:110;;;::::0;-1:-1:-1;;;23592:110:0;;14406:2:1;23592:110:0::1;::::0;::::1;14388:21:1::0;14445:2;14425:18;;;14418:30;14484:34;14464:18;;;14457:62;14555:8;14535:18;;;14528:36;14581:19;;23592:110:0::1;14204:402:1::0;23592:110:0::1;23713:28;23732:8;23713:18;:28::i;28237:447::-:0;23124:13;:11;:13::i;:::-;28333:4:::1;-1:-1:-1::0;;;;;28316:22:0;::::1;::::0;28308:67:::1;;;::::0;-1:-1:-1;;;28308:67:0;;14813:2:1;28308:67:0::1;::::0;::::1;14795:21:1::0;;;14832:18;;;14825:30;14891:34;14871:18;;;14864:62;14943:18;;28308:67:0::1;14611:356:1::0;28308:67:0::1;-1:-1:-1::0;;;;;28392:21:0;::::1;28388:126;;28430:51;::::0;28438:10:::1;::::0;28459:21:::1;28430:51:::0;::::1;;;::::0;::::1;::::0;;;28459:21;28438:10;28430:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;40524:170:::0;40489:205::o;28388:126::-:1;28586:35;::::0;;;;28615:4:::1;28586:35;::::0;::::1;1754:74:1::0;28551:5:0;;28524:17:::1;::::0;-1:-1:-1;;;;;28586:20:0;::::1;::::0;::::1;::::0;1727:18:1;;28586:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28568:53:::0;-1:-1:-1;28632:44:0::1;-1:-1:-1::0;;;;;28632:23:0;::::1;28656:10;28568:53:::0;28632:23:::1;:44::i;:::-;28297:387;;28237:447:::0;:::o;29941:1280::-;23124:13;:11;:13::i;:::-;30210:12:::1;30195:11;;:27;;:81;;;;30261:15;30243:14;;:33;;30195:81;:143;;;;30319:19;30297:18;;:41;;30195:143;:201;;;;30379:17;30359:16;;:37;;30195:201;:259;;;;30437:17;30417:16;;:37;;30195:259;30173:340;;;::::0;-1:-1:-1;;;30173:340:0;;15363:2:1;30173:340:0::1;::::0;::::1;15345:21:1::0;15402:2;15382:18;;;15375:30;15441:33;15421:18;;;15414:61;15492:18;;30173:340:0::1;15161:355:1::0;30173:340:0::1;30727:3;30689:17:::0;30652;30613:19;30546:47:::1;30578:15:::0;30546:12;:47:::1;:::i;:::-;:86;;;;:::i;:::-;:123;;;;:::i;:::-;:160;;;;:::i;:::-;:184;;30524:265;;;::::0;-1:-1:-1;;;30524:265:0;;15723:2:1;30524:265:0::1;::::0;::::1;15705:21:1::0;15762:2;15742:18;;;15735:30;15801:33;15781:18;;;15774:61;15852:18;;30524:265:0::1;15521:355:1::0;30524:265:0::1;30802:11;:26:::0;;;30839:14:::1;:32:::0;;;30882:18:::1;:40:::0;;;30933:16:::1;:36:::0;;;30980:16:::1;:36:::0;;;31034:179:::1;::::0;;13995:25:1;;;14051:2;14036:18;;14029:34;;;14079:18;;;14072:34;;;14137:2;14122:18;;14115:34;;;14180:3;14165:19;;14158:35;;;31034:179:0::1;::::0;13982:3:1;13967:19;31034:179:0::1;13736:463:1::0;21665:380:0;-1:-1:-1;;;;;21801:19:0;;21793:68;;;;-1:-1:-1;;;21793:68:0;;16083:2:1;21793:68:0;;;16065:21:1;16122:2;16102:18;;;16095:30;16161:34;16141:18;;;16134:62;16232:6;16212:18;;;16205:34;16256:19;;21793:68:0;15881:400:1;21793:68:0;-1:-1:-1;;;;;21880:21:0;;21872:68;;;;-1:-1:-1;;;21872:68:0;;16488:2:1;21872:68:0;;;16470:21:1;16527:2;16507:18;;;16500:30;16566:34;16546:18;;;16539:62;16637:4;16617:18;;;16610:32;16659:19;;21872:68:0;16286:398:1;21872:68:0;-1:-1:-1;;;;;21953:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22005:32;;1546:25:1;;;22005:32:0;;1519:18:1;22005:32:0;;;;;;;21665:380;;;:::o;23260:132::-;23211:7;23238:6;-1:-1:-1;;;;;23238:6:0;17043:10;23324:23;23316:68;;;;-1:-1:-1;;;23316:68:0;;16891:2:1;23316:68:0;;;16873:21:1;;;16910:18;;;16903:30;16969:34;16949:18;;;16942:62;17021:18;;23316:68:0;16689:356:1;22053:502:0;-1:-1:-1;;;;;18538:18:0;;;22188:24;18538:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;22275:17;22255:37;;22251:297;;22355:6;22335:16;:26;;22309:117;;;;-1:-1:-1;;;22309:117:0;;17252:2:1;22309:117:0;;;17234:21:1;17291:2;17271:18;;;17264:30;17330:31;17310:18;;;17303:59;17379:18;;22309:117:0;17050:353:1;22309:117:0;22470:51;22479:5;22486:7;22514:6;22495:16;:25;22470:8;:51::i;:::-;22177:378;22053:502;;;:::o;34834:3053::-;-1:-1:-1;;;;;34966:18:0;;34958:68;;;;-1:-1:-1;;;34958:68:0;;17610:2:1;34958:68:0;;;17592:21:1;17649:2;17629:18;;;17622:30;17688:34;17668:18;;;17661:62;17759:7;17739:18;;;17732:35;17784:19;;34958:68:0;17408:401:1;34958:68:0;-1:-1:-1;;;;;35045:16:0;;35037:64;;;;-1:-1:-1;;;35037:64:0;;18016:2:1;35037:64:0;;;17998:21:1;18055:2;18035:18;;;18028:30;18094:34;18074:18;;;18067:62;18165:5;18145:18;;;18138:33;18188:19;;35037:64:0;17814:399:1;35037:64:0;35118:6;35128:1;35118:11;35114:93;;35146:28;35162:4;35168:2;35172:1;35146:15;:28::i;35114:93::-;35268:4;35219:28;18137:18;;;:9;:18;;;;;;35326;;35302:42;;;;;;;35375:33;;-1:-1:-1;35400:8:0;;;;;;;35399:9;35375:33;:81;;;;-1:-1:-1;;;;;;35425:31:0;;;;;;:27;:31;;;;;;;;35375:81;:115;;;;-1:-1:-1;35473:17:0;;;;35375:115;:289;;;;;35663:1;35627:20;;35587;;35545:22;;35507:18;;:60;;;;:::i;:::-;:100;;;;:::i;:::-;:140;;;;:::i;:::-;:157;35375:289;35357:356;;;35691:10;:8;:10::i;:::-;-1:-1:-1;;;;;35761:25:0;;35725:12;35761:25;;;:19;:25;;;;;;35740:4;;35761:25;;;:52;;-1:-1:-1;;;;;;35790:23:0;;;;;;:19;:23;;;;;;;;35761:52;:64;;;-1:-1:-1;35817:8:0;;;;;;;35761:64;35757:112;;;-1:-1:-1;35852:5:0;35757:112;35885:7;35881:1953;;;-1:-1:-1;;;;;36120:33:0;;35909:22;36120:33;;;:27;:33;;;;;;35909:22;;;;;;;;36120:33;;36116:993;;;36215:11;36201:10;;36192:6;:19;;;;:::i;:::-;36191:35;;;;:::i;:::-;36174:52;;36292:11;36275:13;;36266:6;:22;;;;:::i;:::-;36265:38;;;;:::i;:::-;36245:58;;36419:11;36377:17;;36368:6;:26;;;;:::i;:::-;36367:63;;;;:::i;:::-;36322:108;;36500:11;36481:15;;36472:6;:24;;;;:::i;:::-;36471:40;;;;:::i;:::-;36449:62;;36581:11;36562:15;;36553:6;:24;;;;:::i;:::-;36552:40;;;;:::i;:::-;36530:62;;36116:993;;;-1:-1:-1;;;;;36618:31:0;;;;;;:27;:31;;;;;;;;36614:495;;;36712:11;36697;;36688:6;:20;;;;:::i;:::-;36687:36;;;;:::i;:::-;36670:53;;36790:11;36772:14;;36763:6;:23;;;;:::i;:::-;36762:39;;;;:::i;:::-;36742:59;;36918:11;36875:18;;36866:6;:27;;;;:::i;:::-;36865:64;;;;:::i;:::-;36820:109;;37000:11;36980:16;;36971:6;:25;;;;:::i;:::-;36970:41;;;;:::i;:::-;36948:63;;37082:11;37062:16;;37053:6;:25;;;;:::i;:::-;37052:41;;;;:::i;:::-;37030:63;;36614:495;37147:17;37125:18;;:39;;;;;;;:::i;:::-;;;;;;;;37205:21;37179:22;;:47;;;;;;;:::i;:::-;;;;;;;;37265:19;37241:20;;:43;;;;;;;:::i;:::-;;;;;;;;37323:19;37299:20;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;37359:12:0;;-1:-1:-1;37491:19:0;37452;37374:58;37411:21;37374:17;:58;:::i;:::-;:97;;;;:::i;:::-;:136;;;;:::i;:::-;37359:151;-1:-1:-1;37531:18:0;;37527:156;;37570:24;37580:14;37570:24;;:::i;:::-;;;37613:54;37629:4;37643:6;37652:14;37613:15;:54::i;:::-;37703:8;;37699:124;;37732:14;37742:4;37732:14;;:::i;:::-;;;37765:42;37781:4;37795;37802;37765:15;:42::i;:::-;35894:1940;;;;;;35881:1953;37846:33;37862:4;37868:2;37872:6;37846:15;:33::i;:::-;34947:2940;;;34834:3053;;;:::o;37895:2308::-;25119:8;:15;;;;;;;;37966:16:::1;::::0;;37980:1:::1;37966:16:::0;;;;;::::1;::::0;;-1:-1:-1;;37966:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;37966:16:0::1;37942:40;;38011:4;37993;37998:1;37993:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;37993:23:0::1;;;-1:-1:-1::0;;;;;37993:23:0::1;;;::::0;::::1;38037:15;-1:-1:-1::0;;;;;38037:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38027:4;38032:1;38027:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38027:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:32;38121:4:::1;38072:28;18137:18:::0;;;:9;:18;;;;;;;38072:55:::1;;38140:16;38267:20;;38231;;38193:22;;38159:18;;:56;;;;:::i;:::-;:92;;;;:::i;:::-;:128;;;;:::i;:::-;38140:147;;38300:20;38390:8;38384:1;38361:20;;:24;;;;:::i;:::-;38324:62;::::0;:20;:62:::1;:::i;:::-;38323:75;;;;:::i;:::-;38300:98:::0;-1:-1:-1;38411:22:0::1;38436:35;38300:98:::0;38436:20;:35:::1;:::i;:::-;38411:60;;38521:1;38497:20;;38496:26;;;;:::i;:::-;38484:38;::::0;;::::1;:::i;:::-;;;38535:31;38631:1;38607:20;;38606:26;;;;:::i;:::-;38569:20;;:64;;;;:::i;:::-;38663:223;::::0;;;;38535:98;;-1:-1:-1;;;;;;38663:15:0::1;:66;::::0;::::1;::::0;:223:::1;::::0;38748:14;;38781:1:::1;::::0;38801:4;;38832::::1;::::0;38856:15:::1;::::0;38663:223:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;38646:292;;38920:7;;;;;;;;38646:292;39040:18;::::0;38971:21:::1;::::0;38950:18:::1;::::0;39062:8;;39027:31:::1;::::0;38971:21;39027:31:::1;:::i;:::-;39026:44;;;;:::i;:::-;39005:65;;39081:22;39159:8;39120:22;;39107:10;:35;;;;:::i;:::-;39106:61;;;;:::i;:::-;39081:86:::0;-1:-1:-1;39178:18:0::1;39240:8:::0;39200:36:::1;39213:23:::0;39200:10;:36:::1;:::i;:::-;39199:49;;;;:::i;:::-;39178:70:::0;-1:-1:-1;39259:20:0::1;39178:70:::0;39334:14;39282:36:::1;39308:10:::0;39282;:36:::1;:::i;:::-;:66;;;;:::i;:::-;:92;;;;:::i;:::-;39259:115:::0;-1:-1:-1;39391:14:0;;39387:81:::1;;39430:13;::::0;39422:34:::1;::::0;-1:-1:-1;;;;;39430:13:0::1;39445:10:::0;39422:7:::1;:34::i;:::-;;39387:81;39482:18:::0;;39478:93:::1;;39525:17;::::0;39517:42:::1;::::0;-1:-1:-1;;;;;39525:17:0::1;39544:14:::0;39517:7:::1;:42::i;:::-;;39478:93;39600:1;39585:12;:16;:34;;;;;39618:1;39605:10;:14;39585:34;39581:376;;;39657:264;::::0;;;;39738:4:::1;39657:264;::::0;::::1;20553:34:1::0;20603:18;;;20596:34;;;39801:1:0::1;20646:18:1::0;;;20639:34;;;20689:18;;;20682:34;39857:6:0::1;20732:19:1::0;;;20725:44;39887:15:0::1;20785:19:1::0;;;20778:35;39657:15:0::1;-1:-1:-1::0;;;;;39657:31:0::1;::::0;::::1;::::0;39696:10;;20464:19:1;;39657:264:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;39657:264:0::1;::::0;;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;39636:310:::0;::::1;;;;;;39971:16:::0;;39967:87:::1;;40012:15;::::0;40004:38:::1;::::0;-1:-1:-1;;;;;40012:15:0::1;40029:12:::0;40004:7:::1;:38::i;:::-;;39967:87;-1:-1:-1::0;;40087:1:0::1;40066:18;:22:::0;;;40099::::1;:26:::0;;;40136:20:::1;:24:::0;;;40171:20:::1;:24:::0;-1:-1:-1;;;;;;;;;25145:1:0::1;25157:8:::0;:16;;;;;;37895:2308::o;23757:191::-;23831:16;23850:6;;-1:-1:-1;;;;;23867:17:0;;;;;;;;;;23900:40;;23850:6;;;;;;;23900:40;;23831:16;23900:40;23820:128;23757:191;:::o;12130:214::-;12267:58;;;-1:-1:-1;;;;;21327:55:1;;12267:58:0;;;21309:74:1;21399:18;;;;21392:34;;;12267:58:0;;;;;;;;;;21282:18:1;;;;12267:58:0;;;;;;;;;;12290:23;12267:58;;;12213:123;;12247:5;;12213:19;:123::i;19895:714::-;-1:-1:-1;;;;;20026:18:0;;20018:68;;;;-1:-1:-1;;;20018:68:0;;17610:2:1;20018:68:0;;;17592:21:1;17649:2;17629:18;;;17622:30;17688:34;17668:18;;;17661:62;17759:7;17739:18;;;17732:35;17784:19;;20018:68:0;17408:401:1;20018:68:0;-1:-1:-1;;;;;20105:16:0;;20097:64;;;;-1:-1:-1;;;20097:64:0;;18016:2:1;20097:64:0;;;17998:21:1;18055:2;18035:18;;;18028:30;18094:34;18074:18;;;18067:62;18165:5;18145:18;;;18138:33;18188:19;;20097:64:0;17814:399:1;20097:64:0;-1:-1:-1;;;;;20247:15:0;;20225:19;20247:15;;;:9;:15;;;;;;20295:21;;;;20273:109;;;;-1:-1:-1;;;20273:109:0;;21639:2:1;20273:109:0;;;21621:21:1;21678:2;21658:18;;;21651:30;21717:34;21697:18;;;21690:62;21788:8;21768:18;;;21761:36;21814:19;;20273:109:0;21437:402:1;20273:109:0;-1:-1:-1;;;;;20418:15:0;;;;;;;:9;:15;;;;;;20436:20;;;20418:38;;20473:13;;;;;;;;;;:23;;;;;;20525:26;;;;;;20450:6;1546:25:1;;1534:2;1519:18;;1400:177;20525:26:0;;;;;;;;20564:37;28237:447;40211:270;40313:4;16487:21;:19;:21::i;:::-;40358:6:::1;40334:21;:30;40330:48;;;-1:-1:-1::0;40373:5:0::1;40366:12;;40330:48;40392:12;40418:3;-1:-1:-1::0;;;;;40410:17:0::1;40435:6;40410:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;40391:55:0;;-1:-1:-1;;;16519:1:0::1;16531:20:::0;16303:1;16776:22;;16727:79;15238:380;15319:23;15345:106;15387:4;15345:106;;;;;;;;;;;;;;;;;15353:5;-1:-1:-1;;;;;15345:27:0;;;:106;;;;;:::i;:::-;15319:132;;15484:10;:17;15505:1;15484:22;:56;;;;15521:10;15510:30;;;;;;;;;;;;:::i;:::-;15462:148;;;;-1:-1:-1;;;15462:148:0;;22506:2:1;15462:148:0;;;22488:21:1;22545:2;22525:18;;;22518:30;22584:34;22564:18;;;22557:62;22655:12;22635:18;;;22628:40;22685:19;;15462:148:0;22304:406:1;16567:152:0;16347:1;16625:7;;:19;16617:63;;;;-1:-1:-1;;;16617:63:0;;22917:2:1;16617:63:0;;;22899:21:1;22956:2;22936:18;;;22929:30;22995:33;22975:18;;;22968:61;23046:18;;16617:63:0;22715:355:1;16617:63:0;16347:1;16693:7;:18;16567:152::o;6935:229::-;7072:12;7104:52;7126:6;7134:4;7140:1;7143:12;7104:21;:52::i;:::-;7097:59;6935:229;-1:-1:-1;;;;6935:229:0:o;7536:612::-;7706:12;7778:5;7753:21;:30;;7731:118;;;;-1:-1:-1;;;7731:118:0;;23277:2:1;7731:118:0;;;23259:21:1;23316:2;23296:18;;;23289:30;23355:34;23335:18;;;23328:62;23426:8;23406:18;;;23399:36;23452:19;;7731:118:0;23075:402:1;7731:118:0;7861:12;7875:23;7902:6;-1:-1:-1;;;;;7902:11:0;7921:5;7942:4;7902:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7860:97;;;;7988:152;8033:6;8058:7;8084:10;8113:12;7988:26;:152::i;:::-;7968:172;7536:612;-1:-1:-1;;;;;;;7536:612:0:o;9652:477::-;9837:12;9866:7;9862:260;;;9894:10;:17;9915:1;9894:22;9890:123;;-1:-1:-1;;;;;27700:19:0;;;9937:60;;;;-1:-1:-1;;;9937:60:0;;23976:2:1;9937:60:0;;;23958:21:1;24015:2;23995:18;;;23988:30;24054:31;24034:18;;;24027:59;24103:18;;9937:60:0;23774:353:1;9937:60:0;-1:-1:-1;10034:10:0;10027:17;;9862:260;10077:33;10085:10;10097:12;10573:17;;:21;10569:299;;10716:10;10710:17;10773:15;10760:10;10756:2;10752:19;10745:44;10569:299;10843:12;10836:20;;-1:-1:-1;;;10836:20:0;;;;;;;;:::i;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:455::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;640:2;628:15;645:66;624:88;609:104;;;;715:2;605:113;;269:455;-1:-1:-1;;269:455:1:o;729:154::-;-1:-1:-1;;;;;808:5:1;804:54;797:5;794:65;784:93;;873:1;870;863:12;888:315;956:6;964;1017:2;1005:9;996:7;992:23;988:32;985:52;;;1033:1;1030;1023:12;985:52;1072:9;1059:23;1091:31;1116:5;1091:31;:::i;:::-;1141:5;1193:2;1178:18;;;;1165:32;;-1:-1:-1;;;888:315:1:o;1839:247::-;1898:6;1951:2;1939:9;1930:7;1926:23;1922:32;1919:52;;;1967:1;1964;1957:12;1919:52;2006:9;1993:23;2025:31;2050:5;2025:31;:::i;:::-;2075:5;1839:247;-1:-1:-1;;;1839:247:1:o;2091:118::-;2177:5;2170:13;2163:21;2156:5;2153:32;2143:60;;2199:1;2196;2189:12;2214:241;2270:6;2323:2;2311:9;2302:7;2298:23;2294:32;2291:52;;;2339:1;2336;2329:12;2291:52;2378:9;2365:23;2397:28;2419:5;2397:28;:::i;2460:456::-;2537:6;2545;2553;2606:2;2594:9;2585:7;2581:23;2577:32;2574:52;;;2622:1;2619;2612:12;2574:52;2661:9;2648:23;2680:31;2705:5;2680:31;:::i;:::-;2730:5;-1:-1:-1;2787:2:1;2772:18;;2759:32;2800:33;2759:32;2800:33;:::i;:::-;2460:456;;2852:7;;-1:-1:-1;;;2906:2:1;2891:18;;;;2878:32;;2460:456::o;3341:382::-;3406:6;3414;3467:2;3455:9;3446:7;3442:23;3438:32;3435:52;;;3483:1;3480;3473:12;3435:52;3522:9;3509:23;3541:31;3566:5;3541:31;:::i;:::-;3591:5;-1:-1:-1;3648:2:1;3633:18;;3620:32;3661:30;3620:32;3661:30;:::i;:::-;3710:7;3700:17;;;3341:382;;;;;:::o;3728:180::-;3787:6;3840:2;3828:9;3819:7;3815:23;3811:32;3808:52;;;3856:1;3853;3846:12;3808:52;-1:-1:-1;3879:23:1;;3728:180;-1:-1:-1;3728:180:1:o;3913:388::-;3981:6;3989;4042:2;4030:9;4021:7;4017:23;4013:32;4010:52;;;4058:1;4055;4048:12;4010:52;4097:9;4084:23;4116:31;4141:5;4116:31;:::i;:::-;4166:5;-1:-1:-1;4223:2:1;4208:18;;4195:32;4236:33;4195:32;4236:33;:::i;4306:454::-;4401:6;4409;4417;4425;4433;4486:3;4474:9;4465:7;4461:23;4457:33;4454:53;;;4503:1;4500;4493:12;4454:53;-1:-1:-1;;4526:23:1;;;4596:2;4581:18;;4568:32;;-1:-1:-1;4647:2:1;4632:18;;4619:32;;4698:2;4683:18;;4670:32;;-1:-1:-1;4749:3:1;4734:19;4721:33;;-1:-1:-1;4306:454:1;-1:-1:-1;4306:454:1:o;4765:437::-;4844:1;4840:12;;;;4887;;;4908:61;;4962:4;4954:6;4950:17;4940:27;;4908:61;5015:2;5007:6;5004:14;4984:18;4981:38;4978:218;;5052:77;5049:1;5042:88;5153:4;5150:1;5143:15;5181:4;5178:1;5171:15;4978:218;;4765:437;;;:::o;6783:184::-;6835:77;6832:1;6825:88;6932:4;6929:1;6922:15;6956:4;6953:1;6946:15;6972:125;7037:9;;;7058:10;;;7055:36;;;7071:18;;:::i;11493:274::-;11533:1;11559;11549:189;;11594:77;11591:1;11584:88;11695:4;11692:1;11685:15;11723:4;11720:1;11713:15;11549:189;-1:-1:-1;11752:9:1;;11493:274::o;14972:184::-;15042:6;15095:2;15083:9;15074:7;15070:23;15066:32;15063:52;;;15111:1;15108;15101:12;15063:52;-1:-1:-1;15134:16:1;;14972:184;-1:-1:-1;14972:184:1:o;18218:168::-;18291:9;;;18322;;18339:15;;;18333:22;;18319:37;18309:71;;18360:18;;:::i;18391:128::-;18458:9;;;18479:11;;;18476:37;;;18493:18;;:::i;18713:184::-;18765:77;18762:1;18755:88;18862:4;18859:1;18852:15;18886:4;18883:1;18876:15;18902:251;18972:6;19025:2;19013:9;19004:7;19000:23;18996:32;18993:52;;;19041:1;19038;19031:12;18993:52;19073:9;19067:16;19092:31;19117:5;19092:31;:::i;19158:1026::-;19420:4;19468:3;19457:9;19453:19;19499:6;19488:9;19481:25;19525:2;19563:6;19558:2;19547:9;19543:18;19536:34;19606:3;19601:2;19590:9;19586:18;19579:31;19630:6;19665;19659:13;19696:6;19688;19681:22;19734:3;19723:9;19719:19;19712:26;;19773:2;19765:6;19761:15;19747:29;;19794:1;19804:218;19818:6;19815:1;19812:13;19804:218;;;19883:13;;-1:-1:-1;;;;;19879:62:1;19867:75;;19997:15;;;;19962:12;;;;19840:1;19833:9;19804:218;;;-1:-1:-1;;;;;;;20078:55:1;;;;20073:2;20058:18;;20051:83;-1:-1:-1;;;20165:3:1;20150:19;20143:35;20039:3;19158:1026;-1:-1:-1;;;19158:1026:1:o;20824:306::-;20912:6;20920;20928;20981:2;20969:9;20960:7;20956:23;20952:32;20949:52;;;20997:1;20994;20987:12;20949:52;21026:9;21020:16;21010:26;;21076:2;21065:9;21061:18;21055:25;21045:35;;21120:2;21109:9;21105:18;21099:25;21089:35;;20824:306;;;;;:::o;22054:245::-;22121:6;22174:2;22162:9;22153:7;22149:23;22145:32;22142:52;;;22190:1;22187;22180:12;22142:52;22222:9;22216:16;22241:28;22263:5;22241:28;:::i;23482:287::-;23611:3;23649:6;23643:13;23665:66;23724:6;23719:3;23712:4;23704:6;23700:17;23665:66;:::i;:::-;23747:16;;;;;23482:287;-1:-1:-1;;23482:287:1:o

Swarm Source

ipfs://8c5bd986b1d638ee29c2578b1e9c5c4c7a035e609827c78783e678d64f349490
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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