ETH Price: $2,271.52 (-0.82%)

Token

Dejitura Kirin (KIRIN)
 

Overview

Max Total Supply

1,000,000,000 KIRIN

Holders

86

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
146,661.905106747727461945 KIRIN

Value
$0.00
0x47d11da502d5d1606cdee4715611f945f1a6f999
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:
KIRIN

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

interface IERC20 {
    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);

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

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, _allowances[owner][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[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 {}
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

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

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

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

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

/*
    * @dev Contract starts here
*/

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

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;

    mapping (address => bool) private _isBlacklisted;
    bool private _swapping;
    uint256 private _liveBlock;

    address private _fundingWallet;
    address public burnAddress = address(0x000000000000000000000000000000000000dEaD);
    
    uint256 public maxTransactionAmount;
    uint256 public maxWallet;

    uint256 public swapTokensThreshold;
        
    bool public limitsInEffect = true;
    bool public feesDisabled = false;
    bool public tradingLive = false;

    uint256 private _fundingFee = 5;
    uint256 private _liquidityFee = 2;
    uint256 private _burnFee = 1;
    uint256 private _tokensForFunding;
    uint256 private _tokensForLiquidity;

    uint256 public totalFees = _fundingFee + _liquidityFee + _burnFee;
    
    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) private _automatedMarketMakerPairs;

    // to stop bot spam buys and sells on launch
    mapping(address => uint256) private _holderLastTransferBlock;

    /**
     * @dev Throws if called by any account other than the _fundingWallet
     */
    modifier teamOROwner() {
        require(_fundingWallet == _msgSender() || owner() == _msgSender(), "Caller is not the _fundingWallet address nor owner.");
        _;
    }

    constructor() ERC20("Dejitura Kirin", "KIRIN") payable {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        _isExcludedMaxTransactionAmount[address(_uniswapV2Router)] = true;
        uniswapV2Router = _uniswapV2Router;
                        
        uint256 totalSupply = 1e9 * 1e18;

        maxTransactionAmount = totalSupply * 40 / 10000;
        maxWallet = totalSupply * 2 / 100;
        swapTokensThreshold = totalSupply * 2 / 1000;
        
        _fundingWallet = owner();

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */

        _mint(burnAddress, totalSupply / 100 * 50);
        _mint(address(this), totalSupply / 100 * 50);
    }

    /**
    * @dev Once live, can never be switched off
    */
    function startTrading(uint256 number, uint256 supplyPercentToLP) external teamOROwner {
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;
        _automatedMarketMakerPairs[address(uniswapV2Pair)] = true;

        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Router.addLiquidityETH{value: address(this).balance} (
            address(this),
            totalSupply() / 100 * supplyPercentToLP,
            0,
            0,
            owner(),
            block.timestamp
        );

        _liveBlock = block.number.add(number);
        tradingLive = true;
    }

    /**
    * @dev Remove limits after token is somewhat stable
    */
    function removeLimits() external teamOROwner {
        limitsInEffect = false;
    }

    /**
    * @dev Exclude from fee calculation
    */
    function excludeFromFees(address account, bool excluded) public teamOROwner {
        _isExcludedFromFees[account] = excluded;
    }
    
    /**
    * @dev Update token fees (max set to initial fee)
    */
    function updateFees(uint256 fundingFee, uint256 liquidityFee, uint256 burnFee) external teamOROwner {
        require(fundingFee.add(liquidityFee).add(burnFee) <= 10);

        _fundingFee = fundingFee;
        _liquidityFee = liquidityFee;
        _burnFee = burnFee;

        totalFees = fundingFee.add(liquidityFee).add(burnFee);
    }
    
    /**
    * @dev Enable and disable backend fees
    */
    function setFeeState(bool state) external teamOROwner {
        feesDisabled = state;
    }

    /**
    * @dev Update wallet that receives fees and newly added LP
    */
    function updateTeamWallet(address newWallet) external teamOROwner {
        _fundingWallet = newWallet;
    }

    /**
    * @dev Very important function. 
    * Updates the threshold of how many tokens that must be in the contract calculation for fees to be taken
    */
    function updateSwapTokensThreshold(uint256 newThreshold) external teamOROwner returns (bool) {
  	    require(newThreshold >= totalSupply() * 1 / 100000, "Swap threshold cannot be lower than 0.001% total supply.");
  	    require(newThreshold <= totalSupply() * 5 / 1000, "Swap threshold cannot be higher than 0.5% total supply.");
  	    swapTokensThreshold = newThreshold;
  	    return true;
  	}

    /**
    * @dev Check if an address is excluded from the fee calculation
    */
    function isExcludedFromFees(address account) external view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    /**
    * @dev Can be used to block certain addresses (mainly for trading bots and sniping bots)
    */
    function blacklist(address[] memory addresses) public onlyOwner {
        for (uint i = 0; i < addresses.length; i++) {
            if (addresses[i] != uniswapV2Pair && addresses[i] != address(uniswapV2Router)) {
                _isBlacklisted[addresses[i]] = true;
            }
        }
    }
    
    /**
    * @dev Remove blacklisted addresses
    */
    function removeBlacklist(address[] memory addresses) public onlyOwner {
        for (uint i = 0; i < addresses.length; i++) {
            _isBlacklisted[addresses[i]] = false;
        }
    }
    
    /**
    * @dev Check if an address is blacklisted
    */
    function blacklisted(address addr) public view returns (bool) {
        return _isBlacklisted[addr];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isBlacklisted[from], "You have been blacklisted, you are unable to transfer or swap.");
        
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        // burn
        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 burnAmount = amount.div(100) * _burnFee;
            _transfer(from, burnAddress, burnAmount);
            amount -= burnAmount;
        }

        // all to secure a smooth launch
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_swapping
            ) {
                if (!tradingLive) require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "_transfer:: Trading is not active.");
                if (_liveBlock >= block.number) _isBlacklisted[to] = true;

                if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                    require(_holderLastTransferBlock[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                    _holderLastTransferBlock[tx.origin] = block.number;
                }

                // on buy
                if (_automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "_transfer:: Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "_transfer:: Max wallet exceeded");
                }
                
                // on sell
                else if (_automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "_transfer:: Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "_transfer:: Max wallet exceeded");
                }
            }
        }
        
        if (
            !_swapping &&
            !_automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        bool takeFee = !_swapping;

        // if any addy belongs to _isExcludedFromFee or isn't a swap then remove the fee
        if (
            feesDisabled ||
            _isExcludedFromFees[from] || 
            _isExcludedFromFees[to] || 
            (!_automatedMarketMakerPairs[from] && !_automatedMarketMakerPairs[to])
        ) takeFee = false;
        
        uint256 fees = 0;
        if (takeFee) {
            fees = amount.mul(totalFees).div(100);

            _tokensForLiquidity += fees * _liquidityFee / totalFees;
            _tokensForFunding += fees * _fundingFee / totalFees;

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

        	amount -= fees;
        }

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

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

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

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

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() internal {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForFunding;

        if (contractBalance == 0) return;
        if (contractBalance > swapTokensThreshold) contractBalance = swapTokensThreshold;

        uint256 liquidityTokens = contractBalance * _tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        _swapTokensForETH(amountToSwapForETH);
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForFunding = ethBalance.mul(_tokensForFunding).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForFunding;

        _tokensForFunding = 0;
        _tokensForLiquidity = 0;

        payable(_fundingWallet).transfer(ethForFunding);

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
        }
    }

    /**
    * @dev Transfer funds stuck in contract
    */
    function withdrawContractFunds() external {
        payable(_fundingWallet).transfer(address(this).balance);
    }

    /**
    * @dev In case swap wont do it and sells/buys might be blocked
    */
    function forceSwap() external teamOROwner {
        _swapTokensForETH(balanceOf(address(this)));
    }

    receive() external payable {}
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"blacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forceSwap","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setFeeState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"},{"internalType":"uint256","name":"supplyPercentToLP","type":"uint256"}],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"fundingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"updateSwapTokensThreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawContractFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055506000601060026101000a81548160ff021916908315150217905550600560115560026012556001601355601354601254601154620000bc9190620008e9565b620000c89190620008e9565b6016556040518060400160405280600e81526020017f44656a6974757261204b6972696e0000000000000000000000000000000000008152506040518060400160405280600581526020017f4b4952494e000000000000000000000000000000000000000000000000000000815250816003908162000148919062000bb6565b5080600490816200015a919062000bb6565b5050506200017d62000171620004e460201b60201c565b620004ec60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006b033b2e3c9fd0803ce8000000905061271060288262000252919062000c9d565b6200025e919062000d2d565b600d81905550606460028262000275919062000c9d565b62000281919062000d2d565b600e819055506103e860028262000299919062000c9d565b620002a5919062000d2d565b600f81905550620002bb620005b260201b60201c565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200031d6200030f620005b260201b60201c565b6001620005dc60201b60201c565b62000330306001620005dc60201b60201c565b6200034561dead6001620005dc60201b60201c565b6001601860006200035b620005b260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016018600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004ae600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603260648462000496919062000d2d565b620004a2919062000c9d565b6200072e60201b60201c565b620004dc306032606484620004c4919062000d2d565b620004d0919062000c9d565b6200072e60201b60201c565b505062000eae565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005ec620004e460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148062000691575062000653620004e460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000679620005b260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16145b620006d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006ca9062000dec565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007979062000e5e565b60405180910390fd5b620007b460008383620008a660201b60201c565b8060026000828254620007c89190620008e9565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200081f9190620008e9565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000886919062000e91565b60405180910390a3620008a260008383620008ab60201b60201c565b5050565b505050565b505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620008f682620008b0565b91506200090383620008b0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200093b576200093a620008ba565b5b828201905092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620009c857607f821691505b602082108103620009de57620009dd62000980565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a09565b62000a54868362000a09565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000a9762000a9162000a8b84620008b0565b62000a6c565b620008b0565b9050919050565b6000819050919050565b62000ab38362000a76565b62000acb62000ac28262000a9e565b84845462000a16565b825550505050565b600090565b62000ae262000ad3565b62000aef81848462000aa8565b505050565b5b8181101562000b175762000b0b60008262000ad8565b60018101905062000af5565b5050565b601f82111562000b665762000b3081620009e4565b62000b3b84620009f9565b8101602085101562000b4b578190505b62000b6362000b5a85620009f9565b83018262000af4565b50505b505050565b600082821c905092915050565b600062000b8b6000198460080262000b6b565b1980831691505092915050565b600062000ba6838362000b78565b9150826002028217905092915050565b62000bc18262000946565b67ffffffffffffffff81111562000bdd5762000bdc62000951565b5b62000be98254620009af565b62000bf682828562000b1b565b600060209050601f83116001811462000c2e576000841562000c19578287015190505b62000c25858262000b98565b86555062000c95565b601f19841662000c3e86620009e4565b60005b8281101562000c685784890151825560018201915060208501945060208101905062000c41565b8683101562000c88578489015162000c84601f89168262000b78565b8355505b6001600288020188555050505b505050505050565b600062000caa82620008b0565b915062000cb783620008b0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cf35762000cf2620008ba565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d3a82620008b0565b915062000d4783620008b0565b92508262000d5a5762000d5962000cfe565b5b828204905092915050565b600082825260208201905092915050565b7f43616c6c6572206973206e6f7420746865205f66756e64696e6757616c6c657460008201527f2061646472657373206e6f72206f776e65722e00000000000000000000000000602082015250565b600062000dd460338362000d65565b915062000de18262000d76565b604082019050919050565b6000602082019050818103600083015262000e078162000dc5565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e46601f8362000d65565b915062000e538262000e0e565b602082019050919050565b6000602082019050818103600083015262000e798162000e37565b9050919050565b62000e8b81620008b0565b82525050565b600060208201905062000ea8600083018462000e80565b92915050565b614d338062000ebe6000396000f3fe6080604052600436106102085760003560e01c8063751039fc11610118578063c0246668116100a0578063dbac26e91161006f578063dbac26e914610764578063dd62ed3e146107a1578063df778d26146107de578063f2fde38b146107f5578063f8b45b051461081e5761020f565b8063c0246668146106bc578063c8c8ebe4146106e5578063cef8513914610710578063d691a7341461073b5761020f565b80638da5cb5b116100e75780638da5cb5b146105c357806395d89b41146105ee578063a457c2d714610619578063a9059cbb14610656578063bb5e048a146106935761020f565b8063751039fc1461051d5780637911ef9d146105345780637cb332bb1461055d5780638baa63b2146105865761020f565b806323b872dd1161019b5780634fbee1931161016a5780634fbee1931461043657806365cffb1e1461047357806370a082311461049e57806370d5ae05146104db578063715018a6146105065761020f565b806323b872dd14610366578063313ce567146103a357806339509351146103ce5780634a62bb651461040b5761020f565b806313114a9d116101d757806313114a9d146102d057806318160ddd146102fb5780632100942314610326578063224290851461033d5761020f565b8063041f173f1461021457806306fdde031461023d578063095ea7b31461026857806311704f52146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061023b6004803603810190610236919061399b565b610849565b005b34801561024957600080fd5b50610252610a40565b60405161025f9190613a6c565b60405180910390f35b34801561027457600080fd5b5061028f600480360381019061028a9190613ac4565b610ad2565b60405161029c9190613b1f565b60405180910390f35b3480156102b157600080fd5b506102ba610af5565b6040516102c79190613b1f565b60405180910390f35b3480156102dc57600080fd5b506102e5610b08565b6040516102f29190613b49565b60405180910390f35b34801561030757600080fd5b50610310610b0e565b60405161031d9190613b49565b60405180910390f35b34801561033257600080fd5b5061033b610b18565b005b34801561034957600080fd5b50610364600480360381019061035f9190613b64565b610b83565b005b34801561037257600080fd5b5061038d60048036038101906103889190613bb7565b610cd5565b60405161039a9190613b1f565b60405180910390f35b3480156103af57600080fd5b506103b8610d04565b6040516103c59190613c26565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613ac4565b610d0d565b6040516104029190613b1f565b60405180910390f35b34801561041757600080fd5b50610420610db7565b60405161042d9190613b1f565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190613c41565b610dca565b60405161046a9190613b1f565b60405180910390f35b34801561047f57600080fd5b50610488610e20565b6040516104959190613b1f565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190613c41565b610e33565b6040516104d29190613b49565b60405180910390f35b3480156104e757600080fd5b506104f0610e7b565b6040516104fd9190613c7d565b60405180910390f35b34801561051257600080fd5b5061051b610ea1565b005b34801561052957600080fd5b50610532610f29565b005b34801561054057600080fd5b5061055b6004803603810190610556919061399b565b611021565b005b34801561056957600080fd5b50610584600480360381019061057f9190613c41565b611132565b005b34801561059257600080fd5b506105ad60048036038101906105a89190613c98565b611251565b6040516105ba9190613b1f565b60405180910390f35b3480156105cf57600080fd5b506105d8611405565b6040516105e59190613c7d565b60405180910390f35b3480156105fa57600080fd5b5061060361142f565b6040516106109190613a6c565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190613ac4565b6114c1565b60405161064d9190613b1f565b60405180910390f35b34801561066257600080fd5b5061067d60048036038101906106789190613ac4565b6115ab565b60405161068a9190613b1f565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b59190613cf1565b6115ce565b005b3480156106c857600080fd5b506106e360048036038101906106de9190613d1e565b6116c6565b005b3480156106f157600080fd5b506106fa6117fc565b6040516107079190613b49565b60405180910390f35b34801561071c57600080fd5b50610725611802565b6040516107329190613b49565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190613d5e565b611808565b005b34801561077057600080fd5b5061078b60048036038101906107869190613c41565b611cf3565b6040516107989190613b1f565b60405180910390f35b3480156107ad57600080fd5b506107c860048036038101906107c39190613d9e565b611d49565b6040516107d59190613b49565b60405180910390f35b3480156107ea57600080fd5b506107f3611dd0565b005b34801561080157600080fd5b5061081c60048036038101906108179190613c41565b611ebe565b005b34801561082a57600080fd5b50610833611fb5565b6040516108409190613b49565b60405180910390f35b610851611fbb565b73ffffffffffffffffffffffffffffffffffffffff1661086f611405565b73ffffffffffffffffffffffffffffffffffffffff16146108c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bc90613e2a565b60405180910390fd5b60005b8151811015610a3c57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682828151811061091d5761091c613e4a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156109b15750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168282815181106109905761098f613e4a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610a29576001600860008484815181106109cf576109ce613e4a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610a3490613ea8565b9150506108c8565b5050565b606060038054610a4f90613f1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7b90613f1f565b8015610ac85780601f10610a9d57610100808354040283529160200191610ac8565b820191906000526020600020905b815481529060010190602001808311610aab57829003601f168201915b5050505050905090565b600080610add611fbb565b9050610aea818585611fc3565b600191505092915050565b601060029054906101000a900460ff1681565b60165481565b6000600254905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610b80573d6000803e3d6000fd5b50565b610b8b611fbb565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610c1f5750610be9611fbb565b73ffffffffffffffffffffffffffffffffffffffff16610c07611405565b73ffffffffffffffffffffffffffffffffffffffff16145b610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5590613fc2565b60405180910390fd5b600a610c8582610c77858761218c90919063ffffffff16565b61218c90919063ffffffff16565b1115610c9057600080fd5b826011819055508160128190555080601381905550610cca81610cbc848661218c90919063ffffffff16565b61218c90919063ffffffff16565b601681905550505050565b600080610ce0611fbb565b9050610ced8582856121a2565b610cf885858561222e565b60019150509392505050565b60006012905090565b600080610d18611fbb565b9050610dac818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610da79190613fe2565b611fc3565b600191505092915050565b601060009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601060019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ea9611fbb565b73ffffffffffffffffffffffffffffffffffffffff16610ec7611405565b73ffffffffffffffffffffffffffffffffffffffff1614610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1490613e2a565b60405180910390fd5b610f276000612f78565b565b610f31611fbb565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610fc55750610f8f611fbb565b73ffffffffffffffffffffffffffffffffffffffff16610fad611405565b73ffffffffffffffffffffffffffffffffffffffff16145b611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb90613fc2565b60405180910390fd5b6000601060006101000a81548160ff021916908315150217905550565b611029611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611047611405565b73ffffffffffffffffffffffffffffffffffffffff161461109d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109490613e2a565b60405180910390fd5b60005b815181101561112e576000600860008484815181106110c2576110c1613e4a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061112690613ea8565b9150506110a0565b5050565b61113a611fbb565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806111ce5750611198611fbb565b73ffffffffffffffffffffffffffffffffffffffff166111b6611405565b73ffffffffffffffffffffffffffffffffffffffff16145b61120d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120490613fc2565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061125b611fbb565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806112ef57506112b9611fbb565b73ffffffffffffffffffffffffffffffffffffffff166112d7611405565b73ffffffffffffffffffffffffffffffffffffffff16145b61132e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132590613fc2565b60405180910390fd5b620186a0600161133c610b0e565b6113469190614038565b61135091906140c1565b821015611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138990614164565b60405180910390fd5b6103e8600561139f610b0e565b6113a99190614038565b6113b391906140c1565b8211156113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec906141f6565b60405180910390fd5b81600f8190555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461143e90613f1f565b80601f016020809104026020016040519081016040528092919081815260200182805461146a90613f1f565b80156114b75780601f1061148c576101008083540402835291602001916114b7565b820191906000526020600020905b81548152906001019060200180831161149a57829003601f168201915b5050505050905090565b6000806114cc611fbb565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158990614288565b60405180910390fd5b61159f8286868403611fc3565b60019250505092915050565b6000806115b6611fbb565b90506115c381858561222e565b600191505092915050565b6115d6611fbb565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061166a5750611634611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611652611405565b73ffffffffffffffffffffffffffffffffffffffff16145b6116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a090613fc2565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6116ce611fbb565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611762575061172c611fbb565b73ffffffffffffffffffffffffffffffffffffffff1661174a611405565b73ffffffffffffffffffffffffffffffffffffffff16145b6117a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179890613fc2565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b600f5481565b611810611fbb565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806118a4575061186e611fbb565b73ffffffffffffffffffffffffffffffffffffffff1661188c611405565b73ffffffffffffffffffffffffffffffffffffffff16145b6118e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118da90613fc2565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611950573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197491906142bd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2191906142bd565b6040518363ffffffff1660e01b8152600401611a3e9291906142ea565b6020604051808303816000875af1158015611a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8191906142bd565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160186000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611be930600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611be4610b0e565b611fc3565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730846064611c34610b0e565b611c3e91906140c1565b611c489190614038565b600080611c53611405565b426040518863ffffffff1660e01b8152600401611c7596959493929190614358565b60606040518083038185885af1158015611c93573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611cb891906143ce565b505050611cce824361218c90919063ffffffff16565b600a819055506001601060026101000a81548160ff0219169083151502179055505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611dd8611fbb565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611e6c5750611e36611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611e54611405565b73ffffffffffffffffffffffffffffffffffffffff16145b611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290613fc2565b60405180910390fd5b611ebc611eb730610e33565b61303e565b565b611ec6611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611ee4611405565b73ffffffffffffffffffffffffffffffffffffffff1614611f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3190613e2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa090614493565b60405180910390fd5b611fb281612f78565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202990614525565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612098906145b7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161217f9190613b49565b60405180910390a3505050565b6000818361219a9190613fe2565b905092915050565b60006121ae8484611d49565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612228578181101561221a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221190614623565b60405180910390fd5b6122278484848403611fc3565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361229d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612294906146b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361230c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230390614747565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612399576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612390906147d9565b60405180910390fd5b600081036123b2576123ad83836000613281565b612f73565b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124565750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124bd57600060135461247460648461350090919063ffffffff16565b61247e9190614038565b90506124ad84600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361222e565b80826124b991906147f9565b9150505b601060009054906101000a900460ff1615612bd0576124da611405565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125485750612518611405565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125815750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125bb575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125d45750600960009054906101000a900460ff16155b15612bcf57601060029054906101000a900460ff166126ce57601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061268e5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6126cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c49061489f565b60405180910390fd5b5b43600a5410612730576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b612738611405565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127c15750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561281b5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128e65743601a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106128a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289890614957565b60405180910390fd5b43601a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129895750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a3057600d548111156129d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ca90614a0f565b60405180910390fd5b600e546129df83610e33565b826129ea9190613fe2565b1115612a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2290614a7b565b60405180910390fd5b612bce565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ad35750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b2257600d54811115612b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1490614b33565b60405180910390fd5b612bcd565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bcc57600e54612b7f83610e33565b82612b8a9190613fe2565b1115612bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc290614a7b565b60405180910390fd5b5b5b5b5b5b600960009054906101000a900460ff16158015612c375750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c8d5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ce35750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d27576001600960006101000a81548160ff021916908315150217905550612d0b613516565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601060019054906101000a900460ff1680612da05750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612df45750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612e9f5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e9e5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b15612ea957600090505b60008115612f6557612ed96064612ecb6016548661369a90919063ffffffff16565b61350090919063ffffffff16565b905060165460125482612eec9190614038565b612ef691906140c1565b60156000828254612f079190613fe2565b9250508190555060165460115482612f1f9190614038565b612f2991906140c1565b60146000828254612f3a9190613fe2565b925050819055506000811115612f5657612f55853083613281565b5b8083612f6291906147f9565b92505b612f70858585613281565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff81111561305b5761305a6137fa565b5b6040519080825280602002602001820160405280156130895781602001602082028036833780820191505090505b50905030816000815181106130a1576130a0613e4a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613148573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061316c91906142bd565b816001815181106131805761317f613e4a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506131e730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611fc3565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161324b959493929190614c11565b600060405180830381600087803b15801561326557600080fd5b505af1158015613279573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036132f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e7906146b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361335f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335690614747565b60405180910390fd5b61336a8383836136b0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156133f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e790614cdd565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134839190613fe2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134e79190613b49565b60405180910390a36134fa8484846136b5565b50505050565b6000818361350e91906140c1565b905092915050565b600061352130610e33565b905060006014546015546135359190613fe2565b905060008203613546575050613698565b600f5482111561355657600f5491505b6000600282601554856135699190614038565b61357391906140c1565b61357d91906140c1565b9050600061359482856136ba90919063ffffffff16565b905060004790506135a48261303e565b60006135b982476136ba90919063ffffffff16565b905060006135e4866135d66014548561369a90919063ffffffff16565b61350090919063ffffffff16565b9050600081836135f491906147f9565b905060006014819055506000601581905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561366e573d6000803e3d6000fd5b5060008611801561367f5750600081115b1561368f5761368e86826136d0565b5b50505050505050505b565b600081836136a89190614038565b905092915050565b505050565b505050565b600081836136c891906147f9565b905092915050565b6136fd30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611fc3565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161378696959493929190614358565b60606040518083038185885af11580156137a4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137c991906143ce565b5050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613832826137e9565b810181811067ffffffffffffffff82111715613851576138506137fa565b5b80604052505050565b60006138646137d0565b90506138708282613829565b919050565b600067ffffffffffffffff8211156138905761388f6137fa565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138d1826138a6565b9050919050565b6138e1816138c6565b81146138ec57600080fd5b50565b6000813590506138fe816138d8565b92915050565b600061391761391284613875565b61385a565b9050808382526020820190506020840283018581111561393a576139396138a1565b5b835b81811015613963578061394f88826138ef565b84526020840193505060208101905061393c565b5050509392505050565b600082601f830112613982576139816137e4565b5b8135613992848260208601613904565b91505092915050565b6000602082840312156139b1576139b06137da565b5b600082013567ffffffffffffffff8111156139cf576139ce6137df565b5b6139db8482850161396d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a1e578082015181840152602081019050613a03565b83811115613a2d576000848401525b50505050565b6000613a3e826139e4565b613a4881856139ef565b9350613a58818560208601613a00565b613a61816137e9565b840191505092915050565b60006020820190508181036000830152613a868184613a33565b905092915050565b6000819050919050565b613aa181613a8e565b8114613aac57600080fd5b50565b600081359050613abe81613a98565b92915050565b60008060408385031215613adb57613ada6137da565b5b6000613ae9858286016138ef565b9250506020613afa85828601613aaf565b9150509250929050565b60008115159050919050565b613b1981613b04565b82525050565b6000602082019050613b346000830184613b10565b92915050565b613b4381613a8e565b82525050565b6000602082019050613b5e6000830184613b3a565b92915050565b600080600060608486031215613b7d57613b7c6137da565b5b6000613b8b86828701613aaf565b9350506020613b9c86828701613aaf565b9250506040613bad86828701613aaf565b9150509250925092565b600080600060608486031215613bd057613bcf6137da565b5b6000613bde868287016138ef565b9350506020613bef868287016138ef565b9250506040613c0086828701613aaf565b9150509250925092565b600060ff82169050919050565b613c2081613c0a565b82525050565b6000602082019050613c3b6000830184613c17565b92915050565b600060208284031215613c5757613c566137da565b5b6000613c65848285016138ef565b91505092915050565b613c77816138c6565b82525050565b6000602082019050613c926000830184613c6e565b92915050565b600060208284031215613cae57613cad6137da565b5b6000613cbc84828501613aaf565b91505092915050565b613cce81613b04565b8114613cd957600080fd5b50565b600081359050613ceb81613cc5565b92915050565b600060208284031215613d0757613d066137da565b5b6000613d1584828501613cdc565b91505092915050565b60008060408385031215613d3557613d346137da565b5b6000613d43858286016138ef565b9250506020613d5485828601613cdc565b9150509250929050565b60008060408385031215613d7557613d746137da565b5b6000613d8385828601613aaf565b9250506020613d9485828601613aaf565b9150509250929050565b60008060408385031215613db557613db46137da565b5b6000613dc3858286016138ef565b9250506020613dd4858286016138ef565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e146020836139ef565b9150613e1f82613dde565b602082019050919050565b60006020820190508181036000830152613e4381613e07565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613eb382613a8e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee557613ee4613e79565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f3757607f821691505b602082108103613f4a57613f49613ef0565b5b50919050565b7f43616c6c6572206973206e6f7420746865205f66756e64696e6757616c6c657460008201527f2061646472657373206e6f72206f776e65722e00000000000000000000000000602082015250565b6000613fac6033836139ef565b9150613fb782613f50565b604082019050919050565b60006020820190508181036000830152613fdb81613f9f565b9050919050565b6000613fed82613a8e565b9150613ff883613a8e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561402d5761402c613e79565b5b828201905092915050565b600061404382613a8e565b915061404e83613a8e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561408757614086613e79565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140cc82613a8e565b91506140d783613a8e565b9250826140e7576140e6614092565b5b828204905092915050565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f776572207460008201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b600061414e6038836139ef565b9150614159826140f2565b604082019050919050565b6000602082019050818103600083015261417d81614141565b9050919050565b7f53776170207468726573686f6c642063616e6e6f74206265206869676865722060008201527f7468616e20302e352520746f74616c20737570706c792e000000000000000000602082015250565b60006141e06037836139ef565b91506141eb82614184565b604082019050919050565b6000602082019050818103600083015261420f816141d3565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006142726025836139ef565b915061427d82614216565b604082019050919050565b600060208201905081810360008301526142a181614265565b9050919050565b6000815190506142b7816138d8565b92915050565b6000602082840312156142d3576142d26137da565b5b60006142e1848285016142a8565b91505092915050565b60006040820190506142ff6000830185613c6e565b61430c6020830184613c6e565b9392505050565b6000819050919050565b6000819050919050565b600061434261433d61433884614313565b61431d565b613a8e565b9050919050565b61435281614327565b82525050565b600060c08201905061436d6000830189613c6e565b61437a6020830188613b3a565b6143876040830187614349565b6143946060830186614349565b6143a16080830185613c6e565b6143ae60a0830184613b3a565b979650505050505050565b6000815190506143c881613a98565b92915050565b6000806000606084860312156143e7576143e66137da565b5b60006143f5868287016143b9565b9350506020614406868287016143b9565b9250506040614417868287016143b9565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061447d6026836139ef565b915061448882614421565b604082019050919050565b600060208201905081810360008301526144ac81614470565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061450f6024836139ef565b915061451a826144b3565b604082019050919050565b6000602082019050818103600083015261453e81614502565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006145a16022836139ef565b91506145ac82614545565b604082019050919050565b600060208201905081810360008301526145d081614594565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061460d601d836139ef565b9150614618826145d7565b602082019050919050565b6000602082019050818103600083015261463c81614600565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061469f6025836139ef565b91506146aa82614643565b604082019050919050565b600060208201905081810360008301526146ce81614692565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147316023836139ef565b915061473c826146d5565b604082019050919050565b6000602082019050818103600083015261476081614724565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642c20796f75206160008201527f726520756e61626c6520746f207472616e73666572206f7220737761702e0000602082015250565b60006147c3603e836139ef565b91506147ce82614767565b604082019050919050565b600060208201905081810360008301526147f2816147b6565b9050919050565b600061480482613a8e565b915061480f83613a8e565b92508282101561482257614821613e79565b5b828203905092915050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006148896022836139ef565b91506148948261482d565b604082019050919050565b600060208201905081810360008301526148b88161487c565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006149416049836139ef565b915061494c826148bf565b606082019050919050565b6000602082019050818103600083015261497081614934565b9050919050565b7f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060008201527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e7460208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b60006149f96041836139ef565b9150614a0482614977565b606082019050919050565b60006020820190508181036000830152614a28816149ec565b9050919050565b7f5f7472616e736665723a3a204d61782077616c6c657420657863656564656400600082015250565b6000614a65601f836139ef565b9150614a7082614a2f565b602082019050919050565b60006020820190508181036000830152614a9481614a58565b9050919050565b7f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460008201527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e60208201527f742e000000000000000000000000000000000000000000000000000000000000604082015250565b6000614b1d6042836139ef565b9150614b2882614a9b565b606082019050919050565b60006020820190508181036000830152614b4c81614b10565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b88816138c6565b82525050565b6000614b9a8383614b7f565b60208301905092915050565b6000602082019050919050565b6000614bbe82614b53565b614bc88185614b5e565b9350614bd383614b6f565b8060005b83811015614c04578151614beb8882614b8e565b9750614bf683614ba6565b925050600181019050614bd7565b5085935050505092915050565b600060a082019050614c266000830188613b3a565b614c336020830187614349565b8181036040830152614c458186614bb3565b9050614c546060830185613c6e565b614c616080830184613b3a565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614cc76026836139ef565b9150614cd282614c6b565b604082019050919050565b60006020820190508181036000830152614cf681614cba565b905091905056fea26469706673582212206a31ea8e82f670fbcf7c30cbf9d0a73b5107cfdc3c686f9602f988f7fdb1222b64736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102085760003560e01c8063751039fc11610118578063c0246668116100a0578063dbac26e91161006f578063dbac26e914610764578063dd62ed3e146107a1578063df778d26146107de578063f2fde38b146107f5578063f8b45b051461081e5761020f565b8063c0246668146106bc578063c8c8ebe4146106e5578063cef8513914610710578063d691a7341461073b5761020f565b80638da5cb5b116100e75780638da5cb5b146105c357806395d89b41146105ee578063a457c2d714610619578063a9059cbb14610656578063bb5e048a146106935761020f565b8063751039fc1461051d5780637911ef9d146105345780637cb332bb1461055d5780638baa63b2146105865761020f565b806323b872dd1161019b5780634fbee1931161016a5780634fbee1931461043657806365cffb1e1461047357806370a082311461049e57806370d5ae05146104db578063715018a6146105065761020f565b806323b872dd14610366578063313ce567146103a357806339509351146103ce5780634a62bb651461040b5761020f565b806313114a9d116101d757806313114a9d146102d057806318160ddd146102fb5780632100942314610326578063224290851461033d5761020f565b8063041f173f1461021457806306fdde031461023d578063095ea7b31461026857806311704f52146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061023b6004803603810190610236919061399b565b610849565b005b34801561024957600080fd5b50610252610a40565b60405161025f9190613a6c565b60405180910390f35b34801561027457600080fd5b5061028f600480360381019061028a9190613ac4565b610ad2565b60405161029c9190613b1f565b60405180910390f35b3480156102b157600080fd5b506102ba610af5565b6040516102c79190613b1f565b60405180910390f35b3480156102dc57600080fd5b506102e5610b08565b6040516102f29190613b49565b60405180910390f35b34801561030757600080fd5b50610310610b0e565b60405161031d9190613b49565b60405180910390f35b34801561033257600080fd5b5061033b610b18565b005b34801561034957600080fd5b50610364600480360381019061035f9190613b64565b610b83565b005b34801561037257600080fd5b5061038d60048036038101906103889190613bb7565b610cd5565b60405161039a9190613b1f565b60405180910390f35b3480156103af57600080fd5b506103b8610d04565b6040516103c59190613c26565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613ac4565b610d0d565b6040516104029190613b1f565b60405180910390f35b34801561041757600080fd5b50610420610db7565b60405161042d9190613b1f565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190613c41565b610dca565b60405161046a9190613b1f565b60405180910390f35b34801561047f57600080fd5b50610488610e20565b6040516104959190613b1f565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190613c41565b610e33565b6040516104d29190613b49565b60405180910390f35b3480156104e757600080fd5b506104f0610e7b565b6040516104fd9190613c7d565b60405180910390f35b34801561051257600080fd5b5061051b610ea1565b005b34801561052957600080fd5b50610532610f29565b005b34801561054057600080fd5b5061055b6004803603810190610556919061399b565b611021565b005b34801561056957600080fd5b50610584600480360381019061057f9190613c41565b611132565b005b34801561059257600080fd5b506105ad60048036038101906105a89190613c98565b611251565b6040516105ba9190613b1f565b60405180910390f35b3480156105cf57600080fd5b506105d8611405565b6040516105e59190613c7d565b60405180910390f35b3480156105fa57600080fd5b5061060361142f565b6040516106109190613a6c565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190613ac4565b6114c1565b60405161064d9190613b1f565b60405180910390f35b34801561066257600080fd5b5061067d60048036038101906106789190613ac4565b6115ab565b60405161068a9190613b1f565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b59190613cf1565b6115ce565b005b3480156106c857600080fd5b506106e360048036038101906106de9190613d1e565b6116c6565b005b3480156106f157600080fd5b506106fa6117fc565b6040516107079190613b49565b60405180910390f35b34801561071c57600080fd5b50610725611802565b6040516107329190613b49565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190613d5e565b611808565b005b34801561077057600080fd5b5061078b60048036038101906107869190613c41565b611cf3565b6040516107989190613b1f565b60405180910390f35b3480156107ad57600080fd5b506107c860048036038101906107c39190613d9e565b611d49565b6040516107d59190613b49565b60405180910390f35b3480156107ea57600080fd5b506107f3611dd0565b005b34801561080157600080fd5b5061081c60048036038101906108179190613c41565b611ebe565b005b34801561082a57600080fd5b50610833611fb5565b6040516108409190613b49565b60405180910390f35b610851611fbb565b73ffffffffffffffffffffffffffffffffffffffff1661086f611405565b73ffffffffffffffffffffffffffffffffffffffff16146108c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bc90613e2a565b60405180910390fd5b60005b8151811015610a3c57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682828151811061091d5761091c613e4a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156109b15750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168282815181106109905761098f613e4a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610a29576001600860008484815181106109cf576109ce613e4a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610a3490613ea8565b9150506108c8565b5050565b606060038054610a4f90613f1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7b90613f1f565b8015610ac85780601f10610a9d57610100808354040283529160200191610ac8565b820191906000526020600020905b815481529060010190602001808311610aab57829003601f168201915b5050505050905090565b600080610add611fbb565b9050610aea818585611fc3565b600191505092915050565b601060029054906101000a900460ff1681565b60165481565b6000600254905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610b80573d6000803e3d6000fd5b50565b610b8b611fbb565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610c1f5750610be9611fbb565b73ffffffffffffffffffffffffffffffffffffffff16610c07611405565b73ffffffffffffffffffffffffffffffffffffffff16145b610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5590613fc2565b60405180910390fd5b600a610c8582610c77858761218c90919063ffffffff16565b61218c90919063ffffffff16565b1115610c9057600080fd5b826011819055508160128190555080601381905550610cca81610cbc848661218c90919063ffffffff16565b61218c90919063ffffffff16565b601681905550505050565b600080610ce0611fbb565b9050610ced8582856121a2565b610cf885858561222e565b60019150509392505050565b60006012905090565b600080610d18611fbb565b9050610dac818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610da79190613fe2565b611fc3565b600191505092915050565b601060009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601060019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ea9611fbb565b73ffffffffffffffffffffffffffffffffffffffff16610ec7611405565b73ffffffffffffffffffffffffffffffffffffffff1614610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1490613e2a565b60405180910390fd5b610f276000612f78565b565b610f31611fbb565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610fc55750610f8f611fbb565b73ffffffffffffffffffffffffffffffffffffffff16610fad611405565b73ffffffffffffffffffffffffffffffffffffffff16145b611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb90613fc2565b60405180910390fd5b6000601060006101000a81548160ff021916908315150217905550565b611029611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611047611405565b73ffffffffffffffffffffffffffffffffffffffff161461109d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109490613e2a565b60405180910390fd5b60005b815181101561112e576000600860008484815181106110c2576110c1613e4a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061112690613ea8565b9150506110a0565b5050565b61113a611fbb565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806111ce5750611198611fbb565b73ffffffffffffffffffffffffffffffffffffffff166111b6611405565b73ffffffffffffffffffffffffffffffffffffffff16145b61120d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120490613fc2565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061125b611fbb565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806112ef57506112b9611fbb565b73ffffffffffffffffffffffffffffffffffffffff166112d7611405565b73ffffffffffffffffffffffffffffffffffffffff16145b61132e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132590613fc2565b60405180910390fd5b620186a0600161133c610b0e565b6113469190614038565b61135091906140c1565b821015611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138990614164565b60405180910390fd5b6103e8600561139f610b0e565b6113a99190614038565b6113b391906140c1565b8211156113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec906141f6565b60405180910390fd5b81600f8190555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461143e90613f1f565b80601f016020809104026020016040519081016040528092919081815260200182805461146a90613f1f565b80156114b75780601f1061148c576101008083540402835291602001916114b7565b820191906000526020600020905b81548152906001019060200180831161149a57829003601f168201915b5050505050905090565b6000806114cc611fbb565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158990614288565b60405180910390fd5b61159f8286868403611fc3565b60019250505092915050565b6000806115b6611fbb565b90506115c381858561222e565b600191505092915050565b6115d6611fbb565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061166a5750611634611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611652611405565b73ffffffffffffffffffffffffffffffffffffffff16145b6116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a090613fc2565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6116ce611fbb565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611762575061172c611fbb565b73ffffffffffffffffffffffffffffffffffffffff1661174a611405565b73ffffffffffffffffffffffffffffffffffffffff16145b6117a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179890613fc2565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b600f5481565b611810611fbb565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806118a4575061186e611fbb565b73ffffffffffffffffffffffffffffffffffffffff1661188c611405565b73ffffffffffffffffffffffffffffffffffffffff16145b6118e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118da90613fc2565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611950573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197491906142bd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2191906142bd565b6040518363ffffffff1660e01b8152600401611a3e9291906142ea565b6020604051808303816000875af1158015611a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8191906142bd565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160186000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611be930600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611be4610b0e565b611fc3565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730846064611c34610b0e565b611c3e91906140c1565b611c489190614038565b600080611c53611405565b426040518863ffffffff1660e01b8152600401611c7596959493929190614358565b60606040518083038185885af1158015611c93573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611cb891906143ce565b505050611cce824361218c90919063ffffffff16565b600a819055506001601060026101000a81548160ff0219169083151502179055505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611dd8611fbb565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611e6c5750611e36611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611e54611405565b73ffffffffffffffffffffffffffffffffffffffff16145b611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290613fc2565b60405180910390fd5b611ebc611eb730610e33565b61303e565b565b611ec6611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611ee4611405565b73ffffffffffffffffffffffffffffffffffffffff1614611f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3190613e2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa090614493565b60405180910390fd5b611fb281612f78565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202990614525565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612098906145b7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161217f9190613b49565b60405180910390a3505050565b6000818361219a9190613fe2565b905092915050565b60006121ae8484611d49565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612228578181101561221a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221190614623565b60405180910390fd5b6122278484848403611fc3565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361229d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612294906146b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361230c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230390614747565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612399576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612390906147d9565b60405180910390fd5b600081036123b2576123ad83836000613281565b612f73565b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124565750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124bd57600060135461247460648461350090919063ffffffff16565b61247e9190614038565b90506124ad84600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361222e565b80826124b991906147f9565b9150505b601060009054906101000a900460ff1615612bd0576124da611405565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125485750612518611405565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125815750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125bb575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125d45750600960009054906101000a900460ff16155b15612bcf57601060029054906101000a900460ff166126ce57601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061268e5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6126cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c49061489f565b60405180910390fd5b5b43600a5410612730576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b612738611405565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127c15750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561281b5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128e65743601a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106128a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289890614957565b60405180910390fd5b43601a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129895750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a3057600d548111156129d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ca90614a0f565b60405180910390fd5b600e546129df83610e33565b826129ea9190613fe2565b1115612a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2290614a7b565b60405180910390fd5b612bce565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ad35750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b2257600d54811115612b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1490614b33565b60405180910390fd5b612bcd565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bcc57600e54612b7f83610e33565b82612b8a9190613fe2565b1115612bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc290614a7b565b60405180910390fd5b5b5b5b5b5b600960009054906101000a900460ff16158015612c375750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c8d5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ce35750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d27576001600960006101000a81548160ff021916908315150217905550612d0b613516565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601060019054906101000a900460ff1680612da05750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612df45750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612e9f5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e9e5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b15612ea957600090505b60008115612f6557612ed96064612ecb6016548661369a90919063ffffffff16565b61350090919063ffffffff16565b905060165460125482612eec9190614038565b612ef691906140c1565b60156000828254612f079190613fe2565b9250508190555060165460115482612f1f9190614038565b612f2991906140c1565b60146000828254612f3a9190613fe2565b925050819055506000811115612f5657612f55853083613281565b5b8083612f6291906147f9565b92505b612f70858585613281565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff81111561305b5761305a6137fa565b5b6040519080825280602002602001820160405280156130895781602001602082028036833780820191505090505b50905030816000815181106130a1576130a0613e4a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613148573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061316c91906142bd565b816001815181106131805761317f613e4a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506131e730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611fc3565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161324b959493929190614c11565b600060405180830381600087803b15801561326557600080fd5b505af1158015613279573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036132f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e7906146b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361335f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335690614747565b60405180910390fd5b61336a8383836136b0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156133f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e790614cdd565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134839190613fe2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134e79190613b49565b60405180910390a36134fa8484846136b5565b50505050565b6000818361350e91906140c1565b905092915050565b600061352130610e33565b905060006014546015546135359190613fe2565b905060008203613546575050613698565b600f5482111561355657600f5491505b6000600282601554856135699190614038565b61357391906140c1565b61357d91906140c1565b9050600061359482856136ba90919063ffffffff16565b905060004790506135a48261303e565b60006135b982476136ba90919063ffffffff16565b905060006135e4866135d66014548561369a90919063ffffffff16565b61350090919063ffffffff16565b9050600081836135f491906147f9565b905060006014819055506000601581905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561366e573d6000803e3d6000fd5b5060008611801561367f5750600081115b1561368f5761368e86826136d0565b5b50505050505050505b565b600081836136a89190614038565b905092915050565b505050565b505050565b600081836136c891906147f9565b905092915050565b6136fd30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611fc3565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161378696959493929190614358565b60606040518083038185885af11580156137a4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137c991906143ce565b5050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613832826137e9565b810181811067ffffffffffffffff82111715613851576138506137fa565b5b80604052505050565b60006138646137d0565b90506138708282613829565b919050565b600067ffffffffffffffff8211156138905761388f6137fa565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138d1826138a6565b9050919050565b6138e1816138c6565b81146138ec57600080fd5b50565b6000813590506138fe816138d8565b92915050565b600061391761391284613875565b61385a565b9050808382526020820190506020840283018581111561393a576139396138a1565b5b835b81811015613963578061394f88826138ef565b84526020840193505060208101905061393c565b5050509392505050565b600082601f830112613982576139816137e4565b5b8135613992848260208601613904565b91505092915050565b6000602082840312156139b1576139b06137da565b5b600082013567ffffffffffffffff8111156139cf576139ce6137df565b5b6139db8482850161396d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a1e578082015181840152602081019050613a03565b83811115613a2d576000848401525b50505050565b6000613a3e826139e4565b613a4881856139ef565b9350613a58818560208601613a00565b613a61816137e9565b840191505092915050565b60006020820190508181036000830152613a868184613a33565b905092915050565b6000819050919050565b613aa181613a8e565b8114613aac57600080fd5b50565b600081359050613abe81613a98565b92915050565b60008060408385031215613adb57613ada6137da565b5b6000613ae9858286016138ef565b9250506020613afa85828601613aaf565b9150509250929050565b60008115159050919050565b613b1981613b04565b82525050565b6000602082019050613b346000830184613b10565b92915050565b613b4381613a8e565b82525050565b6000602082019050613b5e6000830184613b3a565b92915050565b600080600060608486031215613b7d57613b7c6137da565b5b6000613b8b86828701613aaf565b9350506020613b9c86828701613aaf565b9250506040613bad86828701613aaf565b9150509250925092565b600080600060608486031215613bd057613bcf6137da565b5b6000613bde868287016138ef565b9350506020613bef868287016138ef565b9250506040613c0086828701613aaf565b9150509250925092565b600060ff82169050919050565b613c2081613c0a565b82525050565b6000602082019050613c3b6000830184613c17565b92915050565b600060208284031215613c5757613c566137da565b5b6000613c65848285016138ef565b91505092915050565b613c77816138c6565b82525050565b6000602082019050613c926000830184613c6e565b92915050565b600060208284031215613cae57613cad6137da565b5b6000613cbc84828501613aaf565b91505092915050565b613cce81613b04565b8114613cd957600080fd5b50565b600081359050613ceb81613cc5565b92915050565b600060208284031215613d0757613d066137da565b5b6000613d1584828501613cdc565b91505092915050565b60008060408385031215613d3557613d346137da565b5b6000613d43858286016138ef565b9250506020613d5485828601613cdc565b9150509250929050565b60008060408385031215613d7557613d746137da565b5b6000613d8385828601613aaf565b9250506020613d9485828601613aaf565b9150509250929050565b60008060408385031215613db557613db46137da565b5b6000613dc3858286016138ef565b9250506020613dd4858286016138ef565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e146020836139ef565b9150613e1f82613dde565b602082019050919050565b60006020820190508181036000830152613e4381613e07565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613eb382613a8e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee557613ee4613e79565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f3757607f821691505b602082108103613f4a57613f49613ef0565b5b50919050565b7f43616c6c6572206973206e6f7420746865205f66756e64696e6757616c6c657460008201527f2061646472657373206e6f72206f776e65722e00000000000000000000000000602082015250565b6000613fac6033836139ef565b9150613fb782613f50565b604082019050919050565b60006020820190508181036000830152613fdb81613f9f565b9050919050565b6000613fed82613a8e565b9150613ff883613a8e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561402d5761402c613e79565b5b828201905092915050565b600061404382613a8e565b915061404e83613a8e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561408757614086613e79565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140cc82613a8e565b91506140d783613a8e565b9250826140e7576140e6614092565b5b828204905092915050565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f776572207460008201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b600061414e6038836139ef565b9150614159826140f2565b604082019050919050565b6000602082019050818103600083015261417d81614141565b9050919050565b7f53776170207468726573686f6c642063616e6e6f74206265206869676865722060008201527f7468616e20302e352520746f74616c20737570706c792e000000000000000000602082015250565b60006141e06037836139ef565b91506141eb82614184565b604082019050919050565b6000602082019050818103600083015261420f816141d3565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006142726025836139ef565b915061427d82614216565b604082019050919050565b600060208201905081810360008301526142a181614265565b9050919050565b6000815190506142b7816138d8565b92915050565b6000602082840312156142d3576142d26137da565b5b60006142e1848285016142a8565b91505092915050565b60006040820190506142ff6000830185613c6e565b61430c6020830184613c6e565b9392505050565b6000819050919050565b6000819050919050565b600061434261433d61433884614313565b61431d565b613a8e565b9050919050565b61435281614327565b82525050565b600060c08201905061436d6000830189613c6e565b61437a6020830188613b3a565b6143876040830187614349565b6143946060830186614349565b6143a16080830185613c6e565b6143ae60a0830184613b3a565b979650505050505050565b6000815190506143c881613a98565b92915050565b6000806000606084860312156143e7576143e66137da565b5b60006143f5868287016143b9565b9350506020614406868287016143b9565b9250506040614417868287016143b9565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061447d6026836139ef565b915061448882614421565b604082019050919050565b600060208201905081810360008301526144ac81614470565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061450f6024836139ef565b915061451a826144b3565b604082019050919050565b6000602082019050818103600083015261453e81614502565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006145a16022836139ef565b91506145ac82614545565b604082019050919050565b600060208201905081810360008301526145d081614594565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061460d601d836139ef565b9150614618826145d7565b602082019050919050565b6000602082019050818103600083015261463c81614600565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061469f6025836139ef565b91506146aa82614643565b604082019050919050565b600060208201905081810360008301526146ce81614692565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147316023836139ef565b915061473c826146d5565b604082019050919050565b6000602082019050818103600083015261476081614724565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642c20796f75206160008201527f726520756e61626c6520746f207472616e73666572206f7220737761702e0000602082015250565b60006147c3603e836139ef565b91506147ce82614767565b604082019050919050565b600060208201905081810360008301526147f2816147b6565b9050919050565b600061480482613a8e565b915061480f83613a8e565b92508282101561482257614821613e79565b5b828203905092915050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006148896022836139ef565b91506148948261482d565b604082019050919050565b600060208201905081810360008301526148b88161487c565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006149416049836139ef565b915061494c826148bf565b606082019050919050565b6000602082019050818103600083015261497081614934565b9050919050565b7f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060008201527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e7460208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b60006149f96041836139ef565b9150614a0482614977565b606082019050919050565b60006020820190508181036000830152614a28816149ec565b9050919050565b7f5f7472616e736665723a3a204d61782077616c6c657420657863656564656400600082015250565b6000614a65601f836139ef565b9150614a7082614a2f565b602082019050919050565b60006020820190508181036000830152614a9481614a58565b9050919050565b7f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460008201527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e60208201527f742e000000000000000000000000000000000000000000000000000000000000604082015250565b6000614b1d6042836139ef565b9150614b2882614a9b565b606082019050919050565b60006020820190508181036000830152614b4c81614b10565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b88816138c6565b82525050565b6000614b9a8383614b7f565b60208301905092915050565b6000602082019050919050565b6000614bbe82614b53565b614bc88185614b5e565b9350614bd383614b6f565b8060005b83811015614c04578151614beb8882614b8e565b9750614bf683614ba6565b925050600181019050614bd7565b5085935050505092915050565b600060a082019050614c266000830188613b3a565b614c336020830187614349565b8181036040830152614c458186614bb3565b9050614c546060830185613c6e565b614c616080830184613b3a565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614cc76026836139ef565b9150614cd282614c6b565b604082019050919050565b60006020820190508181036000830152614cf681614cba565b905091905056fea26469706673582212206a31ea8e82f670fbcf7c30cbf9d0a73b5107cfdc3c686f9602f988f7fdb1222b64736f6c634300080f0033

