ETH Price: $3,517.78 (+0.52%)
Gas: 6 Gwei

Token

ThelastStand (TLS)
 

Overview

Max Total Supply

100,000,000 TLS

Holders

49

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
*ღღღ.eth
Balance
2,399,639.432427276958706141 TLS

Value
$0.00
0xB9ebd0fd66E00e0e12396AA1c12Bafbf580b82B8
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:
thelaststandf

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

/*

The Last Stand

*/

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

    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    address public USD = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; //
    bool public tradingEnabled = false;

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

    uint256 private totalSellFees;
    uint256 private totalBuyFees;

    address payable public marketingWallet; //
    address payable public devWallet; //
    uint256 public maxWallet;
    bool public maxWalletEnabled = true;
    uint256 public swapTokensAtAmount;
    uint256 public sellMarketingFees;
    uint256 public sellBurnFee;
    uint256 public buyMarketingFees;
    uint256 public buyBurnFee;
    uint256 public buyDevFee;
    uint256 public sellDevFee;

    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 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 SendDividends(uint256 opAmount, bool success);
    event transferUSD(uint256 amountUSD);

    constructor() BEP20("ThelastStand", "TLS") { // 
        marketingWallet = payable(0x05D80Fc22c09a2Bd5817B2ac001a9286e9B06113); //
        devWallet = payable(0x6D8e285aa2Bd1d0BC82a069DA6BB0055D0B8291a); // 
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; ///

        //INITIAL FEE VALUES HERE
        buyMarketingFees = 3;
        sellMarketingFees = 4;
        buyBurnFee = 0;
        sellBurnFee = 0;
        buyDevFee = 2;
        sellDevFee = 3;

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

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

        _setAutomatedMarketMakerPair(uniswapV2Pair, true);

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

        uint256 totalSupply = (100_000_000) * (10**18); // 
        _mint(owner(), totalSupply); // only time internal mint function is ever called is to create supply
        maxWallet = _totalSupply / 50; // 
        swapTokensAtAmount = _totalSupply / 1000; //
        canTransferBeforeTradingIsEnabled[owner()] = true;
        canTransferBeforeTradingIsEnabled[address(this)] = true;
    }

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

    receive() external payable {}

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

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

    function 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/ETH 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 SendUSD() external onlyOwner {
        uint256 amountUSD = IBEP20(USD).balanceOf(address(this));
        IBEP20(USD).approve(address(this), amountUSD.mul(10));
        IBEP20(USD).transferFrom(address(this),msg.sender,amountUSD);
        emit transferUSD(amountUSD);
    }

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

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

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function updateFees(uint256 marketingBuy, uint256 marketingSell, uint256 burnBuy,
                        uint256 burnSell, uint256 devBuy, uint256 devSell) public onlyOwner {

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

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

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

        emit UpdateFees(sellMarketingFees, sellBurnFee, sellDevFee, buyMarketingFees,
                        buyBurnFee, buyDevFee);
    }

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

    function 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] && !_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 (
            !_isExcludedFromFees[from] && !_isExcludedFromFees[to]
        ) {
            bool isSelling = automatedMarketMakerPairs[to];
            if (isSelling) {
                marketingFees = sellMarketingFees;
                burnFee = sellBurnFee;
                devFee = sellDevFee;

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

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

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

            uint256 totalFees = marketingFees.add(devFee);

            uint256 contractTokenBalance = balanceOf(address(this));

            bool canSwap = contractTokenBalance >= swapTokensAtAmount;

            if (canSwap && !automatedMarketMakerPairs[from]) {
                uint256 tokensFromFees=contractTokenBalance;
                uint256 totalMarketingFees = sellMarketingFees+buyMarketingFees;
                uint256 totalDevFees = sellDevFee + buyDevFee;
                uint256 totalFee = totalMarketingFees+totalDevFees;
                uint256 partMarketing = (totalMarketingFees*100).div(totalFee); //*100 because uint256
                uint256 partDev = (totalDevFees*100).div(totalFee); //*100 because uint256

                uint256 marketingPayout = (tokensFromFees * partMarketing).div(100);
                uint256 devPayout = (tokensFromFees * partDev).div(100);

                if (marketingPayout > 0) {
                    swapTokensForUSD(marketingPayout, marketingWallet);
                }
                
                if (devPayout > 0) {
                    swapTokensForUSD(devPayout, devWallet);

                }
             
            }

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

            amount = amount.sub(fees + burntokens);

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

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


    function swapTokensForUSD(uint256 tokenAmount, address destAddr) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = USD;
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForTokens(
            tokenAmount,
            0, // accept any amount of USD
            path,
            destAddr,
            block.timestamp
        );
    }

    function forceSwapAndSendDividends(uint256 tokens) public onlyOwner {
        payWallets(tokens);
    }

    // in this function, the contract sells his tokens and send USD to marketing and dev wallets
    function payWallets(uint256 tokensFromFees) private {

        uint256 totalMarketingFees = sellMarketingFees+buyMarketingFees;
        uint256 totalDevFees = sellDevFee + buyDevFee;
        uint256 totalFees = totalMarketingFees+totalDevFees;
        uint256 partMarketing = (totalMarketingFees*100).div(totalFees); //*100 because uint256
        uint256 partDev = (totalDevFees*100).div(totalFees); //*100 because uint256

        uint256 marketingPayout = (tokensFromFees * partMarketing).div(100);
        uint256 devPayout = (tokensFromFees * partDev).div(100);

        if (marketingPayout > 0) {
            swapTokensForUSD(marketingPayout, marketingWallet);
        }
        
        if (devPayout > 0) {
            swapTokensForUSD(devPayout, devWallet);
        }

    }

    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":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":[],"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":"uint256","name":"amountUSD","type":"uint256"}],"name":"transferUSD","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":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SendUSD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"USD","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":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldowntimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setCanTransferBefore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setMaxWalletEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setcooldowntimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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"}]

