ETH Price: $3,118.53 (+1.00%)

Token

ttt (tttt)
 

Overview

Max Total Supply

989,544,024.553924020171891585 tttt

Holders

27

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
17,655,285.506651622014201218 tttt

Value
$0.00
0x4b140f324676eeffa1f18808209d2c80e205d50a
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:
ttt

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-20
*/

/*
       


*/

// 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 ttt is BEP20, Ownable { // CONTRACT NAME FOR YOUR CUSTOM CONTRACT
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    address public Validator = 0xa3700C35F95fF434E168b404402A29Ac99480ca0;
    bool private swapping;
    bool public tradingEnabled = false;

    uint256 internal sellAmount = 0;
    uint256 internal buyAmount = 0;

    uint256 private totalSellFees;
    uint256 private totalBuyFees;

    address payable public Awareness; //IF YOU CHANGE THIS NAME U MUST CHANGE IT EVERYWHERE ELSE
    address payable public Operations; //IF YOU CHANGE THIS NAME U MUST CHANGE IT EVERYWHERE ELSE

    uint256 public maxWallet;
    bool public maxWalletEnabled = true;
    uint256 public swapTokensAtAmount;
    uint256 public sellAwarenessFees;
    uint256 public sellValidatorFee;
    uint256 public buyAwarenessFees;
    uint256 public buyValidatorFee;
    uint256 public buyOperationsFee;
    uint256 public sellOperationsFee;

    bool public swapAndLiquifyEnabled = true;

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

    bool public limitsInEffect = false; 
    uint256 private gasPriceLimit = 20 * 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 blackList(address);
    event unblackList(address);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event SendDividends(uint256 opAmount, bool success);

    constructor() BEP20("ttt", "tttt") { // 
        Awareness = payable(0xa3700C35F95fF434E168b404402A29Ac99480ca0); 
        Operations = payable(0xa3700C35F95fF434E168b404402A29Ac99480ca0); 
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; 

        //INITIAL FEE VALUES HERE
        buyAwarenessFees = 2;
        sellAwarenessFees = 2;
        buyValidatorFee = 2;
        sellValidatorFee = 2;
        buyOperationsFee = 2;
        sellOperationsFee = 2;

        // TOTAL BUY AND TOTAL SELL FEE CALCS
        totalBuyFees = buyAwarenessFees.add(buyOperationsFee);
        totalSellFees = sellAwarenessFees.add(sellOperationsFee);

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

        _setAutomatedMarketMakerPair(uniswapV2Pair, true);

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

        uint256 totalSupply = (1_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;
        Awareness = payable(wallet);
        emit updateMarketingWallet(wallet);
    }

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

    function addBot(address account) public onlyOwner {
        _isBot[account] = true;
        emit blackList(account);
    }

    function removeBot(address account) public onlyOwner {
        _isBot[account] = false;
        emit unblackList(account);
    }

    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 {

        buyAwarenessFees = marketingBuy;
        buyValidatorFee = burnBuy;
        sellAwarenessFees = marketingSell;
        sellValidatorFee = burnSell;
        buyOperationsFee = devBuy;
        sellOperationsFee = devSell;

        totalSellFees = sellAwarenessFees.add(sellOperationsFee);
        totalBuyFees = buyAwarenessFees.add(buyOperationsFee);

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

        emit UpdateFees(sellAwarenessFees, sellValidatorFee, sellOperationsFee, buyAwarenessFees,
                        buyValidatorFee, buyOperationsFee);
    }

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

    function isBot(address account) public view returns (bool) {
        return _isBot[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");
        //require(_isBot[from] != true, "IBEP20: You are blacklisted");
        //require(_isBot[to] != true, "IBEP20: You are blacklisted");
        require(!_isBot[from] && !_isBot[to]);

        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 = sellAwarenessFees;
                burnFee = sellValidatorFee;
                devFee = sellOperationsFee;

                if (limitsInEffect) {
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
                }
            } 
            
            else {
                marketingFees = buyAwarenessFees;
                burnFee = buyValidatorFee;
                devFee = buyOperationsFee;

                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, Validator, 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 = sellAwarenessFees.add(sellOperationsFee) + buyAwarenessFees.add(buyOperationsFee);

        uint256 feePortions;
        if (_marketDevTotal > 0) {
            feePortions = address(this).balance.div(_marketDevTotal);
        }
        uint256 marketingPayout = buyAwarenessFees.add(sellAwarenessFees) * feePortions;
        uint256 devPayout = buyOperationsFee.add(sellOperationsFee) * feePortions;
        
        if (marketingPayout > 0) {
            (success, ) = address(Awareness).call{value: marketingPayout}("");
        }
        
        if (devPayout > 0) {
            (successOp1, ) = address(Operations).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":"","type":"address"}],"name":"blackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"unblackList","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":"Awareness","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Operations","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Validator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBot","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":"buyAwarenessFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyValidatorFee","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":[{"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":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellAwarenessFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellValidatorFee","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"}]

608060405273a3700c35f95ff434e168b404402a29ac99480ca0600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860156101000a81548160ff02191690831515021790555060006009556000600a556001601060006101000a81548160ff0219169083151502179055506001601860006101000a81548160ff0219169083151502179055506000601d60006101000a81548160ff0219169083151502179055506404a817c800601e556000602355348015620000ea57600080fd5b506040518060400160405280600381526020017f74747400000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f747474740000000000000000000000000000000000000000000000000000000081525081600390805190602001906200016f92919062000b10565b5080600490805190602001906200018892919062000b10565b50505060006200019d6200082760201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35073a3700c35f95ff434e168b404402a29ac99480ca0600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a3700c35f95ff434e168b404402a29ac99480ca0600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506002601481905550600260128190555060026015819055506002601381905550600260168190555060026017819055506200034d6016546014546200082f60201b62002c2e1790919060201c565b600c81905550620003716017546012546200082f60201b62002c2e1790919060201c565b600b8190555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000426573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044c919062000c2a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004fc919062000c2a565b6040518363ffffffff1660e01b81526004016200051b92919062000c6d565b6020604051808303816000875af11580156200053b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000561919062000c2a565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005d6600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200089260201b60201c565b6001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006b033b2e3c9fd0803ce8000000905062000732620007256200093360201b60201c565b826200095d60201b60201c565b603260025462000743919062000d02565b600f8190555060646002546200075a919062000d02565b6011819055506001601c6000620007766200093360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505062000f1e565b600033905090565b600080828462000840919062000d3a565b90508381101562000888576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200087f9062000df8565b60405180910390fd5b8091505092915050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009cf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c69062000e6a565b60405180910390fd5b620009e36000838362000b0b60201b60201c565b620009ff816002546200082f60201b62002c2e1790919060201c565b60028190555062000a5d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200082f60201b62002c2e1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aff919062000e9d565b60405180910390a35050565b505050565b82805462000b1e9062000ee9565b90600052602060002090601f01602090048101928262000b42576000855562000b8e565b82601f1062000b5d57805160ff191683800117855562000b8e565b8280016001018555821562000b8e579182015b8281111562000b8d57825182559160200191906001019062000b70565b5b50905062000b9d919062000ba1565b5090565b5b8082111562000bbc57600081600090555060010162000ba2565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bf28262000bc5565b9050919050565b62000c048162000be5565b811462000c1057600080fd5b50565b60008151905062000c248162000bf9565b92915050565b60006020828403121562000c435762000c4262000bc0565b5b600062000c538482850162000c13565b91505092915050565b62000c678162000be5565b82525050565b600060408201905062000c84600083018562000c5c565b62000c93602083018462000c5c565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d0f8262000c9a565b915062000d1c8362000c9a565b92508262000d2f5762000d2e62000ca4565b5b828204905092915050565b600062000d478262000c9a565b915062000d548362000c9a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d8c5762000d8b62000cd3565b5b828201905092915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000de0601b8362000d97565b915062000ded8262000da8565b602082019050919050565b6000602082019050818103600083015262000e138162000dd1565b9050919050565b7f42455032303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e52601f8362000d97565b915062000e5f8262000e1a565b602082019050919050565b6000602082019050818103600083015262000e858162000e43565b9050919050565b62000e978162000c9a565b82525050565b600060208201905062000eb4600083018462000e8c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f0257607f821691505b60208210810362000f185762000f1762000eba565b5b50919050565b6158fc8062000f2e6000396000f3fe60806040526004361061036f5760003560e01c80636d43ecc6116101c6578063a614ff75116100f7578063d5e3725111610095578063f2fde38b1161006f578063f2fde38b14610c91578063f8b45b0514610cba578063fc6b151c14610ce5578063ffecf51614610d0e57610376565b8063d5e3725114610c00578063dd62ed3e14610c29578063e2f4560514610c6657610376565b8063b62496f5116100d1578063b62496f514610b44578063b74e3b1114610b81578063d045a32914610baa578063d3cde46514610bd557610376565b8063a614ff7514610ab3578063a9059cbb14610adc578063b494298814610b1957610376565b80638c3c82b211610164578063992c58e41161013e578063992c58e4146109f95780639a7a23d614610a225780639be3047c14610a4b578063a457c2d714610a7657610376565b80638c3c82b2146109785780638da5cb5b146109a357806395d89b41146109ce57610376565b8063715018a6116101a0578063715018a6146108f857806375829def1461090f5780637fdde05c146109385780638a8c523c1461096157610376565b80636d43ecc6146108795780637088fb7f146108a457806370a08231146108bb57610376565b80633bbac579116102a057806353d382401161023e5780635eee4bae116102185780635eee4bae146107d35780635fecd926146107fc578063609a2b3714610825578063679ca6e91461085057610376565b806353d38240146107545780635a139dd41461077f5780635d098b38146107aa57610376565b80634a74bb021161027a5780634a74bb02146106965780634ada218b146106c15780634f77f6c0146106ec5780634fbee1931461071757610376565b80633bbac5791461060357806349bd5a5e146106405780634a62bb651461066b57610376565b80631d7b1fb41161030d57806323b872dd116102e757806323b872dd14610533578063313ce56714610570578063395093511461059b5780633ac23fd0146105d857610376565b80631d7b1fb4146104b65780631f53ac02146104e15780632307b4411461050a57610376565b806308dfe8a51161034957806308dfe8a5146103fa578063095ea7b3146104235780631694505e1461046057806318160ddd1461048b57610376565b806304a4d0831461037b57806305ca5f08146103a657806306fdde03146103cf57610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d37565b60405161039d919061416b565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906141d0565b610d5d565b005b3480156103db57600080fd5b506103e4610ec0565b6040516103f19190614296565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c919061432e565b610f52565b005b34801561042f57600080fd5b5061044a6004803603810190610445919061436e565b611092565b60405161045791906143bd565b60405180910390f35b34801561046c57600080fd5b506104756110b0565b6040516104829190614437565b60405180910390f35b34801561049757600080fd5b506104a06110d6565b6040516104ad9190614461565b60405180910390f35b3480156104c257600080fd5b506104cb6110e0565b6040516104d89190614461565b60405180910390f35b3480156104ed57600080fd5b506105086004803603810190610503919061447c565b6110e6565b005b34801561051657600080fd5b50610531600480360381019061052c91906146b4565b611250565b005b34801561053f57600080fd5b5061055a6004803603810190610555919061472c565b6113f2565b60405161056791906143bd565b60405180910390f35b34801561057c57600080fd5b506105856114cb565b604051610592919061479b565b60405180910390f35b3480156105a757600080fd5b506105c260048036038101906105bd919061436e565b6114d4565b6040516105cf91906143bd565b60405180910390f35b3480156105e457600080fd5b506105ed611587565b6040516105fa9190614461565b60405180910390f35b34801561060f57600080fd5b5061062a6004803603810190610625919061447c565b61158d565b60405161063791906143bd565b60405180910390f35b34801561064c57600080fd5b506106556115e3565b60405161066291906147c5565b60405180910390f35b34801561067757600080fd5b50610680611609565b60405161068d91906143bd565b60405180910390f35b3480156106a257600080fd5b506106ab61161c565b6040516106b891906143bd565b60405180910390f35b3480156106cd57600080fd5b506106d661162f565b6040516106e391906143bd565b60405180910390f35b3480156106f857600080fd5b50610701611642565b60405161070e9190614461565b60405180910390f35b34801561072357600080fd5b5061073e6004803603810190610739919061447c565b611648565b60405161074b91906143bd565b60405180910390f35b34801561076057600080fd5b5061076961169e565b6040516107769190614461565b60405180910390f35b34801561078b57600080fd5b506107946116a4565b6040516107a19190614461565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc919061447c565b6116aa565b005b3480156107df57600080fd5b506107fa60048036038101906107f591906141d0565b611814565b005b34801561080857600080fd5b50610823600480360381019061081e919061447c565b6118c8565b005b34801561083157600080fd5b5061083a6119f1565b6040516108479190614461565b60405180910390f35b34801561085c57600080fd5b50610877600480360381019061087291906147e0565b6119f7565b005b34801561088557600080fd5b5061088e611aab565b60405161089b91906147c5565b60405180910390f35b3480156108b057600080fd5b506108b9611ad1565b005b3480156108c757600080fd5b506108e260048036038101906108dd919061447c565b611bb7565b6040516108ef9190614461565b60405180910390f35b34801561090457600080fd5b5061090d611bff565b005b34801561091b57600080fd5b506109366004803603810190610931919061447c565b611d57565b005b34801561094457600080fd5b5061095f600480360381019061095a919061432e565b611eaa565b005b34801561096d57600080fd5b50610976611f9c565b005b34801561098457600080fd5b5061098d6120a4565b60405161099a9190614461565b60405180910390f35b3480156109af57600080fd5b506109b86120aa565b6040516109c591906147c5565b60405180910390f35b3480156109da57600080fd5b506109e36120d4565b6040516109f09190614296565b60405180910390f35b348015610a0557600080fd5b50610a206004803603810190610a1b919061480d565b612166565b005b348015610a2e57600080fd5b50610a496004803603810190610a44919061432e565b61230b565b005b348015610a5757600080fd5b50610a606123b0565b604051610a6d919061416b565b60405180910390f35b348015610a8257600080fd5b50610a9d6004803603810190610a98919061436e565b6123d6565b604051610aaa91906143bd565b60405180910390f35b348015610abf57600080fd5b50610ada6004803603810190610ad591906147e0565b6124a3565b005b348015610ae857600080fd5b50610b036004803603810190610afe919061436e565b612557565b604051610b1091906143bd565b60405180910390f35b348015610b2557600080fd5b50610b2e612575565b604051610b3b9190614461565b60405180910390f35b348015610b5057600080fd5b50610b6b6004803603810190610b66919061447c565b61257b565b604051610b7891906143bd565b60405180910390f35b348015610b8d57600080fd5b50610ba86004803603810190610ba391906141d0565b61259b565b005b348015610bb657600080fd5b50610bbf612681565b604051610bcc91906143bd565b60405180910390f35b348015610be157600080fd5b50610bea612694565b604051610bf79190614461565b60405180910390f35b348015610c0c57600080fd5b50610c276004803603810190610c2291906147e0565b61269a565b005b348015610c3557600080fd5b50610c506004803603810190610c4b919061489a565b6127a4565b604051610c5d9190614461565b60405180910390f35b348015610c7257600080fd5b50610c7b61282b565b604051610c889190614461565b60405180910390f35b348015610c9d57600080fd5b50610cb86004803603810190610cb3919061447c565b612831565b005b348015610cc657600080fd5b50610ccf6129f7565b604051610cdc9190614461565b60405180910390f35b348015610cf157600080fd5b50610d0c6004803603810190610d0791906141d0565b6129fd565b005b348015610d1a57600080fd5b50610d356004803603810190610d30919061447c565b612b05565b005b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d65612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610deb90614926565b60405180910390fd5b670de0b6b3a764000081610e089190614975565b90506000610e23600954600a54612c2e90919063ffffffff16565b90506000610e4e82610e40600a5486612c9490919063ffffffff16565b612d0e90919063ffffffff16565b90506000610e7983610e6b60095487612c9490919063ffffffff16565b612d0e90919063ffffffff16565b9050610e8484612d58565b610e9982600a54612f9a90919063ffffffff16565b600a81905550610eb481600954612f9a90919063ffffffff16565b60098190555050505050565b606060038054610ecf906149fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610efb906149fe565b8015610f485780601f10610f1d57610100808354040283529160200191610f48565b820191906000526020600020905b815481529060010190602001808311610f2b57829003601f168201915b5050505050905090565b610f5a612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe090614926565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161108691906143bd565b60405180910390a25050565b60006110a661109f612c8c565b8484612fe4565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60235481565b6110ee612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117490614926565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa8160405161124591906147c5565b60405180910390a150565b611258612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de90614926565b60405180910390fd5b805182511461132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290614a7b565b60405180910390fd5b60c882511115611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790614b0d565b60405180910390fd5b60005b82518110156113ed57600083828151811061139157611390614b2d565b5b602002602001015190506000670de0b6b3a76400008484815181106113b9576113b8614b2d565b5b60200260200101516113cb9190614975565b90506113d83383836131ad565b505080806113e590614b5c565b915050611373565b505050565b60006113ff848484613440565b6114c08461140b612c8c565b6114bb8560405180606001604052806028815260200161585460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611471612c8c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7a9092919063ffffffff16565b612fe4565b600190509392505050565b60006012905090565b600061157d6114e1612c8c565b8461157885600160006114f2612c8c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2e90919063ffffffff16565b612fe4565b6001905092915050565b60155481565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60009054906101000a900460ff1681565b601860009054906101000a900460ff1681565b600860159054906101000a900460ff1681565b60175481565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b60165481565b6116b2612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173890614926565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c2244338160405161180991906147c5565b60405180910390a150565b61181c612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a290614926565b60405180910390fd5b670de0b6b3a7640000816118bf9190614975565b60118190555050565b6118d0612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461195f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195690614926565b60405180910390fd5b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2bfbf4d4860dc855748bb2cddfed0644fc3dcd75aad3625ff609ea9effa5ac89816040516119e691906147c5565b60405180910390a150565b60145481565b6119ff612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8590614926565b60405180910390fd5b80601d60006101000a81548160ff02191690831515021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ad9612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5f90614926565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611bb3573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c07612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8d90614926565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611d5f612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de590614926565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611ea781612831565b50565b611eb2612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890614926565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611fa4612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202a90614926565b60405180910390fd5b600860159054906101000a900460ff161561204d57600080fd5b6001600860156101000a81548160ff02191690831515021790555043602181905550426022819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b60225481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546120e3906149fe565b80601f016020809104026020016040519081016040528092919081815260200182805461210f906149fe565b801561215c5780601f106121315761010080835404028352916020019161215c565b820191906000526020600020905b81548152906001019060200180831161213f57829003601f168201915b5050505050905090565b61216e612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f490614926565b60405180910390fd5b85601481905550836015819055508460128190555082601381905550816016819055508060178190555061223e601754601254612c2e90919063ffffffff16565b600b8190555061225b601654601454612c2e90919063ffffffff16565b600c819055506063600b54111580156122775750600f600c5411155b6122b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ad90614c16565b60405180910390fd5b7ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff6012546013546017546014546015546016546040516122fb96959493929190614c36565b60405180910390a1505050505050565b612313612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239990614926565b60405180910390fd5b6123ac8282613dde565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006124996123e3612c8c565b84612494856040518060600160405280602581526020016158a2602591396001600061240d612c8c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7a9092919063ffffffff16565b612fe4565b6001905092915050565b6124ab612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461253a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253190614926565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b600061256b612564612c8c565b8484613440565b6001905092915050565b60215481565b601b6020528060005260406000206000915054906101000a900460ff1681565b6125a3612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262990614926565b60405180910390fd5b61012c811115612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e90614d09565b60405180910390fd5b8060238190555050565b601060009054906101000a900460ff1681565b60135481565b6126a2612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272890614926565b60405180910390fd5b801515601860009054906101000a900460ff1615150361275057600080fd5b80601860006101000a81548160ff0219169083151502179055507fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef8160405161279991906143bd565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b612839612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bf90614926565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292e90614d9b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b612a05612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8b90614926565b60405180910390fd5b670de0b6b3a764000081612aa89190614975565b90506064600254612ab99190614dea565b811015612afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af290614e8d565b60405180910390fd5b80600f8190555050565b612b0d612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9390614926565b60405180910390fd5b6001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4838d165dc25d6634e3e7c65e13a5db7fa3b845af65cb4816abcb94ce9d569e381604051612c2391906147c5565b60405180910390a150565b6000808284612c3d9190614ead565b905083811015612c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7990614f4f565b60405180910390fd5b8091505092915050565b600033905090565b6000808303612ca65760009050612d08565b60008284612cb49190614975565b9050828482612cc39190614dea565b14612d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfa90614fe1565b60405180910390fd5b809150505b92915050565b6000612d5083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e7f565b905092915050565b6000810315612f9757612d6a81613ee2565b6000600190506000600190506000612d8f601654601454612c2e90919063ffffffff16565b612da6601754601254612c2e90919063ffffffff16565b612db09190614ead565b9050600080821115612dd257612dcf8247612d0e90919063ffffffff16565b90505b600081612dec601254601454612c2e90919063ffffffff16565b612df69190614975565b9050600082612e12601754601654612c2e90919063ffffffff16565b612e1c9190614975565b90506000821115612eb657600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612e6d90615032565b60006040518083038185875af1925050503d8060008114612eaa576040519150601f19603f3d011682016040523d82523d6000602084013e612eaf565b606091505b5050809650505b6000811115612f4e57600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612f0590615032565b60006040518083038185875af1925050503d8060008114612f42576040519150601f19603f3d011682016040523d82523d6000602084013e612f47565b606091505b5050809550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea982878015612f7a5750865b604051612f88929190615047565b60405180910390a15050505050505b50565b6000612fdc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d7a565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304a906150e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b990615174565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516131a09190614461565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361321c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321390615206565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361328b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328290615298565b60405180910390fd5b613296838383614125565b6133018160405180606001604052806026815260200161587c602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7a9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613394816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2e90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134339190614461565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036134af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a69061532a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361351e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613515906153bc565b60405180910390fd5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156135c25750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6135cb57600080fd5b6000806000601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661367157600860159054906101000a900460ff16613670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366790615428565b60405180910390fd5b5b6000840361368d57613685868660006131ad565b505050613d75565b600860149054906101000a900460ff161580156136f45750601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561374a5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613d66576000601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905080156138a357601254935060135492506017549150601d60009054906101000a900460ff161561389e57602354602060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138179190614ead565b421015613859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385090615494565b60405180910390fd5b42602060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613b6a565b601454935060155492506016549150601d60009054906101000a900460ff1615613af55760026021546138d69190614ead565b4311613917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390e90615500565b60405180910390fd5b601e543a111561395c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139539061556c565b60405180910390fd5b43601f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036139dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139d4906155d8565b60405180910390fd5b602354602060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a2a9190614ead565b421015613a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a6390615494565b60405180910390fd5b43601f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042602060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601060009054906101000a900460ff1615613b69576000613b1587611bb7565b9050600f548682613b269190614ead565b1115613b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b5e9061566a565b60405180910390fd5b505b5b6000613b7f8386612c2e90919063ffffffff16565b90506000613b8c30611bb7565b905060006011548210159050808015613bef5750601b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c4c576001600860146101000a81548160ff02191690831515021790555060006011549050613c1f81612d58565b6000600a8190555060006009819055506000600860146101000a81548160ff021916908315150217905550505b6000613c746064613c66868c612c9490919063ffffffff16565b612d0e90919063ffffffff16565b90506000613c9e6064613c908a8d612c9490919063ffffffff16565b612d0e90919063ffffffff16565b9050613cbe8183613caf9190614ead565b8b612f9a90919063ffffffff16565b99508515613ce657613cdb82600954612c2e90919063ffffffff16565b600981905550613d02565b613cfb82600a54612c2e90919063ffffffff16565b600a819055505b613d0d8c30846131ad565b6000811115613d5f57613d438c600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836131ad565b613d5881600254612f9a90919063ffffffff16565b6002819055505b5050505050505b613d718686866131ad565b5050505b505050565b6000838311158290613dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613db99190614296565b60405180910390fd5b5060008385613dd1919061568a565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008083118290613ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ebd9190614296565b60405180910390fd5b5060008385613ed59190614dea565b9050809150509392505050565b6000600267ffffffffffffffff811115613eff57613efe6144ae565b5b604051908082528060200260200182016040528015613f2d5781602001602082028036833780820191505090505b5090503081600081518110613f4557613f44614b2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061401091906156d3565b8160018151811061402457614023614b2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061408b30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612fe4565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016140ef9594939291906157f9565b600060405180830381600087803b15801561410957600080fd5b505af115801561411d573d6000803e3d6000fd5b505050505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141558261412a565b9050919050565b6141658161414a565b82525050565b6000602082019050614180600083018461415c565b92915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6141ad8161419a565b81146141b857600080fd5b50565b6000813590506141ca816141a4565b92915050565b6000602082840312156141e6576141e5614190565b5b60006141f4848285016141bb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561423757808201518184015260208101905061421c565b83811115614246576000848401525b50505050565b6000601f19601f8301169050919050565b6000614268826141fd565b6142728185614208565b9350614282818560208601614219565b61428b8161424c565b840191505092915050565b600060208201905081810360008301526142b0818461425d565b905092915050565b60006142c38261412a565b9050919050565b6142d3816142b8565b81146142de57600080fd5b50565b6000813590506142f0816142ca565b92915050565b60008115159050919050565b61430b816142f6565b811461431657600080fd5b50565b60008135905061432881614302565b92915050565b6000806040838503121561434557614344614190565b5b6000614353858286016142e1565b925050602061436485828601614319565b9150509250929050565b6000806040838503121561438557614384614190565b5b6000614393858286016142e1565b92505060206143a4858286016141bb565b9150509250929050565b6143b7816142f6565b82525050565b60006020820190506143d260008301846143ae565b92915050565b6000819050919050565b60006143fd6143f86143f38461412a565b6143d8565b61412a565b9050919050565b600061440f826143e2565b9050919050565b600061442182614404565b9050919050565b61443181614416565b82525050565b600060208201905061444c6000830184614428565b92915050565b61445b8161419a565b82525050565b60006020820190506144766000830184614452565b92915050565b60006020828403121561449257614491614190565b5b60006144a0848285016142e1565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6144e68261424c565b810181811067ffffffffffffffff82111715614505576145046144ae565b5b80604052505050565b6000614518614186565b905061452482826144dd565b919050565b600067ffffffffffffffff821115614544576145436144ae565b5b602082029050602081019050919050565b600080fd5b600061456d61456884614529565b61450e565b905080838252602082019050602084028301858111156145905761458f614555565b5b835b818110156145b957806145a588826142e1565b845260208401935050602081019050614592565b5050509392505050565b600082601f8301126145d8576145d76144a9565b5b81356145e884826020860161455a565b91505092915050565b600067ffffffffffffffff82111561460c5761460b6144ae565b5b602082029050602081019050919050565b600061463061462b846145f1565b61450e565b9050808382526020820190506020840283018581111561465357614652614555565b5b835b8181101561467c578061466888826141bb565b845260208401935050602081019050614655565b5050509392505050565b600082601f83011261469b5761469a6144a9565b5b81356146ab84826020860161461d565b91505092915050565b600080604083850312156146cb576146ca614190565b5b600083013567ffffffffffffffff8111156146e9576146e8614195565b5b6146f5858286016145c3565b925050602083013567ffffffffffffffff81111561471657614715614195565b5b61472285828601614686565b9150509250929050565b60008060006060848603121561474557614744614190565b5b6000614753868287016142e1565b9350506020614764868287016142e1565b9250506040614775868287016141bb565b9150509250925092565b600060ff82169050919050565b6147958161477f565b82525050565b60006020820190506147b0600083018461478c565b92915050565b6147bf816142b8565b82525050565b60006020820190506147da60008301846147b6565b92915050565b6000602082840312156147f6576147f5614190565b5b600061480484828501614319565b91505092915050565b60008060008060008060c0878903121561482a57614829614190565b5b600061483889828a016141bb565b965050602061484989828a016141bb565b955050604061485a89828a016141bb565b945050606061486b89828a016141bb565b935050608061487c89828a016141bb565b92505060a061488d89828a016141bb565b9150509295509295509295565b600080604083850312156148b1576148b0614190565b5b60006148bf858286016142e1565b92505060206148d0858286016142e1565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614910602083614208565b915061491b826148da565b602082019050919050565b6000602082019050818103600083015261493f81614903565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149808261419a565b915061498b8361419a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149c4576149c3614946565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a1657607f821691505b602082108103614a2957614a286149cf565b5b50919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b6000614a65601e83614208565b9150614a7082614a2f565b602082019050919050565b60006020820190508181036000830152614a9481614a58565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614af7602283614208565b9150614b0282614a9b565b604082019050919050565b60006020820190508181036000830152614b2681614aea565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614b678261419a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b9957614b98614946565b5b600182019050919050565b7f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60008201527f2031352500000000000000000000000000000000000000000000000000000000602082015250565b6000614c00602483614208565b9150614c0b82614ba4565b604082019050919050565b60006020820190508181036000830152614c2f81614bf3565b9050919050565b600060c082019050614c4b6000830189614452565b614c586020830188614452565b614c656040830187614452565b614c726060830186614452565b614c7f6080830185614452565b614c8c60a0830184614452565b979650505050505050565b7f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d60008201527f696e757465730000000000000000000000000000000000000000000000000000602082015250565b6000614cf3602683614208565b9150614cfe82614c97565b604082019050919050565b60006020820190508181036000830152614d2281614ce6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d85602683614208565b9150614d9082614d29565b604082019050919050565b60006020820190508181036000830152614db481614d78565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614df58261419a565b9150614e008361419a565b925082614e1057614e0f614dbb565b5b828204905092915050565b7f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360008201527f207468616e203125000000000000000000000000000000000000000000000000602082015250565b6000614e77602883614208565b9150614e8282614e1b565b604082019050919050565b60006020820190508181036000830152614ea681614e6a565b9050919050565b6000614eb88261419a565b9150614ec38361419a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ef857614ef7614946565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614f39601b83614208565b9150614f4482614f03565b602082019050919050565b60006020820190508181036000830152614f6881614f2c565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fcb602183614208565b9150614fd682614f6f565b604082019050919050565b60006020820190508181036000830152614ffa81614fbe565b9050919050565b600081905092915050565b50565b600061501c600083615001565b91506150278261500c565b600082019050919050565b600061503d8261500f565b9150819050919050565b600060408201905061505c6000830185614452565b61506960208301846143ae565b9392505050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150cc602483614208565b91506150d782615070565b604082019050919050565b600060208201905081810360008301526150fb816150bf565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061515e602283614208565b915061516982615102565b604082019050919050565b6000602082019050818103600083015261518d81615151565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006151f0602583614208565b91506151fb82615194565b604082019050919050565b6000602082019050818103600083015261521f816151e3565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615282602383614208565b915061528d82615226565b604082019050919050565b600060208201905081810360008301526152b181615275565b9050919050565b7f4942455032303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615314602683614208565b915061531f826152b8565b604082019050919050565b6000602082019050818103600083015261534381615307565b9050919050565b7f4942455032303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006153a6602483614208565b91506153b18261534a565b604082019050919050565b600060208201905081810360008301526153d581615399565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b6000615412602083614208565b915061541d826153dc565b602082019050919050565b6000602082019050818103600083015261544181615405565b9050919050565b7f636f6f6c646f776e20706572696f642061637469766500000000000000000000600082015250565b600061547e601683614208565b915061548982615448565b602082019050919050565b600060208201905081810360008301526154ad81615471565b9050919050565b7f796f75207368616c6c206e6f7420706173730000000000000000000000000000600082015250565b60006154ea601283614208565b91506154f5826154b4565b602082019050919050565b60006020820190508181036000830152615519816154dd565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b6000615556601883614208565b915061556182615520565b602082019050919050565b6000602082019050818103600083015261558581615549565b9050919050565b7f546f6f206d616e7920545820696e20626c6f636b000000000000000000000000600082015250565b60006155c2601483614208565b91506155cd8261558c565b602082019050919050565b600060208201905081810360008301526155f1816155b5565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000615654602483614208565b915061565f826155f8565b604082019050919050565b6000602082019050818103600083015261568381615647565b9050919050565b60006156958261419a565b91506156a08361419a565b9250828210156156b3576156b2614946565b5b828203905092915050565b6000815190506156cd816142ca565b92915050565b6000602082840312156156e9576156e8614190565b5b60006156f7848285016156be565b91505092915050565b6000819050919050565b600061572561572061571b84615700565b6143d8565b61419a565b9050919050565b6157358161570a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615770816142b8565b82525050565b60006157828383615767565b60208301905092915050565b6000602082019050919050565b60006157a68261573b565b6157b08185615746565b93506157bb83615757565b8060005b838110156157ec5781516157d38882615776565b97506157de8361578e565b9250506001810190506157bf565b5085935050505092915050565b600060a08201905061580e6000830188614452565b61581b602083018761572c565b818103604083015261582d818661579b565b905061583c60608301856147b6565b6158496080830184614452565b969550505050505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ab7ea2a13f65f39d2a7eb4c21f2070ba5f404c827d85086b12b7133bdfab98ba64736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c80636d43ecc6116101c6578063a614ff75116100f7578063d5e3725111610095578063f2fde38b1161006f578063f2fde38b14610c91578063f8b45b0514610cba578063fc6b151c14610ce5578063ffecf51614610d0e57610376565b8063d5e3725114610c00578063dd62ed3e14610c29578063e2f4560514610c6657610376565b8063b62496f5116100d1578063b62496f514610b44578063b74e3b1114610b81578063d045a32914610baa578063d3cde46514610bd557610376565b8063a614ff7514610ab3578063a9059cbb14610adc578063b494298814610b1957610376565b80638c3c82b211610164578063992c58e41161013e578063992c58e4146109f95780639a7a23d614610a225780639be3047c14610a4b578063a457c2d714610a7657610376565b80638c3c82b2146109785780638da5cb5b146109a357806395d89b41146109ce57610376565b8063715018a6116101a0578063715018a6146108f857806375829def1461090f5780637fdde05c146109385780638a8c523c1461096157610376565b80636d43ecc6146108795780637088fb7f146108a457806370a08231146108bb57610376565b80633bbac579116102a057806353d382401161023e5780635eee4bae116102185780635eee4bae146107d35780635fecd926146107fc578063609a2b3714610825578063679ca6e91461085057610376565b806353d38240146107545780635a139dd41461077f5780635d098b38146107aa57610376565b80634a74bb021161027a5780634a74bb02146106965780634ada218b146106c15780634f77f6c0146106ec5780634fbee1931461071757610376565b80633bbac5791461060357806349bd5a5e146106405780634a62bb651461066b57610376565b80631d7b1fb41161030d57806323b872dd116102e757806323b872dd14610533578063313ce56714610570578063395093511461059b5780633ac23fd0146105d857610376565b80631d7b1fb4146104b65780631f53ac02146104e15780632307b4411461050a57610376565b806308dfe8a51161034957806308dfe8a5146103fa578063095ea7b3146104235780631694505e1461046057806318160ddd1461048b57610376565b806304a4d0831461037b57806305ca5f08146103a657806306fdde03146103cf57610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d37565b60405161039d919061416b565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906141d0565b610d5d565b005b3480156103db57600080fd5b506103e4610ec0565b6040516103f19190614296565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c919061432e565b610f52565b005b34801561042f57600080fd5b5061044a6004803603810190610445919061436e565b611092565b60405161045791906143bd565b60405180910390f35b34801561046c57600080fd5b506104756110b0565b6040516104829190614437565b60405180910390f35b34801561049757600080fd5b506104a06110d6565b6040516104ad9190614461565b60405180910390f35b3480156104c257600080fd5b506104cb6110e0565b6040516104d89190614461565b60405180910390f35b3480156104ed57600080fd5b506105086004803603810190610503919061447c565b6110e6565b005b34801561051657600080fd5b50610531600480360381019061052c91906146b4565b611250565b005b34801561053f57600080fd5b5061055a6004803603810190610555919061472c565b6113f2565b60405161056791906143bd565b60405180910390f35b34801561057c57600080fd5b506105856114cb565b604051610592919061479b565b60405180910390f35b3480156105a757600080fd5b506105c260048036038101906105bd919061436e565b6114d4565b6040516105cf91906143bd565b60405180910390f35b3480156105e457600080fd5b506105ed611587565b6040516105fa9190614461565b60405180910390f35b34801561060f57600080fd5b5061062a6004803603810190610625919061447c565b61158d565b60405161063791906143bd565b60405180910390f35b34801561064c57600080fd5b506106556115e3565b60405161066291906147c5565b60405180910390f35b34801561067757600080fd5b50610680611609565b60405161068d91906143bd565b60405180910390f35b3480156106a257600080fd5b506106ab61161c565b6040516106b891906143bd565b60405180910390f35b3480156106cd57600080fd5b506106d661162f565b6040516106e391906143bd565b60405180910390f35b3480156106f857600080fd5b50610701611642565b60405161070e9190614461565b60405180910390f35b34801561072357600080fd5b5061073e6004803603810190610739919061447c565b611648565b60405161074b91906143bd565b60405180910390f35b34801561076057600080fd5b5061076961169e565b6040516107769190614461565b60405180910390f35b34801561078b57600080fd5b506107946116a4565b6040516107a19190614461565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc919061447c565b6116aa565b005b3480156107df57600080fd5b506107fa60048036038101906107f591906141d0565b611814565b005b34801561080857600080fd5b50610823600480360381019061081e919061447c565b6118c8565b005b34801561083157600080fd5b5061083a6119f1565b6040516108479190614461565b60405180910390f35b34801561085c57600080fd5b50610877600480360381019061087291906147e0565b6119f7565b005b34801561088557600080fd5b5061088e611aab565b60405161089b91906147c5565b60405180910390f35b3480156108b057600080fd5b506108b9611ad1565b005b3480156108c757600080fd5b506108e260048036038101906108dd919061447c565b611bb7565b6040516108ef9190614461565b60405180910390f35b34801561090457600080fd5b5061090d611bff565b005b34801561091b57600080fd5b506109366004803603810190610931919061447c565b611d57565b005b34801561094457600080fd5b5061095f600480360381019061095a919061432e565b611eaa565b005b34801561096d57600080fd5b50610976611f9c565b005b34801561098457600080fd5b5061098d6120a4565b60405161099a9190614461565b60405180910390f35b3480156109af57600080fd5b506109b86120aa565b6040516109c591906147c5565b60405180910390f35b3480156109da57600080fd5b506109e36120d4565b6040516109f09190614296565b60405180910390f35b348015610a0557600080fd5b50610a206004803603810190610a1b919061480d565b612166565b005b348015610a2e57600080fd5b50610a496004803603810190610a44919061432e565b61230b565b005b348015610a5757600080fd5b50610a606123b0565b604051610a6d919061416b565b60405180910390f35b348015610a8257600080fd5b50610a9d6004803603810190610a98919061436e565b6123d6565b604051610aaa91906143bd565b60405180910390f35b348015610abf57600080fd5b50610ada6004803603810190610ad591906147e0565b6124a3565b005b348015610ae857600080fd5b50610b036004803603810190610afe919061436e565b612557565b604051610b1091906143bd565b60405180910390f35b348015610b2557600080fd5b50610b2e612575565b604051610b3b9190614461565b60405180910390f35b348015610b5057600080fd5b50610b6b6004803603810190610b66919061447c565b61257b565b604051610b7891906143bd565b60405180910390f35b348015610b8d57600080fd5b50610ba86004803603810190610ba391906141d0565b61259b565b005b348015610bb657600080fd5b50610bbf612681565b604051610bcc91906143bd565b60405180910390f35b348015610be157600080fd5b50610bea612694565b604051610bf79190614461565b60405180910390f35b348015610c0c57600080fd5b50610c276004803603810190610c2291906147e0565b61269a565b005b348015610c3557600080fd5b50610c506004803603810190610c4b919061489a565b6127a4565b604051610c5d9190614461565b60405180910390f35b348015610c7257600080fd5b50610c7b61282b565b604051610c889190614461565b60405180910390f35b348015610c9d57600080fd5b50610cb86004803603810190610cb3919061447c565b612831565b005b348015610cc657600080fd5b50610ccf6129f7565b604051610cdc9190614461565b60405180910390f35b348015610cf157600080fd5b50610d0c6004803603810190610d0791906141d0565b6129fd565b005b348015610d1a57600080fd5b50610d356004803603810190610d30919061447c565b612b05565b005b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d65612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610deb90614926565b60405180910390fd5b670de0b6b3a764000081610e089190614975565b90506000610e23600954600a54612c2e90919063ffffffff16565b90506000610e4e82610e40600a5486612c9490919063ffffffff16565b612d0e90919063ffffffff16565b90506000610e7983610e6b60095487612c9490919063ffffffff16565b612d0e90919063ffffffff16565b9050610e8484612d58565b610e9982600a54612f9a90919063ffffffff16565b600a81905550610eb481600954612f9a90919063ffffffff16565b60098190555050505050565b606060038054610ecf906149fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610efb906149fe565b8015610f485780601f10610f1d57610100808354040283529160200191610f48565b820191906000526020600020905b815481529060010190602001808311610f2b57829003601f168201915b5050505050905090565b610f5a612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe090614926565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161108691906143bd565b60405180910390a25050565b60006110a661109f612c8c565b8484612fe4565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60235481565b6110ee612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117490614926565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa8160405161124591906147c5565b60405180910390a150565b611258612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de90614926565b60405180910390fd5b805182511461132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290614a7b565b60405180910390fd5b60c882511115611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790614b0d565b60405180910390fd5b60005b82518110156113ed57600083828151811061139157611390614b2d565b5b602002602001015190506000670de0b6b3a76400008484815181106113b9576113b8614b2d565b5b60200260200101516113cb9190614975565b90506113d83383836131ad565b505080806113e590614b5c565b915050611373565b505050565b60006113ff848484613440565b6114c08461140b612c8c565b6114bb8560405180606001604052806028815260200161585460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611471612c8c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7a9092919063ffffffff16565b612fe4565b600190509392505050565b60006012905090565b600061157d6114e1612c8c565b8461157885600160006114f2612c8c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2e90919063ffffffff16565b612fe4565b6001905092915050565b60155481565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60009054906101000a900460ff1681565b601860009054906101000a900460ff1681565b600860159054906101000a900460ff1681565b60175481565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b60165481565b6116b2612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173890614926565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c2244338160405161180991906147c5565b60405180910390a150565b61181c612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a290614926565b60405180910390fd5b670de0b6b3a7640000816118bf9190614975565b60118190555050565b6118d0612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461195f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195690614926565b60405180910390fd5b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2bfbf4d4860dc855748bb2cddfed0644fc3dcd75aad3625ff609ea9effa5ac89816040516119e691906147c5565b60405180910390a150565b60145481565b6119ff612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8590614926565b60405180910390fd5b80601d60006101000a81548160ff02191690831515021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ad9612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5f90614926565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611bb3573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c07612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8d90614926565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611d5f612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de590614926565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611ea781612831565b50565b611eb2612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890614926565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611fa4612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202a90614926565b60405180910390fd5b600860159054906101000a900460ff161561204d57600080fd5b6001600860156101000a81548160ff02191690831515021790555043602181905550426022819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b60225481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546120e3906149fe565b80601f016020809104026020016040519081016040528092919081815260200182805461210f906149fe565b801561215c5780601f106121315761010080835404028352916020019161215c565b820191906000526020600020905b81548152906001019060200180831161213f57829003601f168201915b5050505050905090565b61216e612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f490614926565b60405180910390fd5b85601481905550836015819055508460128190555082601381905550816016819055508060178190555061223e601754601254612c2e90919063ffffffff16565b600b8190555061225b601654601454612c2e90919063ffffffff16565b600c819055506063600b54111580156122775750600f600c5411155b6122b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ad90614c16565b60405180910390fd5b7ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff6012546013546017546014546015546016546040516122fb96959493929190614c36565b60405180910390a1505050505050565b612313612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239990614926565b60405180910390fd5b6123ac8282613dde565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006124996123e3612c8c565b84612494856040518060600160405280602581526020016158a2602591396001600061240d612c8c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7a9092919063ffffffff16565b612fe4565b6001905092915050565b6124ab612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461253a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253190614926565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b600061256b612564612c8c565b8484613440565b6001905092915050565b60215481565b601b6020528060005260406000206000915054906101000a900460ff1681565b6125a3612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262990614926565b60405180910390fd5b61012c811115612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e90614d09565b60405180910390fd5b8060238190555050565b601060009054906101000a900460ff1681565b60135481565b6126a2612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272890614926565b60405180910390fd5b801515601860009054906101000a900460ff1615150361275057600080fd5b80601860006101000a81548160ff0219169083151502179055507fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef8160405161279991906143bd565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b612839612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bf90614926565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292e90614d9b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b612a05612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8b90614926565b60405180910390fd5b670de0b6b3a764000081612aa89190614975565b90506064600254612ab99190614dea565b811015612afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af290614e8d565b60405180910390fd5b80600f8190555050565b612b0d612c8c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9390614926565b60405180910390fd5b6001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4838d165dc25d6634e3e7c65e13a5db7fa3b845af65cb4816abcb94ce9d569e381604051612c2391906147c5565b60405180910390a150565b6000808284612c3d9190614ead565b905083811015612c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7990614f4f565b60405180910390fd5b8091505092915050565b600033905090565b6000808303612ca65760009050612d08565b60008284612cb49190614975565b9050828482612cc39190614dea565b14612d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfa90614fe1565b60405180910390fd5b809150505b92915050565b6000612d5083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e7f565b905092915050565b6000810315612f9757612d6a81613ee2565b6000600190506000600190506000612d8f601654601454612c2e90919063ffffffff16565b612da6601754601254612c2e90919063ffffffff16565b612db09190614ead565b9050600080821115612dd257612dcf8247612d0e90919063ffffffff16565b90505b600081612dec601254601454612c2e90919063ffffffff16565b612df69190614975565b9050600082612e12601754601654612c2e90919063ffffffff16565b612e1c9190614975565b90506000821115612eb657600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612e6d90615032565b60006040518083038185875af1925050503d8060008114612eaa576040519150601f19603f3d011682016040523d82523d6000602084013e612eaf565b606091505b5050809650505b6000811115612f4e57600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612f0590615032565b60006040518083038185875af1925050503d8060008114612f42576040519150601f19603f3d011682016040523d82523d6000602084013e612f47565b606091505b5050809550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea982878015612f7a5750865b604051612f88929190615047565b60405180910390a15050505050505b50565b6000612fdc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d7a565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304a906150e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b990615174565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516131a09190614461565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361321c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321390615206565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361328b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328290615298565b60405180910390fd5b613296838383614125565b6133018160405180606001604052806026815260200161587c602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7a9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613394816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2e90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134339190614461565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036134af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a69061532a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361351e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613515906153bc565b60405180910390fd5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156135c25750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6135cb57600080fd5b6000806000601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661367157600860159054906101000a900460ff16613670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366790615428565b60405180910390fd5b5b6000840361368d57613685868660006131ad565b505050613d75565b600860149054906101000a900460ff161580156136f45750601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561374a5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613d66576000601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905080156138a357601254935060135492506017549150601d60009054906101000a900460ff161561389e57602354602060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138179190614ead565b421015613859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385090615494565b60405180910390fd5b42602060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613b6a565b601454935060155492506016549150601d60009054906101000a900460ff1615613af55760026021546138d69190614ead565b4311613917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390e90615500565b60405180910390fd5b601e543a111561395c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139539061556c565b60405180910390fd5b43601f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036139dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139d4906155d8565b60405180910390fd5b602354602060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a2a9190614ead565b421015613a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a6390615494565b60405180910390fd5b43601f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042602060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601060009054906101000a900460ff1615613b69576000613b1587611bb7565b9050600f548682613b269190614ead565b1115613b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b5e9061566a565b60405180910390fd5b505b5b6000613b7f8386612c2e90919063ffffffff16565b90506000613b8c30611bb7565b905060006011548210159050808015613bef5750601b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c4c576001600860146101000a81548160ff02191690831515021790555060006011549050613c1f81612d58565b6000600a8190555060006009819055506000600860146101000a81548160ff021916908315150217905550505b6000613c746064613c66868c612c9490919063ffffffff16565b612d0e90919063ffffffff16565b90506000613c9e6064613c908a8d612c9490919063ffffffff16565b612d0e90919063ffffffff16565b9050613cbe8183613caf9190614ead565b8b612f9a90919063ffffffff16565b99508515613ce657613cdb82600954612c2e90919063ffffffff16565b600981905550613d02565b613cfb82600a54612c2e90919063ffffffff16565b600a819055505b613d0d8c30846131ad565b6000811115613d5f57613d438c600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836131ad565b613d5881600254612f9a90919063ffffffff16565b6002819055505b5050505050505b613d718686866131ad565b5050505b505050565b6000838311158290613dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613db99190614296565b60405180910390fd5b5060008385613dd1919061568a565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008083118290613ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ebd9190614296565b60405180910390fd5b5060008385613ed59190614dea565b9050809150509392505050565b6000600267ffffffffffffffff811115613eff57613efe6144ae565b5b604051908082528060200260200182016040528015613f2d5781602001602082028036833780820191505090505b5090503081600081518110613f4557613f44614b2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061401091906156d3565b8160018151811061402457614023614b2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061408b30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612fe4565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016140ef9594939291906157f9565b600060405180830381600087803b15801561410957600080fd5b505af115801561411d573d6000803e3d6000fd5b505050505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141558261412a565b9050919050565b6141658161414a565b82525050565b6000602082019050614180600083018461415c565b92915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6141ad8161419a565b81146141b857600080fd5b50565b6000813590506141ca816141a4565b92915050565b6000602082840312156141e6576141e5614190565b5b60006141f4848285016141bb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561423757808201518184015260208101905061421c565b83811115614246576000848401525b50505050565b6000601f19601f8301169050919050565b6000614268826141fd565b6142728185614208565b9350614282818560208601614219565b61428b8161424c565b840191505092915050565b600060208201905081810360008301526142b0818461425d565b905092915050565b60006142c38261412a565b9050919050565b6142d3816142b8565b81146142de57600080fd5b50565b6000813590506142f0816142ca565b92915050565b60008115159050919050565b61430b816142f6565b811461431657600080fd5b50565b60008135905061432881614302565b92915050565b6000806040838503121561434557614344614190565b5b6000614353858286016142e1565b925050602061436485828601614319565b9150509250929050565b6000806040838503121561438557614384614190565b5b6000614393858286016142e1565b92505060206143a4858286016141bb565b9150509250929050565b6143b7816142f6565b82525050565b60006020820190506143d260008301846143ae565b92915050565b6000819050919050565b60006143fd6143f86143f38461412a565b6143d8565b61412a565b9050919050565b600061440f826143e2565b9050919050565b600061442182614404565b9050919050565b61443181614416565b82525050565b600060208201905061444c6000830184614428565b92915050565b61445b8161419a565b82525050565b60006020820190506144766000830184614452565b92915050565b60006020828403121561449257614491614190565b5b60006144a0848285016142e1565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6144e68261424c565b810181811067ffffffffffffffff82111715614505576145046144ae565b5b80604052505050565b6000614518614186565b905061452482826144dd565b919050565b600067ffffffffffffffff821115614544576145436144ae565b5b602082029050602081019050919050565b600080fd5b600061456d61456884614529565b61450e565b905080838252602082019050602084028301858111156145905761458f614555565b5b835b818110156145b957806145a588826142e1565b845260208401935050602081019050614592565b5050509392505050565b600082601f8301126145d8576145d76144a9565b5b81356145e884826020860161455a565b91505092915050565b600067ffffffffffffffff82111561460c5761460b6144ae565b5b602082029050602081019050919050565b600061463061462b846145f1565b61450e565b9050808382526020820190506020840283018581111561465357614652614555565b5b835b8181101561467c578061466888826141bb565b845260208401935050602081019050614655565b5050509392505050565b600082601f83011261469b5761469a6144a9565b5b81356146ab84826020860161461d565b91505092915050565b600080604083850312156146cb576146ca614190565b5b600083013567ffffffffffffffff8111156146e9576146e8614195565b5b6146f5858286016145c3565b925050602083013567ffffffffffffffff81111561471657614715614195565b5b61472285828601614686565b9150509250929050565b60008060006060848603121561474557614744614190565b5b6000614753868287016142e1565b9350506020614764868287016142e1565b9250506040614775868287016141bb565b9150509250925092565b600060ff82169050919050565b6147958161477f565b82525050565b60006020820190506147b0600083018461478c565b92915050565b6147bf816142b8565b82525050565b60006020820190506147da60008301846147b6565b92915050565b6000602082840312156147f6576147f5614190565b5b600061480484828501614319565b91505092915050565b60008060008060008060c0878903121561482a57614829614190565b5b600061483889828a016141bb565b965050602061484989828a016141bb565b955050604061485a89828a016141bb565b945050606061486b89828a016141bb565b935050608061487c89828a016141bb565b92505060a061488d89828a016141bb565b9150509295509295509295565b600080604083850312156148b1576148b0614190565b5b60006148bf858286016142e1565b92505060206148d0858286016142e1565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614910602083614208565b915061491b826148da565b602082019050919050565b6000602082019050818103600083015261493f81614903565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149808261419a565b915061498b8361419a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149c4576149c3614946565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a1657607f821691505b602082108103614a2957614a286149cf565b5b50919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b6000614a65601e83614208565b9150614a7082614a2f565b602082019050919050565b60006020820190508181036000830152614a9481614a58565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614af7602283614208565b9150614b0282614a9b565b604082019050919050565b60006020820190508181036000830152614b2681614aea565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614b678261419a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b9957614b98614946565b5b600182019050919050565b7f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60008201527f2031352500000000000000000000000000000000000000000000000000000000602082015250565b6000614c00602483614208565b9150614c0b82614ba4565b604082019050919050565b60006020820190508181036000830152614c2f81614bf3565b9050919050565b600060c082019050614c4b6000830189614452565b614c586020830188614452565b614c656040830187614452565b614c726060830186614452565b614c7f6080830185614452565b614c8c60a0830184614452565b979650505050505050565b7f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d60008201527f696e757465730000000000000000000000000000000000000000000000000000602082015250565b6000614cf3602683614208565b9150614cfe82614c97565b604082019050919050565b60006020820190508181036000830152614d2281614ce6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d85602683614208565b9150614d9082614d29565b604082019050919050565b60006020820190508181036000830152614db481614d78565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614df58261419a565b9150614e008361419a565b925082614e1057614e0f614dbb565b5b828204905092915050565b7f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360008201527f207468616e203125000000000000000000000000000000000000000000000000602082015250565b6000614e77602883614208565b9150614e8282614e1b565b604082019050919050565b60006020820190508181036000830152614ea681614e6a565b9050919050565b6000614eb88261419a565b9150614ec38361419a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ef857614ef7614946565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614f39601b83614208565b9150614f4482614f03565b602082019050919050565b60006020820190508181036000830152614f6881614f2c565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fcb602183614208565b9150614fd682614f6f565b604082019050919050565b60006020820190508181036000830152614ffa81614fbe565b9050919050565b600081905092915050565b50565b600061501c600083615001565b91506150278261500c565b600082019050919050565b600061503d8261500f565b9150819050919050565b600060408201905061505c6000830185614452565b61506960208301846143ae565b9392505050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150cc602483614208565b91506150d782615070565b604082019050919050565b600060208201905081810360008301526150fb816150bf565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061515e602283614208565b915061516982615102565b604082019050919050565b6000602082019050818103600083015261518d81615151565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006151f0602583614208565b91506151fb82615194565b604082019050919050565b6000602082019050818103600083015261521f816151e3565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615282602383614208565b915061528d82615226565b604082019050919050565b600060208201905081810360008301526152b181615275565b9050919050565b7f4942455032303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615314602683614208565b915061531f826152b8565b604082019050919050565b6000602082019050818103600083015261534381615307565b9050919050565b7f4942455032303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006153a6602483614208565b91506153b18261534a565b604082019050919050565b600060208201905081810360008301526153d581615399565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b6000615412602083614208565b915061541d826153dc565b602082019050919050565b6000602082019050818103600083015261544181615405565b9050919050565b7f636f6f6c646f776e20706572696f642061637469766500000000000000000000600082015250565b600061547e601683614208565b915061548982615448565b602082019050919050565b600060208201905081810360008301526154ad81615471565b9050919050565b7f796f75207368616c6c206e6f7420706173730000000000000000000000000000600082015250565b60006154ea601283614208565b91506154f5826154b4565b602082019050919050565b60006020820190508181036000830152615519816154dd565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b6000615556601883614208565b915061556182615520565b602082019050919050565b6000602082019050818103600083015261558581615549565b9050919050565b7f546f6f206d616e7920545820696e20626c6f636b000000000000000000000000600082015250565b60006155c2601483614208565b91506155cd8261558c565b602082019050919050565b600060208201905081810360008301526155f1816155b5565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000615654602483614208565b915061565f826155f8565b604082019050919050565b6000602082019050818103600083015261568381615647565b9050919050565b60006156958261419a565b91506156a08361419a565b9250828210156156b3576156b2614946565b5b828203905092915050565b6000815190506156cd816142ca565b92915050565b6000602082840312156156e9576156e8614190565b5b60006156f7848285016156be565b91505092915050565b6000819050919050565b600061572561572061571b84615700565b6143d8565b61419a565b9050919050565b6157358161570a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615770816142b8565b82525050565b60006157828383615767565b60208301905092915050565b6000602082019050919050565b60006157a68261573b565b6157b08185615746565b93506157bb83615757565b8060005b838110156157ec5781516157d38882615776565b97506157de8361578e565b9250506001810190506157bf565b5085935050505092915050565b600060a08201905061580e6000830188614452565b61581b602083018761572c565b818103604083015261582d818661579b565b905061583c60608301856147b6565b6158496080830184614452565b969550505050505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ab7ea2a13f65f39d2a7eb4c21f2070ba5f404c827d85086b12b7133bdfab98ba64736f6c634300080d0033

Deployed Bytecode Sourcemap

15376:15905:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15873:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29185:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3259:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20388:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4173:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15491:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3580:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17101:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20188:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30717:561;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4350:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19599:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4703:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16300:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23838:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15541:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16709:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16416:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15680:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16375:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23704:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16185:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16337:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19981:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21868:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20710:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16262:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21004:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15576:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21714:146;;;;;;;;;;;;;:::i;:::-;;3696:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7151:148;;;;;;;;;;;;;:::i;:::-;;22619:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20849:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19737:232;;;;;;;;;;;;;:::i;:::-;;17039:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6937:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3367:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22839:857;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22212:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15971:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4929:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21111:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3831:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16988:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16570:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21222:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16103:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16224:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21996:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4014:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16145:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7307:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16072:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21410:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20577:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15873:32;;;;;;;;;;;;;:::o;29185:443::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29283:6:::1;29273;:17;;;;:::i;:::-;29264:26;;29301:19;29323:25;29337:10;;29323:9;;:13;;:25;;;;:::i;:::-;29301:47;;29359:15;29377:38;29403:11;29377:21;29388:9;;29377:6;:10;;:21;;;;:::i;:::-;:25;;:38;;;;:::i;:::-;29359:56;;29426:16;29445:39;29472:11;29445:22;29456:10;;29445:6;:10;;:22;;;;:::i;:::-;:26;;:39;;;;:::i;:::-;29426:58;;29497:28;29518:6;29497:20;:28::i;:::-;29550:22;29564:7;29550:9;;:13;;:22;;;;:::i;:::-;29538:9;:34;;;;29596:24;29611:8;29596:10;;:14;;:24;;;;:::i;:::-;29583:10;:37;;;;29253:375;;;29185:443:::0;:::o;3259:100::-;3313:13;3346:5;3339:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3259:100;:::o;20388:181::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20503:8:::1;20472:19;:28;20492:7;20472:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20543:7;20527:34;;;20552:8;20527:34;;;;;;:::i;:::-;;;;;;;;20388:181:::0;;:::o;4173:169::-;4256:4;4273:39;4282:12;:10;:12::i;:::-;4296:7;4305:6;4273:8;:39::i;:::-;4330:4;4323:11;;4173:169;;;;:::o;15491:41::-;;;;;;;;;;;;;:::o;3580:108::-;3641:7;3668:12;;3661:19;;3580:108;:::o;17101:32::-;;;;:::o;20188:188::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20286:4:::1;20256:19;:27;20276:6;20256:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;20322:6;20301:10;;:28;;;;;;;;;;;;;;;;;;20345:23;20361:6;20345:23;;;;;;:::i;:::-;;;;;;;;20188:188:::0;:::o;30717:561::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30889:6:::1;:13;30864:14;:21;:38;30856:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30981:3;30956:14;:21;:28;;30948:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;31039:9;31034:237;31058:14;:21;31054:1;:25;31034:237;;;31101:14;31118;31133:1;31118:17;;;;;;;;:::i;:::-;;;;;;;;31101:34;;31150:21;31187:6;31174;31181:1;31174:9;;;;;;;;:::i;:::-;;;;;;;;:20;;;;:::i;:::-;31150:44;;31209:50;31225:10;31237:6;31245:13;31209:15;:50::i;:::-;31086:185;;31081:3;;;;;:::i;:::-;;;;31034:237;;;;30717:561:::0;;:::o;4350:345::-;4463:4;4480:36;4490:6;4498:9;4509:6;4480:9;:36::i;:::-;4527:138;4536:6;4544:12;:10;:12::i;:::-;4558:106;4596:6;4558:106;;;;;;;;;;;;;;;;;:11;:19;4570:6;4558:19;;;;;;;;;;;;;;;:33;4578:12;:10;:12::i;:::-;4558:33;;;;;;;;;;;;;;;;:37;;:106;;;;;:::i;:::-;4527:8;:138::i;:::-;4683:4;4676:11;;4350:345;;;;;:::o;19599:93::-;19657:5;19682:2;19675:9;;19599:93;:::o;4703:218::-;4791:4;4808:83;4817:12;:10;:12::i;:::-;4831:7;4840:50;4879:10;4840:11;:25;4852:12;:10;:12::i;:::-;4840:25;;;;;;;;;;;;;;;:34;4866:7;4840:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;4808:8;:83::i;:::-;4909:4;4902:11;;4703:218;;;;:::o;16300:30::-;;;;:::o;23838:100::-;23891:4;23915:6;:15;23922:7;23915:15;;;;;;;;;;;;;;;;;;;;;;;;;23908:22;;23838:100;;;:::o;15541:28::-;;;;;;;;;;;;;:::o;16709:34::-;;;;;;;;;;;;;:::o;16416:40::-;;;;;;;;;;;;;:::o;15680:34::-;;;;;;;;;;;;;:::o;16375:32::-;;;;:::o;23704:126::-;23770:4;23794:19;:28;23814:7;23794:28;;;;;;;;;;;;;;;;;;;;;;;;;23787:35;;23704:126;;;:::o;16185:32::-;;;;:::o;16337:31::-;;;;:::o;19981:199::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20085:4:::1;20055:19;:27;20075:6;20055:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;20120:6;20100:9;;:27;;;;;;;;;;;;;;;;;;20143:29;20165:6;20143:29;;;;;;:::i;:::-;;;;;;;;19981:199:::0;:::o;21868:120::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21973:6:::1;21963;:17;;;;:::i;:::-;21942:18;:38;;;;21868:120:::0;:::o;20710:131::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20792:5:::1;20774:6;:15;20781:7;20774:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;20813:20;20825:7;20813:20;;;;;;:::i;:::-;;;;;;;;20710:131:::0;:::o;16262:31::-;;;;:::o;21004:99::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21090:5:::1;21073:14;;:22;;;;;;;;;;;;;;;;;;21004:99:::0;:::o;15576:69::-;;;;;;;;;;;;;:::o;21714:146::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21761:17:::1;21781:21;21761:41;;21821:10;21813:28;;:39;21842:9;21813:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21750:110;21714:146::o:0;3696:127::-;3770:7;3797:9;:18;3807:7;3797:18;;;;;;;;;;;;;;;;3790:25;;3696:127;;;:::o;7151:148::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7258:1:::1;7221:40;;7242:6;;;;;;;;;;;7221:40;;;;;;;;;;;;7289:1;7272:6;;:19;;;;;;;;;;;;;;;;;;7151:148::o:0;22619:212::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22720:4:::1;22688:19;:29;22708:8;22688:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;22781:4;22735:33;:43;22769:8;22735:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;22796:27;22814:8;22796:17;:27::i;:::-;22619:212:::0;:::o;20849:147::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20982:6:::1;20938:33;:41;20972:6;20938:41;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;20849:147:::0;;:::o;19737:232::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19801:14:::1;;;;;;;;;;;19800:15;19792:24;;;::::0;::::1;;19844:4;19827:14;;:21;;;;;;;;;;;;;;;;;;19873:12;19859:11;:26;;;;19914:15;19896;:33;;;;19945:16;;;;;;;;;;19737:232::o:0;17039:30::-;;;;:::o;6937:79::-;6975:7;7002:6;;;;;;;;;;;6995:13;;6937:79;:::o;3367:104::-;3423:13;3456:7;3449:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3367:104;:::o;22839:857::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23046:12:::1;23027:16;:31;;;;23087:7;23069:15;:25;;;;23125:13;23105:17;:33;;;;23168:8;23149:16;:27;;;;23206:6;23187:16;:25;;;;23243:7;23223:17;:27;;;;23279:40;23301:17;;23279;;:21;;:40;;;;:::i;:::-;23263:13;:56;;;;23345:38;23366:16;;23345;;:20;;:38;;;;:::i;:::-;23330:12;:53;;;;23461:2;23444:13;;:19;;:41;;;;;23483:2;23467:12;;:18;;23444:41;23436:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;23544:144;23555:17;;23574:16;;23592:17;;23611:16;;23654:15;;23671:16;;23544:144;;;;;;;;;;;:::i;:::-;;;;;;;;22839:857:::0;;;;;;:::o;22212:140::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22303:41:::1;22332:4;22338:5;22303:28;:41::i;:::-;22212:140:::0;;:::o;15971:33::-;;;;;;;;;;;;;:::o;4929:286::-;5022:4;5039:146;5048:12;:10;:12::i;:::-;5062:7;5071:113;5110:15;5071:113;;;;;;;;;;;;;;;;;:11;:25;5083:12;:10;:12::i;:::-;5071:25;;;;;;;;;;;;;;;:34;5097:7;5071:34;;;;;;;;;;;;;;;;:38;;:113;;;;;:::i;:::-;5039:8;:146::i;:::-;5203:4;5196:11;;4929:286;;;;:::o;21111:103::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21201:5:::1;21182:16;;:24;;;;;;;;;;;;;;;;;;21111:103:::0;:::o;3831:175::-;3917:4;3934:42;3944:12;:10;:12::i;:::-;3958:9;3969:6;3934:9;:42::i;:::-;3994:4;3987:11;;3831:175;;;;:::o;16988:26::-;;;;:::o;16570:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;21222:174::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21310:3:::1;21301:5;:12;;21293:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21383:5;21367:13;:21;;;;21222:174:::0;:::o;16103:35::-;;;;;;;;;;;;;:::o;16224:31::-;;;;:::o;21996:208::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22101:7:::1;22076:32;;:21;;;;;;;;;;;:32;;::::0;22068:41:::1;;;::::0;::::1;;22144:7;22120:21;;:31;;;;;;;;;;;;;;;;;;22167:29;22188:7;22167:29;;;;;;:::i;:::-;;;;;;;;21996:208:::0;:::o;4014:151::-;4103:7;4130:11;:18;4142:5;4130:18;;;;;;;;;;;;;;;:27;4149:7;4130:27;;;;;;;;;;;;;;;;4123:34;;4014:151;;;;:::o;16145:33::-;;;;:::o;7307:244::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7416:1:::1;7396:22;;:8;:22;;::::0;7388:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7506:8;7477:38;;7498:6;;;;;;;;;;;7477:38;;;;;;;;;;;;7535:8;7526:6;;:17;;;;;;;;;;;;;;;;;;7307:244:::0;:::o;16072:24::-;;;;:::o;21410:218::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21494:6:::1;21485:5;:16;;;;:::i;:::-;21477:24;;21544:3;21529:12;;:18;;;;:::i;:::-;21520:5;:27;;21512:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;21615:5;21603:9;:17;;;;21410:218:::0;:::o;20577:125::-;7074:12;:10;:12::i;:::-;7064:22;;:6;;;;;;;;;;;:22;;;7056:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20656:4:::1;20638:6;:15;20645:7;20638:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;20676:18;20686:7;20676:18;;;;;;:::i;:::-;;;;;;;;20577:125:::0;:::o;493:179::-;551:7;571:9;587:1;583;:5;;;;:::i;:::-;571:17;;612:1;607;:6;;599:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;663:1;656:8;;;493:179;;;;:::o;117:98::-;170:7;197:10;190:17;;117:98;:::o;1022:248::-;1080:7;1109:1;1104;:6;1100:47;;1134:1;1127:8;;;;1100:47;1159:9;1175:1;1171;:5;;;;:::i;:::-;1159:17;;1204:1;1199;1195;:5;;;;:::i;:::-;:10;1187:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1261:1;1254:8;;;1022:248;;;;;:::o;1278:132::-;1336:7;1363:39;1367:1;1370;1363:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1356:46;;1278:132;;;;:::o;29661:1048::-;29740:1;29730:6;:11;29726:50;29758:7;29726:50;29786:24;29803:6;29786:16;:24::i;:::-;29823:12;29838:4;29823:19;;29853:15;29871:4;29853:22;;29896:23;29965:38;29986:16;;29965;;:20;;:38;;;;:::i;:::-;29922:40;29944:17;;29922;;:21;;:40;;;;:::i;:::-;:81;;;;:::i;:::-;29896:107;;30016:19;30068:1;30050:15;:19;30046:108;;;30100:42;30126:15;30100:21;:25;;:42;;;;:::i;:::-;30086:56;;30046:108;30164:23;30232:11;30190:39;30211:17;;30190:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;30164:79;;30254:17;30316:11;30274:39;30295:17;;30274:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;30254:73;;30370:1;30352:15;:19;30348:117;;;30410:9;;;;;;;;;;;30402:23;;30433:15;30402:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30388:65;;;;;30348:117;30501:1;30489:9;:13;30485:109;;;30544:10;;;;;;;;;;;30536:24;;30568:9;30536:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30519:63;;;;;30485:109;30611:90;30639:15;30669:7;:21;;;;;30680:10;30669:21;30611:90;;;;;;;:::i;:::-;;;;;;;;29715:994;;;;;;29661:1048;;:::o;680:136::-;738:7;765:43;769:1;772;765:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;758:50;;680:136;;;;:::o;6155:346::-;6274:1;6257:19;;:5;:19;;;6249:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6355:1;6336:21;;:7;:21;;;6328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6439:6;6409:11;:18;6421:5;6409:18;;;;;;;;;;;;;;;:27;6428:7;6409:27;;;;;;;;;;;;;;;:36;;;;6477:7;6461:32;;6470:5;6461:32;;;6486:6;6461:32;;;;;;:::i;:::-;;;;;;;;6155:346;;;:::o;5223:538::-;5347:1;5329:20;;:6;:20;;;5321:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5431:1;5410:23;;:9;:23;;;5402:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5486:47;5507:6;5515:9;5526:6;5486:20;:47::i;:::-;5566:70;5588:6;5566:70;;;;;;;;;;;;;;;;;:9;:17;5576:6;5566:17;;;;;;;;;;;;;;;;:21;;:70;;;;;:::i;:::-;5546:9;:17;5556:6;5546:17;;;;;;;;;;;;;;;:90;;;;5670:32;5695:6;5670:9;:20;5680:9;5670:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;5647:9;:20;5657:9;5647:20;;;;;;;;;;;;;;;:55;;;;5735:9;5718:35;;5727:6;5718:35;;;5746:6;5718:35;;;;;;:::i;:::-;;;;;;;;5223:538;;;:::o;23946:3715::-;24062:1;24046:18;;:4;:18;;;24038:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;24140:1;24126:16;;:2;:16;;;24118:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;24347:6;:12;24354:4;24347:12;;;;;;;;;;;;;;;;;;;;;;;;;24346:13;:28;;;;;24364:6;:10;24371:2;24364:10;;;;;;;;;;;;;;;;;;;;;;;;;24363:11;24346:28;24338:37;;;;;;24388:21;24420:15;24446:14;24478:33;:39;24512:4;24478:39;;;;;;;;;;;;;;;;;;;;;;;;;24473:142;;24542:14;;;;;;;;;;;24534:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;24473:142;24641:1;24631:6;:11;24627:2971;;24659:28;24675:4;24681:2;24685:1;24659:15;:28::i;:::-;24702:7;;;;;24627:2971;24765:8;;;;;;;;;;;24764:9;:39;;;;;24778:19;:25;24798:4;24778:25;;;;;;;;;;;;;;;;;;;;;;;;;24777:26;24764:39;:67;;;;;24808:19;:23;24828:2;24808:23;;;;;;;;;;;;;;;;;;;;;;;;;24807:24;24764:67;24746:2852;;;24858:14;24875:25;:29;24901:2;24875:29;;;;;;;;;;;;;;;;;;;;;;;;;24858:46;;24923:9;24919:1518;;;24969:17;;24953:33;;25015:16;;25005:26;;25059:17;;25050:26;;25101:14;;;;;;;;;;;25097:269;;;25205:13;;25163:28;:39;25192:9;25163:39;;;;;;;;;;;;;;;;:55;;;;:::i;:::-;25144:15;:74;;25136:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;25331:15;25289:28;:39;25318:9;25289:39;;;;;;;;;;;;;;;:57;;;;25097:269;24919:1518;;;25450:16;;25434:32;;25495:15;;25485:25;;25538:16;;25529:25;;25579:14;;;;;;;;;;;25575:598;;;25651:1;25637:11;;:15;;;;:::i;:::-;25622:12;:30;25614:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25716:13;;25701:11;:28;;25693:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25823:12;25784:24;:35;25809:9;25784:35;;;;;;;;;;;;;;;;:51;25776:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25947:13;;25905:28;:39;25934:9;25905:39;;;;;;;;;;;;;;;;:55;;;;:::i;:::-;25886:15;:74;;25878:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;26069:12;26031:24;:35;26056:9;26031:35;;;;;;;;;;;;;;;:50;;;;26142:15;26100:28;:39;26129:9;26100:39;;;;;;;;;;;;;;;:57;;;;25575:598;26193:16;;;;;;;;;;;26189:233;;;26226:32;26261:13;26271:2;26261:9;:13::i;:::-;26226:48;;26334:9;;26324:6;26297:24;:33;;;;:::i;:::-;:46;;26289:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;26211:211;26189:233;24919:1518;26453:17;26473:25;26491:6;26473:13;:17;;:25;;;;:::i;:::-;26453:45;;26515:28;26546:24;26564:4;26546:9;:24::i;:::-;26515:55;;26587:12;26626:18;;26602:20;:42;;26587:57;;26665:7;:43;;;;;26677:25;:31;26703:4;26677:31;;;;;;;;;;;;;;;;;;;;;;;;;26676:32;26665:43;26661:325;;;26740:4;26729:8;;:15;;;;;;;;;;;;;;;;;;26778:19;26800:18;;26778:40;;26837:33;26858:11;26837:20;:33::i;:::-;26901:1;26889:9;:13;;;;26934:1;26921:10;:14;;;;26965:5;26954:8;;:16;;;;;;;;;;;;;;;;;;26710:276;26661:325;27002:12;27017:30;27043:3;27017:21;27028:9;27017:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;27002:45;;27062:18;27083:28;27107:3;27083:19;27094:7;27083:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;27062:49;;27137:29;27155:10;27148:4;:17;;;;:::i;:::-;27137:6;:10;;:29;;;;:::i;:::-;27128:38;;27187:9;27183:155;;;27230:20;27245:4;27230:10;;:14;;:20;;;;:::i;:::-;27217:10;:33;;;;27183:155;;;27303:19;27317:4;27303:9;;:13;;:19;;;;:::i;:::-;27291:9;:31;;;;27183:155;27354:42;27370:4;27384;27391;27354:15;:42::i;:::-;27430:1;27417:10;:14;27413:161;;;27452:44;27468:4;27474:9;;;;;;;;;;;27485:10;27452:15;:44::i;:::-;27530:28;27547:10;27530:12;;:16;;:28;;;;:::i;:::-;27515:12;:43;;;;27413:161;24843:2755;;;;;;24746:2852;27610:33;27626:4;27632:2;27636:6;27610:15;:33::i;:::-;24025:3636;;;23946:3715;;;;:::o;824:190::-;910:7;943:1;938;:6;;946:12;930:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;970:9;986:1;982;:5;;;;:::i;:::-;970:17;;1005:1;998:8;;;824:190;;;;;:::o;22360:188::-;22477:5;22443:25;:31;22469:4;22443:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22534:5;22500:40;;22528:4;22500:40;;;;;;;;;;;;22360:188;;:::o;1418:189::-;1504:7;1536:1;1532;:5;1539:12;1524:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1563:9;1579:1;1575;:5;;;;:::i;:::-;1563:17;;1598:1;1591:8;;;1418:189;;;;;:::o;28157:499::-;28223:21;28261:1;28247:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28223:40;;28292:4;28274;28279:1;28274:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28318:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28308:4;28313:1;28308:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28351:62;28368:4;28383:15;;;;;;;;;;;28401:11;28351:8;:62::i;:::-;28424:15;;;;;;;;;;;:66;;;28505:11;28531:1;28575:4;28602;28622:15;28424:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28212:444;28157:499;:::o;6509:91::-;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:104::-;184:7;213:24;231:5;213:24;:::i;:::-;202:35;;139:104;;;:::o;249:142::-;352:32;378:5;352:32;:::i;:::-;347:3;340:45;249:142;;:::o;397:254::-;506:4;544:2;533:9;529:18;521:26;;557:87;641:1;630:9;626:17;617:6;557:87;:::i;:::-;397:254;;;;:::o;657:75::-;690:6;723:2;717:9;707:19;;657:75;:::o;738:117::-;847:1;844;837:12;861:117;970:1;967;960:12;984:77;1021:7;1050:5;1039:16;;984:77;;;:::o;1067:122::-;1140:24;1158:5;1140:24;:::i;:::-;1133:5;1130:35;1120:63;;1179:1;1176;1169:12;1120:63;1067:122;:::o;1195:139::-;1241:5;1279:6;1266:20;1257:29;;1295:33;1322:5;1295:33;:::i;:::-;1195:139;;;;:::o;1340:329::-;1399:6;1448:2;1436:9;1427:7;1423:23;1419:32;1416:119;;;1454:79;;:::i;:::-;1416:119;1574:1;1599:53;1644:7;1635:6;1624:9;1620:22;1599:53;:::i;:::-;1589:63;;1545:117;1340:329;;;;:::o;1675:99::-;1727:6;1761:5;1755:12;1745:22;;1675:99;;;:::o;1780:169::-;1864:11;1898:6;1893:3;1886:19;1938:4;1933:3;1929:14;1914:29;;1780:169;;;;:::o;1955:307::-;2023:1;2033:113;2047:6;2044:1;2041:13;2033:113;;;2132:1;2127:3;2123:11;2117:18;2113:1;2108:3;2104:11;2097:39;2069:2;2066:1;2062:10;2057:15;;2033:113;;;2164:6;2161:1;2158:13;2155:101;;;2244:1;2235:6;2230:3;2226:16;2219:27;2155:101;2004:258;1955:307;;;:::o;2268:102::-;2309:6;2360:2;2356:7;2351:2;2344:5;2340:14;2336:28;2326:38;;2268:102;;;:::o;2376:364::-;2464:3;2492:39;2525:5;2492:39;:::i;:::-;2547:71;2611:6;2606:3;2547:71;:::i;:::-;2540:78;;2627:52;2672:6;2667:3;2660:4;2653:5;2649:16;2627:52;:::i;:::-;2704:29;2726:6;2704:29;:::i;:::-;2699:3;2695:39;2688:46;;2468:272;2376:364;;;;:::o;2746:313::-;2859:4;2897:2;2886:9;2882:18;2874:26;;2946:9;2940:4;2936:20;2932:1;2921:9;2917:17;2910:47;2974:78;3047:4;3038:6;2974:78;:::i;:::-;2966:86;;2746:313;;;;:::o;3065:96::-;3102:7;3131:24;3149:5;3131:24;:::i;:::-;3120:35;;3065:96;;;:::o;3167:122::-;3240:24;3258:5;3240:24;:::i;:::-;3233:5;3230:35;3220:63;;3279:1;3276;3269:12;3220:63;3167:122;:::o;3295:139::-;3341:5;3379:6;3366:20;3357:29;;3395:33;3422:5;3395:33;:::i;:::-;3295:139;;;;:::o;3440:90::-;3474:7;3517:5;3510:13;3503:21;3492:32;;3440:90;;;:::o;3536:116::-;3606:21;3621:5;3606:21;:::i;:::-;3599:5;3596:32;3586:60;;3642:1;3639;3632:12;3586:60;3536:116;:::o;3658:133::-;3701:5;3739:6;3726:20;3717:29;;3755:30;3779:5;3755:30;:::i;:::-;3658:133;;;;:::o;3797:468::-;3862:6;3870;3919:2;3907:9;3898:7;3894:23;3890:32;3887:119;;;3925:79;;:::i;:::-;3887:119;4045:1;4070:53;4115:7;4106:6;4095:9;4091:22;4070:53;:::i;:::-;4060:63;;4016:117;4172:2;4198:50;4240:7;4231:6;4220:9;4216:22;4198:50;:::i;:::-;4188:60;;4143:115;3797:468;;;;;:::o;4271:474::-;4339:6;4347;4396:2;4384:9;4375:7;4371:23;4367:32;4364:119;;;4402:79;;:::i;:::-;4364:119;4522:1;4547:53;4592:7;4583:6;4572:9;4568:22;4547:53;:::i;:::-;4537:63;;4493:117;4649:2;4675:53;4720:7;4711:6;4700:9;4696:22;4675:53;:::i;:::-;4665:63;;4620:118;4271:474;;;;;:::o;4751:109::-;4832:21;4847:5;4832:21;:::i;:::-;4827:3;4820:34;4751:109;;:::o;4866:210::-;4953:4;4991:2;4980:9;4976:18;4968:26;;5004:65;5066:1;5055:9;5051:17;5042:6;5004:65;:::i;:::-;4866:210;;;;:::o;5082:60::-;5110:3;5131:5;5124:12;;5082:60;;;:::o;5148:142::-;5198:9;5231:53;5249:34;5258:24;5276:5;5258:24;:::i;:::-;5249:34;:::i;:::-;5231:53;:::i;:::-;5218:66;;5148:142;;;:::o;5296:126::-;5346:9;5379:37;5410:5;5379:37;:::i;:::-;5366:50;;5296:126;;;:::o;5428:153::-;5505:9;5538:37;5569:5;5538:37;:::i;:::-;5525:50;;5428:153;;;:::o;5587:185::-;5701:64;5759:5;5701:64;:::i;:::-;5696:3;5689:77;5587:185;;:::o;5778:276::-;5898:4;5936:2;5925:9;5921:18;5913:26;;5949:98;6044:1;6033:9;6029:17;6020:6;5949:98;:::i;:::-;5778:276;;;;:::o;6060:118::-;6147:24;6165:5;6147:24;:::i;:::-;6142:3;6135:37;6060:118;;:::o;6184:222::-;6277:4;6315:2;6304:9;6300:18;6292:26;;6328:71;6396:1;6385:9;6381:17;6372:6;6328:71;:::i;:::-;6184:222;;;;:::o;6412:329::-;6471:6;6520:2;6508:9;6499:7;6495:23;6491:32;6488:119;;;6526:79;;:::i;:::-;6488:119;6646:1;6671:53;6716:7;6707:6;6696:9;6692:22;6671:53;:::i;:::-;6661:63;;6617:117;6412:329;;;;:::o;6747:117::-;6856:1;6853;6846:12;6870:180;6918:77;6915:1;6908:88;7015:4;7012:1;7005:15;7039:4;7036:1;7029:15;7056:281;7139:27;7161:4;7139:27;:::i;:::-;7131:6;7127:40;7269:6;7257:10;7254:22;7233:18;7221:10;7218:34;7215:62;7212:88;;;7280:18;;:::i;:::-;7212:88;7320:10;7316:2;7309:22;7099:238;7056:281;;:::o;7343:129::-;7377:6;7404:20;;:::i;:::-;7394:30;;7433:33;7461:4;7453:6;7433:33;:::i;:::-;7343:129;;;:::o;7478:311::-;7555:4;7645:18;7637:6;7634:30;7631:56;;;7667:18;;:::i;:::-;7631:56;7717:4;7709:6;7705:17;7697:25;;7777:4;7771;7767:15;7759:23;;7478:311;;;:::o;7795:117::-;7904:1;7901;7894:12;7935:710;8031:5;8056:81;8072:64;8129:6;8072:64;:::i;:::-;8056:81;:::i;:::-;8047:90;;8157:5;8186:6;8179:5;8172:21;8220:4;8213:5;8209:16;8202:23;;8273:4;8265:6;8261:17;8253:6;8249:30;8302:3;8294:6;8291:15;8288:122;;;8321:79;;:::i;:::-;8288:122;8436:6;8419:220;8453:6;8448:3;8445:15;8419:220;;;8528:3;8557:37;8590:3;8578:10;8557:37;:::i;:::-;8552:3;8545:50;8624:4;8619:3;8615:14;8608:21;;8495:144;8479:4;8474:3;8470:14;8463:21;;8419:220;;;8423:21;8037:608;;7935:710;;;;;:::o;8668:370::-;8739:5;8788:3;8781:4;8773:6;8769:17;8765:27;8755:122;;8796:79;;:::i;:::-;8755:122;8913:6;8900:20;8938:94;9028:3;9020:6;9013:4;9005:6;9001:17;8938:94;:::i;:::-;8929:103;;8745:293;8668:370;;;;:::o;9044:311::-;9121:4;9211:18;9203:6;9200:30;9197:56;;;9233:18;;:::i;:::-;9197:56;9283:4;9275:6;9271:17;9263:25;;9343:4;9337;9333:15;9325:23;;9044:311;;;:::o;9378:710::-;9474:5;9499:81;9515:64;9572:6;9515:64;:::i;:::-;9499:81;:::i;:::-;9490:90;;9600:5;9629:6;9622:5;9615:21;9663:4;9656:5;9652:16;9645:23;;9716:4;9708:6;9704:17;9696:6;9692:30;9745:3;9737:6;9734:15;9731:122;;;9764:79;;:::i;:::-;9731:122;9879:6;9862:220;9896:6;9891:3;9888:15;9862:220;;;9971:3;10000:37;10033:3;10021:10;10000:37;:::i;:::-;9995:3;9988:50;10067:4;10062:3;10058:14;10051:21;;9938:144;9922:4;9917:3;9913:14;9906:21;;9862:220;;;9866:21;9480:608;;9378:710;;;;;:::o;10111:370::-;10182:5;10231:3;10224:4;10216:6;10212:17;10208:27;10198:122;;10239:79;;:::i;:::-;10198:122;10356:6;10343:20;10381:94;10471:3;10463:6;10456:4;10448:6;10444:17;10381:94;:::i;:::-;10372:103;;10188:293;10111:370;;;;:::o;10487:894::-;10605:6;10613;10662:2;10650:9;10641:7;10637:23;10633:32;10630:119;;;10668:79;;:::i;:::-;10630:119;10816:1;10805:9;10801:17;10788:31;10846:18;10838:6;10835:30;10832:117;;;10868:79;;:::i;:::-;10832:117;10973:78;11043:7;11034:6;11023:9;11019:22;10973:78;:::i;:::-;10963:88;;10759:302;11128:2;11117:9;11113:18;11100:32;11159:18;11151:6;11148:30;11145:117;;;11181:79;;:::i;:::-;11145:117;11286:78;11356:7;11347:6;11336:9;11332:22;11286:78;:::i;:::-;11276:88;;11071:303;10487:894;;;;;:::o;11387:619::-;11464:6;11472;11480;11529:2;11517:9;11508:7;11504:23;11500:32;11497:119;;;11535:79;;:::i;:::-;11497:119;11655:1;11680:53;11725:7;11716:6;11705:9;11701:22;11680:53;:::i;:::-;11670:63;;11626:117;11782:2;11808:53;11853:7;11844:6;11833:9;11829:22;11808:53;:::i;:::-;11798:63;;11753:118;11910:2;11936:53;11981:7;11972:6;11961:9;11957:22;11936:53;:::i;:::-;11926:63;;11881:118;11387:619;;;;;:::o;12012:86::-;12047:7;12087:4;12080:5;12076:16;12065:27;;12012:86;;;:::o;12104:112::-;12187:22;12203:5;12187:22;:::i;:::-;12182:3;12175:35;12104:112;;:::o;12222:214::-;12311:4;12349:2;12338:9;12334:18;12326:26;;12362:67;12426:1;12415:9;12411:17;12402:6;12362:67;:::i;:::-;12222:214;;;;:::o;12442:118::-;12529:24;12547:5;12529:24;:::i;:::-;12524:3;12517:37;12442:118;;:::o;12566:222::-;12659:4;12697:2;12686:9;12682:18;12674:26;;12710:71;12778:1;12767:9;12763:17;12754:6;12710:71;:::i;:::-;12566:222;;;;:::o;12794:323::-;12850:6;12899:2;12887:9;12878:7;12874:23;12870:32;12867:119;;;12905:79;;:::i;:::-;12867:119;13025:1;13050:50;13092:7;13083:6;13072:9;13068:22;13050:50;:::i;:::-;13040:60;;12996:114;12794:323;;;;:::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://ab7ea2a13f65f39d2a7eb4c21f2070ba5f404c827d85086b12b7133bdfab98ba
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.