ETH Price: $3,116.14 (+4.49%)
Gas: 6 Gwei

Token

Orso Token (ORSO)
 

Overview

Max Total Supply

10,000,000,000 ORSO

Holders

142

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
NuCypher: NU Token
Balance
5,552,987 ORSO

Value
$0.00
0x4fe83213d56308330ec302a8bd641f1d0113a4cc
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:
ORSO

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-18
*/

/**
 
*/

/**

Orso Token Official 

https://t.me/Orsometa
https://orsotoken.com


*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return 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;
    }
}

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

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 internal _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount 
    ) public virtual 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 _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount,"ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

abstract contract Ownable is Context {

    address private _owner;

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

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 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 swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;

    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

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

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 ORSO is ERC20, Ownable { // 
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    bool private swapping;
    bool public tradingEnabled = false;

    uint256 public sellAmount = 0;
    uint256 public buyAmount = 0;

    uint256 private totalSellFees;
    uint256 private totalBuyFees;

    address payable public marketingWallet;
    address payable public devWallet;

    uint256 public maxWallet;
    bool public maxWalletEnabled = true;
    uint256 public swapTokensAtAmount;
    uint256 public sellMarketingFees;
    uint256 public sellLiquidityFee;
    uint256 public buyMarketingFees;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public sellDevFee;

    bool public swapAndLiquifyEnabled = true;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) private canTransferBeforeTradingIsEnabled;

    bool public limitsInEffect = false; 
    uint256 private gasPriceLimit = 7 * 1 gwei; // MAX GWEI
    mapping(address => uint256) private _holderLastTransferBlock; // FOR 1TX PER BLOCK
    mapping(address => uint256) private _holderLastTransferTimestamp; // FOR COOLDOWN
    uint256 public launchblock; // FOR DEADBLOCKS
    uint256 public launchtimestamp; // FOR LAUNCH TIMESTAMP 
    uint256 public cooldowntimer = 0; // DEFAULT COOLDOWN TIMER

    event EnableSwapAndLiquify(bool enabled);
    event SetPreSaleWallet(address wallet);
    event updateMarketingWallet(address wallet);
    event updateDevWallet(address wallet);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event TradingEnabled();

    event UpdateFees(uint256 sellMarketingFees, uint256 sellLiquidityFee, uint256 buyMarketingFees,
                     uint256 buyLiquidityFee, uint256 buyDevFee, uint256 sellDevFee);

    event Airdrop(address holder, uint256 amount);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event SendDividends(uint256 opAmount, bool success);

    constructor() ERC20("Orso Token", "ORSO") { // 
        marketingWallet = payable(0x83347d15d3E255Fb64aD3a2eE061d15bb3fDA09B); // 
        devWallet = payable(0xb1d115c0883eD814a62e59e8e70913749116B39c); // 
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

        //INITIAL FEE VALUES HERE
        buyMarketingFees = 3;
        sellMarketingFees = 3;
        buyLiquidityFee = 1;
        sellLiquidityFee = 1;
        buyDevFee = 1;
        sellDevFee = 1;

        // TOTAL BUY AND TOTAL SELL FEE CALCS
        totalBuyFees = buyMarketingFees.add(buyLiquidityFee).add(buyDevFee);
        totalSellFees = sellMarketingFees.add(sellLiquidityFee).add(sellDevFee);

        uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
                address(this), uniswapV2Router.WETH());

        _setAutomatedMarketMakerPair(uniswapV2Pair, true);

        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[marketingWallet] = true;

        uint256 _totalSupply = (10_000_000_000) * (10**18); // TOTAL SUPPLY IS SET HERE
        _mint(owner(), _totalSupply); // only time internal mint function is ever called is to create supply
        maxWallet = _totalSupply / 50; // 2%
        swapTokensAtAmount = _totalSupply / 25; // 0.25%;
        canTransferBeforeTradingIsEnabled[owner()] = true;
        canTransferBeforeTradingIsEnabled[address(this)] = true;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingEnabled);
        tradingEnabled = true;
        launchblock = block.number;
        launchtimestamp = block.timestamp;
        emit TradingEnabled();
    }
    
    function setMarketingWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        marketingWallet = payable(wallet);
        emit updateMarketingWallet(wallet);
    }

    function setDevWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        devWallet = payable(wallet);
        emit updateDevWallet(wallet);
    }
    
    function setExcludeFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setCanTransferBefore(address wallet, bool enable) external onlyOwner {
        canTransferBeforeTradingIsEnabled[wallet] = enable;
    }

    function setLimitsInEffect(bool value) external onlyOwner {
        limitsInEffect = value;
    }

    function setMaxWalletEnabled(bool value) external onlyOwner {
        maxWalletEnabled = value;
    }

    function setcooldowntimer(uint256 value) external onlyOwner {
        require(value <= 300, "cooldown timer cannot exceed 5 minutes");
        cooldowntimer = value;
    }

    
    function setmaxWallet(uint256 value) external onlyOwner {
        value = value * (10**18);
        require(value >= _totalSupply / 50, "max wallet cannot be set to less than 2%");
        maxWallet = value;
    }

    //
    function Sweep() external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer(amountETH);
    }

    function setSwapTriggerAmount(uint256 amount) public onlyOwner {
        swapTokensAtAmount = amount * (10**18);
    }

    function enableSwapAndLiquify(bool enabled) public onlyOwner {
        require(swapAndLiquifyEnabled != enabled);
        swapAndLiquifyEnabled = enabled;
        emit EnableSwapAndLiquify(enabled);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    // THIS IS THE ONE YOU USE TO TRASNFER OWNER IF U EVER DO
    function transferAdmin(address newOwner) public onlyOwner {
        _isExcludedFromFees[newOwner] = true;
        canTransferBeforeTradingIsEnabled[newOwner] = true;
        transferOwnership(newOwner);
    }

    function updateFees(uint256 marketingBuy, uint256 marketingSell, uint256 liquidityBuy,
                        uint256 liquiditySell, uint256 devBuy, uint256 devSell) public onlyOwner {

        buyMarketingFees = marketingBuy;
        buyLiquidityFee = liquidityBuy;
        sellMarketingFees = marketingSell;
        sellLiquidityFee = liquiditySell;
        buyDevFee = devBuy;
        sellDevFee = devSell;

        totalSellFees = sellMarketingFees.add(sellLiquidityFee).add(sellDevFee);
        totalBuyFees = buyMarketingFees.add(buyLiquidityFee).add(buyDevFee);

        // ABSOLUTE TAX LIMITS GO HERE
        require(totalSellFees <= 50 && totalBuyFees <= 50, "total fees cannot be higher than 50%");

        emit UpdateFees(sellMarketingFees, sellLiquidityFee, sellDevFee, buyMarketingFees,
                        buyLiquidityFee, buyDevFee);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(address from, address to, uint256 amount) internal override {

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

        uint256 marketingFees;
        uint256 liquidityFee;
        uint256 devFee;

        if (!canTransferBeforeTradingIsEnabled[from]) {
            require(tradingEnabled, "Trading has not yet been enabled");          
        }

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        } 
        
        else if (
            !swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]
        ) {
            bool isSelling = automatedMarketMakerPairs[to];
            if (isSelling) {
                marketingFees = sellMarketingFees;
                liquidityFee = sellLiquidityFee;
                devFee = sellDevFee;

                if (limitsInEffect) {
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
                }
            } 
            
            else {
                marketingFees = buyMarketingFees;
                liquidityFee = buyLiquidityFee;
                devFee = buyDevFee;

                if (limitsInEffect) {
                require(block.number > launchblock + 2,"you shall not pass");
                require(tx.gasprice <= gasPriceLimit,"Gas price exceeds limit.");
                require(_holderLastTransferBlock[tx.origin] != block.number,"Too many TX in block");
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                _holderLastTransferBlock[tx.origin] = block.number;
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
            }

            if (maxWalletEnabled) {
            uint256 contractBalanceRecipient = balanceOf(to);
            require(contractBalanceRecipient + amount <= maxWallet,
                    "Exceeds maximum wallet token amount." );
            }
            }

            uint256 totalFees = marketingFees.add(liquidityFee).add(devFee);

            uint256 contractTokenBalance = balanceOf(address(this));

            bool canSwap = contractTokenBalance >= swapTokensAtAmount;

            if (canSwap && !automatedMarketMakerPairs[from]) {
                swapping = true;

                uint256 swapTokens;

                if (swapAndLiquifyEnabled && liquidityFee > 0) {
                    uint256 totalBuySell = buyAmount.add(sellAmount);
                    uint256 swapAmountBought = contractTokenBalance
                        .mul(buyAmount)
                        .div(totalBuySell);
                    uint256 swapAmountSold = contractTokenBalance
                        .mul(sellAmount)
                        .div(totalBuySell);

                    uint256 swapBuyTokens = swapAmountBought
                        .mul(liquidityFee)
                        .div(totalBuyFees);

                    uint256 swapSellTokens = swapAmountSold
                        .mul(liquidityFee)
                        .div(totalSellFees);

                    swapTokens = swapSellTokens.add(swapBuyTokens);

                    swapAndLiquify(swapTokens);
                }

                uint256 remainingBalance = swapTokensAtAmount.sub(swapTokens);
                swapAndSendDividends(remainingBalance);
                buyAmount = 0;
                sellAmount = 0;
                swapping = false;
            }

            uint256 fees = amount.mul(totalFees).div(100);

            amount = amount.sub(fees);

            if (isSelling) {
                sellAmount = sellAmount.add(fees);
            } else {
                buyAmount = buyAmount.add(fees);
            }

            super._transfer(from, address(this), fees);
           
        }

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


    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
        uint256 newBalance = address(this).balance.sub(initialBalance);
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    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, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

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

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

    function forceSwapAndSendDividends(uint256 tokens) public onlyOwner {
        tokens = tokens * (10**18);
        uint256 totalAmount = buyAmount.add(sellAmount);
        uint256 fromBuy = tokens.mul(buyAmount).div(totalAmount);
        uint256 fromSell = tokens.mul(sellAmount).div(totalAmount);

        swapAndSendDividends(tokens);

        buyAmount = buyAmount.sub(fromBuy);
        sellAmount = sellAmount.sub(fromSell);
    }

    // TAX PAYOUT CODE 
    function swapAndSendDividends(uint256 tokens) private {
        if (tokens == 0) {
            return;
        }
        swapTokensForEth(tokens);

        bool success = true;
        bool successOp1 = true;
        
        uint256 _marketDevTotal = sellMarketingFees.add(sellDevFee) + buyMarketingFees.add(buyDevFee);

        uint256 feePortions;
        if (_marketDevTotal > 0) {
            feePortions = address(this).balance.div(_marketDevTotal);
        }
        uint256 marketingPayout = buyMarketingFees.add(sellMarketingFees) * feePortions;
        uint256 devPayout = buyDevFee.add(sellDevFee) * feePortions;
        
        if (marketingPayout > 0) {
            (success, ) = address(marketingWallet).call{value: marketingPayout}("");
        }
        
        if (devPayout > 0) {
            (successOp1, ) = address(devWallet).call{value: devPayout}("");
        }

        emit SendDividends(
            marketingPayout,
            success && successOp1
        );
    }

    function airdropToWallets(
        address[] memory airdropWallets,
        uint256[] memory amount
    ) external onlyOwner {
        require(airdropWallets.length == amount.length, "Arrays must be the same length");
        require(airdropWallets.length <= 200, "Wallets list length must be <= 200");
        for (uint256 i = 0; i < airdropWallets.length; i++) {
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i] * (10**18);
            super._transfer(msg.sender, wallet, airdropAmount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableSwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"opAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"SetPreSaleWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDevFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellDevFee","type":"uint256"}],"name":"UpdateFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateDevWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateMarketingWallet","type":"event"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldowntimer","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":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"forceSwapAndSendDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchtimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setCanTransferBefore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setMaxWalletEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setcooldowntimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"newOwner","type":"address"}],"name":"transferAdmin","outputs":[],"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":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"liquidityBuy","type":"uint256"},{"internalType":"uint256","name":"liquiditySell","type":"uint256"},{"internalType":"uint256","name":"devBuy","type":"uint256"},{"internalType":"uint256","name":"devSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600760156101000a81548160ff021916908315150217905550600060085560006009556001600f60006101000a81548160ff0219169083151502179055506001601760006101000a81548160ff0219169083151502179055506000601b60006101000a81548160ff0219169083151502179055506401a13b8600601c5560006021553480156200009557600080fd5b506040518060400160405280600a81526020017f4f72736f20546f6b656e000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4f52534f00000000000000000000000000000000000000000000000000000000815250816003908162000113919062000d59565b50806004908162000125919062000d59565b50505060006200013a620007f660201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3507383347d15d3e255fb64ad3a2ee061d15bb3fda09b600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b1d115c0883ed814a62e59e8e70913749116b39c600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060036013819055506003601181905550600160148190555060016012819055506001601581905550600160168190555062000305601554620002f1601454601354620007fe60201b620028fa1790919060201c565b620007fe60201b620028fa1790919060201c565b600b819055506200034460165462000330601254601154620007fe60201b620028fa1790919060201c565b620007fe60201b620028fa1790919060201c565b600a8190555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041f919062000eaa565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004cf919062000eaa565b6040518363ffffffff1660e01b8152600401620004ee92919062000eed565b6020604051808303816000875af11580156200050e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000534919062000eaa565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005a9600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200086160201b60201c565b6001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006b204fce5e3e25026110000000905062000705620006f86200090260201b60201c565b826200092c60201b60201c565b60328162000714919062000f78565b600e8190555060198162000729919062000f78565b6010819055506001601a6000620007456200090260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050506200110e565b600033905090565b60008082846200080f919062000fb0565b90508381101562000857576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200084e906200104c565b60405180910390fd5b8091505092915050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200099e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200099590620010be565b60405180910390fd5b620009b26000838362000ada60201b60201c565b620009ce81600254620007fe60201b620028fa1790919060201c565b60028190555062000a2c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620007fe60201b620028fa1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ace9190620010f1565b60405180910390a35050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b6157607f821691505b60208210810362000b775762000b7662000b19565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000be17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ba2565b62000bed868362000ba2565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c3a62000c3462000c2e8462000c05565b62000c0f565b62000c05565b9050919050565b6000819050919050565b62000c568362000c19565b62000c6e62000c658262000c41565b84845462000baf565b825550505050565b600090565b62000c8562000c76565b62000c9281848462000c4b565b505050565b5b8181101562000cba5762000cae60008262000c7b565b60018101905062000c98565b5050565b601f82111562000d095762000cd38162000b7d565b62000cde8462000b92565b8101602085101562000cee578190505b62000d0662000cfd8562000b92565b83018262000c97565b50505b505050565b600082821c905092915050565b600062000d2e6000198460080262000d0e565b1980831691505092915050565b600062000d49838362000d1b565b9150826002028217905092915050565b62000d648262000adf565b67ffffffffffffffff81111562000d805762000d7f62000aea565b5b62000d8c825462000b48565b62000d9982828562000cbe565b600060209050601f83116001811462000dd1576000841562000dbc578287015190505b62000dc8858262000d3b565b86555062000e38565b601f19841662000de18662000b7d565b60005b8281101562000e0b5784890151825560018201915060208501945060208101905062000de4565b8683101562000e2b578489015162000e27601f89168262000d1b565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e728262000e45565b9050919050565b62000e848162000e65565b811462000e9057600080fd5b50565b60008151905062000ea48162000e79565b92915050565b60006020828403121562000ec35762000ec262000e40565b5b600062000ed38482850162000e93565b91505092915050565b62000ee78162000e65565b82525050565b600060408201905062000f04600083018562000edc565b62000f13602083018462000edc565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f858262000c05565b915062000f928362000c05565b92508262000fa55762000fa462000f1a565b5b828204905092915050565b600062000fbd8262000c05565b915062000fca8362000c05565b925082820190508082111562000fe55762000fe462000f49565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001034601b8362000feb565b9150620010418262000ffc565b602082019050919050565b60006020820190508181036000830152620010678162001025565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010a6601f8362000feb565b9150620010b3826200106e565b602082019050919050565b60006020820190508181036000830152620010d98162001097565b9050919050565b620010eb8162000c05565b82525050565b6000602082019050620011086000830184620010e0565b92915050565b615808806200111e6000396000f3fe6080604052600436106103395760003560e01c806375f0a874116101ab578063a614ff75116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610bf5578063f637434214610c1e578063f8b45b0514610c49578063fc6b151c14610c7457610340565b8063dd62ed3e14610b62578063e2f4560514610b9f578063f11a24d314610bca57610340565b8063b62496f5116100d1578063b62496f514610aa8578063b74e3b1114610ae5578063d045a32914610b0e578063d5e3725114610b3957610340565b8063a614ff7514610a17578063a9059cbb14610a40578063b494298814610a7d57610340565b806395451c29116101645780639a7a23d61161013e5780639a7a23d61461095b5780639c3b4fdc14610984578063a0d82dc5146109af578063a457c2d7146109da57610340565b806395451c29146108dc57806395d89b4114610907578063992c58e41461093257610340565b806375f0a874146107f05780637fdde05c1461081b5780638a8c523c146108445780638c3c82b21461085b5780638da5cb5b146108865780638ea5220f146108b157610340565b80633f407b84116102855780635d098b38116102235780637088fb7f116101fd5780637088fb7f1461075c57806370a0823114610773578063715018a6146107b057806375829def146107c757610340565b80635d098b38146106e15780635eee4bae1461070a578063679ca6e91461073357610340565b80634a74bb021161025f5780634a74bb02146106235780634ada218b1461064e5780634fbee193146106795780635124f874146106b657610340565b80633f407b84146105a257806349bd5a5e146105cd5780634a62bb65146105f857610340565b80631d7b1fb4116102f25780632307b441116102cc5780632307b441146104d457806323b872dd146104fd578063313ce5671461053a578063395093511461056557610340565b80631d7b1fb4146104555780631f53ac02146104805780631fa70531146104a957610340565b806305ca5f081461034557806306fdde031461036e57806308dfe8a514610399578063095ea7b3146103c25780631694505e146103ff57806318160ddd1461042a57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061036c60048036038101906103679190613fc3565b610c9d565b005b34801561037a57600080fd5b50610383610e00565b6040516103909190614080565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190614138565b610e92565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190614178565b610fd2565b6040516103f691906141c7565b60405180910390f35b34801561040b57600080fd5b50610414610ff0565b6040516104219190614241565b60405180910390f35b34801561043657600080fd5b5061043f611016565b60405161044c919061426b565b60405180910390f35b34801561046157600080fd5b5061046a611020565b604051610477919061426b565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190614286565b611026565b005b3480156104b557600080fd5b506104be611190565b6040516104cb919061426b565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f691906144be565b611196565b005b34801561050957600080fd5b50610524600480360381019061051f9190614536565b611338565b60405161053191906141c7565b60405180910390f35b34801561054657600080fd5b5061054f611411565b60405161055c91906145a5565b60405180910390f35b34801561057157600080fd5b5061058c60048036038101906105879190614178565b61141a565b60405161059991906141c7565b60405180910390f35b3480156105ae57600080fd5b506105b76114cd565b6040516105c4919061426b565b60405180910390f35b3480156105d957600080fd5b506105e26114d3565b6040516105ef91906145cf565b60405180910390f35b34801561060457600080fd5b5061060d6114f9565b60405161061a91906141c7565b60405180910390f35b34801561062f57600080fd5b5061063861150c565b60405161064591906141c7565b60405180910390f35b34801561065a57600080fd5b5061066361151f565b60405161067091906141c7565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190614286565b611532565b6040516106ad91906141c7565b60405180910390f35b3480156106c257600080fd5b506106cb611588565b6040516106d8919061426b565b60405180910390f35b3480156106ed57600080fd5b5061070860048036038101906107039190614286565b61158e565b005b34801561071657600080fd5b50610731600480360381019061072c9190613fc3565b6116f8565b005b34801561073f57600080fd5b5061075a600480360381019061075591906145ea565b6117ac565b005b34801561076857600080fd5b50610771611860565b005b34801561077f57600080fd5b5061079a60048036038101906107959190614286565b611946565b6040516107a7919061426b565b60405180910390f35b3480156107bc57600080fd5b506107c561198e565b005b3480156107d357600080fd5b506107ee60048036038101906107e99190614286565b611ae6565b005b3480156107fc57600080fd5b50610805611c39565b6040516108129190614638565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d9190614138565b611c5f565b005b34801561085057600080fd5b50610859611d51565b005b34801561086757600080fd5b50610870611e59565b60405161087d919061426b565b60405180910390f35b34801561089257600080fd5b5061089b611e5f565b6040516108a891906145cf565b60405180910390f35b3480156108bd57600080fd5b506108c6611e89565b6040516108d39190614638565b60405180910390f35b3480156108e857600080fd5b506108f1611eaf565b6040516108fe919061426b565b60405180910390f35b34801561091357600080fd5b5061091c611eb5565b6040516109299190614080565b60405180910390f35b34801561093e57600080fd5b5061095960048036038101906109549190614653565b611f47565b005b34801561096757600080fd5b50610982600480360381019061097d9190614138565b612114565b005b34801561099057600080fd5b506109996121b9565b6040516109a6919061426b565b60405180910390f35b3480156109bb57600080fd5b506109c46121bf565b6040516109d1919061426b565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc9190614178565b6121c5565b604051610a0e91906141c7565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a3991906145ea565b612292565b005b348015610a4c57600080fd5b50610a676004803603810190610a629190614178565b612346565b604051610a7491906141c7565b60405180910390f35b348015610a8957600080fd5b50610a92612364565b604051610a9f919061426b565b60405180910390f35b348015610ab457600080fd5b50610acf6004803603810190610aca9190614286565b61236a565b604051610adc91906141c7565b60405180910390f35b348015610af157600080fd5b50610b0c6004803603810190610b079190613fc3565b61238a565b005b348015610b1a57600080fd5b50610b23612470565b604051610b3091906141c7565b60405180910390f35b348015610b4557600080fd5b50610b606004803603810190610b5b91906145ea565b612483565b005b348015610b6e57600080fd5b50610b896004803603810190610b8491906146e0565b61258d565b604051610b96919061426b565b60405180910390f35b348015610bab57600080fd5b50610bb4612614565b604051610bc1919061426b565b60405180910390f35b348015610bd657600080fd5b50610bdf61261a565b604051610bec919061426b565b60405180910390f35b348015610c0157600080fd5b50610c1c6004803603810190610c179190614286565b612620565b005b348015610c2a57600080fd5b50610c336127e6565b604051610c40919061426b565b60405180910390f35b348015610c5557600080fd5b50610c5e6127ec565b604051610c6b919061426b565b60405180910390f35b348015610c8057600080fd5b50610c9b6004803603810190610c969190613fc3565b6127f2565b005b610ca5612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b9061476c565b60405180910390fd5b670de0b6b3a764000081610d4891906147bb565b90506000610d636008546009546128fa90919063ffffffff16565b90506000610d8e82610d806009548661296090919063ffffffff16565b6129da90919063ffffffff16565b90506000610db983610dab6008548761296090919063ffffffff16565b6129da90919063ffffffff16565b9050610dc484612a24565b610dd982600954612c6690919063ffffffff16565b600981905550610df481600854612c6690919063ffffffff16565b60088190555050505050565b606060038054610e0f9061482c565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3b9061482c565b8015610e885780601f10610e5d57610100808354040283529160200191610e88565b820191906000526020600020905b815481529060010190602001808311610e6b57829003601f168201915b5050505050905090565b610e9a612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f209061476c565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610fc691906141c7565b60405180910390a25050565b6000610fe6610fdf612958565b8484612cb0565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60215481565b61102e612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b49061476c565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa8160405161118591906145cf565b60405180910390a150565b60095481565b61119e612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112249061476c565b60405180910390fd5b8051825114611271576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611268906148a9565b60405180910390fd5b60c8825111156112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad9061493b565b60405180910390fd5b60005b82518110156113335760008382815181106112d7576112d661495b565b5b602002602001015190506000670de0b6b3a76400008484815181106112ff576112fe61495b565b5b602002602001015161131191906147bb565b905061131e338383612e79565b5050808061132b9061498a565b9150506112b9565b505050565b600061134584848461310c565b61140684611351612958565b6114018560405180606001604052806028815260200161578660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113b7612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b612cb0565b600190509392505050565b60006012905090565b60006114c3611427612958565b846114be8560016000611438612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fa90919063ffffffff16565b612cb0565b6001905092915050565b60085481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900460ff1681565b601760009054906101000a900460ff1681565b600760159054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b611596612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c9061476c565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c224433816040516116ed91906145cf565b60405180910390a150565b611700612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117869061476c565b60405180910390fd5b670de0b6b3a7640000816117a391906147bb565b60108190555050565b6117b4612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a9061476c565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b611868612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee9061476c565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611942573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611996612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c9061476c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611aee612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b749061476c565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c3681612620565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c67612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced9061476c565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d59612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf9061476c565b60405180910390fd5b600760159054906101000a900460ff1615611e0257600080fd5b6001600760156101000a81548160ff02191690831515021790555043601f81905550426020819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b60205481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b606060048054611ec49061482c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef09061482c565b8015611f3d5780601f10611f1257610100808354040283529160200191611f3d565b820191906000526020600020905b815481529060010190602001808311611f2057829003601f168201915b5050505050905090565b611f4f612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd59061476c565b60405180910390fd5b8560138190555083601481905550846011819055508260128190555081601581905550806016819055506120336016546120256012546011546128fa90919063ffffffff16565b6128fa90919063ffffffff16565b600a819055506120646015546120566014546013546128fa90919063ffffffff16565b6128fa90919063ffffffff16565b600b819055506032600a541115801561208057506032600b5411155b6120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690614a44565b60405180910390fd5b7ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff60115460125460165460135460145460155460405161210496959493929190614a64565b60405180910390a1505050505050565b61211c612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a29061476c565b60405180910390fd5b6121b58282613aa8565b5050565b60155481565b60165481565b60006122886121d2612958565b84612283856040518060600160405280602581526020016157ae60259139600160006121fc612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b612cb0565b6001905092915050565b61229a612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612329576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123209061476c565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600061235a612353612958565b848461310c565b6001905092915050565b601f5481565b60196020528060005260406000206000915054906101000a900460ff1681565b612392612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612421576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124189061476c565b60405180910390fd5b61012c811115612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d90614b37565b60405180910390fd5b8060218190555050565b600f60009054906101000a900460ff1681565b61248b612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125119061476c565b60405180910390fd5b801515601760009054906101000a900460ff1615150361253957600080fd5b80601760006101000a81548160ff0219169083151502179055507fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef8160405161258291906141c7565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b60145481565b612628612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ae9061476c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271d90614bc9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600e5481565b6127fa612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612889576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128809061476c565b60405180910390fd5b670de0b6b3a76400008161289d91906147bb565b905060326002546128ae9190614c18565b8110156128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e790614cbb565b60405180910390fd5b80600e8190555050565b60008082846129099190614cdb565b90508381101561294e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294590614d5b565b60405180910390fd5b8091505092915050565b600033905090565b600080830361297257600090506129d4565b6000828461298091906147bb565b905082848261298f9190614c18565b146129cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c690614ded565b60405180910390fd5b809150505b92915050565b6000612a1c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b49565b905092915050565b6000810315612c6357612a3681613bac565b6000600190506000600190506000612a5b6015546013546128fa90919063ffffffff16565b612a726016546011546128fa90919063ffffffff16565b612a7c9190614cdb565b9050600080821115612a9e57612a9b82476129da90919063ffffffff16565b90505b600081612ab86011546013546128fa90919063ffffffff16565b612ac291906147bb565b9050600082612ade6016546015546128fa90919063ffffffff16565b612ae891906147bb565b90506000821115612b8257600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612b3990614e3e565b60006040518083038185875af1925050503d8060008114612b76576040519150601f19603f3d011682016040523d82523d6000602084013e612b7b565b606091505b5050809650505b6000811115612c1a57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612bd190614e3e565b60006040518083038185875af1925050503d8060008114612c0e576040519150601f19603f3d011682016040523d82523d6000602084013e612c13565b606091505b5050809550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea982878015612c465750865b604051612c54929190614e53565b60405180910390a15050505050505b50565b6000612ca883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a44565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1690614eee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8590614f80565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e6c919061426b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612edf90615012565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4e906150a4565b60405180910390fd5b612f62838383613def565b612fcd81604051806060016040528060268152602001615760602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613060816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fa90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130ff919061426b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361317b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317290615136565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e1906151c8565b60405180910390fd5b6000806000601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661329057600760159054906101000a900460ff1661328f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328690615234565b60405180910390fd5b5b600084036132ac576132a486866000612e79565b505050613a3f565b600760149054906101000a900460ff161580156133135750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133695750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a30576000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905080156134c257601154935060125492506016549150601b60009054906101000a900460ff16156134bd57602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134369190614cdb565b421015613478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346f906152a0565b60405180910390fd5b42601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613789565b601354935060145492506015549150601b60009054906101000a900460ff1615613714576002601f546134f59190614cdb565b4311613536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352d9061530c565b60405180910390fd5b601c543a111561357b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357290615378565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036135fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f3906153e4565b60405180910390fd5b602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136499190614cdb565b42101561368b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613682906152a0565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff161561378857600061373487611946565b9050600e5486826137459190614cdb565b1115613786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377d90615476565b60405180910390fd5b505b5b60006137b0836137a286886128fa90919063ffffffff16565b6128fa90919063ffffffff16565b905060006137bd30611946565b9050600060105482101590508080156138205750601960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561399e576001600760146101000a81548160ff0219169083151502179055506000601760009054906101000a900460ff16801561385e5750600087115b1561394e57600061387c6008546009546128fa90919063ffffffff16565b905060006138a7826138996009548861296090919063ffffffff16565b6129da90919063ffffffff16565b905060006138d2836138c46008548961296090919063ffffffff16565b6129da90919063ffffffff16565b905060006138fd600b546138ef8d8661296090919063ffffffff16565b6129da90919063ffffffff16565b90506000613928600a5461391a8e8661296090919063ffffffff16565b6129da90919063ffffffff16565b905061393d82826128fa90919063ffffffff16565b955061394886613df4565b50505050505b600061396582601054612c6690919063ffffffff16565b905061397081612a24565b600060098190555060006008819055506000600760146101000a81548160ff02191690831515021790555050505b60006139c660646139b8868c61296090919063ffffffff16565b6129da90919063ffffffff16565b90506139db818a612c6690919063ffffffff16565b98508415613a03576139f8816008546128fa90919063ffffffff16565b600881905550613a1f565b613a18816009546128fa90919063ffffffff16565b6009819055505b613a2a8b3083612e79565b50505050505b613a3b868686612e79565b5050505b505050565b6000838311158290613a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a839190614080565b60405180910390fd5b5060008385613a9b9190615496565b9050809150509392505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008083118290613b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b879190614080565b60405180910390fd5b5060008385613b9f9190614c18565b9050809150509392505050565b6000600267ffffffffffffffff811115613bc957613bc86142b8565b5b604051908082528060200260200182016040528015613bf75781602001602082028036833780820191505090505b5090503081600081518110613c0f57613c0e61495b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cda91906154df565b81600181518110613cee57613ced61495b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d5530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613db9959493929190615605565b600060405180830381600087803b158015613dd357600080fd5b505af1158015613de7573d6000803e3d6000fd5b505050505050565b505050565b6000613e0a6002836129da90919063ffffffff16565b90506000613e218284612c6690919063ffffffff16565b90506000479050613e3183613bac565b6000613e468247612c6690919063ffffffff16565b9050613e528382613e94565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051613e859392919061565f565b60405180910390a15050505050565b613ec130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613f0d611e5f565b426040518863ffffffff1660e01b8152600401613f2f96959493929190615696565b60606040518083038185885af1158015613f4d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f72919061570c565b5050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613fa081613f8d565b8114613fab57600080fd5b50565b600081359050613fbd81613f97565b92915050565b600060208284031215613fd957613fd8613f83565b5b6000613fe784828501613fae565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561402a57808201518184015260208101905061400f565b60008484015250505050565b6000601f19601f8301169050919050565b600061405282613ff0565b61405c8185613ffb565b935061406c81856020860161400c565b61407581614036565b840191505092915050565b6000602082019050818103600083015261409a8184614047565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140cd826140a2565b9050919050565b6140dd816140c2565b81146140e857600080fd5b50565b6000813590506140fa816140d4565b92915050565b60008115159050919050565b61411581614100565b811461412057600080fd5b50565b6000813590506141328161410c565b92915050565b6000806040838503121561414f5761414e613f83565b5b600061415d858286016140eb565b925050602061416e85828601614123565b9150509250929050565b6000806040838503121561418f5761418e613f83565b5b600061419d858286016140eb565b92505060206141ae85828601613fae565b9150509250929050565b6141c181614100565b82525050565b60006020820190506141dc60008301846141b8565b92915050565b6000819050919050565b60006142076142026141fd846140a2565b6141e2565b6140a2565b9050919050565b6000614219826141ec565b9050919050565b600061422b8261420e565b9050919050565b61423b81614220565b82525050565b60006020820190506142566000830184614232565b92915050565b61426581613f8d565b82525050565b6000602082019050614280600083018461425c565b92915050565b60006020828403121561429c5761429b613f83565b5b60006142aa848285016140eb565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6142f082614036565b810181811067ffffffffffffffff8211171561430f5761430e6142b8565b5b80604052505050565b6000614322613f79565b905061432e82826142e7565b919050565b600067ffffffffffffffff82111561434e5761434d6142b8565b5b602082029050602081019050919050565b600080fd5b600061437761437284614333565b614318565b9050808382526020820190506020840283018581111561439a5761439961435f565b5b835b818110156143c357806143af88826140eb565b84526020840193505060208101905061439c565b5050509392505050565b600082601f8301126143e2576143e16142b3565b5b81356143f2848260208601614364565b91505092915050565b600067ffffffffffffffff821115614416576144156142b8565b5b602082029050602081019050919050565b600061443a614435846143fb565b614318565b9050808382526020820190506020840283018581111561445d5761445c61435f565b5b835b8181101561448657806144728882613fae565b84526020840193505060208101905061445f565b5050509392505050565b600082601f8301126144a5576144a46142b3565b5b81356144b5848260208601614427565b91505092915050565b600080604083850312156144d5576144d4613f83565b5b600083013567ffffffffffffffff8111156144f3576144f2613f88565b5b6144ff858286016143cd565b925050602083013567ffffffffffffffff8111156145205761451f613f88565b5b61452c85828601614490565b9150509250929050565b60008060006060848603121561454f5761454e613f83565b5b600061455d868287016140eb565b935050602061456e868287016140eb565b925050604061457f86828701613fae565b9150509250925092565b600060ff82169050919050565b61459f81614589565b82525050565b60006020820190506145ba6000830184614596565b92915050565b6145c9816140c2565b82525050565b60006020820190506145e460008301846145c0565b92915050565b600060208284031215614600576145ff613f83565b5b600061460e84828501614123565b91505092915050565b6000614622826140a2565b9050919050565b61463281614617565b82525050565b600060208201905061464d6000830184614629565b92915050565b60008060008060008060c087890312156146705761466f613f83565b5b600061467e89828a01613fae565b965050602061468f89828a01613fae565b95505060406146a089828a01613fae565b94505060606146b189828a01613fae565b93505060806146c289828a01613fae565b92505060a06146d389828a01613fae565b9150509295509295509295565b600080604083850312156146f7576146f6613f83565b5b6000614705858286016140eb565b9250506020614716858286016140eb565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614756602083613ffb565b915061476182614720565b602082019050919050565b6000602082019050818103600083015261478581614749565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147c682613f8d565b91506147d183613f8d565b92508282026147df81613f8d565b915082820484148315176147f6576147f561478c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061484457607f821691505b602082108103614857576148566147fd565b5b50919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b6000614893601e83613ffb565b915061489e8261485d565b602082019050919050565b600060208201905081810360008301526148c281614886565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614925602283613ffb565b9150614930826148c9565b604082019050919050565b6000602082019050818103600083015261495481614918565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061499582613f8d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149c7576149c661478c565b5b600182019050919050565b7f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60008201527f2035302500000000000000000000000000000000000000000000000000000000602082015250565b6000614a2e602483613ffb565b9150614a39826149d2565b604082019050919050565b60006020820190508181036000830152614a5d81614a21565b9050919050565b600060c082019050614a79600083018961425c565b614a86602083018861425c565b614a93604083018761425c565b614aa0606083018661425c565b614aad608083018561425c565b614aba60a083018461425c565b979650505050505050565b7f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d60008201527f696e757465730000000000000000000000000000000000000000000000000000602082015250565b6000614b21602683613ffb565b9150614b2c82614ac5565b604082019050919050565b60006020820190508181036000830152614b5081614b14565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614bb3602683613ffb565b9150614bbe82614b57565b604082019050919050565b60006020820190508181036000830152614be281614ba6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c2382613f8d565b9150614c2e83613f8d565b925082614c3e57614c3d614be9565b5b828204905092915050565b7f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360008201527f207468616e203225000000000000000000000000000000000000000000000000602082015250565b6000614ca5602883613ffb565b9150614cb082614c49565b604082019050919050565b60006020820190508181036000830152614cd481614c98565b9050919050565b6000614ce682613f8d565b9150614cf183613f8d565b9250828201905080821115614d0957614d0861478c565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614d45601b83613ffb565b9150614d5082614d0f565b602082019050919050565b60006020820190508181036000830152614d7481614d38565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dd7602183613ffb565b9150614de282614d7b565b604082019050919050565b60006020820190508181036000830152614e0681614dca565b9050919050565b600081905092915050565b50565b6000614e28600083614e0d565b9150614e3382614e18565b600082019050919050565b6000614e4982614e1b565b9150819050919050565b6000604082019050614e68600083018561425c565b614e7560208301846141b8565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ed8602483613ffb565b9150614ee382614e7c565b604082019050919050565b60006020820190508181036000830152614f0781614ecb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f6a602283613ffb565b9150614f7582614f0e565b604082019050919050565b60006020820190508181036000830152614f9981614f5d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ffc602583613ffb565b915061500782614fa0565b604082019050919050565b6000602082019050818103600083015261502b81614fef565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061508e602383613ffb565b915061509982615032565b604082019050919050565b600060208201905081810360008301526150bd81615081565b9050919050565b7f4945524332303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615120602683613ffb565b915061512b826150c4565b604082019050919050565b6000602082019050818103600083015261514f81615113565b9050919050565b7f4945524332303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151b2602483613ffb565b91506151bd82615156565b604082019050919050565b600060208201905081810360008301526151e1816151a5565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b600061521e602083613ffb565b9150615229826151e8565b602082019050919050565b6000602082019050818103600083015261524d81615211565b9050919050565b7f636f6f6c646f776e20706572696f642061637469766500000000000000000000600082015250565b600061528a601683613ffb565b915061529582615254565b602082019050919050565b600060208201905081810360008301526152b98161527d565b9050919050565b7f796f75207368616c6c206e6f7420706173730000000000000000000000000000600082015250565b60006152f6601283613ffb565b9150615301826152c0565b602082019050919050565b60006020820190508181036000830152615325816152e9565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b6000615362601883613ffb565b915061536d8261532c565b602082019050919050565b6000602082019050818103600083015261539181615355565b9050919050565b7f546f6f206d616e7920545820696e20626c6f636b000000000000000000000000600082015250565b60006153ce601483613ffb565b91506153d982615398565b602082019050919050565b600060208201905081810360008301526153fd816153c1565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000615460602483613ffb565b915061546b82615404565b604082019050919050565b6000602082019050818103600083015261548f81615453565b9050919050565b60006154a182613f8d565b91506154ac83613f8d565b92508282039050818111156154c4576154c361478c565b5b92915050565b6000815190506154d9816140d4565b92915050565b6000602082840312156154f5576154f4613f83565b5b6000615503848285016154ca565b91505092915050565b6000819050919050565b600061553161552c6155278461550c565b6141e2565b613f8d565b9050919050565b61554181615516565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61557c816140c2565b82525050565b600061558e8383615573565b60208301905092915050565b6000602082019050919050565b60006155b282615547565b6155bc8185615552565b93506155c783615563565b8060005b838110156155f85781516155df8882615582565b97506155ea8361559a565b9250506001810190506155cb565b5085935050505092915050565b600060a08201905061561a600083018861425c565b6156276020830187615538565b818103604083015261563981866155a7565b905061564860608301856145c0565b615655608083018461425c565b9695505050505050565b6000606082019050615674600083018661425c565b615681602083018561425c565b61568e604083018461425c565b949350505050565b600060c0820190506156ab60008301896145c0565b6156b8602083018861425c565b6156c56040830187615538565b6156d26060830186615538565b6156df60808301856145c0565b6156ec60a083018461425c565b979650505050505050565b60008151905061570681613f97565b92915050565b60008060006060848603121561572557615724613f83565b5b6000615733868287016156f7565b9350506020615744868287016156f7565b9250506040615755868287016156f7565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bc0c03632f5fae517e74d0cd6f88a545f91d3330002998f1cdc0021011572eb064736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103395760003560e01c806375f0a874116101ab578063a614ff75116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610bf5578063f637434214610c1e578063f8b45b0514610c49578063fc6b151c14610c7457610340565b8063dd62ed3e14610b62578063e2f4560514610b9f578063f11a24d314610bca57610340565b8063b62496f5116100d1578063b62496f514610aa8578063b74e3b1114610ae5578063d045a32914610b0e578063d5e3725114610b3957610340565b8063a614ff7514610a17578063a9059cbb14610a40578063b494298814610a7d57610340565b806395451c29116101645780639a7a23d61161013e5780639a7a23d61461095b5780639c3b4fdc14610984578063a0d82dc5146109af578063a457c2d7146109da57610340565b806395451c29146108dc57806395d89b4114610907578063992c58e41461093257610340565b806375f0a874146107f05780637fdde05c1461081b5780638a8c523c146108445780638c3c82b21461085b5780638da5cb5b146108865780638ea5220f146108b157610340565b80633f407b84116102855780635d098b38116102235780637088fb7f116101fd5780637088fb7f1461075c57806370a0823114610773578063715018a6146107b057806375829def146107c757610340565b80635d098b38146106e15780635eee4bae1461070a578063679ca6e91461073357610340565b80634a74bb021161025f5780634a74bb02146106235780634ada218b1461064e5780634fbee193146106795780635124f874146106b657610340565b80633f407b84146105a257806349bd5a5e146105cd5780634a62bb65146105f857610340565b80631d7b1fb4116102f25780632307b441116102cc5780632307b441146104d457806323b872dd146104fd578063313ce5671461053a578063395093511461056557610340565b80631d7b1fb4146104555780631f53ac02146104805780631fa70531146104a957610340565b806305ca5f081461034557806306fdde031461036e57806308dfe8a514610399578063095ea7b3146103c25780631694505e146103ff57806318160ddd1461042a57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061036c60048036038101906103679190613fc3565b610c9d565b005b34801561037a57600080fd5b50610383610e00565b6040516103909190614080565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190614138565b610e92565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190614178565b610fd2565b6040516103f691906141c7565b60405180910390f35b34801561040b57600080fd5b50610414610ff0565b6040516104219190614241565b60405180910390f35b34801561043657600080fd5b5061043f611016565b60405161044c919061426b565b60405180910390f35b34801561046157600080fd5b5061046a611020565b604051610477919061426b565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190614286565b611026565b005b3480156104b557600080fd5b506104be611190565b6040516104cb919061426b565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f691906144be565b611196565b005b34801561050957600080fd5b50610524600480360381019061051f9190614536565b611338565b60405161053191906141c7565b60405180910390f35b34801561054657600080fd5b5061054f611411565b60405161055c91906145a5565b60405180910390f35b34801561057157600080fd5b5061058c60048036038101906105879190614178565b61141a565b60405161059991906141c7565b60405180910390f35b3480156105ae57600080fd5b506105b76114cd565b6040516105c4919061426b565b60405180910390f35b3480156105d957600080fd5b506105e26114d3565b6040516105ef91906145cf565b60405180910390f35b34801561060457600080fd5b5061060d6114f9565b60405161061a91906141c7565b60405180910390f35b34801561062f57600080fd5b5061063861150c565b60405161064591906141c7565b60405180910390f35b34801561065a57600080fd5b5061066361151f565b60405161067091906141c7565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190614286565b611532565b6040516106ad91906141c7565b60405180910390f35b3480156106c257600080fd5b506106cb611588565b6040516106d8919061426b565b60405180910390f35b3480156106ed57600080fd5b5061070860048036038101906107039190614286565b61158e565b005b34801561071657600080fd5b50610731600480360381019061072c9190613fc3565b6116f8565b005b34801561073f57600080fd5b5061075a600480360381019061075591906145ea565b6117ac565b005b34801561076857600080fd5b50610771611860565b005b34801561077f57600080fd5b5061079a60048036038101906107959190614286565b611946565b6040516107a7919061426b565b60405180910390f35b3480156107bc57600080fd5b506107c561198e565b005b3480156107d357600080fd5b506107ee60048036038101906107e99190614286565b611ae6565b005b3480156107fc57600080fd5b50610805611c39565b6040516108129190614638565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d9190614138565b611c5f565b005b34801561085057600080fd5b50610859611d51565b005b34801561086757600080fd5b50610870611e59565b60405161087d919061426b565b60405180910390f35b34801561089257600080fd5b5061089b611e5f565b6040516108a891906145cf565b60405180910390f35b3480156108bd57600080fd5b506108c6611e89565b6040516108d39190614638565b60405180910390f35b3480156108e857600080fd5b506108f1611eaf565b6040516108fe919061426b565b60405180910390f35b34801561091357600080fd5b5061091c611eb5565b6040516109299190614080565b60405180910390f35b34801561093e57600080fd5b5061095960048036038101906109549190614653565b611f47565b005b34801561096757600080fd5b50610982600480360381019061097d9190614138565b612114565b005b34801561099057600080fd5b506109996121b9565b6040516109a6919061426b565b60405180910390f35b3480156109bb57600080fd5b506109c46121bf565b6040516109d1919061426b565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc9190614178565b6121c5565b604051610a0e91906141c7565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a3991906145ea565b612292565b005b348015610a4c57600080fd5b50610a676004803603810190610a629190614178565b612346565b604051610a7491906141c7565b60405180910390f35b348015610a8957600080fd5b50610a92612364565b604051610a9f919061426b565b60405180910390f35b348015610ab457600080fd5b50610acf6004803603810190610aca9190614286565b61236a565b604051610adc91906141c7565b60405180910390f35b348015610af157600080fd5b50610b0c6004803603810190610b079190613fc3565b61238a565b005b348015610b1a57600080fd5b50610b23612470565b604051610b3091906141c7565b60405180910390f35b348015610b4557600080fd5b50610b606004803603810190610b5b91906145ea565b612483565b005b348015610b6e57600080fd5b50610b896004803603810190610b8491906146e0565b61258d565b604051610b96919061426b565b60405180910390f35b348015610bab57600080fd5b50610bb4612614565b604051610bc1919061426b565b60405180910390f35b348015610bd657600080fd5b50610bdf61261a565b604051610bec919061426b565b60405180910390f35b348015610c0157600080fd5b50610c1c6004803603810190610c179190614286565b612620565b005b348015610c2a57600080fd5b50610c336127e6565b604051610c40919061426b565b60405180910390f35b348015610c5557600080fd5b50610c5e6127ec565b604051610c6b919061426b565b60405180910390f35b348015610c8057600080fd5b50610c9b6004803603810190610c969190613fc3565b6127f2565b005b610ca5612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b9061476c565b60405180910390fd5b670de0b6b3a764000081610d4891906147bb565b90506000610d636008546009546128fa90919063ffffffff16565b90506000610d8e82610d806009548661296090919063ffffffff16565b6129da90919063ffffffff16565b90506000610db983610dab6008548761296090919063ffffffff16565b6129da90919063ffffffff16565b9050610dc484612a24565b610dd982600954612c6690919063ffffffff16565b600981905550610df481600854612c6690919063ffffffff16565b60088190555050505050565b606060038054610e0f9061482c565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3b9061482c565b8015610e885780601f10610e5d57610100808354040283529160200191610e88565b820191906000526020600020905b815481529060010190602001808311610e6b57829003601f168201915b5050505050905090565b610e9a612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f209061476c565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610fc691906141c7565b60405180910390a25050565b6000610fe6610fdf612958565b8484612cb0565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60215481565b61102e612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b49061476c565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa8160405161118591906145cf565b60405180910390a150565b60095481565b61119e612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112249061476c565b60405180910390fd5b8051825114611271576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611268906148a9565b60405180910390fd5b60c8825111156112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad9061493b565b60405180910390fd5b60005b82518110156113335760008382815181106112d7576112d661495b565b5b602002602001015190506000670de0b6b3a76400008484815181106112ff576112fe61495b565b5b602002602001015161131191906147bb565b905061131e338383612e79565b5050808061132b9061498a565b9150506112b9565b505050565b600061134584848461310c565b61140684611351612958565b6114018560405180606001604052806028815260200161578660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113b7612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b612cb0565b600190509392505050565b60006012905090565b60006114c3611427612958565b846114be8560016000611438612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fa90919063ffffffff16565b612cb0565b6001905092915050565b60085481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900460ff1681565b601760009054906101000a900460ff1681565b600760159054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b611596612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c9061476c565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c224433816040516116ed91906145cf565b60405180910390a150565b611700612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117869061476c565b60405180910390fd5b670de0b6b3a7640000816117a391906147bb565b60108190555050565b6117b4612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a9061476c565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b611868612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee9061476c565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611942573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611996612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c9061476c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611aee612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b749061476c565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c3681612620565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c67612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced9061476c565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d59612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf9061476c565b60405180910390fd5b600760159054906101000a900460ff1615611e0257600080fd5b6001600760156101000a81548160ff02191690831515021790555043601f81905550426020819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b60205481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b606060048054611ec49061482c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef09061482c565b8015611f3d5780601f10611f1257610100808354040283529160200191611f3d565b820191906000526020600020905b815481529060010190602001808311611f2057829003601f168201915b5050505050905090565b611f4f612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd59061476c565b60405180910390fd5b8560138190555083601481905550846011819055508260128190555081601581905550806016819055506120336016546120256012546011546128fa90919063ffffffff16565b6128fa90919063ffffffff16565b600a819055506120646015546120566014546013546128fa90919063ffffffff16565b6128fa90919063ffffffff16565b600b819055506032600a541115801561208057506032600b5411155b6120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690614a44565b60405180910390fd5b7ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff60115460125460165460135460145460155460405161210496959493929190614a64565b60405180910390a1505050505050565b61211c612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a29061476c565b60405180910390fd5b6121b58282613aa8565b5050565b60155481565b60165481565b60006122886121d2612958565b84612283856040518060600160405280602581526020016157ae60259139600160006121fc612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b612cb0565b6001905092915050565b61229a612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612329576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123209061476c565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600061235a612353612958565b848461310c565b6001905092915050565b601f5481565b60196020528060005260406000206000915054906101000a900460ff1681565b612392612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612421576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124189061476c565b60405180910390fd5b61012c811115612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d90614b37565b60405180910390fd5b8060218190555050565b600f60009054906101000a900460ff1681565b61248b612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125119061476c565b60405180910390fd5b801515601760009054906101000a900460ff1615150361253957600080fd5b80601760006101000a81548160ff0219169083151502179055507fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef8160405161258291906141c7565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b60145481565b612628612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ae9061476c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271d90614bc9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600e5481565b6127fa612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612889576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128809061476c565b60405180910390fd5b670de0b6b3a76400008161289d91906147bb565b905060326002546128ae9190614c18565b8110156128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e790614cbb565b60405180910390fd5b80600e8190555050565b60008082846129099190614cdb565b90508381101561294e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294590614d5b565b60405180910390fd5b8091505092915050565b600033905090565b600080830361297257600090506129d4565b6000828461298091906147bb565b905082848261298f9190614c18565b146129cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c690614ded565b60405180910390fd5b809150505b92915050565b6000612a1c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b49565b905092915050565b6000810315612c6357612a3681613bac565b6000600190506000600190506000612a5b6015546013546128fa90919063ffffffff16565b612a726016546011546128fa90919063ffffffff16565b612a7c9190614cdb565b9050600080821115612a9e57612a9b82476129da90919063ffffffff16565b90505b600081612ab86011546013546128fa90919063ffffffff16565b612ac291906147bb565b9050600082612ade6016546015546128fa90919063ffffffff16565b612ae891906147bb565b90506000821115612b8257600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612b3990614e3e565b60006040518083038185875af1925050503d8060008114612b76576040519150601f19603f3d011682016040523d82523d6000602084013e612b7b565b606091505b5050809650505b6000811115612c1a57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612bd190614e3e565b60006040518083038185875af1925050503d8060008114612c0e576040519150601f19603f3d011682016040523d82523d6000602084013e612c13565b606091505b5050809550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea982878015612c465750865b604051612c54929190614e53565b60405180910390a15050505050505b50565b6000612ca883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a44565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1690614eee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8590614f80565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e6c919061426b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612edf90615012565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4e906150a4565b60405180910390fd5b612f62838383613def565b612fcd81604051806060016040528060268152602001615760602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613060816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fa90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130ff919061426b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361317b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317290615136565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e1906151c8565b60405180910390fd5b6000806000601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661329057600760159054906101000a900460ff1661328f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328690615234565b60405180910390fd5b5b600084036132ac576132a486866000612e79565b505050613a3f565b600760149054906101000a900460ff161580156133135750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133695750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a30576000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905080156134c257601154935060125492506016549150601b60009054906101000a900460ff16156134bd57602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134369190614cdb565b421015613478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346f906152a0565b60405180910390fd5b42601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613789565b601354935060145492506015549150601b60009054906101000a900460ff1615613714576002601f546134f59190614cdb565b4311613536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352d9061530c565b60405180910390fd5b601c543a111561357b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357290615378565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036135fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f3906153e4565b60405180910390fd5b602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136499190614cdb565b42101561368b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613682906152a0565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff161561378857600061373487611946565b9050600e5486826137459190614cdb565b1115613786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377d90615476565b60405180910390fd5b505b5b60006137b0836137a286886128fa90919063ffffffff16565b6128fa90919063ffffffff16565b905060006137bd30611946565b9050600060105482101590508080156138205750601960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561399e576001600760146101000a81548160ff0219169083151502179055506000601760009054906101000a900460ff16801561385e5750600087115b1561394e57600061387c6008546009546128fa90919063ffffffff16565b905060006138a7826138996009548861296090919063ffffffff16565b6129da90919063ffffffff16565b905060006138d2836138c46008548961296090919063ffffffff16565b6129da90919063ffffffff16565b905060006138fd600b546138ef8d8661296090919063ffffffff16565b6129da90919063ffffffff16565b90506000613928600a5461391a8e8661296090919063ffffffff16565b6129da90919063ffffffff16565b905061393d82826128fa90919063ffffffff16565b955061394886613df4565b50505050505b600061396582601054612c6690919063ffffffff16565b905061397081612a24565b600060098190555060006008819055506000600760146101000a81548160ff02191690831515021790555050505b60006139c660646139b8868c61296090919063ffffffff16565b6129da90919063ffffffff16565b90506139db818a612c6690919063ffffffff16565b98508415613a03576139f8816008546128fa90919063ffffffff16565b600881905550613a1f565b613a18816009546128fa90919063ffffffff16565b6009819055505b613a2a8b3083612e79565b50505050505b613a3b868686612e79565b5050505b505050565b6000838311158290613a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a839190614080565b60405180910390fd5b5060008385613a9b9190615496565b9050809150509392505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008083118290613b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b879190614080565b60405180910390fd5b5060008385613b9f9190614c18565b9050809150509392505050565b6000600267ffffffffffffffff811115613bc957613bc86142b8565b5b604051908082528060200260200182016040528015613bf75781602001602082028036833780820191505090505b5090503081600081518110613c0f57613c0e61495b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cda91906154df565b81600181518110613cee57613ced61495b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d5530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613db9959493929190615605565b600060405180830381600087803b158015613dd357600080fd5b505af1158015613de7573d6000803e3d6000fd5b505050505050565b505050565b6000613e0a6002836129da90919063ffffffff16565b90506000613e218284612c6690919063ffffffff16565b90506000479050613e3183613bac565b6000613e468247612c6690919063ffffffff16565b9050613e528382613e94565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051613e859392919061565f565b60405180910390a15050505050565b613ec130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613f0d611e5f565b426040518863ffffffff1660e01b8152600401613f2f96959493929190615696565b60606040518083038185885af1158015613f4d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f72919061570c565b5050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613fa081613f8d565b8114613fab57600080fd5b50565b600081359050613fbd81613f97565b92915050565b600060208284031215613fd957613fd8613f83565b5b6000613fe784828501613fae565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561402a57808201518184015260208101905061400f565b60008484015250505050565b6000601f19601f8301169050919050565b600061405282613ff0565b61405c8185613ffb565b935061406c81856020860161400c565b61407581614036565b840191505092915050565b6000602082019050818103600083015261409a8184614047565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140cd826140a2565b9050919050565b6140dd816140c2565b81146140e857600080fd5b50565b6000813590506140fa816140d4565b92915050565b60008115159050919050565b61411581614100565b811461412057600080fd5b50565b6000813590506141328161410c565b92915050565b6000806040838503121561414f5761414e613f83565b5b600061415d858286016140eb565b925050602061416e85828601614123565b9150509250929050565b6000806040838503121561418f5761418e613f83565b5b600061419d858286016140eb565b92505060206141ae85828601613fae565b9150509250929050565b6141c181614100565b82525050565b60006020820190506141dc60008301846141b8565b92915050565b6000819050919050565b60006142076142026141fd846140a2565b6141e2565b6140a2565b9050919050565b6000614219826141ec565b9050919050565b600061422b8261420e565b9050919050565b61423b81614220565b82525050565b60006020820190506142566000830184614232565b92915050565b61426581613f8d565b82525050565b6000602082019050614280600083018461425c565b92915050565b60006020828403121561429c5761429b613f83565b5b60006142aa848285016140eb565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6142f082614036565b810181811067ffffffffffffffff8211171561430f5761430e6142b8565b5b80604052505050565b6000614322613f79565b905061432e82826142e7565b919050565b600067ffffffffffffffff82111561434e5761434d6142b8565b5b602082029050602081019050919050565b600080fd5b600061437761437284614333565b614318565b9050808382526020820190506020840283018581111561439a5761439961435f565b5b835b818110156143c357806143af88826140eb565b84526020840193505060208101905061439c565b5050509392505050565b600082601f8301126143e2576143e16142b3565b5b81356143f2848260208601614364565b91505092915050565b600067ffffffffffffffff821115614416576144156142b8565b5b602082029050602081019050919050565b600061443a614435846143fb565b614318565b9050808382526020820190506020840283018581111561445d5761445c61435f565b5b835b8181101561448657806144728882613fae565b84526020840193505060208101905061445f565b5050509392505050565b600082601f8301126144a5576144a46142b3565b5b81356144b5848260208601614427565b91505092915050565b600080604083850312156144d5576144d4613f83565b5b600083013567ffffffffffffffff8111156144f3576144f2613f88565b5b6144ff858286016143cd565b925050602083013567ffffffffffffffff8111156145205761451f613f88565b5b61452c85828601614490565b9150509250929050565b60008060006060848603121561454f5761454e613f83565b5b600061455d868287016140eb565b935050602061456e868287016140eb565b925050604061457f86828701613fae565b9150509250925092565b600060ff82169050919050565b61459f81614589565b82525050565b60006020820190506145ba6000830184614596565b92915050565b6145c9816140c2565b82525050565b60006020820190506145e460008301846145c0565b92915050565b600060208284031215614600576145ff613f83565b5b600061460e84828501614123565b91505092915050565b6000614622826140a2565b9050919050565b61463281614617565b82525050565b600060208201905061464d6000830184614629565b92915050565b60008060008060008060c087890312156146705761466f613f83565b5b600061467e89828a01613fae565b965050602061468f89828a01613fae565b95505060406146a089828a01613fae565b94505060606146b189828a01613fae565b93505060806146c289828a01613fae565b92505060a06146d389828a01613fae565b9150509295509295509295565b600080604083850312156146f7576146f6613f83565b5b6000614705858286016140eb565b9250506020614716858286016140eb565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614756602083613ffb565b915061476182614720565b602082019050919050565b6000602082019050818103600083015261478581614749565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147c682613f8d565b91506147d183613f8d565b92508282026147df81613f8d565b915082820484148315176147f6576147f561478c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061484457607f821691505b602082108103614857576148566147fd565b5b50919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b6000614893601e83613ffb565b915061489e8261485d565b602082019050919050565b600060208201905081810360008301526148c281614886565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614925602283613ffb565b9150614930826148c9565b604082019050919050565b6000602082019050818103600083015261495481614918565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061499582613f8d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149c7576149c661478c565b5b600182019050919050565b7f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60008201527f2035302500000000000000000000000000000000000000000000000000000000602082015250565b6000614a2e602483613ffb565b9150614a39826149d2565b604082019050919050565b60006020820190508181036000830152614a5d81614a21565b9050919050565b600060c082019050614a79600083018961425c565b614a86602083018861425c565b614a93604083018761425c565b614aa0606083018661425c565b614aad608083018561425c565b614aba60a083018461425c565b979650505050505050565b7f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d60008201527f696e757465730000000000000000000000000000000000000000000000000000602082015250565b6000614b21602683613ffb565b9150614b2c82614ac5565b604082019050919050565b60006020820190508181036000830152614b5081614b14565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614bb3602683613ffb565b9150614bbe82614b57565b604082019050919050565b60006020820190508181036000830152614be281614ba6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c2382613f8d565b9150614c2e83613f8d565b925082614c3e57614c3d614be9565b5b828204905092915050565b7f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360008201527f207468616e203225000000000000000000000000000000000000000000000000602082015250565b6000614ca5602883613ffb565b9150614cb082614c49565b604082019050919050565b60006020820190508181036000830152614cd481614c98565b9050919050565b6000614ce682613f8d565b9150614cf183613f8d565b9250828201905080821115614d0957614d0861478c565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614d45601b83613ffb565b9150614d5082614d0f565b602082019050919050565b60006020820190508181036000830152614d7481614d38565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dd7602183613ffb565b9150614de282614d7b565b604082019050919050565b60006020820190508181036000830152614e0681614dca565b9050919050565b600081905092915050565b50565b6000614e28600083614e0d565b9150614e3382614e18565b600082019050919050565b6000614e4982614e1b565b9150819050919050565b6000604082019050614e68600083018561425c565b614e7560208301846141b8565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ed8602483613ffb565b9150614ee382614e7c565b604082019050919050565b60006020820190508181036000830152614f0781614ecb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f6a602283613ffb565b9150614f7582614f0e565b604082019050919050565b60006020820190508181036000830152614f9981614f5d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ffc602583613ffb565b915061500782614fa0565b604082019050919050565b6000602082019050818103600083015261502b81614fef565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061508e602383613ffb565b915061509982615032565b604082019050919050565b600060208201905081810360008301526150bd81615081565b9050919050565b7f4945524332303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615120602683613ffb565b915061512b826150c4565b604082019050919050565b6000602082019050818103600083015261514f81615113565b9050919050565b7f4945524332303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151b2602483613ffb565b91506151bd82615156565b604082019050919050565b600060208201905081810360008301526151e1816151a5565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b600061521e602083613ffb565b9150615229826151e8565b602082019050919050565b6000602082019050818103600083015261524d81615211565b9050919050565b7f636f6f6c646f776e20706572696f642061637469766500000000000000000000600082015250565b600061528a601683613ffb565b915061529582615254565b602082019050919050565b600060208201905081810360008301526152b98161527d565b9050919050565b7f796f75207368616c6c206e6f7420706173730000000000000000000000000000600082015250565b60006152f6601283613ffb565b9150615301826152c0565b602082019050919050565b60006020820190508181036000830152615325816152e9565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b6000615362601883613ffb565b915061536d8261532c565b602082019050919050565b6000602082019050818103600083015261539181615355565b9050919050565b7f546f6f206d616e7920545820696e20626c6f636b000000000000000000000000600082015250565b60006153ce601483613ffb565b91506153d982615398565b602082019050919050565b600060208201905081810360008301526153fd816153c1565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000615460602483613ffb565b915061546b82615404565b604082019050919050565b6000602082019050818103600083015261548f81615453565b9050919050565b60006154a182613f8d565b91506154ac83613f8d565b92508282039050818111156154c4576154c361478c565b5b92915050565b6000815190506154d9816140d4565b92915050565b6000602082840312156154f5576154f4613f83565b5b6000615503848285016154ca565b91505092915050565b6000819050919050565b600061553161552c6155278461550c565b6141e2565b613f8d565b9050919050565b61554181615516565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61557c816140c2565b82525050565b600061558e8383615573565b60208301905092915050565b6000602082019050919050565b60006155b282615547565b6155bc8185615552565b93506155c783615563565b8060005b838110156155f85781516155df8882615582565b97506155ea8361559a565b9250506001810190506155cb565b5085935050505092915050565b600060a08201905061561a600083018861425c565b6156276020830187615538565b818103604083015261563981866155a7565b905061564860608301856145c0565b615655608083018461425c565b9695505050505050565b6000606082019050615674600083018661425c565b615681602083018561425c565b61568e604083018461425c565b949350505050565b600060c0820190506156ab60008301896145c0565b6156b8602083018861425c565b6156c56040830187615538565b6156d26060830186615538565b6156df60808301856145c0565b6156ec60a083018461425c565b979650505050505050565b60008151905061570681613f97565b92915050565b60008060006060848603121561572557615724613f83565b5b6000615733868287016156f7565b9350506020615744868287016156f7565b9250506040615755868287016156f7565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bc0c03632f5fae517e74d0cd6f88a545f91d3330002998f1cdc0021011572eb064736f6c63430008110033

Deployed Bytecode Sourcemap

15454:15677:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29058:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3337:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20169:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4251:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15532:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3658:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16888:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19970:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15724:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30567:561;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4428:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19375:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4781:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15688:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15582:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16497:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16250:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15645:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23163:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16110:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19757:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21306:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20513:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21152:146;;;;;;;;;;;;;:::i;:::-;;3774:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7229:148;;;;;;;;;;;;;:::i;:::-;;22057:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15834:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20358:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19513:232;;;;;;;;;;;;;:::i;:::-;;16826:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7015:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15879:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16033;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3445:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22277:878;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21650:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16185:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16216:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5007:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20620:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3909:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16775:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16358:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20731:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15951:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21434:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4092:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15993:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16148:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7385:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16072:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15920:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20919:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29058:443;7152:12;:10;:12::i;:::-;7142:22;;:6;;;;;;;;;;;:22;;;7134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29156:6:::1;29146;:17;;;;:::i;:::-;29137:26;;29174:19;29196:25;29210:10;;29196:9;;:13;;:25;;;;:::i;:::-;29174:47;;29232:15;29250:38;29276:11;29250:21;29261:9;;29250:6;:10;;:21;;;;:::i;:::-;:25;;:38;;;;:::i;:::-;29232:56;;29299:16;29318:39;29345:11;29318:22;29329:10;;29318:6;:10;;:22;;;;:::i;:::-;:26;;:39;;;;:::i;:::-;29299:58;;29370:28;29391:6;29370:20;:28::i;:::-;29423:22;29437:7;29423:9;;:13;;:22;;;;:::i;:::-;29411:9;:34;;;;29469:24;29484:8;29469:10;;:14;;:24;;;;:::i;:::-;29456:10;:37;;;;29126:375;;;29058:443:::0;:::o;3337:100::-;3391:13;3424:5;3417:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3337:100;:::o;20169:181::-;7152:12;:10;:12::i;:::-;7142:22;;:6;;;;;;;;;;;:22;;;7134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20284:8:::1;20253:19;:28;20273:7;20253:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20324:7;20308:34;;;20333:8;20308:34;;;;;;:::i;:::-;;;;;;;;20169:181:::0;;:::o;4251:169::-;4334:4;4351:39;4360:12;:10;:12::i;:::-;4374:7;4383:6;4351:8;:39::i;:::-;4408:4;4401:11;;4251:169;;;;:::o;15532:41::-;;;;;;;;;;;;;:::o;3658:108::-;3719:7;3746:12;;3739:19;;3658:108;:::o;16888:32::-;;;;:::o;19970:187::-;7152:12;:10;:12::i;:::-;7142:22;;:6;;;;;;;;;;;:22;;;7134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20068:4:::1;20038:19;:27;20058:6;20038:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;20103:6;20083:9;;:27;;;;;;;;;;;;;;;;;;20126:23;20142:6;20126:23;;;;;;:::i;:::-;;;;;;;;19970:187:::0;:::o;15724:28::-;;;;:::o;30567:561::-;7152:12;:10;:12::i;:::-;7142:22;;:6;;;;;;;;;;;:22;;;7134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30739:6:::1;:13;30714:14;:21;:38;30706:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30831:3;30806:14;:21;:28;;30798:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;30889:9;30884:237;30908:14;:21;30904:1;:25;30884:237;;;30951:14;30968;30983:1;30968:17;;;;;;;;:::i;:::-;;;;;;;;30951:34;;31000:21;31037:6;31024;31031:1;31024:9;;;;;;;;:::i;:::-;;;;;;;;:20;;;;:::i;:::-;31000:44;;31059:50;31075:10;31087:6;31095:13;31059:15;:50::i;:::-;30936:185;;30931:3;;;;;:::i;:::-;;;;30884:237;;;;30567:561:::0;;:::o;4428:345::-;4541:4;4558:36;4568:6;4576:9;4587:6;4558:9;:36::i;:::-;4605:138;4614:6;4622:12;:10;:12::i;:::-;4636:106;4674:6;4636:106;;;;;;;;;;;;;;;;;:11;:19;4648:6;4636:19;;;;;;;;;;;;;;;:33;4656:12;:10;:12::i;:::-;4636:33;;;;;;;;;;;;;;;;:37;;:106;;;;;:::i;:::-;4605:8;:138::i;:::-;4761:4;4754:11;;4428:345;;;;;:::o;19375:93::-;19433:5;19458:2;19451:9;;19375:93;:::o;4781:218::-;4869:4;4886:83;4895:12;:10;:12::i;:::-;4909:7;4918:50;4957:10;4918:11;:25;4930:12;:10;:12::i;:::-;4918:25;;;;;;;;;;;;;;;:34;4944:7;4918:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;4886:8;:83::i;:::-;4987:4;4980:11;;4781:218;;;;:::o;15688:29::-;;;;:::o;15582:28::-;;;;;;;;;;;;;:::o;16497:34::-;;;;;;;;;;;;;:::o;16250:40::-;;;;;;;;;;;;;:::o;15645:34::-;;;;;;;;;;;;;:::o;23163:126::-;23229:4;23253:19;:28;23273:7;23253:28;;;;;;;;;;;;;;;;;;;;;;;;;23246:35;;23163:126;;;:::o;16110:31::-;;;;:::o;19757:205::-;7152:12;:10;:12::i;:::-;7142:22;;:6;;;;;;;;;;;:22;;;7134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19861:4:::1;19831:19;:27;19851:6;19831:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;19902:6;19876:15;;:33;;;;;;;;;;;;;;;;;;19925:29;19947:6;19925:29;;;;;;:::i;:::-;;;;;;;;19757:205:::0;:::o;21306:120::-;7152:12;:10;:12::i;:::-;7142:22;;:6;;;;;;;;;;;:22;;;7134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21411:6:::1;21401;:17;;;;:::i;:::-;21380:18;:38;;;;21306:120:::0;:::o;20513:99::-;7152:12;:10;:12::i;:::-;7142:22;;:6;;;;;;;;;;;:22;;;7134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20599:5:::1;20582:14;;:22;;;;;;;;;;;;;;;;;;20513:99:::0;:::o;21152:146::-;7152:12;:10;:12::i;:::-;7142:22;;:6;;;;;;;;;;;:22;;;7134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21199:17:::1;21219:21;21199:41;;21259:10;21251:28;;:39;21280:9;21251:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21188:110;21152:146::o:0;3774:127::-;3848:7;3875:9;:18;3885:7;3875:18;;;;;;;;;;;;;;;;3868:25;;3774:127;;;:::o;7229:148::-;7152:12;:10;:12::i;:::-;7142:22;;:6;;;;;;;;;;;:22;;;7134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7336:1:::1;7299:40;;7320:6;;;;;;;;;;;7299:40;;;;;;;;;;;;7367:1;7350:6;;:19;;;;;;;;;;;;;;;;;;7229:148::o:0;22057:212::-;7152:12;:10;:12::i;:::-;7142:22;;:6;;;;;;;;;;;:22;;;7134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22158:4:::1;22126:19;:29;22146:8;22126:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;22219:4;22173:33;:43;22207:8;22173:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;22234:27;22252:8;22234:17;:27::i;:::-;22057:212:::0;:::o;15834:38::-;;;;;;;;;;;;;:::o;20358:147::-;7152:12;:10;:12::i;:::-;7142:22;;:6;;;;;;;;;;;:22;;;7134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20491:6:::1;20447:33;:41;20481:6;20447:41;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;20358:147:::0;;:::o;19513:232::-;7152:12;:10;:12::i;:::-;7142:22;;:6;;;;;;;;;;;:22;;;7134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19577:14:::1;;;;;;;;;;;19576:15;19568:24;;;::::0;::::1;;19620:4;19603:14;;:21;;;;;;;;;;;;;;;;;;19649:12;19635:11;:26;;;;19690:15;19672;:33;;;;19721:16;;;;;;;;;;19513:232::o:0;16826:30::-;;;;:::o;7015:79::-;7053:7;7080:6;;;;;;;;;;;7073:13;;7015:79;:::o;15879:32::-;;;;;;;;;;;;;:::o;16033:::-;;;;:::o;3445:104::-;3501:13;3534:7;3527:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3445:104;:::o;22277:878::-;7152:12;:10;:12::i;:::-;7142:22;;:6;;;;;;;;;;;:22;;;7134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22494:12:::1;22475:16;:31;;;;22535:12;22517:15;:30;;;;22578:13;22558:17;:33;;;;22621:13;22602:16;:32;;;;22657:6;22645:9;:18;;;;22687:7;22674:10;:20;;;;22723:55;22767:10;;22723:39;22745:16;;22723:17;;:21;;:39;;;;:::i;:::-;:43;;:55;;;;:::i;:::-;22707:13;:71;;;;22804:52;22846:9;;22804:37;22825:15;;22804:16;;:20;;:37;;;;:::i;:::-;:41;;:52;;;;:::i;:::-;22789:12;:67;;;;22934:2;22917:13;;:19;;:41;;;;;22956:2;22940:12;;:18;;22917:41;22909:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;23017:130;23028:17;;23047:16;;23065:10;;23077:16;;23120:15;;23137:9;;23017:130;;;;;;;;;;;:::i;:::-;;;;;;;;22277:878:::0;;;;;;:::o;21650:140::-;7152:12;:10;:12::i;:::-;7142:22;;:6;;;;;;;;;;;:22;;;7134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21741:41:::1;21770:4;21776:5;21741:28;:41::i;:::-;21650:140:::0;;:::o;16185:24::-;;;;:::o;16216:25::-;;;;:::o;5007:286::-;5100:4;5117:146;5126:12;:10;:12::i;:::-;5140:7;5149:113;5188:15;5149:113;;;;;;;;;;;;;;;;;:11;:25;5161:12;:10;:12::i;:::-;5149:25;;;;;;;;;;;;;;;:34;5175:7;5149:34;;;;;;;;;;;;;;;;:38;;:113;;;;;:::i;:::-;5117:8;:146::i;:::-;5281:4;5274:11;;5007:286;;;;:::o;20620:103::-;7152:12;:10;:12::i;:::-;7142:22;;:6;;;;;;;;;;;:22;;;7134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20710:5:::1;20691:16;;:24;;;;;;;;;;;;;;;;;;20620:103:::0;:::o;3909:175::-;3995:4;4012:42;4022:12;:10;:12::i;:::-;4036:9;4047:6;4012:9;:42::i;:::-;4072:4;4065:11;;3909:175;;;;:::o;16775:26::-;;;;:::o;16358:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;20731:174::-;7152:12;:10;:12::i;:::-;7142:22;;:6;;;;;;;;;;;:22;;;7134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20819:3:::1;20810:5;:12;;20802:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;20892:5;20876:13;:21;;;;20731:174:::0;:::o;15951:35::-;;;;;;;;;;;;;:::o;21434:208::-;7152:12;:10;:12::i;:::-;7142:22;;:6;;;;;;;;;;;:22;;;7134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21539:7:::1;21514:32;;:21;;;;;;;;;;;:32;;::::0;21506:41:::1;;;::::0;::::1;;21582:7;21558:21;;:31;;;;;;;;;;;;;;;;;;21605:29;21626:7;21605:29;;;;;;:::i;:::-;;;;;;;;21434:208:::0;:::o;4092:151::-;4181:7;4208:11;:18;4220:5;4208:18;;;;;;;;;;;;;;;:27;4227:7;4208:27;;;;;;;;;;;;;;;;4201:34;;4092:151;;;;:::o;15993:33::-;;;;:::o;16148:30::-;;;;:::o;7385:244::-;7152:12;:10;:12::i;:::-;7142:22;;:6;;;;;;;;;;;:22;;;7134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7494:1:::1;7474:22;;:8;:22;;::::0;7466:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7584:8;7555:38;;7576:6;;;;;;;;;;;7555:38;;;;;;;;;;;;7613:8;7604:6;;:17;;;;;;;;;;;;;;;;;;7385:244:::0;:::o;16072:31::-;;;;:::o;15920:24::-;;;;:::o;20919:217::-;7152:12;:10;:12::i;:::-;7142:22;;:6;;;;;;;;;;;:22;;;7134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21003:6:::1;20994:5;:16;;;;:::i;:::-;20986:24;;21053:2;21038:12;;:17;;;;:::i;:::-;21029:5;:26;;21021:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;21123:5;21111:9;:17;;;;20919:217:::0;:::o;571:179::-;629:7;649:9;665:1;661;:5;;;;:::i;:::-;649:17;;690:1;685;:6;;677:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;741:1;734:8;;;571:179;;;;:::o;195:98::-;248:7;275:10;268:17;;195:98;:::o;1100:248::-;1158:7;1187:1;1182;:6;1178:47;;1212:1;1205:8;;;;1178:47;1237:9;1253:1;1249;:5;;;;:::i;:::-;1237:17;;1282:1;1277;1273;:5;;;;:::i;:::-;:10;1265:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1339:1;1332:8;;;1100:248;;;;;:::o;1356:132::-;1414:7;1441:39;1445:1;1448;1441:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1434:46;;1356:132;;;;:::o;29534:1025::-;29613:1;29603:6;:11;29599:50;29631:7;29599:50;29659:24;29676:6;29659:16;:24::i;:::-;29696:12;29711:4;29696:19;;29726:15;29744:4;29726:22;;29769:23;29831:31;29852:9;;29831:16;;:20;;:31;;;;:::i;:::-;29795:33;29817:10;;29795:17;;:21;;:33;;;;:::i;:::-;:67;;;;:::i;:::-;29769:93;;29875:19;29927:1;29909:15;:19;29905:108;;;29959:42;29985:15;29959:21;:25;;:42;;;;:::i;:::-;29945:56;;29905:108;30023:23;30091:11;30049:39;30070:17;;30049:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;30023:79;;30113:17;30161:11;30133:25;30147:10;;30133:9;;:13;;:25;;;;:::i;:::-;:39;;;;:::i;:::-;30113:59;;30215:1;30197:15;:19;30193:123;;;30255:15;;;;;;;;;;;30247:29;;30284:15;30247:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30233:71;;;;;30193:123;30352:1;30340:9;:13;30336:108;;;30395:9;;;;;;;;;;;30387:23;;30418:9;30387:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30370:62;;;;;30336:108;30461:90;30489:15;30519:7;:21;;;;;30530:10;30519:21;30461:90;;;;;;;:::i;:::-;;;;;;;;29588:971;;;;;;29534:1025;;:::o;758:136::-;816:7;843:43;847:1;850;843:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;836:50;;758:136;;;;:::o;6233:346::-;6352:1;6335:19;;:5;:19;;;6327:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6433:1;6414:21;;:7;:21;;;6406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6517:6;6487:11;:18;6499:5;6487:18;;;;;;;;;;;;;;;:27;6506:7;6487:27;;;;;;;;;;;;;;;:36;;;;6555:7;6539:32;;6548:5;6539:32;;;6564:6;6539:32;;;;;;:::i;:::-;;;;;;;;6233:346;;;:::o;5301:538::-;5425:1;5407:20;;:6;:20;;;5399:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5509:1;5488:23;;:9;:23;;;5480:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5564:47;5585:6;5593:9;5604:6;5564:20;:47::i;:::-;5644:70;5666:6;5644:70;;;;;;;;;;;;;;;;;:9;:17;5654:6;5644:17;;;;;;;;;;;;;;;;:21;;:70;;;;;:::i;:::-;5624:9;:17;5634:6;5624:17;;;;;;;;;;;;;;;:90;;;;5748:32;5773:6;5748:9;:20;5758:9;5748:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;5725:9;:20;5735:9;5725:20;;;;;;;;;;;;;;;:55;;;;5813:9;5796:35;;5805:6;5796:35;;;5824:6;5796:35;;;;;;:::i;:::-;;;;;;;;5301:538;;;:::o;23297:4235::-;23413:1;23397:18;;:4;:18;;;23389:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23491:1;23477:16;;:2;:16;;;23469:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23547:21;23579:20;23610:14;23642:33;:39;23676:4;23642:39;;;;;;;;;;;;;;;;;;;;;;;;;23637:142;;23706:14;;;;;;;;;;;23698:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;23637:142;23805:1;23795:6;:11;23791:3678;;23823:28;23839:4;23845:2;23849:1;23823:15;:28::i;:::-;23866:7;;;;;23791:3678;23929:8;;;;;;;;;;;23928:9;:39;;;;;23942:19;:25;23962:4;23942:25;;;;;;;;;;;;;;;;;;;;;;;;;23941:26;23928:39;:67;;;;;23972:19;:23;23992:2;23972:23;;;;;;;;;;;;;;;;;;;;;;;;;23971:24;23928:67;23910:3559;;;24022:14;24039:25;:29;24065:2;24039:29;;;;;;;;;;;;;;;;;;;;;;;;;24022:46;;24087:9;24083:1514;;;24133:17;;24117:33;;24184:16;;24169:31;;24228:10;;24219:19;;24263:14;;;;;;;;;;;24259:269;;;24367:13;;24325:28;:39;24354:9;24325:39;;;;;;;;;;;;;;;;:55;;;;:::i;:::-;24306:15;:74;;24298:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;24493:15;24451:28;:39;24480:9;24451:39;;;;;;;;;;;;;;;:57;;;;24259:269;24083:1514;;;24612:16;;24596:32;;24662:15;;24647:30;;24705:9;;24696:18;;24739:14;;;;;;;;;;;24735:598;;;24811:1;24797:11;;:15;;;;:::i;:::-;24782:12;:30;24774:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24876:13;;24861:11;:28;;24853:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24983:12;24944:24;:35;24969:9;24944:35;;;;;;;;;;;;;;;;:51;24936:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25107:13;;25065:28;:39;25094:9;25065:39;;;;;;;;;;;;;;;;:55;;;;:::i;:::-;25046:15;:74;;25038:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;25229:12;25191:24;:35;25216:9;25191:35;;;;;;;;;;;;;;;:50;;;;25302:15;25260:28;:39;25289:9;25260:39;;;;;;;;;;;;;;;:57;;;;24735:598;25353:16;;;;;;;;;;;25349:233;;;25386:32;25421:13;25431:2;25421:9;:13::i;:::-;25386:48;;25494:9;;25484:6;25457:24;:33;;;;:::i;:::-;:46;;25449:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;25371:211;25349:233;24083:1514;25613:17;25633:43;25669:6;25633:31;25651:12;25633:13;:17;;:31;;;;:::i;:::-;:35;;:43;;;;:::i;:::-;25613:63;;25693:28;25724:24;25742:4;25724:9;:24::i;:::-;25693:55;;25765:12;25804:18;;25780:20;:42;;25765:57;;25843:7;:43;;;;;25855:25;:31;25881:4;25855:31;;;;;;;;;;;;;;;;;;;;;;;;;25854:32;25843:43;25839:1272;;;25918:4;25907:8;;:15;;;;;;;;;;;;;;;;;;25943:18;25986:21;;;;;;;;;;;:41;;;;;26026:1;26011:12;:16;25986:41;25982:875;;;26052:20;26075:25;26089:10;;26075:9;;:13;;:25;;;;:::i;:::-;26052:48;;26123:24;26150:105;26242:12;26150:61;26201:9;;26150:20;:50;;:61;;;;:::i;:::-;:91;;:105;;;;:::i;:::-;26123:132;;26278:22;26303:106;26396:12;26303:62;26354:10;;26303:20;:50;;:62;;;;:::i;:::-;:92;;:106;;;;:::i;:::-;26278:131;;26434:21;26458:104;26549:12;;26458:60;26505:12;26458:16;:46;;:60;;;;:::i;:::-;:90;;:104;;;;:::i;:::-;26434:128;;26587:22;26612:103;26701:13;;26612:58;26657:12;26612:14;:44;;:58;;;;:::i;:::-;:88;;:103;;;;:::i;:::-;26587:128;;26753:33;26772:13;26753:14;:18;;:33;;;;:::i;:::-;26740:46;;26811:26;26826:10;26811:14;:26::i;:::-;26029:828;;;;;25982:875;26877:24;26904:34;26927:10;26904:18;;:22;;:34;;;;:::i;:::-;26877:61;;26957:38;26978:16;26957:20;:38::i;:::-;27026:1;27014:9;:13;;;;27059:1;27046:10;:14;;;;27090:5;27079:8;;:16;;;;;;;;;;;;;;;;;;25888:1223;;25839:1272;27127:12;27142:30;27168:3;27142:21;27153:9;27142:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;27127:45;;27198:16;27209:4;27198:6;:10;;:16;;;;:::i;:::-;27189:25;;27235:9;27231:155;;;27278:20;27293:4;27278:10;;:14;;:20;;;;:::i;:::-;27265:10;:33;;;;27231:155;;;27351:19;27365:4;27351:9;;:13;;:19;;;;:::i;:::-;27339:9;:31;;;;27231:155;27402:42;27418:4;27432;27439;27402:15;:42::i;:::-;24007:3462;;;;;23910:3559;27481:33;27497:4;27503:2;27507:6;27481:15;:33::i;:::-;23376:4156;;;23297:4235;;;;:::o;902:190::-;988:7;1021:1;1016;:6;;1024:12;1008:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1048:9;1064:1;1060;:5;;;;:::i;:::-;1048:17;;1083:1;1076:8;;;902:190;;;;;:::o;21798:188::-;21915:5;21881:25;:31;21907:4;21881:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21972:5;21938:40;;21966:4;21938:40;;;;;;;;;;;;21798:188;;:::o;1496:189::-;1582:7;1614:1;1610;:5;1617:12;1602:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1641:9;1657:1;1653;:5;;;;:::i;:::-;1641:17;;1676:1;1669:8;;;1496:189;;;;;:::o;28030:499::-;28096:21;28134:1;28120:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28096:40;;28165:4;28147;28152:1;28147:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28191:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28181:4;28186:1;28181:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28224:62;28241:4;28256:15;;;;;;;;;;;28274:11;28224:8;:62::i;:::-;28297:15;;;;;;;;;;;:66;;;28378:11;28404:1;28448:4;28475;28495:15;28297:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28085:444;28030:499;:::o;6587:91::-;;;;:::o;27542:480::-;27601:12;27616:13;27627:1;27616:6;:10;;:13;;;;:::i;:::-;27601:28;;27640:17;27660:16;27671:4;27660:6;:10;;:16;;;;:::i;:::-;27640:36;;27687:22;27712:21;27687:46;;27744:22;27761:4;27744:16;:22::i;:::-;27847:18;27868:41;27894:14;27868:21;:25;;:41;;;;:::i;:::-;27847:62;;27920:35;27933:9;27944:10;27920:12;:35::i;:::-;27971:43;27986:4;27992:10;28004:9;27971:43;;;;;;;;:::i;:::-;;;;;;;;27590:432;;;;27542:480;:::o;28537:513::-;28685:62;28702:4;28717:15;;;;;;;;;;;28735:11;28685:8;:62::i;:::-;28790:15;;;;;;;;;;;:31;;;28829:9;28862:4;28882:11;28908:1;28951;28994:7;:5;:7::i;:::-;29016:15;28790:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28537:513;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:246::-;1386:1;1396:113;1410:6;1407:1;1404:13;1396:113;;;1495:1;1490:3;1486:11;1480:18;1476:1;1471:3;1467:11;1460:39;1432:2;1429:1;1425:10;1420:15;;1396:113;;;1543:1;1534:6;1529:3;1525:16;1518:27;1367:184;1305:246;;;:::o;1557:102::-;1598:6;1649:2;1645:7;1640:2;1633:5;1629:14;1625:28;1615:38;;1557:102;;;:::o;1665:377::-;1753:3;1781:39;1814:5;1781:39;:::i;:::-;1836:71;1900:6;1895:3;1836:71;:::i;:::-;1829:78;;1916:65;1974:6;1969:3;1962:4;1955:5;1951:16;1916:65;:::i;:::-;2006:29;2028:6;2006:29;:::i;:::-;2001:3;1997:39;1990:46;;1757:285;1665:377;;;;:::o;2048:313::-;2161:4;2199:2;2188:9;2184:18;2176:26;;2248:9;2242:4;2238:20;2234:1;2223:9;2219:17;2212:47;2276:78;2349:4;2340:6;2276:78;:::i;:::-;2268:86;;2048:313;;;;:::o;2367:126::-;2404:7;2444:42;2437:5;2433:54;2422:65;;2367:126;;;:::o;2499:96::-;2536:7;2565:24;2583:5;2565:24;:::i;:::-;2554:35;;2499:96;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:90::-;2908:7;2951:5;2944:13;2937:21;2926:32;;2874:90;;;:::o;2970:116::-;3040:21;3055:5;3040:21;:::i;:::-;3033:5;3030:32;3020:60;;3076:1;3073;3066:12;3020:60;2970:116;:::o;3092:133::-;3135:5;3173:6;3160:20;3151:29;;3189:30;3213:5;3189:30;:::i;:::-;3092:133;;;;:::o;3231:468::-;3296:6;3304;3353:2;3341:9;3332:7;3328:23;3324:32;3321:119;;;3359:79;;:::i;:::-;3321:119;3479:1;3504:53;3549:7;3540:6;3529:9;3525:22;3504:53;:::i;:::-;3494:63;;3450:117;3606:2;3632:50;3674:7;3665:6;3654:9;3650:22;3632:50;:::i;:::-;3622:60;;3577:115;3231:468;;;;;:::o;3705:474::-;3773:6;3781;3830:2;3818:9;3809:7;3805:23;3801:32;3798:119;;;3836:79;;:::i;:::-;3798:119;3956:1;3981:53;4026:7;4017:6;4006:9;4002:22;3981:53;:::i;:::-;3971:63;;3927:117;4083:2;4109:53;4154:7;4145:6;4134:9;4130:22;4109:53;:::i;:::-;4099:63;;4054:118;3705:474;;;;;:::o;4185:109::-;4266:21;4281:5;4266:21;:::i;:::-;4261:3;4254:34;4185:109;;:::o;4300:210::-;4387:4;4425:2;4414:9;4410:18;4402:26;;4438:65;4500:1;4489:9;4485:17;4476:6;4438:65;:::i;:::-;4300:210;;;;:::o;4516:60::-;4544:3;4565:5;4558:12;;4516:60;;;:::o;4582:142::-;4632:9;4665:53;4683:34;4692:24;4710:5;4692:24;:::i;:::-;4683:34;:::i;:::-;4665:53;:::i;:::-;4652:66;;4582:142;;;:::o;4730:126::-;4780:9;4813:37;4844:5;4813:37;:::i;:::-;4800:50;;4730:126;;;:::o;4862:153::-;4939:9;4972:37;5003:5;4972:37;:::i;:::-;4959:50;;4862:153;;;:::o;5021:185::-;5135:64;5193:5;5135:64;:::i;:::-;5130:3;5123:77;5021:185;;:::o;5212:276::-;5332:4;5370:2;5359:9;5355:18;5347:26;;5383:98;5478:1;5467:9;5463:17;5454:6;5383:98;:::i;:::-;5212:276;;;;:::o;5494:118::-;5581:24;5599:5;5581:24;:::i;:::-;5576:3;5569:37;5494:118;;:::o;5618:222::-;5711:4;5749:2;5738:9;5734:18;5726:26;;5762:71;5830:1;5819:9;5815:17;5806:6;5762:71;:::i;:::-;5618:222;;;;:::o;5846:329::-;5905:6;5954:2;5942:9;5933:7;5929:23;5925:32;5922:119;;;5960:79;;:::i;:::-;5922:119;6080:1;6105:53;6150:7;6141:6;6130:9;6126:22;6105:53;:::i;:::-;6095:63;;6051:117;5846:329;;;;:::o;6181:117::-;6290:1;6287;6280:12;6304:180;6352:77;6349:1;6342:88;6449:4;6446:1;6439:15;6473:4;6470:1;6463:15;6490:281;6573:27;6595:4;6573:27;:::i;:::-;6565:6;6561:40;6703:6;6691:10;6688:22;6667:18;6655:10;6652:34;6649:62;6646:88;;;6714:18;;:::i;:::-;6646:88;6754:10;6750:2;6743:22;6533:238;6490:281;;:::o;6777:129::-;6811:6;6838:20;;:::i;:::-;6828:30;;6867:33;6895:4;6887:6;6867:33;:::i;:::-;6777:129;;;:::o;6912:311::-;6989:4;7079:18;7071:6;7068:30;7065:56;;;7101:18;;:::i;:::-;7065:56;7151:4;7143:6;7139:17;7131:25;;7211:4;7205;7201:15;7193:23;;6912:311;;;:::o;7229:117::-;7338:1;7335;7328:12;7369:710;7465:5;7490:81;7506:64;7563:6;7506:64;:::i;:::-;7490:81;:::i;:::-;7481:90;;7591:5;7620:6;7613:5;7606:21;7654:4;7647:5;7643:16;7636:23;;7707:4;7699:6;7695:17;7687:6;7683:30;7736:3;7728:6;7725:15;7722:122;;;7755:79;;:::i;:::-;7722:122;7870:6;7853:220;7887:6;7882:3;7879:15;7853:220;;;7962:3;7991:37;8024:3;8012:10;7991:37;:::i;:::-;7986:3;7979:50;8058:4;8053:3;8049:14;8042:21;;7929:144;7913:4;7908:3;7904:14;7897:21;;7853:220;;;7857:21;7471:608;;7369:710;;;;;:::o;8102:370::-;8173:5;8222:3;8215:4;8207:6;8203:17;8199:27;8189:122;;8230:79;;:::i;:::-;8189:122;8347:6;8334:20;8372:94;8462:3;8454:6;8447:4;8439:6;8435:17;8372:94;:::i;:::-;8363:103;;8179:293;8102:370;;;;:::o;8478:311::-;8555:4;8645:18;8637:6;8634:30;8631:56;;;8667:18;;:::i;:::-;8631:56;8717:4;8709:6;8705:17;8697:25;;8777:4;8771;8767:15;8759:23;;8478:311;;;:::o;8812:710::-;8908:5;8933:81;8949:64;9006:6;8949:64;:::i;:::-;8933:81;:::i;:::-;8924:90;;9034:5;9063:6;9056:5;9049:21;9097:4;9090:5;9086:16;9079:23;;9150:4;9142:6;9138:17;9130:6;9126:30;9179:3;9171:6;9168:15;9165:122;;;9198:79;;:::i;:::-;9165:122;9313:6;9296:220;9330:6;9325:3;9322:15;9296:220;;;9405:3;9434:37;9467:3;9455:10;9434:37;:::i;:::-;9429:3;9422:50;9501:4;9496:3;9492:14;9485:21;;9372:144;9356:4;9351:3;9347:14;9340:21;;9296:220;;;9300:21;8914:608;;8812:710;;;;;:::o;9545:370::-;9616:5;9665:3;9658:4;9650:6;9646:17;9642:27;9632:122;;9673:79;;:::i;:::-;9632:122;9790:6;9777:20;9815:94;9905:3;9897:6;9890:4;9882:6;9878:17;9815:94;:::i;:::-;9806:103;;9622:293;9545:370;;;;:::o;9921:894::-;10039:6;10047;10096:2;10084:9;10075:7;10071:23;10067:32;10064:119;;;10102:79;;:::i;:::-;10064:119;10250:1;10239:9;10235:17;10222:31;10280:18;10272:6;10269:30;10266:117;;;10302:79;;:::i;:::-;10266:117;10407:78;10477:7;10468:6;10457:9;10453:22;10407:78;:::i;:::-;10397:88;;10193:302;10562:2;10551:9;10547:18;10534:32;10593:18;10585:6;10582:30;10579:117;;;10615:79;;:::i;:::-;10579:117;10720:78;10790:7;10781:6;10770:9;10766:22;10720:78;:::i;:::-;10710:88;;10505:303;9921:894;;;;;:::o;10821:619::-;10898:6;10906;10914;10963:2;10951:9;10942:7;10938:23;10934:32;10931:119;;;10969:79;;:::i;:::-;10931:119;11089:1;11114:53;11159:7;11150:6;11139:9;11135:22;11114:53;:::i;:::-;11104:63;;11060:117;11216:2;11242:53;11287:7;11278:6;11267:9;11263:22;11242:53;:::i;:::-;11232:63;;11187:118;11344:2;11370:53;11415:7;11406:6;11395:9;11391:22;11370:53;:::i;:::-;11360:63;;11315:118;10821:619;;;;;:::o;11446:86::-;11481:7;11521:4;11514:5;11510:16;11499:27;;11446:86;;;:::o;11538:112::-;11621:22;11637:5;11621:22;:::i;:::-;11616:3;11609:35;11538:112;;:::o;11656:214::-;11745:4;11783:2;11772:9;11768:18;11760:26;;11796:67;11860:1;11849:9;11845:17;11836:6;11796:67;:::i;:::-;11656:214;;;;:::o;11876:118::-;11963:24;11981:5;11963:24;:::i;:::-;11958:3;11951:37;11876:118;;:::o;12000:222::-;12093:4;12131:2;12120:9;12116:18;12108:26;;12144:71;12212:1;12201:9;12197:17;12188:6;12144:71;:::i;:::-;12000:222;;;;:::o;12228:323::-;12284:6;12333:2;12321:9;12312:7;12308:23;12304:32;12301:119;;;12339:79;;:::i;:::-;12301:119;12459:1;12484:50;12526:7;12517:6;12506:9;12502:22;12484:50;:::i;:::-;12474:60;;12430:114;12228:323;;;;:::o;12557:104::-;12602:7;12631:24;12649:5;12631:24;:::i;:::-;12620:35;;12557:104;;;:::o;12667:142::-;12770:32;12796:5;12770:32;:::i;:::-;12765:3;12758:45;12667:142;;:::o;12815:254::-;12924:4;12962:2;12951:9;12947:18;12939:26;;12975:87;13059:1;13048:9;13044:17;13035:6;12975:87;:::i;:::-;12815:254;;;;:::o;13075:1057::-;13179:6;13187;13195;13203;13211;13219;13268:3;13256:9;13247:7;13243:23;13239:33;13236:120;;;13275:79;;:::i;:::-;13236:120;13395:1;13420:53;13465:7;13456:6;13445:9;13441:22;13420:53;:::i;:::-;13410:63;;13366:117;13522:2;13548:53;13593:7;13584:6;13573:9;13569:22;13548:53;:::i;:::-;13538:63;;13493:118;13650:2;13676:53;13721:7;13712:6;13701:9;13697:22;13676:53;:::i;:::-;13666:63;;13621:118;13778:2;13804:53;13849:7;13840:6;13829:9;13825:22;13804:53;:::i;:::-;13794:63;;13749:118;13906:3;13933:53;13978:7;13969:6;13958:9;13954:22;13933:53;:::i;:::-;13923:63;;13877:119;14035:3;14062:53;14107:7;14098:6;14087:9;14083:22;14062:53;:::i;:::-;14052:63;;14006:119;13075:1057;;;;;;;;:::o;14138:474::-;14206:6;14214;14263:2;14251:9;14242:7;14238:23;14234:32;14231:119;;;14269:79;;:::i;:::-;14231:119;14389:1;14414:53;14459:7;14450:6;14439:9;14435:22;14414:53;:::i;:::-;14404:63;;14360:117;14516:2;14542:53;14587:7;14578:6;14567:9;14563:22;14542:53;:::i;:::-;14532:63;;14487:118;14138:474;;;;;:::o;14618:182::-;14758:34;14754:1;14746:6;14742:14;14735:58;14618:182;:::o;14806:366::-;14948:3;14969:67;15033:2;15028:3;14969:67;:::i;:::-;14962:74;;15045:93;15134:3;15045:93;:::i;:::-;15163:2;15158:3;15154:12;15147:19;;14806:366;;;:::o;15178:419::-;15344:4;15382:2;15371:9;15367:18;15359:26;;15431:9;15425:4;15421:20;15417:1;15406:9;15402:17;15395:47;15459:131;15585:4;15459:131;:::i;:::-;15451:139;;15178:419;;;:::o;15603:180::-;15651:77;15648:1;15641:88;15748:4;15745:1;15738:15;15772:4;15769:1;15762:15;15789:410;15829:7;15852:20;15870:1;15852:20;:::i;:::-;15847:25;;15886:20;15904:1;15886:20;:::i;:::-;15881:25;;15941:1;15938;15934:9;15963:30;15981:11;15963:30;:::i;:::-;15952:41;;16142:1;16133:7;16129:15;16126:1;16123:22;16103:1;16096:9;16076:83;16053:139;;16172:18;;:::i;:::-;16053:139;15837:362;15789:410;;;;:::o;16205:180::-;16253:77;16250:1;16243:88;16350:4;16347:1;16340:15;16374:4;16371:1;16364:15;16391:320;16435:6;16472:1;16466:4;16462:12;16452:22;;16519:1;16513:4;16509:12;16540:18;16530:81;;16596:4;16588:6;16584:17;16574:27;;16530:81;16658:2;16650:6;16647:14;16627:18;16624:38;16621:84;;16677:18;;:::i;:::-;16621:84;16442:269;16391:320;;;:::o;16717:180::-;16857:32;16853:1;16845:6;16841:14;16834:56;16717:180;:::o;16903:366::-;17045:3;17066:67;17130:2;17125:3;17066:67;:::i;:::-;17059:74;;17142:93;17231:3;17142:93;:::i;:::-;17260:2;17255:3;17251:12;17244:19;;16903:366;;;:::o;17275:419::-;17441:4;17479:2;17468:9;17464:18;17456:26;;17528:9;17522:4;17518:20;17514:1;17503:9;17499:17;17492:47;17556:131;17682:4;17556:131;:::i;:::-;17548:139;;17275:419;;;:::o;17700:221::-;17840:34;17836:1;17828:6;17824:14;17817:58;17909:4;17904:2;17896:6;17892:15;17885:29;17700:221;:::o;17927:366::-;18069:3;18090:67;18154:2;18149:3;18090:67;:::i;:::-;18083:74;;18166:93;18255:3;18166:93;:::i;:::-;18284:2;18279:3;18275:12;18268:19;;17927:366;;;:::o;18299:419::-;18465:4;18503:2;18492:9;18488:18;18480:26;;18552:9;18546:4;18542:20;18538:1;18527:9;18523:17;18516:47;18580:131;18706:4;18580:131;:::i;:::-;18572:139;;18299:419;;;:::o;18724:180::-;18772:77;18769:1;18762:88;18869:4;18866:1;18859:15;18893:4;18890:1;18883:15;18910:233;18949:3;18972:24;18990:5;18972:24;:::i;:::-;18963:33;;19018:66;19011:5;19008:77;19005:103;;19088:18;;:::i;:::-;19005:103;19135:1;19128:5;19124:13;19117:20;;18910:233;;;:::o;19149:223::-;19289:34;19285:1;19277:6;19273:14;19266:58;19358:6;19353:2;19345:6;19341:15;19334:31;19149:223;:::o;19378:366::-;19520:3;19541:67;19605:2;19600:3;19541:67;:::i;:::-;19534:74;;19617:93;19706:3;19617:93;:::i;:::-;19735:2;19730:3;19726:12;19719:19;;19378:366;;;:::o;19750:419::-;19916:4;19954:2;19943:9;19939:18;19931:26;;20003:9;19997:4;19993:20;19989:1;19978:9;19974:17;19967:47;20031:131;20157:4;20031:131;:::i;:::-;20023:139;;19750:419;;;:::o;20175:775::-;20408:4;20446:3;20435:9;20431:19;20423:27;;20460:71;20528:1;20517:9;20513:17;20504:6;20460:71;:::i;:::-;20541:72;20609:2;20598:9;20594:18;20585:6;20541:72;:::i;:::-;20623;20691:2;20680:9;20676:18;20667:6;20623:72;:::i;:::-;20705;20773:2;20762:9;20758:18;20749:6;20705:72;:::i;:::-;20787:73;20855:3;20844:9;20840:19;20831:6;20787:73;:::i;:::-;20870;20938:3;20927:9;20923:19;20914:6;20870:73;:::i;:::-;20175:775;;;;;;;;;:::o;20956:225::-;21096:34;21092:1;21084:6;21080:14;21073:58;21165:8;21160:2;21152:6;21148:15;21141:33;20956:225;:::o;21187:366::-;21329:3;21350:67;21414:2;21409:3;21350:67;:::i;:::-;21343:74;;21426:93;21515:3;21426:93;:::i;:::-;21544:2;21539:3;21535:12;21528:19;;21187:366;;;:::o;21559:419::-;21725:4;21763:2;21752:9;21748:18;21740:26;;21812:9;21806:4;21802:20;21798:1;21787:9;21783:17;21776:47;21840:131;21966:4;21840:131;:::i;:::-;21832:139;;21559:419;;;:::o;21984:225::-;22124:34;22120:1;22112:6;22108:14;22101:58;22193:8;22188:2;22180:6;22176:15;22169:33;21984:225;:::o;22215:366::-;22357:3;22378:67;22442:2;22437:3;22378:67;:::i;:::-;22371:74;;22454:93;22543:3;22454:93;:::i;:::-;22572:2;22567:3;22563:12;22556:19;;22215:366;;;:::o;22587:419::-;22753:4;22791:2;22780:9;22776:18;22768:26;;22840:9;22834:4;22830:20;22826:1;22815:9;22811:17;22804:47;22868:131;22994:4;22868:131;:::i;:::-;22860:139;;22587:419;;;:::o;23012:180::-;23060:77;23057:1;23050:88;23157:4;23154:1;23147:15;23181:4;23178:1;23171:15;23198:185;23238:1;23255:20;23273:1;23255:20;:::i;:::-;23250:25;;23289:20;23307:1;23289:20;:::i;:::-;23284:25;;23328:1;23318:35;;23333:18;;:::i;:::-;23318:35;23375:1;23372;23368:9;23363:14;;23198:185;;;;:::o;23389:227::-;23529:34;23525:1;23517:6;23513:14;23506:58;23598:10;23593:2;23585:6;23581:15;23574:35;23389:227;:::o;23622:366::-;23764:3;23785:67;23849:2;23844:3;23785:67;:::i;:::-;23778:74;;23861:93;23950:3;23861:93;:::i;:::-;23979:2;23974:3;23970:12;23963:19;;23622:366;;;:::o;23994:419::-;24160:4;24198:2;24187:9;24183:18;24175:26;;24247:9;24241:4;24237:20;24233:1;24222:9;24218:17;24211:47;24275:131;24401:4;24275:131;:::i;:::-;24267:139;;23994:419;;;:::o;24419:191::-;24459:3;24478:20;24496:1;24478:20;:::i;:::-;24473:25;;24512:20;24530:1;24512:20;:::i;:::-;24507:25;;24555:1;24552;24548:9;24541:16;;24576:3;24573:1;24570:10;24567:36;;;24583:18;;:::i;:::-;24567:36;24419:191;;;;:::o;24616:177::-;24756:29;24752:1;24744:6;24740:14;24733:53;24616:177;:::o;24799:366::-;24941:3;24962:67;25026:2;25021:3;24962:67;:::i;:::-;24955:74;;25038:93;25127:3;25038:93;:::i;:::-;25156:2;25151:3;25147:12;25140:19;;24799:366;;;:::o;25171:419::-;25337:4;25375:2;25364:9;25360:18;25352:26;;25424:9;25418:4;25414:20;25410:1;25399:9;25395:17;25388:47;25452:131;25578:4;25452:131;:::i;:::-;25444:139;;25171:419;;;:::o;25596:220::-;25736:34;25732:1;25724:6;25720:14;25713:58;25805:3;25800:2;25792:6;25788:15;25781:28;25596:220;:::o;25822:366::-;25964:3;25985:67;26049:2;26044:3;25985:67;:::i;:::-;25978:74;;26061:93;26150:3;26061:93;:::i;:::-;26179:2;26174:3;26170:12;26163:19;;25822:366;;;:::o;26194:419::-;26360:4;26398:2;26387:9;26383:18;26375:26;;26447:9;26441:4;26437:20;26433:1;26422:9;26418:17;26411:47;26475:131;26601:4;26475:131;:::i;:::-;26467:139;;26194:419;;;:::o;26619:147::-;26720:11;26757:3;26742:18;;26619:147;;;;:::o;26772:114::-;;:::o;26892:398::-;27051:3;27072:83;27153:1;27148:3;27072:83;:::i;:::-;27065:90;;27164:93;27253:3;27164:93;:::i;:::-;27282:1;27277:3;27273:11;27266:18;;26892:398;;;:::o;27296:379::-;27480:3;27502:147;27645:3;27502:147;:::i;:::-;27495:154;;27666:3;27659:10;;27296:379;;;:::o;27681:320::-;27796:4;27834:2;27823:9;27819:18;27811:26;;27847:71;27915:1;27904:9;27900:17;27891:6;27847:71;:::i;:::-;27928:66;27990:2;27979:9;27975:18;27966:6;27928:66;:::i;:::-;27681:320;;;;;:::o;28007:223::-;28147:34;28143:1;28135:6;28131:14;28124:58;28216:6;28211:2;28203:6;28199:15;28192:31;28007:223;:::o;28236:366::-;28378:3;28399:67;28463:2;28458:3;28399:67;:::i;:::-;28392:74;;28475:93;28564:3;28475:93;:::i;:::-;28593:2;28588:3;28584:12;28577:19;;28236:366;;;:::o;28608:419::-;28774:4;28812:2;28801:9;28797:18;28789:26;;28861:9;28855:4;28851:20;28847:1;28836:9;28832:17;28825:47;28889:131;29015:4;28889:131;:::i;:::-;28881:139;;28608:419;;;:::o;29033:221::-;29173:34;29169:1;29161:6;29157:14;29150:58;29242:4;29237:2;29229:6;29225:15;29218:29;29033:221;:::o;29260:366::-;29402:3;29423:67;29487:2;29482:3;29423:67;:::i;:::-;29416:74;;29499:93;29588:3;29499:93;:::i;:::-;29617:2;29612:3;29608:12;29601:19;;29260:366;;;:::o;29632:419::-;29798:4;29836:2;29825:9;29821:18;29813:26;;29885:9;29879:4;29875:20;29871:1;29860:9;29856:17;29849:47;29913:131;30039:4;29913:131;:::i;:::-;29905:139;;29632:419;;;:::o;30057:224::-;30197:34;30193:1;30185:6;30181:14;30174:58;30266:7;30261:2;30253:6;30249:15;30242:32;30057:224;:::o;30287:366::-;30429:3;30450:67;30514:2;30509:3;30450:67;:::i;:::-;30443:74;;30526:93;30615:3;30526:93;:::i;:::-;30644:2;30639:3;30635:12;30628:19;;30287:366;;;:::o;30659:419::-;30825:4;30863:2;30852:9;30848:18;30840:26;;30912:9;30906:4;30902:20;30898:1;30887:9;30883:17;30876:47;30940:131;31066:4;30940:131;:::i;:::-;30932:139;;30659:419;;;:::o;31084:222::-;31224:34;31220:1;31212:6;31208:14;31201:58;31293:5;31288:2;31280:6;31276:15;31269:30;31084:222;:::o;31312:366::-;31454:3;31475:67;31539:2;31534:3;31475:67;:::i;:::-;31468:74;;31551:93;31640:3;31551:93;:::i;:::-;31669:2;31664:3;31660:12;31653:19;;31312:366;;;:::o;31684:419::-;31850:4;31888:2;31877:9;31873:18;31865:26;;31937:9;31931:4;31927:20;31923:1;31912:9;31908:17;31901:47;31965:131;32091:4;31965:131;:::i;:::-;31957:139;;31684:419;;;:::o;32109:225::-;32249:34;32245:1;32237:6;32233:14;32226:58;32318:8;32313:2;32305:6;32301:15;32294:33;32109:225;:::o;32340:366::-;32482:3;32503:67;32567:2;32562:3;32503:67;:::i;:::-;32496:74;;32579:93;32668:3;32579:93;:::i;:::-;32697:2;32692:3;32688:12;32681:19;;32340:366;;;:::o;32712:419::-;32878:4;32916:2;32905:9;32901:18;32893:26;;32965:9;32959:4;32955:20;32951:1;32940:9;32936:17;32929:47;32993:131;33119:4;32993:131;:::i;:::-;32985:139;;32712:419;;;:::o;33137:223::-;33277:34;33273:1;33265:6;33261:14;33254:58;33346:6;33341:2;33333:6;33329:15;33322:31;33137:223;:::o;33366:366::-;33508:3;33529:67;33593:2;33588:3;33529:67;:::i;:::-;33522:74;;33605:93;33694:3;33605:93;:::i;:::-;33723:2;33718:3;33714:12;33707:19;;33366:366;;;:::o;33738:419::-;33904:4;33942:2;33931:9;33927:18;33919:26;;33991:9;33985:4;33981:20;33977:1;33966:9;33962:17;33955:47;34019:131;34145:4;34019:131;:::i;:::-;34011:139;;33738:419;;;:::o;34163:182::-;34303:34;34299:1;34291:6;34287:14;34280:58;34163:182;:::o;34351:366::-;34493:3;34514:67;34578:2;34573:3;34514:67;:::i;:::-;34507:74;;34590:93;34679:3;34590:93;:::i;:::-;34708:2;34703:3;34699:12;34692:19;;34351:366;;;:::o;34723:419::-;34889:4;34927:2;34916:9;34912:18;34904:26;;34976:9;34970:4;34966:20;34962:1;34951:9;34947:17;34940:47;35004:131;35130:4;35004:131;:::i;:::-;34996:139;;34723:419;;;:::o;35148:172::-;35288:24;35284:1;35276:6;35272:14;35265:48;35148:172;:::o;35326:366::-;35468:3;35489:67;35553:2;35548:3;35489:67;:::i;:::-;35482:74;;35565:93;35654:3;35565:93;:::i;:::-;35683:2;35678:3;35674:12;35667:19;;35326:366;;;:::o;35698:419::-;35864:4;35902:2;35891:9;35887:18;35879:26;;35951:9;35945:4;35941:20;35937:1;35926:9;35922:17;35915:47;35979:131;36105:4;35979:131;:::i;:::-;35971:139;;35698:419;;;:::o;36123:168::-;36263:20;36259:1;36251:6;36247:14;36240:44;36123:168;:::o;36297:366::-;36439:3;36460:67;36524:2;36519:3;36460:67;:::i;:::-;36453:74;;36536:93;36625:3;36536:93;:::i;:::-;36654:2;36649:3;36645:12;36638:19;;36297:366;;;:::o;36669:419::-;36835:4;36873:2;36862:9;36858:18;36850:26;;36922:9;36916:4;36912:20;36908:1;36897:9;36893:17;36886:47;36950:131;37076:4;36950:131;:::i;:::-;36942:139;;36669:419;;;:::o;37094:174::-;37234:26;37230:1;37222:6;37218:14;37211:50;37094:174;:::o;37274:366::-;37416:3;37437:67;37501:2;37496:3;37437:67;:::i;:::-;37430:74;;37513:93;37602:3;37513:93;:::i;:::-;37631:2;37626:3;37622:12;37615:19;;37274:366;;;:::o;37646:419::-;37812:4;37850:2;37839:9;37835:18;37827:26;;37899:9;37893:4;37889:20;37885:1;37874:9;37870:17;37863:47;37927:131;38053:4;37927:131;:::i;:::-;37919:139;;37646:419;;;:::o;38071:170::-;38211:22;38207:1;38199:6;38195:14;38188:46;38071:170;:::o;38247:366::-;38389:3;38410:67;38474:2;38469:3;38410:67;:::i;:::-;38403:74;;38486:93;38575:3;38486:93;:::i;:::-;38604:2;38599:3;38595:12;38588:19;;38247:366;;;:::o;38619:419::-;38785:4;38823:2;38812:9;38808:18;38800:26;;38872:9;38866:4;38862:20;38858:1;38847:9;38843:17;38836:47;38900:131;39026:4;38900:131;:::i;:::-;38892:139;;38619:419;;;:::o;39044:223::-;39184:34;39180:1;39172:6;39168:14;39161:58;39253:6;39248:2;39240:6;39236:15;39229:31;39044:223;:::o;39273:366::-;39415:3;39436:67;39500:2;39495:3;39436:67;:::i;:::-;39429:74;;39512:93;39601:3;39512:93;:::i;:::-;39630:2;39625:3;39621:12;39614:19;;39273:366;;;:::o;39645:419::-;39811:4;39849:2;39838:9;39834:18;39826:26;;39898:9;39892:4;39888:20;39884:1;39873:9;39869:17;39862:47;39926:131;40052:4;39926:131;:::i;:::-;39918:139;;39645:419;;;:::o;40070:194::-;40110:4;40130:20;40148:1;40130:20;:::i;:::-;40125:25;;40164:20;40182:1;40164:20;:::i;:::-;40159:25;;40208:1;40205;40201:9;40193:17;;40232:1;40226:4;40223:11;40220:37;;;40237:18;;:::i;:::-;40220:37;40070:194;;;;:::o;40270:143::-;40327:5;40358:6;40352:13;40343:22;;40374:33;40401:5;40374:33;:::i;:::-;40270:143;;;;:::o;40419:351::-;40489:6;40538:2;40526:9;40517:7;40513:23;40509:32;40506:119;;;40544:79;;:::i;:::-;40506:119;40664:1;40689:64;40745:7;40736:6;40725:9;40721:22;40689:64;:::i;:::-;40679:74;;40635:128;40419:351;;;;:::o;40776:85::-;40821:7;40850:5;40839:16;;40776:85;;;:::o;40867:158::-;40925:9;40958:61;40976:42;40985:32;41011:5;40985:32;:::i;:::-;40976:42;:::i;:::-;40958:61;:::i;:::-;40945:74;;40867:158;;;:::o;41031:147::-;41126:45;41165:5;41126:45;:::i;:::-;41121:3;41114:58;41031:147;;:::o;41184:114::-;41251:6;41285:5;41279:12;41269:22;;41184:114;;;:::o;41304:184::-;41403:11;41437:6;41432:3;41425:19;41477:4;41472:3;41468:14;41453:29;;41304:184;;;;:::o;41494:132::-;41561:4;41584:3;41576:11;;41614:4;41609:3;41605:14;41597:22;;41494:132;;;:::o;41632:108::-;41709:24;41727:5;41709:24;:::i;:::-;41704:3;41697:37;41632:108;;:::o;41746:179::-;41815:10;41836:46;41878:3;41870:6;41836:46;:::i;:::-;41914:4;41909:3;41905:14;41891:28;;41746:179;;;;:::o;41931:113::-;42001:4;42033;42028:3;42024:14;42016:22;;41931:113;;;:::o;42080:732::-;42199:3;42228:54;42276:5;42228:54;:::i;:::-;42298:86;42377:6;42372:3;42298:86;:::i;:::-;42291:93;;42408:56;42458:5;42408:56;:::i;:::-;42487:7;42518:1;42503:284;42528:6;42525:1;42522:13;42503:284;;;42604:6;42598:13;42631:63;42690:3;42675:13;42631:63;:::i;:::-;42624:70;;42717:60;42770:6;42717:60;:::i;:::-;42707:70;;42563:224;42550:1;42547;42543:9;42538:14;;42503:284;;;42507:14;42803:3;42796:10;;42204:608;;;42080:732;;;;:::o;42818:831::-;43081:4;43119:3;43108:9;43104:19;43096:27;;43133:71;43201:1;43190:9;43186:17;43177:6;43133:71;:::i;:::-;43214:80;43290:2;43279:9;43275:18;43266:6;43214:80;:::i;:::-;43341:9;43335:4;43331:20;43326:2;43315:9;43311:18;43304:48;43369:108;43472:4;43463:6;43369:108;:::i;:::-;43361:116;;43487:72;43555:2;43544:9;43540:18;43531:6;43487:72;:::i;:::-;43569:73;43637:3;43626:9;43622:19;43613:6;43569:73;:::i;:::-;42818:831;;;;;;;;:::o;43655:442::-;43804:4;43842:2;43831:9;43827:18;43819:26;;43855:71;43923:1;43912:9;43908:17;43899:6;43855:71;:::i;:::-;43936:72;44004:2;43993:9;43989:18;43980:6;43936:72;:::i;:::-;44018;44086:2;44075:9;44071:18;44062:6;44018:72;:::i;:::-;43655:442;;;;;;:::o;44103:807::-;44352:4;44390:3;44379:9;44375:19;44367:27;;44404:71;44472:1;44461:9;44457:17;44448:6;44404:71;:::i;:::-;44485:72;44553:2;44542:9;44538:18;44529:6;44485:72;:::i;:::-;44567:80;44643:2;44632:9;44628:18;44619:6;44567:80;:::i;:::-;44657;44733:2;44722:9;44718:18;44709:6;44657:80;:::i;:::-;44747:73;44815:3;44804:9;44800:19;44791:6;44747:73;:::i;:::-;44830;44898:3;44887:9;44883:19;44874:6;44830:73;:::i;:::-;44103:807;;;;;;;;;:::o;44916:143::-;44973:5;45004:6;44998:13;44989:22;;45020:33;45047:5;45020:33;:::i;:::-;44916:143;;;;:::o;45065:663::-;45153:6;45161;45169;45218:2;45206:9;45197:7;45193:23;45189:32;45186:119;;;45224:79;;:::i;:::-;45186:119;45344:1;45369:64;45425:7;45416:6;45405:9;45401:22;45369:64;:::i;:::-;45359:74;;45315:128;45482:2;45508:64;45564:7;45555:6;45544:9;45540:22;45508:64;:::i;:::-;45498:74;;45453:129;45621:2;45647:64;45703:7;45694:6;45683:9;45679:22;45647:64;:::i;:::-;45637:74;;45592:129;45065:663;;;;;:::o

Swarm Source

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