ETH Price: $3,278.50 (+0.84%)
Gas: 1 Gwei

Token

Ultimate NFT (UNFT)
 

Overview

Max Total Supply

1,000,000,000 UNFT

Holders

127

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
351,881.956690425 UNFT

Value
$0.00
0x01894e727ee2fe24cd8ce75ee12256468cc4726c
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:
UNFT

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-06
*/

/*
  _    _ _   _ ______ _______
 | |  | | \ | |  ____|__   __|
 | |  | |  \| | |__     | |
 | |  | | . ` |  __|    | |
 | |__| | |\  | |       | |
  \____/|_| \_|_|       |_|
*/

// SPDX-License-Identifier: Unlicensed
//Prepared by Grant Fields


pragma solidity ^0.8.4;

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) {
        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;
    uint256 private _lockTime;

    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 renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

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

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

// pragma solidity >=0.5.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;
}


// pragma solidity >=0.5.0;

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

// pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        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);
}



// pragma solidity >=0.6.2;

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 UNFT is Context, IERC20, Ownable {
    //Prepared by Grant Fields
    using SafeMath for uint256;
    using Address for address;

    address payable public marketingAddress = payable(0x379fEDF5DFfA2311a7E2F132FFDdBbA3c149229C); // Marketing Address
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private bots;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;



    string private _name = "Ultimate NFT";
    string private _symbol = "UNFT";
    uint8 private _decimals = 9;


    uint256 private _taxFee;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 5;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public marketingDivisor = 3;

    uint256 public _maxTxAmount = 1000 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 2500000 * 10**9;



    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public buyBackEnabled = true;


    event RewardLiquidityProviders(uint256 tokenAmount);
    event BuyBackEnabledUpdated(bool enabled);
    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 () {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        _taxFee = 0;

        uniswapV2Router = _uniswapV2Router;


        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }



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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, 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 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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

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


    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }


    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {

        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    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 _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner()) {
            require(!bots[from] && !bots[to]);
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 leftover;
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;

        if (!inSwapAndLiquify && swapAndLiquifyEnabled && to == uniswapV2Pair) {
            if (overMinimumTokenBalance) {
                contractTokenBalance = minimumTokensBeforeSwap.mul(marketingDivisor).div(_liquidityFee);
                leftover = minimumTokensBeforeSwap - contractTokenBalance;
                swapTokens(contractTokenBalance);
                _transfer(address(this), deadAddress, leftover);
            }

        }

        bool takeFee = true;

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

        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {

        uint256 initialBalance = address(this).balance;
        swapTokensForEth(contractTokenBalance);
        uint256 transferredBalance = address(this).balance.sub(initialBalance);

        //Send to Marketing address
        transferToAddressETH(marketingAddress, transferredBalance);

    }




    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 swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

      // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            deadAddress, // Burn address
            block.timestamp.add(300)
        );

        emit SwapETHForTokens(amount, 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 _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
	    _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
    	_tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
    	_tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

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

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }

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

    function setMarketingDivisor(uint256 divisor) external onlyOwner() {
        marketingDivisor = divisor;
    }

    function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }


    function setMarketingAddress(address _marketingAddress) external onlyOwner() {
        marketingAddress = payable(_marketingAddress);
    }

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

    function feesOff() external onlyOwner {
        setSwapAndLiquifyEnabled(false);
        _liquidityFee = 0;
    }

    function feesLive() external onlyOwner {
        setSwapAndLiquifyEnabled(true);
        _liquidityFee = 5;
    }

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


    receive() external payable {}
}

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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","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":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","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":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","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":[],"name":"buyBackEnabled","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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMarketingDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e060405273379fedf5dffa2311a7e2f132ffddbba3c149229c600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b815250670de0b6b3a7640000600b55600b54600019620000af919062000890565b600019620000be9190620007e1565b600c556040518060400160405280600c81526020017f556c74696d617465204e46540000000000000000000000000000000000000000815250600e90805190602001906200010e92919062000682565b506040518060400160405280600481526020017f554e465400000000000000000000000000000000000000000000000000000000815250600f90805190602001906200015c92919062000682565b506009601060006101000a81548160ff021916908360ff16021790555060115460125560056013556013546014556003601555670de0b6b3a76400006016556608e1bc9bf040006017556000601860016101000a81548160ff0219169083151502179055506001601860026101000a81548160ff021916908315150217905550348015620001e957600080fd5b506000620001fc6200065160201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c5460046000620002b16200065160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200034f57600080fd5b505afa15801562000364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038a919062000749565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003ed57600080fd5b505afa15801562000402573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000428919062000749565b6040518363ffffffff1660e01b81526004016200044792919062000797565b602060405180830381600087803b1580156200046257600080fd5b505af115801562000477573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200049d919062000749565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b8152505060006011819055508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160086000620005286200065960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005e16200065160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b54604051620006429190620007c4565b60405180910390a3506200096f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000690906200085a565b90600052602060002090601f016020900481019282620006b4576000855562000700565b82601f10620006cf57805160ff191683800117855562000700565b8280016001018555821562000700579182015b82811115620006ff578251825591602001919060010190620006e2565b5b5090506200070f919062000713565b5090565b5b808211156200072e57600081600090555060010162000714565b5090565b600081519050620007438162000955565b92915050565b6000602082840312156200075c57600080fd5b60006200076c8482850162000732565b91505092915050565b62000780816200081c565b82525050565b620007918162000850565b82525050565b6000604082019050620007ae600083018562000775565b620007bd602083018462000775565b9392505050565b6000602082019050620007db600083018462000786565b92915050565b6000620007ee8262000850565b9150620007fb8362000850565b925082821015620008115762000810620008c8565b5b828203905092915050565b6000620008298262000830565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200087357607f821691505b602082108114156200088a576200088962000926565b5b50919050565b60006200089d8262000850565b9150620008aa8362000850565b925082620008bd57620008bc620008f7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b62000960816200081c565b81146200096c57600080fd5b50565b60805160601c60a05160601c60c05160601c61592f620009cb600039600081816114980152612d8a015260008181610b5f015281816139d301528181613ae90152613b10015260008181610c660152612e2f015261592f6000f3fe6080604052600436106102815760003560e01c806370a082311161014f578063a5ece941116100c1578063dd4670641161007a578063dd46706414610999578063dd62ed3e146109c2578063ea2f0b37146109ff578063ec28438a14610a28578063f0f165af14610a51578063f2fde38b14610a7a57610288565b8063a5ece9411461089d578063a69df4b5146108c8578063a9059cbb146108df578063b0cb81f11461091c578063c49b9a8014610945578063d6b513cf1461096e57610288565b80638da5cb5b116101135780638da5cb5b1461078d5780638ee88c53146107b8578063906e9dd0146107e157806395d89b411461080a578063a073d37f14610835578063a457c2d71461086057610288565b806370a08231146106ba578063715018a6146106f75780637d1db4a51461070e5780637e4d4bd51461073957806388f820201461075057610288565b80633bd5d173116101f35780635342acb4116101ac5780635342acb4146105ba578063557ed1ba146105f7578063602bc62b146106225780636053a0e31461064d57806364d69636146106785780636bc87c3a1461068f57610288565b80633bd5d173146104ac578063437823ec146104d55780634549b039146104fe57806349bd5a5e1461053b5780634a74bb021461056657806352390c021461059157610288565b806323b872dd1161024557806323b872dd1461037657806327c8f835146103b35780632d838119146103de578063313ce5671461041b5780633685d41914610446578063395093511461046f57610288565b806306fdde031461028d578063095ea7b3146102b857806313114a9d146102f55780631694505e1461032057806318160ddd1461034b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610aa3565b6040516102af9190614e00565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190614973565b610b35565b6040516102ec9190614dca565b60405180910390f35b34801561030157600080fd5b5061030a610b53565b6040516103179190615022565b60405180910390f35b34801561032c57600080fd5b50610335610b5d565b6040516103429190614de5565b60405180910390f35b34801561035757600080fd5b50610360610b81565b60405161036d9190615022565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190614924565b610b8b565b6040516103aa9190614dca565b60405180910390f35b3480156103bf57600080fd5b506103c8610c64565b6040516103d59190614d94565b60405180910390f35b3480156103ea57600080fd5b50610405600480360381019061040091906149d8565b610c88565b6040516104129190615022565b60405180910390f35b34801561042757600080fd5b50610430610cf6565b60405161043d91906150c7565b60405180910390f35b34801561045257600080fd5b5061046d60048036038101906104689190614896565b610d0d565b005b34801561047b57600080fd5b5061049660048036038101906104919190614973565b6110f4565b6040516104a39190614dca565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce91906149d8565b6111a7565b005b3480156104e157600080fd5b506104fc60048036038101906104f79190614896565b611322565b005b34801561050a57600080fd5b5061052560048036038101906105209190614a01565b611412565b6040516105329190615022565b60405180910390f35b34801561054757600080fd5b50610550611496565b60405161055d9190614d94565b60405180910390f35b34801561057257600080fd5b5061057b6114ba565b6040516105889190614dca565b60405180910390f35b34801561059d57600080fd5b506105b860048036038101906105b39190614896565b6114cd565b005b3480156105c657600080fd5b506105e160048036038101906105dc9190614896565b611781565b6040516105ee9190614dca565b60405180910390f35b34801561060357600080fd5b5061060c6117d7565b6040516106199190615022565b60405180910390f35b34801561062e57600080fd5b506106376117df565b6040516106449190615022565b60405180910390f35b34801561065957600080fd5b506106626117e9565b60405161066f9190614dca565b60405180910390f35b34801561068457600080fd5b5061068d6117fc565b005b34801561069b57600080fd5b506106a46118a5565b6040516106b19190615022565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc9190614896565b6118ab565b6040516106ee9190615022565b60405180910390f35b34801561070357600080fd5b5061070c611996565b005b34801561071a57600080fd5b50610723611ae9565b6040516107309190615022565b60405180910390f35b34801561074557600080fd5b5061074e611aef565b005b34801561075c57600080fd5b5061077760048036038101906107729190614896565b611b98565b6040516107849190614dca565b60405180910390f35b34801561079957600080fd5b506107a2611bee565b6040516107af9190614d94565b60405180910390f35b3480156107c457600080fd5b506107df60048036038101906107da91906149d8565b611c17565b005b3480156107ed57600080fd5b5061080860048036038101906108039190614896565b611cb6565b005b34801561081657600080fd5b5061081f611d8f565b60405161082c9190614e00565b60405180910390f35b34801561084157600080fd5b5061084a611e21565b6040516108579190615022565b60405180910390f35b34801561086c57600080fd5b5061088760048036038101906108829190614973565b611e2b565b6040516108949190614dca565b60405180910390f35b3480156108a957600080fd5b506108b2611ef8565b6040516108bf9190614daf565b60405180910390f35b3480156108d457600080fd5b506108dd611f1e565b005b3480156108eb57600080fd5b5061090660048036038101906109019190614973565b6120f2565b6040516109139190614dca565b60405180910390f35b34801561092857600080fd5b50610943600480360381019061093e91906149d8565b612110565b005b34801561095157600080fd5b5061096c600480360381019061096791906149af565b6121af565b005b34801561097a57600080fd5b50610983612298565b6040516109909190615022565b60405180910390f35b3480156109a557600080fd5b506109c060048036038101906109bb91906149d8565b61229e565b005b3480156109ce57600080fd5b506109e960048036038101906109e491906148e8565b612465565b6040516109f69190615022565b60405180910390f35b348015610a0b57600080fd5b50610a266004803603810190610a219190614896565b6124ec565b005b348015610a3457600080fd5b50610a4f6004803603810190610a4a91906149d8565b6125dc565b005b348015610a5d57600080fd5b50610a786004803603810190610a7391906149d8565b61267b565b005b348015610a8657600080fd5b50610aa16004803603810190610a9c9190614896565b61271a565b005b6060600e8054610ab29061531c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ade9061531c565b8015610b2b5780601f10610b0057610100808354040283529160200191610b2b565b820191906000526020600020905b815481529060010190602001808311610b0e57829003601f168201915b5050505050905090565b6000610b49610b426128dc565b84846128e4565b6001905092915050565b6000600d54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600b54905090565b6000610b98848484612aaf565b610c5984610ba46128dc565b610c54856040518060600160405280602881526020016158ad60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c0a6128dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1c9092919063ffffffff16565b6128e4565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600c54821115610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690614e42565b60405180910390fd5b6000610cd9612f80565b9050610cee8184612fab90919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b610d156128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9990614f42565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2590614ec2565b60405180910390fd5b60005b600a805490508110156110f0578173ffffffffffffffffffffffffffffffffffffffff16600a8281548110610e8f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110dd57600a6001600a80549050610eea9190615218565b81548110610f21577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a8281548110610f86577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a8054806110a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556110f0565b80806110e89061534e565b915050610e31565b5050565b600061119d6111016128dc565b8461119885600660006111126128dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff590919063ffffffff16565b6128e4565b6001905092915050565b60006111b16128dc565b9050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790614fe2565b60405180910390fd5b600061124b83613053565b505050505090506112a481600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130af90919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112fc81600c546130af90919063ffffffff16565b600c8190555061131783600d54612ff590919063ffffffff16565b600d81905550505050565b61132a6128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ae90614f42565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b54831115611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090614ee2565b60405180910390fd5b8161147957600061146984613053565b5050505050905080915050611490565b600061148484613053565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601860019054906101000a900460ff1681565b6114d56128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155990614f42565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e690614ec2565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116c35761167f600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c88565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600042905090565b6000600254905090565b601860029054906101000a900460ff1681565b6118046128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188890614f42565b60405180910390fd5b61189b60006121af565b6000601381905550565b60135481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561194657600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611991565b61198e600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c88565b90505b919050565b61199e6128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2290614f42565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60165481565b611af76128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b90614f42565b60405180910390fd5b611b8e60016121af565b6005601381905550565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c1f6128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca390614f42565b60405180910390fd5b8060138190555050565b611cbe6128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4290614f42565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600f8054611d9e9061531c565b80601f0160208091040260200160405190810160405280929190818152602001828054611dca9061531c565b8015611e175780601f10611dec57610100808354040283529160200191611e17565b820191906000526020600020905b815481529060010190602001808311611dfa57829003601f168201915b5050505050905090565b6000601754905090565b6000611eee611e386128dc565b84611ee9856040518060600160405280602581526020016158d56025913960066000611e626128dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1c9092919063ffffffff16565b6128e4565b6001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa590615002565b60405180910390fd5b6002544211611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe990614fc2565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006121066120ff6128dc565b8484612aaf565b6001905092915050565b6121186128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219c90614f42565b60405180910390fd5b8060158190555050565b6121b76128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b90614f42565b60405180910390fd5b80601860016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161228d9190614dca565b60405180910390a150565b60155481565b6122a66128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90614f42565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426123e19190615137565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6124f46128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612581576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257890614f42565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6125e46128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266890614f42565b60405180910390fd5b8060168190555050565b6126836128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270790614f42565b60405180910390fd5b8060178190555050565b6127226128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a690614f42565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561281f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281690614e62565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294b90614fa2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bb90614e82565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612aa29190615022565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1690614f82565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8690614e22565b60405180910390fd5b60008111612bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc990614f62565b60405180910390fd5b612bda611bee565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c485750612c18611bee565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d4057600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612cf15750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612cfa57600080fd5b601654811115612d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3690614f02565b60405180910390fd5b5b6000612d4b306118ab565b90506000806017548310159050601860009054906101000a900460ff16158015612d815750601860019054906101000a900460ff165b8015612dd857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15612e56578015612e5557612e0e601354612e006015546017546130f990919063ffffffff16565b612fab90919063ffffffff16565b925082601754612e1e9190615218565b9150612e2983613174565b612e54307f000000000000000000000000000000000000000000000000000000000000000084612aaf565b5b5b600060019050600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612efd5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f0757600090505b612f1387878784613200565b50505050505050565b6000838311158290612f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5b9190614e00565b60405180910390fd5b5060008385612f739190615218565b9050809150509392505050565b6000806000612f8d613457565b91509150612fa48183612fab90919063ffffffff16565b9250505090565b6000612fed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137a2565b905092915050565b60008082846130049190615137565b905083811015613049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304090614ea2565b60405180910390fd5b8091505092915050565b600080600080600080600080600061306a8a613805565b92509250925060008060006130888d8686613083612f80565b61385f565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60006130f183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f1c565b905092915050565b60008083141561310c576000905061316e565b6000828461311a91906151be565b9050828482613129919061518d565b14613169576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316090614f22565b60405180910390fd5b809150505b92915050565b6001601860006101000a81548160ff021916908315150217905550600047905061319d826138e8565b60006131b282476130af90919063ffffffff16565b90506131e0600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613bdf565b50506000601860006101000a81548160ff02191690831515021790555050565b8061320e5761320d613c2a565b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b15750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132c6576132c1848484613c6d565b613443565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133695750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561337e57613379848484613ecd565b613442565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134205750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134355761343084848461412d565b613441565b613440848484614422565b5b5b5b80613451576134506145ed565b5b50505050565b6000806000600c5490506000600b54905060005b600a80549050811015613765578260046000600a84815481106134b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135cb57508160056000600a8481548110613563577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156135e257600c54600b549450945050505061379e565b61369860046000600a8481548110613623577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846130af90919063ffffffff16565b925061375060056000600a84815481106136db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836130af90919063ffffffff16565b9150808061375d9061534e565b91505061346b565b5061377d600b54600c54612fab90919063ffffffff16565b82101561379557600c54600b5493509350505061379e565b81819350935050505b9091565b600080831182906137e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e09190614e00565b60405180910390fd5b50600083856137f8919061518d565b9050809150509392505050565b60008060008061381485614601565b9050600061382186614632565b9050600061384a8261383c858a6130af90919063ffffffff16565b6130af90919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061387885896130f990919063ffffffff16565b9050600061388f86896130f990919063ffffffff16565b905060006138a687896130f990919063ffffffff16565b905060006138cf826138c185876130af90919063ffffffff16565b6130af90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff81111561392b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156139595781602001602082028036833780820191505090505b5090503081600081518110613997577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613a3757600080fd5b505afa158015613a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a6f91906148bf565b81600181518110613aa9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b0e307f0000000000000000000000000000000000000000000000000000000000000000846128e4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b7095949392919061506d565b600060405180830381600087803b158015613b8a57600080fd5b505af1158015613b9e573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613bd392919061503d565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c25573d6000803e3d6000fd5b505050565b6000601154148015613c3e57506000601354145b15613c4857613c6b565b601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080613c7f87613053565b955095509550955095509550613cdd87600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130af90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d7286600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130af90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e0785600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e5381614663565b613e5d8483614808565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613eba9190615022565b60405180910390a3505050505050505050565b600080600080600080613edf87613053565b955095509550955095509550613f3d86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130af90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fd283600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff590919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061406785600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140b381614663565b6140bd8483614808565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161411a9190615022565b60405180910390a3505050505050505050565b60008060008060008061413f87613053565b95509550955095509550955061419d87600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130af90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061423286600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130af90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142c783600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff590919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435c85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143a881614663565b6143b28483614808565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161440f9190615022565b60405180910390a3505050505050505050565b60008060008060008061443487613053565b95509550955095509550955061449286600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130af90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061452785600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061457381614663565b61457d8483614808565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145da9190615022565b60405180910390a3505050505050505050565b601254601181905550601454601381905550565b600061462b606461461d601154856130f990919063ffffffff16565b612fab90919063ffffffff16565b9050919050565b600061465c606461464e601354856130f990919063ffffffff16565b612fab90919063ffffffff16565b9050919050565b600061466d612f80565b9050600061468482846130f990919063ffffffff16565b90506146d881600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff590919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614803576147bf83600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff590919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61481d82600c546130af90919063ffffffff16565b600c8190555061483881600d54612ff590919063ffffffff16565b600d819055505050565b60008135905061485181615867565b92915050565b60008151905061486681615867565b92915050565b60008135905061487b8161587e565b92915050565b60008135905061489081615895565b92915050565b6000602082840312156148a857600080fd5b60006148b684828501614842565b91505092915050565b6000602082840312156148d157600080fd5b60006148df84828501614857565b91505092915050565b600080604083850312156148fb57600080fd5b600061490985828601614842565b925050602061491a85828601614842565b9150509250929050565b60008060006060848603121561493957600080fd5b600061494786828701614842565b935050602061495886828701614842565b925050604061496986828701614881565b9150509250925092565b6000806040838503121561498657600080fd5b600061499485828601614842565b92505060206149a585828601614881565b9150509250929050565b6000602082840312156149c157600080fd5b60006149cf8482850161486c565b91505092915050565b6000602082840312156149ea57600080fd5b60006149f884828501614881565b91505092915050565b60008060408385031215614a1457600080fd5b6000614a2285828601614881565b9250506020614a338582860161486c565b9150509250929050565b6000614a498383614a64565b60208301905092915050565b614a5e8161525e565b82525050565b614a6d8161524c565b82525050565b614a7c8161524c565b82525050565b6000614a8d826150f2565b614a978185615115565b9350614aa2836150e2565b8060005b83811015614ad3578151614aba8882614a3d565b9750614ac583615108565b925050600181019050614aa6565b5085935050505092915050565b614ae981615270565b82525050565b614af8816152b3565b82525050565b614b07816152d7565b82525050565b6000614b18826150fd565b614b228185615126565b9350614b328185602086016152e9565b614b3b81615424565b840191505092915050565b6000614b53602383615126565b9150614b5e82615435565b604082019050919050565b6000614b76602a83615126565b9150614b8182615484565b604082019050919050565b6000614b99602683615126565b9150614ba4826154d3565b604082019050919050565b6000614bbc602283615126565b9150614bc782615522565b604082019050919050565b6000614bdf601b83615126565b9150614bea82615571565b602082019050919050565b6000614c02601b83615126565b9150614c0d8261559a565b602082019050919050565b6000614c25601f83615126565b9150614c30826155c3565b602082019050919050565b6000614c48602883615126565b9150614c53826155ec565b604082019050919050565b6000614c6b602183615126565b9150614c768261563b565b604082019050919050565b6000614c8e602083615126565b9150614c998261568a565b602082019050919050565b6000614cb1602983615126565b9150614cbc826156b3565b604082019050919050565b6000614cd4602583615126565b9150614cdf82615702565b604082019050919050565b6000614cf7602483615126565b9150614d0282615751565b604082019050919050565b6000614d1a601f83615126565b9150614d25826157a0565b602082019050919050565b6000614d3d602c83615126565b9150614d48826157c9565b604082019050919050565b6000614d60602383615126565b9150614d6b82615818565b604082019050919050565b614d7f8161529c565b82525050565b614d8e816152a6565b82525050565b6000602082019050614da96000830184614a73565b92915050565b6000602082019050614dc46000830184614a55565b92915050565b6000602082019050614ddf6000830184614ae0565b92915050565b6000602082019050614dfa6000830184614aef565b92915050565b60006020820190508181036000830152614e1a8184614b0d565b905092915050565b60006020820190508181036000830152614e3b81614b46565b9050919050565b60006020820190508181036000830152614e5b81614b69565b9050919050565b60006020820190508181036000830152614e7b81614b8c565b9050919050565b60006020820190508181036000830152614e9b81614baf565b9050919050565b60006020820190508181036000830152614ebb81614bd2565b9050919050565b60006020820190508181036000830152614edb81614bf5565b9050919050565b60006020820190508181036000830152614efb81614c18565b9050919050565b60006020820190508181036000830152614f1b81614c3b565b9050919050565b60006020820190508181036000830152614f3b81614c5e565b9050919050565b60006020820190508181036000830152614f5b81614c81565b9050919050565b60006020820190508181036000830152614f7b81614ca4565b9050919050565b60006020820190508181036000830152614f9b81614cc7565b9050919050565b60006020820190508181036000830152614fbb81614cea565b9050919050565b60006020820190508181036000830152614fdb81614d0d565b9050919050565b60006020820190508181036000830152614ffb81614d30565b9050919050565b6000602082019050818103600083015261501b81614d53565b9050919050565b60006020820190506150376000830184614d76565b92915050565b60006040820190506150526000830185614d76565b81810360208301526150648184614a82565b90509392505050565b600060a0820190506150826000830188614d76565b61508f6020830187614afe565b81810360408301526150a18186614a82565b90506150b06060830185614a73565b6150bd6080830184614d76565b9695505050505050565b60006020820190506150dc6000830184614d85565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006151428261529c565b915061514d8361529c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561518257615181615397565b5b828201905092915050565b60006151988261529c565b91506151a38361529c565b9250826151b3576151b26153c6565b5b828204905092915050565b60006151c98261529c565b91506151d48361529c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561520d5761520c615397565b5b828202905092915050565b60006152238261529c565b915061522e8361529c565b92508282101561524157615240615397565b5b828203905092915050565b60006152578261527c565b9050919050565b60006152698261527c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006152be826152c5565b9050919050565b60006152d08261527c565b9050919050565b60006152e28261529c565b9050919050565b60005b838110156153075780820151818401526020810190506152ec565b83811115615316576000848401525b50505050565b6000600282049050600182168061533457607f821691505b60208210811415615348576153476153f5565b5b50919050565b60006153598261529c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561538c5761538b615397565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b6158708161524c565b811461587b57600080fd5b50565b61588781615270565b811461589257600080fd5b50565b61589e8161529c565b81146158a957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122020e306b64f5d4883f98113e449440261a30d77ffa5393460f21c9b174be3a74f64736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102815760003560e01c806370a082311161014f578063a5ece941116100c1578063dd4670641161007a578063dd46706414610999578063dd62ed3e146109c2578063ea2f0b37146109ff578063ec28438a14610a28578063f0f165af14610a51578063f2fde38b14610a7a57610288565b8063a5ece9411461089d578063a69df4b5146108c8578063a9059cbb146108df578063b0cb81f11461091c578063c49b9a8014610945578063d6b513cf1461096e57610288565b80638da5cb5b116101135780638da5cb5b1461078d5780638ee88c53146107b8578063906e9dd0146107e157806395d89b411461080a578063a073d37f14610835578063a457c2d71461086057610288565b806370a08231146106ba578063715018a6146106f75780637d1db4a51461070e5780637e4d4bd51461073957806388f820201461075057610288565b80633bd5d173116101f35780635342acb4116101ac5780635342acb4146105ba578063557ed1ba146105f7578063602bc62b146106225780636053a0e31461064d57806364d69636146106785780636bc87c3a1461068f57610288565b80633bd5d173146104ac578063437823ec146104d55780634549b039146104fe57806349bd5a5e1461053b5780634a74bb021461056657806352390c021461059157610288565b806323b872dd1161024557806323b872dd1461037657806327c8f835146103b35780632d838119146103de578063313ce5671461041b5780633685d41914610446578063395093511461046f57610288565b806306fdde031461028d578063095ea7b3146102b857806313114a9d146102f55780631694505e1461032057806318160ddd1461034b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610aa3565b6040516102af9190614e00565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190614973565b610b35565b6040516102ec9190614dca565b60405180910390f35b34801561030157600080fd5b5061030a610b53565b6040516103179190615022565b60405180910390f35b34801561032c57600080fd5b50610335610b5d565b6040516103429190614de5565b60405180910390f35b34801561035757600080fd5b50610360610b81565b60405161036d9190615022565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190614924565b610b8b565b6040516103aa9190614dca565b60405180910390f35b3480156103bf57600080fd5b506103c8610c64565b6040516103d59190614d94565b60405180910390f35b3480156103ea57600080fd5b50610405600480360381019061040091906149d8565b610c88565b6040516104129190615022565b60405180910390f35b34801561042757600080fd5b50610430610cf6565b60405161043d91906150c7565b60405180910390f35b34801561045257600080fd5b5061046d60048036038101906104689190614896565b610d0d565b005b34801561047b57600080fd5b5061049660048036038101906104919190614973565b6110f4565b6040516104a39190614dca565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce91906149d8565b6111a7565b005b3480156104e157600080fd5b506104fc60048036038101906104f79190614896565b611322565b005b34801561050a57600080fd5b5061052560048036038101906105209190614a01565b611412565b6040516105329190615022565b60405180910390f35b34801561054757600080fd5b50610550611496565b60405161055d9190614d94565b60405180910390f35b34801561057257600080fd5b5061057b6114ba565b6040516105889190614dca565b60405180910390f35b34801561059d57600080fd5b506105b860048036038101906105b39190614896565b6114cd565b005b3480156105c657600080fd5b506105e160048036038101906105dc9190614896565b611781565b6040516105ee9190614dca565b60405180910390f35b34801561060357600080fd5b5061060c6117d7565b6040516106199190615022565b60405180910390f35b34801561062e57600080fd5b506106376117df565b6040516106449190615022565b60405180910390f35b34801561065957600080fd5b506106626117e9565b60405161066f9190614dca565b60405180910390f35b34801561068457600080fd5b5061068d6117fc565b005b34801561069b57600080fd5b506106a46118a5565b6040516106b19190615022565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc9190614896565b6118ab565b6040516106ee9190615022565b60405180910390f35b34801561070357600080fd5b5061070c611996565b005b34801561071a57600080fd5b50610723611ae9565b6040516107309190615022565b60405180910390f35b34801561074557600080fd5b5061074e611aef565b005b34801561075c57600080fd5b5061077760048036038101906107729190614896565b611b98565b6040516107849190614dca565b60405180910390f35b34801561079957600080fd5b506107a2611bee565b6040516107af9190614d94565b60405180910390f35b3480156107c457600080fd5b506107df60048036038101906107da91906149d8565b611c17565b005b3480156107ed57600080fd5b5061080860048036038101906108039190614896565b611cb6565b005b34801561081657600080fd5b5061081f611d8f565b60405161082c9190614e00565b60405180910390f35b34801561084157600080fd5b5061084a611e21565b6040516108579190615022565b60405180910390f35b34801561086c57600080fd5b5061088760048036038101906108829190614973565b611e2b565b6040516108949190614dca565b60405180910390f35b3480156108a957600080fd5b506108b2611ef8565b6040516108bf9190614daf565b60405180910390f35b3480156108d457600080fd5b506108dd611f1e565b005b3480156108eb57600080fd5b5061090660048036038101906109019190614973565b6120f2565b6040516109139190614dca565b60405180910390f35b34801561092857600080fd5b50610943600480360381019061093e91906149d8565b612110565b005b34801561095157600080fd5b5061096c600480360381019061096791906149af565b6121af565b005b34801561097a57600080fd5b50610983612298565b6040516109909190615022565b60405180910390f35b3480156109a557600080fd5b506109c060048036038101906109bb91906149d8565b61229e565b005b3480156109ce57600080fd5b506109e960048036038101906109e491906148e8565b612465565b6040516109f69190615022565b60405180910390f35b348015610a0b57600080fd5b50610a266004803603810190610a219190614896565b6124ec565b005b348015610a3457600080fd5b50610a4f6004803603810190610a4a91906149d8565b6125dc565b005b348015610a5d57600080fd5b50610a786004803603810190610a7391906149d8565b61267b565b005b348015610a8657600080fd5b50610aa16004803603810190610a9c9190614896565b61271a565b005b6060600e8054610ab29061531c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ade9061531c565b8015610b2b5780601f10610b0057610100808354040283529160200191610b2b565b820191906000526020600020905b815481529060010190602001808311610b0e57829003601f168201915b5050505050905090565b6000610b49610b426128dc565b84846128e4565b6001905092915050565b6000600d54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600b54905090565b6000610b98848484612aaf565b610c5984610ba46128dc565b610c54856040518060600160405280602881526020016158ad60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c0a6128dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1c9092919063ffffffff16565b6128e4565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b6000600c54821115610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690614e42565b60405180910390fd5b6000610cd9612f80565b9050610cee8184612fab90919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b610d156128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9990614f42565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2590614ec2565b60405180910390fd5b60005b600a805490508110156110f0578173ffffffffffffffffffffffffffffffffffffffff16600a8281548110610e8f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110dd57600a6001600a80549050610eea9190615218565b81548110610f21577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a8281548110610f86577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a8054806110a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556110f0565b80806110e89061534e565b915050610e31565b5050565b600061119d6111016128dc565b8461119885600660006111126128dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff590919063ffffffff16565b6128e4565b6001905092915050565b60006111b16128dc565b9050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790614fe2565b60405180910390fd5b600061124b83613053565b505050505090506112a481600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130af90919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112fc81600c546130af90919063ffffffff16565b600c8190555061131783600d54612ff590919063ffffffff16565b600d81905550505050565b61132a6128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ae90614f42565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b54831115611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090614ee2565b60405180910390fd5b8161147957600061146984613053565b5050505050905080915050611490565b600061148484613053565b50505050915050809150505b92915050565b7f0000000000000000000000002efb50b1118b2cccc24fdcbb69fd9096a93cd62181565b601860019054906101000a900460ff1681565b6114d56128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155990614f42565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e690614ec2565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116c35761167f600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c88565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600042905090565b6000600254905090565b601860029054906101000a900460ff1681565b6118046128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188890614f42565b60405180910390fd5b61189b60006121af565b6000601381905550565b60135481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561194657600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611991565b61198e600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c88565b90505b919050565b61199e6128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2290614f42565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60165481565b611af76128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b90614f42565b60405180910390fd5b611b8e60016121af565b6005601381905550565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c1f6128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca390614f42565b60405180910390fd5b8060138190555050565b611cbe6128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4290614f42565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600f8054611d9e9061531c565b80601f0160208091040260200160405190810160405280929190818152602001828054611dca9061531c565b8015611e175780601f10611dec57610100808354040283529160200191611e17565b820191906000526020600020905b815481529060010190602001808311611dfa57829003601f168201915b5050505050905090565b6000601754905090565b6000611eee611e386128dc565b84611ee9856040518060600160405280602581526020016158d56025913960066000611e626128dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1c9092919063ffffffff16565b6128e4565b6001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa590615002565b60405180910390fd5b6002544211611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe990614fc2565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006121066120ff6128dc565b8484612aaf565b6001905092915050565b6121186128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219c90614f42565b60405180910390fd5b8060158190555050565b6121b76128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b90614f42565b60405180910390fd5b80601860016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161228d9190614dca565b60405180910390a150565b60155481565b6122a66128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90614f42565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426123e19190615137565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6124f46128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612581576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257890614f42565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6125e46128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266890614f42565b60405180910390fd5b8060168190555050565b6126836128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270790614f42565b60405180910390fd5b8060178190555050565b6127226128dc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a690614f42565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561281f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281690614e62565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294b90614fa2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bb90614e82565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612aa29190615022565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1690614f82565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8690614e22565b60405180910390fd5b60008111612bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc990614f62565b60405180910390fd5b612bda611bee565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c485750612c18611bee565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d4057600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612cf15750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612cfa57600080fd5b601654811115612d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3690614f02565b60405180910390fd5b5b6000612d4b306118ab565b90506000806017548310159050601860009054906101000a900460ff16158015612d815750601860019054906101000a900460ff165b8015612dd857507f0000000000000000000000002efb50b1118b2cccc24fdcbb69fd9096a93cd62173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15612e56578015612e5557612e0e601354612e006015546017546130f990919063ffffffff16565b612fab90919063ffffffff16565b925082601754612e1e9190615218565b9150612e2983613174565b612e54307f000000000000000000000000000000000000000000000000000000000000dead84612aaf565b5b5b600060019050600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612efd5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f0757600090505b612f1387878784613200565b50505050505050565b6000838311158290612f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5b9190614e00565b60405180910390fd5b5060008385612f739190615218565b9050809150509392505050565b6000806000612f8d613457565b91509150612fa48183612fab90919063ffffffff16565b9250505090565b6000612fed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137a2565b905092915050565b60008082846130049190615137565b905083811015613049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304090614ea2565b60405180910390fd5b8091505092915050565b600080600080600080600080600061306a8a613805565b92509250925060008060006130888d8686613083612f80565b61385f565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60006130f183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f1c565b905092915050565b60008083141561310c576000905061316e565b6000828461311a91906151be565b9050828482613129919061518d565b14613169576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316090614f22565b60405180910390fd5b809150505b92915050565b6001601860006101000a81548160ff021916908315150217905550600047905061319d826138e8565b60006131b282476130af90919063ffffffff16565b90506131e0600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613bdf565b50506000601860006101000a81548160ff02191690831515021790555050565b8061320e5761320d613c2a565b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b15750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132c6576132c1848484613c6d565b613443565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133695750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561337e57613379848484613ecd565b613442565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134205750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134355761343084848461412d565b613441565b613440848484614422565b5b5b5b80613451576134506145ed565b5b50505050565b6000806000600c5490506000600b54905060005b600a80549050811015613765578260046000600a84815481106134b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135cb57508160056000600a8481548110613563577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156135e257600c54600b549450945050505061379e565b61369860046000600a8481548110613623577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846130af90919063ffffffff16565b925061375060056000600a84815481106136db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836130af90919063ffffffff16565b9150808061375d9061534e565b91505061346b565b5061377d600b54600c54612fab90919063ffffffff16565b82101561379557600c54600b5493509350505061379e565b81819350935050505b9091565b600080831182906137e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e09190614e00565b60405180910390fd5b50600083856137f8919061518d565b9050809150509392505050565b60008060008061381485614601565b9050600061382186614632565b9050600061384a8261383c858a6130af90919063ffffffff16565b6130af90919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061387885896130f990919063ffffffff16565b9050600061388f86896130f990919063ffffffff16565b905060006138a687896130f990919063ffffffff16565b905060006138cf826138c185876130af90919063ffffffff16565b6130af90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff81111561392b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156139595781602001602082028036833780820191505090505b5090503081600081518110613997577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613a3757600080fd5b505afa158015613a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a6f91906148bf565b81600181518110613aa9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b0e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846128e4565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b7095949392919061506d565b600060405180830381600087803b158015613b8a57600080fd5b505af1158015613b9e573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613bd392919061503d565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c25573d6000803e3d6000fd5b505050565b6000601154148015613c3e57506000601354145b15613c4857613c6b565b601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080613c7f87613053565b955095509550955095509550613cdd87600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130af90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d7286600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130af90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e0785600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e5381614663565b613e5d8483614808565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613eba9190615022565b60405180910390a3505050505050505050565b600080600080600080613edf87613053565b955095509550955095509550613f3d86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130af90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fd283600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff590919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061406785600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140b381614663565b6140bd8483614808565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161411a9190615022565b60405180910390a3505050505050505050565b60008060008060008061413f87613053565b95509550955095509550955061419d87600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130af90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061423286600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130af90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142c783600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff590919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435c85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143a881614663565b6143b28483614808565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161440f9190615022565b60405180910390a3505050505050505050565b60008060008060008061443487613053565b95509550955095509550955061449286600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130af90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061452785600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061457381614663565b61457d8483614808565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145da9190615022565b60405180910390a3505050505050505050565b601254601181905550601454601381905550565b600061462b606461461d601154856130f990919063ffffffff16565b612fab90919063ffffffff16565b9050919050565b600061465c606461464e601354856130f990919063ffffffff16565b612fab90919063ffffffff16565b9050919050565b600061466d612f80565b9050600061468482846130f990919063ffffffff16565b90506146d881600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff590919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614803576147bf83600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff590919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61481d82600c546130af90919063ffffffff16565b600c8190555061483881600d54612ff590919063ffffffff16565b600d819055505050565b60008135905061485181615867565b92915050565b60008151905061486681615867565b92915050565b60008135905061487b8161587e565b92915050565b60008135905061489081615895565b92915050565b6000602082840312156148a857600080fd5b60006148b684828501614842565b91505092915050565b6000602082840312156148d157600080fd5b60006148df84828501614857565b91505092915050565b600080604083850312156148fb57600080fd5b600061490985828601614842565b925050602061491a85828601614842565b9150509250929050565b60008060006060848603121561493957600080fd5b600061494786828701614842565b935050602061495886828701614842565b925050604061496986828701614881565b9150509250925092565b6000806040838503121561498657600080fd5b600061499485828601614842565b92505060206149a585828601614881565b9150509250929050565b6000602082840312156149c157600080fd5b60006149cf8482850161486c565b91505092915050565b6000602082840312156149ea57600080fd5b60006149f884828501614881565b91505092915050565b60008060408385031215614a1457600080fd5b6000614a2285828601614881565b9250506020614a338582860161486c565b9150509250929050565b6000614a498383614a64565b60208301905092915050565b614a5e8161525e565b82525050565b614a6d8161524c565b82525050565b614a7c8161524c565b82525050565b6000614a8d826150f2565b614a978185615115565b9350614aa2836150e2565b8060005b83811015614ad3578151614aba8882614a3d565b9750614ac583615108565b925050600181019050614aa6565b5085935050505092915050565b614ae981615270565b82525050565b614af8816152b3565b82525050565b614b07816152d7565b82525050565b6000614b18826150fd565b614b228185615126565b9350614b328185602086016152e9565b614b3b81615424565b840191505092915050565b6000614b53602383615126565b9150614b5e82615435565b604082019050919050565b6000614b76602a83615126565b9150614b8182615484565b604082019050919050565b6000614b99602683615126565b9150614ba4826154d3565b604082019050919050565b6000614bbc602283615126565b9150614bc782615522565b604082019050919050565b6000614bdf601b83615126565b9150614bea82615571565b602082019050919050565b6000614c02601b83615126565b9150614c0d8261559a565b602082019050919050565b6000614c25601f83615126565b9150614c30826155c3565b602082019050919050565b6000614c48602883615126565b9150614c53826155ec565b604082019050919050565b6000614c6b602183615126565b9150614c768261563b565b604082019050919050565b6000614c8e602083615126565b9150614c998261568a565b602082019050919050565b6000614cb1602983615126565b9150614cbc826156b3565b604082019050919050565b6000614cd4602583615126565b9150614cdf82615702565b604082019050919050565b6000614cf7602483615126565b9150614d0282615751565b604082019050919050565b6000614d1a601f83615126565b9150614d25826157a0565b602082019050919050565b6000614d3d602c83615126565b9150614d48826157c9565b604082019050919050565b6000614d60602383615126565b9150614d6b82615818565b604082019050919050565b614d7f8161529c565b82525050565b614d8e816152a6565b82525050565b6000602082019050614da96000830184614a73565b92915050565b6000602082019050614dc46000830184614a55565b92915050565b6000602082019050614ddf6000830184614ae0565b92915050565b6000602082019050614dfa6000830184614aef565b92915050565b60006020820190508181036000830152614e1a8184614b0d565b905092915050565b60006020820190508181036000830152614e3b81614b46565b9050919050565b60006020820190508181036000830152614e5b81614b69565b9050919050565b60006020820190508181036000830152614e7b81614b8c565b9050919050565b60006020820190508181036000830152614e9b81614baf565b9050919050565b60006020820190508181036000830152614ebb81614bd2565b9050919050565b60006020820190508181036000830152614edb81614bf5565b9050919050565b60006020820190508181036000830152614efb81614c18565b9050919050565b60006020820190508181036000830152614f1b81614c3b565b9050919050565b60006020820190508181036000830152614f3b81614c5e565b9050919050565b60006020820190508181036000830152614f5b81614c81565b9050919050565b60006020820190508181036000830152614f7b81614ca4565b9050919050565b60006020820190508181036000830152614f9b81614cc7565b9050919050565b60006020820190508181036000830152614fbb81614cea565b9050919050565b60006020820190508181036000830152614fdb81614d0d565b9050919050565b60006020820190508181036000830152614ffb81614d30565b9050919050565b6000602082019050818103600083015261501b81614d53565b9050919050565b60006020820190506150376000830184614d76565b92915050565b60006040820190506150526000830185614d76565b81810360208301526150648184614a82565b90509392505050565b600060a0820190506150826000830188614d76565b61508f6020830187614afe565b81810360408301526150a18186614a82565b90506150b06060830185614a73565b6150bd6080830184614d76565b9695505050505050565b60006020820190506150dc6000830184614d85565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006151428261529c565b915061514d8361529c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561518257615181615397565b5b828201905092915050565b60006151988261529c565b91506151a38361529c565b9250826151b3576151b26153c6565b5b828204905092915050565b60006151c98261529c565b91506151d48361529c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561520d5761520c615397565b5b828202905092915050565b60006152238261529c565b915061522e8361529c565b92508282101561524157615240615397565b5b828203905092915050565b60006152578261527c565b9050919050565b60006152698261527c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006152be826152c5565b9050919050565b60006152d08261527c565b9050919050565b60006152e28261529c565b9050919050565b60005b838110156153075780820151818401526020810190506152ec565b83811115615316576000848401525b50505050565b6000600282049050600182168061533457607f821691505b60208210811415615348576153476153f5565b5b50919050565b60006153598261529c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561538c5761538b615397565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b6158708161524c565b811461587b57600080fd5b50565b61588781615270565b811461589257600080fd5b50565b61589e8161529c565b81146158a957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122020e306b64f5d4883f98113e449440261a30d77ffa5393460f21c9b174be3a74f64736f6c63430008040033

