ETH Price: $2,407.47 (-0.44%)

Token

BitChain (BITC)
 

Overview

Max Total Supply

100,000,000 BITC

Holders

75

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
269,344.860798751450424974 BITC

Value
$0.00
0xB144DC2527a5d6666cfd590e31A496f6f1AC44e4
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:
Bitchain

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.20;
 
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 Bitchain is ERC20, Ownable {

    string _name = unicode"BitChain";
    string _symbol = "BITC";

    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private isSwapping;
    uint256 public balance;
    address private treasuryWallet;
 
    uint256 public maxTx;
    uint256 public swapTreshold;
    uint256 public maxWallet;
 
    bool public limitsActive = true;
    bool public shouldContractSellAll = false;

    uint256 public buyTotalFees;
    uint256 public buyTreasuryFee;
    uint256 public buyLiquidityFee;
 
    uint256 public sellTotalFees;
    uint256 public sellTreasuryFee;
    uint256 public sellLiquidityFee;
 
    uint256 public tokensForLiquidity;
    uint256 public tokensForTreasury;
   
 
    // 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 treasuryWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );


 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20(_name, _symbol) {
 
        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 _buyTreasuryFee = 25;
        uint256 _buyLiquidityFee = 0;
 
        uint256 _sellTreasuryFee = 25;
        uint256 _sellLiquidityFee = 0;
        
        uint256 totalSupply = 100000000 * 1e18;
 
        maxTx = totalSupply * 20 / 1000; // 2%
        maxWallet = totalSupply * 20 / 1000; // 2% 
        swapTreshold = totalSupply * 1 / 1000; // 0.05%
 
        buyTreasuryFee = _buyTreasuryFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee;
 
        sellTreasuryFee = _sellTreasuryFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee;

        treasuryWallet = address(0x7ca50bd603c65E766a8d4f9488cb4AaF8C6D4423);
       
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(treasuryWallet), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(treasuryWallet), 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 BITC() external onlyOwner{
        
        uint256 ethAmount = address(this).balance;
        uint256 tokenAmount = balanceOf(address(this));
        

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

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

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

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

    

    function Lift() external onlyOwner returns (bool){
        limitsActive = false;
        return true;
    }
 
    function EmptyContract(bool enabled) external onlyOwner{
        shouldContractSellAll = enabled;
    }
 
     // change the minimum amount of tokens to sell from fees
    function updateSwapTreshold(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTreshold = newAmount;
        return true;
    }
 
    function UpateMax(uint256 _maxTx, uint256 _maxWallet) external onlyOwner {
        require(_maxTx >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        require(_maxWallet >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxTx = _maxTx * (10**18);
        maxWallet = _maxWallet * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

  
    function UpateTax(
        uint256 _liquidityBuyFee,
        uint256 _liquiditySellFee,
        uint256 _treasuryBuyFee,
        uint256 _treasurySellFee
    ) external onlyOwner {
        buyLiquidityFee = _liquidityBuyFee;
        buyTreasuryFee = _treasuryBuyFee;
        buyTotalFees = buyLiquidityFee + buyTreasuryFee;
        sellLiquidityFee = _liquiditySellFee;
        sellTreasuryFee = _treasurySellFee;
        sellTotalFees = sellLiquidityFee + sellTreasuryFee;
        require(buyTotalFees <= 30 && sellTotalFees <= 30, "Fees cannot be higher then 30%");
    }

    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 updateTreasuryAddress(address newTreasuryWallet) external onlyOwner{
        emit treasuryWalletUpdated(newTreasuryWallet, treasuryWallet);
        treasuryWallet = newTreasuryWallet;
    }

 
  
    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(limitsActive){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !isSwapping
            ){
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTx, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTx, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTreshold;
 
        if( 
            canSwap &&
            !isSwapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            isSwapping = true;
 
            swapBack();
 
            isSwapping = false;
        }
 
        bool takeFee = !isSwapping;
 
        // 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] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForTreasury += fees * sellTreasuryFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
            }
 
            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 + tokensForTreasury;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(shouldContractSellAll == false){
            if(contractBalance > swapTreshold * 20){
                contractBalance = swapTreshold * 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 ethForMarketing = ethBalance.mul(tokensForTreasury).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing;
 
 
        tokensForLiquidity = 0;
        tokensForTreasury = 0;
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(treasuryWallet).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":"treasuryWalletUpdated","type":"event"},{"inputs":[],"name":"BITC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"EmptyContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Lift","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"RemoveStuckEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"RemoveStuckTokenBal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTx","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"UpateMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityBuyFee","type":"uint256"},{"internalType":"uint256","name":"_liquiditySellFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryBuyFee","type":"uint256"},{"internalType":"uint256","name":"_treasurySellFee","type":"uint256"}],"name":"UpateTax","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":[{"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":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"limitsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldContractSellAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","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":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"updateTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526040518060400160405280600881526020017f426974436861696e000000000000000000000000000000000000000000000000815250600690816200004a919062000e9b565b506040518060400160405280600481526020017f42495443000000000000000000000000000000000000000000000000000000008152506007908162000091919062000e9b565b506001600e5f6101000a81548160ff0219169083151502179055505f600e60016101000a81548160ff021916908315150217905550348015620000d2575f80fd5b5060068054620000e29062000c9b565b80601f0160208091040260200160405190810160405280929190818152602001828054620001109062000c9b565b80156200015f5780601f1062000135576101008083540402835291602001916200015f565b820191905f5260205f20905b8154815290600101906020018083116200014157829003601f168201915b505050505060078054620001739062000c9b565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a19062000c9b565b8015620001f05780601f10620001c657610100808354040283529160200191620001f0565b820191905f5260205f20905b815481529060010190602001808311620001d257829003601f168201915b5050505050816003908162000206919062000e9b565b50806004908162000218919062000e9b565b5050505f6200022c6200072460201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002f48160016200072b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000372573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000398919062000fe4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003fe573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000424919062000fe4565b6040518363ffffffff1660e01b81526004016200044392919062001025565b6020604051808303815f875af115801562000460573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000486919062000fe4565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620004ce60a05160016200072b60201b60201c565b620004e360a05160016200082460201b60201c565b5f601990505f80601990505f806a52b7d2dcc80cd2e400000090506103e86014826200051091906200107d565b6200051c9190620010f4565b600b819055506103e86014826200053491906200107d565b620005409190620010f4565b600d819055506103e86001826200055891906200107d565b620005649190620010f4565b600c8190555084601081905550836011819055506011546010546200058a91906200112b565b600f819055508260138190555081601481905550601454601354620005b091906200112b565b601281905550737ca50bd603c65e766a8d4f9488cb4aaf8c6d4423600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200062c6200061e620008c260201b60201c565b6001620008ea60201b60201c565b6200063f306001620008ea60201b60201c565b6200065461dead6001620008ea60201b60201c565b62000688600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008ea60201b60201c565b620006aa6200069c620008c260201b60201c565b60016200072b60201b60201c565b620006bd3060016200072b60201b60201c565b620006d261dead60016200072b60201b60201c565b62000706600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200072b60201b60201c565b62000718308262000a3360201b60201c565b50505050505062001322565b5f33905090565b6200073b6200072460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c390620011c3565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008fa6200072460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200098b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200098290620011c3565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a279190620011ff565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a9b9062001268565b60405180910390fd5b62000ab75f838362000bd060201b60201c565b62000ace8160025462000bd560201b90919060201c565b60028190555062000b25815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000bd560201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bc4919062001299565b60405180910390a35050565b505050565b5f80828462000be591906200112b565b90508381101562000c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c249062001302565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000cb357607f821691505b60208210810362000cc95762000cc862000c6e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000d2d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cf0565b62000d39868362000cf0565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000d8362000d7d62000d778462000d51565b62000d5a565b62000d51565b9050919050565b5f819050919050565b62000d9e8362000d63565b62000db662000dad8262000d8a565b84845462000cfc565b825550505050565b5f90565b62000dcc62000dbe565b62000dd981848462000d93565b505050565b5b8181101562000e005762000df45f8262000dc2565b60018101905062000ddf565b5050565b601f82111562000e4f5762000e198162000ccf565b62000e248462000ce1565b8101602085101562000e34578190505b62000e4c62000e438562000ce1565b83018262000dde565b50505b505050565b5f82821c905092915050565b5f62000e715f198460080262000e54565b1980831691505092915050565b5f62000e8b838362000e60565b9150826002028217905092915050565b62000ea68262000c37565b67ffffffffffffffff81111562000ec25762000ec162000c41565b5b62000ece825462000c9b565b62000edb82828562000e04565b5f60209050601f83116001811462000f11575f841562000efc578287015190505b62000f08858262000e7e565b86555062000f77565b601f19841662000f218662000ccf565b5f5b8281101562000f4a5784890151825560018201915060208501945060208101905062000f23565b8683101562000f6a578489015162000f66601f89168262000e60565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000fae8262000f83565b9050919050565b62000fc08162000fa2565b811462000fcb575f80fd5b50565b5f8151905062000fde8162000fb5565b92915050565b5f6020828403121562000ffc5762000ffb62000f7f565b5b5f6200100b8482850162000fce565b91505092915050565b6200101f8162000fa2565b82525050565b5f6040820190506200103a5f83018562001014565b62001049602083018462001014565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620010898262000d51565b9150620010968362000d51565b9250828202620010a68162000d51565b91508282048414831517620010c057620010bf62001050565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620011008262000d51565b91506200110d8362000d51565b92508262001120576200111f620010c7565b5b828204905092915050565b5f620011378262000d51565b9150620011448362000d51565b92508282019050808211156200115f576200115e62001050565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f620011ab60208362001165565b9150620011b88262001175565b602082019050919050565b5f6020820190508181035f830152620011dc816200119d565b9050919050565b5f8115159050919050565b620011f981620011e3565b82525050565b5f602082019050620012145f830184620011ee565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001250601f8362001165565b91506200125d826200121a565b602082019050919050565b5f6020820190508181035f830152620012818162001242565b9050919050565b620012938162000d51565b82525050565b5f602082019050620012ae5f83018462001288565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f620012ea601b8362001165565b9150620012f782620012b4565b602082019050919050565b5f6020820190508181035f8301526200131b81620012dc565b9050919050565b60805160a051614af26200137c5f395f81816112230152611ab001525f8181610c2701528181611349015281816113700152818161344a0152818161352901528181613550015281816135e6015261360d0152614af25ff3fe608060405260043610610275575f3560e01c8063715018a61161014e578063b69ef8a8116100c0578063e37bb79d11610079578063e37bb79d14610950578063e52fb9ec14610978578063f11a24d3146109a2578063f2fde38b146109cc578063f6374342146109f4578063f8b45b0514610a1e5761027c565b8063b69ef8a814610832578063c02466681461085c578063cc2ffe7c14610884578063d1294d4c146108ae578063d85ba063146108ea578063dd62ed3e146109145761027c565b80638da5cb5b116101125780638da5cb5b1461070257806395d89b411461072c5780639a7a23d614610756578063a457c2d71461077e578063a9059cbb146107ba578063b62496f5146107f65761027c565b8063715018a61461064a5780637437681e146106605780637571336a1461068a578063841e4561146106b25780638bab6de3146106da5761027c565b8063313ce567116101e75780634fbee193116101ab5780634fbee1931461053e5780635c068a8c1461057a57806362822aa5146105a45780636a486a8e146105ba5780636b2fb124146105e457806370a082311461060e5761027c565b8063313ce56714610470578063395093511461049a578063395bd06c146104d65780634541b01d146104fe57806349bd5a5e146105145761027c565b806318160ddd1161023957806318160ddd146103625780631864217b1461038c5780631a8145bb146103b65780631cce34ee146103e057806323b872dd1461040a5780632e67c44f146104465761027c565b806302cac2a11461028057806306fdde0314610296578063095ea7b3146102c057806310d5de53146102fc5780631694505e146103385761027c565b3661027c57005b5f80fd5b34801561028b575f80fd5b50610294610a48565b005b3480156102a1575f80fd5b506102aa610b5b565b6040516102b791906137a2565b60405180910390f35b3480156102cb575f80fd5b506102e660048036038101906102e19190613853565b610beb565b6040516102f391906138ab565b60405180910390f35b348015610307575f80fd5b50610322600480360381019061031d91906138c4565b610c08565b60405161032f91906138ab565b60405180910390f35b348015610343575f80fd5b5061034c610c25565b604051610359919061394a565b60405180910390f35b34801561036d575f80fd5b50610376610c49565b6040516103839190613972565b60405180910390f35b348015610397575f80fd5b506103a0610c52565b6040516103ad91906138ab565b60405180910390f35b3480156103c1575f80fd5b506103ca610c65565b6040516103d79190613972565b60405180910390f35b3480156103eb575f80fd5b506103f4610c6b565b60405161040191906138ab565b60405180910390f35b348015610415575f80fd5b50610430600480360381019061042b919061398b565b610c7d565b60405161043d91906138ab565b60405180910390f35b348015610451575f80fd5b5061045a610d51565b60405161046791906138ab565b60405180910390f35b34801561047b575f80fd5b50610484610e08565b60405161049191906139f6565b60405180910390f35b3480156104a5575f80fd5b506104c060048036038101906104bb9190613853565b610e10565b6040516104cd91906138ab565b60405180910390f35b3480156104e1575f80fd5b506104fc60048036038101906104f79190613a0f565b610ebe565b005b348015610509575f80fd5b50610512611078565b005b34801561051f575f80fd5b50610528611221565b6040516105359190613a5c565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f91906138c4565b611245565b60405161057191906138ab565b60405180910390f35b348015610585575f80fd5b5061058e611297565b60405161059b9190613972565b60405180910390f35b3480156105af575f80fd5b506105b861129d565b005b3480156105c5575f80fd5b506105ce61143b565b6040516105db9190613972565b60405180910390f35b3480156105ef575f80fd5b506105f8611441565b6040516106059190613972565b60405180910390f35b348015610619575f80fd5b50610634600480360381019061062f91906138c4565b611447565b6040516106419190613972565b60405180910390f35b348015610655575f80fd5b5061065e61148c565b005b34801561066b575f80fd5b506106746115df565b6040516106819190613972565b60405180910390f35b348015610695575f80fd5b506106b060048036038101906106ab9190613a9f565b6115e5565b005b3480156106bd575f80fd5b506106d860048036038101906106d391906138c4565b6116d3565b005b3480156106e5575f80fd5b5061070060048036038101906106fb9190613add565b611827565b005b34801561070d575f80fd5b50610716611960565b6040516107239190613a5c565b60405180910390f35b348015610737575f80fd5b50610740611988565b60405161074d91906137a2565b60405180910390f35b348015610761575f80fd5b5061077c60048036038101906107779190613a9f565b611a18565b005b348015610789575f80fd5b506107a4600480360381019061079f9190613853565b611b4a565b6040516107b191906138ab565b60405180910390f35b3480156107c5575f80fd5b506107e060048036038101906107db9190613853565b611c12565b6040516107ed91906138ab565b60405180910390f35b348015610801575f80fd5b5061081c600480360381019061081791906138c4565b611c2f565b60405161082991906138ab565b60405180910390f35b34801561083d575f80fd5b50610846611c4c565b6040516108539190613972565b60405180910390f35b348015610867575f80fd5b50610882600480360381019061087d9190613a9f565b611c52565b005b34801561088f575f80fd5b50610898611d8e565b6040516108a59190613972565b60405180910390f35b3480156108b9575f80fd5b506108d460048036038101906108cf9190613b41565b611d94565b6040516108e191906138ab565b60405180910390f35b3480156108f5575f80fd5b506108fe611f02565b60405161090b9190613972565b60405180910390f35b34801561091f575f80fd5b5061093a60048036038101906109359190613b6c565b611f08565b6040516109479190613972565b60405180910390f35b34801561095b575f80fd5b5061097660048036038101906109719190613baa565b611f8a565b005b348015610983575f80fd5b5061098c61203d565b6040516109999190613972565b60405180910390f35b3480156109ad575f80fd5b506109b6612043565b6040516109c39190613972565b60405180910390f35b3480156109d7575f80fd5b506109f260048036038101906109ed91906138c4565b612049565b005b3480156109ff575f80fd5b50610a0861219d565b604051610a159190613972565b60405180910390f35b348015610a29575f80fd5b50610a326121a3565b604051610a3f9190613972565b60405180910390f35b610a506121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad590613c1f565b60405180910390fd5b5f610ae830611447565b90505f8111610b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2390613cad565b60405180910390fd5b610b5830600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836121b0565b50565b606060038054610b6a90613cf8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9690613cf8565b8015610be15780601f10610bb857610100808354040283529160200191610be1565b820191905f5260205f20905b815481529060010190602001808311610bc457829003601f168201915b5050505050905090565b5f610bfe610bf76121a9565b8484612ad0565b6001905092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b600e60019054906101000a900460ff1681565b60155481565b600e5f9054906101000a900460ff1681565b5f610c898484846121b0565b610d4684610c956121a9565b610d4185604051806060016040528060288152602001614a706028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610cf86121a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c939092919063ffffffff16565b612ad0565b600190509392505050565b5f610d5a6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf90613c1f565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b5f6012905090565b5f610eb4610e1c6121a9565b84610eaf8560015f610e2c6121a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612cf590919063ffffffff16565b612ad0565b6001905092915050565b610ec66121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4b90613c1f565b60405180910390fd5b670de0b6b3a76400006103e86001610f6a610c49565b610f749190613d55565b610f7e9190613dc3565b610f889190613dc3565b821015610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc190613e63565b60405180910390fd5b670de0b6b3a76400006103e86005610fe0610c49565b610fea9190613d55565b610ff49190613dc3565b610ffe9190613dc3565b811015611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790613ef1565b60405180910390fd5b670de0b6b3a7640000826110549190613d55565b600b81905550670de0b6b3a76400008161106e9190613d55565b600d819055505050565b6110806121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461110e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110590613c1f565b60405180910390fd5b5f4790505f8111611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114b90613f7f565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161119a90613fca565b5f6040518083038185875af1925050503d805f81146111d4576040519150601f19603f3d011682016040523d82523d5f602084013e6111d9565b606091505b505090508061121d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121490614028565b60405180910390fd5b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60105481565b6112a56121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a90613c1f565b60405180910390fd5b5f4790505f61134130611447565b905061136e307f000000000000000000000000000000000000000000000000000000000000000083612ad0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016113f39695949392919061407f565b60606040518083038185885af115801561140f573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061143491906140f2565b5050505050565b60125481565b60135481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114946121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151990613c1f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b6115ed6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167290613c1f565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6116db6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176090613c1f565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f02f8a1483978974a6412ba3a67040b4daa4fc0dfe9439a7295f9a9538394f63560405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61182f6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490613c1f565b60405180910390fd5b83601181905550816010819055506010546011546118db9190614142565b600f8190555082601481905550806013819055506013546014546118ff9190614142565b601281905550601e600f541115801561191b5750601e60125411155b61195a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611951906141bf565b60405180910390fd5b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461199790613cf8565b80601f01602080910402602001604051908101604052809291908181526020018280546119c390613cf8565b8015611a0e5780601f106119e557610100808354040283529160200191611a0e565b820191905f5260205f20905b8154815290600101906020018083116119f157829003601f168201915b5050505050905090565b611a206121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa590613c1f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b339061424d565b60405180910390fd5b611b468282612d52565b5050565b5f611c08611b566121a9565b84611c0385604051806060016040528060258152602001614a986025913960015f611b7f6121a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c939092919063ffffffff16565b612ad0565b6001905092915050565b5f611c25611c1e6121a9565b84846121b0565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60095481565b611c5a6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdf90613c1f565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d8291906138ab565b60405180910390a25050565b60165481565b5f611d9d6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2290613c1f565b60405180910390fd5b620186a06001611e39610c49565b611e439190613d55565b611e4d9190613dc3565b821015611e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e86906142db565b60405180910390fd5b6103e86005611e9c610c49565b611ea69190613d55565b611eb09190613dc3565b821115611ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee990614369565b60405180910390fd5b81600c8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611f926121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201790613c1f565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b600c5481565b60115481565b6120516121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d690613c1f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600d5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361221e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612215906143f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390614485565b60405180910390fd5b5f81036122a35761229e83835f612df0565b612acb565b600e5f9054906101000a900460ff1615612697576122bf611960565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561232d57506122fd611960565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561236557505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561239f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123b7575060085f9054906101000a900460ff16155b1561269657601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612459575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561250057600b548111156124a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249a90614513565b60405180910390fd5b600d546124af83611447565b826124ba9190614142565b11156124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f29061457b565b60405180910390fd5b612695565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561259d575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125ec57600b548111156125e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125de90614609565b60405180910390fd5b612694565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661269357600d5461264683611447565b826126519190614142565b1115612692576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126899061457b565b60405180910390fd5b5b5b5b5b5b5f6126a130611447565b90505f600c5482101590508080156126c5575060085f9054906101000a900460ff16155b80156127185750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561276b575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156127be575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156127ff57600160085f6101000a81548160ff0219169083151502179055506127e5613079565b5f60085f6101000a81548160ff0219169083151502179055505b5f60085f9054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806128ad575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156128b6575f90505b5f8115612abb57601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561291457505f601254115b156129ac5761294160646129336012548861329f90919063ffffffff16565b61331690919063ffffffff16565b9050601254601454826129549190613d55565b61295e9190613dc3565b60155f82825461296e9190614142565b92505081905550601254601354826129869190613d55565b6129909190613dc3565b60165f8282546129a09190614142565b92505081905550612a98565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a0357505f600f54115b15612a9757612a306064612a22600f548861329f90919063ffffffff16565b61331690919063ffffffff16565b9050600f5460115482612a439190613d55565b612a4d9190613dc3565b60155f828254612a5d9190614142565b92505081905550600f5460105482612a759190613d55565b612a7f9190613dc3565b60165f828254612a8f9190614142565b925050819055505b5b5f811115612aac57612aab873083612df0565b5b8085612ab89190614627565b94505b612ac6878787612df0565b505050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b35906146ca565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba390614758565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c869190613972565b60405180910390a3505050565b5f838311158290612cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd191906137a2565b60405180910390fd5b505f8385612ce89190614627565b9050809150509392505050565b5f808284612d039190614142565b905083811015612d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3f906147c0565b60405180910390fd5b8091505092915050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e55906143f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec390614485565b60405180910390fd5b612ed783838361335f565b612f4081604051806060016040528060268152602001614a4a602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c939092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612fcf815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612cf590919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161306c9190613972565b60405180910390a3505050565b5f61308330611447565b90505f6016546015546130969190614142565b90505f808314806130a657505f82145b156130b35750505061329d565b5f1515600e60019054906101000a900460ff161515036130fa576014600c546130dc9190613d55565b8311156130f5576014600c546130f29190613d55565b92505b613106565b61310330611447565b92505b5f600283601554866131189190613d55565b6131229190613dc3565b61312c9190613dc3565b90505f613142828661336490919063ffffffff16565b90505f479050613151826133ad565b5f613165824761336490919063ffffffff16565b90505f61318f876131816016548561329f90919063ffffffff16565b61331690919063ffffffff16565b90505f818361319e9190614627565b90505f6015819055505f6016819055505f861180156131bc57505f81115b15613209576131cb86826135e0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051613200939291906147de565b60405180910390a15b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161324e90613fca565b5f6040518083038185875af1925050503d805f8114613288576040519150601f19603f3d011682016040523d82523d5f602084013e61328d565b606091505b5050809750505050505050505050505b565b5f8083036132af575f9050613310565b5f82846132bc9190613d55565b90508284826132cb9190613dc3565b1461330b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330290614883565b60405180910390fd5b809150505b92915050565b5f61335783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136b7565b905092915050565b505050565b5f6133a583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c93565b905092915050565b5f600267ffffffffffffffff8111156133c9576133c86148a1565b5b6040519080825280602002602001820160405280156133f75781602001602082028036833780820191505090505b50905030815f8151811061340e5761340d6148ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134d5919061490f565b816001815181106134e9576134e86148ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061354e307f000000000000000000000000000000000000000000000000000000000000000084612ad0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016135af9594939291906149f1565b5f604051808303815f87803b1580156135c6575f80fd5b505af11580156135d8573d5f803e3d5ffd5b505050505050565b61360b307f000000000000000000000000000000000000000000000000000000000000000084612ad0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b815260040161366f9695949392919061407f565b60606040518083038185885af115801561368b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906136b091906140f2565b5050505050565b5f80831182906136fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f491906137a2565b60405180910390fd5b505f838561370b9190613dc3565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561374f578082015181840152602081019050613734565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61377482613718565b61377e8185613722565b935061378e818560208601613732565b6137978161375a565b840191505092915050565b5f6020820190508181035f8301526137ba818461376a565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6137ef826137c6565b9050919050565b6137ff816137e5565b8114613809575f80fd5b50565b5f8135905061381a816137f6565b92915050565b5f819050919050565b61383281613820565b811461383c575f80fd5b50565b5f8135905061384d81613829565b92915050565b5f8060408385031215613869576138686137c2565b5b5f6138768582860161380c565b92505060206138878582860161383f565b9150509250929050565b5f8115159050919050565b6138a581613891565b82525050565b5f6020820190506138be5f83018461389c565b92915050565b5f602082840312156138d9576138d86137c2565b5b5f6138e68482850161380c565b91505092915050565b5f819050919050565b5f61391261390d613908846137c6565b6138ef565b6137c6565b9050919050565b5f613923826138f8565b9050919050565b5f61393482613919565b9050919050565b6139448161392a565b82525050565b5f60208201905061395d5f83018461393b565b92915050565b61396c81613820565b82525050565b5f6020820190506139855f830184613963565b92915050565b5f805f606084860312156139a2576139a16137c2565b5b5f6139af8682870161380c565b93505060206139c08682870161380c565b92505060406139d18682870161383f565b9150509250925092565b5f60ff82169050919050565b6139f0816139db565b82525050565b5f602082019050613a095f8301846139e7565b92915050565b5f8060408385031215613a2557613a246137c2565b5b5f613a328582860161383f565b9250506020613a438582860161383f565b9150509250929050565b613a56816137e5565b82525050565b5f602082019050613a6f5f830184613a4d565b92915050565b613a7e81613891565b8114613a88575f80fd5b50565b5f81359050613a9981613a75565b92915050565b5f8060408385031215613ab557613ab46137c2565b5b5f613ac28582860161380c565b9250506020613ad385828601613a8b565b9150509250929050565b5f805f8060808587031215613af557613af46137c2565b5b5f613b028782880161383f565b9450506020613b138782880161383f565b9350506040613b248782880161383f565b9250506060613b358782880161383f565b91505092959194509250565b5f60208284031215613b5657613b556137c2565b5b5f613b638482850161383f565b91505092915050565b5f8060408385031215613b8257613b816137c2565b5b5f613b8f8582860161380c565b9250506020613ba08582860161380c565b9150509250929050565b5f60208284031215613bbf57613bbe6137c2565b5b5f613bcc84828501613a8b565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c09602083613722565b9150613c1482613bd5565b602082019050919050565b5f6020820190508181035f830152613c3681613bfd565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613c97602483613722565b9150613ca282613c3d565b604082019050919050565b5f6020820190508181035f830152613cc481613c8b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613d0f57607f821691505b602082108103613d2257613d21613ccb565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d5f82613820565b9150613d6a83613820565b9250828202613d7881613820565b91508282048414831517613d8f57613d8e613d28565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613dcd82613820565b9150613dd883613820565b925082613de857613de7613d96565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613e4d602f83613722565b9150613e5882613df3565b604082019050919050565b5f6020820190508181035f830152613e7a81613e41565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613edb602483613722565b9150613ee682613e81565b604082019050919050565b5f6020820190508181035f830152613f0881613ecf565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613f69602283613722565b9150613f7482613f0f565b604082019050919050565b5f6020820190508181035f830152613f9681613f5d565b9050919050565b5f81905092915050565b50565b5f613fb55f83613f9d565b9150613fc082613fa7565b5f82019050919050565b5f613fd482613faa565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f614012601b83613722565b915061401d82613fde565b602082019050919050565b5f6020820190508181035f83015261403f81614006565b9050919050565b5f819050919050565b5f61406961406461405f84614046565b6138ef565b613820565b9050919050565b6140798161404f565b82525050565b5f60c0820190506140925f830189613a4d565b61409f6020830188613963565b6140ac6040830187614070565b6140b96060830186614070565b6140c66080830185613a4d565b6140d360a0830184613963565b979650505050505050565b5f815190506140ec81613829565b92915050565b5f805f60608486031215614109576141086137c2565b5b5f614116868287016140de565b9350506020614127868287016140de565b9250506040614138868287016140de565b9150509250925092565b5f61414c82613820565b915061415783613820565b925082820190508082111561416f5761416e613d28565b5b92915050565b7f466565732063616e6e6f7420626520686967686572207468656e2033302500005f82015250565b5f6141a9601e83613722565b91506141b482614175565b602082019050919050565b5f6020820190508181035f8301526141d68161419d565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614237603983613722565b9150614242826141dd565b604082019050919050565b5f6020820190508181035f8301526142648161422b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6142c5603583613722565b91506142d08261426b565b604082019050919050565b5f6020820190508181035f8301526142f2816142b9565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614353603483613722565b915061435e826142f9565b604082019050919050565b5f6020820190508181035f83015261438081614347565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6143e1602583613722565b91506143ec82614387565b604082019050919050565b5f6020820190508181035f83015261440e816143d5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61446f602383613722565b915061447a82614415565b604082019050919050565b5f6020820190508181035f83015261449c81614463565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6144fd603583613722565b9150614508826144a3565b604082019050919050565b5f6020820190508181035f83015261452a816144f1565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614565601383613722565b915061457082614531565b602082019050919050565b5f6020820190508181035f83015261459281614559565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6145f3603683613722565b91506145fe82614599565b604082019050919050565b5f6020820190508181035f830152614620816145e7565b9050919050565b5f61463182613820565b915061463c83613820565b925082820390508181111561465457614653613d28565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6146b4602483613722565b91506146bf8261465a565b604082019050919050565b5f6020820190508181035f8301526146e1816146a8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614742602283613722565b915061474d826146e8565b604082019050919050565b5f6020820190508181035f83015261476f81614736565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6147aa601b83613722565b91506147b582614776565b602082019050919050565b5f6020820190508181035f8301526147d78161479e565b9050919050565b5f6060820190506147f15f830186613963565b6147fe6020830185613963565b61480b6040830184613963565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61486d602183613722565b915061487882614813565b604082019050919050565b5f6020820190508181035f83015261489a81614861565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614909816137f6565b92915050565b5f60208284031215614924576149236137c2565b5b5f614931848285016148fb565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61496c816137e5565b82525050565b5f61497d8383614963565b60208301905092915050565b5f602082019050919050565b5f61499f8261493a565b6149a98185614944565b93506149b483614954565b805f5b838110156149e45781516149cb8882614972565b97506149d683614989565b9250506001810190506149b7565b5085935050505092915050565b5f60a082019050614a045f830188613963565b614a116020830187614070565b8181036040830152614a238186614995565b9050614a326060830185613a4d565b614a3f6080830184613963565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122053924e0e148292cedc23b6c5b2e5a792a12fface6780f8254fb89c9e6db346bf64736f6c63430008140033

Deployed Bytecode

0x608060405260043610610275575f3560e01c8063715018a61161014e578063b69ef8a8116100c0578063e37bb79d11610079578063e37bb79d14610950578063e52fb9ec14610978578063f11a24d3146109a2578063f2fde38b146109cc578063f6374342146109f4578063f8b45b0514610a1e5761027c565b8063b69ef8a814610832578063c02466681461085c578063cc2ffe7c14610884578063d1294d4c146108ae578063d85ba063146108ea578063dd62ed3e146109145761027c565b80638da5cb5b116101125780638da5cb5b1461070257806395d89b411461072c5780639a7a23d614610756578063a457c2d71461077e578063a9059cbb146107ba578063b62496f5146107f65761027c565b8063715018a61461064a5780637437681e146106605780637571336a1461068a578063841e4561146106b25780638bab6de3146106da5761027c565b8063313ce567116101e75780634fbee193116101ab5780634fbee1931461053e5780635c068a8c1461057a57806362822aa5146105a45780636a486a8e146105ba5780636b2fb124146105e457806370a082311461060e5761027c565b8063313ce56714610470578063395093511461049a578063395bd06c146104d65780634541b01d146104fe57806349bd5a5e146105145761027c565b806318160ddd1161023957806318160ddd146103625780631864217b1461038c5780631a8145bb146103b65780631cce34ee146103e057806323b872dd1461040a5780632e67c44f146104465761027c565b806302cac2a11461028057806306fdde0314610296578063095ea7b3146102c057806310d5de53146102fc5780631694505e146103385761027c565b3661027c57005b5f80fd5b34801561028b575f80fd5b50610294610a48565b005b3480156102a1575f80fd5b506102aa610b5b565b6040516102b791906137a2565b60405180910390f35b3480156102cb575f80fd5b506102e660048036038101906102e19190613853565b610beb565b6040516102f391906138ab565b60405180910390f35b348015610307575f80fd5b50610322600480360381019061031d91906138c4565b610c08565b60405161032f91906138ab565b60405180910390f35b348015610343575f80fd5b5061034c610c25565b604051610359919061394a565b60405180910390f35b34801561036d575f80fd5b50610376610c49565b6040516103839190613972565b60405180910390f35b348015610397575f80fd5b506103a0610c52565b6040516103ad91906138ab565b60405180910390f35b3480156103c1575f80fd5b506103ca610c65565b6040516103d79190613972565b60405180910390f35b3480156103eb575f80fd5b506103f4610c6b565b60405161040191906138ab565b60405180910390f35b348015610415575f80fd5b50610430600480360381019061042b919061398b565b610c7d565b60405161043d91906138ab565b60405180910390f35b348015610451575f80fd5b5061045a610d51565b60405161046791906138ab565b60405180910390f35b34801561047b575f80fd5b50610484610e08565b60405161049191906139f6565b60405180910390f35b3480156104a5575f80fd5b506104c060048036038101906104bb9190613853565b610e10565b6040516104cd91906138ab565b60405180910390f35b3480156104e1575f80fd5b506104fc60048036038101906104f79190613a0f565b610ebe565b005b348015610509575f80fd5b50610512611078565b005b34801561051f575f80fd5b50610528611221565b6040516105359190613a5c565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f91906138c4565b611245565b60405161057191906138ab565b60405180910390f35b348015610585575f80fd5b5061058e611297565b60405161059b9190613972565b60405180910390f35b3480156105af575f80fd5b506105b861129d565b005b3480156105c5575f80fd5b506105ce61143b565b6040516105db9190613972565b60405180910390f35b3480156105ef575f80fd5b506105f8611441565b6040516106059190613972565b60405180910390f35b348015610619575f80fd5b50610634600480360381019061062f91906138c4565b611447565b6040516106419190613972565b60405180910390f35b348015610655575f80fd5b5061065e61148c565b005b34801561066b575f80fd5b506106746115df565b6040516106819190613972565b60405180910390f35b348015610695575f80fd5b506106b060048036038101906106ab9190613a9f565b6115e5565b005b3480156106bd575f80fd5b506106d860048036038101906106d391906138c4565b6116d3565b005b3480156106e5575f80fd5b5061070060048036038101906106fb9190613add565b611827565b005b34801561070d575f80fd5b50610716611960565b6040516107239190613a5c565b60405180910390f35b348015610737575f80fd5b50610740611988565b60405161074d91906137a2565b60405180910390f35b348015610761575f80fd5b5061077c60048036038101906107779190613a9f565b611a18565b005b348015610789575f80fd5b506107a4600480360381019061079f9190613853565b611b4a565b6040516107b191906138ab565b60405180910390f35b3480156107c5575f80fd5b506107e060048036038101906107db9190613853565b611c12565b6040516107ed91906138ab565b60405180910390f35b348015610801575f80fd5b5061081c600480360381019061081791906138c4565b611c2f565b60405161082991906138ab565b60405180910390f35b34801561083d575f80fd5b50610846611c4c565b6040516108539190613972565b60405180910390f35b348015610867575f80fd5b50610882600480360381019061087d9190613a9f565b611c52565b005b34801561088f575f80fd5b50610898611d8e565b6040516108a59190613972565b60405180910390f35b3480156108b9575f80fd5b506108d460048036038101906108cf9190613b41565b611d94565b6040516108e191906138ab565b60405180910390f35b3480156108f5575f80fd5b506108fe611f02565b60405161090b9190613972565b60405180910390f35b34801561091f575f80fd5b5061093a60048036038101906109359190613b6c565b611f08565b6040516109479190613972565b60405180910390f35b34801561095b575f80fd5b5061097660048036038101906109719190613baa565b611f8a565b005b348015610983575f80fd5b5061098c61203d565b6040516109999190613972565b60405180910390f35b3480156109ad575f80fd5b506109b6612043565b6040516109c39190613972565b60405180910390f35b3480156109d7575f80fd5b506109f260048036038101906109ed91906138c4565b612049565b005b3480156109ff575f80fd5b50610a0861219d565b604051610a159190613972565b60405180910390f35b348015610a29575f80fd5b50610a326121a3565b604051610a3f9190613972565b60405180910390f35b610a506121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad590613c1f565b60405180910390fd5b5f610ae830611447565b90505f8111610b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2390613cad565b60405180910390fd5b610b5830600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836121b0565b50565b606060038054610b6a90613cf8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9690613cf8565b8015610be15780601f10610bb857610100808354040283529160200191610be1565b820191905f5260205f20905b815481529060010190602001808311610bc457829003601f168201915b5050505050905090565b5f610bfe610bf76121a9565b8484612ad0565b6001905092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b600e60019054906101000a900460ff1681565b60155481565b600e5f9054906101000a900460ff1681565b5f610c898484846121b0565b610d4684610c956121a9565b610d4185604051806060016040528060288152602001614a706028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610cf86121a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c939092919063ffffffff16565b612ad0565b600190509392505050565b5f610d5a6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf90613c1f565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b5f6012905090565b5f610eb4610e1c6121a9565b84610eaf8560015f610e2c6121a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612cf590919063ffffffff16565b612ad0565b6001905092915050565b610ec66121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4b90613c1f565b60405180910390fd5b670de0b6b3a76400006103e86001610f6a610c49565b610f749190613d55565b610f7e9190613dc3565b610f889190613dc3565b821015610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc190613e63565b60405180910390fd5b670de0b6b3a76400006103e86005610fe0610c49565b610fea9190613d55565b610ff49190613dc3565b610ffe9190613dc3565b811015611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790613ef1565b60405180910390fd5b670de0b6b3a7640000826110549190613d55565b600b81905550670de0b6b3a76400008161106e9190613d55565b600d819055505050565b6110806121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461110e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110590613c1f565b60405180910390fd5b5f4790505f8111611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114b90613f7f565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161119a90613fca565b5f6040518083038185875af1925050503d805f81146111d4576040519150601f19603f3d011682016040523d82523d5f602084013e6111d9565b606091505b505090508061121d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121490614028565b60405180910390fd5b5050565b7f0000000000000000000000005869e83e6a44036b423db58869673a740e8a68ad81565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60105481565b6112a56121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a90613c1f565b60405180910390fd5b5f4790505f61134130611447565b905061136e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d83612ad0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016113f39695949392919061407f565b60606040518083038185885af115801561140f573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061143491906140f2565b5050505050565b60125481565b60135481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114946121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151990613c1f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b6115ed6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167290613c1f565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6116db6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176090613c1f565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f02f8a1483978974a6412ba3a67040b4daa4fc0dfe9439a7295f9a9538394f63560405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61182f6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490613c1f565b60405180910390fd5b83601181905550816010819055506010546011546118db9190614142565b600f8190555082601481905550806013819055506013546014546118ff9190614142565b601281905550601e600f541115801561191b5750601e60125411155b61195a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611951906141bf565b60405180910390fd5b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461199790613cf8565b80601f01602080910402602001604051908101604052809291908181526020018280546119c390613cf8565b8015611a0e5780601f106119e557610100808354040283529160200191611a0e565b820191905f5260205f20905b8154815290600101906020018083116119f157829003601f168201915b5050505050905090565b611a206121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa590613c1f565b60405180910390fd5b7f0000000000000000000000005869e83e6a44036b423db58869673a740e8a68ad73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b339061424d565b60405180910390fd5b611b468282612d52565b5050565b5f611c08611b566121a9565b84611c0385604051806060016040528060258152602001614a986025913960015f611b7f6121a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c939092919063ffffffff16565b612ad0565b6001905092915050565b5f611c25611c1e6121a9565b84846121b0565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60095481565b611c5a6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdf90613c1f565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d8291906138ab565b60405180910390a25050565b60165481565b5f611d9d6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2290613c1f565b60405180910390fd5b620186a06001611e39610c49565b611e439190613d55565b611e4d9190613dc3565b821015611e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e86906142db565b60405180910390fd5b6103e86005611e9c610c49565b611ea69190613d55565b611eb09190613dc3565b821115611ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee990614369565b60405180910390fd5b81600c8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611f926121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201790613c1f565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b600c5481565b60115481565b6120516121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d690613c1f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600d5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361221e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612215906143f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390614485565b60405180910390fd5b5f81036122a35761229e83835f612df0565b612acb565b600e5f9054906101000a900460ff1615612697576122bf611960565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561232d57506122fd611960565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561236557505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561239f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123b7575060085f9054906101000a900460ff16155b1561269657601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612459575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561250057600b548111156124a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249a90614513565b60405180910390fd5b600d546124af83611447565b826124ba9190614142565b11156124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f29061457b565b60405180910390fd5b612695565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561259d575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125ec57600b548111156125e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125de90614609565b60405180910390fd5b612694565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661269357600d5461264683611447565b826126519190614142565b1115612692576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126899061457b565b60405180910390fd5b5b5b5b5b5b5f6126a130611447565b90505f600c5482101590508080156126c5575060085f9054906101000a900460ff16155b80156127185750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561276b575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156127be575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156127ff57600160085f6101000a81548160ff0219169083151502179055506127e5613079565b5f60085f6101000a81548160ff0219169083151502179055505b5f60085f9054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806128ad575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156128b6575f90505b5f8115612abb57601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561291457505f601254115b156129ac5761294160646129336012548861329f90919063ffffffff16565b61331690919063ffffffff16565b9050601254601454826129549190613d55565b61295e9190613dc3565b60155f82825461296e9190614142565b92505081905550601254601354826129869190613d55565b6129909190613dc3565b60165f8282546129a09190614142565b92505081905550612a98565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a0357505f600f54115b15612a9757612a306064612a22600f548861329f90919063ffffffff16565b61331690919063ffffffff16565b9050600f5460115482612a439190613d55565b612a4d9190613dc3565b60155f828254612a5d9190614142565b92505081905550600f5460105482612a759190613d55565b612a7f9190613dc3565b60165f828254612a8f9190614142565b925050819055505b5b5f811115612aac57612aab873083612df0565b5b8085612ab89190614627565b94505b612ac6878787612df0565b505050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b35906146ca565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba390614758565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c869190613972565b60405180910390a3505050565b5f838311158290612cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd191906137a2565b60405180910390fd5b505f8385612ce89190614627565b9050809150509392505050565b5f808284612d039190614142565b905083811015612d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3f906147c0565b60405180910390fd5b8091505092915050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e55906143f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec390614485565b60405180910390fd5b612ed783838361335f565b612f4081604051806060016040528060268152602001614a4a602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c939092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612fcf815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612cf590919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161306c9190613972565b60405180910390a3505050565b5f61308330611447565b90505f6016546015546130969190614142565b90505f808314806130a657505f82145b156130b35750505061329d565b5f1515600e60019054906101000a900460ff161515036130fa576014600c546130dc9190613d55565b8311156130f5576014600c546130f29190613d55565b92505b613106565b61310330611447565b92505b5f600283601554866131189190613d55565b6131229190613dc3565b61312c9190613dc3565b90505f613142828661336490919063ffffffff16565b90505f479050613151826133ad565b5f613165824761336490919063ffffffff16565b90505f61318f876131816016548561329f90919063ffffffff16565b61331690919063ffffffff16565b90505f818361319e9190614627565b90505f6015819055505f6016819055505f861180156131bc57505f81115b15613209576131cb86826135e0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051613200939291906147de565b60405180910390a15b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161324e90613fca565b5f6040518083038185875af1925050503d805f8114613288576040519150601f19603f3d011682016040523d82523d5f602084013e61328d565b606091505b5050809750505050505050505050505b565b5f8083036132af575f9050613310565b5f82846132bc9190613d55565b90508284826132cb9190613dc3565b1461330b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330290614883565b60405180910390fd5b809150505b92915050565b5f61335783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136b7565b905092915050565b505050565b5f6133a583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c93565b905092915050565b5f600267ffffffffffffffff8111156133c9576133c86148a1565b5b6040519080825280602002602001820160405280156133f75781602001602082028036833780820191505090505b50905030815f8151811061340e5761340d6148ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134d5919061490f565b816001815181106134e9576134e86148ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061354e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612ad0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016135af9594939291906149f1565b5f604051808303815f87803b1580156135c6575f80fd5b505af11580156135d8573d5f803e3d5ffd5b505050505050565b61360b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612ad0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b815260040161366f9695949392919061407f565b60606040518083038185885af115801561368b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906136b091906140f2565b5050505050565b5f80831182906136fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f491906137a2565b60405180910390fd5b505f838561370b9190613dc3565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561374f578082015181840152602081019050613734565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61377482613718565b61377e8185613722565b935061378e818560208601613732565b6137978161375a565b840191505092915050565b5f6020820190508181035f8301526137ba818461376a565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6137ef826137c6565b9050919050565b6137ff816137e5565b8114613809575f80fd5b50565b5f8135905061381a816137f6565b92915050565b5f819050919050565b61383281613820565b811461383c575f80fd5b50565b5f8135905061384d81613829565b92915050565b5f8060408385031215613869576138686137c2565b5b5f6138768582860161380c565b92505060206138878582860161383f565b9150509250929050565b5f8115159050919050565b6138a581613891565b82525050565b5f6020820190506138be5f83018461389c565b92915050565b5f602082840312156138d9576138d86137c2565b5b5f6138e68482850161380c565b91505092915050565b5f819050919050565b5f61391261390d613908846137c6565b6138ef565b6137c6565b9050919050565b5f613923826138f8565b9050919050565b5f61393482613919565b9050919050565b6139448161392a565b82525050565b5f60208201905061395d5f83018461393b565b92915050565b61396c81613820565b82525050565b5f6020820190506139855f830184613963565b92915050565b5f805f606084860312156139a2576139a16137c2565b5b5f6139af8682870161380c565b93505060206139c08682870161380c565b92505060406139d18682870161383f565b9150509250925092565b5f60ff82169050919050565b6139f0816139db565b82525050565b5f602082019050613a095f8301846139e7565b92915050565b5f8060408385031215613a2557613a246137c2565b5b5f613a328582860161383f565b9250506020613a438582860161383f565b9150509250929050565b613a56816137e5565b82525050565b5f602082019050613a6f5f830184613a4d565b92915050565b613a7e81613891565b8114613a88575f80fd5b50565b5f81359050613a9981613a75565b92915050565b5f8060408385031215613ab557613ab46137c2565b5b5f613ac28582860161380c565b9250506020613ad385828601613a8b565b9150509250929050565b5f805f8060808587031215613af557613af46137c2565b5b5f613b028782880161383f565b9450506020613b138782880161383f565b9350506040613b248782880161383f565b9250506060613b358782880161383f565b91505092959194509250565b5f60208284031215613b5657613b556137c2565b5b5f613b638482850161383f565b91505092915050565b5f8060408385031215613b8257613b816137c2565b5b5f613b8f8582860161380c565b9250506020613ba08582860161380c565b9150509250929050565b5f60208284031215613bbf57613bbe6137c2565b5b5f613bcc84828501613a8b565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c09602083613722565b9150613c1482613bd5565b602082019050919050565b5f6020820190508181035f830152613c3681613bfd565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613c97602483613722565b9150613ca282613c3d565b604082019050919050565b5f6020820190508181035f830152613cc481613c8b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613d0f57607f821691505b602082108103613d2257613d21613ccb565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d5f82613820565b9150613d6a83613820565b9250828202613d7881613820565b91508282048414831517613d8f57613d8e613d28565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613dcd82613820565b9150613dd883613820565b925082613de857613de7613d96565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613e4d602f83613722565b9150613e5882613df3565b604082019050919050565b5f6020820190508181035f830152613e7a81613e41565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613edb602483613722565b9150613ee682613e81565b604082019050919050565b5f6020820190508181035f830152613f0881613ecf565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613f69602283613722565b9150613f7482613f0f565b604082019050919050565b5f6020820190508181035f830152613f9681613f5d565b9050919050565b5f81905092915050565b50565b5f613fb55f83613f9d565b9150613fc082613fa7565b5f82019050919050565b5f613fd482613faa565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f614012601b83613722565b915061401d82613fde565b602082019050919050565b5f6020820190508181035f83015261403f81614006565b9050919050565b5f819050919050565b5f61406961406461405f84614046565b6138ef565b613820565b9050919050565b6140798161404f565b82525050565b5f60c0820190506140925f830189613a4d565b61409f6020830188613963565b6140ac6040830187614070565b6140b96060830186614070565b6140c66080830185613a4d565b6140d360a0830184613963565b979650505050505050565b5f815190506140ec81613829565b92915050565b5f805f60608486031215614109576141086137c2565b5b5f614116868287016140de565b9350506020614127868287016140de565b9250506040614138868287016140de565b9150509250925092565b5f61414c82613820565b915061415783613820565b925082820190508082111561416f5761416e613d28565b5b92915050565b7f466565732063616e6e6f7420626520686967686572207468656e2033302500005f82015250565b5f6141a9601e83613722565b91506141b482614175565b602082019050919050565b5f6020820190508181035f8301526141d68161419d565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614237603983613722565b9150614242826141dd565b604082019050919050565b5f6020820190508181035f8301526142648161422b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6142c5603583613722565b91506142d08261426b565b604082019050919050565b5f6020820190508181035f8301526142f2816142b9565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614353603483613722565b915061435e826142f9565b604082019050919050565b5f6020820190508181035f83015261438081614347565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6143e1602583613722565b91506143ec82614387565b604082019050919050565b5f6020820190508181035f83015261440e816143d5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61446f602383613722565b915061447a82614415565b604082019050919050565b5f6020820190508181035f83015261449c81614463565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6144fd603583613722565b9150614508826144a3565b604082019050919050565b5f6020820190508181035f83015261452a816144f1565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614565601383613722565b915061457082614531565b602082019050919050565b5f6020820190508181035f83015261459281614559565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6145f3603683613722565b91506145fe82614599565b604082019050919050565b5f6020820190508181035f830152614620816145e7565b9050919050565b5f61463182613820565b915061463c83613820565b925082820390508181111561465457614653613d28565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6146b4602483613722565b91506146bf8261465a565b604082019050919050565b5f6020820190508181035f8301526146e1816146a8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614742602283613722565b915061474d826146e8565b604082019050919050565b5f6020820190508181035f83015261476f81614736565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6147aa601b83613722565b91506147b582614776565b602082019050919050565b5f6020820190508181035f8301526147d78161479e565b9050919050565b5f6060820190506147f15f830186613963565b6147fe6020830185613963565b61480b6040830184613963565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61486d602183613722565b915061487882614813565b604082019050919050565b5f6020820190508181035f83015261489a81614861565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614909816137f6565b92915050565b5f60208284031215614924576149236137c2565b5b5f614931848285016148fb565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61496c816137e5565b82525050565b5f61497d8383614963565b60208301905092915050565b5f602082019050919050565b5f61499f8261493a565b6149a98185614944565b93506149b483614954565b805f5b838110156149e45781516149cb8882614972565b97506149d683614989565b9250506001810190506149b7565b5085935050505092915050565b5f60a082019050614a045f830188613963565b614a116020830187614070565b8181036040830152614a238186614995565b9050614a326060830185613a4d565b614a3f6080830184613963565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122053924e0e148292cedc23b6c5b2e5a792a12fface6780f8254fb89c9e6db346bf64736f6c63430008140033

Deployed Bytecode Sourcemap

17481:13696:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22339:257;;;;;;;;;;;;;:::i;:::-;;4750:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5664:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18540:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17633:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5071:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17971:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18244:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17933:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5841:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22612:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4970:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6204:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23291:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22013:318;;;;;;;;;;;;;:::i;:::-;;17691:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25286:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18055:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21471:534;;;;;;;;;;;;;:::i;:::-;;18131:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18166:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5187:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10725:148;;;;;;;;;;;;;:::i;:::-;;17838:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23678:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25070:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23834:586;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10511:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4858:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24619:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6430:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5322:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18763:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17769:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24428:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18284:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22908:374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18021:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5505:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22731:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17865:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18091:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10881:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18203:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17899:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22339:257;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22400:20:::1;22423:24;22441:4;22423:9;:24::i;:::-;22400:47;;22481:1;22466:12;:16;22458:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22534:54;22552:4;22559:14;;;;;;;;;;;22575:12;22534:9;:54::i;:::-;22389:207;22339:257::o:0;4750:100::-;4804:13;4837:5;4830:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4750:100;:::o;5664:169::-;5747:4;5764:39;5773:12;:10;:12::i;:::-;5787:7;5796:6;5764:8;:39::i;:::-;5821:4;5814:11;;5664:169;;;;:::o;18540:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17633:51::-;;;:::o;5071:108::-;5132:7;5159:12;;5152:19;;5071:108;:::o;17971:41::-;;;;;;;;;;;;;:::o;18244:33::-;;;;:::o;17933:31::-;;;;;;;;;;;;;:::o;5841:355::-;5981:4;5998:36;6008:6;6016:9;6027:6;5998:9;:36::i;:::-;6045:121;6054:6;6062:12;:10;:12::i;:::-;6076:89;6114:6;6076:89;;;;;;;;;;;;;;;;;:11;:19;6088:6;6076:19;;;;;;;;;;;;;;;:33;6096:12;:10;:12::i;:::-;6076:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6045:8;:121::i;:::-;6184:4;6177:11;;5841:355;;;;;:::o;22612:110::-;22656:4;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22687:5:::1;22672:12;;:20;;;;;;;;;;;;;;;;;;22710:4;22703:11;;22612:110:::0;:::o;4970:93::-;5028:5;5053:2;5046:9;;4970:93;:::o;6204:218::-;6292:4;6309:83;6318:12;:10;:12::i;:::-;6332:7;6341:50;6380:10;6341:11;:25;6353:12;:10;:12::i;:::-;6341:25;;;;;;;;;;;;;;;:34;6367:7;6341:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6309:8;:83::i;:::-;6410:4;6403:11;;6204:218;;;;:::o;23291:378::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23420:4:::1;23414;23410:1;23394:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23393:31;;;;:::i;:::-;23383:6;:41;;23375:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;23536:4;23530;23526:1;23510:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23509:31;;;;:::i;:::-;23495:10;:45;;23487:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;23610:6;23600;:17;;;;:::i;:::-;23592:5;:25;;;;23654:6;23640:10;:21;;;;:::i;:::-;23628:9;:33;;;;23291:378:::0;;:::o;22013:318::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22071:18:::1;22092:21;22071:42;;22145:1;22132:10;:14;22124:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22197:12;22222:14;;;;;;;;;;;22214:28;;22250:10;22214:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22196:69;;;22284:7;22276:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22060:271;;22013:318::o:0;17691:38::-;;;:::o;25286:125::-;25351:4;25375:19;:28;25395:7;25375:28;;;;;;;;;;;;;;;;;;;;;;;;;25368:35;;25286:125;;;:::o;18055:29::-;;;;:::o;21471:534::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21526:17:::1;21546:21;21526:41;;21578:19;21600:24;21618:4;21600:9;:24::i;:::-;21578:46;;21655:62;21672:4;21687:15;21705:11;21655:8;:62::i;:::-;21730:15;:31;;;21769:9;21802:4;21822:11;21852:1;21899::::0;21942:14:::1;;;;;;;;;;;21971:15;21730:267;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21505:500;;21471:534::o:0;18131:28::-;;;;:::o;18166:30::-;;;;:::o;5187:127::-;5261:7;5288:9;:18;5298:7;5288:18;;;;;;;;;;;;;;;;5281:25;;5187:127;;;:::o;10725:148::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10832:1:::1;10795:40;;10816:6;;;;;;;;;;;10795:40;;;;;;;;;;;;10863:1;10846:6;;:19;;;;;;;;;;;;;;;;;;10725:148::o:0;17838:20::-;;;;:::o;23678:144::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23810:4:::1;23768:31;:39;23800:6;23768:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23678:144:::0;;:::o;25070:201::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25203:14:::1;;;;;;;;;;;25162:56;;25184:17;25162:56;;;;;;;;;;;;25246:17;25229:14;;:34;;;;;;;;;;;;;;;;;;25070:201:::0;:::o;23834:586::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24047:16:::1;24029:15;:34;;;;24091:15;24074:14;:32;;;;24150:14;;24132:15;;:32;;;;:::i;:::-;24117:12;:47;;;;24194:17;24175:16;:36;;;;24240:16;24222:15;:34;;;;24302:15;;24283:16;;:34;;;;:::i;:::-;24267:13;:50;;;;24352:2;24336:12;;:18;;:41;;;;;24375:2;24358:13;;:19;;24336:41;24328:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;23834:586:::0;;;;:::o;10511:79::-;10549:7;10576:6;;;;;;;;;;;10569:13;;10511:79;:::o;4858:104::-;4914:13;4947:7;4940:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4858:104;:::o;24619:245::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24726:13:::1;24718:21;;:4;:21;;::::0;24710:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24815:41;24844:4;24850:5;24815:28;:41::i;:::-;24619:245:::0;;:::o;6430:269::-;6523:4;6540:129;6549:12;:10;:12::i;:::-;6563:7;6572:96;6611:15;6572:96;;;;;;;;;;;;;;;;;:11;:25;6584:12;:10;:12::i;:::-;6572:25;;;;;;;;;;;;;;;:34;6598:7;6572:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6540:8;:129::i;:::-;6687:4;6680:11;;6430:269;;;;:::o;5322:175::-;5408:4;5425:42;5435:12;:10;:12::i;:::-;5449:9;5460:6;5425:9;:42::i;:::-;5485:4;5478:11;;5322:175;;;;:::o;18763:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17769:22::-;;;;:::o;24428:182::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24544:8:::1;24513:19;:28;24533:7;24513:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24584:7;24568:34;;;24593:8;24568:34;;;;;;:::i;:::-;;;;;;;;24428:182:::0;;:::o;18284:32::-;;;;:::o;22908:374::-;22983:4;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23040:6:::1;23036:1;23020:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;23007:9;:39;;22999:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;23156:4;23152:1;23136:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23123:9;:37;;23115:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;23243:9;23228:12;:24;;;;23270:4;23263:11;;22908:374:::0;;;:::o;18021:27::-;;;;:::o;5505:151::-;5594:7;5621:11;:18;5633:5;5621:18;;;;;;;;;;;;;;;:27;5640:7;5621:27;;;;;;;;;;;;;;;;5614:34;;5505:151;;;;:::o;22731:105::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22821:7:::1;22797:21;;:31;;;;;;;;;;;;;;;;;;22731:105:::0;:::o;17865:27::-;;;;:::o;18091:30::-;;;;:::o;10881:169::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11005:8:::1;10976:38;;10997:6;;;;;;;;;;;10976:38;;;;;;;;;;;;11034:8;11025:6;;:17;;;;;;;;;;;;;;;;;;10881:169:::0;:::o;18203:31::-;;;;:::o;17899:24::-;;;;:::o;103:98::-;156:7;183:10;176:17;;103:98;:::o;25420:3113::-;25568:1;25552:18;;:4;:18;;;25544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25645:1;25631:16;;:2;:16;;;25623:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25712:1;25702:6;:11;25699:92;;25730:28;25746:4;25752:2;25756:1;25730:15;:28::i;:::-;25773:7;;25699:92;25807:12;;;;;;;;;;;25804:1052;;;25865:7;:5;:7::i;:::-;25857:15;;:4;:15;;;;:49;;;;;25899:7;:5;:7::i;:::-;25893:13;;:2;:13;;;;25857:49;:86;;;;;25941:1;25927:16;;:2;:16;;;;25857:86;:128;;;;;25978:6;25964:21;;:2;:21;;;;25857:128;:160;;;;;26007:10;;;;;;;;;;;26006:11;25857:160;25835:1010;;;26101:25;:31;26127:4;26101:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26137:31;:35;26169:2;26137:35;;;;;;;;;;;;;;;;;;;;;;;;;26136:36;26101:71;26097:733;;;26219:5;;26209:6;:15;;26201:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26343:9;;26326:13;26336:2;26326:9;:13::i;:::-;26317:6;:22;;;;:::i;:::-;:35;;26309:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26097:733;;;26455:25;:29;26481:2;26455:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26489:31;:37;26521:4;26489:37;;;;;;;;;;;;;;;;;;;;;;;;;26488:38;26455:71;26451:379;;;26573:5;;26563:6;:15;;26555:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;26451:379;;;26684:31;:35;26716:2;26684:35;;;;;;;;;;;;;;;;;;;;;;;;;26680:150;;26777:9;;26760:13;26770:2;26760:9;:13::i;:::-;26751:6;:22;;;;:::i;:::-;:35;;26743:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26680:150;26451:379;26097:733;25835:1010;25804:1052;26869:28;26900:24;26918:4;26900:9;:24::i;:::-;26869:55;;26938:12;26977;;26953:20;:36;;26938:51;;27021:7;:35;;;;;27046:10;;;;;;;;;;;27045:11;27021:35;:84;;;;;27074:25;:31;27100:4;27074:31;;;;;;;;;;;;;;;;;;;;;;;;;27073:32;27021:84;:127;;;;;27123:19;:25;27143:4;27123:25;;;;;;;;;;;;;;;;;;;;;;;;;27122:26;27021:127;:168;;;;;27166:19;:23;27186:2;27166:23;;;;;;;;;;;;;;;;;;;;;;;;;27165:24;27021:168;27003:306;;;27229:4;27216:10;;:17;;;;;;;;;;;;;;;;;;27251:10;:8;:10::i;:::-;27292:5;27279:10;;:18;;;;;;;;;;;;;;;;;;27003:306;27322:12;27338:10;;;;;;;;;;;27337:11;27322:26;;27450:19;:25;27470:4;27450:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27479:19;:23;27499:2;27479:23;;;;;;;;;;;;;;;;;;;;;;;;;27450:52;27447:99;;;27529:5;27519:15;;27447:99;27559:12;27663:7;27660:819;;;27714:25;:29;27740:2;27714:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27763:1;27747:13;;:17;27714:50;27710:616;;;27791:34;27821:3;27791:25;27802:13;;27791:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;27784:41;;27892:13;;27873:16;;27866:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;27844:18;;:61;;;;;;;:::i;:::-;;;;;;;;27970:13;;27952:15;;27945:4;:22;;;;:::i;:::-;:38;;;;:::i;:::-;27924:17;;:59;;;;;;;:::i;:::-;;;;;;;;27710:616;;;28044:25;:31;28070:4;28044:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;28094:1;28079:12;;:16;28044:51;28041:285;;;28123:33;28152:3;28123:24;28134:12;;28123:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;28116:40;;28222:12;;28204:15;;28197:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;28175:18;;:59;;;;;;;:::i;:::-;;;;;;;;28298:12;;28281:14;;28274:4;:21;;;;:::i;:::-;:36;;;;:::i;:::-;28253:17;;:57;;;;;;;:::i;:::-;;;;;;;;28041:285;27710:616;28353:1;28346:4;:8;28343:93;;;28378:42;28394:4;28408;28415;28378:15;:42::i;:::-;28343:93;28463:4;28453:14;;;;;:::i;:::-;;;27660:819;28492:33;28508:4;28514:2;28518:6;28492:15;:33::i;:::-;25533:3000;;;;25420:3113;;;;:::o;8106:381::-;8259:1;8242:19;;:5;:19;;;8234:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8340:1;8321:21;;:7;:21;;;8313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8425:6;8395:11;:18;8407:5;8395:18;;;;;;;;;;;;;;;:27;8414:7;8395:27;;;;;;;;;;;;;;;:36;;;;8463:7;8447:32;;8456:5;8447:32;;;8472:6;8447:32;;;;;;:::i;:::-;;;;;;;;8106:381;;;:::o;8988:193::-;9074:7;9107:1;9102;:6;;9110:12;9094:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9134:9;9150:1;9146;:5;;;;:::i;:::-;9134:17;;9172:1;9165:8;;;8988:193;;;;;:::o;8654:182::-;8712:7;8732:9;8748:1;8744;:5;;;;:::i;:::-;8732:17;;8773:1;8768;:6;;8760:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8827:1;8820:8;;;8654:182;;;;:::o;24873:189::-;24990:5;24956:25;:31;24982:4;24956:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25048:5;25014:40;;25042:4;25014:40;;;;;;;;;;;;24873:189;;:::o;6707:575::-;6865:1;6847:20;;:6;:20;;;6839:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6949:1;6928:23;;:9;:23;;;6920:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7005:47;7026:6;7034:9;7045:6;7005:20;:47::i;:::-;7086:71;7108:6;7086:71;;;;;;;;;;;;;;;;;:9;:17;7096:6;7086:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7066:9;:17;7076:6;7066:17;;;;;;;;;;;;;;;:91;;;;7191:32;7216:6;7191:9;:20;7201:9;7191:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7168:9;:20;7178:9;7168:20;;;;;;;;;;;;;;;:55;;;;7256:9;7239:35;;7248:6;7239:35;;;7267:6;7239:35;;;;;;:::i;:::-;;;;;;;;6707:575;;;:::o;29677:1497::-;29716:23;29742:24;29760:4;29742:9;:24::i;:::-;29716:50;;29777:25;29826:17;;29805:18;;:38;;;;:::i;:::-;29777:66;;29854:12;29902:1;29883:15;:20;:46;;;;29928:1;29907:17;:22;29883:46;29880:60;;;29932:7;;;;;29880:60;29981:5;29956:30;;:21;;;;;;;;;;;:30;;;29953:242;;30038:2;30023:12;;:17;;;;:::i;:::-;30005:15;:35;30002:109;;;30093:2;30078:12;;:17;;;;:::i;:::-;30060:35;;30002:109;29953:242;;;30159:24;30177:4;30159:9;:24::i;:::-;30141:42;;29953:242;30267:23;30352:1;30332:17;30311:18;;30293:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;30267:86;;30364:26;30393:36;30413:15;30393;:19;;:36;;;;:::i;:::-;30364:65;;30443:25;30471:21;30443:49;;30506:36;30523:18;30506:16;:36::i;:::-;30557:18;30578:44;30604:17;30578:21;:25;;:44;;;;:::i;:::-;30557:65;;30636:23;30662:56;30700:17;30662:33;30677:17;;30662:10;:14;;:33;;;;:::i;:::-;:37;;:56;;;;:::i;:::-;30636:82;;30729:23;30768:15;30755:10;:28;;;;:::i;:::-;30729:54;;30821:1;30800:18;:22;;;;30853:1;30833:17;:21;;;;30889:1;30871:15;:19;:42;;;;;30912:1;30894:15;:19;30871:42;30868:210;;;30929:46;30942:15;30959;30929:12;:46::i;:::-;30995:71;31010:18;31030:15;31047:18;;30995:71;;;;;;;;:::i;:::-;;;;;;;;30868:210;31112:14;;;;;;;;;;;31104:28;;31140:21;31104:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31091:75;;;;;29705:1469;;;;;;;;;29677:1497;:::o;9189:254::-;9247:7;9278:1;9273;:6;9269:47;;9303:1;9296:8;;;;9269:47;9329:9;9345:1;9341;:5;;;;:::i;:::-;9329:17;;9374:1;9369;9365;:5;;;;:::i;:::-;:10;9357:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9434:1;9427:8;;;9189:254;;;;;:::o;9451:132::-;9509:7;9536:39;9540:1;9543;9536:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9529:46;;9451:132;;;;:::o;8495:125::-;;;;:::o;8844:136::-;8902:7;8929:43;8933:1;8936;8929:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;8922:50;;8844:136;;;;:::o;28542:597::-;28671:21;28709:1;28695:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28671:40;;28740:4;28722;28727:1;28722:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28766:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28756:4;28761:1;28756:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28802:62;28819:4;28834:15;28852:11;28802:8;:62::i;:::-;28904:15;:66;;;28985:11;29011:1;29055:4;29082;29102:15;28904:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28597:542;28542:597;:::o;29148:520::-;29296:62;29313:4;29328:15;29346:11;29296:8;:62::i;:::-;29402:15;:31;;;29441:9;29474:4;29494:11;29520:1;29563;29614:4;29634:15;29402:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29148:520;;:::o;9591:279::-;9677:7;9709:1;9705;:5;9712:12;9697:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9736:9;9752:1;9748;:5;;;;:::i;:::-;9736:17;;9861:1;9854:8;;;9591: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:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:474::-;6234:6;6242;6291:2;6279:9;6270:7;6266:23;6262:32;6259:119;;;6297:79;;:::i;:::-;6259:119;6417:1;6442:53;6487:7;6478:6;6467:9;6463:22;6442:53;:::i;:::-;6432:63;;6388:117;6544:2;6570:53;6615:7;6606:6;6595:9;6591:22;6570:53;:::i;:::-;6560:63;;6515:118;6166:474;;;;;:::o;6646:118::-;6733:24;6751:5;6733:24;:::i;:::-;6728:3;6721:37;6646:118;;:::o;6770:222::-;6863:4;6901:2;6890:9;6886:18;6878:26;;6914:71;6982:1;6971:9;6967:17;6958:6;6914:71;:::i;:::-;6770:222;;;;:::o;6998:116::-;7068:21;7083:5;7068:21;:::i;:::-;7061:5;7058:32;7048:60;;7104:1;7101;7094:12;7048:60;6998:116;:::o;7120:133::-;7163:5;7201:6;7188:20;7179:29;;7217:30;7241:5;7217:30;:::i;:::-;7120:133;;;;:::o;7259:468::-;7324:6;7332;7381:2;7369:9;7360:7;7356:23;7352:32;7349:119;;;7387:79;;:::i;:::-;7349:119;7507:1;7532:53;7577:7;7568:6;7557:9;7553:22;7532:53;:::i;:::-;7522:63;;7478:117;7634:2;7660:50;7702:7;7693:6;7682:9;7678:22;7660:50;:::i;:::-;7650:60;;7605:115;7259:468;;;;;:::o;7733:765::-;7819:6;7827;7835;7843;7892:3;7880:9;7871:7;7867:23;7863:33;7860:120;;;7899:79;;:::i;:::-;7860:120;8019:1;8044:53;8089:7;8080:6;8069:9;8065:22;8044:53;:::i;:::-;8034:63;;7990:117;8146:2;8172:53;8217:7;8208:6;8197:9;8193:22;8172:53;:::i;:::-;8162:63;;8117:118;8274:2;8300:53;8345:7;8336:6;8325:9;8321:22;8300:53;:::i;:::-;8290:63;;8245:118;8402:2;8428:53;8473:7;8464:6;8453:9;8449:22;8428:53;:::i;:::-;8418:63;;8373:118;7733:765;;;;;;;:::o;8504:329::-;8563:6;8612:2;8600:9;8591:7;8587:23;8583:32;8580:119;;;8618:79;;:::i;:::-;8580:119;8738:1;8763:53;8808:7;8799:6;8788:9;8784:22;8763:53;:::i;:::-;8753:63;;8709:117;8504:329;;;;:::o;8839:474::-;8907:6;8915;8964:2;8952:9;8943:7;8939:23;8935:32;8932:119;;;8970:79;;:::i;:::-;8932:119;9090:1;9115:53;9160:7;9151:6;9140:9;9136:22;9115:53;:::i;:::-;9105:63;;9061:117;9217:2;9243:53;9288:7;9279:6;9268:9;9264:22;9243:53;:::i;:::-;9233:63;;9188:118;8839:474;;;;;:::o;9319:323::-;9375:6;9424:2;9412:9;9403:7;9399:23;9395:32;9392:119;;;9430:79;;:::i;:::-;9392:119;9550:1;9575:50;9617:7;9608:6;9597:9;9593:22;9575:50;:::i;:::-;9565:60;;9521:114;9319:323;;;;:::o;9648:182::-;9788:34;9784:1;9776:6;9772:14;9765:58;9648:182;:::o;9836:366::-;9978:3;9999:67;10063:2;10058:3;9999:67;:::i;:::-;9992:74;;10075:93;10164:3;10075:93;:::i;:::-;10193:2;10188:3;10184:12;10177:19;;9836:366;;;:::o;10208:419::-;10374:4;10412:2;10401:9;10397:18;10389:26;;10461:9;10455:4;10451:20;10447:1;10436:9;10432:17;10425:47;10489:131;10615:4;10489:131;:::i;:::-;10481:139;;10208:419;;;:::o;10633:223::-;10773:34;10769:1;10761:6;10757:14;10750:58;10842:6;10837:2;10829:6;10825:15;10818:31;10633:223;:::o;10862:366::-;11004:3;11025:67;11089:2;11084:3;11025:67;:::i;:::-;11018:74;;11101:93;11190:3;11101:93;:::i;:::-;11219:2;11214:3;11210:12;11203:19;;10862:366;;;:::o;11234:419::-;11400:4;11438:2;11427:9;11423:18;11415:26;;11487:9;11481:4;11477:20;11473:1;11462:9;11458:17;11451:47;11515:131;11641:4;11515:131;:::i;:::-;11507:139;;11234:419;;;:::o;11659:180::-;11707:77;11704:1;11697:88;11804:4;11801:1;11794:15;11828:4;11825:1;11818:15;11845:320;11889:6;11926:1;11920:4;11916:12;11906:22;;11973:1;11967:4;11963:12;11994:18;11984:81;;12050:4;12042:6;12038:17;12028:27;;11984:81;12112:2;12104:6;12101:14;12081:18;12078:38;12075:84;;12131:18;;:::i;:::-;12075:84;11896:269;11845:320;;;:::o;12171:180::-;12219:77;12216:1;12209:88;12316:4;12313:1;12306:15;12340:4;12337:1;12330:15;12357:410;12397:7;12420:20;12438:1;12420:20;:::i;:::-;12415:25;;12454:20;12472:1;12454:20;:::i;:::-;12449:25;;12509:1;12506;12502:9;12531:30;12549:11;12531:30;:::i;:::-;12520:41;;12710:1;12701:7;12697:15;12694:1;12691:22;12671:1;12664:9;12644:83;12621:139;;12740:18;;:::i;:::-;12621:139;12405:362;12357:410;;;;:::o;12773:180::-;12821:77;12818:1;12811:88;12918:4;12915:1;12908:15;12942:4;12939:1;12932:15;12959:185;12999:1;13016:20;13034:1;13016:20;:::i;:::-;13011:25;;13050:20;13068:1;13050:20;:::i;:::-;13045:25;;13089:1;13079:35;;13094:18;;:::i;:::-;13079:35;13136:1;13133;13129:9;13124:14;;12959:185;;;;:::o;13150:234::-;13290:34;13286:1;13278:6;13274:14;13267:58;13359:17;13354:2;13346:6;13342:15;13335:42;13150:234;:::o;13390:366::-;13532:3;13553:67;13617:2;13612:3;13553:67;:::i;:::-;13546:74;;13629:93;13718:3;13629:93;:::i;:::-;13747:2;13742:3;13738:12;13731:19;;13390:366;;;:::o;13762:419::-;13928:4;13966:2;13955:9;13951:18;13943:26;;14015:9;14009:4;14005:20;14001:1;13990:9;13986:17;13979:47;14043:131;14169:4;14043:131;:::i;:::-;14035:139;;13762:419;;;:::o;14187:223::-;14327:34;14323:1;14315:6;14311:14;14304:58;14396:6;14391:2;14383:6;14379:15;14372:31;14187:223;:::o;14416:366::-;14558:3;14579:67;14643:2;14638:3;14579:67;:::i;:::-;14572:74;;14655:93;14744:3;14655:93;:::i;:::-;14773:2;14768:3;14764:12;14757:19;;14416:366;;;:::o;14788:419::-;14954:4;14992:2;14981:9;14977:18;14969:26;;15041:9;15035:4;15031:20;15027:1;15016:9;15012:17;15005:47;15069:131;15195:4;15069:131;:::i;:::-;15061:139;;14788:419;;;:::o;15213:221::-;15353:34;15349:1;15341:6;15337:14;15330:58;15422:4;15417:2;15409:6;15405:15;15398:29;15213:221;:::o;15440:366::-;15582:3;15603:67;15667:2;15662:3;15603:67;:::i;:::-;15596:74;;15679:93;15768:3;15679:93;:::i;:::-;15797:2;15792:3;15788:12;15781:19;;15440:366;;;:::o;15812:419::-;15978:4;16016:2;16005:9;16001:18;15993:26;;16065:9;16059:4;16055:20;16051:1;16040:9;16036:17;16029:47;16093:131;16219:4;16093:131;:::i;:::-;16085:139;;15812:419;;;:::o;16237:147::-;16338:11;16375:3;16360:18;;16237:147;;;;:::o;16390:114::-;;:::o;16510:398::-;16669:3;16690:83;16771:1;16766:3;16690:83;:::i;:::-;16683:90;;16782:93;16871:3;16782:93;:::i;:::-;16900:1;16895:3;16891:11;16884:18;;16510:398;;;:::o;16914:379::-;17098:3;17120:147;17263:3;17120:147;:::i;:::-;17113:154;;17284:3;17277:10;;16914:379;;;:::o;17299:177::-;17439:29;17435:1;17427:6;17423:14;17416:53;17299:177;:::o;17482:366::-;17624:3;17645:67;17709:2;17704:3;17645:67;:::i;:::-;17638:74;;17721:93;17810:3;17721:93;:::i;:::-;17839:2;17834:3;17830:12;17823:19;;17482:366;;;:::o;17854:419::-;18020:4;18058:2;18047:9;18043:18;18035:26;;18107:9;18101:4;18097:20;18093:1;18082:9;18078:17;18071:47;18135:131;18261:4;18135:131;:::i;:::-;18127:139;;17854:419;;;:::o;18279:85::-;18324:7;18353:5;18342:16;;18279:85;;;:::o;18370:158::-;18428:9;18461:61;18479:42;18488:32;18514:5;18488:32;:::i;:::-;18479:42;:::i;:::-;18461:61;:::i;:::-;18448:74;;18370:158;;;:::o;18534:147::-;18629:45;18668:5;18629:45;:::i;:::-;18624:3;18617:58;18534:147;;:::o;18687:807::-;18936:4;18974:3;18963:9;18959:19;18951:27;;18988:71;19056:1;19045:9;19041:17;19032:6;18988:71;:::i;:::-;19069:72;19137:2;19126:9;19122:18;19113:6;19069:72;:::i;:::-;19151:80;19227:2;19216:9;19212:18;19203:6;19151:80;:::i;:::-;19241;19317:2;19306:9;19302:18;19293:6;19241:80;:::i;:::-;19331:73;19399:3;19388:9;19384:19;19375:6;19331:73;:::i;:::-;19414;19482:3;19471:9;19467:19;19458:6;19414:73;:::i;:::-;18687:807;;;;;;;;;:::o;19500:143::-;19557:5;19588:6;19582:13;19573:22;;19604:33;19631:5;19604:33;:::i;:::-;19500:143;;;;:::o;19649:663::-;19737:6;19745;19753;19802:2;19790:9;19781:7;19777:23;19773:32;19770:119;;;19808:79;;:::i;:::-;19770:119;19928:1;19953:64;20009:7;20000:6;19989:9;19985:22;19953:64;:::i;:::-;19943:74;;19899:128;20066:2;20092:64;20148:7;20139:6;20128:9;20124:22;20092:64;:::i;:::-;20082:74;;20037:129;20205:2;20231:64;20287:7;20278:6;20267:9;20263:22;20231:64;:::i;:::-;20221:74;;20176:129;19649:663;;;;;:::o;20318:191::-;20358:3;20377:20;20395:1;20377:20;:::i;:::-;20372:25;;20411:20;20429:1;20411:20;:::i;:::-;20406:25;;20454:1;20451;20447:9;20440:16;;20475:3;20472:1;20469:10;20466:36;;;20482:18;;:::i;:::-;20466:36;20318:191;;;;:::o;20515:180::-;20655:32;20651:1;20643:6;20639:14;20632:56;20515:180;:::o;20701:366::-;20843:3;20864:67;20928:2;20923:3;20864:67;:::i;:::-;20857:74;;20940:93;21029:3;20940:93;:::i;:::-;21058:2;21053:3;21049:12;21042:19;;20701:366;;;:::o;21073:419::-;21239:4;21277:2;21266:9;21262:18;21254:26;;21326:9;21320:4;21316:20;21312:1;21301:9;21297:17;21290:47;21354:131;21480:4;21354:131;:::i;:::-;21346:139;;21073:419;;;:::o;21498:244::-;21638:34;21634:1;21626:6;21622:14;21615:58;21707:27;21702:2;21694:6;21690:15;21683:52;21498:244;:::o;21748:366::-;21890:3;21911:67;21975:2;21970:3;21911:67;:::i;:::-;21904:74;;21987:93;22076:3;21987:93;:::i;:::-;22105:2;22100:3;22096:12;22089:19;;21748:366;;;:::o;22120:419::-;22286:4;22324:2;22313:9;22309:18;22301:26;;22373:9;22367:4;22363:20;22359:1;22348:9;22344:17;22337:47;22401:131;22527:4;22401:131;:::i;:::-;22393:139;;22120:419;;;:::o;22545:240::-;22685:34;22681:1;22673:6;22669:14;22662:58;22754:23;22749:2;22741:6;22737:15;22730:48;22545:240;:::o;22791:366::-;22933:3;22954:67;23018:2;23013:3;22954:67;:::i;:::-;22947:74;;23030:93;23119:3;23030:93;:::i;:::-;23148:2;23143:3;23139:12;23132:19;;22791:366;;;:::o;23163:419::-;23329:4;23367:2;23356:9;23352:18;23344:26;;23416:9;23410:4;23406:20;23402:1;23391:9;23387:17;23380:47;23444:131;23570:4;23444:131;:::i;:::-;23436:139;;23163:419;;;:::o;23588:239::-;23728:34;23724:1;23716:6;23712:14;23705:58;23797:22;23792:2;23784:6;23780:15;23773:47;23588:239;:::o;23833:366::-;23975:3;23996:67;24060:2;24055:3;23996:67;:::i;:::-;23989:74;;24072:93;24161:3;24072:93;:::i;:::-;24190:2;24185:3;24181:12;24174:19;;23833:366;;;:::o;24205:419::-;24371:4;24409:2;24398:9;24394:18;24386:26;;24458:9;24452:4;24448:20;24444:1;24433:9;24429:17;24422:47;24486:131;24612:4;24486:131;:::i;:::-;24478:139;;24205:419;;;:::o;24630:224::-;24770:34;24766:1;24758:6;24754:14;24747:58;24839:7;24834:2;24826:6;24822:15;24815:32;24630:224;:::o;24860:366::-;25002:3;25023:67;25087:2;25082:3;25023:67;:::i;:::-;25016:74;;25099:93;25188:3;25099:93;:::i;:::-;25217:2;25212:3;25208:12;25201:19;;24860:366;;;:::o;25232:419::-;25398:4;25436:2;25425:9;25421:18;25413:26;;25485:9;25479:4;25475:20;25471:1;25460:9;25456:17;25449:47;25513:131;25639:4;25513:131;:::i;:::-;25505:139;;25232:419;;;:::o;25657:222::-;25797:34;25793:1;25785:6;25781:14;25774:58;25866:5;25861:2;25853:6;25849:15;25842:30;25657:222;:::o;25885:366::-;26027:3;26048:67;26112:2;26107:3;26048:67;:::i;:::-;26041:74;;26124:93;26213:3;26124:93;:::i;:::-;26242:2;26237:3;26233:12;26226:19;;25885:366;;;:::o;26257:419::-;26423:4;26461:2;26450:9;26446:18;26438:26;;26510:9;26504:4;26500:20;26496:1;26485:9;26481:17;26474:47;26538:131;26664:4;26538:131;:::i;:::-;26530:139;;26257:419;;;:::o;26682:240::-;26822:34;26818:1;26810:6;26806:14;26799:58;26891:23;26886:2;26878:6;26874:15;26867:48;26682:240;:::o;26928:366::-;27070:3;27091:67;27155:2;27150:3;27091:67;:::i;:::-;27084:74;;27167:93;27256:3;27167:93;:::i;:::-;27285:2;27280:3;27276:12;27269:19;;26928:366;;;:::o;27300:419::-;27466:4;27504:2;27493:9;27489:18;27481:26;;27553:9;27547:4;27543:20;27539:1;27528:9;27524:17;27517:47;27581:131;27707:4;27581:131;:::i;:::-;27573:139;;27300:419;;;:::o;27725:169::-;27865:21;27861:1;27853:6;27849:14;27842:45;27725:169;:::o;27900:366::-;28042:3;28063:67;28127:2;28122:3;28063:67;:::i;:::-;28056:74;;28139:93;28228:3;28139:93;:::i;:::-;28257:2;28252:3;28248:12;28241:19;;27900:366;;;:::o;28272:419::-;28438:4;28476:2;28465:9;28461:18;28453:26;;28525:9;28519:4;28515:20;28511:1;28500:9;28496:17;28489:47;28553:131;28679:4;28553:131;:::i;:::-;28545:139;;28272:419;;;:::o;28697:241::-;28837:34;28833:1;28825:6;28821:14;28814:58;28906:24;28901:2;28893:6;28889:15;28882:49;28697:241;:::o;28944:366::-;29086:3;29107:67;29171:2;29166:3;29107:67;:::i;:::-;29100:74;;29183:93;29272:3;29183:93;:::i;:::-;29301:2;29296:3;29292:12;29285:19;;28944:366;;;:::o;29316:419::-;29482:4;29520:2;29509:9;29505:18;29497:26;;29569:9;29563:4;29559:20;29555:1;29544:9;29540:17;29533:47;29597:131;29723:4;29597:131;:::i;:::-;29589:139;;29316:419;;;:::o;29741:194::-;29781:4;29801:20;29819:1;29801:20;:::i;:::-;29796:25;;29835:20;29853:1;29835:20;:::i;:::-;29830:25;;29879:1;29876;29872:9;29864:17;;29903:1;29897:4;29894:11;29891:37;;;29908:18;;:::i;:::-;29891:37;29741:194;;;;:::o;29941:223::-;30081:34;30077:1;30069:6;30065:14;30058:58;30150:6;30145:2;30137:6;30133:15;30126:31;29941:223;:::o;30170:366::-;30312:3;30333:67;30397:2;30392:3;30333:67;:::i;:::-;30326:74;;30409:93;30498:3;30409:93;:::i;:::-;30527:2;30522:3;30518:12;30511:19;;30170:366;;;:::o;30542:419::-;30708:4;30746:2;30735:9;30731:18;30723:26;;30795:9;30789:4;30785:20;30781:1;30770:9;30766:17;30759:47;30823:131;30949:4;30823:131;:::i;:::-;30815:139;;30542:419;;;:::o;30967:221::-;31107:34;31103:1;31095:6;31091:14;31084:58;31176:4;31171:2;31163:6;31159:15;31152:29;30967:221;:::o;31194:366::-;31336:3;31357:67;31421:2;31416:3;31357:67;:::i;:::-;31350:74;;31433:93;31522:3;31433:93;:::i;:::-;31551:2;31546:3;31542:12;31535:19;;31194:366;;;:::o;31566:419::-;31732:4;31770:2;31759:9;31755:18;31747:26;;31819:9;31813:4;31809:20;31805:1;31794:9;31790:17;31783:47;31847:131;31973:4;31847:131;:::i;:::-;31839:139;;31566:419;;;:::o;31991:177::-;32131:29;32127:1;32119:6;32115:14;32108:53;31991:177;:::o;32174:366::-;32316:3;32337:67;32401:2;32396:3;32337:67;:::i;:::-;32330:74;;32413:93;32502:3;32413:93;:::i;:::-;32531:2;32526:3;32522:12;32515:19;;32174:366;;;:::o;32546:419::-;32712:4;32750:2;32739:9;32735:18;32727:26;;32799:9;32793:4;32789:20;32785:1;32774:9;32770:17;32763:47;32827:131;32953:4;32827:131;:::i;:::-;32819:139;;32546:419;;;:::o;32971:442::-;33120:4;33158:2;33147:9;33143:18;33135:26;;33171:71;33239:1;33228:9;33224:17;33215:6;33171:71;:::i;:::-;33252:72;33320:2;33309:9;33305:18;33296:6;33252:72;:::i;:::-;33334;33402:2;33391:9;33387:18;33378:6;33334:72;:::i;:::-;32971:442;;;;;;:::o;33419:220::-;33559:34;33555:1;33547:6;33543:14;33536:58;33628:3;33623:2;33615:6;33611:15;33604:28;33419:220;:::o;33645:366::-;33787:3;33808:67;33872:2;33867:3;33808:67;:::i;:::-;33801:74;;33884:93;33973:3;33884:93;:::i;:::-;34002:2;33997:3;33993:12;33986:19;;33645:366;;;:::o;34017:419::-;34183:4;34221:2;34210:9;34206:18;34198:26;;34270:9;34264:4;34260:20;34256:1;34245:9;34241:17;34234:47;34298:131;34424:4;34298:131;:::i;:::-;34290:139;;34017:419;;;:::o;34442:180::-;34490:77;34487:1;34480:88;34587:4;34584:1;34577:15;34611:4;34608:1;34601:15;34628:180;34676:77;34673:1;34666:88;34773:4;34770:1;34763:15;34797:4;34794:1;34787:15;34814:143;34871:5;34902:6;34896:13;34887:22;;34918:33;34945:5;34918:33;:::i;:::-;34814:143;;;;:::o;34963:351::-;35033:6;35082:2;35070:9;35061:7;35057:23;35053:32;35050:119;;;35088:79;;:::i;:::-;35050:119;35208:1;35233:64;35289:7;35280:6;35269:9;35265:22;35233:64;:::i;:::-;35223:74;;35179:128;34963:351;;;;:::o;35320:114::-;35387:6;35421:5;35415:12;35405:22;;35320:114;;;:::o;35440:184::-;35539:11;35573:6;35568:3;35561:19;35613:4;35608:3;35604:14;35589:29;;35440:184;;;;:::o;35630:132::-;35697:4;35720:3;35712:11;;35750:4;35745:3;35741:14;35733:22;;35630:132;;;:::o;35768:108::-;35845:24;35863:5;35845:24;:::i;:::-;35840:3;35833:37;35768:108;;:::o;35882:179::-;35951:10;35972:46;36014:3;36006:6;35972:46;:::i;:::-;36050:4;36045:3;36041:14;36027:28;;35882:179;;;;:::o;36067:113::-;36137:4;36169;36164:3;36160:14;36152:22;;36067:113;;;:::o;36216:732::-;36335:3;36364:54;36412:5;36364:54;:::i;:::-;36434:86;36513:6;36508:3;36434:86;:::i;:::-;36427:93;;36544:56;36594:5;36544:56;:::i;:::-;36623:7;36654:1;36639:284;36664:6;36661:1;36658:13;36639:284;;;36740:6;36734:13;36767:63;36826:3;36811:13;36767:63;:::i;:::-;36760:70;;36853:60;36906:6;36853:60;:::i;:::-;36843:70;;36699:224;36686:1;36683;36679:9;36674:14;;36639:284;;;36643:14;36939:3;36932:10;;36340:608;;;36216:732;;;;:::o;36954:831::-;37217:4;37255:3;37244:9;37240:19;37232:27;;37269:71;37337:1;37326:9;37322:17;37313:6;37269:71;:::i;:::-;37350:80;37426:2;37415:9;37411:18;37402:6;37350:80;:::i;:::-;37477:9;37471:4;37467:20;37462:2;37451:9;37447:18;37440:48;37505:108;37608:4;37599:6;37505:108;:::i;:::-;37497:116;;37623:72;37691:2;37680:9;37676:18;37667:6;37623:72;:::i;:::-;37705:73;37773:3;37762:9;37758:19;37749:6;37705:73;:::i;:::-;36954:831;;;;;;;;:::o

Swarm Source

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