ETH Price: $2,380.59 (-1.14%)

Token

Saitamachain (STC)
 

Overview

Max Total Supply

490,583,679,102.301644604824350321 STC

Holders

29

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,274,185,112.133069709721726558 STC

Value
$0.00
0x83bdfcc71a44bdea968fa04bfe82f70cd7d6ab0b
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:
SaitamachainF

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-11
*/

/*
       
Welcome to saitamachain join us

https://www.saitamachain.online

https://twitter.com/TheSaitamachain

https://t.me/officialSaitamachain

*/

// 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 IBEP20 {
    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 IBEP20Metadata is IBEP20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract BEP20 is Context, IBEP20, IBEP20Metadata {
    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,
                "BEP20: 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,
                "BEP20: decreased allowance below zero"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "BEP20: transfer from the zero address");
        require(recipient != address(0), "BEP20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount,"BEP20: 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), "BEP20: 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), "BEP20: approve from the zero address");
        require(spender != address(0), "BEP20: 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 SaitamachainF is BEP20, Ownable { // 
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    bool private swapping;
    bool public tradingEnabled = false;

    uint256 internal sellAmount = 0;
    uint256 internal 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 sellBurnFee;
    uint256 public buyMarketingFees;
    uint256 public buyBurnFee;
    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 sellBurnFee, uint256 buyMarketingFees,
                     uint256 buyBurnFee, 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() BEP20("Saitamachain", "STC") { // 
        marketingWallet = payable(0xe0010715A3eDD8adBA8F6984eAaE7846870e8036); // 
        devWallet = payable(0x652a2bD8Bfeb11eBbF47b991CF160c036702d0BE); // 
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

        //INITIAL FEE VALUES HERE
        buyMarketingFees = 3;
        sellMarketingFees = 5;
        buyBurnFee = 1;
        sellBurnFee = 1;
        buyDevFee = 2;
        sellDevFee = 3;

        // TOTAL BUY AND TOTAL SELL FEE CALCS
        totalBuyFees = buyMarketingFees.add(buyDevFee);
        totalSellFees = sellMarketingFees.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 = (500_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 / 100; // 1%;
        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 / 100, "max wallet cannot be set to less than 1%");
        maxWallet = value;
    }

    // TAKES ALL BNB FROM THE CONTRACT ADDRESS AND SENDS IT TO OWNERS WALLET
    function Sweep() external onlyOwner {
        uint256 amountBNB = address(this).balance;
        payable(msg.sender).transfer(amountBNB);
    }

    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 burnBuy,
                        uint256 burnSell, uint256 devBuy, uint256 devSell) public onlyOwner {

        buyMarketingFees = marketingBuy;
        buyBurnFee = burnBuy;
        sellMarketingFees = marketingSell;
        sellBurnFee = burnSell;
        buyDevFee = devBuy;
        sellDevFee = devSell;

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

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

        emit UpdateFees(sellMarketingFees, sellBurnFee, sellDevFee, buyMarketingFees,
                        buyBurnFee, 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), "IBEP20: transfer from the zero address");
        require(to != address(0), "IBEP20: transfer to the zero address");

        uint256 marketingFees;
        uint256 burnFee;
        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;
                burnFee = sellBurnFee;
                devFee = sellDevFee;

                if (limitsInEffect) {
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
                }
            } 
            
            else {
                marketingFees = buyMarketingFees;
                burnFee = buyBurnFee;
                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(devFee);

            uint256 contractTokenBalance = balanceOf(address(this));

            bool canSwap = contractTokenBalance >= swapTokensAtAmount;

            if (canSwap && !automatedMarketMakerPairs[from]) {
                swapping = true;
             
                uint256 swapBalance = swapTokensAtAmount;
                swapAndSendDividends(swapBalance);
                buyAmount = 0;
                sellAmount = 0;
                swapping = false;
            }

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

            amount = amount.sub(fees + burntokens);

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

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

            if (burntokens > 0) {
                super._transfer(from, DEAD, burntokens);
                _totalSupply = _totalSupply.sub(burntokens);
            }
           
        }

        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":"sellBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyBurnFee","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":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":"buyBurnFee","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":"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":"sellBurnFee","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":"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":"burnBuy","type":"uint256"},{"internalType":"uint256","name":"burnSell","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"}]

