ETH Price: $3,451.68 (-1.02%)
Gas: 2 Gwei

Token

BERRIES (BERRIES)
 

Overview

Max Total Supply

100,000,000,000 BERRIES

Holders

106

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000015 BERRIES

Value
$0.00
0x7b75b51f2101b9752c2e0c2effcb27f0e4f9313c
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:
Berries

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.19;

abstract contract Context {

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

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

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

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

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

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

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

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

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

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

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

contract Berries is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "BERRIES";
    string private _symbol = "BERRIES";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress = payable(0x48b3c8517ECbE9AeC07c4741f975BBcAf1495CC6); // Marketing
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;

    mapping(address => bool) public blacklists;

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 30;

    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 45;

    uint256 public _liquidityShare = 0;
    uint256 public _marketingShare = 75;

    uint256 public _totalTaxIfBuying = 30;
    uint256 public _totalTaxIfSelling = 45;
    uint256 public _totalDistributionShares = 75;

    uint256 private _totalSupply = 100 * 10**9 * 10**9;
    uint256 public _maxTxAmount = 2 * 10**9 * 10**9;
    uint256 public _walletMax = 2 * 10**9 * 10**9;
    uint256 private minimumTokensBeforeSwap = 550 * 10**6 * 10**9; 

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        isExcludedFromFee[address(marketingWalletAddress)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        isWalletLimitExempt[address(marketingWalletAddress)] = true;
        isWalletLimitExempt[address(0x71B5759d73262FBb223956913ecF4ecC51057641)] = true; //Pinksale address
        isWalletLimitExempt[address(deadAddress)] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[address(marketingWalletAddress)] = true;
        isTxLimitExempt[address(0x71B5759d73262FBb223956913ecF4ecC51057641)] = true; //Pinksale address
        isTxLimitExempt[address(deadAddress)] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

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

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

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

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

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

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

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

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

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "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 blacklist(address _address, bool _isBlacklisted) external onlyOwner {
        blacklists[_address] = _isBlacklisted;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee);
        require(_totalTaxIfBuying <= 30, "Buy tax must be less than 30%");
    }

    function setSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee);
        require(_totalTaxIfSelling <= 45, "Sell tax must be less than 45%");
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare) external onlyOwner() {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare);
        require(_totalDistributionShares <=75, "Distribution Shares must be less than 75%");
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= _totalSupply / 200, "Cannot set MaxTxAmount lower than 0.5%");
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

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

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        require(newLimit >= _totalSupply / 200, "Cannot set MaxWallet lower than 0.5%");
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        require(newLimit > 1, "NumTokensBeforeSwap should be not 0");
        minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        marketingWalletAddress = payable(newAddress);
    }

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

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        if(inSwapAndLiquify)
        { 
            require(!blacklists[recipient] && !blacklists[sender], "Blacklisted");
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }            

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShare).div(totalETHFee).div(2);
        uint256 amountETHMarketing = amountReceived.mul(_marketingShare).div(totalETHFee);

        if(amountETHMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountETHMarketing);

        if(amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isBlacklisted","type":"bool"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","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":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600781526020017f4245525249455300000000000000000000000000000000000000000000000000815250600290816200004a919062000f50565b506040518060400160405280600781526020017f42455252494553000000000000000000000000000000000000000000000000008152506003908162000091919062000f50565b50600960045f6101000a81548160ff021916908360ff1602179055507348b3c8517ecbe9aec07c4741f975bbcaf1495cc6600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152505f600c55601e600d555f600e55602d600f555f601055604b601155601e601255602d601355604b60145568056bc75e2d63100000601555671bc16d674ec80000601655671bc16d674ec800006017556707a1fe16027700006018556001601a60156101000a81548160ff0219169083151502179055505f601a60166101000a81548160ff0219169083151502179055506001601a60176101000a81548160ff021916908315150217905550348015620001ee575f80fd5b505f6200020062000c5c60201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fe573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000324919062001099565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200038a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003b0919062001099565b6040518363ffffffff1660e01b8152600401620003cf929190620010da565b6020604051808303815f875af1158015620003ec573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000412919062001099565b601a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060195f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060155460065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160075f6200054662000c6360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506200067a600d54600c5462000c8a60201b90919060201c565b60128190555062000699600f54600e5462000c8a60201b90919060201c565b601381905550620006b860115460105462000c8a60201b90919060201c565b601481905550600160085f620006d362000c6360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f7371b5759d73262fbb223956913ecf4ecc5105764173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f6200093962000c6360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f7371b5759d73262fbb223956913ecf4ecc5105764173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060155460055f62000ba062000c5c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555062000bed62000c5c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60155460405162000c4d919062001116565b60405180910390a35062001216565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80828462000c9a91906200115e565b90508381101562000ce2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cd990620011f6565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000d6857607f821691505b60208210810362000d7e5762000d7d62000d23565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000de27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000da5565b62000dee868362000da5565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000e3862000e3262000e2c8462000e06565b62000e0f565b62000e06565b9050919050565b5f819050919050565b62000e538362000e18565b62000e6b62000e628262000e3f565b84845462000db1565b825550505050565b5f90565b62000e8162000e73565b62000e8e81848462000e48565b505050565b5b8181101562000eb55762000ea95f8262000e77565b60018101905062000e94565b5050565b601f82111562000f045762000ece8162000d84565b62000ed98462000d96565b8101602085101562000ee9578190505b62000f0162000ef88562000d96565b83018262000e93565b50505b505050565b5f82821c905092915050565b5f62000f265f198460080262000f09565b1980831691505092915050565b5f62000f40838362000f15565b9150826002028217905092915050565b62000f5b8262000cec565b67ffffffffffffffff81111562000f775762000f7662000cf6565b5b62000f83825462000d50565b62000f9082828562000eb9565b5f60209050601f83116001811462000fc6575f841562000fb1578287015190505b62000fbd858262000f33565b8655506200102c565b601f19841662000fd68662000d84565b5f5b8281101562000fff5784890151825560018201915060208501945060208101905062000fd8565b868310156200101f57848901516200101b601f89168262000f15565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620010638262001038565b9050919050565b620010758162001057565b811462001080575f80fd5b50565b5f8151905062001093816200106a565b92915050565b5f60208284031215620010b157620010b062001034565b5b5f620010c08482850162001083565b91505092915050565b620010d48162001057565b82525050565b5f604082019050620010ef5f830185620010c9565b620010fe6020830184620010c9565b9392505050565b620011108162000e06565b82525050565b5f6020820190506200112b5f83018462001105565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200116a8262000e06565b9150620011778362000e06565b925082820190508082111562001192576200119162001131565b5b92915050565b5f82825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f620011de601b8362001198565b9150620011eb82620011a8565b602082019050919050565b5f6020820190508181035f8301526200120f81620011d0565b9050919050565b608051614574620012365f395f8181610fa90152610fd401526145745ff3fe608060405260043610610302575f3560e01c80638da5cb5b1161018f578063c8607952116100db578063ec28438a11610094578063f0cd1dac1161006e578063f0cd1dac14610b99578063f1d5f51714610bc3578063f84ba65d14610beb578063f872858a14610c1357610309565b8063ec28438a14610b21578063eea5b63f14610b49578063ef422a1814610b7157610309565b8063c860795214610a01578063c867d60b14610a2b578063d158272d14610a67578063da00097d14610a91578063dc44b6a014610abb578063dd62ed3e14610ae557610309565b8063a457c2d711610148578063aa35822c11610122578063aa35822c1461095d578063c49b9a8014610985578063c5d24189146109ad578063c816841b146109d757610309565b8063a457c2d7146108bd578063a5d69d1f146108f9578063a9059cbb1461092157610309565b80638da5cb5b146107d7578063914eb66a1461080157806395d89b4114610817578063a073d37f14610841578063a08e671f1461086b578063a11a16821461089557610309565b80633ecad2711161024e57806361a23c6911610207578063807c2d9c116101e1578063807c2d9c1461071d57806382eefb431461074757806388790a68146107715780638b42507f1461079b57610309565b806361a23c691461068d57806370a08231146106b75780637d1db4a5146106f357610309565b80633ecad27114610571578063404e5129146105ad5780634a74bb02146105d55780634cb80fd5146105ff5780635342acb41461062757806357a5802f1461066357610309565b806323b872dd116102bb5780632b112e49116102955780632b112e49146104b9578063313ce567146104e3578063395093511461050d5780633b97084a1461054957610309565b806323b872dd1461042b5780632563ae831461046757806327c8f8351461048f57610309565b806306fdde031461030d578063095ea7b3146103375780631694505e1461037357806316c021291461039d57806318160ddd146103d95780632198cf6c1461040357610309565b3661030957005b5f80fd5b348015610318575f80fd5b50610321610c3d565b60405161032e91906134f5565b60405180910390f35b348015610342575f80fd5b5061035d600480360381019061035891906135a6565b610ccd565b60405161036a91906135fe565b60405180910390f35b34801561037e575f80fd5b50610387610cea565b6040516103949190613672565b60405180910390f35b3480156103a8575f80fd5b506103c360048036038101906103be919061368b565b610d0f565b6040516103d091906135fe565b60405180910390f35b3480156103e4575f80fd5b506103ed610d2c565b6040516103fa91906136c5565b60405180910390f35b34801561040e575f80fd5b5061042960048036038101906104249190613708565b610d35565b005b348015610436575f80fd5b50610451600480360381019061044c9190613746565b610e21565b60405161045e91906135fe565b60405180910390f35b348015610472575f80fd5b5061048d60048036038101906104889190613796565b610ef6565b005b34801561049a575f80fd5b506104a3610fa7565b6040516104b091906137d0565b60405180910390f35b3480156104c4575f80fd5b506104cd610fcb565b6040516104da91906136c5565b60405180910390f35b3480156104ee575f80fd5b506104f761100e565b6040516105049190613804565b60405180910390f35b348015610518575f80fd5b50610533600480360381019061052e91906135a6565b611023565b60405161054091906135fe565b60405180910390f35b348015610554575f80fd5b5061056f600480360381019061056a919061381d565b6110d1565b005b34801561057c575f80fd5b506105976004803603810190610592919061368b565b6111b2565b6040516105a491906135fe565b60405180910390f35b3480156105b8575f80fd5b506105d360048036038101906105ce9190613708565b6111cf565b005b3480156105e0575f80fd5b506105e96112bb565b6040516105f691906135fe565b60405180910390f35b34801561060a575f80fd5b506106256004803603810190610620919061368b565b6112ce565b005b348015610632575f80fd5b5061064d6004803603810190610648919061368b565b6113a6565b60405161065a91906135fe565b60405180910390f35b34801561066e575f80fd5b506106776113c3565b60405161068491906136c5565b60405180910390f35b348015610698575f80fd5b506106a16113c9565b6040516106ae91906136c5565b60405180910390f35b3480156106c2575f80fd5b506106dd60048036038101906106d8919061368b565b6113cf565b6040516106ea91906136c5565b60405180910390f35b3480156106fe575f80fd5b50610707611415565b60405161071491906136c5565b60405180910390f35b348015610728575f80fd5b5061073161141b565b60405161073e91906136c5565b60405180910390f35b348015610752575f80fd5b5061075b611421565b60405161076891906136c5565b60405180910390f35b34801561077c575f80fd5b50610785611427565b60405161079291906136c5565b60405180910390f35b3480156107a6575f80fd5b506107c160048036038101906107bc919061368b565b61142d565b6040516107ce91906135fe565b60405180910390f35b3480156107e2575f80fd5b506107eb61144a565b6040516107f891906137d0565b60405180910390f35b34801561080c575f80fd5b50610815611471565b005b348015610822575f80fd5b5061082b6115bf565b60405161083891906134f5565b60405180910390f35b34801561084c575f80fd5b5061085561164f565b60405161086291906136c5565b60405180910390f35b348015610876575f80fd5b5061087f611658565b60405161088c91906136c5565b60405180910390f35b3480156108a0575f80fd5b506108bb60048036038101906108b69190613848565b61165e565b005b3480156108c8575f80fd5b506108e360048036038101906108de91906135a6565b611767565b6040516108f091906135fe565b60405180910390f35b348015610904575f80fd5b5061091f600480360381019061091a9190613796565b61182f565b005b34801561092c575f80fd5b50610947600480360381019061094291906135a6565b6118e0565b60405161095491906135fe565b60405180910390f35b348015610968575f80fd5b50610983600480360381019061097e9190613848565b6118fe565b005b348015610990575f80fd5b506109ab60048036038101906109a69190613796565b611a07565b005b3480156109b8575f80fd5b506109c1611aef565b6040516109ce91906136c5565b60405180910390f35b3480156109e2575f80fd5b506109eb611af5565b6040516109f891906137d0565b60405180910390f35b348015610a0c575f80fd5b50610a15611b1a565b604051610a2291906136c5565b60405180910390f35b348015610a36575f80fd5b50610a516004803603810190610a4c919061368b565b611b20565b604051610a5e91906135fe565b60405180910390f35b348015610a72575f80fd5b50610a7b611b3d565b604051610a8891906138a6565b60405180910390f35b348015610a9c575f80fd5b50610aa5611b63565b604051610ab291906135fe565b60405180910390f35b348015610ac6575f80fd5b50610acf611b76565b604051610adc91906136c5565b60405180910390f35b348015610af0575f80fd5b50610b0b6004803603810190610b0691906138bf565b611b7c565b604051610b1891906136c5565b60405180910390f35b348015610b2c575f80fd5b50610b476004803603810190610b42919061381d565b611bfe565b005b348015610b54575f80fd5b50610b6f6004803603810190610b6a9190613848565b611ced565b005b348015610b7c575f80fd5b50610b976004803603810190610b929190613708565b611df6565b005b348015610ba4575f80fd5b50610bad611ee2565b604051610bba91906136c5565b60405180910390f35b348015610bce575f80fd5b50610be96004803603810190610be4919061381d565b611ee8565b005b348015610bf6575f80fd5b50610c116004803603810190610c0c9190613708565b611fd7565b005b348015610c1e575f80fd5b50610c276120c3565b604051610c3491906135fe565b60405180910390f35b606060028054610c4c9061392a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c789061392a565b8015610cc35780601f10610c9a57610100808354040283529160200191610cc3565b820191905f5260205f20905b815481529060010190602001808311610ca657829003601f168201915b5050505050905090565b5f610ce0610cd96120d6565b84846120dd565b6001905092915050565b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b602052805f5260405f205f915054906101000a900460ff1681565b5f601554905090565b610d3d6120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc0906139a4565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f610e2d8484846122a0565b50610eeb84610e3a6120d6565b610ee6856040518060600160405280602881526020016144f26028913960065f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e9d6120d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129409092919063ffffffff16565b6120dd565b600190509392505050565b610efe6120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f81906139a4565b60405180910390fd5b80601a60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f611009610ff87f00000000000000000000000000000000000000000000000000000000000000006113cf565b6015546129a290919063ffffffff16565b905090565b5f60045f9054906101000a900460ff16905090565b5f6110c761102f6120d6565b846110c28560065f61103f6120d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129eb90919063ffffffff16565b6120dd565b6001905092915050565b6110d96120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c906139a4565b60405180910390fd5b600181116111a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119f90613a32565b60405180910390fd5b8060188190555050565b600a602052805f5260405f205f915054906101000a900460ff1681565b6111d76120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a906139a4565b60405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b601a60159054906101000a900460ff1681565b6112d66120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611362576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611359906139a4565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6007602052805f5260405f205f915054906101000a900460ff1681565b60105481565b60115481565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60165481565b60175481565b60135481565b600e5481565b6009602052805f5260405f205f915054906101000a900460ff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114796120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc906139a4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6060600380546115ce9061392a565b80601f01602080910402602001604051908101604052809291908181526020018280546115fa9061392a565b80156116455780601f1061161c57610100808354040283529160200191611645565b820191905f5260205f20905b81548152906001019060200180831161162857829003601f168201915b5050505050905090565b5f601854905090565b60145481565b6116666120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e9906139a4565b60405180910390fd5b81600e8190555080600f81905550611717600f54600e546129eb90919063ffffffff16565b601381905550602d6013541115611763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175a90613a9a565b60405180910390fd5b5050565b5f6118256117736120d6565b846118208560405180606001604052806025815260200161451a6025913960065f61179c6120d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129409092919063ffffffff16565b6120dd565b6001905092915050565b6118376120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ba906139a4565b60405180910390fd5b80601a60166101000a81548160ff02191690831515021790555050565b5f6118f36118ec6120d6565b84846122a0565b506001905092915050565b6119066120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611989906139a4565b60405180910390fd5b81600c8190555080600d819055506119b7600d54600c546129eb90919063ffffffff16565b601281905550601e6012541115611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa90613b02565b60405180910390fd5b5050565b611a0f6120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a92906139a4565b60405180910390fd5b80601a60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611ae491906135fe565b60405180910390a150565b600d5481565b601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6008602052805f5260405f205f915054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a60169054906101000a900460ff1681565b600c5481565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611c066120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c89906139a4565b60405180910390fd5b60c8601554611ca19190613b7a565b811015611ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cda90613c1a565b60405180910390fd5b8060168190555050565b611cf56120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d78906139a4565b60405180910390fd5b8160108190555080601181905550611da66011546010546129eb90919063ffffffff16565b601481905550604b6014541115611df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de990613ca8565b60405180910390fd5b5050565b611dfe6120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e81906139a4565b60405180910390fd5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60125481565b611ef06120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f73906139a4565b60405180910390fd5b60c8601554611f8b9190613b7a565b811015611fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc490613d36565b60405180910390fd5b8060178190555050565b611fdf6120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461206b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612062906139a4565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b601a60179054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361214b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214290613dc4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b090613e52565b60405180910390fd5b8060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161229391906136c5565b60405180910390a3505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361230f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230690613ee0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361237d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237490613f6e565b60405180910390fd5b601a60149054906101000a900460ff161561248157600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156124305750600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b61246f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246690613fd6565b60405180910390fd5b61247a848484612a48565b9050612939565b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561251f575060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561256a57601654821115612569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256090614064565b60405180910390fd5b5b5f612574306113cf565b90505f60185482101590508080156125995750601a60149054906101000a900460ff16155b80156125ec5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156126045750601a60159054906101000a900460ff165b1561262e57601a60169054906101000a900460ff16156126245760185491505b61262d82612c12565b5b6126b5846040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129409092919063ffffffff16565b60055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612792575060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6127a6576127a1878787612d99565b6127a8565b845b9050601a60179054906101000a900460ff16801561280d575060085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561283b5760175461283082612822896113cf565b6129eb90919063ffffffff16565b111561283a575f80fd5b5b61288b8160055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129eb90919063ffffffff16565b60055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161292991906136c5565b60405180910390a3600193505050505b9392505050565b5f838311158290612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297e91906134f5565b60405180910390fd5b505f83856129959190614082565b9050809150509392505050565b5f6129e383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612940565b905092915050565b5f8082846129f991906140b5565b905083811015612a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3590614132565b60405180910390fd5b8091505092915050565b5f612ad0826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129409092919063ffffffff16565b60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612b618260055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129eb90919063ffffffff16565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bff91906136c5565b60405180910390a3600190509392505050565b6001601a60146101000a81548160ff0219169083151502179055505f612c6a6002612c5c601454612c4e60105487612fb390919063ffffffff16565b61302a90919063ffffffff16565b61302a90919063ffffffff16565b90505f612c8082846129a290919063ffffffff16565b9050612c8b81613073565b5f4790505f612cba612ca9600260105461302a90919063ffffffff16565b6014546129a290919063ffffffff16565b90505f612cf76002612ce984612cdb60105488612fb390919063ffffffff16565b61302a90919063ffffffff16565b61302a90919063ffffffff16565b90505f612d2183612d1360115487612fb390919063ffffffff16565b61302a90919063ffffffff16565b90505f811115612d5857612d57600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826132e2565b5b5f82118015612d6657505f86115b15612d7657612d75868361332a565b5b5050505050505f601a60146101000a81548160ff02191690831515021790555050565b5f805f9050600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612e1c57612e156064612e0760125486612fb390919063ffffffff16565b61302a90919063ffffffff16565b9050612e97565b600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612e9657612e936064612e8560135486612fb390919063ffffffff16565b61302a90919063ffffffff16565b90505b5b5f811115612f9657612eef8160055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129eb90919063ffffffff16565b60055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f8d91906136c5565b60405180910390a35b612fa981846129a290919063ffffffff16565b9150509392505050565b5f808303612fc3575f9050613024565b5f8284612fd09190614150565b9050828482612fdf9190613b7a565b1461301f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301690614201565b60405180910390fd5b809150505b92915050565b5f61306b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061340a565b905092915050565b5f600267ffffffffffffffff81111561308f5761308e61421f565b5b6040519080825280602002602001820160405280156130bd5781602001602082028036833780820191505090505b50905030815f815181106130d4576130d361424c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613178573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061319c919061428d565b816001815181106131b0576131af61424c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132163060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846120dd565b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016132789594939291906143a8565b5f604051808303815f87803b15801561328f575f80fd5b505af11580156132a1573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516132d6929190614400565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015613325573d5f803e3d5ffd5b505050565b6133563060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846120dd565b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f806133a061144a565b426040518863ffffffff1660e01b81526004016133c29695949392919061442e565b60606040518083038185885af11580156133de573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061340391906144a1565b5050505050565b5f8083118290613450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344791906134f5565b60405180910390fd5b505f838561345e9190613b7a565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156134a2578082015181840152602081019050613487565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6134c78261346b565b6134d18185613475565b93506134e1818560208601613485565b6134ea816134ad565b840191505092915050565b5f6020820190508181035f83015261350d81846134bd565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61354282613519565b9050919050565b61355281613538565b811461355c575f80fd5b50565b5f8135905061356d81613549565b92915050565b5f819050919050565b61358581613573565b811461358f575f80fd5b50565b5f813590506135a08161357c565b92915050565b5f80604083850312156135bc576135bb613515565b5b5f6135c98582860161355f565b92505060206135da85828601613592565b9150509250929050565b5f8115159050919050565b6135f8816135e4565b82525050565b5f6020820190506136115f8301846135ef565b92915050565b5f819050919050565b5f61363a61363561363084613519565b613617565b613519565b9050919050565b5f61364b82613620565b9050919050565b5f61365c82613641565b9050919050565b61366c81613652565b82525050565b5f6020820190506136855f830184613663565b92915050565b5f602082840312156136a05761369f613515565b5b5f6136ad8482850161355f565b91505092915050565b6136bf81613573565b82525050565b5f6020820190506136d85f8301846136b6565b92915050565b6136e7816135e4565b81146136f1575f80fd5b50565b5f81359050613702816136de565b92915050565b5f806040838503121561371e5761371d613515565b5b5f61372b8582860161355f565b925050602061373c858286016136f4565b9150509250929050565b5f805f6060848603121561375d5761375c613515565b5b5f61376a8682870161355f565b935050602061377b8682870161355f565b925050604061378c86828701613592565b9150509250925092565b5f602082840312156137ab576137aa613515565b5b5f6137b8848285016136f4565b91505092915050565b6137ca81613538565b82525050565b5f6020820190506137e35f8301846137c1565b92915050565b5f60ff82169050919050565b6137fe816137e9565b82525050565b5f6020820190506138175f8301846137f5565b92915050565b5f6020828403121561383257613831613515565b5b5f61383f84828501613592565b91505092915050565b5f806040838503121561385e5761385d613515565b5b5f61386b85828601613592565b925050602061387c85828601613592565b9150509250929050565b5f61389082613519565b9050919050565b6138a081613886565b82525050565b5f6020820190506138b95f830184613897565b92915050565b5f80604083850312156138d5576138d4613515565b5b5f6138e28582860161355f565b92505060206138f38582860161355f565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061394157607f821691505b602082108103613954576139536138fd565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61398e602083613475565b91506139998261395a565b602082019050919050565b5f6020820190508181035f8301526139bb81613982565b9050919050565b7f4e756d546f6b656e734265666f7265537761702073686f756c64206265206e6f5f8201527f7420300000000000000000000000000000000000000000000000000000000000602082015250565b5f613a1c602383613475565b9150613a27826139c2565b604082019050919050565b5f6020820190508181035f830152613a4981613a10565b9050919050565b7f53656c6c20746178206d757374206265206c657373207468616e2034352500005f82015250565b5f613a84601e83613475565b9150613a8f82613a50565b602082019050919050565b5f6020820190508181035f830152613ab181613a78565b9050919050565b7f42757920746178206d757374206265206c657373207468616e203330250000005f82015250565b5f613aec601d83613475565b9150613af782613ab8565b602082019050919050565b5f6020820190508181035f830152613b1981613ae0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b8482613573565b9150613b8f83613573565b925082613b9f57613b9e613b20565b5b828204905092915050565b7f43616e6e6f7420736574204d61785478416d6f756e74206c6f776572207468615f8201527f6e20302e35250000000000000000000000000000000000000000000000000000602082015250565b5f613c04602683613475565b9150613c0f82613baa565b604082019050919050565b5f6020820190508181035f830152613c3181613bf8565b9050919050565b7f446973747269627574696f6e20536861726573206d757374206265206c6573735f8201527f207468616e203735250000000000000000000000000000000000000000000000602082015250565b5f613c92602983613475565b9150613c9d82613c38565b604082019050919050565b5f6020820190508181035f830152613cbf81613c86565b9050919050565b7f43616e6e6f7420736574204d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613d20602483613475565b9150613d2b82613cc6565b604082019050919050565b5f6020820190508181035f830152613d4d81613d14565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613dae602483613475565b9150613db982613d54565b604082019050919050565b5f6020820190508181035f830152613ddb81613da2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613e3c602283613475565b9150613e4782613de2565b604082019050919050565b5f6020820190508181035f830152613e6981613e30565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613eca602583613475565b9150613ed582613e70565b604082019050919050565b5f6020820190508181035f830152613ef781613ebe565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613f58602383613475565b9150613f6382613efe565b604082019050919050565b5f6020820190508181035f830152613f8581613f4c565b9050919050565b7f426c61636b6c69737465640000000000000000000000000000000000000000005f82015250565b5f613fc0600b83613475565b9150613fcb82613f8c565b602082019050919050565b5f6020820190508181035f830152613fed81613fb4565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f61404e602883613475565b915061405982613ff4565b604082019050919050565b5f6020820190508181035f83015261407b81614042565b9050919050565b5f61408c82613573565b915061409783613573565b92508282039050818111156140af576140ae613b4d565b5b92915050565b5f6140bf82613573565b91506140ca83613573565b92508282019050808211156140e2576140e1613b4d565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61411c601b83613475565b9150614127826140e8565b602082019050919050565b5f6020820190508181035f83015261414981614110565b9050919050565b5f61415a82613573565b915061416583613573565b925082820261417381613573565b9150828204841483151761418a57614189613b4d565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6141eb602183613475565b91506141f682614191565b604082019050919050565b5f6020820190508181035f830152614218816141df565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061428781613549565b92915050565b5f602082840312156142a2576142a1613515565b5b5f6142af84828501614279565b91505092915050565b5f819050919050565b5f6142db6142d66142d1846142b8565b613617565b613573565b9050919050565b6142eb816142c1565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61432381613538565b82525050565b5f614334838361431a565b60208301905092915050565b5f602082019050919050565b5f614356826142f1565b61436081856142fb565b935061436b8361430b565b805f5b8381101561439b5781516143828882614329565b975061438d83614340565b92505060018101905061436e565b5085935050505092915050565b5f60a0820190506143bb5f8301886136b6565b6143c860208301876142e2565b81810360408301526143da818661434c565b90506143e960608301856137c1565b6143f660808301846136b6565b9695505050505050565b5f6040820190506144135f8301856136b6565b8181036020830152614425818461434c565b90509392505050565b5f60c0820190506144415f8301896137c1565b61444e60208301886136b6565b61445b60408301876142e2565b61446860608301866142e2565b61447560808301856137c1565b61448260a08301846136b6565b979650505050505050565b5f8151905061449b8161357c565b92915050565b5f805f606084860312156144b8576144b7613515565b5b5f6144c58682870161448d565b93505060206144d68682870161448d565b92505060406144e78682870161448d565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220302f4178ba29349796a3a48add23cc06dda53ac983515bd22a50ad212cabd67364736f6c63430008140033

Deployed Bytecode

0x608060405260043610610302575f3560e01c80638da5cb5b1161018f578063c8607952116100db578063ec28438a11610094578063f0cd1dac1161006e578063f0cd1dac14610b99578063f1d5f51714610bc3578063f84ba65d14610beb578063f872858a14610c1357610309565b8063ec28438a14610b21578063eea5b63f14610b49578063ef422a1814610b7157610309565b8063c860795214610a01578063c867d60b14610a2b578063d158272d14610a67578063da00097d14610a91578063dc44b6a014610abb578063dd62ed3e14610ae557610309565b8063a457c2d711610148578063aa35822c11610122578063aa35822c1461095d578063c49b9a8014610985578063c5d24189146109ad578063c816841b146109d757610309565b8063a457c2d7146108bd578063a5d69d1f146108f9578063a9059cbb1461092157610309565b80638da5cb5b146107d7578063914eb66a1461080157806395d89b4114610817578063a073d37f14610841578063a08e671f1461086b578063a11a16821461089557610309565b80633ecad2711161024e57806361a23c6911610207578063807c2d9c116101e1578063807c2d9c1461071d57806382eefb431461074757806388790a68146107715780638b42507f1461079b57610309565b806361a23c691461068d57806370a08231146106b75780637d1db4a5146106f357610309565b80633ecad27114610571578063404e5129146105ad5780634a74bb02146105d55780634cb80fd5146105ff5780635342acb41461062757806357a5802f1461066357610309565b806323b872dd116102bb5780632b112e49116102955780632b112e49146104b9578063313ce567146104e3578063395093511461050d5780633b97084a1461054957610309565b806323b872dd1461042b5780632563ae831461046757806327c8f8351461048f57610309565b806306fdde031461030d578063095ea7b3146103375780631694505e1461037357806316c021291461039d57806318160ddd146103d95780632198cf6c1461040357610309565b3661030957005b5f80fd5b348015610318575f80fd5b50610321610c3d565b60405161032e91906134f5565b60405180910390f35b348015610342575f80fd5b5061035d600480360381019061035891906135a6565b610ccd565b60405161036a91906135fe565b60405180910390f35b34801561037e575f80fd5b50610387610cea565b6040516103949190613672565b60405180910390f35b3480156103a8575f80fd5b506103c360048036038101906103be919061368b565b610d0f565b6040516103d091906135fe565b60405180910390f35b3480156103e4575f80fd5b506103ed610d2c565b6040516103fa91906136c5565b60405180910390f35b34801561040e575f80fd5b5061042960048036038101906104249190613708565b610d35565b005b348015610436575f80fd5b50610451600480360381019061044c9190613746565b610e21565b60405161045e91906135fe565b60405180910390f35b348015610472575f80fd5b5061048d60048036038101906104889190613796565b610ef6565b005b34801561049a575f80fd5b506104a3610fa7565b6040516104b091906137d0565b60405180910390f35b3480156104c4575f80fd5b506104cd610fcb565b6040516104da91906136c5565b60405180910390f35b3480156104ee575f80fd5b506104f761100e565b6040516105049190613804565b60405180910390f35b348015610518575f80fd5b50610533600480360381019061052e91906135a6565b611023565b60405161054091906135fe565b60405180910390f35b348015610554575f80fd5b5061056f600480360381019061056a919061381d565b6110d1565b005b34801561057c575f80fd5b506105976004803603810190610592919061368b565b6111b2565b6040516105a491906135fe565b60405180910390f35b3480156105b8575f80fd5b506105d360048036038101906105ce9190613708565b6111cf565b005b3480156105e0575f80fd5b506105e96112bb565b6040516105f691906135fe565b60405180910390f35b34801561060a575f80fd5b506106256004803603810190610620919061368b565b6112ce565b005b348015610632575f80fd5b5061064d6004803603810190610648919061368b565b6113a6565b60405161065a91906135fe565b60405180910390f35b34801561066e575f80fd5b506106776113c3565b60405161068491906136c5565b60405180910390f35b348015610698575f80fd5b506106a16113c9565b6040516106ae91906136c5565b60405180910390f35b3480156106c2575f80fd5b506106dd60048036038101906106d8919061368b565b6113cf565b6040516106ea91906136c5565b60405180910390f35b3480156106fe575f80fd5b50610707611415565b60405161071491906136c5565b60405180910390f35b348015610728575f80fd5b5061073161141b565b60405161073e91906136c5565b60405180910390f35b348015610752575f80fd5b5061075b611421565b60405161076891906136c5565b60405180910390f35b34801561077c575f80fd5b50610785611427565b60405161079291906136c5565b60405180910390f35b3480156107a6575f80fd5b506107c160048036038101906107bc919061368b565b61142d565b6040516107ce91906135fe565b60405180910390f35b3480156107e2575f80fd5b506107eb61144a565b6040516107f891906137d0565b60405180910390f35b34801561080c575f80fd5b50610815611471565b005b348015610822575f80fd5b5061082b6115bf565b60405161083891906134f5565b60405180910390f35b34801561084c575f80fd5b5061085561164f565b60405161086291906136c5565b60405180910390f35b348015610876575f80fd5b5061087f611658565b60405161088c91906136c5565b60405180910390f35b3480156108a0575f80fd5b506108bb60048036038101906108b69190613848565b61165e565b005b3480156108c8575f80fd5b506108e360048036038101906108de91906135a6565b611767565b6040516108f091906135fe565b60405180910390f35b348015610904575f80fd5b5061091f600480360381019061091a9190613796565b61182f565b005b34801561092c575f80fd5b50610947600480360381019061094291906135a6565b6118e0565b60405161095491906135fe565b60405180910390f35b348015610968575f80fd5b50610983600480360381019061097e9190613848565b6118fe565b005b348015610990575f80fd5b506109ab60048036038101906109a69190613796565b611a07565b005b3480156109b8575f80fd5b506109c1611aef565b6040516109ce91906136c5565b60405180910390f35b3480156109e2575f80fd5b506109eb611af5565b6040516109f891906137d0565b60405180910390f35b348015610a0c575f80fd5b50610a15611b1a565b604051610a2291906136c5565b60405180910390f35b348015610a36575f80fd5b50610a516004803603810190610a4c919061368b565b611b20565b604051610a5e91906135fe565b60405180910390f35b348015610a72575f80fd5b50610a7b611b3d565b604051610a8891906138a6565b60405180910390f35b348015610a9c575f80fd5b50610aa5611b63565b604051610ab291906135fe565b60405180910390f35b348015610ac6575f80fd5b50610acf611b76565b604051610adc91906136c5565b60405180910390f35b348015610af0575f80fd5b50610b0b6004803603810190610b0691906138bf565b611b7c565b604051610b1891906136c5565b60405180910390f35b348015610b2c575f80fd5b50610b476004803603810190610b42919061381d565b611bfe565b005b348015610b54575f80fd5b50610b6f6004803603810190610b6a9190613848565b611ced565b005b348015610b7c575f80fd5b50610b976004803603810190610b929190613708565b611df6565b005b348015610ba4575f80fd5b50610bad611ee2565b604051610bba91906136c5565b60405180910390f35b348015610bce575f80fd5b50610be96004803603810190610be4919061381d565b611ee8565b005b348015610bf6575f80fd5b50610c116004803603810190610c0c9190613708565b611fd7565b005b348015610c1e575f80fd5b50610c276120c3565b604051610c3491906135fe565b60405180910390f35b606060028054610c4c9061392a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c789061392a565b8015610cc35780601f10610c9a57610100808354040283529160200191610cc3565b820191905f5260205f20905b815481529060010190602001808311610ca657829003601f168201915b5050505050905090565b5f610ce0610cd96120d6565b84846120dd565b6001905092915050565b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b602052805f5260405f205f915054906101000a900460ff1681565b5f601554905090565b610d3d6120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc0906139a4565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f610e2d8484846122a0565b50610eeb84610e3a6120d6565b610ee6856040518060600160405280602881526020016144f26028913960065f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e9d6120d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129409092919063ffffffff16565b6120dd565b600190509392505050565b610efe6120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f81906139a4565b60405180910390fd5b80601a60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b5f611009610ff87f000000000000000000000000000000000000000000000000000000000000dead6113cf565b6015546129a290919063ffffffff16565b905090565b5f60045f9054906101000a900460ff16905090565b5f6110c761102f6120d6565b846110c28560065f61103f6120d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129eb90919063ffffffff16565b6120dd565b6001905092915050565b6110d96120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c906139a4565b60405180910390fd5b600181116111a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119f90613a32565b60405180910390fd5b8060188190555050565b600a602052805f5260405f205f915054906101000a900460ff1681565b6111d76120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a906139a4565b60405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b601a60159054906101000a900460ff1681565b6112d66120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611362576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611359906139a4565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6007602052805f5260405f205f915054906101000a900460ff1681565b60105481565b60115481565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60165481565b60175481565b60135481565b600e5481565b6009602052805f5260405f205f915054906101000a900460ff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114796120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc906139a4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6060600380546115ce9061392a565b80601f01602080910402602001604051908101604052809291908181526020018280546115fa9061392a565b80156116455780601f1061161c57610100808354040283529160200191611645565b820191905f5260205f20905b81548152906001019060200180831161162857829003601f168201915b5050505050905090565b5f601854905090565b60145481565b6116666120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e9906139a4565b60405180910390fd5b81600e8190555080600f81905550611717600f54600e546129eb90919063ffffffff16565b601381905550602d6013541115611763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175a90613a9a565b60405180910390fd5b5050565b5f6118256117736120d6565b846118208560405180606001604052806025815260200161451a6025913960065f61179c6120d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129409092919063ffffffff16565b6120dd565b6001905092915050565b6118376120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ba906139a4565b60405180910390fd5b80601a60166101000a81548160ff02191690831515021790555050565b5f6118f36118ec6120d6565b84846122a0565b506001905092915050565b6119066120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611989906139a4565b60405180910390fd5b81600c8190555080600d819055506119b7600d54600c546129eb90919063ffffffff16565b601281905550601e6012541115611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa90613b02565b60405180910390fd5b5050565b611a0f6120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a92906139a4565b60405180910390fd5b80601a60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611ae491906135fe565b60405180910390a150565b600d5481565b601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6008602052805f5260405f205f915054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a60169054906101000a900460ff1681565b600c5481565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611c066120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c89906139a4565b60405180910390fd5b60c8601554611ca19190613b7a565b811015611ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cda90613c1a565b60405180910390fd5b8060168190555050565b611cf56120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d78906139a4565b60405180910390fd5b8160108190555080601181905550611da66011546010546129eb90919063ffffffff16565b601481905550604b6014541115611df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de990613ca8565b60405180910390fd5b5050565b611dfe6120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e81906139a4565b60405180910390fd5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60125481565b611ef06120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f73906139a4565b60405180910390fd5b60c8601554611f8b9190613b7a565b811015611fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc490613d36565b60405180910390fd5b8060178190555050565b611fdf6120d6565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461206b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612062906139a4565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b601a60179054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361214b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214290613dc4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b090613e52565b60405180910390fd5b8060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161229391906136c5565b60405180910390a3505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361230f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230690613ee0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361237d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237490613f6e565b60405180910390fd5b601a60149054906101000a900460ff161561248157600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156124305750600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b61246f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246690613fd6565b60405180910390fd5b61247a848484612a48565b9050612939565b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561251f575060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561256a57601654821115612569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256090614064565b60405180910390fd5b5b5f612574306113cf565b90505f60185482101590508080156125995750601a60149054906101000a900460ff16155b80156125ec5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156126045750601a60159054906101000a900460ff165b1561262e57601a60169054906101000a900460ff16156126245760185491505b61262d82612c12565b5b6126b5846040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129409092919063ffffffff16565b60055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612792575060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6127a6576127a1878787612d99565b6127a8565b845b9050601a60179054906101000a900460ff16801561280d575060085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561283b5760175461283082612822896113cf565b6129eb90919063ffffffff16565b111561283a575f80fd5b5b61288b8160055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129eb90919063ffffffff16565b60055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161292991906136c5565b60405180910390a3600193505050505b9392505050565b5f838311158290612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297e91906134f5565b60405180910390fd5b505f83856129959190614082565b9050809150509392505050565b5f6129e383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612940565b905092915050565b5f8082846129f991906140b5565b905083811015612a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3590614132565b60405180910390fd5b8091505092915050565b5f612ad0826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129409092919063ffffffff16565b60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612b618260055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129eb90919063ffffffff16565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bff91906136c5565b60405180910390a3600190509392505050565b6001601a60146101000a81548160ff0219169083151502179055505f612c6a6002612c5c601454612c4e60105487612fb390919063ffffffff16565b61302a90919063ffffffff16565b61302a90919063ffffffff16565b90505f612c8082846129a290919063ffffffff16565b9050612c8b81613073565b5f4790505f612cba612ca9600260105461302a90919063ffffffff16565b6014546129a290919063ffffffff16565b90505f612cf76002612ce984612cdb60105488612fb390919063ffffffff16565b61302a90919063ffffffff16565b61302a90919063ffffffff16565b90505f612d2183612d1360115487612fb390919063ffffffff16565b61302a90919063ffffffff16565b90505f811115612d5857612d57600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826132e2565b5b5f82118015612d6657505f86115b15612d7657612d75868361332a565b5b5050505050505f601a60146101000a81548160ff02191690831515021790555050565b5f805f9050600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612e1c57612e156064612e0760125486612fb390919063ffffffff16565b61302a90919063ffffffff16565b9050612e97565b600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612e9657612e936064612e8560135486612fb390919063ffffffff16565b61302a90919063ffffffff16565b90505b5b5f811115612f9657612eef8160055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129eb90919063ffffffff16565b60055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f8d91906136c5565b60405180910390a35b612fa981846129a290919063ffffffff16565b9150509392505050565b5f808303612fc3575f9050613024565b5f8284612fd09190614150565b9050828482612fdf9190613b7a565b1461301f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301690614201565b60405180910390fd5b809150505b92915050565b5f61306b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061340a565b905092915050565b5f600267ffffffffffffffff81111561308f5761308e61421f565b5b6040519080825280602002602001820160405280156130bd5781602001602082028036833780820191505090505b50905030815f815181106130d4576130d361424c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613178573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061319c919061428d565b816001815181106131b0576131af61424c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132163060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846120dd565b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016132789594939291906143a8565b5f604051808303815f87803b15801561328f575f80fd5b505af11580156132a1573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516132d6929190614400565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015613325573d5f803e3d5ffd5b505050565b6133563060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846120dd565b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f806133a061144a565b426040518863ffffffff1660e01b81526004016133c29695949392919061442e565b60606040518083038185885af11580156133de573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061340391906144a1565b5050505050565b5f8083118290613450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344791906134f5565b60405180910390fd5b505f838561345e9190613b7a565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156134a2578082015181840152602081019050613487565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6134c78261346b565b6134d18185613475565b93506134e1818560208601613485565b6134ea816134ad565b840191505092915050565b5f6020820190508181035f83015261350d81846134bd565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61354282613519565b9050919050565b61355281613538565b811461355c575f80fd5b50565b5f8135905061356d81613549565b92915050565b5f819050919050565b61358581613573565b811461358f575f80fd5b50565b5f813590506135a08161357c565b92915050565b5f80604083850312156135bc576135bb613515565b5b5f6135c98582860161355f565b92505060206135da85828601613592565b9150509250929050565b5f8115159050919050565b6135f8816135e4565b82525050565b5f6020820190506136115f8301846135ef565b92915050565b5f819050919050565b5f61363a61363561363084613519565b613617565b613519565b9050919050565b5f61364b82613620565b9050919050565b5f61365c82613641565b9050919050565b61366c81613652565b82525050565b5f6020820190506136855f830184613663565b92915050565b5f602082840312156136a05761369f613515565b5b5f6136ad8482850161355f565b91505092915050565b6136bf81613573565b82525050565b5f6020820190506136d85f8301846136b6565b92915050565b6136e7816135e4565b81146136f1575f80fd5b50565b5f81359050613702816136de565b92915050565b5f806040838503121561371e5761371d613515565b5b5f61372b8582860161355f565b925050602061373c858286016136f4565b9150509250929050565b5f805f6060848603121561375d5761375c613515565b5b5f61376a8682870161355f565b935050602061377b8682870161355f565b925050604061378c86828701613592565b9150509250925092565b5f602082840312156137ab576137aa613515565b5b5f6137b8848285016136f4565b91505092915050565b6137ca81613538565b82525050565b5f6020820190506137e35f8301846137c1565b92915050565b5f60ff82169050919050565b6137fe816137e9565b82525050565b5f6020820190506138175f8301846137f5565b92915050565b5f6020828403121561383257613831613515565b5b5f61383f84828501613592565b91505092915050565b5f806040838503121561385e5761385d613515565b5b5f61386b85828601613592565b925050602061387c85828601613592565b9150509250929050565b5f61389082613519565b9050919050565b6138a081613886565b82525050565b5f6020820190506138b95f830184613897565b92915050565b5f80604083850312156138d5576138d4613515565b5b5f6138e28582860161355f565b92505060206138f38582860161355f565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061394157607f821691505b602082108103613954576139536138fd565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61398e602083613475565b91506139998261395a565b602082019050919050565b5f6020820190508181035f8301526139bb81613982565b9050919050565b7f4e756d546f6b656e734265666f7265537761702073686f756c64206265206e6f5f8201527f7420300000000000000000000000000000000000000000000000000000000000602082015250565b5f613a1c602383613475565b9150613a27826139c2565b604082019050919050565b5f6020820190508181035f830152613a4981613a10565b9050919050565b7f53656c6c20746178206d757374206265206c657373207468616e2034352500005f82015250565b5f613a84601e83613475565b9150613a8f82613a50565b602082019050919050565b5f6020820190508181035f830152613ab181613a78565b9050919050565b7f42757920746178206d757374206265206c657373207468616e203330250000005f82015250565b5f613aec601d83613475565b9150613af782613ab8565b602082019050919050565b5f6020820190508181035f830152613b1981613ae0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b8482613573565b9150613b8f83613573565b925082613b9f57613b9e613b20565b5b828204905092915050565b7f43616e6e6f7420736574204d61785478416d6f756e74206c6f776572207468615f8201527f6e20302e35250000000000000000000000000000000000000000000000000000602082015250565b5f613c04602683613475565b9150613c0f82613baa565b604082019050919050565b5f6020820190508181035f830152613c3181613bf8565b9050919050565b7f446973747269627574696f6e20536861726573206d757374206265206c6573735f8201527f207468616e203735250000000000000000000000000000000000000000000000602082015250565b5f613c92602983613475565b9150613c9d82613c38565b604082019050919050565b5f6020820190508181035f830152613cbf81613c86565b9050919050565b7f43616e6e6f7420736574204d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613d20602483613475565b9150613d2b82613cc6565b604082019050919050565b5f6020820190508181035f830152613d4d81613d14565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613dae602483613475565b9150613db982613d54565b604082019050919050565b5f6020820190508181035f830152613ddb81613da2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613e3c602283613475565b9150613e4782613de2565b604082019050919050565b5f6020820190508181035f830152613e6981613e30565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613eca602583613475565b9150613ed582613e70565b604082019050919050565b5f6020820190508181035f830152613ef781613ebe565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613f58602383613475565b9150613f6382613efe565b604082019050919050565b5f6020820190508181035f830152613f8581613f4c565b9050919050565b7f426c61636b6c69737465640000000000000000000000000000000000000000005f82015250565b5f613fc0600b83613475565b9150613fcb82613f8c565b602082019050919050565b5f6020820190508181035f830152613fed81613fb4565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f61404e602883613475565b915061405982613ff4565b604082019050919050565b5f6020820190508181035f83015261407b81614042565b9050919050565b5f61408c82613573565b915061409783613573565b92508282039050818111156140af576140ae613b4d565b5b92915050565b5f6140bf82613573565b91506140ca83613573565b92508282019050808211156140e2576140e1613b4d565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61411c601b83613475565b9150614127826140e8565b602082019050919050565b5f6020820190508181035f83015261414981614110565b9050919050565b5f61415a82613573565b915061416583613573565b925082820261417381613573565b9150828204841483151761418a57614189613b4d565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6141eb602183613475565b91506141f682614191565b604082019050919050565b5f6020820190508181035f830152614218816141df565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061428781613549565b92915050565b5f602082840312156142a2576142a1613515565b5b5f6142af84828501614279565b91505092915050565b5f819050919050565b5f6142db6142d66142d1846142b8565b613617565b613573565b9050919050565b6142eb816142c1565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61432381613538565b82525050565b5f614334838361431a565b60208301905092915050565b5f602082019050919050565b5f614356826142f1565b61436081856142fb565b935061436b8361430b565b805f5b8381101561439b5781516143828882614329565b975061438d83614340565b92505060018101905061436e565b5085935050505092915050565b5f60a0820190506143bb5f8301886136b6565b6143c860208301876142e2565b81810360408301526143da818661434c565b90506143e960608301856137c1565b6143f660808301846136b6565b9695505050505050565b5f6040820190506144135f8301856136b6565b8181036020830152614425818461434c565b90509392505050565b5f60c0820190506144415f8301896137c1565b61444e60208301886136b6565b61445b60408301876142e2565b61446860608301866142e2565b61447560808301856137c1565b61448260a08301846136b6565b979650505050505050565b5f8151905061449b8161357c565b92915050565b5f805f606084860312156144b8576144b7613515565b5b5f6144c58682870161448d565b93505060206144d68682870161448d565b92505060406144e78682870161448d565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220302f4178ba29349796a3a48add23cc06dda53ac983515bd22a50ad212cabd67364736f6c63430008140033

Deployed Bytecode Sourcemap

13978:14317:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17934:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19228:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15476:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14788:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18211:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21592:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23140:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21471:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14342:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22601:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18120:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18597:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21935:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14734:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19742:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15591:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22138:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14563:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15015:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15056:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18319:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15299:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15353:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15144:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14926:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14679:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5769:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5994:145;;;;;;;;;;;;;:::i;:::-;;18025:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19100:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15189:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20510:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18823:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22464:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22965:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20165:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22285:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14881:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15524:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14969:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14620:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14223:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15638:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14839:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18446:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21257:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20867:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20022:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15100:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21735:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19883:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15690:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17934:83;17971:13;18004:5;17997:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17934:83;:::o;19228:161::-;19303:4;19320:39;19329:12;:10;:12::i;:::-;19343:7;19352:6;19320:8;:39::i;:::-;19377:4;19370:11;;19228:161;;;;:::o;15476:41::-;;;;;;;;;;;;;:::o;14788:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;18211:100::-;18264:7;18291:12;;18284:19;;18211:100;:::o;21592:135::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21713:6:::1;21683:19;:27;21703:6;21683:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;21592:135:::0;;:::o;23140:313::-;23238:4;23255:36;23265:6;23273:9;23284:6;23255:9;:36::i;:::-;;23302:121;23311:6;23319:12;:10;:12::i;:::-;23333:89;23371:6;23333:89;;;;;;;;;;;;;;;;;:11;:19;23345:6;23333:19;;;;;;;;;;;;;;;:33;23353:12;:10;:12::i;:::-;23333:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23302:8;:121::i;:::-;23441:4;23434:11;;23140:313;;;;;:::o;21471:113::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21568:8:::1;21549:16;;:27;;;;;;;;;;;;;;;;;;21471:113:::0;:::o;14342:81::-;;;:::o;22601:128::-;22654:7;22681:40;22698:22;22708:11;22698:9;:22::i;:::-;22681:12;;:16;;:40;;;;:::i;:::-;22674:47;;22601:128;:::o;18120:83::-;18161:5;18186:9;;;;;;;;;;;18179:16;;18120:83;:::o;18597:218::-;18685:4;18702:83;18711:12;:10;:12::i;:::-;18725:7;18734:50;18773:10;18734:11;:25;18746:12;:10;:12::i;:::-;18734:25;;;;;;;;;;;;;;;:34;18760:7;18734:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18702:8;:83::i;:::-;18803:4;18796:11;;18597:218;;;;:::o;21935:195::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22036:1:::1;22025:8;:12;22017:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22114:8;22088:23;:34;;;;21935:195:::0;:::o;14734:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;19742:133::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19853:14:::1;19830:10;:20;19841:8;19830:20;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;19742:133:::0;;:::o;15591:40::-;;;;;;;;;;;;;:::o;22138:139::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22258:10:::1;22225:22;;:44;;;;;;;;;;;;;;;;;;22138:139:::0;:::o;14563:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;15015:34::-;;;;:::o;15056:35::-;;;;:::o;18319:119::-;18385:7;18412:9;:18;18422:7;18412:18;;;;;;;;;;;;;;;;18405:25;;18319:119;;;:::o;15299:47::-;;;;:::o;15353:45::-;;;;:::o;15144:38::-;;;;:::o;14926:36::-;;;;:::o;14679:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;5769:79::-;5807:7;5834:6;;;;;;;;;;;5827:13;;5769:79;:::o;5994:145::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6098:1:::1;6061:40;;6082:6;::::0;::::1;;;;;;;;6061:40;;;;;;;;;;;;6129:1;6112:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5994:145::o:0;18025:87::-;18064:13;18097:7;18090:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18025:87;:::o;19100:120::-;19162:7;19189:23;;19182:30;;19100:120;:::o;15189:44::-;;;;:::o;20510:345::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20634:15:::1;20614:17;:35;;;;20680:15;20660:17;:35;;;;20729:40;20751:17;;20729;;:21;;:40;;;;:::i;:::-;20708:18;:61;;;;20810:2;20788:18;;:24;;20780:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20510:345:::0;;:::o;18823:269::-;18916:4;18933:129;18942:12;:10;:12::i;:::-;18956:7;18965:96;19004:15;18965:96;;;;;;;;;;;;;;;;;:11;:25;18977:12;:10;:12::i;:::-;18965:25;;;;;;;;;;;;;;;:34;18991:7;18965:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18933:8;:129::i;:::-;19080:4;19073:11;;18823:269;;;;:::o;22464:125::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22573:8:::1;22545:25;;:36;;;;;;;;;;;;;;;;;;22464:125:::0;:::o;22965:167::-;23043:4;23060:42;23070:12;:10;:12::i;:::-;23084:9;23095:6;23060:9;:42::i;:::-;;23120:4;23113:11;;22965:167;;;;:::o;20165:337::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20287:15:::1;20268:16;:34;;;;20332:15;20313:16;:34;;;;20380:38;20401:16;;20380;;:20;;:38;;;;:::i;:::-;20360:17;:58;;;;20458:2;20437:17;;:23;;20429:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20165:337:::0;;:::o;22285:171::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22386:8:::1;22362:21;;:32;;;;;;;;;;;;;;;;;;22410:38;22439:8;22410:38;;;;;;:::i;:::-;;;;;;;;22285:171:::0;:::o;14881:36::-;;;;:::o;15524:26::-;;;;;;;;;;;;;:::o;14969:37::-;;;;:::o;14620:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;14223:99::-;;;;;;;;;;;;;:::o;15638:45::-;;;;;;;;;;;;;:::o;14839:35::-;;;;:::o;18446:143::-;18527:7;18554:11;:18;18566:5;18554:18;;;;;;;;;;;;;;;:27;18573:7;18554:27;;;;;;;;;;;;;;;;18547:34;;18446:143;;;;:::o;21257:206::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21372:3:::1;21357:12;;:18;;;;:::i;:::-;21342:11;:33;;21334:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;21444:11;21429:12;:26;;;;21257:206:::0;:::o;20867:378::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21004:17:::1;20986:15;:35;;;;21050:17;21032:15;:35;;;;21107:36;21127:15;;21107;;:19;;:36;;;;:::i;:::-;21080:24;:63;;;;21189:2;21162:24;;:29;;21154:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;20867:378:::0;;:::o;20022:135::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20141:8:::1;20112:17;:26;20130:7;20112:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;20022:135:::0;;:::o;15100:37::-;;;;:::o;21735:192::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21842:3:::1;21827:12;;:18;;;;:::i;:::-;21815:8;:30;;21807:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;21911:8;21897:10;:22;;;;21735:192:::0;:::o;19883:127::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19996:6:::1;19970:15;:23;19986:6;19970:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19883:127:::0;;:::o;15690:35::-;;;;;;;;;;;;;:::o;103:115::-;156:15;199:10;184:26;;103:115;:::o;19397:337::-;19507:1;19490:19;;:5;:19;;;19482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19588:1;19569:21;;:7;:21;;;19561:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19672:6;19642:11;:18;19654:5;19642:18;;;;;;;;;;;;;;;:27;19661:7;19642:27;;;;;;;;;;;;;;;:36;;;;19710:7;19694:32;;19703:5;19694:32;;;19719:6;19694:32;;;;;;:::i;:::-;;;;;;;;19397:337;;;:::o;23461:1791::-;23548:4;23593:1;23575:20;;:6;:20;;;23567:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23677:1;23656:23;;:9;:23;;;23648:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23735:16;;;;;;;;;;;23732:1513;;;23787:10;:21;23798:9;23787:21;;;;;;;;;;;;;;;;;;;;;;;;;23786:22;:45;;;;;23813:10;:18;23824:6;23813:18;;;;;;;;;;;;;;;;;;;;;;;;;23812:19;23786:45;23778:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23869:41;23884:6;23892:9;23903:6;23869:14;:41::i;:::-;23862:48;;;;23732:1513;23966:15;:23;23982:6;23966:23;;;;;;;;;;;;;;;;;;;;;;;;;23965:24;:55;;;;;23994:15;:26;24010:9;23994:26;;;;;;;;;;;;;;;;;;;;;;;;;23993:27;23965:55;23962:170;;;24059:12;;24049:6;:22;;24041:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;23962:170;24160:28;24191:24;24209:4;24191:9;:24::i;:::-;24160:55;;24230:28;24285:23;;24261:20;:47;;24230:78;;24341:23;:44;;;;;24369:16;;;;;;;;;;;24368:17;24341:44;:69;;;;;24390:12;:20;24403:6;24390:20;;;;;;;;;;;;;;;;;;;;;;;;;24389:21;24341:69;:94;;;;;24414:21;;;;;;;;;;;24341:94;24337:305;;;24473:25;;;;;;;;;;;24470:97;;;24544:23;;24521:46;;24470:97;24586:36;24601:20;24586:14;:36::i;:::-;24337:305;24678:53;24700:6;24678:53;;;;;;;;;;;;;;;;;:9;:17;24688:6;24678:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24658:9;:17;24668:6;24658:17;;;;;;;;;;;;;;;:73;;;;24748:19;24771:17;:25;24789:6;24771:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;24800:17;:28;24818:9;24800:28;;;;;;;;;;;;;;;;;;;;;;;;;24771:57;24770:148;;24884:34;24892:6;24900:9;24911:6;24884:7;:34::i;:::-;24770:148;;;24875:6;24770:148;24748:170;;24938:16;;;;;;;;;;;:51;;;;;24959:19;:30;24979:9;24959:30;;;;;;;;;;;;;;;;;;;;;;;;;24958:31;24938:51;24935:133;;;25057:10;;25016:37;25041:11;25016:20;25026:9;25016;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;25008:60;;;;;;24935:133;25108:37;25133:11;25108:9;:20;25118:9;25108:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;25085:9;:20;25095:9;25085:20;;;;;;;;;;;;;;;:60;;;;25184:9;25167:40;;25176:6;25167:40;;;25195:11;25167:40;;;;;;:::i;:::-;;;;;;;;25229:4;25222:11;;;;;23461:1791;;;;;;:::o;1504:192::-;1590:7;1623:1;1618;:6;;1626:12;1610:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1650:9;1666:1;1662;:5;;;;:::i;:::-;1650:17;;1687:1;1680:8;;;1504:192;;;;;:::o;1360:136::-;1418:7;1445:43;1449:1;1452;1445:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1438:50;;1360:136;;;;:::o;1171:181::-;1229:7;1249:9;1265:1;1261;:5;;;;:::i;:::-;1249:17;;1290:1;1285;:6;;1277:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1343:1;1336:8;;;1171:181;;;;:::o;25260:330::-;25353:4;25390:53;25412:6;25390:53;;;;;;;;;;;;;;;;;:9;:17;25400:6;25390:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25370:9;:17;25380:6;25370:17;;;;;;;;;;;;;;;:73;;;;25477:32;25502:6;25477:9;:20;25487:9;25477:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;25454:9;:20;25464:9;25454:20;;;;;;;;;;;;;;;:55;;;;25542:9;25525:35;;25534:6;25525:35;;;25553:6;25525:35;;;;;;:::i;:::-;;;;;;;;25578:4;25571:11;;25260:330;;;;;:::o;25598:859::-;16167:4;16148:16;;:23;;;;;;;;;;;;;;;;;;25680:19:::1;25702:65;25765:1;25702:58;25735:24;;25702:28;25714:15;;25702:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;25680:87;;25778:21;25802:24;25814:11;25802:7;:11;;:24;;;;:::i;:::-;25778:48;;25839:31;25856:13;25839:16;:31::i;:::-;25881:22;25906:21;25881:46;;25940:19;25962:52;25991:22;26011:1;25991:15;;:19;;:22;;;;:::i;:::-;25962:24;;:28;;:52;;;;:::i;:::-;25940:74;;26035:26;26064:59;26121:1;26064:52;26104:11;26064:35;26083:15;;26064:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;26035:88;;26134:26;26163:52;26203:11;26163:35;26182:15;;26163:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;26134:81;;26252:1;26231:18;:22;26228:104;;;26268:64;26289:22;;;;;;;;;;;26313:18;26268:20;:64::i;:::-;26228:104;26369:1;26348:18;:22;:41;;;;;26388:1;26374:11;:15;26348:41;26345:104;;;26404:45;26417:11;26430:18;26404:12;:45::i;:::-;26345:104;25659:798;;;;;;16213:5:::0;16194:16;;:24;;;;;;;;;;;;;;;;;;25598:859;:::o;27664:622::-;27750:7;27780:17;27800:1;27780:21;;27825:12;:20;27838:6;27825:20;;;;;;;;;;;;;;;;;;;;;;;;;27822:223;;;27874:38;27908:3;27874:29;27885:17;;27874:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;27862:50;;27822:223;;;27942:12;:23;27955:9;27942:23;;;;;;;;;;;;;;;;;;;;;;;;;27939:106;;;27994:39;28029:3;27994:30;28005:18;;27994:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;27982:51;;27939:106;27822:223;28080:1;28068:9;:13;28065:173;;;28125:39;28154:9;28125;:24;28143:4;28125:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;28098:9;:24;28116:4;28098:24;;;;;;;;;;;;;;;:66;;;;28209:4;28184:42;;28193:6;28184:42;;;28216:9;28184:42;;;;;;:::i;:::-;;;;;;;;28065:173;28257:21;28268:9;28257:6;:10;;:21;;;;:::i;:::-;28250:28;;;27664:622;;;;;:::o;1704:250::-;1762:7;1791:1;1786;:6;1782:47;;1816:1;1809:8;;;;1782:47;1841:9;1857:1;1853;:5;;;;:::i;:::-;1841:17;;1886:1;1881;1877;:5;;;;:::i;:::-;:10;1869:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1945:1;1938:8;;;1704:250;;;;;:::o;1962:132::-;2020:7;2047:39;2051:1;2054;2047:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2040:46;;1962:132;;;;:::o;26469:666::-;26595:21;26633:1;26619:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26595:40;;26664:4;26646;26651:1;26646:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26690:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26680:4;26685:1;26680:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26725:62;26742:4;26757:15;;;;;;;;;;;26775:11;26725:8;:62::i;:::-;26826:15;;;;;;;;;;;:66;;;26907:11;26933:1;26977:4;27004;27040:15;26826:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27092:35;27109:11;27122:4;27092:35;;;;;;;:::i;:::-;;;;;;;;26524:611;26469:666;:::o;22737:126::-;22829:9;:18;;:26;22848:6;22829:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22737:126;;:::o;27143:513::-;27291:62;27308:4;27323:15;;;;;;;;;;;27341:11;27291:8;:62::i;:::-;27396:15;;;;;;;;;;;:31;;;27435:9;27468:4;27488:11;27514:1;27557;27600:7;:5;:7::i;:::-;27622:15;27396:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27143:513;;:::o;2102:278::-;2188:7;2220:1;2216;:5;2223:12;2208:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2247:9;2263:1;2259;:5;;;;:::i;:::-;2247:17;;2371:1;2364:8;;;2102:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:329::-;4483:6;4532:2;4520:9;4511:7;4507:23;4503:32;4500:119;;;4538:79;;:::i;:::-;4500:119;4658:1;4683:53;4728:7;4719:6;4708:9;4704:22;4683:53;:::i;:::-;4673:63;;4629:117;4424:329;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:116::-;5181:21;5196:5;5181:21;:::i;:::-;5174:5;5171:32;5161:60;;5217:1;5214;5207:12;5161:60;5111:116;:::o;5233:133::-;5276:5;5314:6;5301:20;5292:29;;5330:30;5354:5;5330:30;:::i;:::-;5233:133;;;;:::o;5372:468::-;5437:6;5445;5494:2;5482:9;5473:7;5469:23;5465:32;5462:119;;;5500:79;;:::i;:::-;5462:119;5620:1;5645:53;5690:7;5681:6;5670:9;5666:22;5645:53;:::i;:::-;5635:63;;5591:117;5747:2;5773:50;5815:7;5806:6;5795:9;5791:22;5773:50;:::i;:::-;5763:60;;5718:115;5372:468;;;;;:::o;5846:619::-;5923:6;5931;5939;5988:2;5976:9;5967:7;5963:23;5959:32;5956:119;;;5994:79;;:::i;:::-;5956:119;6114:1;6139:53;6184:7;6175:6;6164:9;6160:22;6139:53;:::i;:::-;6129:63;;6085:117;6241:2;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6212:118;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;5846:619;;;;;:::o;6471:323::-;6527:6;6576:2;6564:9;6555:7;6551:23;6547:32;6544:119;;;6582:79;;:::i;:::-;6544:119;6702:1;6727:50;6769:7;6760:6;6749:9;6745:22;6727:50;:::i;:::-;6717:60;;6673:114;6471:323;;;;:::o;6800:118::-;6887:24;6905:5;6887:24;:::i;:::-;6882:3;6875:37;6800:118;;:::o;6924:222::-;7017:4;7055:2;7044:9;7040:18;7032:26;;7068:71;7136:1;7125:9;7121:17;7112:6;7068:71;:::i;:::-;6924:222;;;;:::o;7152:86::-;7187:7;7227:4;7220:5;7216:16;7205:27;;7152:86;;;:::o;7244:112::-;7327:22;7343:5;7327:22;:::i;:::-;7322:3;7315:35;7244:112;;:::o;7362:214::-;7451:4;7489:2;7478:9;7474:18;7466:26;;7502:67;7566:1;7555:9;7551:17;7542:6;7502:67;:::i;:::-;7362:214;;;;:::o;7582:329::-;7641:6;7690:2;7678:9;7669:7;7665:23;7661:32;7658:119;;;7696:79;;:::i;:::-;7658:119;7816:1;7841:53;7886:7;7877:6;7866:9;7862:22;7841:53;:::i;:::-;7831:63;;7787:117;7582:329;;;;:::o;7917:474::-;7985:6;7993;8042:2;8030:9;8021:7;8017:23;8013:32;8010:119;;;8048:79;;:::i;:::-;8010:119;8168:1;8193:53;8238:7;8229:6;8218:9;8214:22;8193:53;:::i;:::-;8183:63;;8139:117;8295:2;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8266:118;7917:474;;;;;:::o;8397:104::-;8442:7;8471:24;8489:5;8471:24;:::i;:::-;8460:35;;8397:104;;;:::o;8507:142::-;8610:32;8636:5;8610:32;:::i;:::-;8605:3;8598:45;8507:142;;:::o;8655:254::-;8764:4;8802:2;8791:9;8787:18;8779:26;;8815:87;8899:1;8888:9;8884:17;8875:6;8815:87;:::i;:::-;8655:254;;;;:::o;8915:474::-;8983:6;8991;9040:2;9028:9;9019:7;9015:23;9011:32;9008:119;;;9046:79;;:::i;:::-;9008:119;9166:1;9191:53;9236:7;9227:6;9216:9;9212:22;9191:53;:::i;:::-;9181:63;;9137:117;9293:2;9319:53;9364:7;9355:6;9344:9;9340:22;9319:53;:::i;:::-;9309:63;;9264:118;8915:474;;;;;:::o;9395:180::-;9443:77;9440:1;9433:88;9540:4;9537:1;9530:15;9564:4;9561:1;9554:15;9581:320;9625:6;9662:1;9656:4;9652:12;9642:22;;9709:1;9703:4;9699:12;9730:18;9720:81;;9786:4;9778:6;9774:17;9764:27;;9720:81;9848:2;9840:6;9837:14;9817:18;9814:38;9811:84;;9867:18;;:::i;:::-;9811:84;9632:269;9581:320;;;:::o;9907:182::-;10047:34;10043:1;10035:6;10031:14;10024:58;9907:182;:::o;10095:366::-;10237:3;10258:67;10322:2;10317:3;10258:67;:::i;:::-;10251:74;;10334:93;10423:3;10334:93;:::i;:::-;10452:2;10447:3;10443:12;10436:19;;10095:366;;;:::o;10467:419::-;10633:4;10671:2;10660:9;10656:18;10648:26;;10720:9;10714:4;10710:20;10706:1;10695:9;10691:17;10684:47;10748:131;10874:4;10748:131;:::i;:::-;10740:139;;10467:419;;;:::o;10892:222::-;11032:34;11028:1;11020:6;11016:14;11009:58;11101:5;11096:2;11088:6;11084:15;11077:30;10892:222;:::o;11120:366::-;11262:3;11283:67;11347:2;11342:3;11283:67;:::i;:::-;11276:74;;11359:93;11448:3;11359:93;:::i;:::-;11477:2;11472:3;11468:12;11461:19;;11120:366;;;:::o;11492:419::-;11658:4;11696:2;11685:9;11681:18;11673:26;;11745:9;11739:4;11735:20;11731:1;11720:9;11716:17;11709:47;11773:131;11899:4;11773:131;:::i;:::-;11765:139;;11492:419;;;:::o;11917:180::-;12057:32;12053:1;12045:6;12041:14;12034:56;11917:180;:::o;12103:366::-;12245:3;12266:67;12330:2;12325:3;12266:67;:::i;:::-;12259:74;;12342:93;12431:3;12342:93;:::i;:::-;12460:2;12455:3;12451:12;12444:19;;12103:366;;;:::o;12475:419::-;12641:4;12679:2;12668:9;12664:18;12656:26;;12728:9;12722:4;12718:20;12714:1;12703:9;12699:17;12692:47;12756:131;12882:4;12756:131;:::i;:::-;12748:139;;12475:419;;;:::o;12900:179::-;13040:31;13036:1;13028:6;13024:14;13017:55;12900:179;:::o;13085:366::-;13227:3;13248:67;13312:2;13307:3;13248:67;:::i;:::-;13241:74;;13324:93;13413:3;13324:93;:::i;:::-;13442:2;13437:3;13433:12;13426:19;;13085:366;;;:::o;13457:419::-;13623:4;13661:2;13650:9;13646:18;13638:26;;13710:9;13704:4;13700:20;13696:1;13685:9;13681:17;13674:47;13738:131;13864:4;13738:131;:::i;:::-;13730:139;;13457:419;;;:::o;13882:180::-;13930:77;13927:1;13920:88;14027:4;14024:1;14017:15;14051:4;14048:1;14041:15;14068:180;14116:77;14113:1;14106:88;14213:4;14210:1;14203:15;14237:4;14234:1;14227:15;14254:185;14294:1;14311:20;14329:1;14311:20;:::i;:::-;14306:25;;14345:20;14363:1;14345:20;:::i;:::-;14340:25;;14384:1;14374:35;;14389:18;;:::i;:::-;14374:35;14431:1;14428;14424:9;14419:14;;14254:185;;;;:::o;14445:225::-;14585:34;14581:1;14573:6;14569:14;14562:58;14654:8;14649:2;14641:6;14637:15;14630:33;14445:225;:::o;14676:366::-;14818:3;14839:67;14903:2;14898:3;14839:67;:::i;:::-;14832:74;;14915:93;15004:3;14915:93;:::i;:::-;15033:2;15028:3;15024:12;15017:19;;14676:366;;;:::o;15048:419::-;15214:4;15252:2;15241:9;15237:18;15229:26;;15301:9;15295:4;15291:20;15287:1;15276:9;15272:17;15265:47;15329:131;15455:4;15329:131;:::i;:::-;15321:139;;15048:419;;;:::o;15473:228::-;15613:34;15609:1;15601:6;15597:14;15590:58;15682:11;15677:2;15669:6;15665:15;15658:36;15473:228;:::o;15707:366::-;15849:3;15870:67;15934:2;15929:3;15870:67;:::i;:::-;15863:74;;15946:93;16035:3;15946:93;:::i;:::-;16064:2;16059:3;16055:12;16048:19;;15707:366;;;:::o;16079:419::-;16245:4;16283:2;16272:9;16268:18;16260:26;;16332:9;16326:4;16322:20;16318:1;16307:9;16303:17;16296:47;16360:131;16486:4;16360:131;:::i;:::-;16352:139;;16079:419;;;:::o;16504:223::-;16644:34;16640:1;16632:6;16628:14;16621:58;16713:6;16708:2;16700:6;16696:15;16689:31;16504:223;:::o;16733:366::-;16875:3;16896:67;16960:2;16955:3;16896:67;:::i;:::-;16889:74;;16972:93;17061:3;16972:93;:::i;:::-;17090:2;17085:3;17081:12;17074:19;;16733:366;;;:::o;17105:419::-;17271:4;17309:2;17298:9;17294:18;17286:26;;17358:9;17352:4;17348:20;17344:1;17333:9;17329:17;17322:47;17386:131;17512:4;17386:131;:::i;:::-;17378:139;;17105:419;;;:::o;17530:223::-;17670:34;17666:1;17658:6;17654:14;17647:58;17739:6;17734:2;17726:6;17722:15;17715:31;17530:223;:::o;17759:366::-;17901:3;17922:67;17986:2;17981:3;17922:67;:::i;:::-;17915:74;;17998:93;18087:3;17998:93;:::i;:::-;18116:2;18111:3;18107:12;18100:19;;17759:366;;;:::o;18131:419::-;18297:4;18335:2;18324:9;18320:18;18312:26;;18384:9;18378:4;18374:20;18370:1;18359:9;18355:17;18348:47;18412:131;18538:4;18412:131;:::i;:::-;18404:139;;18131:419;;;:::o;18556:221::-;18696:34;18692:1;18684:6;18680:14;18673:58;18765:4;18760:2;18752:6;18748:15;18741:29;18556:221;:::o;18783:366::-;18925:3;18946:67;19010:2;19005:3;18946:67;:::i;:::-;18939:74;;19022:93;19111:3;19022:93;:::i;:::-;19140:2;19135:3;19131:12;19124:19;;18783:366;;;:::o;19155:419::-;19321:4;19359:2;19348:9;19344:18;19336:26;;19408:9;19402:4;19398:20;19394:1;19383:9;19379:17;19372:47;19436:131;19562:4;19436:131;:::i;:::-;19428:139;;19155:419;;;:::o;19580:224::-;19720:34;19716:1;19708:6;19704:14;19697:58;19789:7;19784:2;19776:6;19772:15;19765:32;19580:224;:::o;19810:366::-;19952:3;19973:67;20037:2;20032:3;19973:67;:::i;:::-;19966:74;;20049:93;20138:3;20049:93;:::i;:::-;20167:2;20162:3;20158:12;20151:19;;19810:366;;;:::o;20182:419::-;20348:4;20386:2;20375:9;20371:18;20363:26;;20435:9;20429:4;20425:20;20421:1;20410:9;20406:17;20399:47;20463:131;20589:4;20463:131;:::i;:::-;20455:139;;20182:419;;;:::o;20607:222::-;20747:34;20743:1;20735:6;20731:14;20724:58;20816:5;20811:2;20803:6;20799:15;20792:30;20607:222;:::o;20835:366::-;20977:3;20998:67;21062:2;21057:3;20998:67;:::i;:::-;20991:74;;21074:93;21163:3;21074:93;:::i;:::-;21192:2;21187:3;21183:12;21176:19;;20835:366;;;:::o;21207:419::-;21373:4;21411:2;21400:9;21396:18;21388:26;;21460:9;21454:4;21450:20;21446:1;21435:9;21431:17;21424:47;21488:131;21614:4;21488:131;:::i;:::-;21480:139;;21207:419;;;:::o;21632:161::-;21772:13;21768:1;21760:6;21756:14;21749:37;21632:161;:::o;21799:366::-;21941:3;21962:67;22026:2;22021:3;21962:67;:::i;:::-;21955:74;;22038:93;22127:3;22038:93;:::i;:::-;22156:2;22151:3;22147:12;22140:19;;21799:366;;;:::o;22171:419::-;22337:4;22375:2;22364:9;22360:18;22352:26;;22424:9;22418:4;22414:20;22410:1;22399:9;22395:17;22388:47;22452:131;22578:4;22452:131;:::i;:::-;22444:139;;22171:419;;;:::o;22596:227::-;22736:34;22732:1;22724:6;22720:14;22713:58;22805:10;22800:2;22792:6;22788:15;22781:35;22596:227;:::o;22829:366::-;22971:3;22992:67;23056:2;23051:3;22992:67;:::i;:::-;22985:74;;23068:93;23157:3;23068:93;:::i;:::-;23186:2;23181:3;23177:12;23170:19;;22829:366;;;:::o;23201:419::-;23367:4;23405:2;23394:9;23390:18;23382:26;;23454:9;23448:4;23444:20;23440:1;23429:9;23425:17;23418:47;23482:131;23608:4;23482:131;:::i;:::-;23474:139;;23201:419;;;:::o;23626:194::-;23666:4;23686:20;23704:1;23686:20;:::i;:::-;23681:25;;23720:20;23738:1;23720:20;:::i;:::-;23715:25;;23764:1;23761;23757:9;23749:17;;23788:1;23782:4;23779:11;23776:37;;;23793:18;;:::i;:::-;23776:37;23626:194;;;;:::o;23826:191::-;23866:3;23885:20;23903:1;23885:20;:::i;:::-;23880:25;;23919:20;23937:1;23919:20;:::i;:::-;23914:25;;23962:1;23959;23955:9;23948:16;;23983:3;23980:1;23977:10;23974:36;;;23990:18;;:::i;:::-;23974:36;23826:191;;;;:::o;24023:177::-;24163:29;24159:1;24151:6;24147:14;24140:53;24023:177;:::o;24206:366::-;24348:3;24369:67;24433:2;24428:3;24369:67;:::i;:::-;24362:74;;24445:93;24534:3;24445:93;:::i;:::-;24563:2;24558:3;24554:12;24547:19;;24206:366;;;:::o;24578:419::-;24744:4;24782:2;24771:9;24767:18;24759:26;;24831:9;24825:4;24821:20;24817:1;24806:9;24802:17;24795:47;24859:131;24985:4;24859:131;:::i;:::-;24851:139;;24578:419;;;:::o;25003:410::-;25043:7;25066:20;25084:1;25066:20;:::i;:::-;25061:25;;25100:20;25118:1;25100:20;:::i;:::-;25095:25;;25155:1;25152;25148:9;25177:30;25195:11;25177:30;:::i;:::-;25166:41;;25356:1;25347:7;25343:15;25340:1;25337:22;25317:1;25310:9;25290:83;25267:139;;25386:18;;:::i;:::-;25267:139;25051:362;25003:410;;;;:::o;25419:220::-;25559:34;25555:1;25547:6;25543:14;25536:58;25628:3;25623:2;25615:6;25611:15;25604:28;25419:220;:::o;25645:366::-;25787:3;25808:67;25872:2;25867:3;25808:67;:::i;:::-;25801:74;;25884:93;25973:3;25884:93;:::i;:::-;26002:2;25997:3;25993:12;25986:19;;25645:366;;;:::o;26017:419::-;26183:4;26221:2;26210:9;26206:18;26198:26;;26270:9;26264:4;26260:20;26256:1;26245:9;26241:17;26234:47;26298:131;26424:4;26298:131;:::i;:::-;26290:139;;26017:419;;;:::o;26442:180::-;26490:77;26487:1;26480:88;26587:4;26584:1;26577:15;26611:4;26608:1;26601:15;26628:180;26676:77;26673:1;26666:88;26773:4;26770:1;26763:15;26797:4;26794:1;26787:15;26814:143;26871:5;26902:6;26896:13;26887:22;;26918:33;26945:5;26918:33;:::i;:::-;26814:143;;;;:::o;26963:351::-;27033:6;27082:2;27070:9;27061:7;27057:23;27053:32;27050:119;;;27088:79;;:::i;:::-;27050:119;27208:1;27233:64;27289:7;27280:6;27269:9;27265:22;27233:64;:::i;:::-;27223:74;;27179:128;26963:351;;;;:::o;27320:85::-;27365:7;27394:5;27383:16;;27320:85;;;:::o;27411:158::-;27469:9;27502:61;27520:42;27529:32;27555:5;27529:32;:::i;:::-;27520:42;:::i;:::-;27502:61;:::i;:::-;27489:74;;27411:158;;;:::o;27575:147::-;27670:45;27709:5;27670:45;:::i;:::-;27665:3;27658:58;27575:147;;:::o;27728:114::-;27795:6;27829:5;27823:12;27813:22;;27728:114;;;:::o;27848:184::-;27947:11;27981:6;27976:3;27969:19;28021:4;28016:3;28012:14;27997:29;;27848:184;;;;:::o;28038:132::-;28105:4;28128:3;28120:11;;28158:4;28153:3;28149:14;28141:22;;28038:132;;;:::o;28176:108::-;28253:24;28271:5;28253:24;:::i;:::-;28248:3;28241:37;28176:108;;:::o;28290:179::-;28359:10;28380:46;28422:3;28414:6;28380:46;:::i;:::-;28458:4;28453:3;28449:14;28435:28;;28290:179;;;;:::o;28475:113::-;28545:4;28577;28572:3;28568:14;28560:22;;28475:113;;;:::o;28624:732::-;28743:3;28772:54;28820:5;28772:54;:::i;:::-;28842:86;28921:6;28916:3;28842:86;:::i;:::-;28835:93;;28952:56;29002:5;28952:56;:::i;:::-;29031:7;29062:1;29047:284;29072:6;29069:1;29066:13;29047:284;;;29148:6;29142:13;29175:63;29234:3;29219:13;29175:63;:::i;:::-;29168:70;;29261:60;29314:6;29261:60;:::i;:::-;29251:70;;29107:224;29094:1;29091;29087:9;29082:14;;29047:284;;;29051:14;29347:3;29340:10;;28748:608;;;28624:732;;;;:::o;29362:831::-;29625:4;29663:3;29652:9;29648:19;29640:27;;29677:71;29745:1;29734:9;29730:17;29721:6;29677:71;:::i;:::-;29758:80;29834:2;29823:9;29819:18;29810:6;29758:80;:::i;:::-;29885:9;29879:4;29875:20;29870:2;29859:9;29855:18;29848:48;29913:108;30016:4;30007:6;29913:108;:::i;:::-;29905:116;;30031:72;30099:2;30088:9;30084:18;30075:6;30031:72;:::i;:::-;30113:73;30181:3;30170:9;30166:19;30157:6;30113:73;:::i;:::-;29362:831;;;;;;;;:::o;30199:483::-;30370:4;30408:2;30397:9;30393:18;30385:26;;30421:71;30489:1;30478:9;30474:17;30465:6;30421:71;:::i;:::-;30539:9;30533:4;30529:20;30524:2;30513:9;30509:18;30502:48;30567:108;30670:4;30661:6;30567:108;:::i;:::-;30559:116;;30199:483;;;;;:::o;30688:807::-;30937:4;30975:3;30964:9;30960:19;30952:27;;30989:71;31057:1;31046:9;31042:17;31033:6;30989:71;:::i;:::-;31070:72;31138:2;31127:9;31123:18;31114:6;31070:72;:::i;:::-;31152:80;31228:2;31217:9;31213:18;31204:6;31152:80;:::i;:::-;31242;31318:2;31307:9;31303:18;31294:6;31242:80;:::i;:::-;31332:73;31400:3;31389:9;31385:19;31376:6;31332:73;:::i;:::-;31415;31483:3;31472:9;31468:19;31459:6;31415:73;:::i;:::-;30688:807;;;;;;;;;:::o;31501:143::-;31558:5;31589:6;31583:13;31574:22;;31605:33;31632:5;31605:33;:::i;:::-;31501:143;;;;:::o;31650:663::-;31738:6;31746;31754;31803:2;31791:9;31782:7;31778:23;31774:32;31771:119;;;31809:79;;:::i;:::-;31771:119;31929:1;31954:64;32010:7;32001:6;31990:9;31986:22;31954:64;:::i;:::-;31944:74;;31900:128;32067:2;32093:64;32149:7;32140:6;32129:9;32125:22;32093:64;:::i;:::-;32083:74;;32038:129;32206:2;32232:64;32288:7;32279:6;32268:9;32264:22;32232:64;:::i;:::-;32222:74;;32177:129;31650:663;;;;;:::o

Swarm Source

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