ETH Price: $3,416.36 (+3.03%)

Token

Lelouch Lamperouge (ZERO)
 

Overview

Max Total Supply

1,000,000,000 ZERO

Holders

635

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.663032578 ZERO

Value
$0.00
0x729aac9048dd6c07d30e589087360ef1934b3a2c
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:
Zero

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
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) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

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

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

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

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    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;
    }
}

// pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

// pragma solidity >=0.5.0;

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// pragma solidity >=0.6.2;

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

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

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

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

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

contract Zero is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    address payable public marketingWallet;
    address payable public raffleWallet;
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isBot;

    uint256 public launchedAt = 0;

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

    uint8 private _decimals = 9;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Lelouch Lamperouge";
    string private _symbol = "ZERO";

    uint256 private reflectionFee = 0;

    uint256 public liquidityFee = 2;
    uint256 public marketingFee = 7;
    uint256 public raffleFee = 2;
    uint256 public totalFee = liquidityFee.add(marketingFee).add(raffleFee);
    uint256 private currenttotalFee = totalFee;

    uint256 public swapThreshold = _tTotal.div(1000).mul(1); //0.1%

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwap;

    bool tradingOpen = false;
    bool zeroBuyTaxmode = true;

    event SwapETHForTokens(uint256 amountIn, address[] path);

    event SwapTokensForETH(uint256 amountIn, address[] path);

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

    constructor() {
        _rOwned[_msgSender()] = _rTotal;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

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

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

    function openTrading() external onlyOwner {
        require(!tradingOpen);
        tradingOpen = true;
        excludeFromReward(address(this));
        excludeFromReward(uniswapV2Pair);
        launchedAt = block.number;
    }

    function setNewRouter(address newRouter) external onlyOwner {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(
            address(this),
            _newRouter.WETH()
        );
        if (get_pair == address(0)) {
            uniswapV2Pair = IUniswapV2Factory(_newRouter.factory()).createPair(
                address(this),
                _newRouter.WETH()
            );
        } else {
            uniswapV2Pair = get_pair;
        }
        uniswapV2Router = _newRouter;
    }

    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 zeroBuyingFeesMode() public view returns (bool) {
        return zeroBuyTaxmode;
    }

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

    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 {
        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");
        require(!_isBot[to], "You have no power here!");
        require(!_isBot[from], "You have no power here!");
        if (from != owner() && to != owner())
            require(tradingOpen, "Trading not yet enabled.");

        //no fee on regular wallet transfers
        bool takeFee = false;
        if (
            (from == uniswapV2Pair || to == uniswapV2Pair) &&
            !(_isExcludedFromFee[from] || _isExcludedFromFee[to])
        ) {
            takeFee = true;
        }

        currenttotalFee = totalFee;

        //buys on same block that trading begins are automatically set as bots
        if (launchedAt == block.number) _isBot[to] = true;

        //no buy fees if zeroBuyTaxmode is true
        if (zeroBuyTaxmode && from == uniswapV2Pair) currenttotalFee = 0;

        //sell
        if (!inSwap && tradingOpen && to == uniswapV2Pair) {
            //handle fees collected in the contract
            uint256 contractTokenBalance = balanceOf(address(this));

            if (contractTokenBalance >= swapThreshold) {
                contractTokenBalance = swapThreshold;
                swapTokens(contractTokenBalance);
            }
        }
        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        //calculate fees and liquidity amounts
        uint256 amountToLiquify = contractTokenBalance
            .mul(liquidityFee)
            .div(totalFee)
            .div(2);

        uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);

        swapTokensForEth(amountToSwap);

        uint256 amountETH = address(this).balance;

        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH
            .mul(liquidityFee)
            .div(totalETHFee)
            .div(2);

        uint256 amountETHraffle = amountETH.mul(raffleFee).div(totalETHFee);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(
            totalETHFee
        );

        //Send to marketing wallet and raffle wallet
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            sendETHToFee(amountETHMarketing, marketingWallet);
            sendETHToFee(amountETHraffle, raffleWallet);
        }

        //add liquidity
        if (amountToLiquify > 0) {
            addLiquidity(amountToLiquify, amountETHLiquidity);
        }
    }

    function sendETHToFee(uint256 amount, address payable wallet) private {
        wallet.transfer(amount);
    }

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

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

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

        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        uint256 _previousReflectionFee = reflectionFee;
        uint256 _previousTotalFee = currenttotalFee;
        if (!takeFee) {
            reflectionFee = 0;
            currenttotalFee = 0;
        }

        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) {
            reflectionFee = _previousReflectionFee;
            currenttotalFee = _previousTotalFee;
        }
    }

    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 = tAmount.mul(reflectionFee).div(100);
        uint256 tLiquidity = tAmount.mul(currenttotalFee).div(100);
        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 excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

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

    function setWallets(address _marketingWallet, address _raffleWallet)
        external
        onlyOwner
    {
        marketingWallet = payable(_marketingWallet);
        raffleWallet = payable(_raffleWallet);
    }

    function setFees(
        uint256 _reflectionFee,
        uint256 _liquidityFee,
        uint256 _raffleFee,
        uint256 _marketingFee,
        bool _buyTaxMode
    ) external onlyOwner {
        //calculate fees sum to ensure that it's an acceptable number
        uint256 feesSum = _reflectionFee +
            _liquidityFee +
            _raffleFee +
            _marketingFee;

        if (_buyTaxMode) {
            //if there are buying fees, max total fees can be 10%
            require(feesSum < 10);
        } else {
            //otherwise, if fees are applicable only on sells, max total can be up to 20%
            require(feesSum < 20);
        }
        reflectionFee = _reflectionFee;
        liquidityFee = _liquidityFee;
        raffleFee = _raffleFee;
        marketingFee = _marketingFee;
        totalFee = liquidityFee.add(marketingFee).add(raffleFee);
        zeroBuyTaxmode = _buyTaxMode;
    }

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

    function isBot(address account) public view returns (bool) {
        return _isBot[account];
    }

    function setBots(address[] calldata addresses, bool status)
        public
        onlyOwner
    {
        for (uint256 i; i < addresses.length; ++i) {
            //making sure that LP can not get blacklisted
            if (addresses[i] != uniswapV2Pair) _isBot[addresses[i]] = status;
        }
    }

    function withdrawETH(address payable receipient) public onlyOwner {
        receipient.transfer(address(this).balance);
    }

    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":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":"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":[{"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":"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":[{"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":"isBot","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":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"raffleFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"raffleWallet","outputs":[{"internalType":"address payable","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":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_raffleFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"bool","name":"_buyTaxMode","type":"bool"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_raffleWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","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":[{"internalType":"address payable","name":"receipient","type":"address"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroBuyingFeesMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006009556009600d60006101000a81548160ff021916908360ff160217905550600d60009054906101000a900460ff16600a62000043919062000b99565b633b9aca0062000054919062000cd6565b600e55600e5460001962000069919062000e29565b60001962000078919062000d37565b600f556040518060400160405280601281526020017f4c656c6f756368204c616d7065726f756765000000000000000000000000000081525060119080519060200190620000c892919062000831565b506040518060400160405280600481526020017f5a45524f00000000000000000000000000000000000000000000000000000000815250601290805190602001906200011692919062000831565b50600060135560026014556007601555600260165562000164601654620001506015546014546200065f60201b620028491790919060201c565b6200065f60201b620028491790919060201c565b601755601754601855620001a56001620001916103e8600e54620006c260201b620028a71790919060201c565b6200071460201b620028f11790919060201c565b6019556000601b60156101000a81548160ff0219169083151502179055506001601b60166101000a81548160ff021916908315150217905550348015620001eb57600080fd5b506000620001fe6200079860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600f5460056000620002b36200079860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035157600080fd5b505afa15801562000366573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038c9190620008f8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003ef57600080fd5b505afa15801562000404573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042a9190620008f8565b6040518363ffffffff1660e01b815260040162000449929190620009db565b602060405180830381600087803b1580156200046457600080fd5b505af115801562000479573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200049f9190620008f8565b601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a600062000536620007a060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005ef6200079860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e5460405162000650919062000a70565b60405180910390a35062000fa3565b600080828462000670919062000aa9565b905083811015620006b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006af9062000a2c565b60405180910390fd5b8091505092915050565b60006200070c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620007c960201b60201c565b905092915050565b60008083141562000729576000905062000792565b6000828462000739919062000cd6565b90508284826200074a919062000b06565b146200078d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007849062000a4e565b60405180910390fd5b809150505b92915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000808311829062000813576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200080a919062000a08565b60405180910390fd5b506000838562000824919062000b06565b9050809150509392505050565b8280546200083f9062000df3565b90600052602060002090601f016020900481019282620008635760008555620008af565b82601f106200087e57805160ff1916838001178555620008af565b82800160010185558215620008af579182015b82811115620008ae57825182559160200191906001019062000891565b5b509050620008be9190620008c2565b5090565b5b80821115620008dd576000816000905550600101620008c3565b5090565b600081519050620008f28162000f89565b92915050565b60006020828403121562000911576200091062000eee565b5b60006200092184828501620008e1565b91505092915050565b620009358162000d72565b82525050565b6000620009488262000a8d565b62000954818562000a98565b93506200096681856020860162000dbd565b620009718162000ef3565b840191505092915050565b60006200098b601b8362000a98565b9150620009988262000f11565b602082019050919050565b6000620009b260218362000a98565b9150620009bf8262000f3a565b604082019050919050565b620009d58162000da6565b82525050565b6000604082019050620009f260008301856200092a565b62000a0160208301846200092a565b9392505050565b6000602082019050818103600083015262000a2481846200093b565b905092915050565b6000602082019050818103600083015262000a47816200097c565b9050919050565b6000602082019050818103600083015262000a6981620009a3565b9050919050565b600060208201905062000a876000830184620009ca565b92915050565b600081519050919050565b600082825260208201905092915050565b600062000ab68262000da6565b915062000ac38362000da6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000afb5762000afa62000e61565b5b828201905092915050565b600062000b138262000da6565b915062000b208362000da6565b92508262000b335762000b3262000e90565b5b828204905092915050565b6000808291508390505b600185111562000b905780860481111562000b685762000b6762000e61565b5b600185161562000b785780820291505b808102905062000b888562000f04565b945062000b48565b94509492505050565b600062000ba68262000da6565b915062000bb38362000db0565b925062000be27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000bea565b905092915050565b60008262000bfc576001905062000ccf565b8162000c0c576000905062000ccf565b816001811462000c25576002811462000c305762000c66565b600191505062000ccf565b60ff84111562000c455762000c4462000e61565b5b8360020a91508482111562000c5f5762000c5e62000e61565b5b5062000ccf565b5060208310610133831016604e8410600b841016171562000ca05782820a90508381111562000c9a5762000c9962000e61565b5b62000ccf565b62000caf848484600162000b3e565b9250905081840481111562000cc95762000cc862000e61565b5b81810290505b9392505050565b600062000ce38262000da6565b915062000cf08362000da6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d2c5762000d2b62000e61565b5b828202905092915050565b600062000d448262000da6565b915062000d518362000da6565b92508282101562000d675762000d6662000e61565b5b828203905092915050565b600062000d7f8262000d86565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101562000ddd57808201518184015260208101905062000dc0565b8381111562000ded576000848401525b50505050565b6000600282049050600182168062000e0c57607f821691505b6020821081141562000e235762000e2262000ebf565b5b50919050565b600062000e368262000da6565b915062000e438362000da6565b92508262000e565762000e5562000e90565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b62000f948162000d72565b811462000fa057600080fd5b50565b615d928062000fb36000396000f3fe60806040526004361061024a5760003560e01c8063690d8320116101395780639c0db5f3116100b6578063d3f6a1571161007a578063d3f6a157146108b5578063dd62ed3e146108de578063ea2f0b371461091b578063eafb5a3c14610944578063f2fde38b1461096d578063f947d2e91461099657610251565b80639c0db5f3146107d0578063a457c2d7146107f9578063a9059cbb14610836578063bf56b37114610873578063c9567bf91461089e57610251565b80637f87dce9116100fd5780637f87dce9146106e757806388f82020146107125780638da5cb5b1461074f57806395d89b411461077a57806398118cb4146107a557610251565b8063690d8320146106145780636b67c4df1461063d57806370a0823114610668578063715018a6146106a557806375f0a874146106bc57610251565b806332d382cd116101c75780633bd5d1731161018b5780633bd5d17314610531578063437823ec1461055a5780634549b0391461058357806349bd5a5e146105c057806352390c02146105eb57610251565b806332d382cd1461043a57806335c50030146104655780633685d4191461048e57806339509351146104b75780633bbac579146104f457610251565b806318160ddd1161020e57806318160ddd1461033f5780631df4ccfc1461036a57806323b872dd146103955780632d838119146103d2578063313ce5671461040f57610251565b80630445b6671461025657806306fdde0314610281578063095ea7b3146102ac57806313114a9d146102e95780631694505e1461031457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109c1565b604051610278919061542b565b60405180910390f35b34801561028d57600080fd5b506102966109c7565b6040516102a39190615229565b60405180910390f35b3480156102b857600080fd5b506102d360048036038101906102ce9190614c24565b610a59565b6040516102e091906151f3565b60405180910390f35b3480156102f557600080fd5b506102fe610a77565b60405161030b919061542b565b60405180910390f35b34801561032057600080fd5b50610329610a81565b604051610336919061520e565b60405180910390f35b34801561034b57600080fd5b50610354610aa7565b604051610361919061542b565b60405180910390f35b34801561037657600080fd5b5061037f610ab1565b60405161038c919061542b565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b79190614bd1565b610ab7565b6040516103c991906151f3565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190614cc4565b610b90565b604051610406919061542b565b60405180910390f35b34801561041b57600080fd5b50610424610bfe565b60405161043191906154d0565b60405180910390f35b34801561044657600080fd5b5061044f610c15565b60405161045c919061514e565b60405180910390f35b34801561047157600080fd5b5061048c60048036038101906104879190614d84565b610c3b565b005b34801561049a57600080fd5b506104b560048036038101906104b09190614b0a565b610d8b565b005b3480156104c357600080fd5b506104de60048036038101906104d99190614c24565b6110da565b6040516104eb91906151f3565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190614b0a565b61118d565b60405161052891906151f3565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190614cc4565b6111e3565b005b34801561056657600080fd5b50610581600480360381019061057c9190614b0a565b61135e565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190614cf1565b61144e565b6040516105b7919061542b565b60405180910390f35b3480156105cc57600080fd5b506105d56114d2565b6040516105e29190615133565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190614b0a565b6114f8565b005b34801561062057600080fd5b5061063b60048036038101906106369190614b64565b61171f565b005b34801561064957600080fd5b506106526117fe565b60405161065f919061542b565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190614b0a565b611804565b60405161069c919061542b565b60405180910390f35b3480156106b157600080fd5b506106ba6118ef565b005b3480156106c857600080fd5b506106d1611a42565b6040516106de919061514e565b60405180910390f35b3480156106f357600080fd5b506106fc611a68565b604051610709919061542b565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190614b0a565b611a6e565b60405161074691906151f3565b60405180910390f35b34801561075b57600080fd5b50610764611ac4565b6040516107719190615133565b60405180910390f35b34801561078657600080fd5b5061078f611aed565b60405161079c9190615229565b60405180910390f35b3480156107b157600080fd5b506107ba611b7f565b6040516107c7919061542b565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f29190614c64565b611b85565b005b34801561080557600080fd5b50610820600480360381019061081b9190614c24565b611d3a565b60405161082d91906151f3565b60405180910390f35b34801561084257600080fd5b5061085d60048036038101906108589190614c24565b611e07565b60405161086a91906151f3565b60405180910390f35b34801561087f57600080fd5b50610888611e25565b604051610895919061542b565b60405180910390f35b3480156108aa57600080fd5b506108b3611e2b565b005b3480156108c157600080fd5b506108dc60048036038101906108d79190614b91565b611f32565b005b3480156108ea57600080fd5b5061090560048036038101906109009190614b91565b61204d565b604051610912919061542b565b60405180910390f35b34801561092757600080fd5b50610942600480360381019061093d9190614b0a565b6120d4565b005b34801561095057600080fd5b5061096b60048036038101906109669190614b0a565b6121c4565b005b34801561097957600080fd5b50610994600480360381019061098f9190614b0a565b612670565b005b3480156109a257600080fd5b506109ab612832565b6040516109b891906151f3565b60405180910390f35b60195481565b6060601180546109d690615737565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0290615737565b8015610a4f5780601f10610a2457610100808354040283529160200191610a4f565b820191906000526020600020905b815481529060010190602001808311610a3257829003601f168201915b5050505050905090565b6000610a6d610a6661296c565b8484612974565b6001905092915050565b6000601754905090565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e54905090565b60175481565b6000610ac4848484612b3f565b610b8584610ad061296c565b610b8085604051806060016040528060288152602001615d1060289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b3661296c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131499092919063ffffffff16565b612974565b600190509392505050565b6000600f54821115610bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bce9061526b565b60405180910390fd5b6000610be16131ad565b9050610bf681846128a790919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c4361296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc79061534b565b60405180910390fd5b600082848688610ce09190615540565b610cea9190615540565b610cf49190615540565b90508115610d0e57600a8110610d0957600080fd5b610d1c565b60148110610d1b57600080fd5b5b85601381905550846014819055508360168190555082601581905550610d63601654610d5560155460145461284990919063ffffffff16565b61284990919063ffffffff16565b60178190555081601b60166101000a81548160ff021916908315150217905550505050505050565b610d9361296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e179061534b565b60405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea3906152eb565b60405180910390fd5b60005b600c805490508110156110d6578173ffffffffffffffffffffffffffffffffffffffff16600c8281548110610ee757610ee661586e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110c357600c6001600c80549050610f429190615621565b81548110610f5357610f5261586e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c8281548110610f9257610f9161586e565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c8054806110895761108861583f565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556110d6565b80806110ce90615769565b915050610eaf565b5050565b60006111836110e761296c565b8461117e85600760006110f861296c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284990919063ffffffff16565b612974565b6001905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006111ed61296c565b9050600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561127c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611273906153eb565b60405180910390fd5b6000611287836131d8565b505050505090506112e081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323490919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061133881600f5461323490919063ffffffff16565b600f819055506113538360105461284990919063ffffffff16565b601081905550505050565b61136661296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea9061534b565b60405180910390fd5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600e54831115611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c9061530b565b60405180910390fd5b816114b55760006114a5846131d8565b50505050509050809150506114cc565b60006114c0846131d8565b50505050915050809150505b92915050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61150061296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115849061534b565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116615761161d600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b90565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61172761296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ab9061534b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156117fa573d6000803e3d6000fd5b5050565b60155481565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561189f57600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506118ea565b6118e7600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b90565b90505b919050565b6118f761296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b9061534b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060128054611afc90615737565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2890615737565b8015611b755780601f10611b4a57610100808354040283529160200191611b75565b820191906000526020600020905b815481529060010190602001808311611b5857829003601f168201915b5050505050905090565b60145481565b611b8d61296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c119061534b565b60405180910390fd5b60005b83839050811015611d3457601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16848483818110611c7457611c7361586e565b5b9050602002016020810190611c899190614b0a565b73ffffffffffffffffffffffffffffffffffffffff1614611d23578160086000868685818110611cbc57611cbb61586e565b5b9050602002016020810190611cd19190614b0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80611d2d90615769565b9050611c1d565b50505050565b6000611dfd611d4761296c565b84611df885604051806060016040528060258152602001615d386025913960076000611d7161296c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131499092919063ffffffff16565b612974565b6001905092915050565b6000611e1b611e1461296c565b8484612b3f565b6001905092915050565b60095481565b611e3361296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb79061534b565b60405180910390fd5b601b60159054906101000a900460ff1615611eda57600080fd5b6001601b60156101000a81548160ff021916908315150217905550611efe306114f8565b611f29601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114f8565b43600981905550565b611f3a61296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbe9061534b565b60405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120dc61296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612169576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121609061534b565b60405180910390fd5b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6121cc61296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612259576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122509061534b565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156122a657600080fd5b505afa1580156122ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122de9190614b37565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561234057600080fd5b505afa158015612354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123789190614b37565b6040518363ffffffff1660e01b8152600401612395929190615169565b60206040518083038186803b1580156123ad57600080fd5b505afa1580156123c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e59190614b37565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125e8578173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561246257600080fd5b505afa158015612476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249a9190614b37565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156124fc57600080fd5b505afa158015612510573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125349190614b37565b6040518363ffffffff1660e01b8152600401612551929190615169565b602060405180830381600087803b15801561256b57600080fd5b505af115801561257f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a39190614b37565b601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061262a565b80601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b81601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b61267861296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc9061534b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276c9061528b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601b60169054906101000a900460ff16905090565b60008082846128589190615540565b90508381101561289d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612894906152cb565b60405180910390fd5b8091505092915050565b60006128e983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061327e565b905092915050565b6000808314156129045760009050612966565b6000828461291291906155c7565b90508284826129219190615596565b14612961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129589061532b565b60405180910390fd5b809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db906153ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b906152ab565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b32919061542b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba69061538b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c169061524b565b60405180910390fd5b60008111612c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c599061536b565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce69061540b565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d739061540b565b60405180910390fd5b612d84611ac4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612df25750612dc2611ac4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e4757601b60159054906101000a900460ff16612e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3d906153cb565b60405180910390fd5b5b6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ef25750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8015612f9c5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f9a5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b15612fa657600190505b601754601881905550436009541415613012576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601b60169054906101000a900460ff16801561307b5750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156130895760006018819055505b601b60149054906101000a900460ff161580156130b25750601b60159054906101000a900460ff165b801561310b5750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561313757600061311b30611804565b90506019548110613135576019549050613134816132e1565b5b505b613143848484846134c4565b50505050565b6000838311158290613191576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131889190615229565b60405180910390fd5b50600083856131a09190615621565b9050809150509392505050565b60008060006131ba613739565b915091506131d181836128a790919063ffffffff16565b9250505090565b60008060008060008060008060006131ef8a6139ec565b925092509250600080600061320d8d86866132086131ad565b613a84565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061327683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613149565b905092915050565b600080831182906132c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132bc9190615229565b60405180910390fd5b50600083856132d49190615596565b9050809150509392505050565b6001601b60146101000a81548160ff021916908315150217905550600061333a600261332c60175461331e601454876128f190919063ffffffff16565b6128a790919063ffffffff16565b6128a790919063ffffffff16565b90506000613351828461323490919063ffffffff16565b905061335c81613b0d565b6000479050600061338d61337c60026014546128a790919063ffffffff16565b60175461323490919063ffffffff16565b905060006133cb60026133bd846133af601454886128f190919063ffffffff16565b6128a790919063ffffffff16565b6128a790919063ffffffff16565b905060006133f6836133e8601654876128f190919063ffffffff16565b6128a790919063ffffffff16565b9050600061342184613413601554886128f190919063ffffffff16565b6128a790919063ffffffff16565b90506000479050600081111561348a5761345d82600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613d98565b61348983600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613d98565b5b600088111561349e5761349d8885613de3565b5b50505050505050506000601b60146101000a81548160ff02191690831515021790555050565b6000601354905060006018549050826134e857600060138190555060006018819055505b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561358b5750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135a05761359b868686613ed7565b61371d565b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136435750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561365857613653868686614137565b61371c565b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136fa5750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561370f5761370a868686614397565b61371b565b61371a86868661468c565b5b5b5b826137315781601381905550806018819055505b505050505050565b6000806000600f5490506000600e54905060005b600c805490508110156139af578260056000600c84815481106137735761377261586e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061386157508160066000600c84815481106137f9576137f861586e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561387857600f54600e54945094505050506139e8565b61390860056000600c84815481106138935761389261586e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461323490919063ffffffff16565b925061399a60066000600c84815481106139255761392461586e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361323490919063ffffffff16565b915080806139a790615769565b91505061374d565b506139c7600e54600f546128a790919063ffffffff16565b8210156139df57600f54600e549350935050506139e8565b81819350935050505b9091565b600080600080613a1a6064613a0c601354886128f190919063ffffffff16565b6128a790919063ffffffff16565b90506000613a466064613a38601854896128f190919063ffffffff16565b6128a790919063ffffffff16565b90506000613a6f82613a61858a61323490919063ffffffff16565b61323490919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613a9d85896128f190919063ffffffff16565b90506000613ab486896128f190919063ffffffff16565b90506000613acb87896128f190919063ffffffff16565b90506000613af482613ae6858761323490919063ffffffff16565b61323490919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115613b2a57613b2961589d565b5b604051908082528060200260200182016040528015613b585781602001602082028036833780820191505090505b5090503081600081518110613b7057613b6f61586e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613c1257600080fd5b505afa158015613c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c4a9190614b37565b81600181518110613c5e57613c5d61586e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613cc530601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612974565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d29959493929190615476565b600060405180830381600087803b158015613d4357600080fd5b505af1158015613d57573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613d8c929190615446565b60405180910390a15050565b8073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613dde573d6000803e3d6000fd5b505050565b613e1030601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612974565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613e5c611ac4565b426040518863ffffffff1660e01b8152600401613e7e96959493929190615192565b6060604051808303818588803b158015613e9757600080fd5b505af1158015613eab573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ed09190614d31565b5050505050565b600080600080600080613ee9876131d8565b955095509550955095509550613f4787600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323490919063ffffffff16565b600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fdc86600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323490919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061407185600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284990919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140bd81614857565b6140c784836149fc565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614124919061542b565b60405180910390a3505050505050505050565b600080600080600080614149876131d8565b9550955095509550955095506141a786600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323490919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061423c83600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284990919063ffffffff16565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142d185600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284990919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061431d81614857565b61432784836149fc565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614384919061542b565b60405180910390a3505050505050505050565b6000806000806000806143a9876131d8565b95509550955095509550955061440787600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323490919063ffffffff16565b600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449c86600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323490919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061453183600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284990919063ffffffff16565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145c685600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284990919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061461281614857565b61461c84836149fc565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614679919061542b565b60405180910390a3505050505050505050565b60008060008060008061469e876131d8565b9550955095509550955095506146fc86600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323490919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061479185600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284990919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147dd81614857565b6147e784836149fc565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614844919061542b565b60405180910390a3505050505050505050565b60006148616131ad565b9050600061487882846128f190919063ffffffff16565b90506148cc81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284990919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156149f7576149b383600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284990919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614a1182600f5461323490919063ffffffff16565b600f81905550614a2c8160105461284990919063ffffffff16565b6010819055505050565b600081359050614a4581615cb3565b92915050565b600081519050614a5a81615cb3565b92915050565b600081359050614a6f81615cca565b92915050565b60008083601f840112614a8b57614a8a6158d1565b5b8235905067ffffffffffffffff811115614aa857614aa76158cc565b5b602083019150836020820283011115614ac457614ac36158d6565b5b9250929050565b600081359050614ada81615ce1565b92915050565b600081359050614aef81615cf8565b92915050565b600081519050614b0481615cf8565b92915050565b600060208284031215614b2057614b1f6158e0565b5b6000614b2e84828501614a36565b91505092915050565b600060208284031215614b4d57614b4c6158e0565b5b6000614b5b84828501614a4b565b91505092915050565b600060208284031215614b7a57614b796158e0565b5b6000614b8884828501614a60565b91505092915050565b60008060408385031215614ba857614ba76158e0565b5b6000614bb685828601614a36565b9250506020614bc785828601614a36565b9150509250929050565b600080600060608486031215614bea57614be96158e0565b5b6000614bf886828701614a36565b9350506020614c0986828701614a36565b9250506040614c1a86828701614ae0565b9150509250925092565b60008060408385031215614c3b57614c3a6158e0565b5b6000614c4985828601614a36565b9250506020614c5a85828601614ae0565b9150509250929050565b600080600060408486031215614c7d57614c7c6158e0565b5b600084013567ffffffffffffffff811115614c9b57614c9a6158db565b5b614ca786828701614a75565b93509350506020614cba86828701614acb565b9150509250925092565b600060208284031215614cda57614cd96158e0565b5b6000614ce884828501614ae0565b91505092915050565b60008060408385031215614d0857614d076158e0565b5b6000614d1685828601614ae0565b9250506020614d2785828601614acb565b9150509250929050565b600080600060608486031215614d4a57614d496158e0565b5b6000614d5886828701614af5565b9350506020614d6986828701614af5565b9250506040614d7a86828701614af5565b9150509250925092565b600080600080600060a08688031215614da057614d9f6158e0565b5b6000614dae88828901614ae0565b9550506020614dbf88828901614ae0565b9450506040614dd088828901614ae0565b9350506060614de188828901614ae0565b9250506080614df288828901614acb565b9150509295509295909350565b6000614e0b8383614e26565b60208301905092915050565b614e2081615667565b82525050565b614e2f81615655565b82525050565b614e3e81615655565b82525050565b6000614e4f826154fb565b614e59818561551e565b9350614e64836154eb565b8060005b83811015614e95578151614e7c8882614dff565b9750614e8783615511565b925050600181019050614e68565b5085935050505092915050565b614eab81615679565b82525050565b614eba816156bc565b82525050565b614ec9816156ce565b82525050565b6000614eda82615506565b614ee4818561552f565b9350614ef4818560208601615704565b614efd816158e5565b840191505092915050565b6000614f1560238361552f565b9150614f20826158f6565b604082019050919050565b6000614f38602a8361552f565b9150614f4382615945565b604082019050919050565b6000614f5b60268361552f565b9150614f6682615994565b604082019050919050565b6000614f7e60228361552f565b9150614f89826159e3565b604082019050919050565b6000614fa1601b8361552f565b9150614fac82615a32565b602082019050919050565b6000614fc4601b8361552f565b9150614fcf82615a5b565b602082019050919050565b6000614fe7601f8361552f565b9150614ff282615a84565b602082019050919050565b600061500a60218361552f565b915061501582615aad565b604082019050919050565b600061502d60208361552f565b915061503882615afc565b602082019050919050565b600061505060298361552f565b915061505b82615b25565b604082019050919050565b600061507360258361552f565b915061507e82615b74565b604082019050919050565b600061509660248361552f565b91506150a182615bc3565b604082019050919050565b60006150b960188361552f565b91506150c482615c12565b602082019050919050565b60006150dc602c8361552f565b91506150e782615c3b565b604082019050919050565b60006150ff60178361552f565b915061510a82615c8a565b602082019050919050565b61511e816156a5565b82525050565b61512d816156af565b82525050565b60006020820190506151486000830184614e35565b92915050565b60006020820190506151636000830184614e17565b92915050565b600060408201905061517e6000830185614e35565b61518b6020830184614e35565b9392505050565b600060c0820190506151a76000830189614e35565b6151b46020830188615115565b6151c16040830187614ec0565b6151ce6060830186614ec0565b6151db6080830185614e35565b6151e860a0830184615115565b979650505050505050565b60006020820190506152086000830184614ea2565b92915050565b60006020820190506152236000830184614eb1565b92915050565b600060208201905081810360008301526152438184614ecf565b905092915050565b6000602082019050818103600083015261526481614f08565b9050919050565b6000602082019050818103600083015261528481614f2b565b9050919050565b600060208201905081810360008301526152a481614f4e565b9050919050565b600060208201905081810360008301526152c481614f71565b9050919050565b600060208201905081810360008301526152e481614f94565b9050919050565b6000602082019050818103600083015261530481614fb7565b9050919050565b6000602082019050818103600083015261532481614fda565b9050919050565b6000602082019050818103600083015261534481614ffd565b9050919050565b6000602082019050818103600083015261536481615020565b9050919050565b6000602082019050818103600083015261538481615043565b9050919050565b600060208201905081810360008301526153a481615066565b9050919050565b600060208201905081810360008301526153c481615089565b9050919050565b600060208201905081810360008301526153e4816150ac565b9050919050565b60006020820190508181036000830152615404816150cf565b9050919050565b60006020820190508181036000830152615424816150f2565b9050919050565b60006020820190506154406000830184615115565b92915050565b600060408201905061545b6000830185615115565b818103602083015261546d8184614e44565b90509392505050565b600060a08201905061548b6000830188615115565b6154986020830187614ec0565b81810360408301526154aa8186614e44565b90506154b96060830185614e35565b6154c66080830184615115565b9695505050505050565b60006020820190506154e56000830184615124565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061554b826156a5565b9150615556836156a5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561558b5761558a6157b2565b5b828201905092915050565b60006155a1826156a5565b91506155ac836156a5565b9250826155bc576155bb6157e1565b5b828204905092915050565b60006155d2826156a5565b91506155dd836156a5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615616576156156157b2565b5b828202905092915050565b600061562c826156a5565b9150615637836156a5565b92508282101561564a576156496157b2565b5b828203905092915050565b600061566082615685565b9050919050565b600061567282615685565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006156c7826156e0565b9050919050565b60006156d9826156a5565b9050919050565b60006156eb826156f2565b9050919050565b60006156fd82615685565b9050919050565b60005b83811015615722578082015181840152602081019050615707565b83811115615731576000848401525b50505050565b6000600282049050600182168061574f57607f821691505b6020821081141561576357615762615810565b5b50919050565b6000615774826156a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156157a7576157a66157b2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f752068617665206e6f20706f776572206865726521000000000000000000600082015250565b615cbc81615655565b8114615cc757600080fd5b50565b615cd381615667565b8114615cde57600080fd5b50565b615cea81615679565b8114615cf557600080fd5b50565b615d01816156a5565b8114615d0c57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206759a3052de0d0c07943c7fef07066ab35becf8851b4408de377416b0d90151364736f6c63430008070033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c8063690d8320116101395780639c0db5f3116100b6578063d3f6a1571161007a578063d3f6a157146108b5578063dd62ed3e146108de578063ea2f0b371461091b578063eafb5a3c14610944578063f2fde38b1461096d578063f947d2e91461099657610251565b80639c0db5f3146107d0578063a457c2d7146107f9578063a9059cbb14610836578063bf56b37114610873578063c9567bf91461089e57610251565b80637f87dce9116100fd5780637f87dce9146106e757806388f82020146107125780638da5cb5b1461074f57806395d89b411461077a57806398118cb4146107a557610251565b8063690d8320146106145780636b67c4df1461063d57806370a0823114610668578063715018a6146106a557806375f0a874146106bc57610251565b806332d382cd116101c75780633bd5d1731161018b5780633bd5d17314610531578063437823ec1461055a5780634549b0391461058357806349bd5a5e146105c057806352390c02146105eb57610251565b806332d382cd1461043a57806335c50030146104655780633685d4191461048e57806339509351146104b75780633bbac579146104f457610251565b806318160ddd1161020e57806318160ddd1461033f5780631df4ccfc1461036a57806323b872dd146103955780632d838119146103d2578063313ce5671461040f57610251565b80630445b6671461025657806306fdde0314610281578063095ea7b3146102ac57806313114a9d146102e95780631694505e1461031457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109c1565b604051610278919061542b565b60405180910390f35b34801561028d57600080fd5b506102966109c7565b6040516102a39190615229565b60405180910390f35b3480156102b857600080fd5b506102d360048036038101906102ce9190614c24565b610a59565b6040516102e091906151f3565b60405180910390f35b3480156102f557600080fd5b506102fe610a77565b60405161030b919061542b565b60405180910390f35b34801561032057600080fd5b50610329610a81565b604051610336919061520e565b60405180910390f35b34801561034b57600080fd5b50610354610aa7565b604051610361919061542b565b60405180910390f35b34801561037657600080fd5b5061037f610ab1565b60405161038c919061542b565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b79190614bd1565b610ab7565b6040516103c991906151f3565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190614cc4565b610b90565b604051610406919061542b565b60405180910390f35b34801561041b57600080fd5b50610424610bfe565b60405161043191906154d0565b60405180910390f35b34801561044657600080fd5b5061044f610c15565b60405161045c919061514e565b60405180910390f35b34801561047157600080fd5b5061048c60048036038101906104879190614d84565b610c3b565b005b34801561049a57600080fd5b506104b560048036038101906104b09190614b0a565b610d8b565b005b3480156104c357600080fd5b506104de60048036038101906104d99190614c24565b6110da565b6040516104eb91906151f3565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190614b0a565b61118d565b60405161052891906151f3565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190614cc4565b6111e3565b005b34801561056657600080fd5b50610581600480360381019061057c9190614b0a565b61135e565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190614cf1565b61144e565b6040516105b7919061542b565b60405180910390f35b3480156105cc57600080fd5b506105d56114d2565b6040516105e29190615133565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190614b0a565b6114f8565b005b34801561062057600080fd5b5061063b60048036038101906106369190614b64565b61171f565b005b34801561064957600080fd5b506106526117fe565b60405161065f919061542b565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190614b0a565b611804565b60405161069c919061542b565b60405180910390f35b3480156106b157600080fd5b506106ba6118ef565b005b3480156106c857600080fd5b506106d1611a42565b6040516106de919061514e565b60405180910390f35b3480156106f357600080fd5b506106fc611a68565b604051610709919061542b565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190614b0a565b611a6e565b60405161074691906151f3565b60405180910390f35b34801561075b57600080fd5b50610764611ac4565b6040516107719190615133565b60405180910390f35b34801561078657600080fd5b5061078f611aed565b60405161079c9190615229565b60405180910390f35b3480156107b157600080fd5b506107ba611b7f565b6040516107c7919061542b565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f29190614c64565b611b85565b005b34801561080557600080fd5b50610820600480360381019061081b9190614c24565b611d3a565b60405161082d91906151f3565b60405180910390f35b34801561084257600080fd5b5061085d60048036038101906108589190614c24565b611e07565b60405161086a91906151f3565b60405180910390f35b34801561087f57600080fd5b50610888611e25565b604051610895919061542b565b60405180910390f35b3480156108aa57600080fd5b506108b3611e2b565b005b3480156108c157600080fd5b506108dc60048036038101906108d79190614b91565b611f32565b005b3480156108ea57600080fd5b5061090560048036038101906109009190614b91565b61204d565b604051610912919061542b565b60405180910390f35b34801561092757600080fd5b50610942600480360381019061093d9190614b0a565b6120d4565b005b34801561095057600080fd5b5061096b60048036038101906109669190614b0a565b6121c4565b005b34801561097957600080fd5b50610994600480360381019061098f9190614b0a565b612670565b005b3480156109a257600080fd5b506109ab612832565b6040516109b891906151f3565b60405180910390f35b60195481565b6060601180546109d690615737565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0290615737565b8015610a4f5780601f10610a2457610100808354040283529160200191610a4f565b820191906000526020600020905b815481529060010190602001808311610a3257829003601f168201915b5050505050905090565b6000610a6d610a6661296c565b8484612974565b6001905092915050565b6000601754905090565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e54905090565b60175481565b6000610ac4848484612b3f565b610b8584610ad061296c565b610b8085604051806060016040528060288152602001615d1060289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b3661296c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131499092919063ffffffff16565b612974565b600190509392505050565b6000600f54821115610bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bce9061526b565b60405180910390fd5b6000610be16131ad565b9050610bf681846128a790919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c4361296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc79061534b565b60405180910390fd5b600082848688610ce09190615540565b610cea9190615540565b610cf49190615540565b90508115610d0e57600a8110610d0957600080fd5b610d1c565b60148110610d1b57600080fd5b5b85601381905550846014819055508360168190555082601581905550610d63601654610d5560155460145461284990919063ffffffff16565b61284990919063ffffffff16565b60178190555081601b60166101000a81548160ff021916908315150217905550505050505050565b610d9361296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e179061534b565b60405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea3906152eb565b60405180910390fd5b60005b600c805490508110156110d6578173ffffffffffffffffffffffffffffffffffffffff16600c8281548110610ee757610ee661586e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110c357600c6001600c80549050610f429190615621565b81548110610f5357610f5261586e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c8281548110610f9257610f9161586e565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c8054806110895761108861583f565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556110d6565b80806110ce90615769565b915050610eaf565b5050565b60006111836110e761296c565b8461117e85600760006110f861296c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284990919063ffffffff16565b612974565b6001905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006111ed61296c565b9050600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561127c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611273906153eb565b60405180910390fd5b6000611287836131d8565b505050505090506112e081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323490919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061133881600f5461323490919063ffffffff16565b600f819055506113538360105461284990919063ffffffff16565b601081905550505050565b61136661296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea9061534b565b60405180910390fd5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600e54831115611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c9061530b565b60405180910390fd5b816114b55760006114a5846131d8565b50505050509050809150506114cc565b60006114c0846131d8565b50505050915050809150505b92915050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61150061296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115849061534b565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116615761161d600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b90565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61172761296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ab9061534b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156117fa573d6000803e3d6000fd5b5050565b60155481565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561189f57600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506118ea565b6118e7600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b90565b90505b919050565b6118f761296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b9061534b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060128054611afc90615737565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2890615737565b8015611b755780601f10611b4a57610100808354040283529160200191611b75565b820191906000526020600020905b815481529060010190602001808311611b5857829003601f168201915b5050505050905090565b60145481565b611b8d61296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c119061534b565b60405180910390fd5b60005b83839050811015611d3457601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16848483818110611c7457611c7361586e565b5b9050602002016020810190611c899190614b0a565b73ffffffffffffffffffffffffffffffffffffffff1614611d23578160086000868685818110611cbc57611cbb61586e565b5b9050602002016020810190611cd19190614b0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80611d2d90615769565b9050611c1d565b50505050565b6000611dfd611d4761296c565b84611df885604051806060016040528060258152602001615d386025913960076000611d7161296c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131499092919063ffffffff16565b612974565b6001905092915050565b6000611e1b611e1461296c565b8484612b3f565b6001905092915050565b60095481565b611e3361296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb79061534b565b60405180910390fd5b601b60159054906101000a900460ff1615611eda57600080fd5b6001601b60156101000a81548160ff021916908315150217905550611efe306114f8565b611f29601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114f8565b43600981905550565b611f3a61296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbe9061534b565b60405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120dc61296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612169576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121609061534b565b60405180910390fd5b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6121cc61296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612259576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122509061534b565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156122a657600080fd5b505afa1580156122ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122de9190614b37565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561234057600080fd5b505afa158015612354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123789190614b37565b6040518363ffffffff1660e01b8152600401612395929190615169565b60206040518083038186803b1580156123ad57600080fd5b505afa1580156123c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e59190614b37565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125e8578173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561246257600080fd5b505afa158015612476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249a9190614b37565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156124fc57600080fd5b505afa158015612510573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125349190614b37565b6040518363ffffffff1660e01b8152600401612551929190615169565b602060405180830381600087803b15801561256b57600080fd5b505af115801561257f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a39190614b37565b601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061262a565b80601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b81601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b61267861296c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc9061534b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276c9061528b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601b60169054906101000a900460ff16905090565b60008082846128589190615540565b90508381101561289d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612894906152cb565b60405180910390fd5b8091505092915050565b60006128e983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061327e565b905092915050565b6000808314156129045760009050612966565b6000828461291291906155c7565b90508284826129219190615596565b14612961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129589061532b565b60405180910390fd5b809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db906153ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b906152ab565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b32919061542b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba69061538b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c169061524b565b60405180910390fd5b60008111612c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c599061536b565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce69061540b565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d739061540b565b60405180910390fd5b612d84611ac4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612df25750612dc2611ac4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e4757601b60159054906101000a900460ff16612e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3d906153cb565b60405180910390fd5b5b6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ef25750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8015612f9c5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f9a5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b15612fa657600190505b601754601881905550436009541415613012576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601b60169054906101000a900460ff16801561307b5750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156130895760006018819055505b601b60149054906101000a900460ff161580156130b25750601b60159054906101000a900460ff165b801561310b5750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561313757600061311b30611804565b90506019548110613135576019549050613134816132e1565b5b505b613143848484846134c4565b50505050565b6000838311158290613191576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131889190615229565b60405180910390fd5b50600083856131a09190615621565b9050809150509392505050565b60008060006131ba613739565b915091506131d181836128a790919063ffffffff16565b9250505090565b60008060008060008060008060006131ef8a6139ec565b925092509250600080600061320d8d86866132086131ad565b613a84565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061327683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613149565b905092915050565b600080831182906132c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132bc9190615229565b60405180910390fd5b50600083856132d49190615596565b9050809150509392505050565b6001601b60146101000a81548160ff021916908315150217905550600061333a600261332c60175461331e601454876128f190919063ffffffff16565b6128a790919063ffffffff16565b6128a790919063ffffffff16565b90506000613351828461323490919063ffffffff16565b905061335c81613b0d565b6000479050600061338d61337c60026014546128a790919063ffffffff16565b60175461323490919063ffffffff16565b905060006133cb60026133bd846133af601454886128f190919063ffffffff16565b6128a790919063ffffffff16565b6128a790919063ffffffff16565b905060006133f6836133e8601654876128f190919063ffffffff16565b6128a790919063ffffffff16565b9050600061342184613413601554886128f190919063ffffffff16565b6128a790919063ffffffff16565b90506000479050600081111561348a5761345d82600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613d98565b61348983600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613d98565b5b600088111561349e5761349d8885613de3565b5b50505050505050506000601b60146101000a81548160ff02191690831515021790555050565b6000601354905060006018549050826134e857600060138190555060006018819055505b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561358b5750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135a05761359b868686613ed7565b61371d565b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136435750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561365857613653868686614137565b61371c565b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136fa5750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561370f5761370a868686614397565b61371b565b61371a86868661468c565b5b5b5b826137315781601381905550806018819055505b505050505050565b6000806000600f5490506000600e54905060005b600c805490508110156139af578260056000600c84815481106137735761377261586e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061386157508160066000600c84815481106137f9576137f861586e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561387857600f54600e54945094505050506139e8565b61390860056000600c84815481106138935761389261586e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461323490919063ffffffff16565b925061399a60066000600c84815481106139255761392461586e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361323490919063ffffffff16565b915080806139a790615769565b91505061374d565b506139c7600e54600f546128a790919063ffffffff16565b8210156139df57600f54600e549350935050506139e8565b81819350935050505b9091565b600080600080613a1a6064613a0c601354886128f190919063ffffffff16565b6128a790919063ffffffff16565b90506000613a466064613a38601854896128f190919063ffffffff16565b6128a790919063ffffffff16565b90506000613a6f82613a61858a61323490919063ffffffff16565b61323490919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613a9d85896128f190919063ffffffff16565b90506000613ab486896128f190919063ffffffff16565b90506000613acb87896128f190919063ffffffff16565b90506000613af482613ae6858761323490919063ffffffff16565b61323490919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115613b2a57613b2961589d565b5b604051908082528060200260200182016040528015613b585781602001602082028036833780820191505090505b5090503081600081518110613b7057613b6f61586e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613c1257600080fd5b505afa158015613c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c4a9190614b37565b81600181518110613c5e57613c5d61586e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613cc530601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612974565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d29959493929190615476565b600060405180830381600087803b158015613d4357600080fd5b505af1158015613d57573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613d8c929190615446565b60405180910390a15050565b8073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613dde573d6000803e3d6000fd5b505050565b613e1030601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612974565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613e5c611ac4565b426040518863ffffffff1660e01b8152600401613e7e96959493929190615192565b6060604051808303818588803b158015613e9757600080fd5b505af1158015613eab573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ed09190614d31565b5050505050565b600080600080600080613ee9876131d8565b955095509550955095509550613f4787600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323490919063ffffffff16565b600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fdc86600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323490919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061407185600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284990919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140bd81614857565b6140c784836149fc565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614124919061542b565b60405180910390a3505050505050505050565b600080600080600080614149876131d8565b9550955095509550955095506141a786600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323490919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061423c83600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284990919063ffffffff16565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142d185600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284990919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061431d81614857565b61432784836149fc565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614384919061542b565b60405180910390a3505050505050505050565b6000806000806000806143a9876131d8565b95509550955095509550955061440787600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323490919063ffffffff16565b600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449c86600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323490919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061453183600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284990919063ffffffff16565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145c685600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284990919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061461281614857565b61461c84836149fc565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614679919061542b565b60405180910390a3505050505050505050565b60008060008060008061469e876131d8565b9550955095509550955095506146fc86600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323490919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061479185600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284990919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147dd81614857565b6147e784836149fc565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614844919061542b565b60405180910390a3505050505050505050565b60006148616131ad565b9050600061487882846128f190919063ffffffff16565b90506148cc81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284990919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156149f7576149b383600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284990919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614a1182600f5461323490919063ffffffff16565b600f81905550614a2c8160105461284990919063ffffffff16565b6010819055505050565b600081359050614a4581615cb3565b92915050565b600081519050614a5a81615cb3565b92915050565b600081359050614a6f81615cca565b92915050565b60008083601f840112614a8b57614a8a6158d1565b5b8235905067ffffffffffffffff811115614aa857614aa76158cc565b5b602083019150836020820283011115614ac457614ac36158d6565b5b9250929050565b600081359050614ada81615ce1565b92915050565b600081359050614aef81615cf8565b92915050565b600081519050614b0481615cf8565b92915050565b600060208284031215614b2057614b1f6158e0565b5b6000614b2e84828501614a36565b91505092915050565b600060208284031215614b4d57614b4c6158e0565b5b6000614b5b84828501614a4b565b91505092915050565b600060208284031215614b7a57614b796158e0565b5b6000614b8884828501614a60565b91505092915050565b60008060408385031215614ba857614ba76158e0565b5b6000614bb685828601614a36565b9250506020614bc785828601614a36565b9150509250929050565b600080600060608486031215614bea57614be96158e0565b5b6000614bf886828701614a36565b9350506020614c0986828701614a36565b9250506040614c1a86828701614ae0565b9150509250925092565b60008060408385031215614c3b57614c3a6158e0565b5b6000614c4985828601614a36565b9250506020614c5a85828601614ae0565b9150509250929050565b600080600060408486031215614c7d57614c7c6158e0565b5b600084013567ffffffffffffffff811115614c9b57614c9a6158db565b5b614ca786828701614a75565b93509350506020614cba86828701614acb565b9150509250925092565b600060208284031215614cda57614cd96158e0565b5b6000614ce884828501614ae0565b91505092915050565b60008060408385031215614d0857614d076158e0565b5b6000614d1685828601614ae0565b9250506020614d2785828601614acb565b9150509250929050565b600080600060608486031215614d4a57614d496158e0565b5b6000614d5886828701614af5565b9350506020614d6986828701614af5565b9250506040614d7a86828701614af5565b9150509250925092565b600080600080600060a08688031215614da057614d9f6158e0565b5b6000614dae88828901614ae0565b9550506020614dbf88828901614ae0565b9450506040614dd088828901614ae0565b9350506060614de188828901614ae0565b9250506080614df288828901614acb565b9150509295509295909350565b6000614e0b8383614e26565b60208301905092915050565b614e2081615667565b82525050565b614e2f81615655565b82525050565b614e3e81615655565b82525050565b6000614e4f826154fb565b614e59818561551e565b9350614e64836154eb565b8060005b83811015614e95578151614e7c8882614dff565b9750614e8783615511565b925050600181019050614e68565b5085935050505092915050565b614eab81615679565b82525050565b614eba816156bc565b82525050565b614ec9816156ce565b82525050565b6000614eda82615506565b614ee4818561552f565b9350614ef4818560208601615704565b614efd816158e5565b840191505092915050565b6000614f1560238361552f565b9150614f20826158f6565b604082019050919050565b6000614f38602a8361552f565b9150614f4382615945565b604082019050919050565b6000614f5b60268361552f565b9150614f6682615994565b604082019050919050565b6000614f7e60228361552f565b9150614f89826159e3565b604082019050919050565b6000614fa1601b8361552f565b9150614fac82615a32565b602082019050919050565b6000614fc4601b8361552f565b9150614fcf82615a5b565b602082019050919050565b6000614fe7601f8361552f565b9150614ff282615a84565b602082019050919050565b600061500a60218361552f565b915061501582615aad565b604082019050919050565b600061502d60208361552f565b915061503882615afc565b602082019050919050565b600061505060298361552f565b915061505b82615b25565b604082019050919050565b600061507360258361552f565b915061507e82615b74565b604082019050919050565b600061509660248361552f565b91506150a182615bc3565b604082019050919050565b60006150b960188361552f565b91506150c482615c12565b602082019050919050565b60006150dc602c8361552f565b91506150e782615c3b565b604082019050919050565b60006150ff60178361552f565b915061510a82615c8a565b602082019050919050565b61511e816156a5565b82525050565b61512d816156af565b82525050565b60006020820190506151486000830184614e35565b92915050565b60006020820190506151636000830184614e17565b92915050565b600060408201905061517e6000830185614e35565b61518b6020830184614e35565b9392505050565b600060c0820190506151a76000830189614e35565b6151b46020830188615115565b6151c16040830187614ec0565b6151ce6060830186614ec0565b6151db6080830185614e35565b6151e860a0830184615115565b979650505050505050565b60006020820190506152086000830184614ea2565b92915050565b60006020820190506152236000830184614eb1565b92915050565b600060208201905081810360008301526152438184614ecf565b905092915050565b6000602082019050818103600083015261526481614f08565b9050919050565b6000602082019050818103600083015261528481614f2b565b9050919050565b600060208201905081810360008301526152a481614f4e565b9050919050565b600060208201905081810360008301526152c481614f71565b9050919050565b600060208201905081810360008301526152e481614f94565b9050919050565b6000602082019050818103600083015261530481614fb7565b9050919050565b6000602082019050818103600083015261532481614fda565b9050919050565b6000602082019050818103600083015261534481614ffd565b9050919050565b6000602082019050818103600083015261536481615020565b9050919050565b6000602082019050818103600083015261538481615043565b9050919050565b600060208201905081810360008301526153a481615066565b9050919050565b600060208201905081810360008301526153c481615089565b9050919050565b600060208201905081810360008301526153e4816150ac565b9050919050565b60006020820190508181036000830152615404816150cf565b9050919050565b60006020820190508181036000830152615424816150f2565b9050919050565b60006020820190506154406000830184615115565b92915050565b600060408201905061545b6000830185615115565b818103602083015261546d8184614e44565b90509392505050565b600060a08201905061548b6000830188615115565b6154986020830187614ec0565b81810360408301526154aa8186614e44565b90506154b96060830185614e35565b6154c66080830184615115565b9695505050505050565b60006020820190506154e56000830184615124565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061554b826156a5565b9150615556836156a5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561558b5761558a6157b2565b5b828201905092915050565b60006155a1826156a5565b91506155ac836156a5565b9250826155bc576155bb6157e1565b5b828204905092915050565b60006155d2826156a5565b91506155dd836156a5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615616576156156157b2565b5b828202905092915050565b600061562c826156a5565b9150615637836156a5565b92508282101561564a576156496157b2565b5b828203905092915050565b600061566082615685565b9050919050565b600061567282615685565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006156c7826156e0565b9050919050565b60006156d9826156a5565b9050919050565b60006156eb826156f2565b9050919050565b60006156fd82615685565b9050919050565b60005b83811015615722578082015181840152602081019050615707565b83811115615731576000848401525b50505050565b6000600282049050600182168061574f57607f821691505b6020821081141561576357615762615810565b5b50919050565b6000615774826156a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156157a7576157a66157b2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f752068617665206e6f20706f776572206865726521000000000000000000600082015250565b615cbc81615655565b8114615cc757600080fd5b50565b615cd381615667565b8114615cde57600080fd5b50565b615cea81615679565b8114615cf557600080fd5b50565b615d01816156a5565b8114615d0c57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206759a3052de0d0c07943c7fef07066ab35becf8851b4408de377416b0d90151364736f6c63430008070033

Deployed Bytecode Sourcemap

16429:21043:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17644:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19513:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20498:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22102:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17715:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19790:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17515:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20699:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23109:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19699:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16590:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35773:949;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23707:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21153:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36878:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22195:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35307:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22622:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17763:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23439:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37305:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17442:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19893:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6664:148;;;;;;;;;;;;;:::i;:::-;;16545:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17480:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21869:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6450:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19604:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17404:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36986:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21461:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20099:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16854:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18666:233;;;;;;;;;;;;;:::i;:::-;;35544:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20306:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35426:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18907:598;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6820:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21997:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17644:55;;;;:::o;19513:83::-;19550:13;19583:5;19576:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19513:83;:::o;20498:193::-;20600:4;20622:39;20631:12;:10;:12::i;:::-;20645:7;20654:6;20622:8;:39::i;:::-;20679:4;20672:11;;20498:193;;;;:::o;22102:85::-;22144:7;22171:8;;22164:15;;22102:85;:::o;17715:41::-;;;;;;;;;;;;;:::o;19790:95::-;19843:7;19870;;19863:14;;19790:95;:::o;17515:71::-;;;;:::o;20699:446::-;20831:4;20848:36;20858:6;20866:9;20877:6;20848:9;:36::i;:::-;20895:220;20918:6;20939:12;:10;:12::i;:::-;20966:138;21022:6;20966:138;;;;;;;;;;;;;;;;;:11;:19;20978:6;20966:19;;;;;;;;;;;;;;;:33;20986:12;:10;:12::i;:::-;20966:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;20895:8;:220::i;:::-;21133:4;21126:11;;20699:446;;;;;:::o;23109:322::-;23203:7;23261;;23250;:18;;23228:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;23349:19;23371:10;:8;:10::i;:::-;23349:32;;23399:24;23411:11;23399:7;:11;;:24;;;;:::i;:::-;23392:31;;;23109:322;;;:::o;19699:83::-;19740:5;19765:9;;;;;;;;;;;19758:16;;19699:83;:::o;16590:35::-;;;;;;;;;;;;;:::o;35773:949::-;6587:12;:10;:12::i;:::-;6577:22;;:6;;;;;;;;;;:22;;;6569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36051:15:::1;36154:13;36128:10;36099:13;36069:14;:43;;;;:::i;:::-;:69;;;;:::i;:::-;:98;;;;:::i;:::-;36051:116;;36184:11;36180:277;;;36297:2;36287:7;:12;36279:21;;;::::0;::::1;;36180:277;;;36442:2;36432:7;:12;36424:21;;;::::0;::::1;;36180:277;36483:14;36467:13;:30;;;;36523:13;36508:12;:28;;;;36559:10;36547:9;:22;;;;36595:13;36580:12;:28;;;;36630:45;36665:9;;36630:30;36647:12;;36630;;:16;;:30;;;;:::i;:::-;:34;;:45;;;;:::i;:::-;36619:8;:56;;;;36703:11;36686:14;;:28;;;;;;;;;;;;;;;;;;35969:753;35773:949:::0;;;;;:::o;23707:477::-;6587:12;:10;:12::i;:::-;6577:22;;:6;;;;;;;;;;:22;;;6569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23787:11:::1;:20;23799:7;23787:20;;;;;;;;;;;;;;;;;;;;;;;;;23779:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;23855:9;23850:327;23874:9;:16;;;;23870:1;:20;23850:327;;;23932:7;23916:23;;:9;23926:1;23916:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;23912:254;;;23975:9;24004:1;23985:9;:16;;;;:20;;;;:::i;:::-;23975:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23960:9;23970:1;23960:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24044:1;24025:7;:16;24033:7;24025:16;;;;;;;;;;;;;;;:20;;;;24087:5;24064:11;:20;24076:7;24064:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;24111:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;24145:5;;23912:254;23892:3;;;;;:::i;:::-;;;;23850:327;;;;23707:477:::0;:::o;21153:300::-;21268:4;21290:133;21313:12;:10;:12::i;:::-;21340:7;21362:50;21401:10;21362:11;:25;21374:12;:10;:12::i;:::-;21362:25;;;;;;;;;;;;;;;:34;21388:7;21362:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;21290:8;:133::i;:::-;21441:4;21434:11;;21153:300;;;;:::o;36878:100::-;36931:4;36955:6;:15;36962:7;36955:15;;;;;;;;;;;;;;;;;;;;;;;;;36948:22;;36878:100;;;:::o;22195:419::-;22247:14;22264:12;:10;:12::i;:::-;22247:29;;22310:11;:19;22322:6;22310:19;;;;;;;;;;;;;;;;;;;;;;;;;22309:20;22287:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;22413:15;22442:19;22453:7;22442:10;:19::i;:::-;22412:49;;;;;;;22490:28;22510:7;22490;:15;22498:6;22490:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22472:7;:15;22480:6;22472:15;;;;;;;;;;;;;;;:46;;;;22539:20;22551:7;22539;;:11;;:20;;;;:::i;:::-;22529:7;:30;;;;22583:23;22598:7;22583:10;;:14;;:23;;;;:::i;:::-;22570:10;:36;;;;22236:378;;22195:419;:::o;35307:111::-;6587:12;:10;:12::i;:::-;6577:22;;:6;;;;;;;;;;:22;;;6569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35406:4:::1;35376:18;:27;35395:7;35376:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;35307:111:::0;:::o;22622:479::-;22740:7;22784;;22773;:18;;22765:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22843:17;22838:256;;22878:15;22907:19;22918:7;22907:10;:19::i;:::-;22877:49;;;;;;;22948:7;22941:14;;;;;22838:256;22991:23;23026:19;23037:7;23026:10;:19::i;:::-;22988:57;;;;;;;23067:15;23060:22;;;22622:479;;;;;:::o;17763:28::-;;;;;;;;;;;;;:::o;23439:260::-;6587:12;:10;:12::i;:::-;6577:22;;:6;;;;;;;;;;:22;;;6569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23534:1:::1;23515:7;:16;23523:7;23515:16;;;;;;;;;;;;;;;;:20;23511:109;;;23571:37;23591:7;:16;23599:7;23591:16;;;;;;;;;;;;;;;;23571:19;:37::i;:::-;23552:7;:16;23560:7;23552:16;;;;;;;;;;;;;;;:56;;;;23511:109;23653:4;23630:11;:20;23642:7;23630:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;23668:9;23683:7;23668:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23439:260:::0;:::o;37305:127::-;6587:12;:10;:12::i;:::-;6577:22;;:6;;;;;;;;;;:22;;;6569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37382:10:::1;:19;;:42;37402:21;37382:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37305:127:::0;:::o;17442:31::-;;;;:::o;19893:198::-;19959:7;19983:11;:20;19995:7;19983:20;;;;;;;;;;;;;;;;;;;;;;;;;19979:49;;;20012:7;:16;20020:7;20012:16;;;;;;;;;;;;;;;;20005:23;;;;19979:49;20046:37;20066:7;:16;20074:7;20066:16;;;;;;;;;;;;;;;;20046:19;:37::i;:::-;20039:44;;19893:198;;;;:::o;6664:148::-;6587:12;:10;:12::i;:::-;6577:22;;:6;;;;;;;;;;:22;;;6569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6771:1:::1;6734:40;;6755:6;::::0;::::1;;;;;;;;6734:40;;;;;;;;;;;;6802:1;6785:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6664:148::o:0;16545:38::-;;;;;;;;;;;;;:::o;17480:28::-;;;;:::o;21869:120::-;21937:4;21961:11;:20;21973:7;21961:20;;;;;;;;;;;;;;;;;;;;;;;;;21954:27;;21869:120;;;:::o;6450:79::-;6488:7;6515:6;;;;;;;;;;;6508:13;;6450:79;:::o;19604:87::-;19643:13;19676:7;19669:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19604:87;:::o;17404:31::-;;;;:::o;36986:311::-;6587:12;:10;:12::i;:::-;6577:22;;:6;;;;;;;;;;:22;;;6569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37102:9:::1;37097:193;37117:9;;:16;;37113:1;:20;37097:193;;;37234:13;;;;;;;;;;;37218:29;;:9;;37228:1;37218:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:29;;;37214:64;;37272:6;37249;:20;37256:9;;37266:1;37256:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;37249:20;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37214:64;37135:3;;;;:::i;:::-;;;37097:193;;;;36986:311:::0;;;:::o;21461:400::-;21581:4;21603:228;21626:12;:10;:12::i;:::-;21653:7;21675:145;21732:15;21675:145;;;;;;;;;;;;;;;;;:11;:25;21687:12;:10;:12::i;:::-;21675:25;;;;;;;;;;;;;;;:34;21701:7;21675:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;21603:8;:228::i;:::-;21849:4;21842:11;;21461:400;;;;:::o;20099:199::-;20204:4;20226:42;20236:12;:10;:12::i;:::-;20250:9;20261:6;20226:9;:42::i;:::-;20286:4;20279:11;;20099:199;;;;:::o;16854:29::-;;;;:::o;18666:233::-;6587:12;:10;:12::i;:::-;6577:22;;:6;;;;;;;;;;:22;;;6569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18728:11:::1;;;;;;;;;;;18727:12;18719:21;;;::::0;::::1;;18765:4;18751:11;;:18;;;;;;;;;;;;;;;;;;18780:32;18806:4;18780:17;:32::i;:::-;18823;18841:13;;;;;;;;;;;18823:17;:32::i;:::-;18879:12;18866:10;:25;;;;18666:233::o:0;35544:221::-;6587:12;:10;:12::i;:::-;6577:22;;:6;;;;;;;;;;:22;;;6569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35692:16:::1;35666:15;;:43;;;;;;;;;;;;;;;;;;35743:13;35720:12;;:37;;;;;;;;;;;;;;;;;;35544:221:::0;;:::o;20306:184::-;20423:7;20455:11;:18;20467:5;20455:18;;;;;;;;;;;;;;;:27;20474:7;20455:27;;;;;;;;;;;;;;;;20448:34;;20306:184;;;;:::o;35426:110::-;6587:12;:10;:12::i;:::-;6577:22;;:6;;;;;;;;;;:22;;;6569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35523:5:::1;35493:18;:27;35512:7;35493:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;35426:110:::0;:::o;18907:598::-;6587:12;:10;:12::i;:::-;6577:22;;:6;;;;;;;;;;:22;;;6569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18978:29:::1;19029:9;18978:61;;19050:16;19087:10;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19069:47;;;19139:4;19159:10;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19069:118;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19050:137;;19222:1;19202:22;;:8;:22;;;19198:261;;;19275:10;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19257:50;;;19334:4;19358:10;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19257:133;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19241:13;;:149;;;;;;;;;;;;;;;;;;19198:261;;;19439:8;19423:13;;:24;;;;;;;;;;;;;;;;;;19198:261;19487:10;19469:15;;:28;;;;;;;;;;;;;;;;;;18967:538;;18907:598:::0;:::o;6820:281::-;6587:12;:10;:12::i;:::-;6577:22;;:6;;;;;;;;;;:22;;;6569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6943:1:::1;6923:22;;:8;:22;;;;6901:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;7056:8;7027:38;;7048:6;::::0;::::1;;;;;;;;7027:38;;;;;;;;;;;;7085:8;7076:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6820:281:::0;:::o;21997:97::-;22048:4;22072:14;;;;;;;;;;;22065:21;;21997:97;:::o;1282:181::-;1340:7;1360:9;1376:1;1372;:5;;;;:::i;:::-;1360:17;;1401:1;1396;:6;;1388:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1454:1;1447:8;;;1282:181;;;;:::o;2107:132::-;2165:7;2192:39;2196:1;2199;2192:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2185:46;;2107:132;;;;:::o;1849:250::-;1907:7;1936:1;1931;:6;1927:47;;;1961:1;1954:8;;;;1927:47;1986:9;2002:1;1998;:5;;;;:::i;:::-;1986:17;;2031:1;2026;2022;:5;;;;:::i;:::-;:10;2014:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2090:1;2083:8;;;1849:250;;;;;:::o;93:115::-;146:15;189:10;174:26;;93:115;:::o;24192:371::-;24336:1;24319:19;;:5;:19;;;;24311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24417:1;24398:21;;:7;:21;;;;24390:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24501:6;24471:11;:18;24483:5;24471:18;;;;;;;;;;;;;;;:27;24490:7;24471:27;;;;;;;;;;;;;;;:36;;;;24539:7;24523:32;;24532:5;24523:32;;;24548:6;24523:32;;;;;;:::i;:::-;;;;;;;;24192:371;;;:::o;24571:1598::-;24709:1;24693:18;;:4;:18;;;;24685:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24786:1;24772:16;;:2;:16;;;;24764:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24856:1;24847:6;:10;24839:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24923:6;:10;24930:2;24923:10;;;;;;;;;;;;;;;;;;;;;;;;;24922:11;24914:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;24981:6;:12;24988:4;24981:12;;;;;;;;;;;;;;;;;;;;;;;;;24980:13;24972:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;25044:7;:5;:7::i;:::-;25036:15;;:4;:15;;;;:32;;;;;25061:7;:5;:7::i;:::-;25055:13;;:2;:13;;;;25036:32;25032:99;;;25091:11;;;;;;;;;;;25083:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25032:99;25190:12;25248:13;;;;;;;;;;;25240:21;;:4;:21;;;:44;;;;25271:13;;;;;;;;;;;25265:19;;:2;:19;;;25240:44;25239:116;;;;;25304:18;:24;25323:4;25304:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;25332:18;:22;25351:2;25332:22;;;;;;;;;;;;;;;;;;;;;;;;;25304:50;25302:53;25239:116;25221:187;;;25392:4;25382:14;;25221:187;25438:8;;25420:15;:26;;;;25557:12;25543:10;;:26;25539:49;;;25584:4;25571:6;:10;25578:2;25571:10;;;;;;;;;;;;;;;;:17;;;;;;;;;;;;;;;;;;25539:49;25654:14;;;;;;;;;;;:39;;;;;25680:13;;;;;;;;;;;25672:21;;:4;:21;;;25654:39;25650:64;;;25713:1;25695:15;:19;;;;25650:64;25748:6;;;;;;;;;;;25747:7;:22;;;;;25758:11;;;;;;;;;;;25747:22;:45;;;;;25779:13;;;;;;;;;;;25773:19;;:2;:19;;;25747:45;25743:367;;;25862:28;25893:24;25911:4;25893:9;:24::i;:::-;25862:55;;25962:13;;25938:20;:37;25934:165;;26019:13;;25996:36;;26051:32;26062:20;26051:10;:32::i;:::-;25934:165;25794:316;25743:367;26120:41;26135:4;26141:2;26145:6;26153:7;26120:14;:41::i;:::-;24674:1495;24571:1598;;;:::o;1615:226::-;1735:7;1768:1;1763;:6;;1771:12;1755:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1795:9;1811:1;1807;:5;;;;:::i;:::-;1795:17;;1832:1;1825:8;;;1615:226;;;;;:::o;34159:164::-;34201:7;34222:15;34239;34258:19;:17;:19::i;:::-;34221:56;;;;34295:20;34307:7;34295;:11;;:20;;;;:::i;:::-;34288:27;;;;34159:164;:::o;32409:742::-;32509:7;32531;32553;32575;32597;32619;32669:23;32707:12;32734:18;32766:20;32778:7;32766:11;:20::i;:::-;32654:132;;;;;;32798:15;32815:23;32840:12;32856:113;32882:7;32904:4;32923:10;32948;:8;:10::i;:::-;32856:11;:113::i;:::-;32797:172;;;;;;33002:7;33024:15;33054:4;33073:15;33103:4;33122:10;32980:163;;;;;;;;;;;;;;;;;;32409:742;;;;;;;:::o;1471:136::-;1529:7;1556:43;1560:1;1563;1556:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1549:50;;1471:136;;;;:::o;2247:312::-;2367:7;2399:1;2395;:5;2402:12;2387:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2426:9;2442:1;2438;:5;;;;:::i;:::-;2426:17;;2550:1;2543:8;;;2247:312;;;;;:::o;26177:1256::-;18059:4;18050:6;;:13;;;;;;;;;;;;;;;;;;26306:23:::1;26332:101;26431:1;26332:80;26403:8;;26332:52;26371:12;;26332:20;:38;;:52;;;;:::i;:::-;:70;;:80;;;;:::i;:::-;:98;;:101;;;;:::i;:::-;26306:127;;26446:20;26469:41;26494:15;26469:20;:24;;:41;;;;:::i;:::-;26446:64;;26523:30;26540:12;26523:16;:30::i;:::-;26566:17;26586:21;26566:41;;26620:19;26642:33;26655:19;26672:1;26655:12;;:16;;:19;;;;:::i;:::-;26642:8;;:12;;:33;;;;:::i;:::-;26620:55;;26688:26;26717:93;26808:1;26717:72;26777:11;26717:41;26745:12;;26717:9;:27;;:41;;;;:::i;:::-;:59;;:72;;;;:::i;:::-;:90;;:93;;;;:::i;:::-;26688:122;;26823:23;26849:41;26878:11;26849:24;26863:9;;26849;:13;;:24;;;;:::i;:::-;:28;;:41;;;;:::i;:::-;26823:67;;26901:26;26930:68;26976:11;26930:27;26944:12;;26930:9;:13;;:27;;;;:::i;:::-;:31;;:68;;;;:::i;:::-;26901:97;;27065:26;27094:21;27065:50;;27151:1;27130:18;:22;27126:162;;;27169:49;27182:18;27202:15;;;;;;;;;;;27169:12;:49::i;:::-;27233:43;27246:15;27263:12;;;;;;;;;;;27233;:43::i;:::-;27126:162;27347:1;27329:15;:19;27325:101;;;27365:49;27378:15;27395:18;27365:12;:49::i;:::-;27325:101;26247:1186;;;;;;;;18095:5:::0;18086:6;;:14;;;;;;;;;;;;;;;;;;26177:1256;:::o;28467:981::-;28618:30;28651:13;;28618:46;;28675:25;28703:15;;28675:43;;28734:7;28729:92;;28774:1;28758:13;:17;;;;28808:1;28790:15;:19;;;;28729:92;28837:11;:19;28849:6;28837:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;28861:11;:22;28873:9;28861:22;;;;;;;;;;;;;;;;;;;;;;;;;28860:23;28837:46;28833:467;;;28900:48;28922:6;28930:9;28941:6;28900:21;:48::i;:::-;28833:467;;;28971:11;:19;28983:6;28971:19;;;;;;;;;;;;;;;;;;;;;;;;;28970:20;:46;;;;;28994:11;:22;29006:9;28994:22;;;;;;;;;;;;;;;;;;;;;;;;;28970:46;28966:334;;;29033:46;29053:6;29061:9;29072:6;29033:19;:46::i;:::-;28966:334;;;29101:11;:19;29113:6;29101:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;29124:11;:22;29136:9;29124:22;;;;;;;;;;;;;;;;;;;;;;;;;29101:45;29097:203;;;29163:48;29185:6;29193:9;29204:6;29163:21;:48::i;:::-;29097:203;;;29244:44;29262:6;29270:9;29281:6;29244:17;:44::i;:::-;29097:203;28966:334;28833:467;29317:7;29312:129;;29357:22;29341:13;:38;;;;29412:17;29394:15;:35;;;;29312:129;28607:841;;28467:981;;;;:::o;34331:605::-;34382:7;34391;34411:15;34429:7;;34411:25;;34447:15;34465:7;;34447:25;;34488:9;34483:338;34507:9;:16;;;;34503:1;:20;34483:338;;;34591:7;34567;:21;34575:9;34585:1;34575:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34567:21;;;;;;;;;;;;;;;;:31;:83;;;;34643:7;34619;:21;34627:9;34637:1;34627:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34619:21;;;;;;;;;;;;;;;;:31;34567:83;34545:146;;;34674:7;;34683;;34666:25;;;;;;;;;34545:146;34716:34;34728:7;:21;34736:9;34746:1;34736:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34728:21;;;;;;;;;;;;;;;;34716:7;:11;;:34;;;;:::i;:::-;34706:44;;34775:34;34787:7;:21;34795:9;34805:1;34795:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34787:21;;;;;;;;;;;;;;;;34775:7;:11;;:34;;;;:::i;:::-;34765:44;;34525:3;;;;;:::i;:::-;;;;34483:338;;;;34845:20;34857:7;;34845;;:11;;:20;;;;:::i;:::-;34835:7;:30;34831:61;;;34875:7;;34884;;34867:25;;;;;;;;34831:61;34911:7;34920;34903:25;;;;;;34331:605;;;:::o;33159:430::-;33260:7;33282;33304;33339:12;33354:35;33385:3;33354:26;33366:13;;33354:7;:11;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;33339:50;;33400:18;33421:37;33454:3;33421:28;33433:15;;33421:7;:11;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;33400:58;;33469:23;33495:33;33517:10;33495:17;33507:4;33495:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;33469:59;;33547:15;33564:4;33570:10;33539:42;;;;;;;;;33159:430;;;;;:::o;33597:554::-;33796:7;33818;33840;33875:15;33893:24;33905:11;33893:7;:11;;:24;;;;:::i;:::-;33875:42;;33928:12;33943:21;33952:11;33943:4;:8;;:21;;;;:::i;:::-;33928:36;;33975:18;33996:27;34011:11;33996:10;:14;;:27;;;;:::i;:::-;33975:48;;34034:23;34060:33;34082:10;34060:17;34072:4;34060:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;34034:59;;34112:7;34121:15;34138:4;34104:39;;;;;;;;;;33597:554;;;;;;;;:::o;27561:528::-;27627:21;27665:1;27651:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27627:40;;27696:4;27678;27683:1;27678:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27722:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27712:4;27717:1;27712:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27757:62;27774:4;27789:15;;;;;;;;;;;27807:11;27757:8;:62::i;:::-;27832:15;;;;;;;;;;;:66;;;27913:11;27939:1;27955:4;27982;28002:15;27832:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28046:35;28063:11;28076:4;28046:35;;;;;;;:::i;:::-;;;;;;;;27616:473;27561:528;:::o;27441:112::-;27522:6;:15;;:23;27538:6;27522:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27441:112;;:::o;28097:362::-;28178:62;28195:4;28210:15;;;;;;;;;;;28228:11;28178:8;:62::i;:::-;28253:15;;;;;;;;;;;:31;;;28292:9;28325:4;28345:11;28371:1;28387;28403:7;:5;:7::i;:::-;28425:15;28253:198;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28097:362;;:::o;30795:686::-;30946:15;30976:23;31014:12;31041:23;31079:12;31106:18;31138:19;31149:7;31138:10;:19::i;:::-;30931:226;;;;;;;;;;;;31186:28;31206:7;31186;:15;31194:6;31186:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31168:7;:15;31176:6;31168:15;;;;;;;;;;;;;;;:46;;;;31243:28;31263:7;31243;:15;31251:6;31243:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31225:7;:15;31233:6;31225:15;;;;;;;;;;;;;;;:46;;;;31303:39;31326:15;31303:7;:18;31311:9;31303:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31282:7;:18;31290:9;31282:18;;;;;;;;;;;;;;;:60;;;;31353:26;31368:10;31353:14;:26::i;:::-;31390:23;31402:4;31408;31390:11;:23::i;:::-;31446:9;31429:44;;31438:6;31429:44;;;31457:15;31429:44;;;;;;:::i;:::-;;;;;;;;30920:561;;;;;;30795:686;;;:::o;30089:698::-;30238:15;30268:23;30306:12;30333:23;30371:12;30398:18;30430:19;30441:7;30430:10;:19::i;:::-;30223:226;;;;;;;;;;;;30478:28;30498:7;30478;:15;30486:6;30478:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30460:7;:15;30468:6;30460:15;;;;;;;;;;;;;;;:46;;;;30538:39;30561:15;30538:7;:18;30546:9;30538:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30517:7;:18;30525:9;30517:18;;;;;;;;;;;;;;;:60;;;;30609:39;30632:15;30609:7;:18;30617:9;30609:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30588:7;:18;30596:9;30588:18;;;;;;;;;;;;;;;:60;;;;30659:26;30674:10;30659:14;:26::i;:::-;30696:23;30708:4;30714;30696:11;:23::i;:::-;30752:9;30735:44;;30744:6;30735:44;;;30763:15;30735:44;;;;;;:::i;:::-;;;;;;;;30212:575;;;;;;30089:698;;;:::o;31489:757::-;31640:15;31670:23;31708:12;31735:23;31773:12;31800:18;31832:19;31843:7;31832:10;:19::i;:::-;31625:226;;;;;;;;;;;;31880:28;31900:7;31880;:15;31888:6;31880:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31862:7;:15;31870:6;31862:15;;;;;;;;;;;;;;;:46;;;;31937:28;31957:7;31937;:15;31945:6;31937:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31919:7;:15;31927:6;31919:15;;;;;;;;;;;;;;;:46;;;;31997:39;32020:15;31997:7;:18;32005:9;31997:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31976:7;:18;31984:9;31976:18;;;;;;;;;;;;;;;:60;;;;32068:39;32091:15;32068:7;:18;32076:9;32068:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32047:7;:18;32055:9;32047:18;;;;;;;;;;;;;;;:60;;;;32118:26;32133:10;32118:14;:26::i;:::-;32155:23;32167:4;32173;32155:11;:23::i;:::-;32211:9;32194:44;;32203:6;32194:44;;;32222:15;32194:44;;;;;;:::i;:::-;;;;;;;;31614:632;;;;;;31489:757;;;:::o;29456:625::-;29603:15;29633:23;29671:12;29698:23;29736:12;29763:18;29795:19;29806:7;29795:10;:19::i;:::-;29588:226;;;;;;;;;;;;29843:28;29863:7;29843;:15;29851:6;29843:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29825:7;:15;29833:6;29825:15;;;;;;;;;;;;;;;:46;;;;29903:39;29926:15;29903:7;:18;29911:9;29903:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29882:7;:18;29890:9;29882:18;;;;;;;;;;;;;;;:60;;;;29953:26;29968:10;29953:14;:26::i;:::-;29990:23;30002:4;30008;29990:11;:23::i;:::-;30046:9;30029:44;;30038:6;30029:44;;;30057:15;30029:44;;;;;;:::i;:::-;;;;;;;;29577:504;;;;;;29456:625;;;:::o;34944:355::-;35007:19;35029:10;:8;:10::i;:::-;35007:32;;35050:18;35071:27;35086:11;35071:10;:14;;:27;;;;:::i;:::-;35050:48;;35134:38;35161:10;35134:7;:22;35150:4;35134:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;35109:7;:22;35125:4;35109:22;;;;;;;;;;;;;;;:63;;;;35187:11;:26;35207:4;35187:26;;;;;;;;;;;;;;;;;;;;;;;;;35183:108;;;35253:38;35280:10;35253:7;:22;35269:4;35253:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;35228:7;:22;35244:4;35228:22;;;;;;;;;;;;;;;:63;;;;35183:108;34996:303;;34944:355;:::o;32254:147::-;32332:17;32344:4;32332:7;;:11;;:17;;;;:::i;:::-;32322:7;:27;;;;32373:20;32388:4;32373:10;;:14;;:20;;;;:::i;:::-;32360:10;:33;;;;32254:147;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:155::-;355:5;393:6;380:20;371:29;;409:41;444:5;409:41;:::i;:::-;301:155;;;;:::o;479:568::-;552:8;562:6;612:3;605:4;597:6;593:17;589:27;579:122;;620:79;;:::i;:::-;579:122;733:6;720:20;710:30;;763:18;755:6;752:30;749:117;;;785:79;;:::i;:::-;749:117;899:4;891:6;887:17;875:29;;953:3;945:4;937:6;933:17;923:8;919:32;916:41;913:128;;;960:79;;:::i;:::-;913:128;479:568;;;;;:::o;1053:133::-;1096:5;1134:6;1121:20;1112:29;;1150:30;1174:5;1150:30;:::i;:::-;1053:133;;;;:::o;1192:139::-;1238:5;1276:6;1263:20;1254:29;;1292:33;1319:5;1292:33;:::i;:::-;1192:139;;;;:::o;1337:143::-;1394:5;1425:6;1419:13;1410:22;;1441:33;1468:5;1441:33;:::i;:::-;1337:143;;;;:::o;1486:329::-;1545:6;1594:2;1582:9;1573:7;1569:23;1565:32;1562:119;;;1600:79;;:::i;:::-;1562:119;1720:1;1745:53;1790:7;1781:6;1770:9;1766:22;1745:53;:::i;:::-;1735:63;;1691:117;1486:329;;;;:::o;1821:351::-;1891:6;1940:2;1928:9;1919:7;1915:23;1911:32;1908:119;;;1946:79;;:::i;:::-;1908:119;2066:1;2091:64;2147:7;2138:6;2127:9;2123:22;2091:64;:::i;:::-;2081:74;;2037:128;1821:351;;;;:::o;2178:345::-;2245:6;2294:2;2282:9;2273:7;2269:23;2265:32;2262:119;;;2300:79;;:::i;:::-;2262:119;2420:1;2445:61;2498:7;2489:6;2478:9;2474:22;2445:61;:::i;:::-;2435:71;;2391:125;2178:345;;;;:::o;2529:474::-;2597:6;2605;2654:2;2642:9;2633:7;2629:23;2625:32;2622:119;;;2660:79;;:::i;:::-;2622:119;2780:1;2805:53;2850:7;2841:6;2830:9;2826:22;2805:53;:::i;:::-;2795:63;;2751:117;2907:2;2933:53;2978:7;2969:6;2958:9;2954:22;2933:53;:::i;:::-;2923:63;;2878:118;2529:474;;;;;:::o;3009:619::-;3086:6;3094;3102;3151:2;3139:9;3130:7;3126:23;3122:32;3119:119;;;3157:79;;:::i;:::-;3119:119;3277:1;3302:53;3347:7;3338:6;3327:9;3323:22;3302:53;:::i;:::-;3292:63;;3248:117;3404:2;3430:53;3475:7;3466:6;3455:9;3451:22;3430:53;:::i;:::-;3420:63;;3375:118;3532:2;3558:53;3603:7;3594:6;3583:9;3579:22;3558:53;:::i;:::-;3548:63;;3503:118;3009:619;;;;;:::o;3634:474::-;3702:6;3710;3759:2;3747:9;3738:7;3734:23;3730:32;3727:119;;;3765:79;;:::i;:::-;3727:119;3885:1;3910:53;3955:7;3946:6;3935:9;3931:22;3910:53;:::i;:::-;3900:63;;3856:117;4012:2;4038:53;4083:7;4074:6;4063:9;4059:22;4038:53;:::i;:::-;4028:63;;3983:118;3634:474;;;;;:::o;4114:698::-;4206:6;4214;4222;4271:2;4259:9;4250:7;4246:23;4242:32;4239:119;;;4277:79;;:::i;:::-;4239:119;4425:1;4414:9;4410:17;4397:31;4455:18;4447:6;4444:30;4441:117;;;4477:79;;:::i;:::-;4441:117;4590:80;4662:7;4653:6;4642:9;4638:22;4590:80;:::i;:::-;4572:98;;;;4368:312;4719:2;4745:50;4787:7;4778:6;4767:9;4763:22;4745:50;:::i;:::-;4735:60;;4690:115;4114:698;;;;;:::o;4818:329::-;4877:6;4926:2;4914:9;4905:7;4901:23;4897:32;4894:119;;;4932:79;;:::i;:::-;4894:119;5052:1;5077:53;5122:7;5113:6;5102:9;5098:22;5077:53;:::i;:::-;5067:63;;5023:117;4818:329;;;;:::o;5153:468::-;5218:6;5226;5275:2;5263:9;5254:7;5250:23;5246:32;5243:119;;;5281:79;;:::i;:::-;5243:119;5401:1;5426:53;5471:7;5462:6;5451:9;5447:22;5426:53;:::i;:::-;5416:63;;5372:117;5528:2;5554:50;5596:7;5587:6;5576:9;5572:22;5554:50;:::i;:::-;5544:60;;5499:115;5153:468;;;;;:::o;5627:663::-;5715:6;5723;5731;5780:2;5768:9;5759:7;5755:23;5751:32;5748:119;;;5786:79;;:::i;:::-;5748:119;5906:1;5931:64;5987:7;5978:6;5967:9;5963:22;5931:64;:::i;:::-;5921:74;;5877:128;6044:2;6070:64;6126:7;6117:6;6106:9;6102:22;6070:64;:::i;:::-;6060:74;;6015:129;6183:2;6209:64;6265:7;6256:6;6245:9;6241:22;6209:64;:::i;:::-;6199:74;;6154:129;5627:663;;;;;:::o;6296:905::-;6388:6;6396;6404;6412;6420;6469:3;6457:9;6448:7;6444:23;6440:33;6437:120;;;6476:79;;:::i;:::-;6437:120;6596:1;6621:53;6666:7;6657:6;6646:9;6642:22;6621:53;:::i;:::-;6611:63;;6567:117;6723:2;6749:53;6794:7;6785:6;6774:9;6770:22;6749:53;:::i;:::-;6739:63;;6694:118;6851:2;6877:53;6922:7;6913:6;6902:9;6898:22;6877:53;:::i;:::-;6867:63;;6822:118;6979:2;7005:53;7050:7;7041:6;7030:9;7026:22;7005:53;:::i;:::-;6995:63;;6950:118;7107:3;7134:50;7176:7;7167:6;7156:9;7152:22;7134:50;:::i;:::-;7124:60;;7078:116;6296:905;;;;;;;;:::o;7207:179::-;7276:10;7297:46;7339:3;7331:6;7297:46;:::i;:::-;7375:4;7370:3;7366:14;7352:28;;7207:179;;;;:::o;7392:142::-;7495:32;7521:5;7495:32;:::i;:::-;7490:3;7483:45;7392:142;;:::o;7540:108::-;7617:24;7635:5;7617:24;:::i;:::-;7612:3;7605:37;7540:108;;:::o;7654:118::-;7741:24;7759:5;7741:24;:::i;:::-;7736:3;7729:37;7654:118;;:::o;7808:732::-;7927:3;7956:54;8004:5;7956:54;:::i;:::-;8026:86;8105:6;8100:3;8026:86;:::i;:::-;8019:93;;8136:56;8186:5;8136:56;:::i;:::-;8215:7;8246:1;8231:284;8256:6;8253:1;8250:13;8231:284;;;8332:6;8326:13;8359:63;8418:3;8403:13;8359:63;:::i;:::-;8352:70;;8445:60;8498:6;8445:60;:::i;:::-;8435:70;;8291:224;8278:1;8275;8271:9;8266:14;;8231:284;;;8235:14;8531:3;8524:10;;7932:608;;;7808:732;;;;:::o;8546:109::-;8627:21;8642:5;8627:21;:::i;:::-;8622:3;8615:34;8546:109;;:::o;8661:185::-;8775:64;8833:5;8775:64;:::i;:::-;8770:3;8763:77;8661:185;;:::o;8852:147::-;8947:45;8986:5;8947:45;:::i;:::-;8942:3;8935:58;8852:147;;:::o;9005:364::-;9093:3;9121:39;9154:5;9121:39;:::i;:::-;9176:71;9240:6;9235:3;9176:71;:::i;:::-;9169:78;;9256:52;9301:6;9296:3;9289:4;9282:5;9278:16;9256:52;:::i;:::-;9333:29;9355:6;9333:29;:::i;:::-;9328:3;9324:39;9317:46;;9097:272;9005:364;;;;:::o;9375:366::-;9517:3;9538:67;9602:2;9597:3;9538:67;:::i;:::-;9531:74;;9614:93;9703:3;9614:93;:::i;:::-;9732:2;9727:3;9723:12;9716:19;;9375:366;;;:::o;9747:::-;9889:3;9910:67;9974:2;9969:3;9910:67;:::i;:::-;9903:74;;9986:93;10075:3;9986:93;:::i;:::-;10104:2;10099:3;10095:12;10088:19;;9747:366;;;:::o;10119:::-;10261:3;10282:67;10346:2;10341:3;10282:67;:::i;:::-;10275:74;;10358:93;10447:3;10358:93;:::i;:::-;10476:2;10471:3;10467:12;10460:19;;10119:366;;;:::o;10491:::-;10633:3;10654:67;10718:2;10713:3;10654:67;:::i;:::-;10647:74;;10730:93;10819:3;10730:93;:::i;:::-;10848:2;10843:3;10839:12;10832:19;;10491:366;;;:::o;10863:::-;11005:3;11026:67;11090:2;11085:3;11026:67;:::i;:::-;11019:74;;11102:93;11191:3;11102:93;:::i;:::-;11220:2;11215:3;11211:12;11204:19;;10863:366;;;:::o;11235:::-;11377:3;11398:67;11462:2;11457:3;11398:67;:::i;:::-;11391:74;;11474:93;11563:3;11474:93;:::i;:::-;11592:2;11587:3;11583:12;11576:19;;11235:366;;;:::o;11607:::-;11749:3;11770:67;11834:2;11829:3;11770:67;:::i;:::-;11763:74;;11846:93;11935:3;11846:93;:::i;:::-;11964:2;11959:3;11955:12;11948:19;;11607:366;;;:::o;11979:::-;12121:3;12142:67;12206:2;12201:3;12142:67;:::i;:::-;12135:74;;12218:93;12307:3;12218:93;:::i;:::-;12336:2;12331:3;12327:12;12320:19;;11979:366;;;:::o;12351:::-;12493:3;12514:67;12578:2;12573:3;12514:67;:::i;:::-;12507:74;;12590:93;12679:3;12590:93;:::i;:::-;12708:2;12703:3;12699:12;12692:19;;12351:366;;;:::o;12723:::-;12865:3;12886:67;12950:2;12945:3;12886:67;:::i;:::-;12879:74;;12962:93;13051:3;12962:93;:::i;:::-;13080:2;13075:3;13071:12;13064:19;;12723:366;;;:::o;13095:::-;13237:3;13258:67;13322:2;13317:3;13258:67;:::i;:::-;13251:74;;13334:93;13423:3;13334:93;:::i;:::-;13452:2;13447:3;13443:12;13436:19;;13095:366;;;:::o;13467:::-;13609:3;13630:67;13694:2;13689:3;13630:67;:::i;:::-;13623:74;;13706:93;13795:3;13706:93;:::i;:::-;13824:2;13819:3;13815:12;13808:19;;13467:366;;;:::o;13839:::-;13981:3;14002:67;14066:2;14061:3;14002:67;:::i;:::-;13995:74;;14078:93;14167:3;14078:93;:::i;:::-;14196:2;14191:3;14187:12;14180:19;;13839:366;;;:::o;14211:::-;14353:3;14374:67;14438:2;14433:3;14374:67;:::i;:::-;14367:74;;14450:93;14539:3;14450:93;:::i;:::-;14568:2;14563:3;14559:12;14552:19;;14211:366;;;:::o;14583:::-;14725:3;14746:67;14810:2;14805:3;14746:67;:::i;:::-;14739:74;;14822:93;14911:3;14822:93;:::i;:::-;14940:2;14935:3;14931:12;14924:19;;14583:366;;;:::o;14955:118::-;15042:24;15060:5;15042:24;:::i;:::-;15037:3;15030:37;14955:118;;:::o;15079:112::-;15162:22;15178:5;15162:22;:::i;:::-;15157:3;15150:35;15079:112;;:::o;15197:222::-;15290:4;15328:2;15317:9;15313:18;15305:26;;15341:71;15409:1;15398:9;15394:17;15385:6;15341:71;:::i;:::-;15197:222;;;;:::o;15425:254::-;15534:4;15572:2;15561:9;15557:18;15549:26;;15585:87;15669:1;15658:9;15654:17;15645:6;15585:87;:::i;:::-;15425:254;;;;:::o;15685:332::-;15806:4;15844:2;15833:9;15829:18;15821:26;;15857:71;15925:1;15914:9;15910:17;15901:6;15857:71;:::i;:::-;15938:72;16006:2;15995:9;15991:18;15982:6;15938:72;:::i;:::-;15685:332;;;;;:::o;16023:807::-;16272:4;16310:3;16299:9;16295:19;16287:27;;16324:71;16392:1;16381:9;16377:17;16368:6;16324:71;:::i;:::-;16405:72;16473:2;16462:9;16458:18;16449:6;16405:72;:::i;:::-;16487:80;16563:2;16552:9;16548:18;16539:6;16487:80;:::i;:::-;16577;16653:2;16642:9;16638:18;16629:6;16577:80;:::i;:::-;16667:73;16735:3;16724:9;16720:19;16711:6;16667:73;:::i;:::-;16750;16818:3;16807:9;16803:19;16794:6;16750:73;:::i;:::-;16023:807;;;;;;;;;:::o;16836:210::-;16923:4;16961:2;16950:9;16946:18;16938:26;;16974:65;17036:1;17025:9;17021:17;17012:6;16974:65;:::i;:::-;16836:210;;;;:::o;17052:276::-;17172:4;17210:2;17199:9;17195:18;17187:26;;17223:98;17318:1;17307:9;17303:17;17294:6;17223:98;:::i;:::-;17052:276;;;;:::o;17334:313::-;17447:4;17485:2;17474:9;17470:18;17462:26;;17534:9;17528:4;17524:20;17520:1;17509:9;17505:17;17498:47;17562:78;17635:4;17626:6;17562:78;:::i;:::-;17554:86;;17334:313;;;;:::o;17653:419::-;17819:4;17857:2;17846:9;17842:18;17834:26;;17906:9;17900:4;17896:20;17892:1;17881:9;17877:17;17870:47;17934:131;18060:4;17934:131;:::i;:::-;17926:139;;17653:419;;;:::o;18078:::-;18244:4;18282:2;18271:9;18267:18;18259:26;;18331:9;18325:4;18321:20;18317:1;18306:9;18302:17;18295:47;18359:131;18485:4;18359:131;:::i;:::-;18351:139;;18078:419;;;:::o;18503:::-;18669:4;18707:2;18696:9;18692:18;18684:26;;18756:9;18750:4;18746:20;18742:1;18731:9;18727:17;18720:47;18784:131;18910:4;18784:131;:::i;:::-;18776:139;;18503:419;;;:::o;18928:::-;19094:4;19132:2;19121:9;19117:18;19109:26;;19181:9;19175:4;19171:20;19167:1;19156:9;19152:17;19145:47;19209:131;19335:4;19209:131;:::i;:::-;19201:139;;18928:419;;;:::o;19353:::-;19519:4;19557:2;19546:9;19542:18;19534:26;;19606:9;19600:4;19596:20;19592:1;19581:9;19577:17;19570:47;19634:131;19760:4;19634:131;:::i;:::-;19626:139;;19353:419;;;:::o;19778:::-;19944:4;19982:2;19971:9;19967:18;19959:26;;20031:9;20025:4;20021:20;20017:1;20006:9;20002:17;19995:47;20059:131;20185:4;20059:131;:::i;:::-;20051:139;;19778:419;;;:::o;20203:::-;20369:4;20407:2;20396:9;20392:18;20384:26;;20456:9;20450:4;20446:20;20442:1;20431:9;20427:17;20420:47;20484:131;20610:4;20484:131;:::i;:::-;20476:139;;20203:419;;;:::o;20628:::-;20794:4;20832:2;20821:9;20817:18;20809:26;;20881:9;20875:4;20871:20;20867:1;20856:9;20852:17;20845:47;20909:131;21035:4;20909:131;:::i;:::-;20901:139;;20628:419;;;:::o;21053:::-;21219:4;21257:2;21246:9;21242:18;21234:26;;21306:9;21300:4;21296:20;21292:1;21281:9;21277:17;21270:47;21334:131;21460:4;21334:131;:::i;:::-;21326:139;;21053:419;;;:::o;21478:::-;21644:4;21682:2;21671:9;21667:18;21659:26;;21731:9;21725:4;21721:20;21717:1;21706:9;21702:17;21695:47;21759:131;21885:4;21759:131;:::i;:::-;21751:139;;21478:419;;;:::o;21903:::-;22069:4;22107:2;22096:9;22092:18;22084:26;;22156:9;22150:4;22146:20;22142:1;22131:9;22127:17;22120:47;22184:131;22310:4;22184:131;:::i;:::-;22176:139;;21903:419;;;:::o;22328:::-;22494:4;22532:2;22521:9;22517:18;22509:26;;22581:9;22575:4;22571:20;22567:1;22556:9;22552:17;22545:47;22609:131;22735:4;22609:131;:::i;:::-;22601:139;;22328:419;;;:::o;22753:::-;22919:4;22957:2;22946:9;22942:18;22934:26;;23006:9;23000:4;22996:20;22992:1;22981:9;22977:17;22970:47;23034:131;23160:4;23034:131;:::i;:::-;23026:139;;22753:419;;;:::o;23178:::-;23344:4;23382:2;23371:9;23367:18;23359:26;;23431:9;23425:4;23421:20;23417:1;23406:9;23402:17;23395:47;23459:131;23585:4;23459:131;:::i;:::-;23451:139;;23178:419;;;:::o;23603:::-;23769:4;23807:2;23796:9;23792:18;23784:26;;23856:9;23850:4;23846:20;23842:1;23831:9;23827:17;23820:47;23884:131;24010:4;23884:131;:::i;:::-;23876:139;;23603:419;;;:::o;24028:222::-;24121:4;24159:2;24148:9;24144:18;24136:26;;24172:71;24240:1;24229:9;24225:17;24216:6;24172:71;:::i;:::-;24028:222;;;;:::o;24256:483::-;24427:4;24465:2;24454:9;24450:18;24442:26;;24478:71;24546:1;24535:9;24531:17;24522:6;24478:71;:::i;:::-;24596:9;24590:4;24586:20;24581:2;24570:9;24566:18;24559:48;24624:108;24727:4;24718:6;24624:108;:::i;:::-;24616:116;;24256:483;;;;;:::o;24745:831::-;25008:4;25046:3;25035:9;25031:19;25023:27;;25060:71;25128:1;25117:9;25113:17;25104:6;25060:71;:::i;:::-;25141:80;25217:2;25206:9;25202:18;25193:6;25141:80;:::i;:::-;25268:9;25262:4;25258:20;25253:2;25242:9;25238:18;25231:48;25296:108;25399:4;25390:6;25296:108;:::i;:::-;25288:116;;25414:72;25482:2;25471:9;25467:18;25458:6;25414:72;:::i;:::-;25496:73;25564:3;25553:9;25549:19;25540:6;25496:73;:::i;:::-;24745:831;;;;;;;;:::o;25582:214::-;25671:4;25709:2;25698:9;25694:18;25686:26;;25722:67;25786:1;25775:9;25771:17;25762:6;25722:67;:::i;:::-;25582:214;;;;:::o;25883:132::-;25950:4;25973:3;25965:11;;26003:4;25998:3;25994:14;25986:22;;25883:132;;;:::o;26021:114::-;26088:6;26122:5;26116:12;26106:22;;26021:114;;;:::o;26141:99::-;26193:6;26227:5;26221:12;26211:22;;26141:99;;;:::o;26246:113::-;26316:4;26348;26343:3;26339:14;26331:22;;26246:113;;;:::o;26365:184::-;26464:11;26498:6;26493:3;26486:19;26538:4;26533:3;26529:14;26514:29;;26365:184;;;;:::o;26555:169::-;26639:11;26673:6;26668:3;26661:19;26713:4;26708:3;26704:14;26689:29;;26555:169;;;;:::o;26730:305::-;26770:3;26789:20;26807:1;26789:20;:::i;:::-;26784:25;;26823:20;26841:1;26823:20;:::i;:::-;26818:25;;26977:1;26909:66;26905:74;26902:1;26899:81;26896:107;;;26983:18;;:::i;:::-;26896:107;27027:1;27024;27020:9;27013:16;;26730:305;;;;:::o;27041:185::-;27081:1;27098:20;27116:1;27098:20;:::i;:::-;27093:25;;27132:20;27150:1;27132:20;:::i;:::-;27127:25;;27171:1;27161:35;;27176:18;;:::i;:::-;27161:35;27218:1;27215;27211:9;27206:14;;27041:185;;;;:::o;27232:348::-;27272:7;27295:20;27313:1;27295:20;:::i;:::-;27290:25;;27329:20;27347:1;27329:20;:::i;:::-;27324:25;;27517:1;27449:66;27445:74;27442:1;27439:81;27434:1;27427:9;27420:17;27416:105;27413:131;;;27524:18;;:::i;:::-;27413:131;27572:1;27569;27565:9;27554:20;;27232:348;;;;:::o;27586:191::-;27626:4;27646:20;27664:1;27646:20;:::i;:::-;27641:25;;27680:20;27698:1;27680:20;:::i;:::-;27675:25;;27719:1;27716;27713:8;27710:34;;;27724:18;;:::i;:::-;27710:34;27769:1;27766;27762:9;27754:17;;27586:191;;;;:::o;27783:96::-;27820:7;27849:24;27867:5;27849:24;:::i;:::-;27838:35;;27783:96;;;:::o;27885:104::-;27930:7;27959:24;27977:5;27959:24;:::i;:::-;27948:35;;27885:104;;;:::o;27995:90::-;28029:7;28072:5;28065:13;28058:21;28047:32;;27995:90;;;:::o;28091:126::-;28128:7;28168:42;28161:5;28157:54;28146:65;;28091:126;;;:::o;28223:77::-;28260:7;28289:5;28278:16;;28223:77;;;:::o;28306:86::-;28341:7;28381:4;28374:5;28370:16;28359:27;;28306:86;;;:::o;28398:153::-;28475:9;28508:37;28539:5;28508:37;:::i;:::-;28495:50;;28398:153;;;:::o;28557:121::-;28615:9;28648:24;28666:5;28648:24;:::i;:::-;28635:37;;28557:121;;;:::o;28684:126::-;28734:9;28767:37;28798:5;28767:37;:::i;:::-;28754:50;;28684:126;;;:::o;28816:113::-;28866:9;28899:24;28917:5;28899:24;:::i;:::-;28886:37;;28816:113;;;:::o;28935:307::-;29003:1;29013:113;29027:6;29024:1;29021:13;29013:113;;;29112:1;29107:3;29103:11;29097:18;29093:1;29088:3;29084:11;29077:39;29049:2;29046:1;29042:10;29037:15;;29013:113;;;29144:6;29141:1;29138:13;29135:101;;;29224:1;29215:6;29210:3;29206:16;29199:27;29135:101;28984:258;28935:307;;;:::o;29248:320::-;29292:6;29329:1;29323:4;29319:12;29309:22;;29376:1;29370:4;29366:12;29397:18;29387:81;;29453:4;29445:6;29441:17;29431:27;;29387:81;29515:2;29507:6;29504:14;29484:18;29481:38;29478:84;;;29534:18;;:::i;:::-;29478:84;29299:269;29248:320;;;:::o;29574:233::-;29613:3;29636:24;29654:5;29636:24;:::i;:::-;29627:33;;29682:66;29675:5;29672:77;29669:103;;;29752:18;;:::i;:::-;29669:103;29799:1;29792:5;29788:13;29781:20;;29574:233;;;:::o;29813:180::-;29861:77;29858:1;29851:88;29958:4;29955:1;29948:15;29982:4;29979:1;29972:15;29999:180;30047:77;30044:1;30037:88;30144:4;30141:1;30134:15;30168:4;30165:1;30158:15;30185:180;30233:77;30230:1;30223:88;30330:4;30327:1;30320:15;30354:4;30351:1;30344:15;30371:180;30419:77;30416:1;30409:88;30516:4;30513:1;30506:15;30540:4;30537:1;30530:15;30557:180;30605:77;30602:1;30595:88;30702:4;30699:1;30692:15;30726:4;30723:1;30716:15;30743:180;30791:77;30788:1;30781:88;30888:4;30885:1;30878:15;30912:4;30909:1;30902:15;30929:117;31038:1;31035;31028:12;31052:117;31161:1;31158;31151:12;31175:117;31284:1;31281;31274:12;31298:117;31407:1;31404;31397:12;31421:117;31530:1;31527;31520:12;31544:102;31585:6;31636:2;31632:7;31627:2;31620:5;31616:14;31612:28;31602:38;;31544:102;;;:::o;31652:222::-;31792:34;31788:1;31780:6;31776:14;31769:58;31861:5;31856:2;31848:6;31844:15;31837:30;31652:222;:::o;31880:229::-;32020:34;32016:1;32008:6;32004:14;31997:58;32089:12;32084:2;32076:6;32072:15;32065:37;31880:229;:::o;32115:225::-;32255:34;32251:1;32243:6;32239:14;32232:58;32324:8;32319:2;32311:6;32307:15;32300:33;32115:225;:::o;32346:221::-;32486:34;32482:1;32474:6;32470:14;32463:58;32555:4;32550:2;32542:6;32538:15;32531:29;32346:221;:::o;32573:177::-;32713:29;32709:1;32701:6;32697:14;32690:53;32573:177;:::o;32756:::-;32896:29;32892:1;32884:6;32880:14;32873:53;32756:177;:::o;32939:181::-;33079:33;33075:1;33067:6;33063:14;33056:57;32939:181;:::o;33126:220::-;33266:34;33262:1;33254:6;33250:14;33243:58;33335:3;33330:2;33322:6;33318:15;33311:28;33126:220;:::o;33352:182::-;33492:34;33488:1;33480:6;33476:14;33469:58;33352:182;:::o;33540:228::-;33680:34;33676:1;33668:6;33664:14;33657:58;33749:11;33744:2;33736:6;33732:15;33725:36;33540:228;:::o;33774:224::-;33914:34;33910:1;33902:6;33898:14;33891:58;33983:7;33978:2;33970:6;33966:15;33959:32;33774:224;:::o;34004:223::-;34144:34;34140:1;34132:6;34128:14;34121:58;34213:6;34208:2;34200:6;34196:15;34189:31;34004:223;:::o;34233:174::-;34373:26;34369:1;34361:6;34357:14;34350:50;34233:174;:::o;34413:231::-;34553:34;34549:1;34541:6;34537:14;34530:58;34622:14;34617:2;34609:6;34605:15;34598:39;34413:231;:::o;34650:173::-;34790:25;34786:1;34778:6;34774:14;34767:49;34650:173;:::o;34829:122::-;34902:24;34920:5;34902:24;:::i;:::-;34895:5;34892:35;34882:63;;34941:1;34938;34931:12;34882:63;34829:122;:::o;34957:138::-;35038:32;35064:5;35038:32;:::i;:::-;35031:5;35028:43;35018:71;;35085:1;35082;35075:12;35018:71;34957:138;:::o;35101:116::-;35171:21;35186:5;35171:21;:::i;:::-;35164:5;35161:32;35151:60;;35207:1;35204;35197:12;35151:60;35101:116;:::o;35223:122::-;35296:24;35314:5;35296:24;:::i;:::-;35289:5;35286:35;35276:63;;35335:1;35332;35325:12;35276:63;35223:122;:::o

Swarm Source

ipfs://6759a3052de0d0c07943c7fef07066ab35becf8851b4408de377416b0d901513
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.