608060405261dead600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960146101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055506000601b60006101000a81548160ff0219169083151502179055506404a817c800601c5560006021553480156200010857600080fd5b506040518060400160405280600c81526020017f5468656c6173745374616e6400000000000000000000000000000000000000008152506040518060400160405280600381526020017f544c53000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200018d92919062000abd565b508060049080519060200190620001a692919062000abd565b5050506000620001bb620007d460201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3507305d80fc22c09a2bd5817b2ac001a9286e9b06113600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736d8e285aa2bd1d0bc82a069da6bb0055d0b8291a600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506003601381905550600460118190555060006014819055506000601281905550600260158190555060036016819055506200036b601554601354620007dc60201b62002d2d1790919060201c565b600b819055506200038f601654601154620007dc60201b62002d2d1790919060201c565b600a8190555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046a919062000bd7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401620004c892919062000c1a565b6020604051808303816000875af1158015620004e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200050e919062000bd7565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000583600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200083f60201b60201c565b6001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006a52b7d2dcc80cd2e40000009050620006de620006d1620008e060201b60201c565b826200090a60201b60201c565b6032600254620006ef919062000caf565b600e819055506103e860025462000707919062000caf565b6010819055506001601a600062000723620008e060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505062000ecb565b600033905090565b6000808284620007ed919062000ce7565b90508381101562000835576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200082c9062000da5565b60405180910390fd5b8091505092915050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200097c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009739062000e17565b60405180910390fd5b620009906000838362000ab860201b60201c565b620009ac81600254620007dc60201b62002d2d1790919060201c565b60028190555062000a0a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620007dc60201b62002d2d1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aac919062000e4a565b60405180910390a35050565b505050565b82805462000acb9062000e96565b90600052602060002090601f01602090048101928262000aef576000855562000b3b565b82601f1062000b0a57805160ff191683800117855562000b3b565b8280016001018555821562000b3b579182015b8281111562000b3a57825182559160200191906001019062000b1d565b5b50905062000b4a919062000b4e565b5090565b5b8082111562000b6957600081600090555060010162000b4f565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b9f8262000b72565b9050919050565b62000bb18162000b92565b811462000bbd57600080fd5b50565b60008151905062000bd18162000ba6565b92915050565b60006020828403121562000bf05762000bef62000b6d565b5b600062000c008482850162000bc0565b91505092915050565b62000c148162000b92565b82525050565b600060408201905062000c31600083018562000c09565b62000c40602083018462000c09565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cbc8262000c47565b915062000cc98362000c47565b92508262000cdc5762000cdb62000c51565b5b828204905092915050565b600062000cf48262000c47565b915062000d018362000c47565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d395762000d3862000c80565b5b828201905092915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000d8d601b8362000d44565b915062000d9a8262000d55565b602082019050919050565b6000602082019050818103600083015262000dc08162000d7e565b9050919050565b7f42455032303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000dff601f8362000d44565b915062000e0c8262000dc7565b602082019050919050565b6000602082019050818103600083015262000e328162000df0565b9050919050565b62000e448162000c47565b82525050565b600060208201905062000e61600083018462000e39565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000eaf57607f821691505b60208210810362000ec55762000ec462000e67565b5b50919050565b615a3b8062000edb6000396000f3fe60806040526004361061036f5760003560e01c806375f0a874116101c6578063a614ff75116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610c7f578063f8b45b0514610ca8578063fc6b151c14610cd3578063ffecf51614610cfc57610376565b8063dd62ed3e14610bec578063e2f4560514610c29578063e71dc3f514610c5457610376565b8063b4942988116100d1578063b494298814610b30578063b62496f514610b5b578063b74e3b1114610b98578063d045a32914610bc157610376565b8063a614ff7514610a9f578063a9059cbb14610ac8578063adb873bd14610b0557610376565b806395d89b41116101645780639a7a23d61161013e5780639a7a23d6146109e35780639c3b4fdc14610a0c578063a0d82dc514610a37578063a457c2d714610a6257610376565b806395d89b4114610978578063964365f1146109a3578063992c58e4146109ba57610376565b80638c3c82b2116101a05780638c3c82b2146108cc5780638da5cb5b146108f75780638ea5220f1461092257806395451c291461094d57610376565b806375f0a874146108615780637fdde05c1461088c5780638a8c523c146108b557610376565b80633bbac579116102a05780635eee4bae1161023e5780637088fb7f116102185780637088fb7f146107cd57806370a08231146107e4578063715018a61461082157806375829def1461083857610376565b80635eee4bae146107525780635fecd9261461077b578063679ca6e9146107a457610376565b80634ada218b1161027a5780634ada218b146106965780634fbee193146106c15780635124f874146106fe5780635d098b381461072957610376565b80633bbac5791461060357806349bd5a5e146106405780634a62bb651461066b57610376565b80631bf6c21b1161030d5780632307b441116102e75780632307b4411461053557806323b872dd1461055e578063313ce5671461059b57806339509351146105c657610376565b80631bf6c21b146104b65780631d7b1fb4146104e15780631f53ac021461050c57610376565b806308dfe8a51161034957806308dfe8a5146103fa578063095ea7b3146104235780631694505e1461046057806318160ddd1461048b57610376565b806303fd2a451461037b57806305ca5f08146103a657806306fdde03146103cf57610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d25565b60405161039d9190614197565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906141fc565b610d4b565b005b3480156103db57600080fd5b506103e4610dee565b6040516103f191906142c2565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190614348565b610e80565b005b34801561042f57600080fd5b5061044a60048036038101906104459190614388565b610fc0565b60405161045791906143d7565b60405180910390f35b34801561046c57600080fd5b50610475610fde565b6040516104829190614451565b60405180910390f35b34801561049757600080fd5b506104a0611004565b6040516104ad919061447b565b60405180910390f35b3480156104c257600080fd5b506104cb61100e565b6040516104d89190614197565b60405180910390f35b3480156104ed57600080fd5b506104f6611034565b604051610503919061447b565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190614496565b61103a565b005b34801561054157600080fd5b5061055c600480360381019061055791906146ce565b6111a4565b005b34801561056a57600080fd5b5061058560048036038101906105809190614746565b611346565b60405161059291906143d7565b60405180910390f35b3480156105a757600080fd5b506105b061141f565b6040516105bd91906147b5565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190614388565b611428565b6040516105fa91906143d7565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190614496565b6114db565b60405161063791906143d7565b60405180910390f35b34801561064c57600080fd5b50610655611531565b6040516106629190614197565b60405180910390f35b34801561067757600080fd5b50610680611557565b60405161068d91906143d7565b60405180910390f35b3480156106a257600080fd5b506106ab61156a565b6040516106b891906143d7565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e39190614496565b61157d565b6040516106f591906143d7565b60405180910390f35b34801561070a57600080fd5b506107136115d3565b604051610720919061447b565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b9190614496565b6115d9565b005b34801561075e57600080fd5b50610779600480360381019061077491906141fc565b611743565b005b34801561078757600080fd5b506107a2600480360381019061079d9190614496565b6117f7565b005b3480156107b057600080fd5b506107cb60048036038101906107c691906147d0565b611920565b005b3480156107d957600080fd5b506107e26119d4565b005b3480156107f057600080fd5b5061080b60048036038101906108069190614496565b611aba565b604051610818919061447b565b60405180910390f35b34801561082d57600080fd5b50610836611b02565b005b34801561084457600080fd5b5061085f600480360381019061085a9190614496565b611c5a565b005b34801561086d57600080fd5b50610876611dad565b604051610883919061481e565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae9190614348565b611dd3565b005b3480156108c157600080fd5b506108ca611ec5565b005b3480156108d857600080fd5b506108e1611fcd565b6040516108ee919061447b565b60405180910390f35b34801561090357600080fd5b5061090c611fd3565b6040516109199190614197565b60405180910390f35b34801561092e57600080fd5b50610937611ffd565b604051610944919061481e565b60405180910390f35b34801561095957600080fd5b50610962612023565b60405161096f919061447b565b60405180910390f35b34801561098457600080fd5b5061098d612029565b60405161099a91906142c2565b60405180910390f35b3480156109af57600080fd5b506109b86120bb565b005b3480156109c657600080fd5b506109e160048036038101906109dc9190614839565b612383565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a059190614348565b612528565b005b348015610a1857600080fd5b50610a216125cd565b604051610a2e919061447b565b60405180910390f35b348015610a4357600080fd5b50610a4c6125d3565b604051610a59919061447b565b60405180910390f35b348015610a6e57600080fd5b50610a896004803603810190610a849190614388565b6125d9565b604051610a9691906143d7565b60405180910390f35b348015610aab57600080fd5b50610ac66004803603810190610ac191906147d0565b6126a6565b005b348015610ad457600080fd5b50610aef6004803603810190610aea9190614388565b61275a565b604051610afc91906143d7565b60405180910390f35b348015610b1157600080fd5b50610b1a612778565b604051610b27919061447b565b60405180910390f35b348015610b3c57600080fd5b50610b4561277e565b604051610b52919061447b565b60405180910390f35b348015610b6757600080fd5b50610b826004803603810190610b7d9190614496565b612784565b604051610b8f91906143d7565b60405180910390f35b348015610ba457600080fd5b50610bbf6004803603810190610bba91906141fc565b6127a4565b005b348015610bcd57600080fd5b50610bd661288a565b604051610be391906143d7565b60405180910390f35b348015610bf857600080fd5b50610c136004803603810190610c0e91906148c6565b61289d565b604051610c20919061447b565b60405180910390f35b348015610c3557600080fd5b50610c3e612924565b604051610c4b919061447b565b60405180910390f35b348015610c6057600080fd5b50610c6961292a565b604051610c76919061447b565b60405180910390f35b348015610c8b57600080fd5b50610ca66004803603810190610ca19190614496565b612930565b005b348015610cb457600080fd5b50610cbd612af6565b604051610cca919061447b565b60405180910390f35b348015610cdf57600080fd5b50610cfa6004803603810190610cf591906141fc565b612afc565b005b348015610d0857600080fd5b50610d236004803603810190610d1e9190614496565b612c04565b005b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d53612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990614952565b60405180910390fd5b610deb81612d93565b50565b606060038054610dfd906149a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e29906149a1565b8015610e765780601f10610e4b57610100808354040283529160200191610e76565b820191906000526020600020905b815481529060010190602001808311610e5957829003601f168201915b5050505050905090565b610e88612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0e90614952565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610fb491906143d7565b60405180910390a25050565b6000610fd4610fcd612d8b565b8484612ecd565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60215481565b611042612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c890614952565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa816040516111999190614197565b60405180910390a150565b6111ac612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123290614952565b60405180910390fd5b805182511461127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690614a1e565b60405180910390fd5b60c8825111156112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90614ab0565b60405180910390fd5b60005b82518110156113415760008382815181106112e5576112e4614ad0565b5b602002602001015190506000670de0b6b3a764000084848151811061130d5761130c614ad0565b5b602002602001015161131f9190614b2e565b905061132c338383613096565b5050808061133990614b88565b9150506112c7565b505050565b6000611353848484613329565b6114148461135f612d8b565b61140f8560405180606001604052806028815260200161599360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113c5612d8b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cee9092919063ffffffff16565b612ecd565b600190509392505050565b60006012905090565b60006114d1611435612d8b565b846114cc8560016000611446612d8b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2d90919063ffffffff16565b612ecd565b6001905092915050565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900460ff1681565b600960149054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b6115e1612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790614952565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c224433816040516117389190614197565b60405180910390a150565b61174b612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d190614952565b60405180910390fd5b670de0b6b3a7640000816117ee9190614b2e565b60108190555050565b6117ff612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188590614952565b60405180910390fd5b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2bfbf4d4860dc855748bb2cddfed0644fc3dcd75aad3625ff609ea9effa5ac89816040516119159190614197565b60405180910390a150565b611928612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ae90614952565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b6119dc612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6290614952565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ab6573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b0a612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9090614952565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611c62612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce890614952565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611daa81612930565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ddb612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190614952565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611ecd612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5390614952565b60405180910390fd5b600960149054906101000a900460ff1615611f7657600080fd5b6001600960146101000a81548160ff02191690831515021790555043601f81905550426020819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b60205481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b606060048054612038906149a1565b80601f0160208091040260200160405190810160405280929190818152602001828054612064906149a1565b80156120b15780601f10612086576101008083540402835291602001916120b1565b820191906000526020600020905b81548152906001019060200180831161209457829003601f168201915b5050505050905090565b6120c3612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214990614952565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121af9190614197565b602060405180830381865afa1580156121cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f09190614be5565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b330612245600a85613d5290919063ffffffff16565b6040518363ffffffff1660e01b8152600401612262929190614c12565b6020604051808303816000875af1158015612281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a59190614c50565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b815260040161230593929190614c7d565b6020604051808303816000875af1158015612324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123489190614c50565b507fc74e7a098395443390fac907684a14a51fd706a5c157ef4fbd6a08e2748e166681604051612378919061447b565b60405180910390a150565b61238b612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461241a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241190614952565b60405180910390fd5b85601381905550836014819055508460118190555082601281905550816015819055508060168190555061245b601654601154612d2d90919063ffffffff16565b600a81905550612478601554601354612d2d90919063ffffffff16565b600b819055506063600a54111580156124945750600f600b5411155b6124d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ca90614d26565b60405180910390fd5b7ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff60115460125460165460135460145460155460405161251896959493929190614d46565b60405180910390a1505050505050565b612530612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b690614952565b60405180910390fd5b6125c98282613dcc565b5050565b60155481565b60165481565b600061269c6125e6612d8b565b84612697856040518060600160405280602581526020016159e16025913960016000612610612d8b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cee9092919063ffffffff16565b612ecd565b6001905092915050565b6126ae612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461273d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273490614952565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600061276e612767612d8b565b8484613329565b6001905092915050565b60125481565b601f5481565b60196020528060005260406000206000915054906101000a900460ff1681565b6127ac612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461283b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283290614952565b60405180910390fd5b61012c811115612880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287790614e19565b60405180910390fd5b8060218190555050565b600f60009054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b60145481565b612938612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129be90614952565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2d90614eab565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b612b04612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8a90614952565b60405180910390fd5b670de0b6b3a764000081612ba79190614b2e565b90506064600254612bb89190614efa565b811015612bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf190614f9d565b60405180910390fd5b80600e8190555050565b612c0c612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9290614952565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4838d165dc25d6634e3e7c65e13a5db7fa3b845af65cb4816abcb94ce9d569e381604051612d229190614197565b60405180910390a150565b6000808284612d3c9190614fbd565b905083811015612d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d789061505f565b60405180910390fd5b8091505092915050565b600033905090565b6000601354601154612da59190614fbd565b90506000601554601654612db99190614fbd565b905060008183612dc99190614fbd565b90506000612dec82606486612dde9190614b2e565b613e6d90919063ffffffff16565b90506000612e0f83606486612e019190614b2e565b613e6d90919063ffffffff16565b90506000612e3260648489612e249190614b2e565b613e6d90919063ffffffff16565b90506000612e556064848a612e479190614b2e565b613e6d90919063ffffffff16565b90506000821115612e8d57612e8c82600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b6000811115612ec357612ec281600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b5050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f33906150f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa290615183565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051613089919061447b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fc90615215565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316b906152a7565b60405180910390fd5b61317f8383836140a4565b6131ea816040518060600160405280602681526020016159bb602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cee9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061327d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2d90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161331c919061447b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338f90615339565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fe906153cb565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134ab5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6134b457600080fd5b6000806000601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661355a57600960149054906101000a900460ff16613559576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355090615437565b60405180910390fd5b5b600084036135765761356e86866000613096565b505050613ce9565b601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561361a5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613cda576000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050801561377357601154935060125492506016549150601b60009054906101000a900460ff161561376e57602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136e79190614fbd565b421015613729576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613720906154a3565b60405180910390fd5b42601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613a3a565b601354935060145492506015549150601b60009054906101000a900460ff16156139c5576002601f546137a69190614fbd565b43116137e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137de9061550f565b60405180910390fd5b601c543a111561382c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138239061557b565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036138ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a4906155e7565b60405180910390fd5b602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138fa9190614fbd565b42101561393c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613933906154a3565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff1615613a395760006139e587611aba565b9050600e5486826139f69190614fbd565b1115613a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a2e90615679565b60405180910390fd5b505b5b6000613a4f8386612d2d90919063ffffffff16565b90506000613a5c30611aba565b905060006010548210159050808015613abf5750601960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c025760008290506000601354601154613adb9190614fbd565b90506000601554601654613aef9190614fbd565b905060008183613aff9190614fbd565b90506000613b2282606486613b149190614b2e565b613e6d90919063ffffffff16565b90506000613b4583606486613b379190614b2e565b613e6d90919063ffffffff16565b90506000613b6860648489613b5a9190614b2e565b613e6d90919063ffffffff16565b90506000613b8b6064848a613b7d9190614b2e565b613e6d90919063ffffffff16565b90506000821115613bc357613bc282600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b6000811115613bf957613bf881600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b50505050505050505b6000613c2a6064613c1c868c613d5290919063ffffffff16565b613e6d90919063ffffffff16565b90506000613c546064613c468a8d613d5290919063ffffffff16565b613e6d90919063ffffffff16565b9050613c748183613c659190614fbd565b8b6140a990919063ffffffff16565b9950613c818c3084613096565b6000811115613cd357613cb78c600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613096565b613ccc816002546140a990919063ffffffff16565b6002819055505b5050505050505b613ce5868686613096565b5050505b505050565b6000838311158290613d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2d91906142c2565b60405180910390fd5b5060008385613d459190615699565b9050809150509392505050565b6000808303613d645760009050613dc6565b60008284613d729190614b2e565b9050828482613d819190614efa565b14613dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613db89061573f565b60405180910390fd5b809150505b92915050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000613eaf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140f3565b905092915050565b6000600267ffffffffffffffff811115613ed457613ed36144c8565b5b604051908082528060200260200182016040528015613f025781602001602082028036833780820191505090505b5090503081600081518110613f1a57613f19614ad0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613f8b57613f8a614ad0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ff230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685612ecd565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed17398460008486426040518663ffffffff1660e01b8152600401614056959493929190615858565b6000604051808303816000875af1158015614075573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061409e9190615949565b50505050565b505050565b60006140eb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613cee565b905092915050565b6000808311829061413a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161413191906142c2565b60405180910390fd5b50600083856141499190614efa565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061418182614156565b9050919050565b61419181614176565b82525050565b60006020820190506141ac6000830184614188565b92915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6141d9816141c6565b81146141e457600080fd5b50565b6000813590506141f6816141d0565b92915050565b600060208284031215614212576142116141bc565b5b6000614220848285016141e7565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614263578082015181840152602081019050614248565b83811115614272576000848401525b50505050565b6000601f19601f8301169050919050565b600061429482614229565b61429e8185614234565b93506142ae818560208601614245565b6142b781614278565b840191505092915050565b600060208201905081810360008301526142dc8184614289565b905092915050565b6142ed81614176565b81146142f857600080fd5b50565b60008135905061430a816142e4565b92915050565b60008115159050919050565b61432581614310565b811461433057600080fd5b50565b6000813590506143428161431c565b92915050565b6000806040838503121561435f5761435e6141bc565b5b600061436d858286016142fb565b925050602061437e85828601614333565b9150509250929050565b6000806040838503121561439f5761439e6141bc565b5b60006143ad858286016142fb565b92505060206143be858286016141e7565b9150509250929050565b6143d181614310565b82525050565b60006020820190506143ec60008301846143c8565b92915050565b6000819050919050565b600061441761441261440d84614156565b6143f2565b614156565b9050919050565b6000614429826143fc565b9050919050565b600061443b8261441e565b9050919050565b61444b81614430565b82525050565b60006020820190506144666000830184614442565b92915050565b614475816141c6565b82525050565b6000602082019050614490600083018461446c565b92915050565b6000602082840312156144ac576144ab6141bc565b5b60006144ba848285016142fb565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61450082614278565b810181811067ffffffffffffffff8211171561451f5761451e6144c8565b5b80604052505050565b60006145326141b2565b905061453e82826144f7565b919050565b600067ffffffffffffffff82111561455e5761455d6144c8565b5b602082029050602081019050919050565b600080fd5b600061458761458284614543565b614528565b905080838252602082019050602084028301858111156145aa576145a961456f565b5b835b818110156145d357806145bf88826142fb565b8452602084019350506020810190506145ac565b5050509392505050565b600082601f8301126145f2576145f16144c3565b5b8135614602848260208601614574565b91505092915050565b600067ffffffffffffffff821115614626576146256144c8565b5b602082029050602081019050919050565b600061464a6146458461460b565b614528565b9050808382526020820190506020840283018581111561466d5761466c61456f565b5b835b81811015614696578061468288826141e7565b84526020840193505060208101905061466f565b5050509392505050565b600082601f8301126146b5576146b46144c3565b5b81356146c5848260208601614637565b91505092915050565b600080604083850312156146e5576146e46141bc565b5b600083013567ffffffffffffffff811115614703576147026141c1565b5b61470f858286016145dd565b925050602083013567ffffffffffffffff8111156147305761472f6141c1565b5b61473c858286016146a0565b9150509250929050565b60008060006060848603121561475f5761475e6141bc565b5b600061476d868287016142fb565b935050602061477e868287016142fb565b925050604061478f868287016141e7565b9150509250925092565b600060ff82169050919050565b6147af81614799565b82525050565b60006020820190506147ca60008301846147a6565b92915050565b6000602082840312156147e6576147e56141bc565b5b60006147f484828501614333565b91505092915050565b600061480882614156565b9050919050565b614818816147fd565b82525050565b6000602082019050614833600083018461480f565b92915050565b60008060008060008060c08789031215614856576148556141bc565b5b600061486489828a016141e7565b965050602061487589828a016141e7565b955050604061488689828a016141e7565b945050606061489789828a016141e7565b93505060806148a889828a016141e7565b92505060a06148b989828a016141e7565b9150509295509295509295565b600080604083850312156148dd576148dc6141bc565b5b60006148eb858286016142fb565b92505060206148fc858286016142fb565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061493c602083614234565b915061494782614906565b602082019050919050565b6000602082019050818103600083015261496b8161492f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806149b957607f821691505b6020821081036149cc576149cb614972565b5b50919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b6000614a08601e83614234565b9150614a13826149d2565b602082019050919050565b60006020820190508181036000830152614a37816149fb565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a9a602283614234565b9150614aa582614a3e565b604082019050919050565b60006020820190508181036000830152614ac981614a8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b39826141c6565b9150614b44836141c6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b7d57614b7c614aff565b5b828202905092915050565b6000614b93826141c6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614bc557614bc4614aff565b5b600182019050919050565b600081519050614bdf816141d0565b92915050565b600060208284031215614bfb57614bfa6141bc565b5b6000614c0984828501614bd0565b91505092915050565b6000604082019050614c276000830185614188565b614c34602083018461446c565b9392505050565b600081519050614c4a8161431c565b92915050565b600060208284031215614c6657614c656141bc565b5b6000614c7484828501614c3b565b91505092915050565b6000606082019050614c926000830186614188565b614c9f6020830185614188565b614cac604083018461446c565b949350505050565b7f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60008201527f2031352500000000000000000000000000000000000000000000000000000000602082015250565b6000614d10602483614234565b9150614d1b82614cb4565b604082019050919050565b60006020820190508181036000830152614d3f81614d03565b9050919050565b600060c082019050614d5b600083018961446c565b614d68602083018861446c565b614d75604083018761446c565b614d82606083018661446c565b614d8f608083018561446c565b614d9c60a083018461446c565b979650505050505050565b7f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d60008201527f696e757465730000000000000000000000000000000000000000000000000000602082015250565b6000614e03602683614234565b9150614e0e82614da7565b604082019050919050565b60006020820190508181036000830152614e3281614df6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e95602683614234565b9150614ea082614e39565b604082019050919050565b60006020820190508181036000830152614ec481614e88565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f05826141c6565b9150614f10836141c6565b925082614f2057614f1f614ecb565b5b828204905092915050565b7f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360008201527f207468616e203125000000000000000000000000000000000000000000000000602082015250565b6000614f87602883614234565b9150614f9282614f2b565b604082019050919050565b60006020820190508181036000830152614fb681614f7a565b9050919050565b6000614fc8826141c6565b9150614fd3836141c6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561500857615007614aff565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615049601b83614234565b915061505482615013565b602082019050919050565b600060208201905081810360008301526150788161503c565b9050919050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150db602483614234565b91506150e68261507f565b604082019050919050565b6000602082019050818103600083015261510a816150ce565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061516d602283614234565b915061517882615111565b604082019050919050565b6000602082019050818103600083015261519c81615160565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006151ff602583614234565b915061520a826151a3565b604082019050919050565b6000602082019050818103600083015261522e816151f2565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615291602383614234565b915061529c82615235565b604082019050919050565b600060208201905081810360008301526152c081615284565b9050919050565b7f4942455032303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615323602683614234565b915061532e826152c7565b604082019050919050565b6000602082019050818103600083015261535281615316565b9050919050565b7f4942455032303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006153b5602483614234565b91506153c082615359565b604082019050919050565b600060208201905081810360008301526153e4816153a8565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b6000615421602083614234565b915061542c826153eb565b602082019050919050565b6000602082019050818103600083015261545081615414565b9050919050565b7f636f6f6c646f776e20706572696f642061637469766500000000000000000000600082015250565b600061548d601683614234565b915061549882615457565b602082019050919050565b600060208201905081810360008301526154bc81615480565b9050919050565b7f796f75207368616c6c206e6f7420706173730000000000000000000000000000600082015250565b60006154f9601283614234565b9150615504826154c3565b602082019050919050565b60006020820190508181036000830152615528816154ec565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b6000615565601883614234565b91506155708261552f565b602082019050919050565b6000602082019050818103600083015261559481615558565b9050919050565b7f546f6f206d616e7920545820696e20626c6f636b000000000000000000000000600082015250565b60006155d1601483614234565b91506155dc8261559b565b602082019050919050565b60006020820190508181036000830152615600816155c4565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000615663602483614234565b915061566e82615607565b604082019050919050565b6000602082019050818103600083015261569281615656565b9050919050565b60006156a4826141c6565b91506156af836141c6565b9250828210156156c2576156c1614aff565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615729602183614234565b9150615734826156cd565b604082019050919050565b600060208201905081810360008301526157588161571c565b9050919050565b6000819050919050565b600061578461577f61577a8461575f565b6143f2565b6141c6565b9050919050565b61579481615769565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6157cf81614176565b82525050565b60006157e183836157c6565b60208301905092915050565b6000602082019050919050565b60006158058261579a565b61580f81856157a5565b935061581a836157b6565b8060005b8381101561584b57815161583288826157d5565b975061583d836157ed565b92505060018101905061581e565b5085935050505092915050565b600060a08201905061586d600083018861446c565b61587a602083018761578b565b818103604083015261588c81866157fa565b905061589b6060830185614188565b6158a8608083018461446c565b9695505050505050565b60006158c56158c08461460b565b614528565b905080838252602082019050602084028301858111156158e8576158e761456f565b5b835b8181101561591157806158fd8882614bd0565b8452602084019350506020810190506158ea565b5050509392505050565b600082601f8301126159305761592f6144c3565b5b81516159408482602086016158b2565b91505092915050565b60006020828403121561595f5761595e6141bc565b5b600082015167ffffffffffffffff81111561597d5761597c6141c1565b5b6159898482850161591b565b9150509291505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207f6d45af1d237c6ea14668d6c8560afeeb112962d9dc0cf0811b8f0aafe5cac564736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c806375f0a874116101c6578063a614ff75116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610c7f578063f8b45b0514610ca8578063fc6b151c14610cd3578063ffecf51614610cfc57610376565b8063dd62ed3e14610bec578063e2f4560514610c29578063e71dc3f514610c5457610376565b8063b4942988116100d1578063b494298814610b30578063b62496f514610b5b578063b74e3b1114610b98578063d045a32914610bc157610376565b8063a614ff7514610a9f578063a9059cbb14610ac8578063adb873bd14610b0557610376565b806395d89b41116101645780639a7a23d61161013e5780639a7a23d6146109e35780639c3b4fdc14610a0c578063a0d82dc514610a37578063a457c2d714610a6257610376565b806395d89b4114610978578063964365f1146109a3578063992c58e4146109ba57610376565b80638c3c82b2116101a05780638c3c82b2146108cc5780638da5cb5b146108f75780638ea5220f1461092257806395451c291461094d57610376565b806375f0a874146108615780637fdde05c1461088c5780638a8c523c146108b557610376565b80633bbac579116102a05780635eee4bae1161023e5780637088fb7f116102185780637088fb7f146107cd57806370a08231146107e4578063715018a61461082157806375829def1461083857610376565b80635eee4bae146107525780635fecd9261461077b578063679ca6e9146107a457610376565b80634ada218b1161027a5780634ada218b146106965780634fbee193146106c15780635124f874146106fe5780635d098b381461072957610376565b80633bbac5791461060357806349bd5a5e146106405780634a62bb651461066b57610376565b80631bf6c21b1161030d5780632307b441116102e75780632307b4411461053557806323b872dd1461055e578063313ce5671461059b57806339509351146105c657610376565b80631bf6c21b146104b65780631d7b1fb4146104e15780631f53ac021461050c57610376565b806308dfe8a51161034957806308dfe8a5146103fa578063095ea7b3146104235780631694505e1461046057806318160ddd1461048b57610376565b806303fd2a451461037b57806305ca5f08146103a657806306fdde03146103cf57610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d25565b60405161039d9190614197565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906141fc565b610d4b565b005b3480156103db57600080fd5b506103e4610dee565b6040516103f191906142c2565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190614348565b610e80565b005b34801561042f57600080fd5b5061044a60048036038101906104459190614388565b610fc0565b60405161045791906143d7565b60405180910390f35b34801561046c57600080fd5b50610475610fde565b6040516104829190614451565b60405180910390f35b34801561049757600080fd5b506104a0611004565b6040516104ad919061447b565b60405180910390f35b3480156104c257600080fd5b506104cb61100e565b6040516104d89190614197565b60405180910390f35b3480156104ed57600080fd5b506104f6611034565b604051610503919061447b565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190614496565b61103a565b005b34801561054157600080fd5b5061055c600480360381019061055791906146ce565b6111a4565b005b34801561056a57600080fd5b5061058560048036038101906105809190614746565b611346565b60405161059291906143d7565b60405180910390f35b3480156105a757600080fd5b506105b061141f565b6040516105bd91906147b5565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190614388565b611428565b6040516105fa91906143d7565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190614496565b6114db565b60405161063791906143d7565b60405180910390f35b34801561064c57600080fd5b50610655611531565b6040516106629190614197565b60405180910390f35b34801561067757600080fd5b50610680611557565b60405161068d91906143d7565b60405180910390f35b3480156106a257600080fd5b506106ab61156a565b6040516106b891906143d7565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e39190614496565b61157d565b6040516106f591906143d7565b60405180910390f35b34801561070a57600080fd5b506107136115d3565b604051610720919061447b565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b9190614496565b6115d9565b005b34801561075e57600080fd5b50610779600480360381019061077491906141fc565b611743565b005b34801561078757600080fd5b506107a2600480360381019061079d9190614496565b6117f7565b005b3480156107b057600080fd5b506107cb60048036038101906107c691906147d0565b611920565b005b3480156107d957600080fd5b506107e26119d4565b005b3480156107f057600080fd5b5061080b60048036038101906108069190614496565b611aba565b604051610818919061447b565b60405180910390f35b34801561082d57600080fd5b50610836611b02565b005b34801561084457600080fd5b5061085f600480360381019061085a9190614496565b611c5a565b005b34801561086d57600080fd5b50610876611dad565b604051610883919061481e565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae9190614348565b611dd3565b005b3480156108c157600080fd5b506108ca611ec5565b005b3480156108d857600080fd5b506108e1611fcd565b6040516108ee919061447b565b60405180910390f35b34801561090357600080fd5b5061090c611fd3565b6040516109199190614197565b60405180910390f35b34801561092e57600080fd5b50610937611ffd565b604051610944919061481e565b60405180910390f35b34801561095957600080fd5b50610962612023565b60405161096f919061447b565b60405180910390f35b34801561098457600080fd5b5061098d612029565b60405161099a91906142c2565b60405180910390f35b3480156109af57600080fd5b506109b86120bb565b005b3480156109c657600080fd5b506109e160048036038101906109dc9190614839565b612383565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a059190614348565b612528565b005b348015610a1857600080fd5b50610a216125cd565b604051610a2e919061447b565b60405180910390f35b348015610a4357600080fd5b50610a4c6125d3565b604051610a59919061447b565b60405180910390f35b348015610a6e57600080fd5b50610a896004803603810190610a849190614388565b6125d9565b604051610a9691906143d7565b60405180910390f35b348015610aab57600080fd5b50610ac66004803603810190610ac191906147d0565b6126a6565b005b348015610ad457600080fd5b50610aef6004803603810190610aea9190614388565b61275a565b604051610afc91906143d7565b60405180910390f35b348015610b1157600080fd5b50610b1a612778565b604051610b27919061447b565b60405180910390f35b348015610b3c57600080fd5b50610b4561277e565b604051610b52919061447b565b60405180910390f35b348015610b6757600080fd5b50610b826004803603810190610b7d9190614496565b612784565b604051610b8f91906143d7565b60405180910390f35b348015610ba457600080fd5b50610bbf6004803603810190610bba91906141fc565b6127a4565b005b348015610bcd57600080fd5b50610bd661288a565b604051610be391906143d7565b60405180910390f35b348015610bf857600080fd5b50610c136004803603810190610c0e91906148c6565b61289d565b604051610c20919061447b565b60405180910390f35b348015610c3557600080fd5b50610c3e612924565b604051610c4b919061447b565b60405180910390f35b348015610c6057600080fd5b50610c6961292a565b604051610c76919061447b565b60405180910390f35b348015610c8b57600080fd5b50610ca66004803603810190610ca19190614496565b612930565b005b348015610cb457600080fd5b50610cbd612af6565b604051610cca919061447b565b60405180910390f35b348015610cdf57600080fd5b50610cfa6004803603810190610cf591906141fc565b612afc565b005b348015610d0857600080fd5b50610d236004803603810190610d1e9190614496565b612c04565b005b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d53612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990614952565b60405180910390fd5b610deb81612d93565b50565b606060038054610dfd906149a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e29906149a1565b8015610e765780601f10610e4b57610100808354040283529160200191610e76565b820191906000526020600020905b815481529060010190602001808311610e5957829003601f168201915b5050505050905090565b610e88612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0e90614952565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610fb491906143d7565b60405180910390a25050565b6000610fd4610fcd612d8b565b8484612ecd565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60215481565b611042612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c890614952565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa816040516111999190614197565b60405180910390a150565b6111ac612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123290614952565b60405180910390fd5b805182511461127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690614a1e565b60405180910390fd5b60c8825111156112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90614ab0565b60405180910390fd5b60005b82518110156113415760008382815181106112e5576112e4614ad0565b5b602002602001015190506000670de0b6b3a764000084848151811061130d5761130c614ad0565b5b602002602001015161131f9190614b2e565b905061132c338383613096565b5050808061133990614b88565b9150506112c7565b505050565b6000611353848484613329565b6114148461135f612d8b565b61140f8560405180606001604052806028815260200161599360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113c5612d8b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cee9092919063ffffffff16565b612ecd565b600190509392505050565b60006012905090565b60006114d1611435612d8b565b846114cc8560016000611446612d8b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2d90919063ffffffff16565b612ecd565b6001905092915050565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900460ff1681565b600960149054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b6115e1612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790614952565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c224433816040516117389190614197565b60405180910390a150565b61174b612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d190614952565b60405180910390fd5b670de0b6b3a7640000816117ee9190614b2e565b60108190555050565b6117ff612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188590614952565b60405180910390fd5b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2bfbf4d4860dc855748bb2cddfed0644fc3dcd75aad3625ff609ea9effa5ac89816040516119159190614197565b60405180910390a150565b611928612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ae90614952565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b6119dc612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6290614952565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ab6573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b0a612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9090614952565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611c62612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce890614952565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611daa81612930565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ddb612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190614952565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611ecd612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5390614952565b60405180910390fd5b600960149054906101000a900460ff1615611f7657600080fd5b6001600960146101000a81548160ff02191690831515021790555043601f81905550426020819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b60205481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b606060048054612038906149a1565b80601f0160208091040260200160405190810160405280929190818152602001828054612064906149a1565b80156120b15780601f10612086576101008083540402835291602001916120b1565b820191906000526020600020905b81548152906001019060200180831161209457829003601f168201915b5050505050905090565b6120c3612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214990614952565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121af9190614197565b602060405180830381865afa1580156121cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f09190614be5565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b330612245600a85613d5290919063ffffffff16565b6040518363ffffffff1660e01b8152600401612262929190614c12565b6020604051808303816000875af1158015612281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a59190614c50565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b815260040161230593929190614c7d565b6020604051808303816000875af1158015612324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123489190614c50565b507fc74e7a098395443390fac907684a14a51fd706a5c157ef4fbd6a08e2748e166681604051612378919061447b565b60405180910390a150565b61238b612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461241a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241190614952565b60405180910390fd5b85601381905550836014819055508460118190555082601281905550816015819055508060168190555061245b601654601154612d2d90919063ffffffff16565b600a81905550612478601554601354612d2d90919063ffffffff16565b600b819055506063600a54111580156124945750600f600b5411155b6124d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ca90614d26565b60405180910390fd5b7ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff60115460125460165460135460145460155460405161251896959493929190614d46565b60405180910390a1505050505050565b612530612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b690614952565b60405180910390fd5b6125c98282613dcc565b5050565b60155481565b60165481565b600061269c6125e6612d8b565b84612697856040518060600160405280602581526020016159e16025913960016000612610612d8b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cee9092919063ffffffff16565b612ecd565b6001905092915050565b6126ae612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461273d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273490614952565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600061276e612767612d8b565b8484613329565b6001905092915050565b60125481565b601f5481565b60196020528060005260406000206000915054906101000a900460ff1681565b6127ac612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461283b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283290614952565b60405180910390fd5b61012c811115612880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287790614e19565b60405180910390fd5b8060218190555050565b600f60009054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b60145481565b612938612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129be90614952565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2d90614eab565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b612b04612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8a90614952565b60405180910390fd5b670de0b6b3a764000081612ba79190614b2e565b90506064600254612bb89190614efa565b811015612bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf190614f9d565b60405180910390fd5b80600e8190555050565b612c0c612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9290614952565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4838d165dc25d6634e3e7c65e13a5db7fa3b845af65cb4816abcb94ce9d569e381604051612d229190614197565b60405180910390a150565b6000808284612d3c9190614fbd565b905083811015612d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d789061505f565b60405180910390fd5b8091505092915050565b600033905090565b6000601354601154612da59190614fbd565b90506000601554601654612db99190614fbd565b905060008183612dc99190614fbd565b90506000612dec82606486612dde9190614b2e565b613e6d90919063ffffffff16565b90506000612e0f83606486612e019190614b2e565b613e6d90919063ffffffff16565b90506000612e3260648489612e249190614b2e565b613e6d90919063ffffffff16565b90506000612e556064848a612e479190614b2e565b613e6d90919063ffffffff16565b90506000821115612e8d57612e8c82600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b6000811115612ec357612ec281600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b5050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f33906150f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa290615183565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051613089919061447b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fc90615215565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316b906152a7565b60405180910390fd5b61317f8383836140a4565b6131ea816040518060600160405280602681526020016159bb602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cee9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061327d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2d90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161331c919061447b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338f90615339565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fe906153cb565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134ab5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6134b457600080fd5b6000806000601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661355a57600960149054906101000a900460ff16613559576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355090615437565b60405180910390fd5b5b600084036135765761356e86866000613096565b505050613ce9565b601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561361a5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613cda576000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050801561377357601154935060125492506016549150601b60009054906101000a900460ff161561376e57602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136e79190614fbd565b421015613729576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613720906154a3565b60405180910390fd5b42601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613a3a565b601354935060145492506015549150601b60009054906101000a900460ff16156139c5576002601f546137a69190614fbd565b43116137e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137de9061550f565b60405180910390fd5b601c543a111561382c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138239061557b565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036138ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a4906155e7565b60405180910390fd5b602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138fa9190614fbd565b42101561393c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613933906154a3565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff1615613a395760006139e587611aba565b9050600e5486826139f69190614fbd565b1115613a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a2e90615679565b60405180910390fd5b505b5b6000613a4f8386612d2d90919063ffffffff16565b90506000613a5c30611aba565b905060006010548210159050808015613abf5750601960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c025760008290506000601354601154613adb9190614fbd565b90506000601554601654613aef9190614fbd565b905060008183613aff9190614fbd565b90506000613b2282606486613b149190614b2e565b613e6d90919063ffffffff16565b90506000613b4583606486613b379190614b2e565b613e6d90919063ffffffff16565b90506000613b6860648489613b5a9190614b2e565b613e6d90919063ffffffff16565b90506000613b8b6064848a613b7d9190614b2e565b613e6d90919063ffffffff16565b90506000821115613bc357613bc282600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b6000811115613bf957613bf881600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b50505050505050505b6000613c2a6064613c1c868c613d5290919063ffffffff16565b613e6d90919063ffffffff16565b90506000613c546064613c468a8d613d5290919063ffffffff16565b613e6d90919063ffffffff16565b9050613c748183613c659190614fbd565b8b6140a990919063ffffffff16565b9950613c818c3084613096565b6000811115613cd357613cb78c600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613096565b613ccc816002546140a990919063ffffffff16565b6002819055505b5050505050505b613ce5868686613096565b5050505b505050565b6000838311158290613d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2d91906142c2565b60405180910390fd5b5060008385613d459190615699565b9050809150509392505050565b6000808303613d645760009050613dc6565b60008284613d729190614b2e565b9050828482613d819190614efa565b14613dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613db89061573f565b60405180910390fd5b809150505b92915050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000613eaf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140f3565b905092915050565b6000600267ffffffffffffffff811115613ed457613ed36144c8565b5b604051908082528060200260200182016040528015613f025781602001602082028036833780820191505090505b5090503081600081518110613f1a57613f19614ad0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613f8b57613f8a614ad0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ff230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685612ecd565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed17398460008486426040518663ffffffff1660e01b8152600401614056959493929190615858565b6000604051808303816000875af1158015614075573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061409e9190615949565b50505050565b505050565b60006140eb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613cee565b905092915050565b6000808311829061413a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161413191906142c2565b60405180910390fd5b50600083856141499190614efa565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061418182614156565b9050919050565b61419181614176565b82525050565b60006020820190506141ac6000830184614188565b92915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6141d9816141c6565b81146141e457600080fd5b50565b6000813590506141f6816141d0565b92915050565b600060208284031215614212576142116141bc565b5b6000614220848285016141e7565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614263578082015181840152602081019050614248565b83811115614272576000848401525b50505050565b6000601f19601f8301169050919050565b600061429482614229565b61429e8185614234565b93506142ae818560208601614245565b6142b781614278565b840191505092915050565b600060208201905081810360008301526142dc8184614289565b905092915050565b6142ed81614176565b81146142f857600080fd5b50565b60008135905061430a816142e4565b92915050565b60008115159050919050565b61432581614310565b811461433057600080fd5b50565b6000813590506143428161431c565b92915050565b6000806040838503121561435f5761435e6141bc565b5b600061436d858286016142fb565b925050602061437e85828601614333565b9150509250929050565b6000806040838503121561439f5761439e6141bc565b5b60006143ad858286016142fb565b92505060206143be858286016141e7565b9150509250929050565b6143d181614310565b82525050565b60006020820190506143ec60008301846143c8565b92915050565b6000819050919050565b600061441761441261440d84614156565b6143f2565b614156565b9050919050565b6000614429826143fc565b9050919050565b600061443b8261441e565b9050919050565b61444b81614430565b82525050565b60006020820190506144666000830184614442565b92915050565b614475816141c6565b82525050565b6000602082019050614490600083018461446c565b92915050565b6000602082840312156144ac576144ab6141bc565b5b60006144ba848285016142fb565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61450082614278565b810181811067ffffffffffffffff8211171561451f5761451e6144c8565b5b80604052505050565b60006145326141b2565b905061453e82826144f7565b919050565b600067ffffffffffffffff82111561455e5761455d6144c8565b5b602082029050602081019050919050565b600080fd5b600061458761458284614543565b614528565b905080838252602082019050602084028301858111156145aa576145a961456f565b5b835b818110156145d357806145bf88826142fb565b8452602084019350506020810190506145ac565b5050509392505050565b600082601f8301126145f2576145f16144c3565b5b8135614602848260208601614574565b91505092915050565b600067ffffffffffffffff821115614626576146256144c8565b5b602082029050602081019050919050565b600061464a6146458461460b565b614528565b9050808382526020820190506020840283018581111561466d5761466c61456f565b5b835b81811015614696578061468288826141e7565b84526020840193505060208101905061466f565b5050509392505050565b600082601f8301126146b5576146b46144c3565b5b81356146c5848260208601614637565b91505092915050565b600080604083850312156146e5576146e46141bc565b5b600083013567ffffffffffffffff811115614703576147026141c1565b5b61470f858286016145dd565b925050602083013567ffffffffffffffff8111156147305761472f6141c1565b5b61473c858286016146a0565b9150509250929050565b60008060006060848603121561475f5761475e6141bc565b5b600061476d868287016142fb565b935050602061477e868287016142fb565b925050604061478f868287016141e7565b9150509250925092565b600060ff82169050919050565b6147af81614799565b82525050565b60006020820190506147ca60008301846147a6565b92915050565b6000602082840312156147e6576147e56141bc565b5b60006147f484828501614333565b91505092915050565b600061480882614156565b9050919050565b614818816147fd565b82525050565b6000602082019050614833600083018461480f565b92915050565b60008060008060008060c08789031215614856576148556141bc565b5b600061486489828a016141e7565b965050602061487589828a016141e7565b955050604061488689828a016141e7565b945050606061489789828a016141e7565b93505060806148a889828a016141e7565b92505060a06148b989828a016141e7565b9150509295509295509295565b600080604083850312156148dd576148dc6141bc565b5b60006148eb858286016142fb565b92505060206148fc858286016142fb565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061493c602083614234565b915061494782614906565b602082019050919050565b6000602082019050818103600083015261496b8161492f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806149b957607f821691505b6020821081036149cc576149cb614972565b5b50919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b6000614a08601e83614234565b9150614a13826149d2565b602082019050919050565b60006020820190508181036000830152614a37816149fb565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a9a602283614234565b9150614aa582614a3e565b604082019050919050565b60006020820190508181036000830152614ac981614a8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b39826141c6565b9150614b44836141c6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b7d57614b7c614aff565b5b828202905092915050565b6000614b93826141c6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614bc557614bc4614aff565b5b600182019050919050565b600081519050614bdf816141d0565b92915050565b600060208284031215614bfb57614bfa6141bc565b5b6000614c0984828501614bd0565b91505092915050565b6000604082019050614c276000830185614188565b614c34602083018461446c565b9392505050565b600081519050614c4a8161431c565b92915050565b600060208284031215614c6657614c656141bc565b5b6000614c7484828501614c3b565b91505092915050565b6000606082019050614c926000830186614188565b614c9f6020830185614188565b614cac604083018461446c565b949350505050565b7f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60008201527f2031352500000000000000000000000000000000000000000000000000000000602082015250565b6000614d10602483614234565b9150614d1b82614cb4565b604082019050919050565b60006020820190508181036000830152614d3f81614d03565b9050919050565b600060c082019050614d5b600083018961446c565b614d68602083018861446c565b614d75604083018761446c565b614d82606083018661446c565b614d8f608083018561446c565b614d9c60a083018461446c565b979650505050505050565b7f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d60008201527f696e757465730000000000000000000000000000000000000000000000000000602082015250565b6000614e03602683614234565b9150614e0e82614da7565b604082019050919050565b60006020820190508181036000830152614e3281614df6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e95602683614234565b9150614ea082614e39565b604082019050919050565b60006020820190508181036000830152614ec481614e88565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f05826141c6565b9150614f10836141c6565b925082614f2057614f1f614ecb565b5b828204905092915050565b7f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360008201527f207468616e203125000000000000000000000000000000000000000000000000602082015250565b6000614f87602883614234565b9150614f9282614f2b565b604082019050919050565b60006020820190508181036000830152614fb681614f7a565b9050919050565b6000614fc8826141c6565b9150614fd3836141c6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561500857615007614aff565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615049601b83614234565b915061505482615013565b602082019050919050565b600060208201905081810360008301526150788161503c565b9050919050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150db602483614234565b91506150e68261507f565b604082019050919050565b6000602082019050818103600083015261510a816150ce565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061516d602283614234565b915061517882615111565b604082019050919050565b6000602082019050818103600083015261519c81615160565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006151ff602583614234565b915061520a826151a3565b604082019050919050565b6000602082019050818103600083015261522e816151f2565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615291602383614234565b915061529c82615235565b604082019050919050565b600060208201905081810360008301526152c081615284565b9050919050565b7f4942455032303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615323602683614234565b915061532e826152c7565b604082019050919050565b6000602082019050818103600083015261535281615316565b9050919050565b7f4942455032303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006153b5602483614234565b91506153c082615359565b604082019050919050565b600060208201905081810360008301526153e4816153a8565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b6000615421602083614234565b915061542c826153eb565b602082019050919050565b6000602082019050818103600083015261545081615414565b9050919050565b7f636f6f6c646f776e20706572696f642061637469766500000000000000000000600082015250565b600061548d601683614234565b915061549882615457565b602082019050919050565b600060208201905081810360008301526154bc81615480565b9050919050565b7f796f75207368616c6c206e6f7420706173730000000000000000000000000000600082015250565b60006154f9601283614234565b9150615504826154c3565b602082019050919050565b60006020820190508181036000830152615528816154ec565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b6000615565601883614234565b91506155708261552f565b602082019050919050565b6000602082019050818103600083015261559481615558565b9050919050565b7f546f6f206d616e7920545820696e20626c6f636b000000000000000000000000600082015250565b60006155d1601483614234565b91506155dc8261559b565b602082019050919050565b60006020820190508181036000830152615600816155c4565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000615663602483614234565b915061566e82615607565b604082019050919050565b6000602082019050818103600083015261569281615656565b9050919050565b60006156a4826141c6565b91506156af836141c6565b9250828210156156c2576156c1614aff565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615729602183614234565b9150615734826156cd565b604082019050919050565b600060208201905081810360008301526157588161571c565b9050919050565b6000819050919050565b600061578461577f61577a8461575f565b6143f2565b6141c6565b9050919050565b61579481615769565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6157cf81614176565b82525050565b60006157e183836157c6565b60208301905092915050565b6000602082019050919050565b60006158058261579a565b61580f81856157a5565b935061581a836157b6565b8060005b8381101561584b57815161583288826157d5565b975061583d836157ed565b92505060018101905061581e565b5085935050505092915050565b600060a08201905061586d600083018861446c565b61587a602083018761578b565b818103604083015261588c81866157fa565b905061589b6060830185614188565b6158a8608083018461446c565b9695505050505050565b60006158c56158c08461460b565b614528565b905080838252602082019050602084028301858111156158e8576158e761456f565b5b835b8181101561591157806158fd8882614bd0565b8452602084019350506020810190506158ea565b5050509392505050565b600082601f8301126159305761592f6144c3565b5b81516159408482602086016158b2565b91505092915050565b60006020828403121561595f5761595e6141bc565b5b600082015167ffffffffffffffff81111561597d5761597c6141c1565b5b6159898482850161591b565b9150509291505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207f6d45af1d237c6ea14668d6c8560afeeb112962d9dc0cf0811b8f0aafe5cac564736f6c634300080d0033