Deployed Bytecode Sourcemap

15092:18737:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17868:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18782:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19903:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16492:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18147:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18951:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15361:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20959:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18056:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21563:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19272:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20128:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32303:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20515:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16550:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16625:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21220:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32172:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6490:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6392;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16673:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33413:116;;;;;;;;;;;;;:::i;:::-;;16220:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18250:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5984:148;;;;;;;;;;;;;:::i;:::-;;16365:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33537:116;;;;;;;;;;;;;:::i;:::-;;19775:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5770:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32540:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33085:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17961:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19998:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19498:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15240:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6822:305;;;;;;;;;;;;;:::i;:::-;;18456:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32789:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33234:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16321:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6588:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18631:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32422:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32670:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32909:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6140:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17868:83;17905:13;17938:5;17931:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17868:83;:::o;18782:161::-;18857:4;18874:39;18883:12;:10;:12::i;:::-;18897:7;18906:6;18874:8;:39::i;:::-;18931:4;18924:11;;18782:161;;;;:::o;19903:87::-;19945:7;19972:10;;19965:17;;19903:87;:::o;16492:51::-;;;:::o;18147:95::-;18200:7;18227;;18220:14;;18147:95;:::o;18951:313::-;19049:4;19066:36;19076:6;19084:9;19095:6;19066:9;:36::i;:::-;19113:121;19122:6;19130:12;:10;:12::i;:::-;19144:89;19182:6;19144:89;;;;;;;;;;;;;;;;;:11;:19;19156:6;19144:19;;;;;;;;;;;;;;;:33;19164:12;:10;:12::i;:::-;19144:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;19113:8;:121::i;:::-;19252:4;19245:11;;18951:313;;;;;:::o;15361:81::-;;;:::o;20959:253::-;21025:7;21064;;21053;:18;;21045:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21129:19;21152:10;:8;:10::i;:::-;21129:33;;21180:24;21192:11;21180:7;:11;;:24;;;;:::i;:::-;21173:31;;;20959:253;;;:::o;18056:83::-;18097:5;18122:9;;;;;;;;;;;18115:16;;18056:83;:::o;21563:479::-;5907:12;:10;:12::i;:::-;5897:22;;:6;;;;;;;;;;:22;;;5889:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21645:11:::1;:20;21657:7;21645:20;;;;;;;;;;;;;;;;;;;;;;;;;21637:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21713:9;21708:327;21732:9;:16;;;;21728:1;:20;21708:327;;;21790:7;21774:23;;:9;21784:1;21774:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;21770:254;;;21833:9;21862:1;21843:9;:16;;;;:20;;;;:::i;:::-;21833:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21818:9;21828:1;21818:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;21902:1;21883:7;:16;21891:7;21883:16;;;;;;;;;;;;;;;:20;;;;21945:5;21922:11;:20;21934:7;21922:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;21969:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22003:5;;21770:254;21750:3;;;;;:::i;:::-;;;;21708:327;;;;21563:479:::0;:::o;19272:218::-;19360:4;19377:83;19386:12;:10;:12::i;:::-;19400:7;19409:50;19448:10;19409:11;:25;19421:12;:10;:12::i;:::-;19409:25;;;;;;;;;;;;;;;:34;19435:7;19409:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19377:8;:83::i;:::-;19478:4;19471:11;;19272:218;;;;:::o;20128:377::-;20180:14;20197:12;:10;:12::i;:::-;20180:29;;20229:11;:19;20241:6;20229:19;;;;;;;;;;;;;;;;;;;;;;;;;20228:20;20220:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;20309:15;20333:19;20344:7;20333:10;:19::i;:::-;20308:44;;;;;;;20381:28;20401:7;20381;:15;20389:6;20381:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;20363:7;:15;20371:6;20363:15;;;;;;;;;;;;;;;:46;;;;20430:20;20442:7;20430;;:11;;:20;;;;:::i;:::-;20420:7;:30;;;;20474:23;20489:7;20474:10;;:14;;:23;;;;:::i;:::-;20461:10;:36;;;;20128:377;;;:::o;32303:111::-;5907:12;:10;:12::i;:::-;5897:22;;:6;;;;;;;;;;:22;;;5889:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32402:4:::1;32372:18;:27;32391:7;32372:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;32303:111:::0;:::o;20515:436::-;20605:7;20644;;20633;:18;;20625:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;20703:17;20698:246;;20738:15;20762:19;20773:7;20762:10;:19::i;:::-;20737:44;;;;;;;20803:7;20796:14;;;;;20698:246;20845:23;20876:19;20887:7;20876:10;:19::i;:::-;20843:52;;;;;;;20917:15;20910:22;;;20515:436;;;;;:::o;16550:38::-;;;:::o;16625:41::-;;;;;;;;;;;;;:::o;21220:335::-;5907:12;:10;:12::i;:::-;5897:22;;:6;;;;;;;;;;:22;;;5889:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21305:11:::1;:20;21317:7;21305:20;;;;;;;;;;;;;;;;;;;;;;;;;21304:21;21296:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21390:1;21371:7;:16;21379:7;21371:16;;;;;;;;;;;;;;;;:20;21368:108;;;21427:37;21447:7;:16;21455:7;21447:16;;;;;;;;;;;;;;;;21427:19;:37::i;:::-;21408:7;:16;21416:7;21408:16;;;;;;;;;;;;;;;:56;;;;21368:108;21509:4;21486:11;:20;21498:7;21486:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;21524:9;21539:7;21524:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21220:335:::0;:::o;32172:123::-;32236:4;32260:18;:27;32279:7;32260:27;;;;;;;;;;;;;;;;;;;;;;;;;32253:34;;32172:123;;;:::o;6490:90::-;6530:7;6557:15;6550:22;;6490:90;:::o;6392:::-;6438:7;6465:9;;6458:16;;6392:90;:::o;16673:33::-;;;;;;;;;;;;;:::o;33413:116::-;5907:12;:10;:12::i;:::-;5897:22;;:6;;;;;;;;;;:22;;;5889:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33462:31:::1;33487:5;33462:24;:31::i;:::-;33520:1;33504:13;:17;;;;33413:116::o:0;16220:32::-;;;;:::o;18250:198::-;18316:7;18340:11;:20;18352:7;18340:20;;;;;;;;;;;;;;;;;;;;;;;;;18336:49;;;18369:7;:16;18377:7;18369:16;;;;;;;;;;;;;;;;18362:23;;;;18336:49;18403:37;18423:7;:16;18431:7;18423:16;;;;;;;;;;;;;;;;18403:19;:37::i;:::-;18396:44;;18250:198;;;;:::o;5984:148::-;5907:12;:10;:12::i;:::-;5897:22;;:6;;;;;;;;;;:22;;;5889:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6091:1:::1;6054:40;;6075:6;::::0;::::1;;;;;;;;6054:40;;;;;;;;;;;;6122:1;6105:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5984:148::o:0;16365:50::-;;;;:::o;33537:116::-;5907:12;:10;:12::i;:::-;5897:22;;:6;;;;;;;;;;:22;;;5889:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33587:30:::1;33612:4;33587:24;:30::i;:::-;33644:1;33628:13;:17;;;;33537:116::o:0;19775:120::-;19843:4;19867:11;:20;19879:7;19867:20;;;;;;;;;;;;;;;;;;;;;;;;;19860:27;;19775:120;;;:::o;5770:79::-;5808:7;5835:6;;;;;;;;;;;5828:13;;5770:79;:::o;32540:122::-;5907:12;:10;:12::i;:::-;5897:22;;:6;;;;;;;;;;:22;;;5889:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32642:12:::1;32626:13;:28;;;;32540:122:::0;:::o;33085:141::-;5907:12;:10;:12::i;:::-;5897:22;;:6;;;;;;;;;;:22;;;5889:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33200:17:::1;33173:16;;:45;;;;;;;;;;;;;;;;;;33085:141:::0;:::o;17961:87::-;18000:13;18033:7;18026:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17961:87;:::o;19998:120::-;20060:7;20087:23;;20080:30;;19998:120;:::o;19498:269::-;19591:4;19608:129;19617:12;:10;:12::i;:::-;19631:7;19640:96;19679:15;19640:96;;;;;;;;;;;;;;;;;:11;:25;19652:12;:10;:12::i;:::-;19640:25;;;;;;;;;;;;;;;:34;19666:7;19640:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19608:8;:129::i;:::-;19755:4;19748:11;;19498:269;;;;:::o;15240:93::-;;;;;;;;;;;;;:::o;6822:305::-;6892:10;6874:28;;:14;;;;;;;;;;;:28;;;6866:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;6979:9;;6961:15;:27;6953:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;7070:14;;;;;;;;;;;7041:44;;7062:6;;;;;;;;;;7041:44;;;;;;;;;;;;7105:14;;;;;;;;;;;7096:6;;:23;;;;;;;;;;;;;;;;;;6822:305::o;18456:167::-;18534:4;18551:42;18561:12;:10;:12::i;:::-;18575:9;18586:6;18551:9;:42::i;:::-;18611:4;18604:11;;18456:167;;;;:::o;32789:112::-;5907:12;:10;:12::i;:::-;5897:22;;:6;;;;;;;;;;:22;;;5889:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32886:7:::1;32867:16;:26;;;;32789:112:::0;:::o;33234:171::-;5907:12;:10;:12::i;:::-;5897:22;;:6;;;;;;;;;;:22;;;5889:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33335:8:::1;33311:21;;:32;;;;;;;;;;;;;;;;;;33359:38;33388:8;33359:38;;;;;;:::i;:::-;;;;;;;;33234:171:::0;:::o;16321:35::-;;;;:::o;6588:226::-;5907:12;:10;:12::i;:::-;5897:22;;:6;;;;;;;;;;:22;;;5889:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6669:6:::1;::::0;::::1;;;;;;;;6652:14;;:23;;;;;;;;;;;;;;;;;;6703:1;6686:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6746:4;6728:15;:22;;;;:::i;:::-;6716:9;:34;;;;6803:1;6766:40;;6787:6;::::0;::::1;;;;;;;;6766:40;;;;;;;;;;;;6588:226:::0;:::o;18631:143::-;18712:7;18739:11;:18;18751:5;18739:18;;;;;;;;;;;;;;;:27;18758:7;18739:27;;;;;;;;;;;;;;;;18732:34;;18631:143;;;;:::o;32422:110::-;5907:12;:10;:12::i;:::-;5897:22;;:6;;;;;;;;;;:22;;;5889:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32519:5:::1;32489:18;:27;32508:7;32489:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;32422:110:::0;:::o;32670:111::-;5907:12;:10;:12::i;:::-;5897:22;;:6;;;;;;;;;;:22;;;5889:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32762:11:::1;32747:12;:26;;;;32670:111:::0;:::o;32909:166::-;5907:12;:10;:12::i;:::-;5897:22;;:6;;;;;;;;;;:22;;;5889:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33043:24:::1;33017:23;:50;;;;32909:166:::0;:::o;6140:244::-;5907:12;:10;:12::i;:::-;5897:22;;:6;;;;;;;;;;:22;;;5889:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6249:1:::1;6229:22;;:8;:22;;;;6221:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6339:8;6310:38;;6331:6;::::0;::::1;;;;;;;;6310:38;;;;;;;;;;;;6368:8;6359:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6140:244:::0;:::o;321:115::-;374:15;417:10;402:26;;321:115;:::o;22050:337::-;22160:1;22143:19;;:5;:19;;;;22135:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22241:1;22222:21;;:7;:21;;;;22214:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22325:6;22295:11;:18;22307:5;22295:18;;;;;;;;;;;;;;;:27;22314:7;22295:27;;;;;;;;;;;;;;;:36;;;;22363:7;22347:32;;22356:5;22347:32;;;22372:6;22347:32;;;;;;:::i;:::-;;;;;;;;22050:337;;;:::o;22395:1451::-;22533:1;22517:18;;:4;:18;;;;22509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22610:1;22596:16;;:2;:16;;;;22588:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22680:1;22671:6;:10;22663:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22749:7;:5;:7::i;:::-;22741:15;;:4;:15;;;;:32;;;;;22766:7;:5;:7::i;:::-;22760:13;;:2;:13;;;;22741:32;22738:187;;;22799:4;:10;22804:4;22799:10;;;;;;;;;;;;;;;;;;;;;;;;;22798:11;:24;;;;;22814:4;:8;22819:2;22814:8;;;;;;;;;;;;;;;;;;;;;;;;;22813:9;22798:24;22790:33;;;;;;22856:12;;22846:6;:22;;22838:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22738:187;22937:28;22968:24;22986:4;22968:9;:24::i;:::-;22937:55;;23003:16;23030:28;23085:23;;23061:20;:47;;23030:78;;23126:16;;;;;;;;;;;23125:17;:42;;;;;23146:21;;;;;;;;;;;23125:42;:65;;;;;23177:13;23171:19;;:2;:19;;;23125:65;23121:443;;;23211:23;23207:344;;;23278:64;23328:13;;23278:45;23306:16;;23278:23;;:27;;:45;;;;:::i;:::-;:49;;:64;;;;:::i;:::-;23255:87;;23398:20;23372:23;;:46;;;;:::i;:::-;23361:57;;23437:32;23448:20;23437:10;:32::i;:::-;23488:47;23506:4;23513:11;23526:8;23488:9;:47::i;:::-;23207:344;23121:443;23576:12;23591:4;23576:19;;23695:18;:24;23714:4;23695:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;23723:18;:22;23742:2;23723:22;;;;;;;;;;;;;;;;;;;;;;;;;23695:50;23692:96;;;23771:5;23761:15;;23692:96;23800:38;23815:4;23820:2;23823:6;23830:7;23800:14;:38::i;:::-;22395:1451;;;;;;;:::o;1726:192::-;1812:7;1845:1;1840;:6;;1848:12;1832:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1872:9;1888:1;1884;:5;;;;:::i;:::-;1872:17;;1909:1;1902:8;;;1726:192;;;;;:::o;30364:163::-;30405:7;30426:15;30443;30462:19;:17;:19::i;:::-;30425:56;;;;30499:20;30511:7;30499;:11;;:20;;;;:::i;:::-;30492:27;;;;30364:163;:::o;2186:132::-;2244:7;2271:39;2275:1;2278;2271:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2264:46;;2186:132;;;;:::o;1393:181::-;1451:7;1471:9;1487:1;1483;:5;;;;:::i;:::-;1471:17;;1512:1;1507;:6;;1499:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1565:1;1558:8;;;1393:181;;;;:::o;29162:419::-;29221:7;29230;29239;29248;29257;29266;29287:23;29312:12;29326:18;29348:20;29360:7;29348:11;:20::i;:::-;29286:82;;;;;;29380:15;29397:23;29422:12;29438:50;29450:7;29459:4;29465:10;29477;:8;:10::i;:::-;29438:11;:50::i;:::-;29379:109;;;;;;29507:7;29516:15;29533:4;29539:15;29556:4;29562:10;29499:74;;;;;;;;;;;;;;;;;;29162:419;;;;;;;:::o;1582:136::-;1640:7;1667:43;1671:1;1674;1667:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1660:50;;1582:136;;;;:::o;1926:250::-;1984:7;2013:1;2008;:6;2004:47;;;2038:1;2031:8;;;;2004:47;2063:9;2079:1;2075;:5;;;;:::i;:::-;2063:17;;2108:1;2103;2099;:5;;;;:::i;:::-;:10;2091:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2167:1;2160:8;;;1926:250;;;;;:::o;23854:377::-;17244:4;17225:16;;:23;;;;;;;;;;;;;;;;;;23937:22:::1;23962:21;23937:46;;23994:38;24011:20;23994:16;:38::i;:::-;24043:26;24072:41;24098:14;24072:21;:25;;:41;;;;:::i;:::-;24043:70;;24163:58;24184:16;;;;;;;;;;;24202:18;24163:20;:58::i;:::-;17259:1;;17290:5:::0;17271:16;;:24;;;;;;;;;;;;;;;;;;23854:377;:::o;26014:688::-;26125:7;26121:40;;26147:14;:12;:14::i;:::-;26121:40;26178:11;:19;26190:6;26178:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;26202:11;:22;26214:9;26202:22;;;;;;;;;;;;;;;;;;;;;;;;;26201:23;26178:46;26174:467;;;26241:48;26263:6;26271:9;26282:6;26241:21;:48::i;:::-;26174:467;;;26312:11;:19;26324:6;26312:19;;;;;;;;;;;;;;;;;;;;;;;;;26311:20;:46;;;;;26335:11;:22;26347:9;26335:22;;;;;;;;;;;;;;;;;;;;;;;;;26311:46;26307:334;;;26374:46;26394:6;26402:9;26413:6;26374:19;:46::i;:::-;26307:334;;;26442:11;:19;26454:6;26442:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;26465:11;:22;26477:9;26465:22;;;;;;;;;;;;;;;;;;;;;;;;;26442:45;26438:203;;;26504:48;26526:6;26534:9;26545:6;26504:21;:48::i;:::-;26438:203;;;26585:44;26603:6;26611:9;26622:6;26585:17;:44::i;:::-;26438:203;26307:334;26174:467;26657:7;26653:41;;26679:15;:13;:15::i;:::-;26653:41;26014:688;;;;:::o;30535:555::-;30585:7;30594;30614:15;30632:7;;30614:25;;30650:15;30668:7;;30650:25;;30691:9;30686:289;30710:9;:16;;;;30706:1;:20;30686:289;;;30776:7;30752;:21;30760:9;30770:1;30760:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30752:21;;;;;;;;;;;;;;;;:31;:66;;;;30811:7;30787;:21;30795:9;30805:1;30795:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30787:21;;;;;;;;;;;;;;;;:31;30752:66;30748:97;;;30828:7;;30837;;30820:25;;;;;;;;;30748:97;30870:34;30882:7;:21;30890:9;30900:1;30890:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30882:21;;;;;;;;;;;;;;;;30870:7;:11;;:34;;;;:::i;:::-;30860:44;;30929:34;30941:7;:21;30949:9;30959:1;30949:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30941:21;;;;;;;;;;;;;;;;30929:7;:11;;:34;;;;:::i;:::-;30919:44;;30728:3;;;;;:::i;:::-;;;;30686:289;;;;30999:20;31011:7;;30999;;:11;;:20;;;;:::i;:::-;30989:7;:30;30985:61;;;31029:7;;31038;;31021:25;;;;;;;;30985:61;31065:7;31074;31057:25;;;;;;30535:555;;;:::o;2326:278::-;2412:7;2444:1;2440;:5;2447:12;2432:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2471:9;2487:1;2483;:5;;;;:::i;:::-;2471:17;;2595:1;2588:8;;;2326:278;;;;;:::o;29589:330::-;29649:7;29658;29667;29687:12;29702:24;29718:7;29702:15;:24::i;:::-;29687:39;;29737:18;29758:30;29780:7;29758:21;:30::i;:::-;29737:51;;29799:23;29825:33;29847:10;29825:17;29837:4;29825:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;29799:59;;29877:15;29894:4;29900:10;29869:42;;;;;;;;;29589:330;;;;;:::o;29927:429::-;30042:7;30051;30060;30080:15;30098:24;30110:11;30098:7;:11;;:24;;;;:::i;:::-;30080:42;;30133:12;30148:21;30157:11;30148:4;:8;;:21;;;;:::i;:::-;30133:36;;30180:18;30201:27;30216:11;30201:10;:14;;:27;;;;:::i;:::-;30180:48;;30239:23;30265:33;30287:10;30265:17;30277:4;30265:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;30239:59;;30317:7;30326:15;30343:4;30309:39;;;;;;;;;;29927:429;;;;;;;;:::o;24245:658::-;24371:21;24409:1;24395:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24371:40;;24440:4;24422;24427:1;24422:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;24466:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24456:4;24461:1;24456:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;24501:62;24518:4;24533:15;24551:11;24501:8;:62::i;:::-;24602:15;:66;;;24683:11;24709:1;24753:4;24780;24816:15;24602:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24860:35;24877:11;24890:4;24860:35;;;;;;;:::i;:::-;;;;;;;;24245:658;;:::o;33661:126::-;33753:9;:18;;:26;33772:6;33753:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33661:126;;:::o;31797:234::-;31854:1;31843:7;;:12;:34;;;;;31876:1;31859:13;;:18;31843:34;31840:46;;;31879:7;;31840:46;31916:7;;31898:15;:25;;;;31958:13;;31934:21;:37;;;;31994:1;31984:7;:11;;;;32022:1;32006:13;:17;;;;31797:234;:::o;27800:560::-;27903:15;27920:23;27945:12;27959:23;27984:12;27998:18;28020:19;28031:7;28020:10;:19::i;:::-;27902:137;;;;;;;;;;;;28065:28;28085:7;28065;:15;28073:6;28065:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28047:7;:15;28055:6;28047:15;;;;;;;;;;;;;;;:46;;;;28122:28;28142:7;28122;:15;28130:6;28122:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28104:7;:15;28112:6;28104:15;;;;;;;;;;;;;;;:46;;;;28182:39;28205:15;28182:7;:18;28190:9;28182:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28161:7;:18;28169:9;28161:18;;;;;;;;;;;;;;;:60;;;;28232:26;28247:10;28232:14;:26::i;:::-;28269:23;28281:4;28287;28269:11;:23::i;:::-;28325:9;28308:44;;28317:6;28308:44;;;28336:15;28308:44;;;;;;:::i;:::-;;;;;;;;27800:560;;;;;;;;;:::o;27220:572::-;27321:15;27338:23;27363:12;27377:23;27402:12;27416:18;27438:19;27449:7;27438:10;:19::i;:::-;27320:137;;;;;;;;;;;;27483:28;27503:7;27483;:15;27491:6;27483:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27465:7;:15;27473:6;27465:15;;;;;;;;;;;;;;;:46;;;;27543:39;27566:15;27543:7;:18;27551:9;27543:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27522:7;:18;27530:9;27522:18;;;;;;;;;;;;;;;:60;;;;27614:39;27637:15;27614:7;:18;27622:9;27614:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27593:7;:18;27601:9;27593:18;;;;;;;;;;;;;;;:60;;;;27664:26;27679:10;27664:14;:26::i;:::-;27701:23;27713:4;27719;27701:11;:23::i;:::-;27757:9;27740:44;;27749:6;27740:44;;;27768:15;27740:44;;;;;;:::i;:::-;;;;;;;;27220:572;;;;;;;;;:::o;28368:631::-;28471:15;28488:23;28513:12;28527:23;28552:12;28566:18;28588:19;28599:7;28588:10;:19::i;:::-;28470:137;;;;;;;;;;;;28633:28;28653:7;28633;:15;28641:6;28633:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28615:7;:15;28623:6;28615:15;;;;;;;;;;;;;;;:46;;;;28690:28;28710:7;28690;:15;28698:6;28690:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28672:7;:15;28680:6;28672:15;;;;;;;;;;;;;;;:46;;;;28750:39;28773:15;28750:7;:18;28758:9;28750:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28729:7;:18;28737:9;28729:18;;;;;;;;;;;;;;;:60;;;;28821:39;28844:15;28821:7;:18;28829:9;28821:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28800:7;:18;28808:9;28800:18;;;;;;;;;;;;;;;:60;;;;28871:26;28886:10;28871:14;:26::i;:::-;28908:23;28920:4;28926;28908:11;:23::i;:::-;28964:9;28947:44;;28956:6;28947:44;;;28975:15;28947:44;;;;;;:::i;:::-;;;;;;;;28368:631;;;;;;;;;:::o;26710:502::-;26809:15;26826:23;26851:12;26865:23;26890:12;26904:18;26926:19;26937:7;26926:10;:19::i;:::-;26808:137;;;;;;;;;;;;26974:28;26994:7;26974;:15;26982:6;26974:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26956:7;:15;26964:6;26956:15;;;;;;;;;;;;;;;:46;;;;27034:39;27057:15;27034:7;:18;27042:9;27034:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27013:7;:18;27021:9;27013:18;;;;;;;;;;;;;;;:60;;;;27084:26;27099:10;27084:14;:26::i;:::-;27121:23;27133:4;27139;27121:11;:23::i;:::-;27177:9;27160:44;;27169:6;27160:44;;;27188:15;27160:44;;;;;;:::i;:::-;;;;;;;;26710:502;;;;;;;;;:::o;32039:125::-;32093:15;;32083:7;:25;;;;32135:21;;32119:13;:37;;;;32039:125::o;31461:154::-;31525:7;31552:55;31591:5;31552:20;31564:7;;31552;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;31545:62;;31461:154;;;:::o;31623:166::-;31693:7;31720:61;31765:5;31720:26;31732:13;;31720:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;31713:68;;31623:166;;;:::o;31098:355::-;31161:19;31184:10;:8;:10::i;:::-;31161:33;;31205:18;31226:27;31241:11;31226:10;:14;;:27;;;;:::i;:::-;31205:48;;31289:38;31316:10;31289:7;:22;31305:4;31289:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;31264:7;:22;31280:4;31264:22;;;;;;;;;;;;;;;:63;;;;31341:11;:26;31361:4;31341:26;;;;;;;;;;;;;;;;;;;;;;;;;31338:107;;;31407:38;31434:10;31407:7;:22;31423:4;31407:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;31382:7;:22;31398:4;31382:22;;;;;;;;;;;;;;;:63;;;;31338:107;31098:355;;;:::o;29007:147::-;29085:17;29097:4;29085:7;;:11;;:17;;;;:::i;:::-;29075:7;:27;;;;29126:20;29141:4;29126:10;;:14;;:20;;;;:::i;:::-;29113:10;:33;;;;29007:147;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:262::-;644:6;693:2;681:9;672:7;668:23;664:32;661:2;;;709:1;706;699:12;661:2;752:1;777:53;822:7;813:6;802:9;798:22;777:53;:::i;:::-;767:63;;723:117;651:196;;;;:::o;853:284::-;923:6;972:2;960:9;951:7;947:23;943:32;940:2;;;988:1;985;978:12;940:2;1031:1;1056:64;1112:7;1103:6;1092:9;1088:22;1056:64;:::i;:::-;1046:74;;1002:128;930:207;;;;:::o;1143:407::-;1211:6;1219;1268:2;1256:9;1247:7;1243:23;1239:32;1236:2;;;1284:1;1281;1274:12;1236:2;1327:1;1352:53;1397:7;1388:6;1377:9;1373:22;1352:53;:::i;:::-;1342:63;;1298:117;1454:2;1480:53;1525:7;1516:6;1505:9;1501:22;1480:53;:::i;:::-;1470:63;;1425:118;1226:324;;;;;:::o;1556:552::-;1633:6;1641;1649;1698:2;1686:9;1677:7;1673:23;1669:32;1666:2;;;1714:1;1711;1704:12;1666:2;1757:1;1782:53;1827:7;1818:6;1807:9;1803:22;1782:53;:::i;:::-;1772:63;;1728:117;1884:2;1910:53;1955:7;1946:6;1935:9;1931:22;1910:53;:::i;:::-;1900:63;;1855:118;2012:2;2038:53;2083:7;2074:6;2063:9;2059:22;2038:53;:::i;:::-;2028:63;;1983:118;1656:452;;;;;:::o;2114:407::-;2182:6;2190;2239:2;2227:9;2218:7;2214:23;2210:32;2207:2;;;2255:1;2252;2245:12;2207:2;2298:1;2323:53;2368:7;2359:6;2348:9;2344:22;2323:53;:::i;:::-;2313:63;;2269:117;2425:2;2451:53;2496:7;2487:6;2476:9;2472:22;2451:53;:::i;:::-;2441:63;;2396:118;2197:324;;;;;:::o;2527:256::-;2583:6;2632:2;2620:9;2611:7;2607:23;2603:32;2600:2;;;2648:1;2645;2638:12;2600:2;2691:1;2716:50;2758:7;2749:6;2738:9;2734:22;2716:50;:::i;:::-;2706:60;;2662:114;2590:193;;;;:::o;2789:262::-;2848:6;2897:2;2885:9;2876:7;2872:23;2868:32;2865:2;;;2913:1;2910;2903:12;2865:2;2956:1;2981:53;3026:7;3017:6;3006:9;3002:22;2981:53;:::i;:::-;2971:63;;2927:117;2855:196;;;;:::o;3057:401::-;3122:6;3130;3179:2;3167:9;3158:7;3154:23;3150:32;3147:2;;;3195:1;3192;3185:12;3147:2;3238:1;3263:53;3308:7;3299:6;3288:9;3284:22;3263:53;:::i;:::-;3253:63;;3209:117;3365:2;3391:50;3433:7;3424:6;3413:9;3409:22;3391:50;:::i;:::-;3381:60;;3336:115;3137:321;;;;;:::o;3464:179::-;3533:10;3554:46;3596:3;3588:6;3554:46;:::i;:::-;3632:4;3627:3;3623:14;3609:28;;3544:99;;;;:::o;3649:142::-;3752:32;3778:5;3752:32;:::i;:::-;3747:3;3740:45;3730:61;;:::o;3797:108::-;3874:24;3892:5;3874:24;:::i;:::-;3869:3;3862:37;3852:53;;:::o;3911:118::-;3998:24;4016:5;3998:24;:::i;:::-;3993:3;3986:37;3976:53;;:::o;4065:732::-;4184:3;4213:54;4261:5;4213:54;:::i;:::-;4283:86;4362:6;4357:3;4283:86;:::i;:::-;4276:93;;4393:56;4443:5;4393:56;:::i;:::-;4472:7;4503:1;4488:284;4513:6;4510:1;4507:13;4488:284;;;4589:6;4583:13;4616:63;4675:3;4660:13;4616:63;:::i;:::-;4609:70;;4702:60;4755:6;4702:60;:::i;:::-;4692:70;;4548:224;4535:1;4532;4528:9;4523:14;;4488:284;;;4492:14;4788:3;4781:10;;4189:608;;;;;;;:::o;4803:109::-;4884:21;4899:5;4884:21;:::i;:::-;4879:3;4872:34;4862:50;;:::o;4918:185::-;5032:64;5090:5;5032:64;:::i;:::-;5027:3;5020:77;5010:93;;:::o;5109:147::-;5204:45;5243:5;5204:45;:::i;:::-;5199:3;5192:58;5182:74;;:::o;5262:364::-;5350:3;5378:39;5411:5;5378:39;:::i;:::-;5433:71;5497:6;5492:3;5433:71;:::i;:::-;5426:78;;5513:52;5558:6;5553:3;5546:4;5539:5;5535:16;5513:52;:::i;:::-;5590:29;5612:6;5590:29;:::i;:::-;5585:3;5581:39;5574:46;;5354:272;;;;;:::o;5632:366::-;5774:3;5795:67;5859:2;5854:3;5795:67;:::i;:::-;5788:74;;5871:93;5960:3;5871:93;:::i;:::-;5989:2;5984:3;5980:12;5973:19;;5778:220;;;:::o;6004:366::-;6146:3;6167:67;6231:2;6226:3;6167:67;:::i;:::-;6160:74;;6243:93;6332:3;6243:93;:::i;:::-;6361:2;6356:3;6352:12;6345:19;;6150:220;;;:::o;6376:366::-;6518:3;6539:67;6603:2;6598:3;6539:67;:::i;:::-;6532:74;;6615:93;6704:3;6615:93;:::i;:::-;6733:2;6728:3;6724:12;6717:19;;6522:220;;;:::o;6748:366::-;6890:3;6911:67;6975:2;6970:3;6911:67;:::i;:::-;6904:74;;6987:93;7076:3;6987:93;:::i;:::-;7105:2;7100:3;7096:12;7089:19;;6894:220;;;:::o;7120:366::-;7262:3;7283:67;7347:2;7342:3;7283:67;:::i;:::-;7276:74;;7359:93;7448:3;7359:93;:::i;:::-;7477:2;7472:3;7468:12;7461:19;;7266:220;;;:::o;7492:366::-;7634:3;7655:67;7719:2;7714:3;7655:67;:::i;:::-;7648:74;;7731:93;7820:3;7731:93;:::i;:::-;7849:2;7844:3;7840:12;7833:19;;7638:220;;;:::o;7864:366::-;8006:3;8027:67;8091:2;8086:3;8027:67;:::i;:::-;8020:74;;8103:93;8192:3;8103:93;:::i;:::-;8221:2;8216:3;8212:12;8205:19;;8010:220;;;:::o;8236:366::-;8378:3;8399:67;8463:2;8458:3;8399:67;:::i;:::-;8392:74;;8475:93;8564:3;8475:93;:::i;:::-;8593:2;8588:3;8584:12;8577:19;;8382:220;;;:::o;8608:366::-;8750:3;8771:67;8835:2;8830:3;8771:67;:::i;:::-;8764:74;;8847:93;8936:3;8847:93;:::i;:::-;8965:2;8960:3;8956:12;8949:19;;8754:220;;;:::o;8980:366::-;9122:3;9143:67;9207:2;9202:3;9143:67;:::i;:::-;9136:74;;9219:93;9308:3;9219:93;:::i;:::-;9337:2;9332:3;9328:12;9321:19;;9126:220;;;:::o;9352:366::-;9494:3;9515:67;9579:2;9574:3;9515:67;:::i;:::-;9508:74;;9591:93;9680:3;9591:93;:::i;:::-;9709:2;9704:3;9700:12;9693:19;;9498:220;;;:::o;9724:366::-;9866:3;9887:67;9951:2;9946:3;9887:67;:::i;:::-;9880:74;;9963:93;10052:3;9963:93;:::i;:::-;10081:2;10076:3;10072:12;10065:19;;9870:220;;;:::o;10096:366::-;10238:3;10259:67;10323:2;10318:3;10259:67;:::i;:::-;10252:74;;10335:93;10424:3;10335:93;:::i;:::-;10453:2;10448:3;10444:12;10437:19;;10242:220;;;:::o;10468:366::-;10610:3;10631:67;10695:2;10690:3;10631:67;:::i;:::-;10624:74;;10707:93;10796:3;10707:93;:::i;:::-;10825:2;10820:3;10816:12;10809:19;;10614:220;;;:::o;10840:366::-;10982:3;11003:67;11067:2;11062:3;11003:67;:::i;:::-;10996:74;;11079:93;11168:3;11079:93;:::i;:::-;11197:2;11192:3;11188:12;11181:19;;10986:220;;;:::o;11212:366::-;11354:3;11375:67;11439:2;11434:3;11375:67;:::i;:::-;11368:74;;11451:93;11540:3;11451:93;:::i;:::-;11569:2;11564:3;11560:12;11553:19;;11358:220;;;:::o;11584:118::-;11671:24;11689:5;11671:24;:::i;:::-;11666:3;11659:37;11649:53;;:::o;11708:112::-;11791:22;11807:5;11791:22;:::i;:::-;11786:3;11779:35;11769:51;;:::o;11826:222::-;11919:4;11957:2;11946:9;11942:18;11934:26;;11970:71;12038:1;12027:9;12023:17;12014:6;11970:71;:::i;:::-;11924:124;;;;:::o;12054:254::-;12163:4;12201:2;12190:9;12186:18;12178:26;;12214:87;12298:1;12287:9;12283:17;12274:6;12214:87;:::i;:::-;12168:140;;;;:::o;12314:210::-;12401:4;12439:2;12428:9;12424:18;12416:26;;12452:65;12514:1;12503:9;12499:17;12490:6;12452:65;:::i;:::-;12406:118;;;;:::o;12530:276::-;12650:4;12688:2;12677:9;12673:18;12665:26;;12701:98;12796:1;12785:9;12781:17;12772:6;12701:98;:::i;:::-;12655:151;;;;:::o;12812:313::-;12925:4;12963:2;12952:9;12948:18;12940:26;;13012:9;13006:4;13002:20;12998:1;12987:9;12983:17;12976:47;13040:78;13113:4;13104:6;13040:78;:::i;:::-;13032:86;;12930:195;;;;:::o;13131:419::-;13297:4;13335:2;13324:9;13320:18;13312:26;;13384:9;13378:4;13374:20;13370:1;13359:9;13355:17;13348:47;13412:131;13538:4;13412:131;:::i;:::-;13404:139;;13302:248;;;:::o;13556:419::-;13722:4;13760:2;13749:9;13745:18;13737:26;;13809:9;13803:4;13799:20;13795:1;13784:9;13780:17;13773:47;13837:131;13963:4;13837:131;:::i;:::-;13829:139;;13727:248;;;:::o;13981:419::-;14147:4;14185:2;14174:9;14170:18;14162:26;;14234:9;14228:4;14224:20;14220:1;14209:9;14205:17;14198:47;14262:131;14388:4;14262:131;:::i;:::-;14254:139;;14152:248;;;:::o;14406:419::-;14572:4;14610:2;14599:9;14595:18;14587:26;;14659:9;14653:4;14649:20;14645:1;14634:9;14630:17;14623:47;14687:131;14813:4;14687:131;:::i;:::-;14679:139;;14577:248;;;:::o;14831:419::-;14997:4;15035:2;15024:9;15020:18;15012:26;;15084:9;15078:4;15074:20;15070:1;15059:9;15055:17;15048:47;15112:131;15238:4;15112:131;:::i;:::-;15104:139;;15002:248;;;:::o;15256:419::-;15422:4;15460:2;15449:9;15445:18;15437:26;;15509:9;15503:4;15499:20;15495:1;15484:9;15480:17;15473:47;15537:131;15663:4;15537:131;:::i;:::-;15529:139;;15427:248;;;:::o;15681:419::-;15847:4;15885:2;15874:9;15870:18;15862:26;;15934:9;15928:4;15924:20;15920:1;15909:9;15905:17;15898:47;15962:131;16088:4;15962:131;:::i;:::-;15954:139;;15852:248;;;:::o;16106:419::-;16272:4;16310:2;16299:9;16295:18;16287:26;;16359:9;16353:4;16349:20;16345:1;16334:9;16330:17;16323:47;16387:131;16513:4;16387:131;:::i;:::-;16379:139;;16277:248;;;:::o;16531:419::-;16697:4;16735:2;16724:9;16720:18;16712:26;;16784:9;16778:4;16774:20;16770:1;16759:9;16755:17;16748:47;16812:131;16938:4;16812:131;:::i;:::-;16804:139;;16702:248;;;:::o;16956:419::-;17122:4;17160:2;17149:9;17145:18;17137:26;;17209:9;17203:4;17199:20;17195:1;17184:9;17180:17;17173:47;17237:131;17363:4;17237:131;:::i;:::-;17229:139;;17127:248;;;:::o;17381:419::-;17547:4;17585:2;17574:9;17570:18;17562:26;;17634:9;17628:4;17624:20;17620:1;17609:9;17605:17;17598:47;17662:131;17788:4;17662:131;:::i;:::-;17654:139;;17552:248;;;:::o;17806:419::-;17972:4;18010:2;17999:9;17995:18;17987:26;;18059:9;18053:4;18049:20;18045:1;18034:9;18030:17;18023:47;18087:131;18213:4;18087:131;:::i;:::-;18079:139;;17977:248;;;:::o;18231:419::-;18397:4;18435:2;18424:9;18420:18;18412:26;;18484:9;18478:4;18474:20;18470:1;18459:9;18455:17;18448:47;18512:131;18638:4;18512:131;:::i;:::-;18504:139;;18402:248;;;:::o;18656:419::-;18822:4;18860:2;18849:9;18845:18;18837:26;;18909:9;18903:4;18899:20;18895:1;18884:9;18880:17;18873:47;18937:131;19063:4;18937:131;:::i;:::-;18929:139;;18827:248;;;:::o;19081:419::-;19247:4;19285:2;19274:9;19270:18;19262:26;;19334:9;19328:4;19324:20;19320:1;19309:9;19305:17;19298:47;19362:131;19488:4;19362:131;:::i;:::-;19354:139;;19252:248;;;:::o;19506:419::-;19672:4;19710:2;19699:9;19695:18;19687:26;;19759:9;19753:4;19749:20;19745:1;19734:9;19730:17;19723:47;19787:131;19913:4;19787:131;:::i;:::-;19779:139;;19677:248;;;:::o;19931:222::-;20024:4;20062:2;20051:9;20047:18;20039:26;;20075:71;20143:1;20132:9;20128:17;20119:6;20075:71;:::i;:::-;20029:124;;;;:::o;20159:483::-;20330:4;20368:2;20357:9;20353:18;20345:26;;20381:71;20449:1;20438:9;20434:17;20425:6;20381:71;:::i;:::-;20499:9;20493:4;20489:20;20484:2;20473:9;20469:18;20462:48;20527:108;20630:4;20621:6;20527:108;:::i;:::-;20519:116;;20335:307;;;;;:::o;20648:831::-;20911:4;20949:3;20938:9;20934:19;20926:27;;20963:71;21031:1;21020:9;21016:17;21007:6;20963:71;:::i;:::-;21044:80;21120:2;21109:9;21105:18;21096:6;21044:80;:::i;:::-;21171:9;21165:4;21161:20;21156:2;21145:9;21141:18;21134:48;21199:108;21302:4;21293:6;21199:108;:::i;:::-;21191:116;;21317:72;21385:2;21374:9;21370:18;21361:6;21317:72;:::i;:::-;21399:73;21467:3;21456:9;21452:19;21443:6;21399:73;:::i;:::-;20916:563;;;;;;;;:::o;21485:214::-;21574:4;21612:2;21601:9;21597:18;21589:26;;21625:67;21689:1;21678:9;21674:17;21665:6;21625:67;:::i;:::-;21579:120;;;;:::o;21705:132::-;21772:4;21795:3;21787:11;;21825:4;21820:3;21816:14;21808:22;;21777:60;;;:::o;21843:114::-;21910:6;21944:5;21938:12;21928:22;;21917:40;;;:::o;21963:99::-;22015:6;22049:5;22043:12;22033:22;;22022:40;;;:::o;22068:113::-;22138:4;22170;22165:3;22161:14;22153:22;;22143:38;;;:::o;22187:184::-;22286:11;22320:6;22315:3;22308:19;22360:4;22355:3;22351:14;22336:29;;22298:73;;;;:::o;22377:169::-;22461:11;22495:6;22490:3;22483:19;22535:4;22530:3;22526:14;22511:29;;22473:73;;;;:::o;22552:305::-;22592:3;22611:20;22629:1;22611:20;:::i;:::-;22606:25;;22645:20;22663:1;22645:20;:::i;:::-;22640:25;;22799:1;22731:66;22727:74;22724:1;22721:81;22718:2;;;22805:18;;:::i;:::-;22718:2;22849:1;22846;22842:9;22835:16;;22596:261;;;;:::o;22863:185::-;22903:1;22920:20;22938:1;22920:20;:::i;:::-;22915:25;;22954:20;22972:1;22954:20;:::i;:::-;22949:25;;22993:1;22983:2;;22998:18;;:::i;:::-;22983:2;23040:1;23037;23033:9;23028:14;;22905:143;;;;:::o;23054:348::-;23094:7;23117:20;23135:1;23117:20;:::i;:::-;23112:25;;23151:20;23169:1;23151:20;:::i;:::-;23146:25;;23339:1;23271:66;23267:74;23264:1;23261:81;23256:1;23249:9;23242:17;23238:105;23235:2;;;23346:18;;:::i;:::-;23235:2;23394:1;23391;23387:9;23376:20;;23102:300;;;;:::o;23408:191::-;23448:4;23468:20;23486:1;23468:20;:::i;:::-;23463:25;;23502:20;23520:1;23502:20;:::i;:::-;23497:25;;23541:1;23538;23535:8;23532:2;;;23546:18;;:::i;:::-;23532:2;23591:1;23588;23584:9;23576:17;;23453:146;;;;:::o;23605:96::-;23642:7;23671:24;23689:5;23671:24;:::i;:::-;23660:35;;23650:51;;;:::o;23707:104::-;23752:7;23781:24;23799:5;23781:24;:::i;:::-;23770:35;;23760:51;;;:::o;23817:90::-;23851:7;23894:5;23887:13;23880:21;23869:32;;23859:48;;;:::o;23913:126::-;23950:7;23990:42;23983:5;23979:54;23968:65;;23958:81;;;:::o;24045:77::-;24082:7;24111:5;24100:16;;24090:32;;;:::o;24128:86::-;24163:7;24203:4;24196:5;24192:16;24181:27;;24171:43;;;:::o;24220:180::-;24297:9;24330:64;24388:5;24330:64;:::i;:::-;24317:77;;24307:93;;;:::o;24406:140::-;24483:9;24516:24;24534:5;24516:24;:::i;:::-;24503:37;;24493:53;;;:::o;24552:121::-;24610:9;24643:24;24661:5;24643:24;:::i;:::-;24630:37;;24620:53;;;:::o;24679:307::-;24747:1;24757:113;24771:6;24768:1;24765:13;24757:113;;;24856:1;24851:3;24847:11;24841:18;24837:1;24832:3;24828:11;24821:39;24793:2;24790:1;24786:10;24781:15;;24757:113;;;24888:6;24885:1;24882:13;24879:2;;;24968:1;24959:6;24954:3;24950:16;24943:27;24879:2;24728:258;;;;:::o;24992:320::-;25036:6;25073:1;25067:4;25063:12;25053:22;;25120:1;25114:4;25110:12;25141:18;25131:2;;25197:4;25189:6;25185:17;25175:27;;25131:2;25259;25251:6;25248:14;25228:18;25225:38;25222:2;;;25278:18;;:::i;:::-;25222:2;25043:269;;;;:::o;25318:233::-;25357:3;25380:24;25398:5;25380:24;:::i;:::-;25371:33;;25426:66;25419:5;25416:77;25413:2;;;25496:18;;:::i;:::-;25413:2;25543:1;25536:5;25532:13;25525:20;;25361:190;;;:::o;25557:180::-;25605:77;25602:1;25595:88;25702:4;25699:1;25692:15;25726:4;25723:1;25716:15;25743:180;25791:77;25788:1;25781:88;25888:4;25885:1;25878:15;25912:4;25909:1;25902:15;25929:180;25977:77;25974:1;25967:88;26074:4;26071:1;26064:15;26098:4;26095:1;26088:15;26115:102;26156:6;26207:2;26203:7;26198:2;26191:5;26187:14;26183:28;26173:38;;26163:54;;;:::o;26223:222::-;26363:34;26359:1;26351:6;26347:14;26340:58;26432:5;26427:2;26419:6;26415:15;26408:30;26329:116;:::o;26451:229::-;26591:34;26587:1;26579:6;26575:14;26568:58;26660:12;26655:2;26647:6;26643:15;26636:37;26557:123;:::o;26686:225::-;26826:34;26822:1;26814:6;26810:14;26803:58;26895:8;26890:2;26882:6;26878:15;26871:33;26792:119;:::o;26917:221::-;27057:34;27053:1;27045:6;27041:14;27034:58;27126:4;27121:2;27113:6;27109:15;27102:29;27023:115;:::o;27144:177::-;27284:29;27280:1;27272:6;27268:14;27261:53;27250:71;:::o;27327:177::-;27467:29;27463:1;27455:6;27451:14;27444:53;27433:71;:::o;27510:181::-;27650:33;27646:1;27638:6;27634:14;27627:57;27616:75;:::o;27697:227::-;27837:34;27833:1;27825:6;27821:14;27814:58;27906:10;27901:2;27893:6;27889:15;27882:35;27803:121;:::o;27930:220::-;28070:34;28066:1;28058:6;28054:14;28047:58;28139:3;28134:2;28126:6;28122:15;28115:28;28036:114;:::o;28156:182::-;28296:34;28292:1;28284:6;28280:14;28273:58;28262:76;:::o;28344:228::-;28484:34;28480:1;28472:6;28468:14;28461:58;28553:11;28548:2;28540:6;28536:15;28529:36;28450:122;:::o;28578:224::-;28718:34;28714:1;28706:6;28702:14;28695:58;28787:7;28782:2;28774:6;28770:15;28763:32;28684:118;:::o;28808:223::-;28948:34;28944:1;28936:6;28932:14;28925:58;29017:6;29012:2;29004:6;29000:15;28993:31;28914:117;:::o;29037:181::-;29177:33;29173:1;29165:6;29161:14;29154:57;29143:75;:::o;29224:231::-;29364:34;29360:1;29352:6;29348:14;29341:58;29433:14;29428:2;29420:6;29416:15;29409:39;29330:125;:::o;29461:222::-;29601:34;29597:1;29589:6;29585:14;29578:58;29670:5;29665:2;29657:6;29653:15;29646:30;29567:116;:::o;29689:122::-;29762:24;29780:5;29762:24;:::i;:::-;29755:5;29752:35;29742:2;;29801:1;29798;29791:12;29742:2;29732:79;:::o;29817:116::-;29887:21;29902:5;29887:21;:::i;:::-;29880:5;29877:32;29867:2;;29923:1;29920;29913:12;29867:2;29857:76;:::o;29939:122::-;30012:24;30030:5;30012:24;:::i;:::-;30005:5;30002:35;29992:2;;30051:1;30048;30041:12;29992:2;29982:79;:::o

Swarm Source

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