ETH Price: $2,609.91 (-0.04%)

Token

Doge Father Coin (DFC)
 

Overview

Max Total Supply

142,163,466,384 DFC

Holders

130

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
353,279,231.360902595322530005 DFC

Value
$0.00
0x070b78e88f457c14797ae37ce783ebecb22a594d
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:
DogeFather

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-09
*/

/*
https://t.me/DogeFatherCoinEntry

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.23;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

    function transfer(address recipient, uint256 amount) external returns (bool);

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {

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

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

    function decimals() external view returns (uint8);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {

        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
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 {
       
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


 
contract DogeFather is ERC20, Ownable {

    string _name = unicode"Doge Father Coin";
    string _symbol = unicode"DFC";

    using SafeMath for uint256;
 
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
 
    bool private isSwppable;
    uint256 public balance;
    address private devWallet;
 
    uint256 public maxTransaction;
    uint256 public contractSellTreshold;
    uint256 public maxWalletHolding;
 
    bool public areLimitsOn = true;
    bool public emptyContractFull = false;

    uint256 public totalBuyTax;
    uint256 public devBuyTax;
    uint256 public liqBuyTax;
 
    uint256 public totalSellTax;
    uint256 public devSellTax;
    uint256 public liqSellTax;
 
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
   
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );


 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20(_name, _symbol) {
 
       
 
        uint256 _devBuyTax = 26;
        uint256 _liqBuyTax = 0;
 
        uint256 _devSellTax = 36;
        uint256 _liqSellTax = 0;
        
        uint256 totalSupply = 142163466384 * 1e18;
 
        maxTransaction = totalSupply * 2 / 100; // 2%
        maxWalletHolding = totalSupply * 2  / 100; // 2% 
        contractSellTreshold = totalSupply * 1 / 1000; // 0.05%
 
        devBuyTax = _devBuyTax;
        liqBuyTax = _liqBuyTax;
        totalBuyTax = devBuyTax + liqBuyTax;
 
        devSellTax = _devSellTax;
        liqSellTax = _liqSellTax;
        totalSellTax = devSellTax + liqSellTax;
        devWallet = address(msg.sender);
       
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(devWallet), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(devWallet), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */

       
        _mint(address(this), totalSupply);
      
        
        
    }
 
    receive() external payable {
 
    }
 

    function WOWTOKENGOLIVE() external onlyOwner{



        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 ethAmount = address(this).balance;
        uint256 tokenAmount = balanceOf(address(this)) * 90 / 100;
        

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

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


    

    function removeSTUCKETHER() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        require(ethBalance > 0, "ETH balance must be greater than 0");
        (bool success,) = address(devWallet).call{value: ethBalance}("");
        require(success, "Failed to clear ETH balance");
    }

    function REMOVESTUCKTOKENS() external onlyOwner {
        uint256 tokenBalance = balanceOf(address(this));
        require(tokenBalance > 0, "Token balance must be greater than 0");
        _transfer(address(this), devWallet, tokenBalance);
    }

    function LIMITSGONEWOW() external onlyOwner {
        areLimitsOn = false;
    }
 
    function CONTRACTEMPTYWOW(bool enabled) external onlyOwner{
        emptyContractFull = enabled;
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

  
    function editFees(
        uint256 _devBuy,
        uint256 _devSell,
        uint256 _liqBuy,
        uint256 _liqSell
    ) external onlyOwner {
        devBuyTax = _devBuy;
        liqBuyTax = _liqBuy;
        totalBuyTax = devBuyTax + liqBuyTax;
        devSellTax = _devSell;
        liqSellTax = _liqSell;
        totalSellTax = devSellTax + liqSellTax;
        require(totalBuyTax <= 30, "MAX 30% tax allowed");
        require(totalSellTax <= 30, "MAX 30% tax allowed");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateDevWallet(address newDevWallet) external onlyOwner{
        emit devWalletUpdated(newDevWallet, devWallet);
        devWallet = newDevWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(areLimitsOn){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !isSwppable
            ){
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransaction, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransaction, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= contractSellTreshold;
 
        if( 
            canSwap &&
            !isSwppable &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            isSwppable = true;
 
            swapBack();
 
            isSwppable = false;
        }
 
        bool takeFee = !isSwppable;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && totalSellTax > 0){
                fees = amount.mul(totalSellTax).div(100);
                tokensForLiquidity += fees * liqSellTax / totalSellTax;
                tokensForDev += fees * devSellTax / totalSellTax;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && totalBuyTax > 0) {
                fees = amount.mul(totalBuyTax).div(100);
                tokensForLiquidity += fees * liqBuyTax / totalBuyTax;
                tokensForDev += fees * devBuyTax / totalBuyTax;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(emptyContractFull == false){
            if(contractBalance > contractSellTreshold * 20){
                contractBalance = contractSellTreshold * 20;
            }
        }else{
            contractBalance = balanceOf(address(this));
        }
        
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForDev = 0;
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(devWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","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":[],"name":"ManualNukeLP","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":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":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"CONTRACTEMPTYWOW","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LIMITSGONEWOW","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"REMOVESTUCKTOKENS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WOWTOKENGOLIVE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"areLimitsOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"contractSellTreshold","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":"devBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devBuy","type":"uint256"},{"internalType":"uint256","name":"_devSell","type":"uint256"},{"internalType":"uint256","name":"_liqBuy","type":"uint256"},{"internalType":"uint256","name":"_liqSell","type":"uint256"}],"name":"editFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emptyContractFull","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeSTUCKETHER","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280601081526020017f446f67652046617468657220436f696e00000000000000000000000000000000815250600690816200004a919062000bce565b506040518060400160405280600381526020017f44464300000000000000000000000000000000000000000000000000000000008152506007908162000091919062000bce565b506001600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff021916908315150217905550348015620000d2575f80fd5b5060068054620000e290620009ce565b80601f01602080910402602001604051908101604052809291908181526020018280546200011090620009ce565b80156200015f5780601f1062000135576101008083540402835291602001916200015f565b820191905f5260205f20905b8154815290600101906020018083116200014157829003601f168201915b5050505050600780546200017390620009ce565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a190620009ce565b8015620001f05780601f10620001c657610100808354040283529160200191620001f0565b820191905f5260205f20905b815481529060010190602001808311620001d257829003601f168201915b5050505050816003908162000206919062000bce565b50806004908162000218919062000bce565b5050505f6200022c620004f560201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f601a90505f80602490505f806c01cb5adcfb1483fcc08840000090506064600282620002f7919062000cdf565b62000303919062000d56565b600c8190555060646002826200031a919062000cdf565b62000326919062000d56565b600e819055506103e86001826200033e919062000cdf565b6200034a919062000d56565b600d81905550846011819055508360128190555060125460115462000370919062000d8d565b601081905550826014819055508160158190555060155460145462000396919062000d8d565b60138190555033600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003fe620003f0620004fc60201b60201c565b60016200052460201b60201c565b620004113060016200052460201b60201c565b6200042661dead60016200052460201b60201c565b6200045a600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200052460201b60201c565b6200047c6200046e620004fc60201b60201c565b60016200066d60201b60201c565b6200048f3060016200066d60201b60201c565b620004a461dead60016200066d60201b60201c565b620004d8600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200066d60201b60201c565b620004ea30826200076660201b60201c565b505050505062000f84565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000534620004f560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620005c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005bc9062000e25565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000661919062000e61565b60405180910390a25050565b6200067d620004f560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200070e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007059062000e25565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007ce9062000eca565b60405180910390fd5b620007ea5f83836200090360201b60201c565b62000801816002546200090860201b90919060201c565b60028190555062000858815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546200090860201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008f7919062000efb565b60405180910390a35050565b505050565b5f80828462000918919062000d8d565b90508381101562000960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009579062000f64565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620009e657607f821691505b602082108103620009fc57620009fb620009a1565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000a607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a23565b62000a6c868362000a23565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000ab662000ab062000aaa8462000a84565b62000a8d565b62000a84565b9050919050565b5f819050919050565b62000ad18362000a96565b62000ae962000ae08262000abd565b84845462000a2f565b825550505050565b5f90565b62000aff62000af1565b62000b0c81848462000ac6565b505050565b5b8181101562000b335762000b275f8262000af5565b60018101905062000b12565b5050565b601f82111562000b825762000b4c8162000a02565b62000b578462000a14565b8101602085101562000b67578190505b62000b7f62000b768562000a14565b83018262000b11565b50505b505050565b5f82821c905092915050565b5f62000ba45f198460080262000b87565b1980831691505092915050565b5f62000bbe838362000b93565b9150826002028217905092915050565b62000bd9826200096a565b67ffffffffffffffff81111562000bf55762000bf462000974565b5b62000c018254620009ce565b62000c0e82828562000b37565b5f60209050601f83116001811462000c44575f841562000c2f578287015190505b62000c3b858262000bb1565b86555062000caa565b601f19841662000c548662000a02565b5f5b8281101562000c7d5784890151825560018201915060208501945060208101905062000c56565b8683101562000c9d578489015162000c99601f89168262000b93565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000ceb8262000a84565b915062000cf88362000a84565b925082820262000d088162000a84565b9150828204841483151762000d225762000d2162000cb2565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000d628262000a84565b915062000d6f8362000a84565b92508262000d825762000d8162000d29565b5b828204905092915050565b5f62000d998262000a84565b915062000da68362000a84565b925082820190508082111562000dc15762000dc062000cb2565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000e0d60208362000dc7565b915062000e1a8262000dd7565b602082019050919050565b5f6020820190508181035f83015262000e3e8162000dff565b9050919050565b5f8115159050919050565b62000e5b8162000e45565b82525050565b5f60208201905062000e765f83018462000e50565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000eb2601f8362000dc7565b915062000ebf8262000e7c565b602082019050919050565b5f6020820190508181035f83015262000ee38162000ea4565b9050919050565b62000ef58162000a84565b82525050565b5f60208201905062000f105f83018462000eea565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62000f4c601b8362000dc7565b915062000f598262000f16565b602082019050919050565b5f6020820190508181035f83015262000f7d8162000f3e565b9050919050565b6147688062000f925f395ff3fe60806040526004361061025f575f3560e01c806370a0823111610143578063a457c2d7116100b5578063be85750411610079578063be857504146108b0578063c0246668146108da578063c3f70b5214610902578063dd62ed3e1461092c578063df6f93be14610968578063f2fde38b1461099257610266565b8063a457c2d7146107aa578063a9059cbb146107e6578063b62496f514610822578063b69ef8a81461085e578063ba0bb7711461088857610266565b80638da5cb5b116101075780638da5cb5b146106c4578063945674fe146106ee57806395d89b41146107185780639a7a23d6146107425780639db60af31461076a5780639fccce321461078057610266565b806370a082311461061e578063715018a61461065a57806372d45ac8146106705780637571336a146106865780637f9906a5146106ae57610266565b806322eb6631116101dc57806348d79155116101a057806348d79155146105245780634942acd91461054e57806349bd5a5e146105645780634fbee1931461058e5780635de0f2a0146105ca5780636c7e15c9146105f457610266565b806322eb66311461042e57806323b872dd14610458578063313ce5671461049457806339509351146104be57806346469afb146104fa57610266565b806318160ddd1161022357806318160ddd146103605780631816467f1461038a5780631a8145bb146103b25780631bff7898146103dc5780631d9305bf1461040657610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d057806310d5de53146102fa5780631694505e1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b60405161028b9190613692565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b59190613743565b610a4a565b6040516102c7919061379b565b60405180910390f35b3480156102db575f80fd5b506102e4610a67565b6040516102f1919061379b565b60405180910390f35b348015610305575f80fd5b50610320600480360381019061031b91906137b4565b610a79565b60405161032d919061379b565b60405180910390f35b348015610341575f80fd5b5061034a610a96565b604051610357919061383a565b60405180910390f35b34801561036b575f80fd5b50610374610abb565b6040516103819190613862565b60405180910390f35b348015610395575f80fd5b506103b060048036038101906103ab91906137b4565b610ac4565b005b3480156103bd575f80fd5b506103c6610c18565b6040516103d39190613862565b60405180910390f35b3480156103e7575f80fd5b506103f0610c1e565b6040516103fd9190613862565b60405180910390f35b348015610411575f80fd5b5061042c6004803603810190610427919061387b565b610c24565b005b348015610439575f80fd5b50610442610d94565b60405161044f9190613862565b60405180910390f35b348015610463575f80fd5b5061047e600480360381019061047991906138df565b610d9a565b60405161048b919061379b565b60405180910390f35b34801561049f575f80fd5b506104a8610e6e565b6040516104b5919061394a565b60405180910390f35b3480156104c9575f80fd5b506104e460048036038101906104df9190613743565b610e76565b6040516104f1919061379b565b60405180910390f35b348015610505575f80fd5b5061050e610f24565b60405161051b9190613862565b60405180910390f35b34801561052f575f80fd5b50610538610f2a565b6040516105459190613862565b60405180910390f35b348015610559575f80fd5b50610562610f30565b005b34801561056f575f80fd5b50610578611336565b6040516105859190613972565b60405180910390f35b348015610599575f80fd5b506105b460048036038101906105af91906137b4565b61135b565b6040516105c1919061379b565b60405180910390f35b3480156105d5575f80fd5b506105de6113ad565b6040516105eb9190613862565b60405180910390f35b3480156105ff575f80fd5b506106086113b3565b6040516106159190613862565b60405180910390f35b348015610629575f80fd5b50610644600480360381019061063f91906137b4565b6113b9565b6040516106519190613862565b60405180910390f35b348015610665575f80fd5b5061066e6113fe565b005b34801561067b575f80fd5b50610684611551565b005b348015610691575f80fd5b506106ac60048036038101906106a791906139b5565b6116fa565b005b3480156106b9575f80fd5b506106c26117e8565b005b3480156106cf575f80fd5b506106d86118fb565b6040516106e59190613972565b60405180910390f35b3480156106f9575f80fd5b50610702611923565b60405161070f919061379b565b60405180910390f35b348015610723575f80fd5b5061072c611936565b6040516107399190613692565b60405180910390f35b34801561074d575f80fd5b50610768600480360381019061076391906139b5565b6119c6565b005b348015610775575f80fd5b5061077e611af9565b005b34801561078b575f80fd5b50610794611baa565b6040516107a19190613862565b60405180910390f35b3480156107b5575f80fd5b506107d060048036038101906107cb9190613743565b611bb0565b6040516107dd919061379b565b60405180910390f35b3480156107f1575f80fd5b5061080c60048036038101906108079190613743565b611c78565b604051610819919061379b565b60405180910390f35b34801561082d575f80fd5b50610848600480360381019061084391906137b4565b611c95565b604051610855919061379b565b60405180910390f35b348015610869575f80fd5b50610872611cb2565b60405161087f9190613862565b60405180910390f35b348015610893575f80fd5b506108ae60048036038101906108a991906139f3565b611cb8565b005b3480156108bb575f80fd5b506108c4611d6b565b6040516108d19190613862565b60405180910390f35b3480156108e5575f80fd5b5061090060048036038101906108fb91906139b5565b611d71565b005b34801561090d575f80fd5b50610916611ead565b6040516109239190613862565b60405180910390f35b348015610937575f80fd5b50610952600480360381019061094d9190613a1e565b611eb3565b60405161095f9190613862565b60405180910390f35b348015610973575f80fd5b5061097c611f35565b6040516109899190613862565b60405180910390f35b34801561099d575f80fd5b506109b860048036038101906109b391906137b4565b611f3b565b005b6060600380546109c990613a89565b80601f01602080910402602001604051908101604052809291908181526020018280546109f590613a89565b8015610a405780601f10610a1757610100808354040283529160200191610a40565b820191905f5260205f20905b815481529060010190602001808311610a2357829003601f168201915b5050505050905090565b5f610a5d610a5661208f565b8484612096565b6001905092915050565b600f5f9054906101000a900460ff1681565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610acc61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5190613b03565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60135481565b610c2c61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613b03565b60405180910390fd5b8360118190555081601281905550601254601154610cd89190613b4e565b6010819055508260148190555080601581905550601554601454610cfc9190613b4e565b601381905550601e6010541115610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f90613bcb565b60405180910390fd5b601e6013541115610d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8590613bcb565b60405180910390fd5b50505050565b60145481565b5f610da6848484612259565b610e6384610db261208f565b610e5e856040518060600160405280602881526020016146e66028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e1561208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b7e9092919063ffffffff16565b612096565b600190509392505050565b5f6012905090565b5f610f1a610e8261208f565b84610f158560015f610e9261208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612be090919063ffffffff16565b612096565b6001905092915050565b60105481565b600e5481565b610f3861208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90613b03565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050610fe98160016116fa565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611072573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110969190613bfd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061111f9190613bfd565b6040518363ffffffff1660e01b815260040161113c929190613c28565b6020604051808303815f875af1158015611158573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117c9190613bfd565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506111e760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016116fa565b61121360095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612c3d565b5f4790505f6064605a611225306113b9565b61122f9190613c4f565b6112399190613cbd565b90506112673060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016112ed96959493929190613d26565b60606040518083038185885af1158015611309573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061132e9190613d99565b505050505050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b60115481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61140661208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b90613b03565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61155961208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de90613b03565b60405180910390fd5b5f4790505f811161162d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162490613e59565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161167390613ea4565b5f6040518083038185875af1925050503d805f81146116ad576040519150601f19603f3d011682016040523d82523d5f602084013e6116b2565b606091505b50509050806116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed90613f02565b60405180910390fd5b5050565b61170261208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178790613b03565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6117f061208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461187e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187590613b03565b60405180910390fd5b5f611888306113b9565b90505f81116118cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c390613f90565b60405180910390fd5b6118f830600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612259565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b60606004805461194590613a89565b80601f016020809104026020016040519081016040528092919081815260200182805461197190613a89565b80156119bc5780601f10611993576101008083540402835291602001916119bc565b820191905f5260205f20905b81548152906001019060200180831161199f57829003601f168201915b5050505050905090565b6119ce61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5390613b03565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae29061401e565b60405180910390fd5b611af58282612c3d565b5050565b611b0161208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690613b03565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b60175481565b5f611c6e611bbc61208f565b84611c698560405180606001604052806025815260200161470e6025913960015f611be561208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b7e9092919063ffffffff16565b612096565b6001905092915050565b5f611c8b611c8461208f565b8484612259565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b611cc061208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4590613b03565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b60155481565b611d7961208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfe90613b03565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ea1919061379b565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611f4361208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc890613b03565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fb906140ac565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121699061413a565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161224c9190613862565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be906141c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c90614256565b60405180910390fd5b5f810361234c5761234783835f612cdb565b612b79565b600f5f9054906101000a900460ff1615612741576123686118fb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123d657506123a66118fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561240e57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612448575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124615750600960149054906101000a900460ff16155b1561274057601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125035750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125aa57600c5481111561254d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612544906142e4565b60405180910390fd5b600e54612559836113b9565b826125649190613b4e565b11156125a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259c9061434c565b60405180910390fd5b61273f565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156126475750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561269657600c54811115612691576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612688906143da565b60405180910390fd5b61273e565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661273d57600e546126f0836113b9565b826126fb9190613b4e565b111561273c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127339061434c565b60405180910390fd5b5b5b5b5b5b5f61274b306113b9565b90505f600d5482101590508080156127705750600960149054906101000a900460ff16155b80156127c35750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612816575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612869575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128ac576001600960146101000a81548160ff021916908315150217905550612891612f64565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061295b575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612964575f90505b5f8115612b6957601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129c257505f601354115b15612a5a576129ef60646129e16013548861318a90919063ffffffff16565b61320190919063ffffffff16565b905060135460155482612a029190613c4f565b612a0c9190613cbd565b60165f828254612a1c9190613b4e565b9250508190555060135460145482612a349190613c4f565b612a3e9190613cbd565b60175f828254612a4e9190613b4e565b92505081905550612b46565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ab157505f601054115b15612b4557612ade6064612ad06010548861318a90919063ffffffff16565b61320190919063ffffffff16565b905060105460125482612af19190613c4f565b612afb9190613cbd565b60165f828254612b0b9190613b4e565b9250508190555060105460115482612b239190613c4f565b612b2d9190613cbd565b60175f828254612b3d9190613b4e565b925050819055505b5b5f811115612b5a57612b59873083612cdb565b5b8085612b6691906143f8565b94505b612b74878787612cdb565b505050505b505050565b5f838311158290612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc9190613692565b60405180910390fd5b505f8385612bd391906143f8565b9050809150509392505050565b5f808284612bee9190613b4e565b905083811015612c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2a90614475565b60405180910390fd5b8091505092915050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d40906141c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dae90614256565b60405180910390fd5b612dc283838361324a565b612e2b816040518060600160405280602681526020016146c0602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b7e9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612eba815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612be090919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f579190613862565b60405180910390a3505050565b5f612f6e306113b9565b90505f601754601654612f819190613b4e565b90505f80831480612f9157505f82145b15612f9e57505050613188565b5f1515600f60019054906101000a900460ff16151503612fe5576014600d54612fc79190613c4f565b831115612fe0576014600d54612fdd9190613c4f565b92505b612ff1565b612fee306113b9565b92505b5f600283601654866130039190613c4f565b61300d9190613cbd565b6130179190613cbd565b90505f61302d828661324f90919063ffffffff16565b90505f47905061303c82613298565b5f613050824761324f90919063ffffffff16565b90505f61307a8761306c6017548561318a90919063ffffffff16565b61320190919063ffffffff16565b90505f818361308991906143f8565b90505f6016819055505f6017819055505f861180156130a757505f81115b156130f4576130b686826134ce565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826016546040516130eb93929190614493565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161313990613ea4565b5f6040518083038185875af1925050503d805f8114613173576040519150601f19603f3d011682016040523d82523d5f602084013e613178565b606091505b5050809750505050505050505050505b565b5f80830361319a575f90506131fb565b5f82846131a79190613c4f565b90508284826131b69190613cbd565b146131f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ed90614538565b60405180910390fd5b809150505b92915050565b5f61324283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506135a7565b905092915050565b505050565b5f61329083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b7e565b905092915050565b5f600267ffffffffffffffff8111156132b4576132b3614556565b5b6040519080825280602002602001820160405280156132e25781602001602082028036833780820191505090505b50905030815f815181106132f9576132f8614583565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561339d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133c19190613bfd565b816001815181106133d5576133d4614583565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061343b3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161349d959493929190614667565b5f604051808303815f87803b1580156134b4575f80fd5b505af11580156134c6573d5f803e3d5ffd5b505050505050565b6134fa3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b815260040161355f96959493929190613d26565b60606040518083038185885af115801561357b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135a09190613d99565b5050505050565b5f80831182906135ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e49190613692565b60405180910390fd5b505f83856135fb9190613cbd565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561363f578082015181840152602081019050613624565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61366482613608565b61366e8185613612565b935061367e818560208601613622565b6136878161364a565b840191505092915050565b5f6020820190508181035f8301526136aa818461365a565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136df826136b6565b9050919050565b6136ef816136d5565b81146136f9575f80fd5b50565b5f8135905061370a816136e6565b92915050565b5f819050919050565b61372281613710565b811461372c575f80fd5b50565b5f8135905061373d81613719565b92915050565b5f8060408385031215613759576137586136b2565b5b5f613766858286016136fc565b92505060206137778582860161372f565b9150509250929050565b5f8115159050919050565b61379581613781565b82525050565b5f6020820190506137ae5f83018461378c565b92915050565b5f602082840312156137c9576137c86136b2565b5b5f6137d6848285016136fc565b91505092915050565b5f819050919050565b5f6138026137fd6137f8846136b6565b6137df565b6136b6565b9050919050565b5f613813826137e8565b9050919050565b5f61382482613809565b9050919050565b6138348161381a565b82525050565b5f60208201905061384d5f83018461382b565b92915050565b61385c81613710565b82525050565b5f6020820190506138755f830184613853565b92915050565b5f805f8060808587031215613893576138926136b2565b5b5f6138a08782880161372f565b94505060206138b18782880161372f565b93505060406138c28782880161372f565b92505060606138d38782880161372f565b91505092959194509250565b5f805f606084860312156138f6576138f56136b2565b5b5f613903868287016136fc565b9350506020613914868287016136fc565b92505060406139258682870161372f565b9150509250925092565b5f60ff82169050919050565b6139448161392f565b82525050565b5f60208201905061395d5f83018461393b565b92915050565b61396c816136d5565b82525050565b5f6020820190506139855f830184613963565b92915050565b61399481613781565b811461399e575f80fd5b50565b5f813590506139af8161398b565b92915050565b5f80604083850312156139cb576139ca6136b2565b5b5f6139d8858286016136fc565b92505060206139e9858286016139a1565b9150509250929050565b5f60208284031215613a0857613a076136b2565b5b5f613a15848285016139a1565b91505092915050565b5f8060408385031215613a3457613a336136b2565b5b5f613a41858286016136fc565b9250506020613a52858286016136fc565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613aa057607f821691505b602082108103613ab357613ab2613a5c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613aed602083613612565b9150613af882613ab9565b602082019050919050565b5f6020820190508181035f830152613b1a81613ae1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b5882613710565b9150613b6383613710565b9250828201905080821115613b7b57613b7a613b21565b5b92915050565b7f4d4158203330252074617820616c6c6f776564000000000000000000000000005f82015250565b5f613bb5601383613612565b9150613bc082613b81565b602082019050919050565b5f6020820190508181035f830152613be281613ba9565b9050919050565b5f81519050613bf7816136e6565b92915050565b5f60208284031215613c1257613c116136b2565b5b5f613c1f84828501613be9565b91505092915050565b5f604082019050613c3b5f830185613963565b613c486020830184613963565b9392505050565b5f613c5982613710565b9150613c6483613710565b9250828202613c7281613710565b91508282048414831517613c8957613c88613b21565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613cc782613710565b9150613cd283613710565b925082613ce257613ce1613c90565b5b828204905092915050565b5f819050919050565b5f613d10613d0b613d0684613ced565b6137df565b613710565b9050919050565b613d2081613cf6565b82525050565b5f60c082019050613d395f830189613963565b613d466020830188613853565b613d536040830187613d17565b613d606060830186613d17565b613d6d6080830185613963565b613d7a60a0830184613853565b979650505050505050565b5f81519050613d9381613719565b92915050565b5f805f60608486031215613db057613daf6136b2565b5b5f613dbd86828701613d85565b9350506020613dce86828701613d85565b9250506040613ddf86828701613d85565b9150509250925092565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613e43602283613612565b9150613e4e82613de9565b604082019050919050565b5f6020820190508181035f830152613e7081613e37565b9050919050565b5f81905092915050565b50565b5f613e8f5f83613e77565b9150613e9a82613e81565b5f82019050919050565b5f613eae82613e84565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613eec601b83613612565b9150613ef782613eb8565b602082019050919050565b5f6020820190508181035f830152613f1981613ee0565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613f7a602483613612565b9150613f8582613f20565b604082019050919050565b5f6020820190508181035f830152613fa781613f6e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614008603983613612565b915061401382613fae565b604082019050919050565b5f6020820190508181035f83015261403581613ffc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614096602483613612565b91506140a18261403c565b604082019050919050565b5f6020820190508181035f8301526140c38161408a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614124602283613612565b915061412f826140ca565b604082019050919050565b5f6020820190508181035f83015261415181614118565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6141b2602583613612565b91506141bd82614158565b604082019050919050565b5f6020820190508181035f8301526141df816141a6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614240602383613612565b915061424b826141e6565b604082019050919050565b5f6020820190508181035f83015261426d81614234565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6142ce603583613612565b91506142d982614274565b604082019050919050565b5f6020820190508181035f8301526142fb816142c2565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614336601383613612565b915061434182614302565b602082019050919050565b5f6020820190508181035f8301526143638161432a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6143c4603683613612565b91506143cf8261436a565b604082019050919050565b5f6020820190508181035f8301526143f1816143b8565b9050919050565b5f61440282613710565b915061440d83613710565b925082820390508181111561442557614424613b21565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61445f601b83613612565b915061446a8261442b565b602082019050919050565b5f6020820190508181035f83015261448c81614453565b9050919050565b5f6060820190506144a65f830186613853565b6144b36020830185613853565b6144c06040830184613853565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614522602183613612565b915061452d826144c8565b604082019050919050565b5f6020820190508181035f83015261454f81614516565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6145e2816136d5565b82525050565b5f6145f383836145d9565b60208301905092915050565b5f602082019050919050565b5f614615826145b0565b61461f81856145ba565b935061462a836145ca565b805f5b8381101561465a57815161464188826145e8565b975061464c836145ff565b92505060018101905061462d565b5085935050505092915050565b5f60a08201905061467a5f830188613853565b6146876020830187613d17565b8181036040830152614699818661460b565b90506146a86060830185613963565b6146b56080830184613853565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220eb2de7e7f5348979661552943dd3993278d0a8ad6a0fb41893da53aa50fe008564736f6c63430008170033

Deployed Bytecode

0x60806040526004361061025f575f3560e01c806370a0823111610143578063a457c2d7116100b5578063be85750411610079578063be857504146108b0578063c0246668146108da578063c3f70b5214610902578063dd62ed3e1461092c578063df6f93be14610968578063f2fde38b1461099257610266565b8063a457c2d7146107aa578063a9059cbb146107e6578063b62496f514610822578063b69ef8a81461085e578063ba0bb7711461088857610266565b80638da5cb5b116101075780638da5cb5b146106c4578063945674fe146106ee57806395d89b41146107185780639a7a23d6146107425780639db60af31461076a5780639fccce321461078057610266565b806370a082311461061e578063715018a61461065a57806372d45ac8146106705780637571336a146106865780637f9906a5146106ae57610266565b806322eb6631116101dc57806348d79155116101a057806348d79155146105245780634942acd91461054e57806349bd5a5e146105645780634fbee1931461058e5780635de0f2a0146105ca5780636c7e15c9146105f457610266565b806322eb66311461042e57806323b872dd14610458578063313ce5671461049457806339509351146104be57806346469afb146104fa57610266565b806318160ddd1161022357806318160ddd146103605780631816467f1461038a5780631a8145bb146103b25780631bff7898146103dc5780631d9305bf1461040657610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d057806310d5de53146102fa5780631694505e1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b60405161028b9190613692565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b59190613743565b610a4a565b6040516102c7919061379b565b60405180910390f35b3480156102db575f80fd5b506102e4610a67565b6040516102f1919061379b565b60405180910390f35b348015610305575f80fd5b50610320600480360381019061031b91906137b4565b610a79565b60405161032d919061379b565b60405180910390f35b348015610341575f80fd5b5061034a610a96565b604051610357919061383a565b60405180910390f35b34801561036b575f80fd5b50610374610abb565b6040516103819190613862565b60405180910390f35b348015610395575f80fd5b506103b060048036038101906103ab91906137b4565b610ac4565b005b3480156103bd575f80fd5b506103c6610c18565b6040516103d39190613862565b60405180910390f35b3480156103e7575f80fd5b506103f0610c1e565b6040516103fd9190613862565b60405180910390f35b348015610411575f80fd5b5061042c6004803603810190610427919061387b565b610c24565b005b348015610439575f80fd5b50610442610d94565b60405161044f9190613862565b60405180910390f35b348015610463575f80fd5b5061047e600480360381019061047991906138df565b610d9a565b60405161048b919061379b565b60405180910390f35b34801561049f575f80fd5b506104a8610e6e565b6040516104b5919061394a565b60405180910390f35b3480156104c9575f80fd5b506104e460048036038101906104df9190613743565b610e76565b6040516104f1919061379b565b60405180910390f35b348015610505575f80fd5b5061050e610f24565b60405161051b9190613862565b60405180910390f35b34801561052f575f80fd5b50610538610f2a565b6040516105459190613862565b60405180910390f35b348015610559575f80fd5b50610562610f30565b005b34801561056f575f80fd5b50610578611336565b6040516105859190613972565b60405180910390f35b348015610599575f80fd5b506105b460048036038101906105af91906137b4565b61135b565b6040516105c1919061379b565b60405180910390f35b3480156105d5575f80fd5b506105de6113ad565b6040516105eb9190613862565b60405180910390f35b3480156105ff575f80fd5b506106086113b3565b6040516106159190613862565b60405180910390f35b348015610629575f80fd5b50610644600480360381019061063f91906137b4565b6113b9565b6040516106519190613862565b60405180910390f35b348015610665575f80fd5b5061066e6113fe565b005b34801561067b575f80fd5b50610684611551565b005b348015610691575f80fd5b506106ac60048036038101906106a791906139b5565b6116fa565b005b3480156106b9575f80fd5b506106c26117e8565b005b3480156106cf575f80fd5b506106d86118fb565b6040516106e59190613972565b60405180910390f35b3480156106f9575f80fd5b50610702611923565b60405161070f919061379b565b60405180910390f35b348015610723575f80fd5b5061072c611936565b6040516107399190613692565b60405180910390f35b34801561074d575f80fd5b50610768600480360381019061076391906139b5565b6119c6565b005b348015610775575f80fd5b5061077e611af9565b005b34801561078b575f80fd5b50610794611baa565b6040516107a19190613862565b60405180910390f35b3480156107b5575f80fd5b506107d060048036038101906107cb9190613743565b611bb0565b6040516107dd919061379b565b60405180910390f35b3480156107f1575f80fd5b5061080c60048036038101906108079190613743565b611c78565b604051610819919061379b565b60405180910390f35b34801561082d575f80fd5b50610848600480360381019061084391906137b4565b611c95565b604051610855919061379b565b60405180910390f35b348015610869575f80fd5b50610872611cb2565b60405161087f9190613862565b60405180910390f35b348015610893575f80fd5b506108ae60048036038101906108a991906139f3565b611cb8565b005b3480156108bb575f80fd5b506108c4611d6b565b6040516108d19190613862565b60405180910390f35b3480156108e5575f80fd5b5061090060048036038101906108fb91906139b5565b611d71565b005b34801561090d575f80fd5b50610916611ead565b6040516109239190613862565b60405180910390f35b348015610937575f80fd5b50610952600480360381019061094d9190613a1e565b611eb3565b60405161095f9190613862565b60405180910390f35b348015610973575f80fd5b5061097c611f35565b6040516109899190613862565b60405180910390f35b34801561099d575f80fd5b506109b860048036038101906109b391906137b4565b611f3b565b005b6060600380546109c990613a89565b80601f01602080910402602001604051908101604052809291908181526020018280546109f590613a89565b8015610a405780601f10610a1757610100808354040283529160200191610a40565b820191905f5260205f20905b815481529060010190602001808311610a2357829003601f168201915b5050505050905090565b5f610a5d610a5661208f565b8484612096565b6001905092915050565b600f5f9054906101000a900460ff1681565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610acc61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5190613b03565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60135481565b610c2c61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613b03565b60405180910390fd5b8360118190555081601281905550601254601154610cd89190613b4e565b6010819055508260148190555080601581905550601554601454610cfc9190613b4e565b601381905550601e6010541115610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f90613bcb565b60405180910390fd5b601e6013541115610d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8590613bcb565b60405180910390fd5b50505050565b60145481565b5f610da6848484612259565b610e6384610db261208f565b610e5e856040518060600160405280602881526020016146e66028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e1561208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b7e9092919063ffffffff16565b612096565b600190509392505050565b5f6012905090565b5f610f1a610e8261208f565b84610f158560015f610e9261208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612be090919063ffffffff16565b612096565b6001905092915050565b60105481565b600e5481565b610f3861208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90613b03565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050610fe98160016116fa565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611072573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110969190613bfd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061111f9190613bfd565b6040518363ffffffff1660e01b815260040161113c929190613c28565b6020604051808303815f875af1158015611158573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117c9190613bfd565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506111e760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016116fa565b61121360095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612c3d565b5f4790505f6064605a611225306113b9565b61122f9190613c4f565b6112399190613cbd565b90506112673060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016112ed96959493929190613d26565b60606040518083038185885af1158015611309573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061132e9190613d99565b505050505050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b60115481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61140661208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b90613b03565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61155961208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de90613b03565b60405180910390fd5b5f4790505f811161162d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162490613e59565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161167390613ea4565b5f6040518083038185875af1925050503d805f81146116ad576040519150601f19603f3d011682016040523d82523d5f602084013e6116b2565b606091505b50509050806116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed90613f02565b60405180910390fd5b5050565b61170261208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178790613b03565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6117f061208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461187e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187590613b03565b60405180910390fd5b5f611888306113b9565b90505f81116118cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c390613f90565b60405180910390fd5b6118f830600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612259565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b60606004805461194590613a89565b80601f016020809104026020016040519081016040528092919081815260200182805461197190613a89565b80156119bc5780601f10611993576101008083540402835291602001916119bc565b820191905f5260205f20905b81548152906001019060200180831161199f57829003601f168201915b5050505050905090565b6119ce61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5390613b03565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae29061401e565b60405180910390fd5b611af58282612c3d565b5050565b611b0161208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690613b03565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b60175481565b5f611c6e611bbc61208f565b84611c698560405180606001604052806025815260200161470e6025913960015f611be561208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b7e9092919063ffffffff16565b612096565b6001905092915050565b5f611c8b611c8461208f565b8484612259565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b611cc061208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4590613b03565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b60155481565b611d7961208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfe90613b03565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ea1919061379b565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611f4361208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc890613b03565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fb906140ac565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121699061413a565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161224c9190613862565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be906141c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c90614256565b60405180910390fd5b5f810361234c5761234783835f612cdb565b612b79565b600f5f9054906101000a900460ff1615612741576123686118fb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123d657506123a66118fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561240e57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612448575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124615750600960149054906101000a900460ff16155b1561274057601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125035750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125aa57600c5481111561254d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612544906142e4565b60405180910390fd5b600e54612559836113b9565b826125649190613b4e565b11156125a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259c9061434c565b60405180910390fd5b61273f565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156126475750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561269657600c54811115612691576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612688906143da565b60405180910390fd5b61273e565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661273d57600e546126f0836113b9565b826126fb9190613b4e565b111561273c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127339061434c565b60405180910390fd5b5b5b5b5b5b5f61274b306113b9565b90505f600d5482101590508080156127705750600960149054906101000a900460ff16155b80156127c35750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612816575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612869575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128ac576001600960146101000a81548160ff021916908315150217905550612891612f64565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061295b575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612964575f90505b5f8115612b6957601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129c257505f601354115b15612a5a576129ef60646129e16013548861318a90919063ffffffff16565b61320190919063ffffffff16565b905060135460155482612a029190613c4f565b612a0c9190613cbd565b60165f828254612a1c9190613b4e565b9250508190555060135460145482612a349190613c4f565b612a3e9190613cbd565b60175f828254612a4e9190613b4e565b92505081905550612b46565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ab157505f601054115b15612b4557612ade6064612ad06010548861318a90919063ffffffff16565b61320190919063ffffffff16565b905060105460125482612af19190613c4f565b612afb9190613cbd565b60165f828254612b0b9190613b4e565b9250508190555060105460115482612b239190613c4f565b612b2d9190613cbd565b60175f828254612b3d9190613b4e565b925050819055505b5b5f811115612b5a57612b59873083612cdb565b5b8085612b6691906143f8565b94505b612b74878787612cdb565b505050505b505050565b5f838311158290612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc9190613692565b60405180910390fd5b505f8385612bd391906143f8565b9050809150509392505050565b5f808284612bee9190613b4e565b905083811015612c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2a90614475565b60405180910390fd5b8091505092915050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d40906141c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dae90614256565b60405180910390fd5b612dc283838361324a565b612e2b816040518060600160405280602681526020016146c0602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b7e9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612eba815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612be090919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f579190613862565b60405180910390a3505050565b5f612f6e306113b9565b90505f601754601654612f819190613b4e565b90505f80831480612f9157505f82145b15612f9e57505050613188565b5f1515600f60019054906101000a900460ff16151503612fe5576014600d54612fc79190613c4f565b831115612fe0576014600d54612fdd9190613c4f565b92505b612ff1565b612fee306113b9565b92505b5f600283601654866130039190613c4f565b61300d9190613cbd565b6130179190613cbd565b90505f61302d828661324f90919063ffffffff16565b90505f47905061303c82613298565b5f613050824761324f90919063ffffffff16565b90505f61307a8761306c6017548561318a90919063ffffffff16565b61320190919063ffffffff16565b90505f818361308991906143f8565b90505f6016819055505f6017819055505f861180156130a757505f81115b156130f4576130b686826134ce565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826016546040516130eb93929190614493565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161313990613ea4565b5f6040518083038185875af1925050503d805f8114613173576040519150601f19603f3d011682016040523d82523d5f602084013e613178565b606091505b5050809750505050505050505050505b565b5f80830361319a575f90506131fb565b5f82846131a79190613c4f565b90508284826131b69190613cbd565b146131f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ed90614538565b60405180910390fd5b809150505b92915050565b5f61324283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506135a7565b905092915050565b505050565b5f61329083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b7e565b905092915050565b5f600267ffffffffffffffff8111156132b4576132b3614556565b5b6040519080825280602002602001820160405280156132e25781602001602082028036833780820191505090505b50905030815f815181106132f9576132f8614583565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561339d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133c19190613bfd565b816001815181106133d5576133d4614583565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061343b3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161349d959493929190614667565b5f604051808303815f87803b1580156134b4575f80fd5b505af11580156134c6573d5f803e3d5ffd5b505050505050565b6134fa3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b815260040161355f96959493929190613d26565b60606040518083038185885af115801561357b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135a09190613d99565b5050505050565b5f80831182906135ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e49190613692565b60405180910390fd5b505f83856135fb9190613cbd565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561363f578082015181840152602081019050613624565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61366482613608565b61366e8185613612565b935061367e818560208601613622565b6136878161364a565b840191505092915050565b5f6020820190508181035f8301526136aa818461365a565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136df826136b6565b9050919050565b6136ef816136d5565b81146136f9575f80fd5b50565b5f8135905061370a816136e6565b92915050565b5f819050919050565b61372281613710565b811461372c575f80fd5b50565b5f8135905061373d81613719565b92915050565b5f8060408385031215613759576137586136b2565b5b5f613766858286016136fc565b92505060206137778582860161372f565b9150509250929050565b5f8115159050919050565b61379581613781565b82525050565b5f6020820190506137ae5f83018461378c565b92915050565b5f602082840312156137c9576137c86136b2565b5b5f6137d6848285016136fc565b91505092915050565b5f819050919050565b5f6138026137fd6137f8846136b6565b6137df565b6136b6565b9050919050565b5f613813826137e8565b9050919050565b5f61382482613809565b9050919050565b6138348161381a565b82525050565b5f60208201905061384d5f83018461382b565b92915050565b61385c81613710565b82525050565b5f6020820190506138755f830184613853565b92915050565b5f805f8060808587031215613893576138926136b2565b5b5f6138a08782880161372f565b94505060206138b18782880161372f565b93505060406138c28782880161372f565b92505060606138d38782880161372f565b91505092959194509250565b5f805f606084860312156138f6576138f56136b2565b5b5f613903868287016136fc565b9350506020613914868287016136fc565b92505060406139258682870161372f565b9150509250925092565b5f60ff82169050919050565b6139448161392f565b82525050565b5f60208201905061395d5f83018461393b565b92915050565b61396c816136d5565b82525050565b5f6020820190506139855f830184613963565b92915050565b61399481613781565b811461399e575f80fd5b50565b5f813590506139af8161398b565b92915050565b5f80604083850312156139cb576139ca6136b2565b5b5f6139d8858286016136fc565b92505060206139e9858286016139a1565b9150509250929050565b5f60208284031215613a0857613a076136b2565b5b5f613a15848285016139a1565b91505092915050565b5f8060408385031215613a3457613a336136b2565b5b5f613a41858286016136fc565b9250506020613a52858286016136fc565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613aa057607f821691505b602082108103613ab357613ab2613a5c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613aed602083613612565b9150613af882613ab9565b602082019050919050565b5f6020820190508181035f830152613b1a81613ae1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b5882613710565b9150613b6383613710565b9250828201905080821115613b7b57613b7a613b21565b5b92915050565b7f4d4158203330252074617820616c6c6f776564000000000000000000000000005f82015250565b5f613bb5601383613612565b9150613bc082613b81565b602082019050919050565b5f6020820190508181035f830152613be281613ba9565b9050919050565b5f81519050613bf7816136e6565b92915050565b5f60208284031215613c1257613c116136b2565b5b5f613c1f84828501613be9565b91505092915050565b5f604082019050613c3b5f830185613963565b613c486020830184613963565b9392505050565b5f613c5982613710565b9150613c6483613710565b9250828202613c7281613710565b91508282048414831517613c8957613c88613b21565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613cc782613710565b9150613cd283613710565b925082613ce257613ce1613c90565b5b828204905092915050565b5f819050919050565b5f613d10613d0b613d0684613ced565b6137df565b613710565b9050919050565b613d2081613cf6565b82525050565b5f60c082019050613d395f830189613963565b613d466020830188613853565b613d536040830187613d17565b613d606060830186613d17565b613d6d6080830185613963565b613d7a60a0830184613853565b979650505050505050565b5f81519050613d9381613719565b92915050565b5f805f60608486031215613db057613daf6136b2565b5b5f613dbd86828701613d85565b9350506020613dce86828701613d85565b9250506040613ddf86828701613d85565b9150509250925092565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613e43602283613612565b9150613e4e82613de9565b604082019050919050565b5f6020820190508181035f830152613e7081613e37565b9050919050565b5f81905092915050565b50565b5f613e8f5f83613e77565b9150613e9a82613e81565b5f82019050919050565b5f613eae82613e84565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613eec601b83613612565b9150613ef782613eb8565b602082019050919050565b5f6020820190508181035f830152613f1981613ee0565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613f7a602483613612565b9150613f8582613f20565b604082019050919050565b5f6020820190508181035f830152613fa781613f6e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614008603983613612565b915061401382613fae565b604082019050919050565b5f6020820190508181035f83015261403581613ffc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614096602483613612565b91506140a18261403c565b604082019050919050565b5f6020820190508181035f8301526140c38161408a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614124602283613612565b915061412f826140ca565b604082019050919050565b5f6020820190508181035f83015261415181614118565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6141b2602583613612565b91506141bd82614158565b604082019050919050565b5f6020820190508181035f8301526141df816141a6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614240602383613612565b915061424b826141e6565b604082019050919050565b5f6020820190508181035f83015261426d81614234565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6142ce603583613612565b91506142d982614274565b604082019050919050565b5f6020820190508181035f8301526142fb816142c2565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614336601383613612565b915061434182614302565b602082019050919050565b5f6020820190508181035f8301526143638161432a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6143c4603683613612565b91506143cf8261436a565b604082019050919050565b5f6020820190508181035f8301526143f1816143b8565b9050919050565b5f61440282613710565b915061440d83613710565b925082820390508181111561442557614424613b21565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61445f601b83613612565b915061446a8261442b565b602082019050919050565b5f6020820190508181035f83015261448c81614453565b9050919050565b5f6060820190506144a65f830186613853565b6144b36020830185613853565b6144c06040830184613853565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614522602183613612565b915061452d826144c8565b604082019050919050565b5f6020820190508181035f83015261454f81614516565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6145e2816136d5565b82525050565b5f6145f383836145d9565b60208301905092915050565b5f602082019050919050565b5f614615826145b0565b61461f81856145ba565b935061462a836145ca565b805f5b8381101561465a57815161464188826145e8565b975061464c836145ff565b92505060018101905061462d565b5085935050505092915050565b5f60a08201905061467a5f830188613853565b6146876020830187613d17565b8181036040830152614699818661460b565b90506146a86060830185613963565b6146b56080830184613853565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220eb2de7e7f5348979661552943dd3993278d0a8ad6a0fb41893da53aa50fe008564736f6c63430008170033

Deployed Bytecode Sourcemap

17533:12582:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4796:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5710:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18000:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18573:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17701:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5117:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24072:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18282:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18181:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22924:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18215:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5887:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5016:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6250:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18083:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17959:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20922:1045;;;;;;;;;;;;;:::i;:::-;;17749:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24245:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17917:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18116:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5233:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10777:148;;;;;;;;;;;;;:::i;:::-;;21985:313;;;;;;;;;;;;;:::i;:::-;;22768:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22306:250;;;;;;;;;;;;;:::i;:::-;;10563:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18037:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4904:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23621:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22564:82;;;;;;;;;;;;;:::i;:::-;;18322:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6476:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5368:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18796:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17817:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22655:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18247:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23430:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17881:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5551:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18147:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10933:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4796:100;4850:13;4883:5;4876:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4796:100;:::o;5710:169::-;5793:4;5810:39;5819:12;:10;:12::i;:::-;5833:7;5842:6;5810:8;:39::i;:::-;5867:4;5860:11;;5710:169;;;;:::o;18000:30::-;;;;;;;;;;;;;:::o;18573:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17701:41::-;;;;;;;;;;;;;:::o;5117:108::-;5178:7;5205:12;;5198:19;;5117:108;:::o;24072:165::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24184:9:::1;;;;;;;;;;;24153:41;;24170:12;24153:41;;;;;;;;;;;;24217:12;24205:9;;:24;;;;;;;;;;;;;;;;;;24072:165:::0;:::o;18282:33::-;;;;:::o;18181:27::-;;;;:::o;22924:498::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23097:7:::1;23085:9;:19;;;;23127:7;23115:9;:19;;;;23171:9;;23159;;:21;;;;:::i;:::-;23145:11;:35;;;;23204:8;23191:10;:21;;;;23236:8;23223:10;:21;;;;23283:10;;23270;;:23;;;;:::i;:::-;23255:12;:38;;;;23327:2;23312:11;;:17;;23304:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;23388:2;23372:12;;:18;;23364:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;22924:498:::0;;;;:::o;18215:25::-;;;;:::o;5887:355::-;6027:4;6044:36;6054:6;6062:9;6073:6;6044:9;:36::i;:::-;6091:121;6100:6;6108:12;:10;:12::i;:::-;6122:89;6160:6;6122:89;;;;;;;;;;;;;;;;;:11;:19;6134:6;6122:19;;;;;;;;;;;;;;;:33;6142:12;:10;:12::i;:::-;6122:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6091:8;:121::i;:::-;6230:4;6223:11;;5887:355;;;;;:::o;5016:93::-;5074:5;5099:2;5092:9;;5016:93;:::o;6250:218::-;6338:4;6355:83;6364:12;:10;:12::i;:::-;6378:7;6387:50;6426:10;6387:11;:25;6399:12;:10;:12::i;:::-;6387:25;;;;;;;;;;;;;;;:34;6413:7;6387:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6355:8;:83::i;:::-;6456:4;6449:11;;6250:218;;;;:::o;18083:26::-;;;;:::o;17959:31::-;;;;:::o;20922:1045::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20983:35:::1;21040:42;20983:100;;21097:58;21131:16;21150:4;21097:25;:58::i;:::-;21184:16;21166:15;;:34;;;;;;;;;;;;;;;;;;21248:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21230:56;;;21295:4;21302:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21230:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21214:13;;:112;;;;;;;;;;;;;;;;;;21337:55;21371:13;;;;;;;;;;;21387:4;21337:25;:55::i;:::-;21403:58;21440:13;;;;;;;;;;;21456:4;21403:28;:58::i;:::-;21482:17;21502:21;21482:41;;21534:19;21588:3;21583:2;21556:24;21574:4;21556:9;:24::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;21534:57;;21622:62;21639:4;21654:15;;;;;;;;;;;21672:11;21622:8;:62::i;:::-;21697:15;;;;;;;;;;;:31;;;21736:9;21769:4;21789:11;21819:1;21866::::0;21909:9:::1;;;;;;;;;;;21933:15;21697:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;20966:1001;;;20922:1045::o:0;17749:28::-;;;;;;;;;;;;;:::o;24245:125::-;24310:4;24334:19;:28;24354:7;24334:28;;;;;;;;;;;;;;;;;;;;;;;;;24327:35;;24245:125;;;:::o;17917:35::-;;;;:::o;18116:24::-;;;;:::o;5233:127::-;5307:7;5334:9;:18;5344:7;5334:18;;;;;;;;;;;;;;;;5327:25;;5233:127;;;:::o;10777:148::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10884:1:::1;10847:40;;10868:6;;;;;;;;;;;10847:40;;;;;;;;;;;;10915:1;10898:6;;:19;;;;;;;;;;;;;;;;;;10777:148::o:0;21985:313::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22043:18:::1;22064:21;22043:42;;22117:1;22104:10;:14;22096:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22169:12;22194:9;;;;;;;;;;;22186:23;;22217:10;22186:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22168:64;;;22251:7;22243:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22032:266;;21985:313::o:0;22768:144::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22900:4:::1;22858:31;:39;22890:6;22858:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22768:144:::0;;:::o;22306:250::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22365:20:::1;22388:24;22406:4;22388:9;:24::i;:::-;22365:47;;22446:1;22431:12;:16;22423:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22499:49;22517:4;22524:9;;;;;;;;;;;22535:12;22499:9;:49::i;:::-;22354:202;22306:250::o:0;10563:79::-;10601:7;10628:6;;;;;;;;;;;10621:13;;10563:79;:::o;18037:37::-;;;;;;;;;;;;;:::o;4904:104::-;4960:13;4993:7;4986:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4904:104;:::o;23621:245::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23728:13:::1;;;;;;;;;;;23720:21;;:4;:21;;::::0;23712:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23817:41;23846:4;23852:5;23817:28;:41::i;:::-;23621:245:::0;;:::o;22564:82::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22633:5:::1;22619:11;;:19;;;;;;;;;;;;;;;;;;22564:82::o:0;18322:27::-;;;;:::o;6476:269::-;6569:4;6586:129;6595:12;:10;:12::i;:::-;6609:7;6618:96;6657:15;6618:96;;;;;;;;;;;;;;;;;:11;:25;6630:12;:10;:12::i;:::-;6618:25;;;;;;;;;;;;;;;:34;6644:7;6618:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6586:8;:129::i;:::-;6733:4;6726:11;;6476:269;;;;:::o;5368:175::-;5454:4;5471:42;5481:12;:10;:12::i;:::-;5495:9;5506:6;5471:9;:42::i;:::-;5531:4;5524:11;;5368:175;;;;:::o;18796:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17817:22::-;;;;:::o;22655:104::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22744:7:::1;22724:17;;:27;;;;;;;;;;;;;;;;;;22655:104:::0;:::o;18247:25::-;;;;:::o;23430:182::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23546:8:::1;23515:19;:28;23535:7;23515:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23586:7;23570:34;;;23595:8;23570:34;;;;;;:::i;:::-;;;;;;;;23430:182:::0;;:::o;17881:29::-;;;;:::o;5551:151::-;5640:7;5667:11;:18;5679:5;5667:18;;;;;;;;;;;;;;;:27;5686:7;5667:27;;;;;;;;;;;;;;;;5660:34;;5551:151;;;;:::o;18147:24::-;;;;:::o;10933:169::-;10700:12;:10;:12::i;:::-;10690:22;;:6;;;;;;;;;;;:22;;;10682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11057:8:::1;11028:38;;11049:6;;;;;;;;;;;11028:38;;;;;;;;;;;;11086:8;11077:6;;:17;;;;;;;;;;;;;;;;;;10933:169:::0;:::o;149:98::-;202:7;229:10;222:17;;149:98;:::o;8152:381::-;8305:1;8288:19;;:5;:19;;;8280:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8386:1;8367:21;;:7;:21;;;8359:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8471:6;8441:11;:18;8453:5;8441:18;;;;;;;;;;;;;;;:27;8460:7;8441:27;;;;;;;;;;;;;;;:36;;;;8509:7;8493:32;;8502:5;8493:32;;;8518:6;8493:32;;;;;;:::i;:::-;;;;;;;;8152:381;;;:::o;24379:3112::-;24527:1;24511:18;;:4;:18;;;24503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24604:1;24590:16;;:2;:16;;;24582:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24671:1;24661:6;:11;24658:92;;24689:28;24705:4;24711:2;24715:1;24689:15;:28::i;:::-;24732:7;;24658:92;24766:11;;;;;;;;;;;24763:1083;;;24823:7;:5;:7::i;:::-;24815:15;;:4;:15;;;;:49;;;;;24857:7;:5;:7::i;:::-;24851:13;;:2;:13;;;;24815:49;:86;;;;;24899:1;24885:16;;:2;:16;;;;24815:86;:128;;;;;24936:6;24922:21;;:2;:21;;;;24815:128;:160;;;;;24965:10;;;;;;;;;;;24964:11;24815:160;24793:1042;;;25059:25;:31;25085:4;25059:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25095:31;:35;25127:2;25095:35;;;;;;;;;;;;;;;;;;;;;;;;;25094:36;25059:71;25055:765;;;25177:14;;25167:6;:24;;25159:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25310:16;;25293:13;25303:2;25293:9;:13::i;:::-;25284:6;:22;;;;:::i;:::-;:42;;25276:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25055:765;;;25429:25;:29;25455:2;25429:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25463:31;:37;25495:4;25463:37;;;;;;;;;;;;;;;;;;;;;;;;;25462:38;25429:71;25425:395;;;25547:14;;25537:6;:24;;25529:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25425:395;;;25667:31;:35;25699:2;25667:35;;;;;;;;;;;;;;;;;;;;;;;;;25663:157;;25760:16;;25743:13;25753:2;25743:9;:13::i;:::-;25734:6;:22;;;;:::i;:::-;:42;;25726:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25663:157;25425:395;25055:765;24793:1042;24763:1083;25859:28;25890:24;25908:4;25890:9;:24::i;:::-;25859:55;;25928:12;25967:20;;25943;:44;;25928:59;;26019:7;:35;;;;;26044:10;;;;;;;;;;;26043:11;26019:35;:84;;;;;26072:25;:31;26098:4;26072:31;;;;;;;;;;;;;;;;;;;;;;;;;26071:32;26019:84;:127;;;;;26121:19;:25;26141:4;26121:25;;;;;;;;;;;;;;;;;;;;;;;;;26120:26;26019:127;:168;;;;;26164:19;:23;26184:2;26164:23;;;;;;;;;;;;;;;;;;;;;;;;;26163:24;26019:168;26001:306;;;26227:4;26214:10;;:17;;;;;;;;;;;;;;;;;;26249:10;:8;:10::i;:::-;26290:5;26277:10;;:18;;;;;;;;;;;;;;;;;;26001:306;26320:12;26336:10;;;;;;;;;;;26335:11;26320:26;;26448:19;:25;26468:4;26448:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26477:19;:23;26497:2;26477:23;;;;;;;;;;;;;;;;;;;;;;;;;26448:52;26445:99;;;26527:5;26517:15;;26445:99;26557:12;26661:7;26658:779;;;26712:25;:29;26738:2;26712:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;26760:1;26745:12;;:16;26712:49;26708:576;;;26788:33;26817:3;26788:24;26799:12;;26788:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26781:40;;26882:12;;26869:10;;26862:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26840:18;;:54;;;;;;;:::i;:::-;;;;;;;;26949:12;;26936:10;;26929:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26913:12;;:48;;;;;;;:::i;:::-;;;;;;;;26708:576;;;27022:25;:31;27048:4;27022:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27071:1;27057:11;;:15;27022:50;27019:265;;;27100:32;27128:3;27100:23;27111:11;;27100:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;27093:39;;27192:11;;27180:9;;27173:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27151:18;;:52;;;;;;;:::i;:::-;;;;;;;;27257:11;;27245:9;;27238:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27222:12;;:46;;;;;;;:::i;:::-;;;;;;;;27019:265;26708:576;27311:1;27304:4;:8;27301:93;;;27336:42;27352:4;27366;27373;27336:15;:42::i;:::-;27301:93;27421:4;27411:14;;;;;:::i;:::-;;;26658:779;27450:33;27466:4;27472:2;27476:6;27450:15;:33::i;:::-;24492:2999;;;;24379:3112;;;;:::o;9040:193::-;9126:7;9159:1;9154;:6;;9162:12;9146:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9186:9;9202:1;9198;:5;;;;:::i;:::-;9186:17;;9224:1;9217:8;;;9040:193;;;;;:::o;8706:182::-;8764:7;8784:9;8800:1;8796;:5;;;;:::i;:::-;8784:17;;8825:1;8820;:6;;8812:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8879:1;8872:8;;;8706:182;;;;:::o;23875:189::-;23992:5;23958:25;:31;23984:4;23958:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24050:5;24016:40;;24044:4;24016:40;;;;;;;;;;;;23875:189;;:::o;6753:575::-;6911:1;6893:20;;:6;:20;;;6885:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6995:1;6974:23;;:9;:23;;;6966:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7051:47;7072:6;7080:9;7091:6;7051:20;:47::i;:::-;7132:71;7154:6;7132:71;;;;;;;;;;;;;;;;;:9;:17;7142:6;7132:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7112:9;:17;7122:6;7112:17;;;;;;;;;;;;;;;:91;;;;7237:32;7262:6;7237:9;:20;7247:9;7237:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7214:9;:20;7224:9;7214:20;;;;;;;;;;;;;;;:55;;;;7302:9;7285:35;;7294:6;7285:35;;;7313:6;7285:35;;;;;;:::i;:::-;;;;;;;;6753:575;;;:::o;28635:1477::-;28674:23;28700:24;28718:4;28700:9;:24::i;:::-;28674:50;;28735:25;28784:12;;28763:18;;:33;;;;:::i;:::-;28735:61;;28807:12;28855:1;28836:15;:20;:46;;;;28881:1;28860:17;:22;28836:46;28833:60;;;28885:7;;;;;28833:60;28930:5;28909:26;;:17;;;;;;;;;;;:26;;;28906:254;;28995:2;28972:20;;:25;;;;:::i;:::-;28954:15;:43;28951:125;;;29058:2;29035:20;;:25;;;;:::i;:::-;29017:43;;28951:125;28906:254;;;29124:24;29142:4;29124:9;:24::i;:::-;29106:42;;28906:254;29232:23;29317:1;29297:17;29276:18;;29258:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;29232:86;;29329:26;29358:36;29378:15;29358;:19;;:36;;;;:::i;:::-;29329:65;;29408:25;29436:21;29408:49;;29471:36;29488:18;29471:16;:36::i;:::-;29522:18;29543:44;29569:17;29543:21;:25;;:44;;;;:::i;:::-;29522:65;;29601:17;29621:51;29654:17;29621:28;29636:12;;29621:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29601:71;;29683:23;29722:9;29709:10;:22;;;;:::i;:::-;29683:48;;29769:1;29748:18;:22;;;;29796:1;29781:12;:16;;;;29832:1;29814:15;:19;:42;;;;;29855:1;29837:15;:19;29814:42;29811:210;;;29872:46;29885:15;29902;29872:12;:46::i;:::-;29938:71;29953:18;29973:15;29990:18;;29938:71;;;;;;;;:::i;:::-;;;;;;;;29811:210;30055:9;;;;;;;;;;;30047:23;;30078:21;30047:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30034:70;;;;;28663:1449;;;;;;;;;28635:1477;:::o;9241:254::-;9299:7;9330:1;9325;:6;9321:47;;9355:1;9348:8;;;;9321:47;9381:9;9397:1;9393;:5;;;;:::i;:::-;9381:17;;9426:1;9421;9417;:5;;;;:::i;:::-;:10;9409:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9486:1;9479:8;;;9241:254;;;;;:::o;9503:132::-;9561:7;9588:39;9592:1;9595;9588:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9581:46;;9503:132;;;;:::o;8541:125::-;;;;:::o;8896:136::-;8954:7;8981:43;8985:1;8988;8981:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;8974:50;;8896:136;;;;:::o;27500:597::-;27629:21;27667:1;27653:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27629:40;;27698:4;27680;27685:1;27680:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27724:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27714:4;27719:1;27714:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27760:62;27777:4;27792:15;;;;;;;;;;;27810:11;27760:8;:62::i;:::-;27862:15;;;;;;;;;;;:66;;;27943:11;27969:1;28013:4;28040;28060:15;27862:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27555:542;27500:597;:::o;28106:520::-;28254:62;28271:4;28286:15;;;;;;;;;;;28304:11;28254:8;:62::i;:::-;28360:15;;;;;;;;;;;:31;;;28399:9;28432:4;28452:11;28478:1;28521;28572:4;28592:15;28360:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28106:520;;:::o;9643:279::-;9729:7;9761:1;9757;:5;9764:12;9749:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9788:9;9804:1;9800;:5;;;;:::i;:::-;9788:17;;9913:1;9906:8;;;9643:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:765::-;5197:6;5205;5213;5221;5270:3;5258:9;5249:7;5245:23;5241:33;5238:120;;;5277:79;;:::i;:::-;5238:120;5397:1;5422:53;5467:7;5458:6;5447:9;5443:22;5422:53;:::i;:::-;5412:63;;5368:117;5524:2;5550:53;5595:7;5586:6;5575:9;5571:22;5550:53;:::i;:::-;5540:63;;5495:118;5652:2;5678:53;5723:7;5714:6;5703:9;5699:22;5678:53;:::i;:::-;5668:63;;5623:118;5780:2;5806:53;5851:7;5842:6;5831:9;5827:22;5806:53;:::i;:::-;5796:63;;5751:118;5111:765;;;;;;;:::o;5882:619::-;5959:6;5967;5975;6024:2;6012:9;6003:7;5999:23;5995:32;5992:119;;;6030:79;;:::i;:::-;5992:119;6150:1;6175:53;6220:7;6211:6;6200:9;6196:22;6175:53;:::i;:::-;6165:63;;6121:117;6277:2;6303:53;6348:7;6339:6;6328:9;6324:22;6303:53;:::i;:::-;6293:63;;6248:118;6405:2;6431:53;6476:7;6467:6;6456:9;6452:22;6431:53;:::i;:::-;6421:63;;6376:118;5882:619;;;;;:::o;6507:86::-;6542:7;6582:4;6575:5;6571:16;6560:27;;6507:86;;;:::o;6599:112::-;6682:22;6698:5;6682:22;:::i;:::-;6677:3;6670:35;6599:112;;:::o;6717:214::-;6806:4;6844:2;6833:9;6829:18;6821:26;;6857:67;6921:1;6910:9;6906:17;6897:6;6857:67;:::i;:::-;6717:214;;;;:::o;6937:118::-;7024:24;7042:5;7024:24;:::i;:::-;7019:3;7012:37;6937:118;;:::o;7061:222::-;7154:4;7192:2;7181:9;7177:18;7169:26;;7205:71;7273:1;7262:9;7258:17;7249:6;7205:71;:::i;:::-;7061:222;;;;:::o;7289:116::-;7359:21;7374:5;7359:21;:::i;:::-;7352:5;7349:32;7339:60;;7395:1;7392;7385:12;7339:60;7289:116;:::o;7411:133::-;7454:5;7492:6;7479:20;7470:29;;7508:30;7532:5;7508:30;:::i;:::-;7411:133;;;;:::o;7550:468::-;7615:6;7623;7672:2;7660:9;7651:7;7647:23;7643:32;7640:119;;;7678:79;;:::i;:::-;7640:119;7798:1;7823:53;7868:7;7859:6;7848:9;7844:22;7823:53;:::i;:::-;7813:63;;7769:117;7925:2;7951:50;7993:7;7984:6;7973:9;7969:22;7951:50;:::i;:::-;7941:60;;7896:115;7550:468;;;;;:::o;8024:323::-;8080:6;8129:2;8117:9;8108:7;8104:23;8100:32;8097:119;;;8135:79;;:::i;:::-;8097:119;8255:1;8280:50;8322:7;8313:6;8302:9;8298:22;8280:50;:::i;:::-;8270:60;;8226:114;8024:323;;;;:::o;8353:474::-;8421:6;8429;8478:2;8466:9;8457:7;8453:23;8449:32;8446:119;;;8484:79;;:::i;:::-;8446:119;8604:1;8629:53;8674:7;8665:6;8654:9;8650:22;8629:53;:::i;:::-;8619:63;;8575:117;8731:2;8757:53;8802:7;8793:6;8782:9;8778:22;8757:53;:::i;:::-;8747:63;;8702:118;8353:474;;;;;:::o;8833:180::-;8881:77;8878:1;8871:88;8978:4;8975:1;8968:15;9002:4;8999:1;8992:15;9019:320;9063:6;9100:1;9094:4;9090:12;9080:22;;9147:1;9141:4;9137:12;9168:18;9158:81;;9224:4;9216:6;9212:17;9202:27;;9158:81;9286:2;9278:6;9275:14;9255:18;9252:38;9249:84;;9305:18;;:::i;:::-;9249:84;9070:269;9019:320;;;:::o;9345:182::-;9485:34;9481:1;9473:6;9469:14;9462:58;9345:182;:::o;9533:366::-;9675:3;9696:67;9760:2;9755:3;9696:67;:::i;:::-;9689:74;;9772:93;9861:3;9772:93;:::i;:::-;9890:2;9885:3;9881:12;9874:19;;9533:366;;;:::o;9905:419::-;10071:4;10109:2;10098:9;10094:18;10086:26;;10158:9;10152:4;10148:20;10144:1;10133:9;10129:17;10122:47;10186:131;10312:4;10186:131;:::i;:::-;10178:139;;9905:419;;;:::o;10330:180::-;10378:77;10375:1;10368:88;10475:4;10472:1;10465:15;10499:4;10496:1;10489:15;10516:191;10556:3;10575:20;10593:1;10575:20;:::i;:::-;10570:25;;10609:20;10627:1;10609:20;:::i;:::-;10604:25;;10652:1;10649;10645:9;10638:16;;10673:3;10670:1;10667:10;10664:36;;;10680:18;;:::i;:::-;10664:36;10516:191;;;;:::o;10713:169::-;10853:21;10849:1;10841:6;10837:14;10830:45;10713:169;:::o;10888:366::-;11030:3;11051:67;11115:2;11110:3;11051:67;:::i;:::-;11044:74;;11127:93;11216:3;11127:93;:::i;:::-;11245:2;11240:3;11236:12;11229:19;;10888:366;;;:::o;11260:419::-;11426:4;11464:2;11453:9;11449:18;11441:26;;11513:9;11507:4;11503:20;11499:1;11488:9;11484:17;11477:47;11541:131;11667:4;11541:131;:::i;:::-;11533:139;;11260:419;;;:::o;11685:143::-;11742:5;11773:6;11767:13;11758:22;;11789:33;11816:5;11789:33;:::i;:::-;11685:143;;;;:::o;11834:351::-;11904:6;11953:2;11941:9;11932:7;11928:23;11924:32;11921:119;;;11959:79;;:::i;:::-;11921:119;12079:1;12104:64;12160:7;12151:6;12140:9;12136:22;12104:64;:::i;:::-;12094:74;;12050:128;11834:351;;;;:::o;12191:332::-;12312:4;12350:2;12339:9;12335:18;12327:26;;12363:71;12431:1;12420:9;12416:17;12407:6;12363:71;:::i;:::-;12444:72;12512:2;12501:9;12497:18;12488:6;12444:72;:::i;:::-;12191:332;;;;;:::o;12529:410::-;12569:7;12592:20;12610:1;12592:20;:::i;:::-;12587:25;;12626:20;12644:1;12626:20;:::i;:::-;12621:25;;12681:1;12678;12674:9;12703:30;12721:11;12703:30;:::i;:::-;12692:41;;12882:1;12873:7;12869:15;12866:1;12863:22;12843:1;12836:9;12816:83;12793:139;;12912:18;;:::i;:::-;12793:139;12577:362;12529:410;;;;:::o;12945:180::-;12993:77;12990:1;12983:88;13090:4;13087:1;13080:15;13114:4;13111:1;13104:15;13131:185;13171:1;13188:20;13206:1;13188:20;:::i;:::-;13183:25;;13222:20;13240:1;13222:20;:::i;:::-;13217:25;;13261:1;13251:35;;13266:18;;:::i;:::-;13251:35;13308:1;13305;13301:9;13296:14;;13131:185;;;;:::o;13322:85::-;13367:7;13396:5;13385:16;;13322:85;;;:::o;13413:158::-;13471:9;13504:61;13522:42;13531:32;13557:5;13531:32;:::i;:::-;13522:42;:::i;:::-;13504:61;:::i;:::-;13491:74;;13413:158;;;:::o;13577:147::-;13672:45;13711:5;13672:45;:::i;:::-;13667:3;13660:58;13577:147;;:::o;13730:807::-;13979:4;14017:3;14006:9;14002:19;13994:27;;14031:71;14099:1;14088:9;14084:17;14075:6;14031:71;:::i;:::-;14112:72;14180:2;14169:9;14165:18;14156:6;14112:72;:::i;:::-;14194:80;14270:2;14259:9;14255:18;14246:6;14194:80;:::i;:::-;14284;14360:2;14349:9;14345:18;14336:6;14284:80;:::i;:::-;14374:73;14442:3;14431:9;14427:19;14418:6;14374:73;:::i;:::-;14457;14525:3;14514:9;14510:19;14501:6;14457:73;:::i;:::-;13730:807;;;;;;;;;:::o;14543:143::-;14600:5;14631:6;14625:13;14616:22;;14647:33;14674:5;14647:33;:::i;:::-;14543:143;;;;:::o;14692:663::-;14780:6;14788;14796;14845:2;14833:9;14824:7;14820:23;14816:32;14813:119;;;14851:79;;:::i;:::-;14813:119;14971:1;14996:64;15052:7;15043:6;15032:9;15028:22;14996:64;:::i;:::-;14986:74;;14942:128;15109:2;15135:64;15191:7;15182:6;15171:9;15167:22;15135:64;:::i;:::-;15125:74;;15080:129;15248:2;15274:64;15330:7;15321:6;15310:9;15306:22;15274:64;:::i;:::-;15264:74;;15219:129;14692:663;;;;;:::o;15361:221::-;15501:34;15497:1;15489:6;15485:14;15478:58;15570:4;15565:2;15557:6;15553:15;15546:29;15361:221;:::o;15588:366::-;15730:3;15751:67;15815:2;15810:3;15751:67;:::i;:::-;15744:74;;15827:93;15916:3;15827:93;:::i;:::-;15945:2;15940:3;15936:12;15929:19;;15588:366;;;:::o;15960:419::-;16126:4;16164:2;16153:9;16149:18;16141:26;;16213:9;16207:4;16203:20;16199:1;16188:9;16184:17;16177:47;16241:131;16367:4;16241:131;:::i;:::-;16233:139;;15960:419;;;:::o;16385:147::-;16486:11;16523:3;16508:18;;16385:147;;;;:::o;16538:114::-;;:::o;16658:398::-;16817:3;16838:83;16919:1;16914:3;16838:83;:::i;:::-;16831:90;;16930:93;17019:3;16930:93;:::i;:::-;17048:1;17043:3;17039:11;17032:18;;16658:398;;;:::o;17062:379::-;17246:3;17268:147;17411:3;17268:147;:::i;:::-;17261:154;;17432:3;17425:10;;17062:379;;;:::o;17447:177::-;17587:29;17583:1;17575:6;17571:14;17564:53;17447:177;:::o;17630:366::-;17772:3;17793:67;17857:2;17852:3;17793:67;:::i;:::-;17786:74;;17869:93;17958:3;17869:93;:::i;:::-;17987:2;17982:3;17978:12;17971:19;;17630:366;;;:::o;18002:419::-;18168:4;18206:2;18195:9;18191:18;18183:26;;18255:9;18249:4;18245:20;18241:1;18230:9;18226:17;18219:47;18283:131;18409:4;18283:131;:::i;:::-;18275:139;;18002:419;;;:::o;18427:223::-;18567:34;18563:1;18555:6;18551:14;18544:58;18636:6;18631:2;18623:6;18619:15;18612:31;18427:223;:::o;18656:366::-;18798:3;18819:67;18883:2;18878:3;18819:67;:::i;:::-;18812:74;;18895:93;18984:3;18895:93;:::i;:::-;19013:2;19008:3;19004:12;18997:19;;18656:366;;;:::o;19028:419::-;19194:4;19232:2;19221:9;19217:18;19209:26;;19281:9;19275:4;19271:20;19267:1;19256:9;19252:17;19245:47;19309:131;19435:4;19309:131;:::i;:::-;19301:139;;19028:419;;;:::o;19453:244::-;19593:34;19589:1;19581:6;19577:14;19570:58;19662:27;19657:2;19649:6;19645:15;19638:52;19453:244;:::o;19703:366::-;19845:3;19866:67;19930:2;19925:3;19866:67;:::i;:::-;19859:74;;19942:93;20031:3;19942:93;:::i;:::-;20060:2;20055:3;20051:12;20044:19;;19703:366;;;:::o;20075:419::-;20241:4;20279:2;20268:9;20264:18;20256:26;;20328:9;20322:4;20318:20;20314:1;20303:9;20299:17;20292:47;20356:131;20482:4;20356:131;:::i;:::-;20348:139;;20075:419;;;:::o;20500:223::-;20640:34;20636:1;20628:6;20624:14;20617:58;20709:6;20704:2;20696:6;20692:15;20685:31;20500:223;:::o;20729:366::-;20871:3;20892:67;20956:2;20951:3;20892:67;:::i;:::-;20885:74;;20968:93;21057:3;20968:93;:::i;:::-;21086:2;21081:3;21077:12;21070:19;;20729:366;;;:::o;21101:419::-;21267:4;21305:2;21294:9;21290:18;21282:26;;21354:9;21348:4;21344:20;21340:1;21329:9;21325:17;21318:47;21382:131;21508:4;21382:131;:::i;:::-;21374:139;;21101:419;;;:::o;21526:221::-;21666:34;21662:1;21654:6;21650:14;21643:58;21735:4;21730:2;21722:6;21718:15;21711:29;21526:221;:::o;21753:366::-;21895:3;21916:67;21980:2;21975:3;21916:67;:::i;:::-;21909:74;;21992:93;22081:3;21992:93;:::i;:::-;22110:2;22105:3;22101:12;22094:19;;21753:366;;;:::o;22125:419::-;22291:4;22329:2;22318:9;22314:18;22306:26;;22378:9;22372:4;22368:20;22364:1;22353:9;22349:17;22342:47;22406:131;22532:4;22406:131;:::i;:::-;22398:139;;22125:419;;;:::o;22550:224::-;22690:34;22686:1;22678:6;22674:14;22667:58;22759:7;22754:2;22746:6;22742:15;22735:32;22550:224;:::o;22780:366::-;22922:3;22943:67;23007:2;23002:3;22943:67;:::i;:::-;22936:74;;23019:93;23108:3;23019:93;:::i;:::-;23137:2;23132:3;23128:12;23121:19;;22780:366;;;:::o;23152:419::-;23318:4;23356:2;23345:9;23341:18;23333:26;;23405:9;23399:4;23395:20;23391:1;23380:9;23376:17;23369:47;23433:131;23559:4;23433:131;:::i;:::-;23425:139;;23152:419;;;:::o;23577:222::-;23717:34;23713:1;23705:6;23701:14;23694:58;23786:5;23781:2;23773:6;23769:15;23762:30;23577:222;:::o;23805:366::-;23947:3;23968:67;24032:2;24027:3;23968:67;:::i;:::-;23961:74;;24044:93;24133:3;24044:93;:::i;:::-;24162:2;24157:3;24153:12;24146:19;;23805:366;;;:::o;24177:419::-;24343:4;24381:2;24370:9;24366:18;24358:26;;24430:9;24424:4;24420:20;24416:1;24405:9;24401:17;24394:47;24458:131;24584:4;24458:131;:::i;:::-;24450:139;;24177:419;;;:::o;24602:240::-;24742:34;24738:1;24730:6;24726:14;24719:58;24811:23;24806:2;24798:6;24794:15;24787:48;24602:240;:::o;24848:366::-;24990:3;25011:67;25075:2;25070:3;25011:67;:::i;:::-;25004:74;;25087:93;25176:3;25087:93;:::i;:::-;25205:2;25200:3;25196:12;25189:19;;24848:366;;;:::o;25220:419::-;25386:4;25424:2;25413:9;25409:18;25401:26;;25473:9;25467:4;25463:20;25459:1;25448:9;25444:17;25437:47;25501:131;25627:4;25501:131;:::i;:::-;25493:139;;25220:419;;;:::o;25645:169::-;25785:21;25781:1;25773:6;25769:14;25762:45;25645:169;:::o;25820:366::-;25962:3;25983:67;26047:2;26042:3;25983:67;:::i;:::-;25976:74;;26059:93;26148:3;26059:93;:::i;:::-;26177:2;26172:3;26168:12;26161:19;;25820:366;;;:::o;26192:419::-;26358:4;26396:2;26385:9;26381:18;26373:26;;26445:9;26439:4;26435:20;26431:1;26420:9;26416:17;26409:47;26473:131;26599:4;26473:131;:::i;:::-;26465:139;;26192:419;;;:::o;26617:241::-;26757:34;26753:1;26745:6;26741:14;26734:58;26826:24;26821:2;26813:6;26809:15;26802:49;26617:241;:::o;26864:366::-;27006:3;27027:67;27091:2;27086:3;27027:67;:::i;:::-;27020:74;;27103:93;27192:3;27103:93;:::i;:::-;27221:2;27216:3;27212:12;27205:19;;26864:366;;;:::o;27236:419::-;27402:4;27440:2;27429:9;27425:18;27417:26;;27489:9;27483:4;27479:20;27475:1;27464:9;27460:17;27453:47;27517:131;27643:4;27517:131;:::i;:::-;27509:139;;27236:419;;;:::o;27661:194::-;27701:4;27721:20;27739:1;27721:20;:::i;:::-;27716:25;;27755:20;27773:1;27755:20;:::i;:::-;27750:25;;27799:1;27796;27792:9;27784:17;;27823:1;27817:4;27814:11;27811:37;;;27828:18;;:::i;:::-;27811:37;27661:194;;;;:::o;27861:177::-;28001:29;27997:1;27989:6;27985:14;27978:53;27861:177;:::o;28044:366::-;28186:3;28207:67;28271:2;28266:3;28207:67;:::i;:::-;28200:74;;28283:93;28372:3;28283:93;:::i;:::-;28401:2;28396:3;28392:12;28385:19;;28044:366;;;:::o;28416:419::-;28582:4;28620:2;28609:9;28605:18;28597:26;;28669:9;28663:4;28659:20;28655:1;28644:9;28640:17;28633:47;28697:131;28823:4;28697:131;:::i;:::-;28689:139;;28416:419;;;:::o;28841:442::-;28990:4;29028:2;29017:9;29013:18;29005:26;;29041:71;29109:1;29098:9;29094:17;29085:6;29041:71;:::i;:::-;29122:72;29190:2;29179:9;29175:18;29166:6;29122:72;:::i;:::-;29204;29272:2;29261:9;29257:18;29248:6;29204:72;:::i;:::-;28841:442;;;;;;:::o;29289:220::-;29429:34;29425:1;29417:6;29413:14;29406:58;29498:3;29493:2;29485:6;29481:15;29474:28;29289:220;:::o;29515:366::-;29657:3;29678:67;29742:2;29737:3;29678:67;:::i;:::-;29671:74;;29754:93;29843:3;29754:93;:::i;:::-;29872:2;29867:3;29863:12;29856:19;;29515:366;;;:::o;29887:419::-;30053:4;30091:2;30080:9;30076:18;30068:26;;30140:9;30134:4;30130:20;30126:1;30115:9;30111:17;30104:47;30168:131;30294:4;30168:131;:::i;:::-;30160:139;;29887:419;;;:::o;30312:180::-;30360:77;30357:1;30350:88;30457:4;30454:1;30447:15;30481:4;30478:1;30471:15;30498:180;30546:77;30543:1;30536:88;30643:4;30640:1;30633:15;30667:4;30664:1;30657:15;30684:114;30751:6;30785:5;30779:12;30769:22;;30684:114;;;:::o;30804:184::-;30903:11;30937:6;30932:3;30925:19;30977:4;30972:3;30968:14;30953:29;;30804:184;;;;:::o;30994:132::-;31061:4;31084:3;31076:11;;31114:4;31109:3;31105:14;31097:22;;30994:132;;;:::o;31132:108::-;31209:24;31227:5;31209:24;:::i;:::-;31204:3;31197:37;31132:108;;:::o;31246:179::-;31315:10;31336:46;31378:3;31370:6;31336:46;:::i;:::-;31414:4;31409:3;31405:14;31391:28;;31246:179;;;;:::o;31431:113::-;31501:4;31533;31528:3;31524:14;31516:22;;31431:113;;;:::o;31580:732::-;31699:3;31728:54;31776:5;31728:54;:::i;:::-;31798:86;31877:6;31872:3;31798:86;:::i;:::-;31791:93;;31908:56;31958:5;31908:56;:::i;:::-;31987:7;32018:1;32003:284;32028:6;32025:1;32022:13;32003:284;;;32104:6;32098:13;32131:63;32190:3;32175:13;32131:63;:::i;:::-;32124:70;;32217:60;32270:6;32217:60;:::i;:::-;32207:70;;32063:224;32050:1;32047;32043:9;32038:14;;32003:284;;;32007:14;32303:3;32296:10;;31704:608;;;31580:732;;;;:::o;32318:831::-;32581:4;32619:3;32608:9;32604:19;32596:27;;32633:71;32701:1;32690:9;32686:17;32677:6;32633:71;:::i;:::-;32714:80;32790:2;32779:9;32775:18;32766:6;32714:80;:::i;:::-;32841:9;32835:4;32831:20;32826:2;32815:9;32811:18;32804:48;32869:108;32972:4;32963:6;32869:108;:::i;:::-;32861:116;;32987:72;33055:2;33044:9;33040:18;33031:6;32987:72;:::i;:::-;33069:73;33137:3;33126:9;33122:19;33113:6;33069:73;:::i;:::-;32318:831;;;;;;;;:::o

Swarm Source

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