608060405261dead600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860156101000a81548160ff02191690831515021790555060006009556000600a556001601060006101000a81548160ff0219169083151502179055506001601860006101000a81548160ff0219169083151502179055506000601c60006101000a81548160ff0219169083151502179055506401a13b8600601d556000602255348015620000d857600080fd5b506040518060400160405280600c81526020017f53616974616d61636861696e00000000000000000000000000000000000000008152506040518060400160405280600381526020017f535443000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200015d92919062000aff565b5080600490805190602001906200017692919062000aff565b50505060006200018b6200081660201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35073e0010715a3edd8adba8f6984eaae7846870e8036600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073652a2bd8bfeb11ebbf47b991cf160c036702d0be600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506003601481905550600560128190555060016015819055506001601381905550600260168190555060036017819055506200033b6016546014546200081e60201b620028a61790919060201c565b600c819055506200035f6017546012546200081e60201b620028a61790919060201c565b600b8190555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000414573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043a919062000c19565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ea919062000c19565b6040518363ffffffff1660e01b81526004016200050992919062000c5c565b6020604051808303816000875af115801562000529573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200054f919062000c19565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005c4600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200088160201b60201c565b6001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006c064f964e68233a76f520000000905062000721620007146200092260201b60201c565b826200094c60201b60201c565b603260025462000732919062000cf1565b600f81905550606460025462000749919062000cf1565b6011819055506001601b6000620007656200092260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505062000f0d565b600033905090565b60008082846200082f919062000d29565b90508381101562000877576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200086e9062000de7565b60405180910390fd5b8091505092915050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009b59062000e59565b60405180910390fd5b620009d26000838362000afa60201b60201c565b620009ee816002546200081e60201b620028a61790919060201c565b60028190555062000a4c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200081e60201b620028a61790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aee919062000e8c565b60405180910390a35050565b505050565b82805462000b0d9062000ed8565b90600052602060002090601f01602090048101928262000b31576000855562000b7d565b82601f1062000b4c57805160ff191683800117855562000b7d565b8280016001018555821562000b7d579182015b8281111562000b7c57825182559160200191906001019062000b5f565b5b50905062000b8c919062000b90565b5090565b5b8082111562000bab57600081600090555060010162000b91565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000be18262000bb4565b9050919050565b62000bf38162000bd4565b811462000bff57600080fd5b50565b60008151905062000c138162000be8565b92915050565b60006020828403121562000c325762000c3162000baf565b5b600062000c428482850162000c02565b91505092915050565b62000c568162000bd4565b82525050565b600060408201905062000c73600083018562000c4b565b62000c82602083018462000c4b565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cfe8262000c89565b915062000d0b8362000c89565b92508262000d1e5762000d1d62000c93565b5b828204905092915050565b600062000d368262000c89565b915062000d438362000c89565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d7b5762000d7a62000cc2565b5b828201905092915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000dcf601b8362000d86565b915062000ddc8262000d97565b602082019050919050565b6000602082019050818103600083015262000e028162000dc0565b9050919050565b7f42455032303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e41601f8362000d86565b915062000e4e8262000e09565b602082019050919050565b6000602082019050818103600083015262000e748162000e32565b9050919050565b62000e868162000c89565b82525050565b600060208201905062000ea3600083018462000e7b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ef157607f821691505b60208210810362000f075762000f0662000ea9565b5b50919050565b6154c78062000f1d6000396000f3fe60806040526004361061031e5760003560e01c806375f0a874116101ab578063a614ff75116100f7578063d5e3725111610095578063e71dc3f51161006f578063e71dc3f514610baf578063f2fde38b14610bda578063f8b45b0514610c03578063fc6b151c14610c2e57610325565b8063d5e3725114610b1e578063dd62ed3e14610b47578063e2f4560514610b8457610325565b8063b4942988116100d1578063b494298814610a62578063b62496f514610a8d578063b74e3b1114610aca578063d045a32914610af357610325565b8063a614ff75146109d1578063a9059cbb146109fa578063adb873bd14610a3757610325565b806395451c29116101645780639a7a23d61161013e5780639a7a23d6146109155780639c3b4fdc1461093e578063a0d82dc514610969578063a457c2d71461099457610325565b806395451c291461089657806395d89b41146108c1578063992c58e4146108ec57610325565b806375f0a874146107aa5780637fdde05c146107d55780638a8c523c146107fe5780638c3c82b2146108155780638da5cb5b146108405780638ea5220f1461086b57610325565b806349bd5a5e1161026a5780635d098b38116102235780637088fb7f116101fd5780637088fb7f1461071657806370a082311461072d578063715018a61461076a57806375829def1461078157610325565b80635d098b381461069b5780635eee4bae146106c4578063679ca6e9146106ed57610325565b806349bd5a5e146105875780634a62bb65146105b25780634a74bb02146105dd5780634ada218b146106085780634fbee193146106335780635124f8741461067057610325565b806318160ddd116102d75780632307b441116102b15780632307b441146104b957806323b872dd146104e2578063313ce5671461051f578063395093511461054a57610325565b806318160ddd1461043a5780631d7b1fb4146104655780631f53ac021461049057610325565b806303fd2a451461032a57806305ca5f081461035557806306fdde031461037e57806308dfe8a5146103a9578063095ea7b3146103d25780631694505e1461040f57610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c57565b60405161034c9190613d36565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190613d9b565b610c7d565b005b34801561038a57600080fd5b50610393610de0565b6040516103a09190613e61565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb9190613ee7565b610e72565b005b3480156103de57600080fd5b506103f960048036038101906103f49190613f27565b610fb2565b6040516104069190613f76565b60405180910390f35b34801561041b57600080fd5b50610424610fd0565b6040516104319190613ff0565b60405180910390f35b34801561044657600080fd5b5061044f610ff6565b60405161045c919061401a565b60405180910390f35b34801561047157600080fd5b5061047a611000565b604051610487919061401a565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190614035565b611006565b005b3480156104c557600080fd5b506104e060048036038101906104db919061426d565b611170565b005b3480156104ee57600080fd5b50610509600480360381019061050491906142e5565b611312565b6040516105169190613f76565b60405180910390f35b34801561052b57600080fd5b506105346113eb565b6040516105419190614354565b60405180910390f35b34801561055657600080fd5b50610571600480360381019061056c9190613f27565b6113f4565b60405161057e9190613f76565b60405180910390f35b34801561059357600080fd5b5061059c6114a7565b6040516105a99190613d36565b60405180910390f35b3480156105be57600080fd5b506105c76114cd565b6040516105d49190613f76565b60405180910390f35b3480156105e957600080fd5b506105f26114e0565b6040516105ff9190613f76565b60405180910390f35b34801561061457600080fd5b5061061d6114f3565b60405161062a9190613f76565b60405180910390f35b34801561063f57600080fd5b5061065a60048036038101906106559190614035565b611506565b6040516106679190613f76565b60405180910390f35b34801561067c57600080fd5b5061068561155c565b604051610692919061401a565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190614035565b611562565b005b3480156106d057600080fd5b506106eb60048036038101906106e69190613d9b565b6116cc565b005b3480156106f957600080fd5b50610714600480360381019061070f919061436f565b611780565b005b34801561072257600080fd5b5061072b611834565b005b34801561073957600080fd5b50610754600480360381019061074f9190614035565b61191a565b604051610761919061401a565b60405180910390f35b34801561077657600080fd5b5061077f611962565b005b34801561078d57600080fd5b506107a860048036038101906107a39190614035565b611aba565b005b3480156107b657600080fd5b506107bf611c0d565b6040516107cc91906143bd565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f79190613ee7565b611c33565b005b34801561080a57600080fd5b50610813611d25565b005b34801561082157600080fd5b5061082a611e2d565b604051610837919061401a565b60405180910390f35b34801561084c57600080fd5b50610855611e33565b6040516108629190613d36565b60405180910390f35b34801561087757600080fd5b50610880611e5d565b60405161088d91906143bd565b60405180910390f35b3480156108a257600080fd5b506108ab611e83565b6040516108b8919061401a565b60405180910390f35b3480156108cd57600080fd5b506108d6611e89565b6040516108e39190613e61565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e91906143d8565b611f1b565b005b34801561092157600080fd5b5061093c60048036038101906109379190613ee7565b6120c0565b005b34801561094a57600080fd5b50610953612165565b604051610960919061401a565b60405180910390f35b34801561097557600080fd5b5061097e61216b565b60405161098b919061401a565b60405180910390f35b3480156109a057600080fd5b506109bb60048036038101906109b69190613f27565b612171565b6040516109c89190613f76565b60405180910390f35b3480156109dd57600080fd5b506109f860048036038101906109f3919061436f565b61223e565b005b348015610a0657600080fd5b50610a216004803603810190610a1c9190613f27565b6122f2565b604051610a2e9190613f76565b60405180910390f35b348015610a4357600080fd5b50610a4c612310565b604051610a59919061401a565b60405180910390f35b348015610a6e57600080fd5b50610a77612316565b604051610a84919061401a565b60405180910390f35b348015610a9957600080fd5b50610ab46004803603810190610aaf9190614035565b61231c565b604051610ac19190613f76565b60405180910390f35b348015610ad657600080fd5b50610af16004803603810190610aec9190613d9b565b61233c565b005b348015610aff57600080fd5b50610b08612422565b604051610b159190613f76565b60405180910390f35b348015610b2a57600080fd5b50610b456004803603810190610b40919061436f565b612435565b005b348015610b5357600080fd5b50610b6e6004803603810190610b699190614465565b61253f565b604051610b7b919061401a565b60405180910390f35b348015610b9057600080fd5b50610b996125c6565b604051610ba6919061401a565b60405180910390f35b348015610bbb57600080fd5b50610bc46125cc565b604051610bd1919061401a565b60405180910390f35b348015610be657600080fd5b50610c016004803603810190610bfc9190614035565b6125d2565b005b348015610c0f57600080fd5b50610c18612798565b604051610c25919061401a565b60405180910390f35b348015610c3a57600080fd5b50610c556004803603810190610c509190613d9b565b61279e565b005b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c85612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b906144f1565b60405180910390fd5b670de0b6b3a764000081610d289190614540565b90506000610d43600954600a546128a690919063ffffffff16565b90506000610d6e82610d60600a548661290c90919063ffffffff16565b61298690919063ffffffff16565b90506000610d9983610d8b6009548761290c90919063ffffffff16565b61298690919063ffffffff16565b9050610da4846129d0565b610db982600a54612c1290919063ffffffff16565b600a81905550610dd481600954612c1290919063ffffffff16565b60098190555050505050565b606060038054610def906145c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1b906145c9565b8015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b5050505050905090565b610e7a612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f00906144f1565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610fa69190613f76565b60405180910390a25050565b6000610fc6610fbf612904565b8484612c5c565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60225481565b61100e612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611094906144f1565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa816040516111659190613d36565b60405180910390a150565b611178612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe906144f1565b60405180910390fd5b805182511461124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124290614646565b60405180910390fd5b60c882511115611290576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611287906146d8565b60405180910390fd5b60005b825181101561130d5760008382815181106112b1576112b06146f8565b5b602002602001015190506000670de0b6b3a76400008484815181106112d9576112d86146f8565b5b60200260200101516112eb9190614540565b90506112f8338383612e25565b5050808061130590614727565b915050611293565b505050565b600061131f8484846130b8565b6113e08461132b612904565b6113db8560405180606001604052806028815260200161541f60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611391612904565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139459092919063ffffffff16565b612c5c565b600190509392505050565b60006012905090565b600061149d611401612904565b846114988560016000611412612904565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a690919063ffffffff16565b612c5c565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60009054906101000a900460ff1681565b601860009054906101000a900460ff1681565b600860159054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b61156a612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f0906144f1565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c224433816040516116c19190613d36565b60405180910390a150565b6116d4612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175a906144f1565b60405180910390fd5b670de0b6b3a7640000816117779190614540565b60118190555050565b611788612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180e906144f1565b60405180910390fd5b80601c60006101000a81548160ff02191690831515021790555050565b61183c612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c2906144f1565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611916573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61196a612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f0906144f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611ac2612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b48906144f1565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c0a816125d2565b50565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c3b612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc1906144f1565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d2d612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db3906144f1565b60405180910390fd5b600860159054906101000a900460ff1615611dd657600080fd5b6001600860156101000a81548160ff02191690831515021790555043602081905550426021819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b60215481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b606060048054611e98906145c9565b80601f0160208091040260200160405190810160405280929190818152602001828054611ec4906145c9565b8015611f115780601f10611ee657610100808354040283529160200191611f11565b820191906000526020600020905b815481529060010190602001808311611ef457829003601f168201915b5050505050905090565b611f23612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa9906144f1565b60405180910390fd5b856014819055508360158190555084601281905550826013819055508160168190555080601781905550611ff36017546012546128a690919063ffffffff16565b600b819055506120106016546014546128a690919063ffffffff16565b600c819055506063600b541115801561202c57506063600c5411155b61206b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612062906147e1565b60405180910390fd5b7ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff6012546013546017546014546015546016546040516120b096959493929190614801565b60405180910390a1505050505050565b6120c8612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214e906144f1565b60405180910390fd5b61216182826139a9565b5050565b60165481565b60175481565b600061223461217e612904565b8461222f8560405180606001604052806025815260200161546d60259139600160006121a8612904565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139459092919063ffffffff16565b612c5c565b6001905092915050565b612246612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cc906144f1565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b60006123066122ff612904565b84846130b8565b6001905092915050565b60135481565b60205481565b601a6020528060005260406000206000915054906101000a900460ff1681565b612344612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca906144f1565b60405180910390fd5b61012c811115612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f906148d4565b60405180910390fd5b8060228190555050565b601060009054906101000a900460ff1681565b61243d612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c3906144f1565b60405180910390fd5b801515601860009054906101000a900460ff161515036124eb57600080fd5b80601860006101000a81548160ff0219169083151502179055507fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef816040516125349190613f76565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b60155481565b6125da612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612669576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612660906144f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cf90614966565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b6127a6612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282c906144f1565b60405180910390fd5b670de0b6b3a7640000816128499190614540565b9050606460025461285a91906149b5565b81101561289c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289390614a58565b60405180910390fd5b80600f8190555050565b60008082846128b59190614a78565b9050838110156128fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f190614b1a565b60405180910390fd5b8091505092915050565b600033905090565b600080830361291e5760009050612980565b6000828461292c9190614540565b905082848261293b91906149b5565b1461297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297290614bac565b60405180910390fd5b809150505b92915050565b60006129c883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a4a565b905092915050565b6000810315612c0f576129e281613aad565b6000600190506000600190506000612a076016546014546128a690919063ffffffff16565b612a1e6017546012546128a690919063ffffffff16565b612a289190614a78565b9050600080821115612a4a57612a47824761298690919063ffffffff16565b90505b600081612a646012546014546128a690919063ffffffff16565b612a6e9190614540565b9050600082612a8a6017546016546128a690919063ffffffff16565b612a949190614540565b90506000821115612b2e57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612ae590614bfd565b60006040518083038185875af1925050503d8060008114612b22576040519150601f19603f3d011682016040523d82523d6000602084013e612b27565b606091505b5050809650505b6000811115612bc657600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612b7d90614bfd565b60006040518083038185875af1925050503d8060008114612bba576040519150601f19603f3d011682016040523d82523d6000602084013e612bbf565b606091505b5050809550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea982878015612bf25750865b604051612c00929190614c12565b60405180910390a15050505050505b50565b6000612c5483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613945565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc290614cad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3190614d3f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e18919061401a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8b90614dd1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efa90614e63565b60405180910390fd5b612f0e838383613cf0565b612f7981604051806060016040528060268152602001615447602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139459092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061300c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130ab919061401a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311e90614ef5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318d90614f87565b60405180910390fd5b6000806000601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661323c57600860159054906101000a900460ff1661323b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323290614ff3565b60405180910390fd5b5b600084036132585761325086866000612e25565b505050613940565b600860149054906101000a900460ff161580156132bf5750601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133155750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613931576000601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050801561346e57601254935060135492506017549150601c60009054906101000a900460ff161561346957602254601f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133e29190614a78565b421015613424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341b9061505f565b60405180910390fd5b42601f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613735565b601454935060155492506016549150601c60009054906101000a900460ff16156136c05760026020546134a19190614a78565b43116134e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134d9906150cb565b60405180910390fd5b601d543a1115613527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351e90615137565b60405180910390fd5b43601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036135a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359f906151a3565b60405180910390fd5b602254601f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f59190614a78565b421015613637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362e9061505f565b60405180910390fd5b43601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601060009054906101000a900460ff16156137345760006136e08761191a565b9050600f5486826136f19190614a78565b1115613732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372990615235565b60405180910390fd5b505b5b600061374a83866128a690919063ffffffff16565b905060006137573061191a565b9050600060115482101590508080156137ba5750601a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613817576001600860146101000a81548160ff021916908315150217905550600060115490506137ea816129d0565b6000600a8190555060006009819055506000600860146101000a81548160ff021916908315150217905550505b600061383f6064613831868c61290c90919063ffffffff16565b61298690919063ffffffff16565b90506000613869606461385b8a8d61290c90919063ffffffff16565b61298690919063ffffffff16565b9050613889818361387a9190614a78565b8b612c1290919063ffffffff16565b995085156138b1576138a6826009546128a690919063ffffffff16565b6009819055506138cd565b6138c682600a546128a690919063ffffffff16565b600a819055505b6138d88c3084612e25565b600081111561392a5761390e8c600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612e25565b61392381600254612c1290919063ffffffff16565b6002819055505b5050505050505b61393c868686612e25565b5050505b505050565b600083831115829061398d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139849190613e61565b60405180910390fd5b506000838561399c9190615255565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008083118290613a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a889190613e61565b60405180910390fd5b5060008385613aa091906149b5565b9050809150509392505050565b6000600267ffffffffffffffff811115613aca57613ac9614067565b5b604051908082528060200260200182016040528015613af85781602001602082028036833780820191505090505b5090503081600081518110613b1057613b0f6146f8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdb919061529e565b81600181518110613bef57613bee6146f8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c5630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612c5c565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cba9594939291906153c4565b600060405180830381600087803b158015613cd457600080fd5b505af1158015613ce8573d6000803e3d6000fd5b505050505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d2082613cf5565b9050919050565b613d3081613d15565b82525050565b6000602082019050613d4b6000830184613d27565b92915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613d7881613d65565b8114613d8357600080fd5b50565b600081359050613d9581613d6f565b92915050565b600060208284031215613db157613db0613d5b565b5b6000613dbf84828501613d86565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e02578082015181840152602081019050613de7565b83811115613e11576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e3382613dc8565b613e3d8185613dd3565b9350613e4d818560208601613de4565b613e5681613e17565b840191505092915050565b60006020820190508181036000830152613e7b8184613e28565b905092915050565b613e8c81613d15565b8114613e9757600080fd5b50565b600081359050613ea981613e83565b92915050565b60008115159050919050565b613ec481613eaf565b8114613ecf57600080fd5b50565b600081359050613ee181613ebb565b92915050565b60008060408385031215613efe57613efd613d5b565b5b6000613f0c85828601613e9a565b9250506020613f1d85828601613ed2565b9150509250929050565b60008060408385031215613f3e57613f3d613d5b565b5b6000613f4c85828601613e9a565b9250506020613f5d85828601613d86565b9150509250929050565b613f7081613eaf565b82525050565b6000602082019050613f8b6000830184613f67565b92915050565b6000819050919050565b6000613fb6613fb1613fac84613cf5565b613f91565b613cf5565b9050919050565b6000613fc882613f9b565b9050919050565b6000613fda82613fbd565b9050919050565b613fea81613fcf565b82525050565b60006020820190506140056000830184613fe1565b92915050565b61401481613d65565b82525050565b600060208201905061402f600083018461400b565b92915050565b60006020828403121561404b5761404a613d5b565b5b600061405984828501613e9a565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61409f82613e17565b810181811067ffffffffffffffff821117156140be576140bd614067565b5b80604052505050565b60006140d1613d51565b90506140dd8282614096565b919050565b600067ffffffffffffffff8211156140fd576140fc614067565b5b602082029050602081019050919050565b600080fd5b6000614126614121846140e2565b6140c7565b905080838252602082019050602084028301858111156141495761414861410e565b5b835b81811015614172578061415e8882613e9a565b84526020840193505060208101905061414b565b5050509392505050565b600082601f83011261419157614190614062565b5b81356141a1848260208601614113565b91505092915050565b600067ffffffffffffffff8211156141c5576141c4614067565b5b602082029050602081019050919050565b60006141e96141e4846141aa565b6140c7565b9050808382526020820190506020840283018581111561420c5761420b61410e565b5b835b8181101561423557806142218882613d86565b84526020840193505060208101905061420e565b5050509392505050565b600082601f83011261425457614253614062565b5b81356142648482602086016141d6565b91505092915050565b6000806040838503121561428457614283613d5b565b5b600083013567ffffffffffffffff8111156142a2576142a1613d60565b5b6142ae8582860161417c565b925050602083013567ffffffffffffffff8111156142cf576142ce613d60565b5b6142db8582860161423f565b9150509250929050565b6000806000606084860312156142fe576142fd613d5b565b5b600061430c86828701613e9a565b935050602061431d86828701613e9a565b925050604061432e86828701613d86565b9150509250925092565b600060ff82169050919050565b61434e81614338565b82525050565b60006020820190506143696000830184614345565b92915050565b60006020828403121561438557614384613d5b565b5b600061439384828501613ed2565b91505092915050565b60006143a782613cf5565b9050919050565b6143b78161439c565b82525050565b60006020820190506143d260008301846143ae565b92915050565b60008060008060008060c087890312156143f5576143f4613d5b565b5b600061440389828a01613d86565b965050602061441489828a01613d86565b955050604061442589828a01613d86565b945050606061443689828a01613d86565b935050608061444789828a01613d86565b92505060a061445889828a01613d86565b9150509295509295509295565b6000806040838503121561447c5761447b613d5b565b5b600061448a85828601613e9a565b925050602061449b85828601613e9a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144db602083613dd3565b91506144e6826144a5565b602082019050919050565b6000602082019050818103600083015261450a816144ce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061454b82613d65565b915061455683613d65565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561458f5761458e614511565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806145e157607f821691505b6020821081036145f4576145f361459a565b5b50919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b6000614630601e83613dd3565b915061463b826145fa565b602082019050919050565b6000602082019050818103600083015261465f81614623565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b60006146c2602283613dd3565b91506146cd82614666565b604082019050919050565b600060208201905081810360008301526146f1816146b5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061473282613d65565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361476457614763614511565b5b600182019050919050565b7f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60008201527f2031352500000000000000000000000000000000000000000000000000000000602082015250565b60006147cb602483613dd3565b91506147d68261476f565b604082019050919050565b600060208201905081810360008301526147fa816147be565b9050919050565b600060c082019050614816600083018961400b565b614823602083018861400b565b614830604083018761400b565b61483d606083018661400b565b61484a608083018561400b565b61485760a083018461400b565b979650505050505050565b7f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d60008201527f696e757465730000000000000000000000000000000000000000000000000000602082015250565b60006148be602683613dd3565b91506148c982614862565b604082019050919050565b600060208201905081810360008301526148ed816148b1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614950602683613dd3565b915061495b826148f4565b604082019050919050565b6000602082019050818103600083015261497f81614943565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149c082613d65565b91506149cb83613d65565b9250826149db576149da614986565b5b828204905092915050565b7f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360008201527f207468616e203125000000000000000000000000000000000000000000000000602082015250565b6000614a42602883613dd3565b9150614a4d826149e6565b604082019050919050565b60006020820190508181036000830152614a7181614a35565b9050919050565b6000614a8382613d65565b9150614a8e83613d65565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ac357614ac2614511565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b04601b83613dd3565b9150614b0f82614ace565b602082019050919050565b60006020820190508181036000830152614b3381614af7565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b96602183613dd3565b9150614ba182614b3a565b604082019050919050565b60006020820190508181036000830152614bc581614b89565b9050919050565b600081905092915050565b50565b6000614be7600083614bcc565b9150614bf282614bd7565b600082019050919050565b6000614c0882614bda565b9150819050919050565b6000604082019050614c27600083018561400b565b614c346020830184613f67565b9392505050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c97602483613dd3565b9150614ca282614c3b565b604082019050919050565b60006020820190508181036000830152614cc681614c8a565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d29602283613dd3565b9150614d3482614ccd565b604082019050919050565b60006020820190508181036000830152614d5881614d1c565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614dbb602583613dd3565b9150614dc682614d5f565b604082019050919050565b60006020820190508181036000830152614dea81614dae565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e4d602383613dd3565b9150614e5882614df1565b604082019050919050565b60006020820190508181036000830152614e7c81614e40565b9050919050565b7f4942455032303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614edf602683613dd3565b9150614eea82614e83565b604082019050919050565b60006020820190508181036000830152614f0e81614ed2565b9050919050565b7f4942455032303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f71602483613dd3565b9150614f7c82614f15565b604082019050919050565b60006020820190508181036000830152614fa081614f64565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b6000614fdd602083613dd3565b9150614fe882614fa7565b602082019050919050565b6000602082019050818103600083015261500c81614fd0565b9050919050565b7f636f6f6c646f776e20706572696f642061637469766500000000000000000000600082015250565b6000615049601683613dd3565b915061505482615013565b602082019050919050565b600060208201905081810360008301526150788161503c565b9050919050565b7f796f75207368616c6c206e6f7420706173730000000000000000000000000000600082015250565b60006150b5601283613dd3565b91506150c08261507f565b602082019050919050565b600060208201905081810360008301526150e4816150a8565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b6000615121601883613dd3565b915061512c826150eb565b602082019050919050565b6000602082019050818103600083015261515081615114565b9050919050565b7f546f6f206d616e7920545820696e20626c6f636b000000000000000000000000600082015250565b600061518d601483613dd3565b915061519882615157565b602082019050919050565b600060208201905081810360008301526151bc81615180565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b600061521f602483613dd3565b915061522a826151c3565b604082019050919050565b6000602082019050818103600083015261524e81615212565b9050919050565b600061526082613d65565b915061526b83613d65565b92508282101561527e5761527d614511565b5b828203905092915050565b60008151905061529881613e83565b92915050565b6000602082840312156152b4576152b3613d5b565b5b60006152c284828501615289565b91505092915050565b6000819050919050565b60006152f06152eb6152e6846152cb565b613f91565b613d65565b9050919050565b615300816152d5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61533b81613d15565b82525050565b600061534d8383615332565b60208301905092915050565b6000602082019050919050565b600061537182615306565b61537b8185615311565b935061538683615322565b8060005b838110156153b757815161539e8882615341565b97506153a983615359565b92505060018101905061538a565b5085935050505092915050565b600060a0820190506153d9600083018861400b565b6153e660208301876152f7565b81810360408301526153f88186615366565b90506154076060830185613d27565b615414608083018461400b565b969550505050505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122007039b77952e5f019e4cc49ff550c8d2f87263531c40534644b2c25fb2cab38c64736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c806375f0a874116101ab578063a614ff75116100f7578063d5e3725111610095578063e71dc3f51161006f578063e71dc3f514610baf578063f2fde38b14610bda578063f8b45b0514610c03578063fc6b151c14610c2e57610325565b8063d5e3725114610b1e578063dd62ed3e14610b47578063e2f4560514610b8457610325565b8063b4942988116100d1578063b494298814610a62578063b62496f514610a8d578063b74e3b1114610aca578063d045a32914610af357610325565b8063a614ff75146109d1578063a9059cbb146109fa578063adb873bd14610a3757610325565b806395451c29116101645780639a7a23d61161013e5780639a7a23d6146109155780639c3b4fdc1461093e578063a0d82dc514610969578063a457c2d71461099457610325565b806395451c291461089657806395d89b41146108c1578063992c58e4146108ec57610325565b806375f0a874146107aa5780637fdde05c146107d55780638a8c523c146107fe5780638c3c82b2146108155780638da5cb5b146108405780638ea5220f1461086b57610325565b806349bd5a5e1161026a5780635d098b38116102235780637088fb7f116101fd5780637088fb7f1461071657806370a082311461072d578063715018a61461076a57806375829def1461078157610325565b80635d098b381461069b5780635eee4bae146106c4578063679ca6e9146106ed57610325565b806349bd5a5e146105875780634a62bb65146105b25780634a74bb02146105dd5780634ada218b146106085780634fbee193146106335780635124f8741461067057610325565b806318160ddd116102d75780632307b441116102b15780632307b441146104b957806323b872dd146104e2578063313ce5671461051f578063395093511461054a57610325565b806318160ddd1461043a5780631d7b1fb4146104655780631f53ac021461049057610325565b806303fd2a451461032a57806305ca5f081461035557806306fdde031461037e57806308dfe8a5146103a9578063095ea7b3146103d25780631694505e1461040f57610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c57565b60405161034c9190613d36565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190613d9b565b610c7d565b005b34801561038a57600080fd5b50610393610de0565b6040516103a09190613e61565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb9190613ee7565b610e72565b005b3480156103de57600080fd5b506103f960048036038101906103f49190613f27565b610fb2565b6040516104069190613f76565b60405180910390f35b34801561041b57600080fd5b50610424610fd0565b6040516104319190613ff0565b60405180910390f35b34801561044657600080fd5b5061044f610ff6565b60405161045c919061401a565b60405180910390f35b34801561047157600080fd5b5061047a611000565b604051610487919061401a565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190614035565b611006565b005b3480156104c557600080fd5b506104e060048036038101906104db919061426d565b611170565b005b3480156104ee57600080fd5b50610509600480360381019061050491906142e5565b611312565b6040516105169190613f76565b60405180910390f35b34801561052b57600080fd5b506105346113eb565b6040516105419190614354565b60405180910390f35b34801561055657600080fd5b50610571600480360381019061056c9190613f27565b6113f4565b60405161057e9190613f76565b60405180910390f35b34801561059357600080fd5b5061059c6114a7565b6040516105a99190613d36565b60405180910390f35b3480156105be57600080fd5b506105c76114cd565b6040516105d49190613f76565b60405180910390f35b3480156105e957600080fd5b506105f26114e0565b6040516105ff9190613f76565b60405180910390f35b34801561061457600080fd5b5061061d6114f3565b60405161062a9190613f76565b60405180910390f35b34801561063f57600080fd5b5061065a60048036038101906106559190614035565b611506565b6040516106679190613f76565b60405180910390f35b34801561067c57600080fd5b5061068561155c565b604051610692919061401a565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190614035565b611562565b005b3480156106d057600080fd5b506106eb60048036038101906106e69190613d9b565b6116cc565b005b3480156106f957600080fd5b50610714600480360381019061070f919061436f565b611780565b005b34801561072257600080fd5b5061072b611834565b005b34801561073957600080fd5b50610754600480360381019061074f9190614035565b61191a565b604051610761919061401a565b60405180910390f35b34801561077657600080fd5b5061077f611962565b005b34801561078d57600080fd5b506107a860048036038101906107a39190614035565b611aba565b005b3480156107b657600080fd5b506107bf611c0d565b6040516107cc91906143bd565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f79190613ee7565b611c33565b005b34801561080a57600080fd5b50610813611d25565b005b34801561082157600080fd5b5061082a611e2d565b604051610837919061401a565b60405180910390f35b34801561084c57600080fd5b50610855611e33565b6040516108629190613d36565b60405180910390f35b34801561087757600080fd5b50610880611e5d565b60405161088d91906143bd565b60405180910390f35b3480156108a257600080fd5b506108ab611e83565b6040516108b8919061401a565b60405180910390f35b3480156108cd57600080fd5b506108d6611e89565b6040516108e39190613e61565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e91906143d8565b611f1b565b005b34801561092157600080fd5b5061093c60048036038101906109379190613ee7565b6120c0565b005b34801561094a57600080fd5b50610953612165565b604051610960919061401a565b60405180910390f35b34801561097557600080fd5b5061097e61216b565b60405161098b919061401a565b60405180910390f35b3480156109a057600080fd5b506109bb60048036038101906109b69190613f27565b612171565b6040516109c89190613f76565b60405180910390f35b3480156109dd57600080fd5b506109f860048036038101906109f3919061436f565b61223e565b005b348015610a0657600080fd5b50610a216004803603810190610a1c9190613f27565b6122f2565b604051610a2e9190613f76565b60405180910390f35b348015610a4357600080fd5b50610a4c612310565b604051610a59919061401a565b60405180910390f35b348015610a6e57600080fd5b50610a77612316565b604051610a84919061401a565b60405180910390f35b348015610a9957600080fd5b50610ab46004803603810190610aaf9190614035565b61231c565b604051610ac19190613f76565b60405180910390f35b348015610ad657600080fd5b50610af16004803603810190610aec9190613d9b565b61233c565b005b348015610aff57600080fd5b50610b08612422565b604051610b159190613f76565b60405180910390f35b348015610b2a57600080fd5b50610b456004803603810190610b40919061436f565b612435565b005b348015610b5357600080fd5b50610b6e6004803603810190610b699190614465565b61253f565b604051610b7b919061401a565b60405180910390f35b348015610b9057600080fd5b50610b996125c6565b604051610ba6919061401a565b60405180910390f35b348015610bbb57600080fd5b50610bc46125cc565b604051610bd1919061401a565b60405180910390f35b348015610be657600080fd5b50610c016004803603810190610bfc9190614035565b6125d2565b005b348015610c0f57600080fd5b50610c18612798565b604051610c25919061401a565b60405180910390f35b348015610c3a57600080fd5b50610c556004803603810190610c509190613d9b565b61279e565b005b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c85612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b906144f1565b60405180910390fd5b670de0b6b3a764000081610d289190614540565b90506000610d43600954600a546128a690919063ffffffff16565b90506000610d6e82610d60600a548661290c90919063ffffffff16565b61298690919063ffffffff16565b90506000610d9983610d8b6009548761290c90919063ffffffff16565b61298690919063ffffffff16565b9050610da4846129d0565b610db982600a54612c1290919063ffffffff16565b600a81905550610dd481600954612c1290919063ffffffff16565b60098190555050505050565b606060038054610def906145c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1b906145c9565b8015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b5050505050905090565b610e7a612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f00906144f1565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610fa69190613f76565b60405180910390a25050565b6000610fc6610fbf612904565b8484612c5c565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60225481565b61100e612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611094906144f1565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa816040516111659190613d36565b60405180910390a150565b611178612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe906144f1565b60405180910390fd5b805182511461124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124290614646565b60405180910390fd5b60c882511115611290576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611287906146d8565b60405180910390fd5b60005b825181101561130d5760008382815181106112b1576112b06146f8565b5b602002602001015190506000670de0b6b3a76400008484815181106112d9576112d86146f8565b5b60200260200101516112eb9190614540565b90506112f8338383612e25565b5050808061130590614727565b915050611293565b505050565b600061131f8484846130b8565b6113e08461132b612904565b6113db8560405180606001604052806028815260200161541f60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611391612904565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139459092919063ffffffff16565b612c5c565b600190509392505050565b60006012905090565b600061149d611401612904565b846114988560016000611412612904565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a690919063ffffffff16565b612c5c565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60009054906101000a900460ff1681565b601860009054906101000a900460ff1681565b600860159054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b61156a612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f0906144f1565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c224433816040516116c19190613d36565b60405180910390a150565b6116d4612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175a906144f1565b60405180910390fd5b670de0b6b3a7640000816117779190614540565b60118190555050565b611788612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180e906144f1565b60405180910390fd5b80601c60006101000a81548160ff02191690831515021790555050565b61183c612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c2906144f1565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611916573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61196a612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f0906144f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611ac2612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b48906144f1565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c0a816125d2565b50565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c3b612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc1906144f1565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d2d612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db3906144f1565b60405180910390fd5b600860159054906101000a900460ff1615611dd657600080fd5b6001600860156101000a81548160ff02191690831515021790555043602081905550426021819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b60215481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b606060048054611e98906145c9565b80601f0160208091040260200160405190810160405280929190818152602001828054611ec4906145c9565b8015611f115780601f10611ee657610100808354040283529160200191611f11565b820191906000526020600020905b815481529060010190602001808311611ef457829003601f168201915b5050505050905090565b611f23612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa9906144f1565b60405180910390fd5b856014819055508360158190555084601281905550826013819055508160168190555080601781905550611ff36017546012546128a690919063ffffffff16565b600b819055506120106016546014546128a690919063ffffffff16565b600c819055506063600b541115801561202c57506063600c5411155b61206b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612062906147e1565b60405180910390fd5b7ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff6012546013546017546014546015546016546040516120b096959493929190614801565b60405180910390a1505050505050565b6120c8612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214e906144f1565b60405180910390fd5b61216182826139a9565b5050565b60165481565b60175481565b600061223461217e612904565b8461222f8560405180606001604052806025815260200161546d60259139600160006121a8612904565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139459092919063ffffffff16565b612c5c565b6001905092915050565b612246612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cc906144f1565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b60006123066122ff612904565b84846130b8565b6001905092915050565b60135481565b60205481565b601a6020528060005260406000206000915054906101000a900460ff1681565b612344612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca906144f1565b60405180910390fd5b61012c811115612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f906148d4565b60405180910390fd5b8060228190555050565b601060009054906101000a900460ff1681565b61243d612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c3906144f1565b60405180910390fd5b801515601860009054906101000a900460ff161515036124eb57600080fd5b80601860006101000a81548160ff0219169083151502179055507fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef816040516125349190613f76565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b60155481565b6125da612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612669576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612660906144f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cf90614966565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b6127a6612904565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282c906144f1565b60405180910390fd5b670de0b6b3a7640000816128499190614540565b9050606460025461285a91906149b5565b81101561289c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289390614a58565b60405180910390fd5b80600f8190555050565b60008082846128b59190614a78565b9050838110156128fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f190614b1a565b60405180910390fd5b8091505092915050565b600033905090565b600080830361291e5760009050612980565b6000828461292c9190614540565b905082848261293b91906149b5565b1461297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297290614bac565b60405180910390fd5b809150505b92915050565b60006129c883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a4a565b905092915050565b6000810315612c0f576129e281613aad565b6000600190506000600190506000612a076016546014546128a690919063ffffffff16565b612a1e6017546012546128a690919063ffffffff16565b612a289190614a78565b9050600080821115612a4a57612a47824761298690919063ffffffff16565b90505b600081612a646012546014546128a690919063ffffffff16565b612a6e9190614540565b9050600082612a8a6017546016546128a690919063ffffffff16565b612a949190614540565b90506000821115612b2e57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612ae590614bfd565b60006040518083038185875af1925050503d8060008114612b22576040519150601f19603f3d011682016040523d82523d6000602084013e612b27565b606091505b5050809650505b6000811115612bc657600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612b7d90614bfd565b60006040518083038185875af1925050503d8060008114612bba576040519150601f19603f3d011682016040523d82523d6000602084013e612bbf565b606091505b5050809550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea982878015612bf25750865b604051612c00929190614c12565b60405180910390a15050505050505b50565b6000612c5483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613945565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc290614cad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3190614d3f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e18919061401a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8b90614dd1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efa90614e63565b60405180910390fd5b612f0e838383613cf0565b612f7981604051806060016040528060268152602001615447602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139459092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061300c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130ab919061401a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311e90614ef5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318d90614f87565b60405180910390fd5b6000806000601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661323c57600860159054906101000a900460ff1661323b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323290614ff3565b60405180910390fd5b5b600084036132585761325086866000612e25565b505050613940565b600860149054906101000a900460ff161580156132bf5750601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133155750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613931576000601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050801561346e57601254935060135492506017549150601c60009054906101000a900460ff161561346957602254601f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133e29190614a78565b421015613424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341b9061505f565b60405180910390fd5b42601f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613735565b601454935060155492506016549150601c60009054906101000a900460ff16156136c05760026020546134a19190614a78565b43116134e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134d9906150cb565b60405180910390fd5b601d543a1115613527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351e90615137565b60405180910390fd5b43601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036135a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359f906151a3565b60405180910390fd5b602254601f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f59190614a78565b421015613637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362e9061505f565b60405180910390fd5b43601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601060009054906101000a900460ff16156137345760006136e08761191a565b9050600f5486826136f19190614a78565b1115613732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372990615235565b60405180910390fd5b505b5b600061374a83866128a690919063ffffffff16565b905060006137573061191a565b9050600060115482101590508080156137ba5750601a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613817576001600860146101000a81548160ff021916908315150217905550600060115490506137ea816129d0565b6000600a8190555060006009819055506000600860146101000a81548160ff021916908315150217905550505b600061383f6064613831868c61290c90919063ffffffff16565b61298690919063ffffffff16565b90506000613869606461385b8a8d61290c90919063ffffffff16565b61298690919063ffffffff16565b9050613889818361387a9190614a78565b8b612c1290919063ffffffff16565b995085156138b1576138a6826009546128a690919063ffffffff16565b6009819055506138cd565b6138c682600a546128a690919063ffffffff16565b600a819055505b6138d88c3084612e25565b600081111561392a5761390e8c600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612e25565b61392381600254612c1290919063ffffffff16565b6002819055505b5050505050505b61393c868686612e25565b5050505b505050565b600083831115829061398d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139849190613e61565b60405180910390fd5b506000838561399c9190615255565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008083118290613a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a889190613e61565b60405180910390fd5b5060008385613aa091906149b5565b9050809150509392505050565b6000600267ffffffffffffffff811115613aca57613ac9614067565b5b604051908082528060200260200182016040528015613af85781602001602082028036833780820191505090505b5090503081600081518110613b1057613b0f6146f8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdb919061529e565b81600181518110613bef57613bee6146f8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c5630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612c5c565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cba9594939291906153c4565b600060405180830381600087803b158015613cd457600080fd5b505af1158015613ce8573d6000803e3d6000fd5b505050505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d2082613cf5565b9050919050565b613d3081613d15565b82525050565b6000602082019050613d4b6000830184613d27565b92915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613d7881613d65565b8114613d8357600080fd5b50565b600081359050613d9581613d6f565b92915050565b600060208284031215613db157613db0613d5b565b5b6000613dbf84828501613d86565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e02578082015181840152602081019050613de7565b83811115613e11576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e3382613dc8565b613e3d8185613dd3565b9350613e4d818560208601613de4565b613e5681613e17565b840191505092915050565b60006020820190508181036000830152613e7b8184613e28565b905092915050565b613e8c81613d15565b8114613e9757600080fd5b50565b600081359050613ea981613e83565b92915050565b60008115159050919050565b613ec481613eaf565b8114613ecf57600080fd5b50565b600081359050613ee181613ebb565b92915050565b60008060408385031215613efe57613efd613d5b565b5b6000613f0c85828601613e9a565b9250506020613f1d85828601613ed2565b9150509250929050565b60008060408385031215613f3e57613f3d613d5b565b5b6000613f4c85828601613e9a565b9250506020613f5d85828601613d86565b9150509250929050565b613f7081613eaf565b82525050565b6000602082019050613f8b6000830184613f67565b92915050565b6000819050919050565b6000613fb6613fb1613fac84613cf5565b613f91565b613cf5565b9050919050565b6000613fc882613f9b565b9050919050565b6000613fda82613fbd565b9050919050565b613fea81613fcf565b82525050565b60006020820190506140056000830184613fe1565b92915050565b61401481613d65565b82525050565b600060208201905061402f600083018461400b565b92915050565b60006020828403121561404b5761404a613d5b565b5b600061405984828501613e9a565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61409f82613e17565b810181811067ffffffffffffffff821117156140be576140bd614067565b5b80604052505050565b60006140d1613d51565b90506140dd8282614096565b919050565b600067ffffffffffffffff8211156140fd576140fc614067565b5b602082029050602081019050919050565b600080fd5b6000614126614121846140e2565b6140c7565b905080838252602082019050602084028301858111156141495761414861410e565b5b835b81811015614172578061415e8882613e9a565b84526020840193505060208101905061414b565b5050509392505050565b600082601f83011261419157614190614062565b5b81356141a1848260208601614113565b91505092915050565b600067ffffffffffffffff8211156141c5576141c4614067565b5b602082029050602081019050919050565b60006141e96141e4846141aa565b6140c7565b9050808382526020820190506020840283018581111561420c5761420b61410e565b5b835b8181101561423557806142218882613d86565b84526020840193505060208101905061420e565b5050509392505050565b600082601f83011261425457614253614062565b5b81356142648482602086016141d6565b91505092915050565b6000806040838503121561428457614283613d5b565b5b600083013567ffffffffffffffff8111156142a2576142a1613d60565b5b6142ae8582860161417c565b925050602083013567ffffffffffffffff8111156142cf576142ce613d60565b5b6142db8582860161423f565b9150509250929050565b6000806000606084860312156142fe576142fd613d5b565b5b600061430c86828701613e9a565b935050602061431d86828701613e9a565b925050604061432e86828701613d86565b9150509250925092565b600060ff82169050919050565b61434e81614338565b82525050565b60006020820190506143696000830184614345565b92915050565b60006020828403121561438557614384613d5b565b5b600061439384828501613ed2565b91505092915050565b60006143a782613cf5565b9050919050565b6143b78161439c565b82525050565b60006020820190506143d260008301846143ae565b92915050565b60008060008060008060c087890312156143f5576143f4613d5b565b5b600061440389828a01613d86565b965050602061441489828a01613d86565b955050604061442589828a01613d86565b945050606061443689828a01613d86565b935050608061444789828a01613d86565b92505060a061445889828a01613d86565b9150509295509295509295565b6000806040838503121561447c5761447b613d5b565b5b600061448a85828601613e9a565b925050602061449b85828601613e9a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144db602083613dd3565b91506144e6826144a5565b602082019050919050565b6000602082019050818103600083015261450a816144ce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061454b82613d65565b915061455683613d65565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561458f5761458e614511565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806145e157607f821691505b6020821081036145f4576145f361459a565b5b50919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b6000614630601e83613dd3565b915061463b826145fa565b602082019050919050565b6000602082019050818103600083015261465f81614623565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b60006146c2602283613dd3565b91506146cd82614666565b604082019050919050565b600060208201905081810360008301526146f1816146b5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061473282613d65565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361476457614763614511565b5b600182019050919050565b7f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60008201527f2031352500000000000000000000000000000000000000000000000000000000602082015250565b60006147cb602483613dd3565b91506147d68261476f565b604082019050919050565b600060208201905081810360008301526147fa816147be565b9050919050565b600060c082019050614816600083018961400b565b614823602083018861400b565b614830604083018761400b565b61483d606083018661400b565b61484a608083018561400b565b61485760a083018461400b565b979650505050505050565b7f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d60008201527f696e757465730000000000000000000000000000000000000000000000000000602082015250565b60006148be602683613dd3565b91506148c982614862565b604082019050919050565b600060208201905081810360008301526148ed816148b1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614950602683613dd3565b915061495b826148f4565b604082019050919050565b6000602082019050818103600083015261497f81614943565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149c082613d65565b91506149cb83613d65565b9250826149db576149da614986565b5b828204905092915050565b7f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360008201527f207468616e203125000000000000000000000000000000000000000000000000602082015250565b6000614a42602883613dd3565b9150614a4d826149e6565b604082019050919050565b60006020820190508181036000830152614a7181614a35565b9050919050565b6000614a8382613d65565b9150614a8e83613d65565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ac357614ac2614511565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b04601b83613dd3565b9150614b0f82614ace565b602082019050919050565b60006020820190508181036000830152614b3381614af7565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b96602183613dd3565b9150614ba182614b3a565b604082019050919050565b60006020820190508181036000830152614bc581614b89565b9050919050565b600081905092915050565b50565b6000614be7600083614bcc565b9150614bf282614bd7565b600082019050919050565b6000614c0882614bda565b9150819050919050565b6000604082019050614c27600083018561400b565b614c346020830184613f67565b9392505050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c97602483613dd3565b9150614ca282614c3b565b604082019050919050565b60006020820190508181036000830152614cc681614c8a565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d29602283613dd3565b9150614d3482614ccd565b604082019050919050565b60006020820190508181036000830152614d5881614d1c565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614dbb602583613dd3565b9150614dc682614d5f565b604082019050919050565b60006020820190508181036000830152614dea81614dae565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e4d602383613dd3565b9150614e5882614df1565b604082019050919050565b60006020820190508181036000830152614e7c81614e40565b9050919050565b7f4942455032303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614edf602683613dd3565b9150614eea82614e83565b604082019050919050565b60006020820190508181036000830152614f0e81614ed2565b9050919050565b7f4942455032303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f71602483613dd3565b9150614f7c82614f15565b604082019050919050565b60006020820190508181036000830152614fa081614f64565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b6000614fdd602083613dd3565b9150614fe882614fa7565b602082019050919050565b6000602082019050818103600083015261500c81614fd0565b9050919050565b7f636f6f6c646f776e20706572696f642061637469766500000000000000000000600082015250565b6000615049601683613dd3565b915061505482615013565b602082019050919050565b600060208201905081810360008301526150788161503c565b9050919050565b7f796f75207368616c6c206e6f7420706173730000000000000000000000000000600082015250565b60006150b5601283613dd3565b91506150c08261507f565b602082019050919050565b600060208201905081810360008301526150e4816150a8565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b6000615121601883613dd3565b915061512c826150eb565b602082019050919050565b6000602082019050818103600083015261515081615114565b9050919050565b7f546f6f206d616e7920545820696e20626c6f636b000000000000000000000000600082015250565b600061518d601483613dd3565b915061519882615157565b602082019050919050565b600060208201905081810360008301526151bc81615180565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b600061521f602483613dd3565b915061522a826151c3565b604082019050919050565b6000602082019050818103600083015261524e81615212565b9050919050565b600061526082613d65565b915061526b83613d65565b92508282101561527e5761527d614511565b5b828203905092915050565b60008151905061529881613e83565b92915050565b6000602082840312156152b4576152b3613d5b565b5b60006152c284828501615289565b91505092915050565b6000819050919050565b60006152f06152eb6152e6846152cb565b613f91565b613d65565b9050919050565b615300816152d5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61533b81613d15565b82525050565b600061534d8383615332565b60208301905092915050565b6000602082019050919050565b600061537182615306565b61537b8185615311565b935061538683615322565b8060005b838110156153b757815161539e8882615341565b97506153a983615359565b92505060018101905061538a565b5085935050505092915050565b600060a0820190506153d9600083018861400b565b6153e660208301876152f7565b81810360408301526153f88186615366565b90506154076060830185613d27565b615414608083018461400b565b969550505050505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122007039b77952e5f019e4cc49ff550c8d2f87263531c40534644b2c25fb2cab38c64736f6c634300080d0033