Deployed Bytecode Sourcemap

15383:14319:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15555:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28117:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3266:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20070:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4180:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15470:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3587:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15626:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16942:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19871:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29138:561;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4357:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19276:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4710:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23511:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15520:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16550:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15699;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23377:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16171:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19658:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21846:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20392:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20686:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21398:146;;;;;;;;;;;;;:::i;:::-;;3703:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7158:148;;;;;;;;;;;;;:::i;:::-;;22381:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15896:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20531:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19414:232;;;;;;;;;;;;;:::i;:::-;;16880:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6944:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15944:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16099;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3374:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21552:286;;;;;;;;;;;;;:::i;:::-;;22601:768;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21974:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16241:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16272:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4936:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20793:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3838:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16138:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16829;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16411:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20904:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16017:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4021:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16059:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16209:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7314:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15986:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21090:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20259:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15555:64;;;;;;;;;;;;;:::o;28117:105::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28196:18:::1;28207:6;28196:10;:18::i;:::-;28117:105:::0;:::o;3266:100::-;3320:13;3353:5;3346:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3266:100;:::o;20070:181::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20185:8:::1;20154:19;:28;20174:7;20154:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20225:7;20209:34;;;20234:8;20209:34;;;;;;:::i;:::-;;;;;;;;20070:181:::0;;:::o;4180:169::-;4263:4;4280:39;4289:12;:10;:12::i;:::-;4303:7;4312:6;4280:8;:39::i;:::-;4337:4;4330:11;;4180:169;;;;:::o;15470:41::-;;;;;;;;;;;;;:::o;3587:108::-;3648:7;3675:12;;3668:19;;3587:108;:::o;15626:63::-;;;;;;;;;;;;;:::o;16942:32::-;;;;:::o;19871:187::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19969:4:::1;19939:19;:27;19959:6;19939:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;20004:6;19984:9;;:27;;;;;;;;;;;;;;;;;;20027:23;20043:6;20027:23;;;;;;:::i;:::-;;;;;;;;19871:187:::0;:::o;29138:561::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29310:6:::1;:13;29285:14;:21;:38;29277:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29402:3;29377:14;:21;:28;;29369:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;29460:9;29455:237;29479:14;:21;29475:1;:25;29455:237;;;29522:14;29539;29554:1;29539:17;;;;;;;;:::i;:::-;;;;;;;;29522:34;;29571:21;29608:6;29595;29602:1;29595:9;;;;;;;;:::i;:::-;;;;;;;;:20;;;;:::i;:::-;29571:44;;29630:50;29646:10;29658:6;29666:13;29630:15;:50::i;:::-;29507:185;;29502:3;;;;;:::i;:::-;;;;29455:237;;;;29138:561:::0;;:::o;4357:345::-;4470:4;4487:36;4497:6;4505:9;4516:6;4487:9;:36::i;:::-;4534:138;4543:6;4551:12;:10;:12::i;:::-;4565:106;4603:6;4565:106;;;;;;;;;;;;;;;;;:11;:19;4577:6;4565:19;;;;;;;;;;;;;;;:33;4585:12;:10;:12::i;:::-;4565:33;;;;;;;;;;;;;;;;:37;;:106;;;;;:::i;:::-;4534:8;:138::i;:::-;4690:4;4683:11;;4357:345;;;;;:::o;19276:93::-;19334:5;19359:2;19352:9;;19276:93;:::o;4710:218::-;4798:4;4815:83;4824:12;:10;:12::i;:::-;4838:7;4847:50;4886:10;4847:11;:25;4859:12;:10;:12::i;:::-;4847:25;;;;;;;;;;;;;;;:34;4873:7;4847:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;4815:8;:83::i;:::-;4916:4;4909:11;;4710:218;;;;:::o;23511:100::-;23564:4;23588:6;:15;23595:7;23588:15;;;;;;;;;;;;;;;;;;;;;;;;;23581:22;;23511:100;;;:::o;15520:28::-;;;;;;;;;;;;;:::o;16550:34::-;;;;;;;;;;;;;:::o;15699:::-;;;;;;;;;;;;;:::o;23377:126::-;23443:4;23467:19;:28;23487:7;23467:28;;;;;;;;;;;;;;;;;;;;;;;;;23460:35;;23377:126;;;:::o;16171:31::-;;;;:::o;19658:205::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19762:4:::1;19732:19;:27;19752:6;19732:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;19803:6;19777:15;;:33;;;;;;;;;;;;;;;;;;19826:29;19848:6;19826:29;;;;;;:::i;:::-;;;;;;;;19658:205:::0;:::o;21846:120::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21951:6:::1;21941;:17;;;;:::i;:::-;21920:18;:38;;;;21846:120:::0;:::o;20392:131::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20474:5:::1;20456:6;:15;20463:7;20456:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;20495:20;20507:7;20495:20;;;;;;:::i;:::-;;;;;;;;20392:131:::0;:::o;20686:99::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20772:5:::1;20755:14;;:22;;;;;;;;;;;;;;;;;;20686:99:::0;:::o;21398:146::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21445:17:::1;21465:21;21445:41;;21505:10;21497:28;;:39;21526:9;21497:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21434:110;21398:146::o:0;3703:127::-;3777:7;3804:9;:18;3814:7;3804:18;;;;;;;;;;;;;;;;3797:25;;3703:127;;;:::o;7158:148::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7265:1:::1;7228:40;;7249:6;;;;;;;;;;;7228:40;;;;;;;;;;;;7296:1;7279:6;;:19;;;;;;;;;;;;;;;;;;7158:148::o:0;22381:212::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22482:4:::1;22450:19;:29;22470:8;22450:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;22543:4;22497:33;:43;22531:8;22497:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;22558:27;22576:8;22558:17;:27::i;:::-;22381:212:::0;:::o;15896:38::-;;;;;;;;;;;;;:::o;20531:147::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20664:6:::1;20620:33;:41;20654:6;20620:41;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;20531:147:::0;;:::o;19414:232::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19478:14:::1;;;;;;;;;;;19477:15;19469:24;;;::::0;::::1;;19521:4;19504:14;;:21;;;;;;;;;;;;;;;;;;19550:12;19536:11;:26;;;;19591:15;19573;:33;;;;19622:16;;;;;;;;;;19414:232::o:0;16880:30::-;;;;:::o;6944:79::-;6982:7;7009:6;;;;;;;;;;;7002:13;;6944:79;:::o;15944:32::-;;;;;;;;;;;;;:::o;16099:::-;;;;:::o;3374:104::-;3430:13;3463:7;3456:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3374:104;:::o;21552:286::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21601:17:::1;21628:3;;;;;;;;;;;21621:21;;;21651:4;21621:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21601:56;;21675:3;;;;;;;;;;;21668:19;;;21696:4;21703:17;21717:2;21703:9;:13;;:17;;;;:::i;:::-;21668:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21739:3;;;;;;;;;;;21732:24;;;21765:4;21771:10;21782:9;21732:60;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21808:22;21820:9;21808:22;;;;;;:::i;:::-;;;;;;;;21590:248;21552:286::o:0;22601:768::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22808:12:::1;22789:16;:31;;;;22844:7;22831:10;:20;;;;22882:13;22862:17;:33;;;;22920:8;22906:11;:22;;;;22951:6;22939:9;:18;;;;22981:7;22968:10;:20;;;;23017:33;23039:10;;23017:17;;:21;;:33;;;;:::i;:::-;23001:13;:49;;;;23076:31;23097:9;;23076:16;;:20;;:31;;;;:::i;:::-;23061:12;:46;;;;23158:2;23141:13;;:19;;:41;;;;;23180:2;23164:12;;:18;;23141:41;23133:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;23241:120;23252:17;;23271:11;;23284:10;;23296:16;;23339:10;;23351:9;;23241:120;;;;;;;;;;;:::i;:::-;;;;;;;;22601:768:::0;;;;;;:::o;21974:140::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22065:41:::1;22094:4;22100:5;22065:28;:41::i;:::-;21974:140:::0;;:::o;16241:24::-;;;;:::o;16272:25::-;;;;:::o;4936:286::-;5029:4;5046:146;5055:12;:10;:12::i;:::-;5069:7;5078:113;5117:15;5078:113;;;;;;;;;;;;;;;;;:11;:25;5090:12;:10;:12::i;:::-;5078:25;;;;;;;;;;;;;;;:34;5104:7;5078:34;;;;;;;;;;;;;;;;:38;;:113;;;;;:::i;:::-;5046:8;:146::i;:::-;5210:4;5203:11;;4936:286;;;;:::o;20793:103::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20883:5:::1;20864:16;;:24;;;;;;;;;;;;;;;;;;20793:103:::0;:::o;3838:175::-;3924:4;3941:42;3951:12;:10;:12::i;:::-;3965:9;3976:6;3941:9;:42::i;:::-;4001:4;3994:11;;3838:175;;;;:::o;16138:26::-;;;;:::o;16829:::-;;;;:::o;16411:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;20904:174::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20992:3:::1;20983:5;:12;;20975:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21065:5;21049:13;:21;;;;20904:174:::0;:::o;16017:35::-;;;;;;;;;;;;;:::o;4021:151::-;4110:7;4137:11;:18;4149:5;4137:18;;;;;;;;;;;;;;;:27;4156:7;4137:27;;;;;;;;;;;;;;;;4130:34;;4021:151;;;;:::o;16059:33::-;;;;:::o;16209:25::-;;;;:::o;7314:244::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7423:1:::1;7403:22;;:8;:22;;::::0;7395:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7513:8;7484:38;;7505:6;;;;;;;;;;;7484:38;;;;;;;;;;;;7542:8;7533:6;;:17;;;;;;;;;;;;;;;;;;7314:244:::0;:::o;15986:24::-;;;;:::o;21090:218::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21174:6:::1;21165:5;:16;;;;:::i;:::-;21157:24;;21224:3;21209:12;;:18;;;;:::i;:::-;21200:5;:27;;21192:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;21295:5;21283:9;:17;;;;21090:218:::0;:::o;20259:125::-;7081:12;:10;:12::i;:::-;7071:22;;:6;;;;;;;;;;;:22;;;7063:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20338:4:::1;20320:6;:15;20327:7;20320:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;20358:18;20368:7;20358:18;;;;;;:::i;:::-;;;;;;;;20259:125:::0;:::o;500:179::-;558:7;578:9;594:1;590;:5;;;;:::i;:::-;578:17;;619:1;614;:6;;606:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;670:1;663:8;;;500:179;;;;:::o;124:98::-;177:7;204:10;197:17;;124:98;:::o;28328:802::-;28393:26;28440:16;;28422:17;;:34;;;;:::i;:::-;28393:63;;28467:20;28503:9;;28490:10;;:22;;;;:::i;:::-;28467:45;;28523:17;28562:12;28543:18;:31;;;;:::i;:::-;28523:51;;28585:21;28609:39;28638:9;28629:3;28610:18;:22;;;;:::i;:::-;28609:28;;:39;;;;:::i;:::-;28585:63;;28682:15;28700:33;28723:9;28714:3;28701:12;:16;;;;:::i;:::-;28700:22;;:33;;;;:::i;:::-;28682:51;;28769:23;28795:41;28832:3;28813:13;28796:14;:30;;;;:::i;:::-;28795:36;;:41;;;;:::i;:::-;28769:67;;28847:17;28867:35;28898:3;28885:7;28868:14;:24;;;;:::i;:::-;28867:30;;:35;;;;:::i;:::-;28847:55;;28937:1;28919:15;:19;28915:102;;;28955:50;28972:15;28989;;;;;;;;;;;28955:16;:50::i;:::-;28915:102;29053:1;29041:9;:13;29037:84;;;29071:38;29088:9;29099;;;;;;;;;;;29071:16;:38::i;:::-;29037:84;28380:750;;;;;;;28328:802;:::o;6162:346::-;6281:1;6264:19;;:5;:19;;;6256:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6362:1;6343:21;;:7;:21;;;6335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6446:6;6416:11;:18;6428:5;6416:18;;;;;;;;;;;;;;;:27;6435:7;6416:27;;;;;;;;;;;;;;;:36;;;;6484:7;6468:32;;6477:5;6468:32;;;6493:6;6468:32;;;;;;:::i;:::-;;;;;;;;6162:346;;;:::o;5230:538::-;5354:1;5336:20;;:6;:20;;;5328:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5438:1;5417:23;;:9;:23;;;5409:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5493:47;5514:6;5522:9;5533:6;5493:20;:47::i;:::-;5573:70;5595:6;5573:70;;;;;;;;;;;;;;;;;:9;:17;5583:6;5573:17;;;;;;;;;;;;;;;;:21;;:70;;;;;:::i;:::-;5553:9;:17;5563:6;5553:17;;;;;;;;;;;;;;;:90;;;;5677:32;5702:6;5677:9;:20;5687:9;5677:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;5654:9;:20;5664:9;5654:20;;;;;;;;;;;;;;;:55;;;;5742:9;5725:35;;5734:6;5725:35;;;5753:6;5725:35;;;;;;:::i;:::-;;;;;;;;5230:538;;;:::o;23619:4013::-;23735:1;23719:18;;:4;:18;;;23711:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23813:1;23799:16;;:2;:16;;;23791:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23876:6;:12;23883:4;23876:12;;;;;;;;;;;;;;;;;;;;;;;;;23875:13;:28;;;;;23893:6;:10;23900:2;23893:10;;;;;;;;;;;;;;;;;;;;;;;;;23892:11;23875:28;23867:37;;;;;;23917:21;23949:15;23975:14;24007:33;:39;24041:4;24007:39;;;;;;;;;;;;;;;;;;;;;;;;;24002:142;;24071:14;;;;;;;;;;;24063:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;24002:142;24170:1;24160:6;:11;24156:3424;;24188:28;24204:4;24210:2;24214:1;24188:15;:28::i;:::-;24231:7;;;;;24156:3424;24294:19;:25;24314:4;24294:25;;;;;;;;;;;;;;;;;;;;;;;;;24293:26;:54;;;;;24324:19;:23;24344:2;24324:23;;;;;;;;;;;;;;;;;;;;;;;;;24323:24;24293:54;24275:3305;;;24374:14;24391:25;:29;24417:2;24391:29;;;;;;;;;;;;;;;;;;;;;;;;;24374:46;;24439:9;24435:1494;;;24485:17;;24469:33;;24531:11;;24521:21;;24570:10;;24561:19;;24605:14;;;;;;;;;;;24601:269;;;24709:13;;24667:28;:39;24696:9;24667:39;;;;;;;;;;;;;;;;:55;;;;:::i;:::-;24648:15;:74;;24640:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;24835:15;24793:28;:39;24822:9;24793:39;;;;;;;;;;;;;;;:57;;;;24601:269;24435:1494;;;24954:16;;24938:32;;24999:10;;24989:20;;25037:9;;25028:18;;25071:14;;;;;;;;;;;25067:598;;;25143:1;25129:11;;:15;;;;:::i;:::-;25114:12;:30;25106:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25208:13;;25193:11;:28;;25185:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25315:12;25276:24;:35;25301:9;25276:35;;;;;;;;;;;;;;;;:51;25268:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25439:13;;25397:28;:39;25426:9;25397:39;;;;;;;;;;;;;;;;:55;;;;:::i;:::-;25378:15;:74;;25370:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;25561:12;25523:24;:35;25548:9;25523:35;;;;;;;;;;;;;;;:50;;;;25634:15;25592:28;:39;25621:9;25592:39;;;;;;;;;;;;;;;:57;;;;25067:598;25685:16;;;;;;;;;;;25681:233;;;25718:32;25753:13;25763:2;25753:9;:13::i;:::-;25718:48;;25826:9;;25816:6;25789:24;:33;;;;:::i;:::-;:46;;25781:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;25703:211;25681:233;24435:1494;25945:17;25965:25;25983:6;25965:13;:17;;:25;;;;:::i;:::-;25945:45;;26007:28;26038:24;26056:4;26038:9;:24::i;:::-;26007:55;;26079:12;26118:18;;26094:20;:42;;26079:57;;26157:7;:43;;;;;26169:25;:31;26195:4;26169:31;;;;;;;;;;;;;;;;;;;;;;;;;26168:32;26157:43;26153:991;;;26221:22;26244:20;26221:43;;26283:26;26330:16;;26312:17;;:34;;;;:::i;:::-;26283:63;;26365:20;26401:9;;26388:10;;:22;;;;:::i;:::-;26365:45;;26429:16;26467:12;26448:18;:31;;;;:::i;:::-;26429:50;;26498:21;26522:38;26551:8;26542:3;26523:18;:22;;;;:::i;:::-;26522:28;;:38;;;;:::i;:::-;26498:62;;26602:15;26620:32;26643:8;26634:3;26621:12;:16;;;;:::i;:::-;26620:22;;:32;;;;:::i;:::-;26602:50;;26696:23;26722:41;26759:3;26740:13;26723:14;:30;;;;:::i;:::-;26722:36;;:41;;;;:::i;:::-;26696:67;;26782:17;26802:35;26833:3;26820:7;26803:14;:24;;;;:::i;:::-;26802:30;;:35;;;;:::i;:::-;26782:55;;26880:1;26862:15;:19;26858:118;;;26906:50;26923:15;26940;;;;;;;;;;;26906:16;:50::i;:::-;26858:118;27028:1;27016:9;:13;27012:102;;;27054:38;27071:9;27082;;;;;;;;;;;27054:16;:38::i;:::-;27012:102;26202:942;;;;;;;;26153:991;27160:12;27175:30;27201:3;27175:21;27186:9;27175:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;27160:45;;27220:18;27241:28;27265:3;27241:19;27252:7;27241:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;27220:49;;27295:29;27313:10;27306:4;:17;;;;:::i;:::-;27295:6;:10;;:29;;;;:::i;:::-;27286:38;;27341:42;27357:4;27371;27378;27341:15;:42::i;:::-;27417:1;27404:10;:14;27400:156;;;27439:39;27455:4;27461;;;;;;;;;;;27467:10;27439:15;:39::i;:::-;27512:28;27529:10;27512:12;;:16;;:28;;;;:::i;:::-;27497:12;:43;;;;27400:156;24359:3221;;;;;;24275:3305;27590:33;27606:4;27612:2;27616:6;27590:15;:33::i;:::-;23698:3934;;;23619:4013;;;;:::o;831:190::-;917:7;950:1;945;:6;;953:12;937:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;977:9;993:1;989;:5;;;;:::i;:::-;977:17;;1012:1;1005:8;;;831:190;;;;;:::o;1029:248::-;1087:7;1116:1;1111;:6;1107:47;;1141:1;1134:8;;;;1107:47;1166:9;1182:1;1178;:5;;;;:::i;:::-;1166:17;;1211:1;1206;1202;:5;;;;:::i;:::-;:10;1194:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1268:1;1261:8;;;1029:248;;;;;:::o;22122:188::-;22239:5;22205:25;:31;22231:4;22205:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22296:5;22262:40;;22290:4;22262:40;;;;;;;;;;;;22122:188;;:::o;1285:132::-;1343:7;1370:39;1374:1;1377;1370:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1363:46;;1285:132;;;;:::o;27642:467::-;27726:21;27764:1;27750:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27726:40;;27795:4;27777;27782:1;27777:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27821:3;;;;;;;;;;;27811:4;27816:1;27811:7;;;;;;;;:::i;:::-;;;;;;;:13;;;;;;;;;;;27835:62;27852:4;27867:15;;;;;;;;;;;27885:11;27835:8;:62::i;:::-;27908:15;;;;;;;;;;;:40;;;27963:11;27989:1;28033:4;28052:8;28075:15;27908:193;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27715:394;27642:467;;:::o;6516:91::-;;;;:::o;687:136::-;745:7;772:43;776:1;779;772:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;765:50;;687:136;;;;:::o;1425:189::-;1511:7;1543:1;1539;:5;1546:12;1531:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1570:9;1586:1;1582;:5;;;;:::i;:::-;1570:17;;1605:1;1598:8;;;1425:189;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:75::-;626:6;659:2;653:9;643:19;;593:75;:::o;674:117::-;783:1;780;773:12;797:117;906:1;903;896:12;920:77;957:7;986:5;975:16;;920:77;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:329::-;1335:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:119;;;1390:79;;:::i;:::-;1352:119;1510:1;1535:53;1580:7;1571:6;1560:9;1556:22;1535:53;:::i;:::-;1525:63;;1481:117;1276:329;;;;:::o;1611:99::-;1663:6;1697:5;1691:12;1681:22;;1611:99;;;:::o;1716:169::-;1800:11;1834:6;1829:3;1822:19;1874:4;1869:3;1865:14;1850:29;;1716:169;;;;:::o;1891:307::-;1959:1;1969:113;1983:6;1980:1;1977:13;1969:113;;;2068:1;2063:3;2059:11;2053:18;2049:1;2044:3;2040:11;2033:39;2005:2;2002:1;1998:10;1993:15;;1969:113;;;2100:6;2097:1;2094:13;2091:101;;;2180:1;2171:6;2166:3;2162:16;2155:27;2091:101;1940:258;1891:307;;;:::o;2204:102::-;2245:6;2296:2;2292:7;2287:2;2280:5;2276:14;2272:28;2262:38;;2204:102;;;:::o;2312:364::-;2400:3;2428:39;2461:5;2428:39;:::i;:::-;2483:71;2547:6;2542:3;2483:71;:::i;:::-;2476:78;;2563:52;2608:6;2603:3;2596:4;2589:5;2585:16;2563:52;:::i;:::-;2640:29;2662:6;2640:29;:::i;:::-;2635:3;2631:39;2624:46;;2404:272;2312:364;;;;:::o;2682:313::-;2795:4;2833:2;2822:9;2818:18;2810:26;;2882:9;2876:4;2872:20;2868:1;2857:9;2853:17;2846:47;2910:78;2983:4;2974:6;2910:78;:::i;:::-;2902:86;;2682:313;;;;:::o;3001:122::-;3074:24;3092:5;3074:24;:::i;:::-;3067:5;3064:35;3054:63;;3113:1;3110;3103:12;3054:63;3001:122;:::o;3129:139::-;3175:5;3213:6;3200:20;3191:29;;3229:33;3256:5;3229:33;:::i;:::-;3129:139;;;;:::o;3274:90::-;3308:7;3351:5;3344:13;3337:21;3326:32;;3274:90;;;:::o;3370:116::-;3440:21;3455:5;3440:21;:::i;:::-;3433:5;3430:32;3420:60;;3476:1;3473;3466:12;3420:60;3370:116;:::o;3492:133::-;3535:5;3573:6;3560:20;3551:29;;3589:30;3613:5;3589:30;:::i;:::-;3492:133;;;;:::o;3631:468::-;3696:6;3704;3753:2;3741:9;3732:7;3728:23;3724:32;3721:119;;;3759:79;;:::i;:::-;3721:119;3879:1;3904:53;3949:7;3940:6;3929:9;3925:22;3904:53;:::i;:::-;3894:63;;3850:117;4006:2;4032:50;4074:7;4065:6;4054:9;4050:22;4032:50;:::i;:::-;4022:60;;3977:115;3631:468;;;;;:::o;4105:474::-;4173:6;4181;4230:2;4218:9;4209:7;4205:23;4201:32;4198:119;;;4236:79;;:::i;:::-;4198:119;4356:1;4381:53;4426:7;4417:6;4406:9;4402:22;4381:53;:::i;:::-;4371:63;;4327:117;4483:2;4509:53;4554:7;4545:6;4534:9;4530:22;4509:53;:::i;:::-;4499:63;;4454:118;4105:474;;;;;:::o;4585:109::-;4666:21;4681:5;4666:21;:::i;:::-;4661:3;4654:34;4585:109;;:::o;4700:210::-;4787:4;4825:2;4814:9;4810:18;4802:26;;4838:65;4900:1;4889:9;4885:17;4876:6;4838:65;:::i;:::-;4700:210;;;;:::o;4916:60::-;4944:3;4965:5;4958:12;;4916:60;;;:::o;4982:142::-;5032:9;5065:53;5083:34;5092:24;5110:5;5092:24;:::i;:::-;5083:34;:::i;:::-;5065:53;:::i;:::-;5052:66;;4982:142;;;:::o;5130:126::-;5180:9;5213:37;5244:5;5213:37;:::i;:::-;5200:50;;5130:126;;;:::o;5262:153::-;5339:9;5372:37;5403:5;5372:37;:::i;:::-;5359:50;;5262:153;;;:::o;5421:185::-;5535:64;5593:5;5535:64;:::i;:::-;5530:3;5523:77;5421:185;;:::o;5612:276::-;5732:4;5770:2;5759:9;5755:18;5747:26;;5783:98;5878:1;5867:9;5863:17;5854:6;5783:98;:::i;:::-;5612:276;;;;:::o;5894:118::-;5981:24;5999:5;5981:24;:::i;:::-;5976:3;5969:37;5894:118;;:::o;6018:222::-;6111:4;6149:2;6138:9;6134:18;6126:26;;6162:71;6230:1;6219:9;6215:17;6206:6;6162:71;:::i;:::-;6018:222;;;;:::o;6246:329::-;6305:6;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6480:1;6505:53;6550:7;6541:6;6530:9;6526:22;6505:53;:::i;:::-;6495:63;;6451:117;6246:329;;;;:::o;6581:117::-;6690:1;6687;6680:12;6704:180;6752:77;6749:1;6742:88;6849:4;6846:1;6839:15;6873:4;6870:1;6863:15;6890:281;6973:27;6995:4;6973:27;:::i;:::-;6965:6;6961:40;7103:6;7091:10;7088:22;7067:18;7055:10;7052:34;7049:62;7046:88;;;7114:18;;:::i;:::-;7046:88;7154:10;7150:2;7143:22;6933:238;6890:281;;:::o;7177:129::-;7211:6;7238:20;;:::i;:::-;7228:30;;7267:33;7295:4;7287:6;7267:33;:::i;:::-;7177:129;;;:::o;7312:311::-;7389:4;7479:18;7471:6;7468:30;7465:56;;;7501:18;;:::i;:::-;7465:56;7551:4;7543:6;7539:17;7531:25;;7611:4;7605;7601:15;7593:23;;7312:311;;;:::o;7629:117::-;7738:1;7735;7728:12;7769:710;7865:5;7890:81;7906:64;7963:6;7906:64;:::i;:::-;7890:81;:::i;:::-;7881:90;;7991:5;8020:6;8013:5;8006:21;8054:4;8047:5;8043:16;8036:23;;8107:4;8099:6;8095:17;8087:6;8083:30;8136:3;8128:6;8125:15;8122:122;;;8155:79;;:::i;:::-;8122:122;8270:6;8253:220;8287:6;8282:3;8279:15;8253:220;;;8362:3;8391:37;8424:3;8412:10;8391:37;:::i;:::-;8386:3;8379:50;8458:4;8453:3;8449:14;8442:21;;8329:144;8313:4;8308:3;8304:14;8297:21;;8253:220;;;8257:21;7871:608;;7769:710;;;;;:::o;8502:370::-;8573:5;8622:3;8615:4;8607:6;8603:17;8599:27;8589:122;;8630:79;;:::i;:::-;8589:122;8747:6;8734:20;8772:94;8862:3;8854:6;8847:4;8839:6;8835:17;8772:94;:::i;:::-;8763:103;;8579:293;8502:370;;;;:::o;8878:311::-;8955:4;9045:18;9037:6;9034:30;9031:56;;;9067:18;;:::i;:::-;9031:56;9117:4;9109:6;9105:17;9097:25;;9177:4;9171;9167:15;9159:23;;8878:311;;;:::o;9212:710::-;9308:5;9333:81;9349:64;9406:6;9349:64;:::i;:::-;9333:81;:::i;:::-;9324:90;;9434:5;9463:6;9456:5;9449:21;9497:4;9490:5;9486:16;9479:23;;9550:4;9542:6;9538:17;9530:6;9526:30;9579:3;9571:6;9568:15;9565:122;;;9598:79;;:::i;:::-;9565:122;9713:6;9696:220;9730:6;9725:3;9722:15;9696:220;;;9805:3;9834:37;9867:3;9855:10;9834:37;:::i;:::-;9829:3;9822:50;9901:4;9896:3;9892:14;9885:21;;9772:144;9756:4;9751:3;9747:14;9740:21;;9696:220;;;9700:21;9314:608;;9212:710;;;;;:::o;9945:370::-;10016:5;10065:3;10058:4;10050:6;10046:17;10042:27;10032:122;;10073:79;;:::i;:::-;10032:122;10190:6;10177:20;10215:94;10305:3;10297:6;10290:4;10282:6;10278:17;10215:94;:::i;:::-;10206:103;;10022:293;9945:370;;;;:::o;10321:894::-;10439:6;10447;10496:2;10484:9;10475:7;10471:23;10467:32;10464:119;;;10502:79;;:::i;:::-;10464:119;10650:1;10639:9;10635:17;10622:31;10680:18;10672:6;10669:30;10666:117;;;10702:79;;:::i;:::-;10666:117;10807:78;10877:7;10868:6;10857:9;10853:22;10807:78;:::i;:::-;10797:88;;10593:302;10962:2;10951:9;10947:18;10934:32;10993:18;10985:6;10982:30;10979:117;;;11015:79;;:::i;:::-;10979:117;11120:78;11190:7;11181:6;11170:9;11166:22;11120:78;:::i;:::-;11110:88;;10905:303;10321:894;;;;;:::o;11221:619::-;11298:6;11306;11314;11363:2;11351:9;11342:7;11338:23;11334:32;11331:119;;;11369:79;;:::i;:::-;11331:119;11489:1;11514:53;11559:7;11550:6;11539:9;11535:22;11514:53;:::i;:::-;11504:63;;11460:117;11616:2;11642:53;11687:7;11678:6;11667:9;11663:22;11642:53;:::i;:::-;11632:63;;11587:118;11744:2;11770:53;11815:7;11806:6;11795:9;11791:22;11770:53;:::i;:::-;11760:63;;11715:118;11221:619;;;;;:::o;11846:86::-;11881:7;11921:4;11914:5;11910:16;11899:27;;11846:86;;;:::o;11938:112::-;12021:22;12037:5;12021:22;:::i;:::-;12016:3;12009:35;11938:112;;:::o;12056:214::-;12145:4;12183:2;12172:9;12168:18;12160:26;;12196:67;12260:1;12249:9;12245:17;12236:6;12196:67;:::i;:::-;12056:214;;;;:::o;12276:323::-;12332:6;12381:2;12369:9;12360:7;12356:23;12352:32;12349:119;;;12387:79;;:::i;:::-;12349:119;12507:1;12532:50;12574:7;12565:6;12554:9;12550:22;12532:50;:::i;:::-;12522:60;;12478:114;12276:323;;;;:::o;12605:104::-;12650:7;12679:24;12697:5;12679:24;:::i;:::-;12668:35;;12605:104;;;:::o;12715:142::-;12818:32;12844:5;12818:32;:::i;:::-;12813:3;12806:45;12715:142;;:::o;12863:254::-;12972:4;13010:2;12999:9;12995:18;12987:26;;13023:87;13107:1;13096:9;13092:17;13083:6;13023:87;:::i;:::-;12863:254;;;;:::o;13123:1057::-;13227:6;13235;13243;13251;13259;13267;13316:3;13304:9;13295:7;13291:23;13287:33;13284:120;;;13323:79;;:::i;:::-;13284:120;13443:1;13468:53;13513:7;13504:6;13493:9;13489:22;13468:53;:::i;:::-;13458:63;;13414:117;13570:2;13596:53;13641:7;13632:6;13621:9;13617:22;13596:53;:::i;:::-;13586:63;;13541:118;13698:2;13724:53;13769:7;13760:6;13749:9;13745:22;13724:53;:::i;:::-;13714:63;;13669:118;13826:2;13852:53;13897:7;13888:6;13877:9;13873:22;13852:53;:::i;:::-;13842:63;;13797:118;13954:3;13981:53;14026:7;14017:6;14006:9;14002:22;13981:53;:::i;:::-;13971:63;;13925:119;14083:3;14110:53;14155:7;14146:6;14135:9;14131:22;14110:53;:::i;:::-;14100:63;;14054:119;13123:1057;;;;;;;;:::o;14186:474::-;14254:6;14262;14311:2;14299:9;14290:7;14286:23;14282:32;14279:119;;;14317:79;;:::i;:::-;14279:119;14437:1;14462:53;14507:7;14498:6;14487:9;14483:22;14462:53;:::i;:::-;14452:63;;14408:117;14564:2;14590:53;14635:7;14626:6;14615:9;14611:22;14590:53;:::i;:::-;14580:63;;14535:118;14186:474;;;;;:::o;14666:182::-;14806:34;14802:1;14794:6;14790:14;14783:58;14666:182;:::o;14854:366::-;14996:3;15017:67;15081:2;15076:3;15017:67;:::i;:::-;15010:74;;15093:93;15182:3;15093:93;:::i;:::-;15211:2;15206:3;15202:12;15195:19;;14854:366;;;:::o;15226:419::-;15392:4;15430:2;15419:9;15415:18;15407:26;;15479:9;15473:4;15469:20;15465:1;15454:9;15450:17;15443:47;15507:131;15633:4;15507:131;:::i;:::-;15499:139;;15226:419;;;:::o;15651:180::-;15699:77;15696:1;15689:88;15796:4;15793:1;15786:15;15820:4;15817:1;15810:15;15837:320;15881:6;15918:1;15912:4;15908:12;15898:22;;15965:1;15959:4;15955:12;15986:18;15976:81;;16042:4;16034:6;16030:17;16020:27;;15976:81;16104:2;16096:6;16093:14;16073:18;16070:38;16067:84;;16123:18;;:::i;:::-;16067:84;15888:269;15837:320;;;:::o;16163:180::-;16303:32;16299:1;16291:6;16287:14;16280:56;16163:180;:::o;16349:366::-;16491:3;16512:67;16576:2;16571:3;16512:67;:::i;:::-;16505:74;;16588:93;16677:3;16588:93;:::i;:::-;16706:2;16701:3;16697:12;16690:19;;16349:366;;;:::o;16721:419::-;16887:4;16925:2;16914:9;16910:18;16902:26;;16974:9;16968:4;16964:20;16960:1;16949:9;16945:17;16938:47;17002:131;17128:4;17002:131;:::i;:::-;16994:139;;16721:419;;;:::o;17146:221::-;17286:34;17282:1;17274:6;17270:14;17263:58;17355:4;17350:2;17342:6;17338:15;17331:29;17146:221;:::o;17373:366::-;17515:3;17536:67;17600:2;17595:3;17536:67;:::i;:::-;17529:74;;17612:93;17701:3;17612:93;:::i;:::-;17730:2;17725:3;17721:12;17714:19;;17373:366;;;:::o;17745:419::-;17911:4;17949:2;17938:9;17934:18;17926:26;;17998:9;17992:4;17988:20;17984:1;17973:9;17969:17;17962:47;18026:131;18152:4;18026:131;:::i;:::-;18018:139;;17745:419;;;:::o;18170:180::-;18218:77;18215:1;18208:88;18315:4;18312:1;18305:15;18339:4;18336:1;18329:15;18356:180;18404:77;18401:1;18394:88;18501:4;18498:1;18491:15;18525:4;18522:1;18515:15;18542:348;18582:7;18605:20;18623:1;18605:20;:::i;:::-;18600:25;;18639:20;18657:1;18639:20;:::i;:::-;18634:25;;18827:1;18759:66;18755:74;18752:1;18749:81;18744:1;18737:9;18730:17;18726:105;18723:131;;;18834:18;;:::i;:::-;18723:131;18882:1;18879;18875:9;18864:20;;18542:348;;;;:::o;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:143::-;19192:5;19223:6;19217:13;19208:22;;19239:33;19266:5;19239:33;:::i;:::-;19135:143;;;;:::o;19284:351::-;19354:6;19403:2;19391:9;19382:7;19378:23;19374:32;19371:119;;;19409:79;;:::i;:::-;19371:119;19529:1;19554:64;19610:7;19601:6;19590:9;19586:22;19554:64;:::i;:::-;19544:74;;19500:128;19284:351;;;;:::o;19641:332::-;19762:4;19800:2;19789:9;19785:18;19777:26;;19813:71;19881:1;19870:9;19866:17;19857:6;19813:71;:::i;:::-;19894:72;19962:2;19951:9;19947:18;19938:6;19894:72;:::i;:::-;19641:332;;;;;:::o;19979:137::-;20033:5;20064:6;20058:13;20049:22;;20080:30;20104:5;20080:30;:::i;:::-;19979:137;;;;:::o;20122:345::-;20189:6;20238:2;20226:9;20217:7;20213:23;20209:32;20206:119;;;20244:79;;:::i;:::-;20206:119;20364:1;20389:61;20442:7;20433:6;20422:9;20418:22;20389:61;:::i;:::-;20379:71;;20335:125;20122:345;;;;:::o;20473:442::-;20622:4;20660:2;20649:9;20645:18;20637:26;;20673:71;20741:1;20730:9;20726:17;20717:6;20673:71;:::i;:::-;20754:72;20822:2;20811:9;20807:18;20798:6;20754:72;:::i;:::-;20836;20904:2;20893:9;20889:18;20880:6;20836:72;:::i;:::-;20473:442;;;;;;:::o;20921:223::-;21061:34;21057:1;21049:6;21045:14;21038:58;21130:6;21125:2;21117:6;21113:15;21106:31;20921:223;:::o;21150:366::-;21292:3;21313:67;21377:2;21372:3;21313:67;:::i;:::-;21306:74;;21389:93;21478:3;21389:93;:::i;:::-;21507:2;21502:3;21498:12;21491:19;;21150:366;;;:::o;21522:419::-;21688:4;21726:2;21715:9;21711:18;21703:26;;21775:9;21769:4;21765:20;21761:1;21750:9;21746:17;21739:47;21803:131;21929:4;21803:131;:::i;:::-;21795:139;;21522:419;;;:::o;21947:775::-;22180:4;22218:3;22207:9;22203:19;22195:27;;22232:71;22300:1;22289:9;22285:17;22276:6;22232:71;:::i;:::-;22313:72;22381:2;22370:9;22366:18;22357:6;22313:72;:::i;:::-;22395;22463:2;22452:9;22448:18;22439:6;22395:72;:::i;:::-;22477;22545:2;22534:9;22530:18;22521:6;22477:72;:::i;:::-;22559:73;22627:3;22616:9;22612:19;22603:6;22559:73;:::i;:::-;22642;22710:3;22699:9;22695:19;22686:6;22642:73;:::i;:::-;21947:775;;;;;;;;;:::o;22728:225::-;22868:34;22864:1;22856:6;22852:14;22845:58;22937:8;22932:2;22924:6;22920:15;22913:33;22728:225;:::o;22959:366::-;23101:3;23122:67;23186:2;23181:3;23122:67;:::i;:::-;23115:74;;23198:93;23287:3;23198:93;:::i;:::-;23316:2;23311:3;23307:12;23300:19;;22959:366;;;:::o;23331:419::-;23497:4;23535:2;23524:9;23520:18;23512:26;;23584:9;23578:4;23574:20;23570:1;23559:9;23555:17;23548:47;23612:131;23738:4;23612:131;:::i;:::-;23604:139;;23331:419;;;:::o;23756:225::-;23896:34;23892:1;23884:6;23880:14;23873:58;23965:8;23960:2;23952:6;23948:15;23941:33;23756:225;:::o;23987:366::-;24129:3;24150:67;24214:2;24209:3;24150:67;:::i;:::-;24143:74;;24226:93;24315:3;24226:93;:::i;:::-;24344:2;24339:3;24335:12;24328:19;;23987:366;;;:::o;24359:419::-;24525:4;24563:2;24552:9;24548:18;24540:26;;24612:9;24606:4;24602:20;24598:1;24587:9;24583:17;24576:47;24640:131;24766:4;24640:131;:::i;:::-;24632:139;;24359:419;;;:::o;24784:180::-;24832:77;24829:1;24822:88;24929:4;24926:1;24919:15;24953:4;24950:1;24943:15;24970:185;25010:1;25027:20;25045:1;25027:20;:::i;:::-;25022:25;;25061:20;25079:1;25061:20;:::i;:::-;25056:25;;25100:1;25090:35;;25105:18;;:::i;:::-;25090:35;25147:1;25144;25140:9;25135:14;;24970:185;;;;:::o;25161:227::-;25301:34;25297:1;25289:6;25285:14;25278:58;25370:10;25365:2;25357:6;25353:15;25346:35;25161:227;:::o;25394:366::-;25536:3;25557:67;25621:2;25616:3;25557:67;:::i;:::-;25550:74;;25633:93;25722:3;25633:93;:::i;:::-;25751:2;25746:3;25742:12;25735:19;;25394:366;;;:::o;25766:419::-;25932:4;25970:2;25959:9;25955:18;25947:26;;26019:9;26013:4;26009:20;26005:1;25994:9;25990:17;25983:47;26047:131;26173:4;26047:131;:::i;:::-;26039:139;;25766:419;;;:::o;26191:305::-;26231:3;26250:20;26268:1;26250:20;:::i;:::-;26245:25;;26284:20;26302:1;26284:20;:::i;:::-;26279:25;;26438:1;26370:66;26366:74;26363:1;26360:81;26357:107;;;26444:18;;:::i;:::-;26357:107;26488:1;26485;26481:9;26474:16;;26191:305;;;;:::o;26502:177::-;26642:29;26638:1;26630:6;26626:14;26619:53;26502:177;:::o;26685:366::-;26827:3;26848:67;26912:2;26907:3;26848:67;:::i;:::-;26841:74;;26924:93;27013:3;26924:93;:::i;:::-;27042:2;27037:3;27033:12;27026:19;;26685:366;;;:::o;27057:419::-;27223:4;27261:2;27250:9;27246:18;27238:26;;27310:9;27304:4;27300:20;27296:1;27285:9;27281:17;27274:47;27338:131;27464:4;27338:131;:::i;:::-;27330:139;;27057:419;;;:::o;27482:223::-;27622:34;27618:1;27610:6;27606:14;27599:58;27691:6;27686:2;27678:6;27674:15;27667:31;27482:223;:::o;27711:366::-;27853:3;27874:67;27938:2;27933:3;27874:67;:::i;:::-;27867:74;;27950:93;28039:3;27950:93;:::i;:::-;28068:2;28063:3;28059:12;28052:19;;27711:366;;;:::o;28083:419::-;28249:4;28287:2;28276:9;28272:18;28264:26;;28336:9;28330:4;28326:20;28322:1;28311:9;28307:17;28300:47;28364:131;28490:4;28364:131;:::i;:::-;28356:139;;28083:419;;;:::o;28508:221::-;28648:34;28644:1;28636:6;28632:14;28625:58;28717:4;28712:2;28704:6;28700:15;28693:29;28508:221;:::o;28735:366::-;28877:3;28898:67;28962:2;28957:3;28898:67;:::i;:::-;28891:74;;28974:93;29063:3;28974:93;:::i;:::-;29092:2;29087:3;29083:12;29076:19;;28735:366;;;:::o;29107:419::-;29273:4;29311:2;29300:9;29296:18;29288:26;;29360:9;29354:4;29350:20;29346:1;29335:9;29331:17;29324:47;29388:131;29514:4;29388:131;:::i;:::-;29380:139;;29107:419;;;:::o;29532:224::-;29672:34;29668:1;29660:6;29656:14;29649:58;29741:7;29736:2;29728:6;29724:15;29717:32;29532:224;:::o;29762:366::-;29904:3;29925:67;29989:2;29984:3;29925:67;:::i;:::-;29918:74;;30001:93;30090:3;30001:93;:::i;:::-;30119:2;30114:3;30110:12;30103:19;;29762:366;;;:::o;30134:419::-;30300:4;30338:2;30327:9;30323:18;30315:26;;30387:9;30381:4;30377:20;30373:1;30362:9;30358:17;30351:47;30415:131;30541:4;30415:131;:::i;:::-;30407:139;;30134:419;;;:::o;30559:222::-;30699:34;30695:1;30687:6;30683:14;30676:58;30768:5;30763:2;30755:6;30751:15;30744:30;30559:222;:::o;30787:366::-;30929:3;30950:67;31014:2;31009:3;30950:67;:::i;:::-;30943:74;;31026:93;31115:3;31026:93;:::i;:::-;31144:2;31139:3;31135:12;31128:19;;30787:366;;;:::o;31159:419::-;31325:4;31363:2;31352:9;31348:18;31340:26;;31412:9;31406:4;31402:20;31398:1;31387:9;31383:17;31376:47;31440:131;31566:4;31440:131;:::i;:::-;31432:139;;31159:419;;;:::o;31584:225::-;31724:34;31720:1;31712:6;31708:14;31701:58;31793:8;31788:2;31780:6;31776:15;31769:33;31584:225;:::o;31815:366::-;31957:3;31978:67;32042:2;32037:3;31978:67;:::i;:::-;31971:74;;32054:93;32143:3;32054:93;:::i;:::-;32172:2;32167:3;32163:12;32156:19;;31815:366;;;:::o;32187:419::-;32353:4;32391:2;32380:9;32376:18;32368:26;;32440:9;32434:4;32430:20;32426:1;32415:9;32411:17;32404:47;32468:131;32594:4;32468:131;:::i;:::-;32460:139;;32187:419;;;:::o;32612:223::-;32752:34;32748:1;32740:6;32736:14;32729:58;32821:6;32816:2;32808:6;32804:15;32797:31;32612:223;:::o;32841:366::-;32983:3;33004:67;33068:2;33063:3;33004:67;:::i;:::-;32997:74;;33080:93;33169:3;33080:93;:::i;:::-;33198:2;33193:3;33189:12;33182:19;;32841:366;;;:::o;33213:419::-;33379:4;33417:2;33406:9;33402:18;33394:26;;33466:9;33460:4;33456:20;33452:1;33441:9;33437:17;33430:47;33494:131;33620:4;33494:131;:::i;:::-;33486:139;;33213:419;;;:::o;33638:182::-;33778:34;33774:1;33766:6;33762:14;33755:58;33638:182;:::o;33826:366::-;33968:3;33989:67;34053:2;34048:3;33989:67;:::i;:::-;33982:74;;34065:93;34154:3;34065:93;:::i;:::-;34183:2;34178:3;34174:12;34167:19;;33826:366;;;:::o;34198:419::-;34364:4;34402:2;34391:9;34387:18;34379:26;;34451:9;34445:4;34441:20;34437:1;34426:9;34422:17;34415:47;34479:131;34605:4;34479:131;:::i;:::-;34471:139;;34198:419;;;:::o;34623:172::-;34763:24;34759:1;34751:6;34747:14;34740:48;34623:172;:::o;34801:366::-;34943:3;34964:67;35028:2;35023:3;34964:67;:::i;:::-;34957:74;;35040:93;35129:3;35040:93;:::i;:::-;35158:2;35153:3;35149:12;35142:19;;34801:366;;;:::o;35173:419::-;35339:4;35377:2;35366:9;35362:18;35354:26;;35426:9;35420:4;35416:20;35412:1;35401:9;35397:17;35390:47;35454:131;35580:4;35454:131;:::i;:::-;35446:139;;35173:419;;;:::o;35598:168::-;35738:20;35734:1;35726:6;35722:14;35715:44;35598:168;:::o;35772:366::-;35914:3;35935:67;35999:2;35994:3;35935:67;:::i;:::-;35928:74;;36011:93;36100:3;36011:93;:::i;:::-;36129:2;36124:3;36120:12;36113:19;;35772:366;;;:::o;36144:419::-;36310:4;36348:2;36337:9;36333:18;36325:26;;36397:9;36391:4;36387:20;36383:1;36372:9;36368:17;36361:47;36425:131;36551:4;36425:131;:::i;:::-;36417:139;;36144:419;;;:::o;36569:174::-;36709:26;36705:1;36697:6;36693:14;36686:50;36569:174;:::o;36749:366::-;36891:3;36912:67;36976:2;36971:3;36912:67;:::i;:::-;36905:74;;36988:93;37077:3;36988:93;:::i;:::-;37106:2;37101:3;37097:12;37090:19;;36749:366;;;:::o;37121:419::-;37287:4;37325:2;37314:9;37310:18;37302:26;;37374:9;37368:4;37364:20;37360:1;37349:9;37345:17;37338:47;37402:131;37528:4;37402:131;:::i;:::-;37394:139;;37121:419;;;:::o;37546:170::-;37686:22;37682:1;37674:6;37670:14;37663:46;37546:170;:::o;37722:366::-;37864:3;37885:67;37949:2;37944:3;37885:67;:::i;:::-;37878:74;;37961:93;38050:3;37961:93;:::i;:::-;38079:2;38074:3;38070:12;38063:19;;37722:366;;;:::o;38094:419::-;38260:4;38298:2;38287:9;38283:18;38275:26;;38347:9;38341:4;38337:20;38333:1;38322:9;38318:17;38311:47;38375:131;38501:4;38375:131;:::i;:::-;38367:139;;38094:419;;;:::o;38519:223::-;38659:34;38655:1;38647:6;38643:14;38636:58;38728:6;38723:2;38715:6;38711:15;38704:31;38519:223;:::o;38748:366::-;38890:3;38911:67;38975:2;38970:3;38911:67;:::i;:::-;38904:74;;38987:93;39076:3;38987:93;:::i;:::-;39105:2;39100:3;39096:12;39089:19;;38748:366;;;:::o;39120:419::-;39286:4;39324:2;39313:9;39309:18;39301:26;;39373:9;39367:4;39363:20;39359:1;39348:9;39344:17;39337:47;39401:131;39527:4;39401:131;:::i;:::-;39393:139;;39120:419;;;:::o;39545:191::-;39585:4;39605:20;39623:1;39605:20;:::i;:::-;39600:25;;39639:20;39657:1;39639:20;:::i;:::-;39634:25;;39678:1;39675;39672:8;39669:34;;;39683:18;;:::i;:::-;39669:34;39728:1;39725;39721:9;39713:17;;39545:191;;;;:::o;39742:220::-;39882:34;39878:1;39870:6;39866:14;39859:58;39951:3;39946:2;39938:6;39934:15;39927:28;39742:220;:::o;39968:366::-;40110:3;40131:67;40195:2;40190:3;40131:67;:::i;:::-;40124:74;;40207:93;40296:3;40207:93;:::i;:::-;40325:2;40320:3;40316:12;40309:19;;39968:366;;;:::o;40340:419::-;40506:4;40544:2;40533:9;40529:18;40521:26;;40593:9;40587:4;40583:20;40579:1;40568:9;40564:17;40557:47;40621:131;40747:4;40621:131;:::i;:::-;40613:139;;40340:419;;;:::o;40765:85::-;40810:7;40839:5;40828:16;;40765:85;;;:::o;40856:158::-;40914:9;40947:61;40965:42;40974:32;41000:5;40974:32;:::i;:::-;40965:42;:::i;:::-;40947:61;:::i;:::-;40934:74;;40856:158;;;:::o;41020:147::-;41115:45;41154:5;41115:45;:::i;:::-;41110:3;41103:58;41020:147;;:::o;41173:114::-;41240:6;41274:5;41268:12;41258:22;;41173:114;;;:::o;41293:184::-;41392:11;41426:6;41421:3;41414:19;41466:4;41461:3;41457:14;41442:29;;41293:184;;;;:::o;41483:132::-;41550:4;41573:3;41565:11;;41603:4;41598:3;41594:14;41586:22;;41483:132;;;:::o;41621:108::-;41698:24;41716:5;41698:24;:::i;:::-;41693:3;41686:37;41621:108;;:::o;41735:179::-;41804:10;41825:46;41867:3;41859:6;41825:46;:::i;:::-;41903:4;41898:3;41894:14;41880:28;;41735:179;;;;:::o;41920:113::-;41990:4;42022;42017:3;42013:14;42005:22;;41920:113;;;:::o;42069:732::-;42188:3;42217:54;42265:5;42217:54;:::i;:::-;42287:86;42366:6;42361:3;42287:86;:::i;:::-;42280:93;;42397:56;42447:5;42397:56;:::i;:::-;42476:7;42507:1;42492:284;42517:6;42514:1;42511:13;42492:284;;;42593:6;42587:13;42620:63;42679:3;42664:13;42620:63;:::i;:::-;42613:70;;42706:60;42759:6;42706:60;:::i;:::-;42696:70;;42552:224;42539:1;42536;42532:9;42527:14;;42492:284;;;42496:14;42792:3;42785:10;;42193:608;;;42069:732;;;;:::o;42807:831::-;43070:4;43108:3;43097:9;43093:19;43085:27;;43122:71;43190:1;43179:9;43175:17;43166:6;43122:71;:::i;:::-;43203:80;43279:2;43268:9;43264:18;43255:6;43203:80;:::i;:::-;43330:9;43324:4;43320:20;43315:2;43304:9;43300:18;43293:48;43358:108;43461:4;43452:6;43358:108;:::i;:::-;43350:116;;43476:72;43544:2;43533:9;43529:18;43520:6;43476:72;:::i;:::-;43558:73;43626:3;43615:9;43611:19;43602:6;43558:73;:::i;:::-;42807:831;;;;;;;;:::o;43661:732::-;43768:5;43793:81;43809:64;43866:6;43809:64;:::i;:::-;43793:81;:::i;:::-;43784:90;;43894:5;43923:6;43916:5;43909:21;43957:4;43950:5;43946:16;43939:23;;44010:4;44002:6;43998:17;43990:6;43986:30;44039:3;44031:6;44028:15;44025:122;;;44058:79;;:::i;:::-;44025:122;44173:6;44156:231;44190:6;44185:3;44182:15;44156:231;;;44265:3;44294:48;44338:3;44326:10;44294:48;:::i;:::-;44289:3;44282:61;44372:4;44367:3;44363:14;44356:21;;44232:155;44216:4;44211:3;44207:14;44200:21;;44156:231;;;44160:21;43774:619;;43661:732;;;;;:::o;44416:385::-;44498:5;44547:3;44540:4;44532:6;44528:17;44524:27;44514:122;;44555:79;;:::i;:::-;44514:122;44665:6;44659:13;44690:105;44791:3;44783:6;44776:4;44768:6;44764:17;44690:105;:::i;:::-;44681:114;;44504:297;44416:385;;;;:::o;44807:554::-;44902:6;44951:2;44939:9;44930:7;44926:23;44922:32;44919:119;;;44957:79;;:::i;:::-;44919:119;45098:1;45087:9;45083:17;45077:24;45128:18;45120:6;45117:30;45114:117;;;45150:79;;:::i;:::-;45114:117;45255:89;45336:7;45327:6;45316:9;45312:22;45255:89;:::i;:::-;45245:99;;45048:306;44807:554;;;;:::o

Swarm Source

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