Deployed Bytecode Sourcemap

18200:12662:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24108:301;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1633:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2565:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18816:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19053:65;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1954:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30509:116;;;;;;;;;;;;;:::i;:::-;;22475:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2774:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1853:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3077:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18737:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23858:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18777:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2070:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18518:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14995:103;;;;;;;;;;;;;:::i;:::-;;22105:86;;;;;;;;;;;;;:::i;:::-;;24479:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23076:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23360:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14772:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1741:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3325:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2205:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22894:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22257:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18611:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18686:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21261:762;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24750:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2406:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30718:104;;;;;;;;;;;;;:::i;:::-;;15106:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18653:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24108:301;14918:12;:10;:12::i;:::-;14907:23;;:7;:5;:7::i;:::-;:23;;;14899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24188:6:::1;24183:219;24204:9;:16;24200:1;:20;24183:219;;;24262:13;;;;;;;;;;;24246:29;;:9;24256:1;24246:12;;;;;;;;:::i;:::-;;;;;;;;:29;;;;:73;;;;;24303:15;;;;;;;;;;;24279:40;;:9;24289:1;24279:12;;;;;;;;:::i;:::-;;;;;;;;:40;;;;24246:73;24242:149;;;24371:4;24340:14;:28;24355:9;24365:1;24355:12;;;;;;;;:::i;:::-;;;;;;;;24340:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;24242:149;24222:3;;;;;:::i;:::-;;;;24183:219;;;;24108:301:::0;:::o;1633:100::-;1687:13;1720:5;1713:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1633:100;:::o;2565:201::-;2648:4;2665:13;2681:12;:10;:12::i;:::-;2665:28;;2704:32;2713:5;2720:7;2729:6;2704:8;:32::i;:::-;2754:4;2747:11;;;2565:201;;;;:::o;18816:31::-;;;;;;;;;;;;;:::o;19053:65::-;;;;:::o;1954:108::-;2015:7;2042:12;;2035:19;;1954:108;:::o;30509:116::-;30570:14;;;;;;;;;;;30562:32;;:55;30595:21;30562:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30509:116::o;22475:346::-;19808:12;:10;:12::i;:::-;19790:30;;:14;;;;;;;;;;;:30;;;:57;;;;19835:12;:10;:12::i;:::-;19824:23;;:7;:5;:7::i;:::-;:23;;;19790:57;19782:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;22639:2:::1;22594:41;22627:7;22594:28;22609:12;22594:10;:14;;:28;;;;:::i;:::-;:32;;:41;;;;:::i;:::-;:47;;22586:56;;;::::0;::::1;;22669:10;22655:11;:24;;;;22706:12;22690:13;:28;;;;22740:7;22729:8;:18;;;;22772:41;22805:7;22772:28;22787:12;22772:10;:14;;:28;;;;:::i;:::-;:32;;:41;;;;:::i;:::-;22760:9;:53;;;;22475:346:::0;;;:::o;2774:295::-;2905:4;2922:15;2940:12;:10;:12::i;:::-;2922:30;;2963:38;2979:4;2985:7;2994:6;2963:15;:38::i;:::-;3012:27;3022:4;3028:2;3032:6;3012:9;:27::i;:::-;3057:4;3050:11;;;2774:295;;;;;:::o;1853:93::-;1911:5;1936:2;1929:9;;1853:93;:::o;3077:240::-;3165:4;3182:13;3198:12;:10;:12::i;:::-;3182:28;;3221:66;3230:5;3237:7;3276:10;3246:11;:18;3258:5;3246:18;;;;;;;;;;;;;;;:27;3265:7;3246:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;3221:8;:66::i;:::-;3305:4;3298:11;;;3077:240;;;;:::o;18737:33::-;;;;;;;;;;;;;:::o;23858:127::-;23925:4;23949:19;:28;23969:7;23949:28;;;;;;;;;;;;;;;;;;;;;;;;;23942:35;;23858:127;;;:::o;18777:32::-;;;;;;;;;;;;;:::o;2070:127::-;2144:7;2171:9;:18;2181:7;2171:18;;;;;;;;;;;;;;;;2164:25;;2070:127;;;:::o;18518:80::-;;;;;;;;;;;;;:::o;14995:103::-;14918:12;:10;:12::i;:::-;14907:23;;:7;:5;:7::i;:::-;:23;;;14899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15060:30:::1;15087:1;15060:18;:30::i;:::-;14995:103::o:0;22105:86::-;19808:12;:10;:12::i;:::-;19790:30;;:14;;;;;;;;;;;:30;;;:57;;;;19835:12;:10;:12::i;:::-;19824:23;;:7;:5;:7::i;:::-;:23;;;19790:57;19782:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;22178:5:::1;22161:14;;:22;;;;;;;;;;;;;;;;;;22105:86::o:0;24479:195::-;14918:12;:10;:12::i;:::-;14907:23;;:7;:5;:7::i;:::-;:23;;;14899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24565:6:::1;24560:107;24581:9;:16;24577:1;:20;24560:107;;;24650:5;24619:14;:28;24634:9;24644:1;24634:12;;;;;;;;:::i;:::-;;;;;;;;24619:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;24599:3;;;;;:::i;:::-;;;;24560:107;;;;24479:195:::0;:::o;23076:111::-;19808:12;:10;:12::i;:::-;19790:30;;:14;;;;;;;;;;;:30;;;:57;;;;19835:12;:10;:12::i;:::-;19824:23;;:7;:5;:7::i;:::-;:23;;;19790:57;19782:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;23170:9:::1;23153:14;;:26;;;;;;;;;;;;;;;;;;23076:111:::0;:::o;23360:404::-;23447:4;19808:12;:10;:12::i;:::-;19790:30;;:14;;;;;;;;;;;:30;;;:57;;;;19835:12;:10;:12::i;:::-;19824:23;;:7;:5;:7::i;:::-;:23;;;19790:57;19782:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;23507:6:::1;23503:1;23487:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;23471:12;:42;;23463:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;23628:4;23624:1;23608:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23592:12;:40;;23584:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;23724:12;23702:19;:34;;;;23753:4;23746:11;;23360:404:::0;;;:::o;14772:87::-;14818:7;14845:6;;;;;;;;;;;14838:13;;14772:87;:::o;1741:104::-;1797:13;1830:7;1823:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1741:104;:::o;3325:438::-;3418:4;3435:13;3451:12;:10;:12::i;:::-;3435:28;;3474:24;3501:11;:18;3513:5;3501:18;;;;;;;;;;;;;;;:27;3520:7;3501:27;;;;;;;;;;;;;;;;3474:54;;3567:15;3547:16;:35;;3539:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;3660:60;3669:5;3676:7;3704:15;3685:16;:34;3660:8;:60::i;:::-;3751:4;3744:11;;;;3325:438;;;;:::o;2205:193::-;2284:4;2301:13;2317:12;:10;:12::i;:::-;2301:28;;2340;2350:5;2357:2;2361:6;2340:9;:28::i;:::-;2386:4;2379:11;;;2205:193;;;;:::o;22894:93::-;19808:12;:10;:12::i;:::-;19790:30;;:14;;;;;;;;;;;:30;;;:57;;;;19835:12;:10;:12::i;:::-;19824:23;;:7;:5;:7::i;:::-;:23;;;19790:57;19782:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;22974:5:::1;22959:12;;:20;;;;;;;;;;;;;;;;;;22894:93:::0;:::o;22257:134::-;19808:12;:10;:12::i;:::-;19790:30;;:14;;;;;;;;;;;:30;;;:57;;;;19835:12;:10;:12::i;:::-;19824:23;;:7;:5;:7::i;:::-;:23;;;19790:57;19782:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;22375:8:::1;22344:19;:28;22364:7;22344:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22257:134:::0;;:::o;18611:35::-;;;;:::o;18686:34::-;;;;:::o;21261:762::-;19808:12;:10;:12::i;:::-;19790:30;;:14;;;;;;;;;;;:30;;;:57;;;;19835:12;:10;:12::i;:::-;19824:23;;:7;:5;:7::i;:::-;:23;;;19790:57;19782:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;21392:15:::1;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21374:55;;;21438:4;21445:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21374:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21358:13;;:110;;;;;;;;;;;;;;;;;;21537:4;21479:31;:55;21519:13;;;;;;;;;;;21479:55;;;;;;;;;;;;;;;;:62;;;;;;;;;;;;;;;;;;21605:4;21552:26;:50;21587:13;;;;;;;;;;;21552:50;;;;;;;;;;;;;;;;:57;;;;;;;;;;;;;;;;;;21622:64;21639:4;21654:15;;;;;;;;;;;21672:13;:11;:13::i;:::-;21622:8;:64::i;:::-;21697:15;;;;;;;;;;;:31;;;21736:21;21782:4;21824:17;21818:3;21802:13;:11;:13::i;:::-;:19;;;;:::i;:::-;:39;;;;:::i;:::-;21856:1;21872::::0;21888:7:::1;:5;:7::i;:::-;21910:15;21697:239;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21962:24;21979:6;21962:12;:16;;:24;;;;:::i;:::-;21949:10;:37;;;;22011:4;21997:11;;:18;;;;;;;;;;;;;;;;;;21261:762:::0;;:::o;24750:108::-;24806:4;24830:14;:20;24845:4;24830:20;;;;;;;;;;;;;;;;;;;;;;;;;24823:27;;24750:108;;;:::o;2406:151::-;2495:7;2522:11;:18;2534:5;2522:18;;;;;;;;;;;;;;;:27;2541:7;2522:27;;;;;;;;;;;;;;;;2515:34;;2406:151;;;;:::o;30718:104::-;19808:12;:10;:12::i;:::-;19790:30;;:14;;;;;;;;;;;:30;;;:57;;;;19835:12;:10;:12::i;:::-;19824:23;;:7;:5;:7::i;:::-;:23;;;19790:57;19782:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;30771:43:::1;30789:24;30807:4;30789:9;:24::i;:::-;30771:17;:43::i;:::-;30718:104::o:0;15106:201::-;14918:12;:10;:12::i;:::-;14907:23;;:7;:5;:7::i;:::-;:23;;;14899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15215:1:::1;15195:22;;:8;:22;;::::0;15187:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15271:28;15290:8;15271:18;:28::i;:::-;15106:201:::0;:::o;18653:24::-;;;;:::o;95:98::-;148:7;175:10;168:17;;95:98;:::o;5456:380::-;5609:1;5592:19;;:5;:19;;;5584:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5690:1;5671:21;;:7;:21;;;5663:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5774:6;5744:11;:18;5756:5;5744:18;;;;;;;;;;;;;;;:27;5763:7;5744:27;;;;;;;;;;;;;;;:36;;;;5812:7;5796:32;;5805:5;5796:32;;;5821:6;5796:32;;;;;;:::i;:::-;;;;;;;;5456:380;;;:::o;16886:98::-;16944:7;16975:1;16971;:5;;;;:::i;:::-;16964:12;;16886:98;;;;:::o;5844:453::-;5979:24;6006:25;6016:5;6023:7;6006:9;:25::i;:::-;5979:52;;6066:17;6046:16;:37;6042:248;;6128:6;6108:16;:26;;6100:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6212:51;6221:5;6228:7;6256:6;6237:16;:25;6212:8;:51::i;:::-;6042:248;5968:329;5844:453;;;:::o;24866:3599::-;25014:1;24998:18;;:4;:18;;;24990:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25091:1;25077:16;;:2;:16;;;25069:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25153:14;:20;25168:4;25153:20;;;;;;;;;;;;;;;;;;;;;;;;;25152:21;25144:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;25275:1;25265:6;:11;25261:93;;25293:28;25309:4;25315:2;25319:1;25293:15;:28::i;:::-;25336:7;;25261:93;25388:19;:25;25408:4;25388:25;;;;;;;;;;;;;;;;;;;;;;;;;25387:26;:54;;;;;25418:19;:23;25438:2;25418:23;;;;;;;;;;;;;;;;;;;;;;;;;25417:24;25387:54;25383:224;;;25458:18;25497:8;;25479:15;25490:3;25479:6;:10;;:15;;;;:::i;:::-;:26;;;;:::i;:::-;25458:47;;25520:40;25530:4;25536:11;;;;;;;;;;;25549:10;25520:9;:40::i;:::-;25585:10;25575:20;;;;;:::i;:::-;;;25443:164;25383:224;25665:14;;;;;;;;;;;25661:1691;;;25726:7;:5;:7::i;:::-;25718:15;;:4;:15;;;;:49;;;;;25760:7;:5;:7::i;:::-;25754:13;;:2;:13;;;;25718:49;:86;;;;;25802:1;25788:16;;:2;:16;;;;25718:86;:128;;;;;25839:6;25825:21;;:2;:21;;;;25718:128;:159;;;;;25868:9;;;;;;;;;;;25867:10;25718:159;25696:1645;;;25917:11;;;;;;;;;;;25912:117;;25938:19;:25;25958:4;25938:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25967:19;:23;25987:2;25967:23;;;;;;;;;;;;;;;;;;;;;;;;;25938:52;25930:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;25912:117;26066:12;26052:10;;:26;26048:57;;26101:4;26080:14;:18;26095:2;26080:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;26048:57;26136:7;:5;:7::i;:::-;26130:13;;:2;:13;;;;:47;;;;;26161:15;;;;;;;;;;;26147:30;;:2;:30;;;;26130:47;:79;;;;;26195:13;;;;;;;;;;;26181:28;;:2;:28;;;;26130:79;26126:336;;;26279:12;26241:24;:35;26266:9;26241:35;;;;;;;;;;;;;;;;:50;26233:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;26430:12;26392:24;:35;26417:9;26392:35;;;;;;;;;;;;;;;:50;;;;26126:336;26513:26;:32;26540:4;26513:32;;;;;;;;;;;;;;;;;;;;;;;;;:72;;;;;26550:31;:35;26582:2;26550:35;;;;;;;;;;;;;;;;;;;;;;;;;26549:36;26513:72;26509:817;;;26628:20;;26618:6;:30;;26610:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;26775:9;;26758:13;26768:2;26758:9;:13::i;:::-;26749:6;:22;;;;:::i;:::-;:35;;26741:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;26509:817;;;26913:26;:30;26940:2;26913:30;;;;;;;;;;;;;;;;;;;;;;;;;:72;;;;;26948:31;:37;26980:4;26948:37;;;;;;;;;;;;;;;;;;;;;;;;;26947:38;26913:72;26909:417;;;27028:20;;27018:6;:30;;27010:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;26909:417;;;27167:31;:35;27199:2;27167:35;;;;;;;;;;;;;;;;;;;;;;;;;27162:164;;27261:9;;27244:13;27254:2;27244:9;:13::i;:::-;27235:6;:22;;;;:::i;:::-;:35;;27227:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;27162:164;26909:417;26509:817;25696:1645;25661:1691;27391:9;;;;;;;;;;;27390:10;:60;;;;;27418:26;:32;27445:4;27418:32;;;;;;;;;;;;;;;;;;;;;;;;;27417:33;27390:60;:103;;;;;27468:19;:25;27488:4;27468:25;;;;;;;;;;;;;;;;;;;;;;;;;27467:26;27390:103;:144;;;;;27511:19;:23;27531:2;27511:23;;;;;;;;;;;;;;;;;;;;;;;;;27510:24;27390:144;27372:274;;;27573:4;27561:9;;:16;;;;;;;;;;;;;;;;;;27592:10;:8;:10::i;:::-;27629:5;27617:9;;:17;;;;;;;;;;;;;;;;;;27372:274;27658:12;27674:9;;;;;;;;;;;27673:10;27658:25;;27804:12;;;;;;;;;;;:54;;;;27833:19;:25;27853:4;27833:25;;;;;;;;;;;;;;;;;;;;;;;;;27804:54;:95;;;;27876:19;:23;27896:2;27876:23;;;;;;;;;;;;;;;;;;;;;;;;;27804:95;:183;;;;27919:26;:32;27946:4;27919:32;;;;;;;;;;;;;;;;;;;;;;;;;27918:33;:68;;;;;27956:26;:30;27983:2;27956:30;;;;;;;;;;;;;;;;;;;;;;;;;27955:31;27918:68;27804:183;27786:228;;;28009:5;27999:15;;27786:228;28035:12;28066:7;28062:350;;;28097:30;28123:3;28097:21;28108:9;;28097:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;28090:37;;28190:9;;28174:13;;28167:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;28144:19;;:55;;;;;;;:::i;:::-;;;;;;;;28256:9;;28242:11;;28235:4;:18;;;;:::i;:::-;:30;;;;:::i;:::-;28214:17;;:51;;;;;;;:::i;:::-;;;;;;;;28293:1;28286:4;:8;28282:91;;;28315:42;28331:4;28345;28352;28315:15;:42::i;:::-;28282:91;28396:4;28386:14;;;;;:::i;:::-;;;28062:350;28424:33;28440:4;28446:2;28450:6;28424:15;:33::i;:::-;24979:3486;;24866:3599;;;;:::o;15315:191::-;15389:16;15408:6;;;;;;;;;;;15389:25;;15434:8;15425:6;;:17;;;;;;;;;;;;;;;;;;15489:8;15458:40;;15479:8;15458:40;;;;;;;;;;;;15378:128;15315:191;:::o;28473:477::-;28541:21;28579:1;28565:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28541:40;;28610:4;28592;28597:1;28592:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28636:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28626:4;28631:1;28626:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28671:62;28688:4;28703:15;;;;;;;;;;;28721:11;28671:8;:62::i;:::-;28746:15;;;;;;;;;;;:66;;;28827:11;28853:1;28869:4;28896;28916:15;28746:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28530:420;28473:477;:::o;3771:671::-;3918:1;3902:18;;:4;:18;;;3894:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3995:1;3981:16;;:2;:16;;;3973:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4050:38;4071:4;4077:2;4081:6;4050:20;:38::i;:::-;4101:19;4123:9;:15;4133:4;4123:15;;;;;;;;;;;;;;;;4101:37;;4172:6;4157:11;:21;;4149:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;4289:6;4275:11;:20;4257:9;:15;4267:4;4257:15;;;;;;;;;;;;;;;:38;;;;4334:6;4317:9;:13;4327:2;4317:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;4373:2;4358:26;;4367:4;4358:26;;;4377:6;4358:26;;;;;;:::i;:::-;;;;;;;;4397:37;4417:4;4423:2;4427:6;4397:19;:37::i;:::-;3883:559;3771:671;;;:::o;17204:98::-;17262:7;17293:1;17289;:5;;;;:::i;:::-;17282:12;;17204:98;;;;:::o;29337:1102::-;29377:23;29403:24;29421:4;29403:9;:24::i;:::-;29377:50;;29438:25;29488:17;;29466:19;;:39;;;;:::i;:::-;29438:67;;29541:1;29522:15;:20;29518:33;;29544:7;;;;29518:33;29583:19;;29565:15;:37;29561:80;;;29622:19;;29604:37;;29561:80;29654:23;29740:1;29720:17;29698:19;;29680:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;29654:87;;29752:26;29781:36;29801:15;29781;:19;;:36;;;;:::i;:::-;29752:65;;29830:25;29858:21;29830:49;;29892:37;29910:18;29892:17;:37::i;:::-;29950:18;29971:44;29997:17;29971:21;:25;;:44;;;;:::i;:::-;29950:65;;30026:21;30050:56;30088:17;30050:33;30065:17;;30050:10;:14;;:33;;;;:::i;:::-;:37;;:56;;;;:::i;:::-;30026:80;;30117:23;30156:13;30143:10;:26;;;;:::i;:::-;30117:52;;30202:1;30182:17;:21;;;;30236:1;30214:19;:23;;;;30258:14;;;;;;;;;;;30250:32;;:47;30283:13;30250:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30332:1;30314:15;:19;:42;;;;;30355:1;30337:15;:19;30314:42;30310:122;;;30373:47;30387:15;30404;30373:13;:47::i;:::-;30310:122;29366:1073;;;;;;;;29337:1102;:::o;17098:98::-;17156:7;17187:1;17183;:5;;;;:::i;:::-;17176:12;;17098:98;;;;:::o;6305:125::-;;;;:::o;6438:124::-;;;;:::o;16992:98::-;17050:7;17081:1;17077;:5;;;;:::i;:::-;17070:12;;16992:98;;;;:::o;28958:371::-;29041:62;29058:4;29073:15;;;;;;;;;;;29091:11;29041:8;:62::i;:::-;29116:15;;;;;;;;;;;:31;;;29155:9;29188:4;29208:11;29234:1;29250;29266:14;;;;;;;;;;;29295:15;29116:205;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28958:371;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:102;498:6;549:2;545:7;540:2;533:5;529:14;525:28;515:38;;457:102;;;:::o;565:180::-;613:77;610:1;603:88;710:4;707:1;700:15;734:4;731:1;724:15;751:281;834:27;856:4;834:27;:::i;:::-;826:6;822:40;964:6;952:10;949:22;928:18;916:10;913:34;910:62;907:88;;;975:18;;:::i;:::-;907:88;1015:10;1011:2;1004:22;794:238;751:281;;:::o;1038:129::-;1072:6;1099:20;;:::i;:::-;1089:30;;1128:33;1156:4;1148:6;1128:33;:::i;:::-;1038:129;;;:::o;1173:311::-;1250:4;1340:18;1332:6;1329:30;1326:56;;;1362:18;;:::i;:::-;1326:56;1412:4;1404:6;1400:17;1392:25;;1472:4;1466;1462:15;1454:23;;1173:311;;;:::o;1490:117::-;1599:1;1596;1589:12;1613:126;1650:7;1690:42;1683:5;1679:54;1668:65;;1613:126;;;:::o;1745:96::-;1782:7;1811:24;1829:5;1811:24;:::i;:::-;1800:35;;1745:96;;;:::o;1847:122::-;1920:24;1938:5;1920:24;:::i;:::-;1913:5;1910:35;1900:63;;1959:1;1956;1949:12;1900:63;1847:122;:::o;1975:139::-;2021:5;2059:6;2046:20;2037:29;;2075:33;2102:5;2075:33;:::i;:::-;1975:139;;;;:::o;2137:710::-;2233:5;2258:81;2274:64;2331:6;2274:64;:::i;:::-;2258:81;:::i;:::-;2249:90;;2359:5;2388:6;2381:5;2374:21;2422:4;2415:5;2411:16;2404:23;;2475:4;2467:6;2463:17;2455:6;2451:30;2504:3;2496:6;2493:15;2490:122;;;2523:79;;:::i;:::-;2490:122;2638:6;2621:220;2655:6;2650:3;2647:15;2621:220;;;2730:3;2759:37;2792:3;2780:10;2759:37;:::i;:::-;2754:3;2747:50;2826:4;2821:3;2817:14;2810:21;;2697:144;2681:4;2676:3;2672:14;2665:21;;2621:220;;;2625:21;2239:608;;2137:710;;;;;:::o;2870:370::-;2941:5;2990:3;2983:4;2975:6;2971:17;2967:27;2957:122;;2998:79;;:::i;:::-;2957:122;3115:6;3102:20;3140:94;3230:3;3222:6;3215:4;3207:6;3203:17;3140:94;:::i;:::-;3131:103;;2947:293;2870:370;;;;:::o;3246:539::-;3330:6;3379:2;3367:9;3358:7;3354:23;3350:32;3347:119;;;3385:79;;:::i;:::-;3347:119;3533:1;3522:9;3518:17;3505:31;3563:18;3555:6;3552:30;3549:117;;;3585:79;;:::i;:::-;3549:117;3690:78;3760:7;3751:6;3740:9;3736:22;3690:78;:::i;:::-;3680:88;;3476:302;3246:539;;;;:::o;3791:99::-;3843:6;3877:5;3871:12;3861:22;;3791:99;;;:::o;3896:169::-;3980:11;4014:6;4009:3;4002:19;4054:4;4049:3;4045:14;4030:29;;3896:169;;;;:::o;4071:307::-;4139:1;4149:113;4163:6;4160:1;4157:13;4149:113;;;4248:1;4243:3;4239:11;4233:18;4229:1;4224:3;4220:11;4213:39;4185:2;4182:1;4178:10;4173:15;;4149:113;;;4280:6;4277:1;4274:13;4271:101;;;4360:1;4351:6;4346:3;4342:16;4335:27;4271:101;4120:258;4071:307;;;:::o;4384:364::-;4472:3;4500:39;4533:5;4500:39;:::i;:::-;4555:71;4619:6;4614:3;4555:71;:::i;:::-;4548:78;;4635:52;4680:6;4675:3;4668:4;4661:5;4657:16;4635:52;:::i;:::-;4712:29;4734:6;4712:29;:::i;:::-;4707:3;4703:39;4696:46;;4476:272;4384:364;;;;:::o;4754:313::-;4867:4;4905:2;4894:9;4890:18;4882:26;;4954:9;4948:4;4944:20;4940:1;4929:9;4925:17;4918:47;4982:78;5055:4;5046:6;4982:78;:::i;:::-;4974:86;;4754:313;;;;:::o;5073:77::-;5110:7;5139:5;5128:16;;5073:77;;;:::o;5156:122::-;5229:24;5247:5;5229:24;:::i;:::-;5222:5;5219:35;5209:63;;5268:1;5265;5258:12;5209:63;5156:122;:::o;5284:139::-;5330:5;5368:6;5355:20;5346:29;;5384:33;5411:5;5384:33;:::i;:::-;5284:139;;;;:::o;5429:474::-;5497:6;5505;5554:2;5542:9;5533:7;5529:23;5525:32;5522:119;;;5560:79;;:::i;:::-;5522:119;5680:1;5705:53;5750:7;5741:6;5730:9;5726:22;5705:53;:::i;:::-;5695:63;;5651:117;5807:2;5833:53;5878:7;5869:6;5858:9;5854:22;5833:53;:::i;:::-;5823:63;;5778:118;5429:474;;;;;:::o;5909:90::-;5943:7;5986:5;5979:13;5972:21;5961:32;;5909:90;;;:::o;6005:109::-;6086:21;6101:5;6086:21;:::i;:::-;6081:3;6074:34;6005:109;;:::o;6120:210::-;6207:4;6245:2;6234:9;6230:18;6222:26;;6258:65;6320:1;6309:9;6305:17;6296:6;6258:65;:::i;:::-;6120:210;;;;:::o;6336:118::-;6423:24;6441:5;6423:24;:::i;:::-;6418:3;6411:37;6336:118;;:::o;6460:222::-;6553:4;6591:2;6580:9;6576:18;6568:26;;6604:71;6672:1;6661:9;6657:17;6648:6;6604:71;:::i;:::-;6460:222;;;;:::o;6688:619::-;6765:6;6773;6781;6830:2;6818:9;6809:7;6805:23;6801:32;6798:119;;;6836:79;;:::i;:::-;6798:119;6956:1;6981:53;7026:7;7017:6;7006:9;7002:22;6981:53;:::i;:::-;6971:63;;6927:117;7083:2;7109:53;7154:7;7145:6;7134:9;7130:22;7109:53;:::i;:::-;7099:63;;7054:118;7211:2;7237:53;7282:7;7273:6;7262:9;7258:22;7237:53;:::i;:::-;7227:63;;7182:118;6688:619;;;;;:::o;7313:::-;7390:6;7398;7406;7455:2;7443:9;7434:7;7430:23;7426:32;7423:119;;;7461:79;;:::i;:::-;7423:119;7581:1;7606:53;7651:7;7642:6;7631:9;7627:22;7606:53;:::i;:::-;7596:63;;7552:117;7708:2;7734:53;7779:7;7770:6;7759:9;7755:22;7734:53;:::i;:::-;7724:63;;7679:118;7836:2;7862:53;7907:7;7898:6;7887:9;7883:22;7862:53;:::i;:::-;7852:63;;7807:118;7313:619;;;;;:::o;7938:86::-;7973:7;8013:4;8006:5;8002:16;7991:27;;7938:86;;;:::o;8030:112::-;8113:22;8129:5;8113:22;:::i;:::-;8108:3;8101:35;8030:112;;:::o;8148:214::-;8237:4;8275:2;8264:9;8260:18;8252:26;;8288:67;8352:1;8341:9;8337:17;8328:6;8288:67;:::i;:::-;8148:214;;;;:::o;8368:329::-;8427:6;8476:2;8464:9;8455:7;8451:23;8447:32;8444:119;;;8482:79;;:::i;:::-;8444:119;8602:1;8627:53;8672:7;8663:6;8652:9;8648:22;8627:53;:::i;:::-;8617:63;;8573:117;8368:329;;;;:::o;8703:118::-;8790:24;8808:5;8790:24;:::i;:::-;8785:3;8778:37;8703:118;;:::o;8827:222::-;8920:4;8958:2;8947:9;8943:18;8935:26;;8971:71;9039:1;9028:9;9024:17;9015:6;8971:71;:::i;:::-;8827:222;;;;:::o;9055:329::-;9114:6;9163:2;9151:9;9142:7;9138:23;9134:32;9131:119;;;9169:79;;:::i;:::-;9131:119;9289:1;9314:53;9359:7;9350:6;9339:9;9335:22;9314:53;:::i;:::-;9304:63;;9260:117;9055:329;;;;:::o;9390:116::-;9460:21;9475:5;9460:21;:::i;:::-;9453:5;9450:32;9440:60;;9496:1;9493;9486:12;9440:60;9390:116;:::o;9512:133::-;9555:5;9593:6;9580:20;9571:29;;9609:30;9633:5;9609:30;:::i;:::-;9512:133;;;;:::o;9651:323::-;9707:6;9756:2;9744:9;9735:7;9731:23;9727:32;9724:119;;;9762:79;;:::i;:::-;9724:119;9882:1;9907:50;9949:7;9940:6;9929:9;9925:22;9907:50;:::i;:::-;9897:60;;9853:114;9651:323;;;;:::o;9980:468::-;10045:6;10053;10102:2;10090:9;10081:7;10077:23;10073:32;10070:119;;;10108:79;;:::i;:::-;10070:119;10228:1;10253:53;10298:7;10289:6;10278:9;10274:22;10253:53;:::i;:::-;10243:63;;10199:117;10355:2;10381:50;10423:7;10414:6;10403:9;10399:22;10381:50;:::i;:::-;10371:60;;10326:115;9980:468;;;;;:::o;10454:474::-;10522:6;10530;10579:2;10567:9;10558:7;10554:23;10550:32;10547:119;;;10585:79;;:::i;:::-;10547:119;10705:1;10730:53;10775:7;10766:6;10755:9;10751:22;10730:53;:::i;:::-;10720:63;;10676:117;10832:2;10858:53;10903:7;10894:6;10883:9;10879:22;10858:53;:::i;:::-;10848:63;;10803:118;10454:474;;;;;:::o;10934:::-;11002:6;11010;11059:2;11047:9;11038:7;11034:23;11030:32;11027:119;;;11065:79;;:::i;:::-;11027:119;11185:1;11210:53;11255:7;11246:6;11235:9;11231:22;11210:53;:::i;:::-;11200:63;;11156:117;11312:2;11338:53;11383:7;11374:6;11363:9;11359:22;11338:53;:::i;:::-;11328:63;;11283:118;10934:474;;;;;:::o;11414:182::-;11554:34;11550:1;11542:6;11538:14;11531:58;11414:182;:::o;11602:366::-;11744:3;11765:67;11829:2;11824:3;11765:67;:::i;:::-;11758:74;;11841:93;11930:3;11841:93;:::i;:::-;11959:2;11954:3;11950:12;11943:19;;11602:366;;;:::o;11974:419::-;12140:4;12178:2;12167:9;12163:18;12155:26;;12227:9;12221:4;12217:20;12213:1;12202:9;12198:17;12191:47;12255:131;12381:4;12255:131;:::i;:::-;12247:139;;11974:419;;;:::o;12399:180::-;12447:77;12444:1;12437:88;12544:4;12541:1;12534:15;12568:4;12565:1;12558:15;12585:180;12633:77;12630:1;12623:88;12730:4;12727:1;12720:15;12754:4;12751:1;12744:15;12771:233;12810:3;12833:24;12851:5;12833:24;:::i;:::-;12824:33;;12879:66;12872:5;12869:77;12866:103;;12949:18;;:::i;:::-;12866:103;12996:1;12989:5;12985:13;12978:20;;12771:233;;;:::o;13010:180::-;13058:77;13055:1;13048:88;13155:4;13152:1;13145:15;13179:4;13176:1;13169:15;13196:320;13240:6;13277:1;13271:4;13267:12;13257:22;;13324:1;13318:4;13314:12;13345:18;13335:81;;13401:4;13393:6;13389:17;13379:27;;13335:81;13463:2;13455:6;13452:14;13432:18;13429:38;13426:84;;13482:18;;:::i;:::-;13426:84;13247:269;13196:320;;;:::o;13522:238::-;13662:34;13658:1;13650:6;13646:14;13639:58;13731:21;13726:2;13718:6;13714:15;13707:46;13522:238;:::o;13766:366::-;13908:3;13929:67;13993:2;13988:3;13929:67;:::i;:::-;13922:74;;14005:93;14094:3;14005:93;:::i;:::-;14123:2;14118:3;14114:12;14107:19;;13766:366;;;:::o;14138:419::-;14304:4;14342:2;14331:9;14327:18;14319:26;;14391:9;14385:4;14381:20;14377:1;14366:9;14362:17;14355:47;14419:131;14545:4;14419:131;:::i;:::-;14411:139;;14138:419;;;:::o;14563:305::-;14603:3;14622:20;14640:1;14622:20;:::i;:::-;14617:25;;14656:20;14674:1;14656:20;:::i;:::-;14651:25;;14810:1;14742:66;14738:74;14735:1;14732:81;14729:107;;;14816:18;;:::i;:::-;14729:107;14860:1;14857;14853:9;14846:16;;14563:305;;;;:::o;14874:348::-;14914:7;14937:20;14955:1;14937:20;:::i;:::-;14932:25;;14971:20;14989:1;14971:20;:::i;:::-;14966:25;;15159:1;15091:66;15087:74;15084:1;15081:81;15076:1;15069:9;15062:17;15058:105;15055:131;;;15166:18;;:::i;:::-;15055:131;15214:1;15211;15207:9;15196:20;;14874:348;;;;:::o;15228:180::-;15276:77;15273:1;15266:88;15373:4;15370:1;15363:15;15397:4;15394:1;15387:15;15414:185;15454:1;15471:20;15489:1;15471:20;:::i;:::-;15466:25;;15505:20;15523:1;15505:20;:::i;:::-;15500:25;;15544:1;15534:35;;15549:18;;:::i;:::-;15534:35;15591:1;15588;15584:9;15579:14;;15414:185;;;;:::o;15605:243::-;15745:34;15741:1;15733:6;15729:14;15722:58;15814:26;15809:2;15801:6;15797:15;15790:51;15605:243;:::o;15854:366::-;15996:3;16017:67;16081:2;16076:3;16017:67;:::i;:::-;16010:74;;16093:93;16182:3;16093:93;:::i;:::-;16211:2;16206:3;16202:12;16195:19;;15854:366;;;:::o;16226:419::-;16392:4;16430:2;16419:9;16415:18;16407:26;;16479:9;16473:4;16469:20;16465:1;16454:9;16450:17;16443:47;16507:131;16633:4;16507:131;:::i;:::-;16499:139;;16226:419;;;:::o;16651:242::-;16791:34;16787:1;16779:6;16775:14;16768:58;16860:25;16855:2;16847:6;16843:15;16836:50;16651:242;:::o;16899:366::-;17041:3;17062:67;17126:2;17121:3;17062:67;:::i;:::-;17055:74;;17138:93;17227:3;17138:93;:::i;:::-;17256:2;17251:3;17247:12;17240:19;;16899:366;;;:::o;17271:419::-;17437:4;17475:2;17464:9;17460:18;17452:26;;17524:9;17518:4;17514:20;17510:1;17499:9;17495:17;17488:47;17552:131;17678:4;17552:131;:::i;:::-;17544:139;;17271:419;;;:::o;17696:224::-;17836:34;17832:1;17824:6;17820:14;17813:58;17905:7;17900:2;17892:6;17888:15;17881:32;17696:224;:::o;17926:366::-;18068:3;18089:67;18153:2;18148:3;18089:67;:::i;:::-;18082:74;;18165:93;18254:3;18165:93;:::i;:::-;18283:2;18278:3;18274:12;18267:19;;17926:366;;;:::o;18298:419::-;18464:4;18502:2;18491:9;18487:18;18479:26;;18551:9;18545:4;18541:20;18537:1;18526:9;18522:17;18515:47;18579:131;18705:4;18579:131;:::i;:::-;18571:139;;18298:419;;;:::o;18723:143::-;18780:5;18811:6;18805:13;18796:22;;18827:33;18854:5;18827:33;:::i;:::-;18723:143;;;;:::o;18872:351::-;18942:6;18991:2;18979:9;18970:7;18966:23;18962:32;18959:119;;;18997:79;;:::i;:::-;18959:119;19117:1;19142:64;19198:7;19189:6;19178:9;19174:22;19142:64;:::i;:::-;19132:74;;19088:128;18872:351;;;;:::o;19229:332::-;19350:4;19388:2;19377:9;19373:18;19365:26;;19401:71;19469:1;19458:9;19454:17;19445:6;19401:71;:::i;:::-;19482:72;19550:2;19539:9;19535:18;19526:6;19482:72;:::i;:::-;19229:332;;;;;:::o;19567:85::-;19612:7;19641:5;19630:16;;19567:85;;;:::o;19658:60::-;19686:3;19707:5;19700:12;;19658:60;;;:::o;19724:158::-;19782:9;19815:61;19833:42;19842:32;19868:5;19842:32;:::i;:::-;19833:42;:::i;:::-;19815:61;:::i;:::-;19802:74;;19724:158;;;:::o;19888:147::-;19983:45;20022:5;19983:45;:::i;:::-;19978:3;19971:58;19888:147;;:::o;20041:807::-;20290:4;20328:3;20317:9;20313:19;20305:27;;20342:71;20410:1;20399:9;20395:17;20386:6;20342:71;:::i;:::-;20423:72;20491:2;20480:9;20476:18;20467:6;20423:72;:::i;:::-;20505:80;20581:2;20570:9;20566:18;20557:6;20505:80;:::i;:::-;20595;20671:2;20660:9;20656:18;20647:6;20595:80;:::i;:::-;20685:73;20753:3;20742:9;20738:19;20729:6;20685:73;:::i;:::-;20768;20836:3;20825:9;20821:19;20812:6;20768:73;:::i;:::-;20041:807;;;;;;;;;:::o;20854:143::-;20911:5;20942:6;20936:13;20927:22;;20958:33;20985:5;20958:33;:::i;:::-;20854:143;;;;:::o;21003:663::-;21091:6;21099;21107;21156:2;21144:9;21135:7;21131:23;21127:32;21124:119;;;21162:79;;:::i;:::-;21124:119;21282:1;21307:64;21363:7;21354:6;21343:9;21339:22;21307:64;:::i;:::-;21297:74;;21253:128;21420:2;21446:64;21502:7;21493:6;21482:9;21478:22;21446:64;:::i;:::-;21436:74;;21391:129;21559:2;21585:64;21641:7;21632:6;21621:9;21617:22;21585:64;:::i;:::-;21575:74;;21530:129;21003:663;;;;;:::o;21672:225::-;21812:34;21808:1;21800:6;21796:14;21789:58;21881:8;21876:2;21868:6;21864:15;21857:33;21672:225;:::o;21903:366::-;22045:3;22066:67;22130:2;22125:3;22066:67;:::i;:::-;22059:74;;22142:93;22231:3;22142:93;:::i;:::-;22260:2;22255:3;22251:12;22244:19;;21903:366;;;:::o;22275:419::-;22441:4;22479:2;22468:9;22464:18;22456:26;;22528:9;22522:4;22518:20;22514:1;22503:9;22499:17;22492:47;22556:131;22682:4;22556:131;:::i;:::-;22548:139;;22275:419;;;:::o;22700:223::-;22840:34;22836:1;22828:6;22824:14;22817:58;22909:6;22904:2;22896:6;22892:15;22885:31;22700:223;:::o;22929:366::-;23071:3;23092:67;23156:2;23151:3;23092:67;:::i;:::-;23085:74;;23168:93;23257:3;23168:93;:::i;:::-;23286:2;23281:3;23277:12;23270:19;;22929:366;;;:::o;23301:419::-;23467:4;23505:2;23494:9;23490:18;23482:26;;23554:9;23548:4;23544:20;23540:1;23529:9;23525:17;23518:47;23582:131;23708:4;23582:131;:::i;:::-;23574:139;;23301:419;;;:::o;23726:221::-;23866:34;23862:1;23854:6;23850:14;23843:58;23935:4;23930:2;23922:6;23918:15;23911:29;23726:221;:::o;23953:366::-;24095:3;24116:67;24180:2;24175:3;24116:67;:::i;:::-;24109:74;;24192:93;24281:3;24192:93;:::i;:::-;24310:2;24305:3;24301:12;24294:19;;23953:366;;;:::o;24325:419::-;24491:4;24529:2;24518:9;24514:18;24506:26;;24578:9;24572:4;24568:20;24564:1;24553:9;24549:17;24542:47;24606:131;24732:4;24606:131;:::i;:::-;24598:139;;24325:419;;;:::o;24750:179::-;24890:31;24886:1;24878:6;24874:14;24867:55;24750:179;:::o;24935:366::-;25077:3;25098:67;25162:2;25157:3;25098:67;:::i;:::-;25091:74;;25174:93;25263:3;25174:93;:::i;:::-;25292:2;25287:3;25283:12;25276:19;;24935:366;;;:::o;25307:419::-;25473:4;25511:2;25500:9;25496:18;25488:26;;25560:9;25554:4;25550:20;25546:1;25535:9;25531:17;25524:47;25588:131;25714:4;25588:131;:::i;:::-;25580:139;;25307:419;;;:::o;25732:224::-;25872:34;25868:1;25860:6;25856:14;25849:58;25941:7;25936:2;25928:6;25924:15;25917:32;25732:224;:::o;25962:366::-;26104:3;26125:67;26189:2;26184:3;26125:67;:::i;:::-;26118:74;;26201:93;26290:3;26201:93;:::i;:::-;26319:2;26314:3;26310:12;26303:19;;25962:366;;;:::o;26334:419::-;26500:4;26538:2;26527:9;26523:18;26515:26;;26587:9;26581:4;26577:20;26573:1;26562:9;26558:17;26551:47;26615:131;26741:4;26615:131;:::i;:::-;26607:139;;26334:419;;;:::o;26759:222::-;26899:34;26895:1;26887:6;26883:14;26876:58;26968:5;26963:2;26955:6;26951:15;26944:30;26759:222;:::o;26987:366::-;27129:3;27150:67;27214:2;27209:3;27150:67;:::i;:::-;27143:74;;27226:93;27315:3;27226:93;:::i;:::-;27344:2;27339:3;27335:12;27328:19;;26987:366;;;:::o;27359:419::-;27525:4;27563:2;27552:9;27548:18;27540:26;;27612:9;27606:4;27602:20;27598:1;27587:9;27583:17;27576:47;27640:131;27766:4;27640:131;:::i;:::-;27632:139;;27359:419;;;:::o;27784:249::-;27924:34;27920:1;27912:6;27908:14;27901:58;27993:32;27988:2;27980:6;27976:15;27969:57;27784:249;:::o;28039:366::-;28181:3;28202:67;28266:2;28261:3;28202:67;:::i;:::-;28195:74;;28278:93;28367:3;28278:93;:::i;:::-;28396:2;28391:3;28387:12;28380:19;;28039:366;;;:::o;28411:419::-;28577:4;28615:2;28604:9;28600:18;28592:26;;28664:9;28658:4;28654:20;28650:1;28639:9;28635:17;28628:47;28692:131;28818:4;28692:131;:::i;:::-;28684:139;;28411:419;;;:::o;28836:191::-;28876:4;28896:20;28914:1;28896:20;:::i;:::-;28891:25;;28930:20;28948:1;28930:20;:::i;:::-;28925:25;;28969:1;28966;28963:8;28960:34;;;28974:18;;:::i;:::-;28960:34;29019:1;29016;29012:9;29004:17;;28836:191;;;;:::o;29033:221::-;29173:34;29169:1;29161:6;29157:14;29150:58;29242:4;29237:2;29229:6;29225:15;29218:29;29033:221;:::o;29260:366::-;29402:3;29423:67;29487:2;29482:3;29423:67;:::i;:::-;29416:74;;29499:93;29588:3;29499:93;:::i;:::-;29617:2;29612:3;29608:12;29601:19;;29260:366;;;:::o;29632:419::-;29798:4;29836:2;29825:9;29821:18;29813:26;;29885:9;29879:4;29875:20;29871:1;29860:9;29856:17;29849:47;29913:131;30039:4;29913:131;:::i;:::-;29905:139;;29632:419;;;:::o;30057:297::-;30197:34;30193:1;30185:6;30181:14;30174:58;30266:34;30261:2;30253:6;30249:15;30242:59;30335:11;30330:2;30322:6;30318:15;30311:36;30057:297;:::o;30360:366::-;30502:3;30523:67;30587:2;30582:3;30523:67;:::i;:::-;30516:74;;30599:93;30688:3;30599:93;:::i;:::-;30717:2;30712:3;30708:12;30701:19;;30360:366;;;:::o;30732:419::-;30898:4;30936:2;30925:9;30921:18;30913:26;;30985:9;30979:4;30975:20;30971:1;30960:9;30956:17;30949:47;31013:131;31139:4;31013:131;:::i;:::-;31005:139;;30732:419;;;:::o;31157:289::-;31297:34;31293:1;31285:6;31281:14;31274:58;31366:34;31361:2;31353:6;31349:15;31342:59;31435:3;31430:2;31422:6;31418:15;31411:28;31157:289;:::o;31452:366::-;31594:3;31615:67;31679:2;31674:3;31615:67;:::i;:::-;31608:74;;31691:93;31780:3;31691:93;:::i;:::-;31809:2;31804:3;31800:12;31793:19;;31452:366;;;:::o;31824:419::-;31990:4;32028:2;32017:9;32013:18;32005:26;;32077:9;32071:4;32067:20;32063:1;32052:9;32048:17;32041:47;32105:131;32231:4;32105:131;:::i;:::-;32097:139;;31824:419;;;:::o;32249:181::-;32389:33;32385:1;32377:6;32373:14;32366:57;32249:181;:::o;32436:366::-;32578:3;32599:67;32663:2;32658:3;32599:67;:::i;:::-;32592:74;;32675:93;32764:3;32675:93;:::i;:::-;32793:2;32788:3;32784:12;32777:19;;32436:366;;;:::o;32808:419::-;32974:4;33012:2;33001:9;32997:18;32989:26;;33061:9;33055:4;33051:20;33047:1;33036:9;33032:17;33025:47;33089:131;33215:4;33089:131;:::i;:::-;33081:139;;32808:419;;;:::o;33233:290::-;33373:34;33369:1;33361:6;33357:14;33350:58;33442:34;33437:2;33429:6;33425:15;33418:59;33511:4;33506:2;33498:6;33494:15;33487:29;33233:290;:::o;33529:366::-;33671:3;33692:67;33756:2;33751:3;33692:67;:::i;:::-;33685:74;;33768:93;33857:3;33768:93;:::i;:::-;33886:2;33881:3;33877:12;33870:19;;33529:366;;;:::o;33901:419::-;34067:4;34105:2;34094:9;34090:18;34082:26;;34154:9;34148:4;34144:20;34140:1;34129:9;34125:17;34118:47;34182:131;34308:4;34182:131;:::i;:::-;34174:139;;33901:419;;;:::o;34326:114::-;34393:6;34427:5;34421:12;34411:22;;34326:114;;;:::o;34446:184::-;34545:11;34579:6;34574:3;34567:19;34619:4;34614:3;34610:14;34595:29;;34446:184;;;;:::o;34636:132::-;34703:4;34726:3;34718:11;;34756:4;34751:3;34747:14;34739:22;;34636:132;;;:::o;34774:108::-;34851:24;34869:5;34851:24;:::i;:::-;34846:3;34839:37;34774:108;;:::o;34888:179::-;34957:10;34978:46;35020:3;35012:6;34978:46;:::i;:::-;35056:4;35051:3;35047:14;35033:28;;34888:179;;;;:::o;35073:113::-;35143:4;35175;35170:3;35166:14;35158:22;;35073:113;;;:::o;35222:732::-;35341:3;35370:54;35418:5;35370:54;:::i;:::-;35440:86;35519:6;35514:3;35440:86;:::i;:::-;35433:93;;35550:56;35600:5;35550:56;:::i;:::-;35629:7;35660:1;35645:284;35670:6;35667:1;35664:13;35645:284;;;35746:6;35740:13;35773:63;35832:3;35817:13;35773:63;:::i;:::-;35766:70;;35859:60;35912:6;35859:60;:::i;:::-;35849:70;;35705:224;35692:1;35689;35685:9;35680:14;;35645:284;;;35649:14;35945:3;35938:10;;35346:608;;;35222:732;;;;:::o;35960:831::-;36223:4;36261:3;36250:9;36246:19;36238:27;;36275:71;36343:1;36332:9;36328:17;36319:6;36275:71;:::i;:::-;36356:80;36432:2;36421:9;36417:18;36408:6;36356:80;:::i;:::-;36483:9;36477:4;36473:20;36468:2;36457:9;36453:18;36446:48;36511:108;36614:4;36605:6;36511:108;:::i;:::-;36503:116;;36629:72;36697:2;36686:9;36682:18;36673:6;36629:72;:::i;:::-;36711:73;36779:3;36768:9;36764:19;36755:6;36711:73;:::i;:::-;35960:831;;;;;;;;:::o;36797:225::-;36937:34;36933:1;36925:6;36921:14;36914:58;37006:8;37001:2;36993:6;36989:15;36982:33;36797:225;:::o;37028:366::-;37170:3;37191:67;37255:2;37250:3;37191:67;:::i;:::-;37184:74;;37267:93;37356:3;37267:93;:::i;:::-;37385:2;37380:3;37376:12;37369:19;;37028:366;;;:::o;37400:419::-;37566:4;37604:2;37593:9;37589:18;37581:26;;37653:9;37647:4;37643:20;37639:1;37628:9;37624:17;37617:47;37681:131;37807:4;37681:131;:::i;:::-;37673:139;;37400:419;;;:::o

Swarm Source

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