Deployed Bytecode Sourcemap

15518:14937:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15690:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28382:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3401:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20248:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4315:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15605:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3722:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17032:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20049:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29891:561;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4492:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19454:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4845:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15655:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16641:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16394:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15789:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23230:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16259:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19836:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21456:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20592:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21302:146;;;;;;;;;;;;;:::i;:::-;;3838:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7293:148;;;;;;;;;;;;;:::i;:::-;;22207:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15982:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20437:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19592:232;;;;;;;;;;;;;:::i;:::-;;16970:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7079:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16030:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16187;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3509:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22427:795;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21800:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16329:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16360:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5071:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20699:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3973:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16226:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16919;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16502:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20810:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16105:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21584:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4156:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16147:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16297:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7449:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16074:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20998:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15690:64;;;;;;;;;;;;;:::o;28382:443::-;7216:12;:10;:12::i;:::-;7206:22;;:6;;;;;;;;;;;:22;;;7198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28480:6:::1;28470;:17;;;;:::i;:::-;28461:26;;28498:19;28520:25;28534:10;;28520:9;;:13;;:25;;;;:::i;:::-;28498:47;;28556:15;28574:38;28600:11;28574:21;28585:9;;28574:6;:10;;:21;;;;:::i;:::-;:25;;:38;;;;:::i;:::-;28556:56;;28623:16;28642:39;28669:11;28642:22;28653:10;;28642:6;:10;;:22;;;;:::i;:::-;:26;;:39;;;;:::i;:::-;28623:58;;28694:28;28715:6;28694:20;:28::i;:::-;28747:22;28761:7;28747:9;;:13;;:22;;;;:::i;:::-;28735:9;:34;;;;28793:24;28808:8;28793:10;;:14;;:24;;;;:::i;:::-;28780:10;:37;;;;28450:375;;;28382:443:::0;:::o;3401:100::-;3455:13;3488:5;3481:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3401:100;:::o;20248:181::-;7216:12;:10;:12::i;:::-;7206:22;;:6;;;;;;;;;;;:22;;;7198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20363:8:::1;20332:19;:28;20352:7;20332:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20403:7;20387:34;;;20412:8;20387:34;;;;;;:::i;:::-;;;;;;;;20248:181:::0;;:::o;4315:169::-;4398:4;4415:39;4424:12;:10;:12::i;:::-;4438:7;4447:6;4415:8;:39::i;:::-;4472:4;4465:11;;4315:169;;;;:::o;15605:41::-;;;;;;;;;;;;;:::o;3722:108::-;3783:7;3810:12;;3803:19;;3722:108;:::o;17032:32::-;;;;:::o;20049:187::-;7216:12;:10;:12::i;:::-;7206:22;;:6;;;;;;;;;;;:22;;;7198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20147:4:::1;20117:19;:27;20137:6;20117:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;20182:6;20162:9;;:27;;;;;;;;;;;;;;;;;;20205:23;20221:6;20205:23;;;;;;:::i;:::-;;;;;;;;20049:187:::0;:::o;29891:561::-;7216:12;:10;:12::i;:::-;7206:22;;:6;;;;;;;;;;;:22;;;7198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30063:6:::1;:13;30038:14;:21;:38;30030:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30155:3;30130:14;:21;:28;;30122:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;30213:9;30208:237;30232:14;:21;30228:1;:25;30208:237;;;30275:14;30292;30307:1;30292:17;;;;;;;;:::i;:::-;;;;;;;;30275:34;;30324:21;30361:6;30348;30355:1;30348:9;;;;;;;;:::i;:::-;;;;;;;;:20;;;;:::i;:::-;30324:44;;30383:50;30399:10;30411:6;30419:13;30383:15;:50::i;:::-;30260:185;;30255:3;;;;;:::i;:::-;;;;30208:237;;;;29891:561:::0;;:::o;4492:345::-;4605:4;4622:36;4632:6;4640:9;4651:6;4622:9;:36::i;:::-;4669:138;4678:6;4686:12;:10;:12::i;:::-;4700:106;4738:6;4700:106;;;;;;;;;;;;;;;;;:11;:19;4712:6;4700:19;;;;;;;;;;;;;;;:33;4720:12;:10;:12::i;:::-;4700:33;;;;;;;;;;;;;;;;:37;;:106;;;;;:::i;:::-;4669:8;:138::i;:::-;4825:4;4818:11;;4492:345;;;;;:::o;19454:93::-;19512:5;19537:2;19530:9;;19454:93;:::o;4845:218::-;4933:4;4950:83;4959:12;:10;:12::i;:::-;4973:7;4982:50;5021:10;4982:11;:25;4994:12;:10;:12::i;:::-;4982:25;;;;;;;;;;;;;;;:34;5008:7;4982:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;4950:8;:83::i;:::-;5051:4;5044:11;;4845:218;;;;:::o;15655:28::-;;;;;;;;;;;;;:::o;16641:34::-;;;;;;;;;;;;;:::o;16394:40::-;;;;;;;;;;;;;:::o;15789:34::-;;;;;;;;;;;;;:::o;23230:126::-;23296:4;23320:19;:28;23340:7;23320:28;;;;;;;;;;;;;;;;;;;;;;;;;23313:35;;23230:126;;;:::o;16259:31::-;;;;:::o;19836:205::-;7216:12;:10;:12::i;:::-;7206:22;;:6;;;;;;;;;;;:22;;;7198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19940:4:::1;19910:19;:27;19930:6;19910:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;19981:6;19955:15;;:33;;;;;;;;;;;;;;;;;;20004:29;20026:6;20004:29;;;;;;:::i;:::-;;;;;;;;19836:205:::0;:::o;21456:120::-;7216:12;:10;:12::i;:::-;7206:22;;:6;;;;;;;;;;;:22;;;7198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21561:6:::1;21551;:17;;;;:::i;:::-;21530:18;:38;;;;21456:120:::0;:::o;20592:99::-;7216:12;:10;:12::i;:::-;7206:22;;:6;;;;;;;;;;;:22;;;7198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20678:5:::1;20661:14;;:22;;;;;;;;;;;;;;;;;;20592:99:::0;:::o;21302:146::-;7216:12;:10;:12::i;:::-;7206:22;;:6;;;;;;;;;;;:22;;;7198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21349:17:::1;21369:21;21349:41;;21409:10;21401:28;;:39;21430:9;21401:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21338:110;21302:146::o:0;3838:127::-;3912:7;3939:9;:18;3949:7;3939:18;;;;;;;;;;;;;;;;3932:25;;3838:127;;;:::o;7293:148::-;7216:12;:10;:12::i;:::-;7206:22;;:6;;;;;;;;;;;:22;;;7198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7400:1:::1;7363:40;;7384:6;;;;;;;;;;;7363:40;;;;;;;;;;;;7431:1;7414:6;;:19;;;;;;;;;;;;;;;;;;7293:148::o:0;22207:212::-;7216:12;:10;:12::i;:::-;7206:22;;:6;;;;;;;;;;;:22;;;7198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22308:4:::1;22276:19;:29;22296:8;22276:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;22369:4;22323:33;:43;22357:8;22323:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;22384:27;22402:8;22384:17;:27::i;:::-;22207:212:::0;:::o;15982:38::-;;;;;;;;;;;;;:::o;20437:147::-;7216:12;:10;:12::i;:::-;7206:22;;:6;;;;;;;;;;;:22;;;7198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20570:6:::1;20526:33;:41;20560:6;20526:41;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;20437:147:::0;;:::o;19592:232::-;7216:12;:10;:12::i;:::-;7206:22;;:6;;;;;;;;;;;:22;;;7198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19656:14:::1;;;;;;;;;;;19655:15;19647:24;;;::::0;::::1;;19699:4;19682:14;;:21;;;;;;;;;;;;;;;;;;19728:12;19714:11;:26;;;;19769:15;19751;:33;;;;19800:16;;;;;;;;;;19592:232::o:0;16970:30::-;;;;:::o;7079:79::-;7117:7;7144:6;;;;;;;;;;;7137:13;;7079:79;:::o;16030:32::-;;;;;;;;;;;;;:::o;16187:::-;;;;:::o;3509:104::-;3565:13;3598:7;3591:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3509:104;:::o;22427:795::-;7216:12;:10;:12::i;:::-;7206:22;;:6;;;;;;;;;;;:22;;;7198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22634:12:::1;22615:16;:31;;;;22670:7;22657:10;:20;;;;22708:13;22688:17;:33;;;;22746:8;22732:11;:22;;;;22777:6;22765:9;:18;;;;22807:7;22794:10;:20;;;;22843:33;22865:10;;22843:17;;:21;;:33;;;;:::i;:::-;22827:13;:49;;;;22902:31;22923:9;;22902:16;;:20;;:31;;;;:::i;:::-;22887:12;:46;;;;23011:2;22994:13;;:19;;:41;;;;;23033:2;23017:12;;:18;;22994:41;22986:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;23094:120;23105:17;;23124:11;;23137:10;;23149:16;;23192:10;;23204:9;;23094:120;;;;;;;;;;;:::i;:::-;;;;;;;;22427:795:::0;;;;;;:::o;21800:140::-;7216:12;:10;:12::i;:::-;7206:22;;:6;;;;;;;;;;;:22;;;7198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21891:41:::1;21920:4;21926:5;21891:28;:41::i;:::-;21800:140:::0;;:::o;16329:24::-;;;;:::o;16360:25::-;;;;:::o;5071:286::-;5164:4;5181:146;5190:12;:10;:12::i;:::-;5204:7;5213:113;5252:15;5213:113;;;;;;;;;;;;;;;;;:11;:25;5225:12;:10;:12::i;:::-;5213:25;;;;;;;;;;;;;;;:34;5239:7;5213:34;;;;;;;;;;;;;;;;:38;;:113;;;;;:::i;:::-;5181:8;:146::i;:::-;5345:4;5338:11;;5071:286;;;;:::o;20699:103::-;7216:12;:10;:12::i;:::-;7206:22;;:6;;;;;;;;;;;:22;;;7198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20789:5:::1;20770:16;;:24;;;;;;;;;;;;;;;;;;20699:103:::0;:::o;3973:175::-;4059:4;4076:42;4086:12;:10;:12::i;:::-;4100:9;4111:6;4076:9;:42::i;:::-;4136:4;4129:11;;3973:175;;;;:::o;16226:26::-;;;;:::o;16919:::-;;;;:::o;16502:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;20810:174::-;7216:12;:10;:12::i;:::-;7206:22;;:6;;;;;;;;;;;:22;;;7198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20898:3:::1;20889:5;:12;;20881:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;20971:5;20955:13;:21;;;;20810:174:::0;:::o;16105:35::-;;;;;;;;;;;;;:::o;21584:208::-;7216:12;:10;:12::i;:::-;7206:22;;:6;;;;;;;;;;;:22;;;7198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21689:7:::1;21664:32;;:21;;;;;;;;;;;:32;;::::0;21656:41:::1;;;::::0;::::1;;21732:7;21708:21;;:31;;;;;;;;;;;;;;;;;;21755:29;21776:7;21755:29;;;;;;:::i;:::-;;;;;;;;21584:208:::0;:::o;4156:151::-;4245:7;4272:11;:18;4284:5;4272:18;;;;;;;;;;;;;;;:27;4291:7;4272:27;;;;;;;;;;;;;;;;4265:34;;4156:151;;;;:::o;16147:33::-;;;;:::o;16297:25::-;;;;:::o;7449:244::-;7216:12;:10;:12::i;:::-;7206:22;;:6;;;;;;;;;;;:22;;;7198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7558:1:::1;7538:22;;:8;:22;;::::0;7530:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7648:8;7619:38;;7640:6;;;;;;;;;;;7619:38;;;;;;;;;;;;7677:8;7668:6;;:17;;;;;;;;;;;;;;;;;;7449:244:::0;:::o;16074:24::-;;;;:::o;20998:218::-;7216:12;:10;:12::i;:::-;7206:22;;:6;;;;;;;;;;;:22;;;7198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21082:6:::1;21073:5;:16;;;;:::i;:::-;21065:24;;21132:3;21117:12;;:18;;;;:::i;:::-;21108:5;:27;;21100:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;21203:5;21191:9;:17;;;;20998:218:::0;:::o;635:179::-;693:7;713:9;729:1;725;:5;;;;:::i;:::-;713:17;;754:1;749;:6;;741:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;805:1;798:8;;;635:179;;;;:::o;259:98::-;312:7;339:10;332:17;;259:98;:::o;1164:248::-;1222:7;1251:1;1246;:6;1242:47;;1276:1;1269:8;;;;1242:47;1301:9;1317:1;1313;:5;;;;:::i;:::-;1301:17;;1346:1;1341;1337;:5;;;;:::i;:::-;:10;1329:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1403:1;1396:8;;;1164:248;;;;;:::o;1420:132::-;1478:7;1505:39;1509:1;1512;1505:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1498:46;;1420:132;;;;:::o;28858:1025::-;28937:1;28927:6;:11;28923:50;28955:7;28923:50;28983:24;29000:6;28983:16;:24::i;:::-;29020:12;29035:4;29020:19;;29050:15;29068:4;29050:22;;29093:23;29155:31;29176:9;;29155:16;;:20;;:31;;;;:::i;:::-;29119:33;29141:10;;29119:17;;:21;;:33;;;;:::i;:::-;:67;;;;:::i;:::-;29093:93;;29199:19;29251:1;29233:15;:19;29229:108;;;29283:42;29309:15;29283:21;:25;;:42;;;;:::i;:::-;29269:56;;29229:108;29347:23;29415:11;29373:39;29394:17;;29373:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;29347:79;;29437:17;29485:11;29457:25;29471:10;;29457:9;;:13;;:25;;;;:::i;:::-;:39;;;;:::i;:::-;29437:59;;29539:1;29521:15;:19;29517:123;;;29579:15;;;;;;;;;;;29571:29;;29608:15;29571:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29557:71;;;;;29517:123;29676:1;29664:9;:13;29660:108;;;29719:9;;;;;;;;;;;29711:23;;29742:9;29711:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29694:62;;;;;29660:108;29785:90;29813:15;29843:7;:21;;;;;29854:10;29843:21;29785:90;;;;;;;:::i;:::-;;;;;;;;28912:971;;;;;;28858:1025;;:::o;822:136::-;880:7;907:43;911:1;914;907:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;900:50;;822:136;;;;:::o;6297:346::-;6416:1;6399:19;;:5;:19;;;6391:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6497:1;6478:21;;:7;:21;;;6470:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6581:6;6551:11;:18;6563:5;6551:18;;;;;;;;;;;;;;;:27;6570:7;6551:27;;;;;;;;;;;;;;;:36;;;;6619:7;6603:32;;6612:5;6603:32;;;6628:6;6603:32;;;;;;:::i;:::-;;;;;;;;6297:346;;;:::o;5365:538::-;5489:1;5471:20;;:6;:20;;;5463:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5573:1;5552:23;;:9;:23;;;5544:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5628:47;5649:6;5657:9;5668:6;5628:20;:47::i;:::-;5708:70;5730:6;5708:70;;;;;;;;;;;;;;;;;:9;:17;5718:6;5708:17;;;;;;;;;;;;;;;;:21;;:70;;;;;:::i;:::-;5688:9;:17;5698:6;5688:17;;;;;;;;;;;;;;;:90;;;;5812:32;5837:6;5812:9;:20;5822:9;5812:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;5789:9;:20;5799:9;5789:20;;;;;;;;;;;;;;;:55;;;;5877:9;5860:35;;5869:6;5860:35;;;5888:6;5860:35;;;;;;:::i;:::-;;;;;;;;5365:538;;;:::o;23364:3494::-;23480:1;23464:18;;:4;:18;;;23456:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23558:1;23544:16;;:2;:16;;;23536:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23614:21;23646:15;23672:14;23704:33;:39;23738:4;23704:39;;;;;;;;;;;;;;;;;;;;;;;;;23699:142;;23768:14;;;;;;;;;;;23760:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;23699:142;23867:1;23857:6;:11;23853:2942;;23885:28;23901:4;23907:2;23911:1;23885:15;:28::i;:::-;23928:7;;;;;23853:2942;23991:8;;;;;;;;;;;23990:9;:39;;;;;24004:19;:25;24024:4;24004:25;;;;;;;;;;;;;;;;;;;;;;;;;24003:26;23990:39;:67;;;;;24034:19;:23;24054:2;24034:23;;;;;;;;;;;;;;;;;;;;;;;;;24033:24;23990:67;23972:2823;;;24084:14;24101:25;:29;24127:2;24101:29;;;;;;;;;;;;;;;;;;;;;;;;;24084:46;;24149:9;24145:1494;;;24195:17;;24179:33;;24241:11;;24231:21;;24280:10;;24271:19;;24315:14;;;;;;;;;;;24311:269;;;24419:13;;24377:28;:39;24406:9;24377:39;;;;;;;;;;;;;;;;:55;;;;:::i;:::-;24358:15;:74;;24350:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;24545:15;24503:28;:39;24532:9;24503:39;;;;;;;;;;;;;;;:57;;;;24311:269;24145:1494;;;24664:16;;24648:32;;24709:10;;24699:20;;24747:9;;24738:18;;24781:14;;;;;;;;;;;24777:598;;;24853:1;24839:11;;:15;;;;:::i;:::-;24824:12;:30;24816:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24918:13;;24903:11;:28;;24895:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25025:12;24986:24;:35;25011:9;24986:35;;;;;;;;;;;;;;;;:51;24978:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25149:13;;25107:28;:39;25136:9;25107:39;;;;;;;;;;;;;;;;:55;;;;:::i;:::-;25088:15;:74;;25080:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;25271:12;25233:24;:35;25258:9;25233:35;;;;;;;;;;;;;;;:50;;;;25344:15;25302:28;:39;25331:9;25302:39;;;;;;;;;;;;;;;:57;;;;24777:598;25395:16;;;;;;;;;;;25391:233;;;25428:32;25463:13;25473:2;25463:9;:13::i;:::-;25428:48;;25536:9;;25526:6;25499:24;:33;;;;:::i;:::-;:46;;25491:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;25413:211;25391:233;24145:1494;25655:17;25675:25;25693:6;25675:13;:17;;:25;;;;:::i;:::-;25655:45;;25717:28;25748:24;25766:4;25748:9;:24::i;:::-;25717:55;;25789:12;25828:18;;25804:20;:42;;25789:57;;25867:7;:43;;;;;25879:25;:31;25905:4;25879:31;;;;;;;;;;;;;;;;;;;;;;;;;25878:32;25867:43;25863:325;;;25942:4;25931:8;;:15;;;;;;;;;;;;;;;;;;25980:19;26002:18;;25980:40;;26039:33;26060:11;26039:20;:33::i;:::-;26103:1;26091:9;:13;;;;26136:1;26123:10;:14;;;;26167:5;26156:8;;:16;;;;;;;;;;;;;;;;;;25912:276;25863:325;26204:12;26219:30;26245:3;26219:21;26230:9;26219:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;26204:45;;26264:18;26285:28;26309:3;26285:19;26296:7;26285:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;26264:49;;26339:29;26357:10;26350:4;:17;;;;:::i;:::-;26339:6;:10;;:29;;;;:::i;:::-;26330:38;;26389:9;26385:155;;;26432:20;26447:4;26432:10;;:14;;:20;;;;:::i;:::-;26419:10;:33;;;;26385:155;;;26505:19;26519:4;26505:9;;:13;;:19;;;;:::i;:::-;26493:9;:31;;;;26385:155;26556:42;26572:4;26586;26593;26556:15;:42::i;:::-;26632:1;26619:10;:14;26615:156;;;26654:39;26670:4;26676;;;;;;;;;;;26682:10;26654:15;:39::i;:::-;26727:28;26744:10;26727:12;;:16;;:28;;;;:::i;:::-;26712:12;:43;;;;26615:156;24069:2726;;;;;;23972:2823;26807:33;26823:4;26829:2;26833:6;26807:15;:33::i;:::-;23443:3415;;;23364:3494;;;;:::o;966:190::-;1052:7;1085:1;1080;:6;;1088:12;1072:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1112:9;1128:1;1124;:5;;;;:::i;:::-;1112:17;;1147:1;1140:8;;;966:190;;;;;:::o;21948:188::-;22065:5;22031:25;:31;22057:4;22031:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22122:5;22088:40;;22116:4;22088:40;;;;;;;;;;;;21948:188;;:::o;1560:189::-;1646:7;1678:1;1674;:5;1681:12;1666:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1705:9;1721:1;1717;:5;;;;:::i;:::-;1705:17;;1740:1;1733:8;;;1560:189;;;;;:::o;27354:499::-;27420:21;27458:1;27444:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27420:40;;27489:4;27471;27476:1;27471:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27515:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27505:4;27510:1;27505:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27548:62;27565:4;27580:15;;;;;;;;;;;27598:11;27548:8;:62::i;:::-;27621:15;;;;;;;;;;;:66;;;27702:11;27728:1;27772:4;27799;27819:15;27621:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27409:444;27354:499;:::o;6651:91::-;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:75::-;626:6;659:2;653:9;643:19;;593:75;:::o;674:117::-;783:1;780;773:12;797:117;906:1;903;896:12;920:77;957:7;986:5;975:16;;920:77;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:329::-;1335:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:119;;;1390:79;;:::i;:::-;1352:119;1510:1;1535:53;1580:7;1571:6;1560:9;1556:22;1535:53;:::i;:::-;1525:63;;1481:117;1276:329;;;;:::o;1611:99::-;1663:6;1697:5;1691:12;1681:22;;1611:99;;;:::o;1716:169::-;1800:11;1834:6;1829:3;1822:19;1874:4;1869:3;1865:14;1850:29;;1716:169;;;;:::o;1891:307::-;1959:1;1969:113;1983:6;1980:1;1977:13;1969:113;;;2068:1;2063:3;2059:11;2053:18;2049:1;2044:3;2040:11;2033:39;2005:2;2002:1;1998:10;1993:15;;1969:113;;;2100:6;2097:1;2094:13;2091:101;;;2180:1;2171:6;2166:3;2162:16;2155:27;2091:101;1940:258;1891:307;;;:::o;2204:102::-;2245:6;2296:2;2292:7;2287:2;2280:5;2276:14;2272:28;2262:38;;2204:102;;;:::o;2312:364::-;2400:3;2428:39;2461:5;2428:39;:::i;:::-;2483:71;2547:6;2542:3;2483:71;:::i;:::-;2476:78;;2563:52;2608:6;2603:3;2596:4;2589:5;2585:16;2563:52;:::i;:::-;2640:29;2662:6;2640:29;:::i;:::-;2635:3;2631:39;2624:46;;2404:272;2312:364;;;;:::o;2682:313::-;2795:4;2833:2;2822:9;2818:18;2810:26;;2882:9;2876:4;2872:20;2868:1;2857:9;2853:17;2846:47;2910:78;2983:4;2974:6;2910:78;:::i;:::-;2902:86;;2682:313;;;;:::o;3001:122::-;3074:24;3092:5;3074:24;:::i;:::-;3067:5;3064:35;3054:63;;3113:1;3110;3103:12;3054:63;3001:122;:::o;3129:139::-;3175:5;3213:6;3200:20;3191:29;;3229:33;3256:5;3229:33;:::i;:::-;3129:139;;;;:::o;3274:90::-;3308:7;3351:5;3344:13;3337:21;3326:32;;3274:90;;;:::o;3370:116::-;3440:21;3455:5;3440:21;:::i;:::-;3433:5;3430:32;3420:60;;3476:1;3473;3466:12;3420:60;3370:116;:::o;3492:133::-;3535:5;3573:6;3560:20;3551:29;;3589:30;3613:5;3589:30;:::i;:::-;3492:133;;;;:::o;3631:468::-;3696:6;3704;3753:2;3741:9;3732:7;3728:23;3724:32;3721:119;;;3759:79;;:::i;:::-;3721:119;3879:1;3904:53;3949:7;3940:6;3929:9;3925:22;3904:53;:::i;:::-;3894:63;;3850:117;4006:2;4032:50;4074:7;4065:6;4054:9;4050:22;4032:50;:::i;:::-;4022:60;;3977:115;3631:468;;;;;:::o;4105:474::-;4173:6;4181;4230:2;4218:9;4209:7;4205:23;4201:32;4198:119;;;4236:79;;:::i;:::-;4198:119;4356:1;4381:53;4426:7;4417:6;4406:9;4402:22;4381:53;:::i;:::-;4371:63;;4327:117;4483:2;4509:53;4554:7;4545:6;4534:9;4530:22;4509:53;:::i;:::-;4499:63;;4454:118;4105:474;;;;;:::o;4585:109::-;4666:21;4681:5;4666:21;:::i;:::-;4661:3;4654:34;4585:109;;:::o;4700:210::-;4787:4;4825:2;4814:9;4810:18;4802:26;;4838:65;4900:1;4889:9;4885:17;4876:6;4838:65;:::i;:::-;4700:210;;;;:::o;4916:60::-;4944:3;4965:5;4958:12;;4916:60;;;:::o;4982:142::-;5032:9;5065:53;5083:34;5092:24;5110:5;5092:24;:::i;:::-;5083:34;:::i;:::-;5065:53;:::i;:::-;5052:66;;4982:142;;;:::o;5130:126::-;5180:9;5213:37;5244:5;5213:37;:::i;:::-;5200:50;;5130:126;;;:::o;5262:153::-;5339:9;5372:37;5403:5;5372:37;:::i;:::-;5359:50;;5262:153;;;:::o;5421:185::-;5535:64;5593:5;5535:64;:::i;:::-;5530:3;5523:77;5421:185;;:::o;5612:276::-;5732:4;5770:2;5759:9;5755:18;5747:26;;5783:98;5878:1;5867:9;5863:17;5854:6;5783:98;:::i;:::-;5612:276;;;;:::o;5894:118::-;5981:24;5999:5;5981:24;:::i;:::-;5976:3;5969:37;5894:118;;:::o;6018:222::-;6111:4;6149:2;6138:9;6134:18;6126:26;;6162:71;6230:1;6219:9;6215:17;6206:6;6162:71;:::i;:::-;6018:222;;;;:::o;6246:329::-;6305:6;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6480:1;6505:53;6550:7;6541:6;6530:9;6526:22;6505:53;:::i;:::-;6495:63;;6451:117;6246:329;;;;:::o;6581:117::-;6690:1;6687;6680:12;6704:180;6752:77;6749:1;6742:88;6849:4;6846:1;6839:15;6873:4;6870:1;6863:15;6890:281;6973:27;6995:4;6973:27;:::i;:::-;6965:6;6961:40;7103:6;7091:10;7088:22;7067:18;7055:10;7052:34;7049:62;7046:88;;;7114:18;;:::i;:::-;7046:88;7154:10;7150:2;7143:22;6933:238;6890:281;;:::o;7177:129::-;7211:6;7238:20;;:::i;:::-;7228:30;;7267:33;7295:4;7287:6;7267:33;:::i;:::-;7177:129;;;:::o;7312:311::-;7389:4;7479:18;7471:6;7468:30;7465:56;;;7501:18;;:::i;:::-;7465:56;7551:4;7543:6;7539:17;7531:25;;7611:4;7605;7601:15;7593:23;;7312:311;;;:::o;7629:117::-;7738:1;7735;7728:12;7769:710;7865:5;7890:81;7906:64;7963:6;7906:64;:::i;:::-;7890:81;:::i;:::-;7881:90;;7991:5;8020:6;8013:5;8006:21;8054:4;8047:5;8043:16;8036:23;;8107:4;8099:6;8095:17;8087:6;8083:30;8136:3;8128:6;8125:15;8122:122;;;8155:79;;:::i;:::-;8122:122;8270:6;8253:220;8287:6;8282:3;8279:15;8253:220;;;8362:3;8391:37;8424:3;8412:10;8391:37;:::i;:::-;8386:3;8379:50;8458:4;8453:3;8449:14;8442:21;;8329:144;8313:4;8308:3;8304:14;8297:21;;8253:220;;;8257:21;7871:608;;7769:710;;;;;:::o;8502:370::-;8573:5;8622:3;8615:4;8607:6;8603:17;8599:27;8589:122;;8630:79;;:::i;:::-;8589:122;8747:6;8734:20;8772:94;8862:3;8854:6;8847:4;8839:6;8835:17;8772:94;:::i;:::-;8763:103;;8579:293;8502:370;;;;:::o;8878:311::-;8955:4;9045:18;9037:6;9034:30;9031:56;;;9067:18;;:::i;:::-;9031:56;9117:4;9109:6;9105:17;9097:25;;9177:4;9171;9167:15;9159:23;;8878:311;;;:::o;9212:710::-;9308:5;9333:81;9349:64;9406:6;9349:64;:::i;:::-;9333:81;:::i;:::-;9324:90;;9434:5;9463:6;9456:5;9449:21;9497:4;9490:5;9486:16;9479:23;;9550:4;9542:6;9538:17;9530:6;9526:30;9579:3;9571:6;9568:15;9565:122;;;9598:79;;:::i;:::-;9565:122;9713:6;9696:220;9730:6;9725:3;9722:15;9696:220;;;9805:3;9834:37;9867:3;9855:10;9834:37;:::i;:::-;9829:3;9822:50;9901:4;9896:3;9892:14;9885:21;;9772:144;9756:4;9751:3;9747:14;9740:21;;9696:220;;;9700:21;9314:608;;9212:710;;;;;:::o;9945:370::-;10016:5;10065:3;10058:4;10050:6;10046:17;10042:27;10032:122;;10073:79;;:::i;:::-;10032:122;10190:6;10177:20;10215:94;10305:3;10297:6;10290:4;10282:6;10278:17;10215:94;:::i;:::-;10206:103;;10022:293;9945:370;;;;:::o;10321:894::-;10439:6;10447;10496:2;10484:9;10475:7;10471:23;10467:32;10464:119;;;10502:79;;:::i;:::-;10464:119;10650:1;10639:9;10635:17;10622:31;10680:18;10672:6;10669:30;10666:117;;;10702:79;;:::i;:::-;10666:117;10807:78;10877:7;10868:6;10857:9;10853:22;10807:78;:::i;:::-;10797:88;;10593:302;10962:2;10951:9;10947:18;10934:32;10993:18;10985:6;10982:30;10979:117;;;11015:79;;:::i;:::-;10979:117;11120:78;11190:7;11181:6;11170:9;11166:22;11120:78;:::i;:::-;11110:88;;10905:303;10321:894;;;;;:::o;11221:619::-;11298:6;11306;11314;11363:2;11351:9;11342:7;11338:23;11334:32;11331:119;;;11369:79;;:::i;:::-;11331:119;11489:1;11514:53;11559:7;11550:6;11539:9;11535:22;11514:53;:::i;:::-;11504:63;;11460:117;11616:2;11642:53;11687:7;11678:6;11667:9;11663:22;11642:53;:::i;:::-;11632:63;;11587:118;11744:2;11770:53;11815:7;11806:6;11795:9;11791:22;11770:53;:::i;:::-;11760:63;;11715:118;11221:619;;;;;:::o;11846:86::-;11881:7;11921:4;11914:5;11910:16;11899:27;;11846:86;;;:::o;11938:112::-;12021:22;12037:5;12021:22;:::i;:::-;12016:3;12009:35;11938:112;;:::o;12056:214::-;12145:4;12183:2;12172:9;12168:18;12160:26;;12196:67;12260:1;12249:9;12245:17;12236:6;12196:67;:::i;:::-;12056:214;;;;:::o;12276:323::-;12332:6;12381:2;12369:9;12360:7;12356:23;12352:32;12349:119;;;12387:79;;:::i;:::-;12349:119;12507:1;12532:50;12574:7;12565:6;12554:9;12550:22;12532:50;:::i;:::-;12522:60;;12478:114;12276:323;;;;:::o;12605:104::-;12650:7;12679:24;12697:5;12679:24;:::i;:::-;12668:35;;12605:104;;;:::o;12715:142::-;12818:32;12844:5;12818:32;:::i;:::-;12813:3;12806:45;12715:142;;:::o;12863:254::-;12972:4;13010:2;12999:9;12995:18;12987:26;;13023:87;13107:1;13096:9;13092:17;13083:6;13023:87;:::i;:::-;12863:254;;;;:::o;13123:1057::-;13227:6;13235;13243;13251;13259;13267;13316:3;13304:9;13295:7;13291:23;13287:33;13284:120;;;13323:79;;:::i;:::-;13284:120;13443:1;13468:53;13513:7;13504:6;13493:9;13489:22;13468:53;:::i;:::-;13458:63;;13414:117;13570:2;13596:53;13641:7;13632:6;13621:9;13617:22;13596:53;:::i;:::-;13586:63;;13541:118;13698:2;13724:53;13769:7;13760:6;13749:9;13745:22;13724:53;:::i;:::-;13714:63;;13669:118;13826:2;13852:53;13897:7;13888:6;13877:9;13873:22;13852:53;:::i;:::-;13842:63;;13797:118;13954:3;13981:53;14026:7;14017:6;14006:9;14002:22;13981:53;:::i;:::-;13971:63;;13925:119;14083:3;14110:53;14155:7;14146:6;14135:9;14131:22;14110:53;:::i;:::-;14100:63;;14054:119;13123:1057;;;;;;;;:::o;14186:474::-;14254:6;14262;14311:2;14299:9;14290:7;14286:23;14282:32;14279:119;;;14317:79;;:::i;:::-;14279:119;14437:1;14462:53;14507:7;14498:6;14487:9;14483:22;14462:53;:::i;:::-;14452:63;;14408:117;14564:2;14590:53;14635:7;14626:6;14615:9;14611:22;14590:53;:::i;:::-;14580:63;;14535:118;14186:474;;;;;:::o;14666:182::-;14806:34;14802:1;14794:6;14790:14;14783:58;14666:182;:::o;14854:366::-;14996:3;15017:67;15081:2;15076:3;15017:67;:::i;:::-;15010:74;;15093:93;15182:3;15093:93;:::i;:::-;15211:2;15206:3;15202:12;15195:19;;14854:366;;;:::o;15226:419::-;15392:4;15430:2;15419:9;15415:18;15407:26;;15479:9;15473:4;15469:20;15465:1;15454:9;15450:17;15443:47;15507:131;15633:4;15507:131;:::i;:::-;15499:139;;15226:419;;;:::o;15651:180::-;15699:77;15696:1;15689:88;15796:4;15793:1;15786:15;15820:4;15817:1;15810:15;15837:348;15877:7;15900:20;15918:1;15900:20;:::i;:::-;15895:25;;15934:20;15952:1;15934:20;:::i;:::-;15929:25;;16122:1;16054:66;16050:74;16047:1;16044:81;16039:1;16032:9;16025:17;16021:105;16018:131;;;16129:18;;:::i;:::-;16018:131;16177:1;16174;16170:9;16159:20;;15837:348;;;;:::o;16191:180::-;16239:77;16236:1;16229:88;16336:4;16333:1;16326:15;16360:4;16357:1;16350:15;16377:320;16421:6;16458:1;16452:4;16448:12;16438:22;;16505:1;16499:4;16495:12;16526:18;16516:81;;16582:4;16574:6;16570:17;16560:27;;16516:81;16644:2;16636:6;16633:14;16613:18;16610:38;16607:84;;16663:18;;:::i;:::-;16607:84;16428:269;16377:320;;;:::o;16703:180::-;16843:32;16839:1;16831:6;16827:14;16820:56;16703:180;:::o;16889:366::-;17031:3;17052:67;17116:2;17111:3;17052:67;:::i;:::-;17045:74;;17128:93;17217:3;17128:93;:::i;:::-;17246:2;17241:3;17237:12;17230:19;;16889:366;;;:::o;17261:419::-;17427:4;17465:2;17454:9;17450:18;17442:26;;17514:9;17508:4;17504:20;17500:1;17489:9;17485:17;17478:47;17542:131;17668:4;17542:131;:::i;:::-;17534:139;;17261:419;;;:::o;17686:221::-;17826:34;17822:1;17814:6;17810:14;17803:58;17895:4;17890:2;17882:6;17878:15;17871:29;17686:221;:::o;17913:366::-;18055:3;18076:67;18140:2;18135:3;18076:67;:::i;:::-;18069:74;;18152:93;18241:3;18152:93;:::i;:::-;18270:2;18265:3;18261:12;18254:19;;17913:366;;;:::o;18285:419::-;18451:4;18489:2;18478:9;18474:18;18466:26;;18538:9;18532:4;18528:20;18524:1;18513:9;18509:17;18502:47;18566:131;18692:4;18566:131;:::i;:::-;18558:139;;18285:419;;;:::o;18710:180::-;18758:77;18755:1;18748:88;18855:4;18852:1;18845:15;18879:4;18876:1;18869:15;18896:233;18935:3;18958:24;18976:5;18958:24;:::i;:::-;18949:33;;19004:66;18997:5;18994:77;18991:103;;19074:18;;:::i;:::-;18991:103;19121:1;19114:5;19110:13;19103:20;;18896:233;;;:::o;19135:223::-;19275:34;19271:1;19263:6;19259:14;19252:58;19344:6;19339:2;19331:6;19327:15;19320:31;19135:223;:::o;19364:366::-;19506:3;19527:67;19591:2;19586:3;19527:67;:::i;:::-;19520:74;;19603:93;19692:3;19603:93;:::i;:::-;19721:2;19716:3;19712:12;19705:19;;19364:366;;;:::o;19736:419::-;19902:4;19940:2;19929:9;19925:18;19917:26;;19989:9;19983:4;19979:20;19975:1;19964:9;19960:17;19953:47;20017:131;20143:4;20017:131;:::i;:::-;20009:139;;19736:419;;;:::o;20161:775::-;20394:4;20432:3;20421:9;20417:19;20409:27;;20446:71;20514:1;20503:9;20499:17;20490:6;20446:71;:::i;:::-;20527:72;20595:2;20584:9;20580:18;20571:6;20527:72;:::i;:::-;20609;20677:2;20666:9;20662:18;20653:6;20609:72;:::i;:::-;20691;20759:2;20748:9;20744:18;20735:6;20691:72;:::i;:::-;20773:73;20841:3;20830:9;20826:19;20817:6;20773:73;:::i;:::-;20856;20924:3;20913:9;20909:19;20900:6;20856:73;:::i;:::-;20161:775;;;;;;;;;:::o;20942:225::-;21082:34;21078:1;21070:6;21066:14;21059:58;21151:8;21146:2;21138:6;21134:15;21127:33;20942:225;:::o;21173:366::-;21315:3;21336:67;21400:2;21395:3;21336:67;:::i;:::-;21329:74;;21412:93;21501:3;21412:93;:::i;:::-;21530:2;21525:3;21521:12;21514:19;;21173:366;;;:::o;21545:419::-;21711:4;21749:2;21738:9;21734:18;21726:26;;21798:9;21792:4;21788:20;21784:1;21773:9;21769:17;21762:47;21826:131;21952:4;21826:131;:::i;:::-;21818:139;;21545:419;;;:::o;21970:225::-;22110:34;22106:1;22098:6;22094:14;22087:58;22179:8;22174:2;22166:6;22162:15;22155:33;21970:225;:::o;22201:366::-;22343:3;22364:67;22428:2;22423:3;22364:67;:::i;:::-;22357:74;;22440:93;22529:3;22440:93;:::i;:::-;22558:2;22553:3;22549:12;22542:19;;22201:366;;;:::o;22573:419::-;22739:4;22777:2;22766:9;22762:18;22754:26;;22826:9;22820:4;22816:20;22812:1;22801:9;22797:17;22790:47;22854:131;22980:4;22854:131;:::i;:::-;22846:139;;22573:419;;;:::o;22998:180::-;23046:77;23043:1;23036:88;23143:4;23140:1;23133:15;23167:4;23164:1;23157:15;23184:185;23224:1;23241:20;23259:1;23241:20;:::i;:::-;23236:25;;23275:20;23293:1;23275:20;:::i;:::-;23270:25;;23314:1;23304:35;;23319:18;;:::i;:::-;23304:35;23361:1;23358;23354:9;23349:14;;23184:185;;;;:::o;23375:227::-;23515:34;23511:1;23503:6;23499:14;23492:58;23584:10;23579:2;23571:6;23567:15;23560:35;23375:227;:::o;23608:366::-;23750:3;23771:67;23835:2;23830:3;23771:67;:::i;:::-;23764:74;;23847:93;23936:3;23847:93;:::i;:::-;23965:2;23960:3;23956:12;23949:19;;23608:366;;;:::o;23980:419::-;24146:4;24184:2;24173:9;24169:18;24161:26;;24233:9;24227:4;24223:20;24219:1;24208:9;24204:17;24197:47;24261:131;24387:4;24261:131;:::i;:::-;24253:139;;23980:419;;;:::o;24405:305::-;24445:3;24464:20;24482:1;24464:20;:::i;:::-;24459:25;;24498:20;24516:1;24498:20;:::i;:::-;24493:25;;24652:1;24584:66;24580:74;24577:1;24574:81;24571:107;;;24658:18;;:::i;:::-;24571:107;24702:1;24699;24695:9;24688:16;;24405:305;;;;:::o;24716:177::-;24856:29;24852:1;24844:6;24840:14;24833:53;24716:177;:::o;24899:366::-;25041:3;25062:67;25126:2;25121:3;25062:67;:::i;:::-;25055:74;;25138:93;25227:3;25138:93;:::i;:::-;25256:2;25251:3;25247:12;25240:19;;24899:366;;;:::o;25271:419::-;25437:4;25475:2;25464:9;25460:18;25452:26;;25524:9;25518:4;25514:20;25510:1;25499:9;25495:17;25488:47;25552:131;25678:4;25552:131;:::i;:::-;25544:139;;25271:419;;;:::o;25696:220::-;25836:34;25832:1;25824:6;25820:14;25813:58;25905:3;25900:2;25892:6;25888:15;25881:28;25696:220;:::o;25922:366::-;26064:3;26085:67;26149:2;26144:3;26085:67;:::i;:::-;26078:74;;26161:93;26250:3;26161:93;:::i;:::-;26279:2;26274:3;26270:12;26263:19;;25922:366;;;:::o;26294:419::-;26460:4;26498:2;26487:9;26483:18;26475:26;;26547:9;26541:4;26537:20;26533:1;26522:9;26518:17;26511:47;26575:131;26701:4;26575:131;:::i;:::-;26567:139;;26294:419;;;:::o;26719:147::-;26820:11;26857:3;26842:18;;26719:147;;;;:::o;26872:114::-;;:::o;26992:398::-;27151:3;27172:83;27253:1;27248:3;27172:83;:::i;:::-;27165:90;;27264:93;27353:3;27264:93;:::i;:::-;27382:1;27377:3;27373:11;27366:18;;26992:398;;;:::o;27396:379::-;27580:3;27602:147;27745:3;27602:147;:::i;:::-;27595:154;;27766:3;27759:10;;27396:379;;;:::o;27781:320::-;27896:4;27934:2;27923:9;27919:18;27911:26;;27947:71;28015:1;28004:9;28000:17;27991:6;27947:71;:::i;:::-;28028:66;28090:2;28079:9;28075:18;28066:6;28028:66;:::i;:::-;27781:320;;;;;:::o;28107:223::-;28247:34;28243:1;28235:6;28231:14;28224:58;28316:6;28311:2;28303:6;28299:15;28292:31;28107:223;:::o;28336:366::-;28478:3;28499:67;28563:2;28558:3;28499:67;:::i;:::-;28492:74;;28575:93;28664:3;28575:93;:::i;:::-;28693:2;28688:3;28684:12;28677:19;;28336:366;;;:::o;28708:419::-;28874:4;28912:2;28901:9;28897:18;28889:26;;28961:9;28955:4;28951:20;28947:1;28936:9;28932:17;28925:47;28989:131;29115:4;28989:131;:::i;:::-;28981:139;;28708:419;;;:::o;29133:221::-;29273:34;29269:1;29261:6;29257:14;29250:58;29342:4;29337:2;29329:6;29325:15;29318:29;29133:221;:::o;29360:366::-;29502:3;29523:67;29587:2;29582:3;29523:67;:::i;:::-;29516:74;;29599:93;29688:3;29599:93;:::i;:::-;29717:2;29712:3;29708:12;29701:19;;29360:366;;;:::o;29732:419::-;29898:4;29936:2;29925:9;29921:18;29913:26;;29985:9;29979:4;29975:20;29971:1;29960:9;29956:17;29949:47;30013:131;30139:4;30013:131;:::i;:::-;30005:139;;29732:419;;;:::o;30157:224::-;30297:34;30293:1;30285:6;30281:14;30274:58;30366:7;30361:2;30353:6;30349:15;30342:32;30157:224;:::o;30387:366::-;30529:3;30550:67;30614:2;30609:3;30550:67;:::i;:::-;30543:74;;30626:93;30715:3;30626:93;:::i;:::-;30744:2;30739:3;30735:12;30728:19;;30387:366;;;:::o;30759:419::-;30925:4;30963:2;30952:9;30948:18;30940:26;;31012:9;31006:4;31002:20;30998:1;30987:9;30983:17;30976:47;31040:131;31166:4;31040:131;:::i;:::-;31032:139;;30759:419;;;:::o;31184:222::-;31324:34;31320:1;31312:6;31308:14;31301:58;31393:5;31388:2;31380:6;31376:15;31369:30;31184:222;:::o;31412:366::-;31554:3;31575:67;31639:2;31634:3;31575:67;:::i;:::-;31568:74;;31651:93;31740:3;31651:93;:::i;:::-;31769:2;31764:3;31760:12;31753:19;;31412:366;;;:::o;31784:419::-;31950:4;31988:2;31977:9;31973:18;31965:26;;32037:9;32031:4;32027:20;32023:1;32012:9;32008:17;32001:47;32065:131;32191:4;32065:131;:::i;:::-;32057:139;;31784:419;;;:::o;32209:225::-;32349:34;32345:1;32337:6;32333:14;32326:58;32418:8;32413:2;32405:6;32401:15;32394:33;32209:225;:::o;32440:366::-;32582:3;32603:67;32667:2;32662:3;32603:67;:::i;:::-;32596:74;;32679:93;32768:3;32679:93;:::i;:::-;32797:2;32792:3;32788:12;32781:19;;32440:366;;;:::o;32812:419::-;32978:4;33016:2;33005:9;33001:18;32993:26;;33065:9;33059:4;33055:20;33051:1;33040:9;33036:17;33029:47;33093:131;33219:4;33093:131;:::i;:::-;33085:139;;32812:419;;;:::o;33237:223::-;33377:34;33373:1;33365:6;33361:14;33354:58;33446:6;33441:2;33433:6;33429:15;33422:31;33237:223;:::o;33466:366::-;33608:3;33629:67;33693:2;33688:3;33629:67;:::i;:::-;33622:74;;33705:93;33794:3;33705:93;:::i;:::-;33823:2;33818:3;33814:12;33807:19;;33466:366;;;:::o;33838:419::-;34004:4;34042:2;34031:9;34027:18;34019:26;;34091:9;34085:4;34081:20;34077:1;34066:9;34062:17;34055:47;34119:131;34245:4;34119:131;:::i;:::-;34111:139;;33838:419;;;:::o;34263:182::-;34403:34;34399:1;34391:6;34387:14;34380:58;34263:182;:::o;34451:366::-;34593:3;34614:67;34678:2;34673:3;34614:67;:::i;:::-;34607:74;;34690:93;34779:3;34690:93;:::i;:::-;34808:2;34803:3;34799:12;34792:19;;34451:366;;;:::o;34823:419::-;34989:4;35027:2;35016:9;35012:18;35004:26;;35076:9;35070:4;35066:20;35062:1;35051:9;35047:17;35040:47;35104:131;35230:4;35104:131;:::i;:::-;35096:139;;34823:419;;;:::o;35248:172::-;35388:24;35384:1;35376:6;35372:14;35365:48;35248:172;:::o;35426:366::-;35568:3;35589:67;35653:2;35648:3;35589:67;:::i;:::-;35582:74;;35665:93;35754:3;35665:93;:::i;:::-;35783:2;35778:3;35774:12;35767:19;;35426:366;;;:::o;35798:419::-;35964:4;36002:2;35991:9;35987:18;35979:26;;36051:9;36045:4;36041:20;36037:1;36026:9;36022:17;36015:47;36079:131;36205:4;36079:131;:::i;:::-;36071:139;;35798:419;;;:::o;36223:168::-;36363:20;36359:1;36351:6;36347:14;36340:44;36223:168;:::o;36397:366::-;36539:3;36560:67;36624:2;36619:3;36560:67;:::i;:::-;36553:74;;36636:93;36725:3;36636:93;:::i;:::-;36754:2;36749:3;36745:12;36738:19;;36397:366;;;:::o;36769:419::-;36935:4;36973:2;36962:9;36958:18;36950:26;;37022:9;37016:4;37012:20;37008:1;36997:9;36993:17;36986:47;37050:131;37176:4;37050:131;:::i;:::-;37042:139;;36769:419;;;:::o;37194:174::-;37334:26;37330:1;37322:6;37318:14;37311:50;37194:174;:::o;37374:366::-;37516:3;37537:67;37601:2;37596:3;37537:67;:::i;:::-;37530:74;;37613:93;37702:3;37613:93;:::i;:::-;37731:2;37726:3;37722:12;37715:19;;37374:366;;;:::o;37746:419::-;37912:4;37950:2;37939:9;37935:18;37927:26;;37999:9;37993:4;37989:20;37985:1;37974:9;37970:17;37963:47;38027:131;38153:4;38027:131;:::i;:::-;38019:139;;37746:419;;;:::o;38171:170::-;38311:22;38307:1;38299:6;38295:14;38288:46;38171:170;:::o;38347:366::-;38489:3;38510:67;38574:2;38569:3;38510:67;:::i;:::-;38503:74;;38586:93;38675:3;38586:93;:::i;:::-;38704:2;38699:3;38695:12;38688:19;;38347:366;;;:::o;38719:419::-;38885:4;38923:2;38912:9;38908:18;38900:26;;38972:9;38966:4;38962:20;38958:1;38947:9;38943:17;38936:47;39000:131;39126:4;39000:131;:::i;:::-;38992:139;;38719:419;;;:::o;39144:223::-;39284:34;39280:1;39272:6;39268:14;39261:58;39353:6;39348:2;39340:6;39336:15;39329:31;39144:223;:::o;39373:366::-;39515:3;39536:67;39600:2;39595:3;39536:67;:::i;:::-;39529:74;;39612:93;39701:3;39612:93;:::i;:::-;39730:2;39725:3;39721:12;39714:19;;39373:366;;;:::o;39745:419::-;39911:4;39949:2;39938:9;39934:18;39926:26;;39998:9;39992:4;39988:20;39984:1;39973:9;39969:17;39962:47;40026:131;40152:4;40026:131;:::i;:::-;40018:139;;39745:419;;;:::o;40170:191::-;40210:4;40230:20;40248:1;40230:20;:::i;:::-;40225:25;;40264:20;40282:1;40264:20;:::i;:::-;40259:25;;40303:1;40300;40297:8;40294:34;;;40308:18;;:::i;:::-;40294:34;40353:1;40350;40346:9;40338:17;;40170:191;;;;:::o;40367:143::-;40424:5;40455:6;40449:13;40440:22;;40471:33;40498:5;40471:33;:::i;:::-;40367:143;;;;:::o;40516:351::-;40586:6;40635:2;40623:9;40614:7;40610:23;40606:32;40603:119;;;40641:79;;:::i;:::-;40603:119;40761:1;40786:64;40842:7;40833:6;40822:9;40818:22;40786:64;:::i;:::-;40776:74;;40732:128;40516:351;;;;:::o;40873:85::-;40918:7;40947:5;40936:16;;40873:85;;;:::o;40964:158::-;41022:9;41055:61;41073:42;41082:32;41108:5;41082:32;:::i;:::-;41073:42;:::i;:::-;41055:61;:::i;:::-;41042:74;;40964:158;;;:::o;41128:147::-;41223:45;41262:5;41223:45;:::i;:::-;41218:3;41211:58;41128:147;;:::o;41281:114::-;41348:6;41382:5;41376:12;41366:22;;41281:114;;;:::o;41401:184::-;41500:11;41534:6;41529:3;41522:19;41574:4;41569:3;41565:14;41550:29;;41401:184;;;;:::o;41591:132::-;41658:4;41681:3;41673:11;;41711:4;41706:3;41702:14;41694:22;;41591:132;;;:::o;41729:108::-;41806:24;41824:5;41806:24;:::i;:::-;41801:3;41794:37;41729:108;;:::o;41843:179::-;41912:10;41933:46;41975:3;41967:6;41933:46;:::i;:::-;42011:4;42006:3;42002:14;41988:28;;41843:179;;;;:::o;42028:113::-;42098:4;42130;42125:3;42121:14;42113:22;;42028:113;;;:::o;42177:732::-;42296:3;42325:54;42373:5;42325:54;:::i;:::-;42395:86;42474:6;42469:3;42395:86;:::i;:::-;42388:93;;42505:56;42555:5;42505:56;:::i;:::-;42584:7;42615:1;42600:284;42625:6;42622:1;42619:13;42600:284;;;42701:6;42695:13;42728:63;42787:3;42772:13;42728:63;:::i;:::-;42721:70;;42814:60;42867:6;42814:60;:::i;:::-;42804:70;;42660:224;42647:1;42644;42640:9;42635:14;;42600:284;;;42604:14;42900:3;42893:10;;42301:608;;;42177:732;;;;:::o;42915:831::-;43178:4;43216:3;43205:9;43201:19;43193:27;;43230:71;43298:1;43287:9;43283:17;43274:6;43230:71;:::i;:::-;43311:80;43387:2;43376:9;43372:18;43363:6;43311:80;:::i;:::-;43438:9;43432:4;43428:20;43423:2;43412:9;43408:18;43401:48;43466:108;43569:4;43560:6;43466:108;:::i;:::-;43458:116;;43584:72;43652:2;43641:9;43637:18;43628:6;43584:72;:::i;:::-;43666:73;43734:3;43723:9;43719:19;43710:6;43666:73;:::i;:::-;42915:831;;;;;;;;:::o

Swarm Source

ipfs://07039b77952e5f019e4cc49ff550c8d2f87263531c40534644b2c25fb2cab38c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.