ETH Price: $2,630.36 (+8.05%)
 

Overview

Max Total Supply

1,000,000,000 $AOC

Holders

37

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.556048933 $AOC

Value
$0.00
0x82C35bbD42b827b5757D86017bC1283aA3839D03
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:
AlexandriaOcasio

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 *
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.4;


abstract contract Context {

    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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);
}

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;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;

    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 waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface 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 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 Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    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 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 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 AlexandriaOcasio is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name ="Alexandria Ocasio";
    string private _symbol = "$AOC";
    uint8 private _decimals = 9;

    address payable private taxWallet1 = payable(0xE509B1E3b80F679A7C2924741de46905E86d5d9D);
    address payable private taxWallet2 = payable(0xE509B1E3b80F679A7C2924741de46905E86d5d9D);
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public checkExcludedFromFees;
    mapping (address => bool) public checkWalletLimitExcept;
    mapping (address => bool) public checkTxLimitExcept;
    mapping (address => bool) public checkMarketPair;

    uint256 public _buyLiquidityFees = 0;
    uint256 public _buyMarketingFees = 0;
    uint256 public _buyDevelopmentFees = 0;
    uint256 public _sellLiquidityFees = 0;
    uint256 public _sellMarketingFees = 99;
    uint256 public _sellDevelopmentFees = 0;

    uint256 public _liquidityShares = 0;
    uint256 public _marketingShares = 99;
    uint256 public _developmentShares = 0;

    uint256 public _totalTaxIfBuying = 0;
    uint256 public _totalTaxIfSelling = 99;
    uint256 public _totalDistributionShares = 99;

    uint256 private _totalSupply = 1000 * 10**6 * 10**9;
    uint256 public _maxTxAmount = 20 * 10**6 * 10**9;
    uint256 public _walletMax = 20 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 10 * 10**9; 

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        checkExcludedFromFees[owner()] = true;
        checkExcludedFromFees[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFees.add(_buyMarketingFees).add(_buyDevelopmentFees);
        _totalTaxIfSelling = _sellLiquidityFees.add(_sellMarketingFees).add(_sellDevelopmentFees);
        _totalDistributionShares = _liquidityShares.add(_marketingShares).add(_developmentShares);

        checkWalletLimitExcept[owner()] = true;
        checkWalletLimitExcept[address(uniswapPair)] = true;
        checkWalletLimitExcept[address(this)] = true;
        
        checkTxLimitExcept[owner()] = true;
        checkTxLimitExcept[address(this)] = true;

        checkMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

    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 approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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 addMarketPair(address account) public onlyOwner {
        checkMarketPair[account] = true;
    }

    function setcheckTxLimitExcept(address holder, bool exempt) external onlyOwner {
        checkTxLimitExcept[holder] = exempt;
    }
    
    function setcheckExcludedFromFees(address account, bool newValue) public onlyOwner {
        checkExcludedFromFees[account] = newValue;
    }

    function setBuyFee(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevelopmentTax) external onlyOwner() {
        _buyLiquidityFees = newLiquidityTax;
        _buyMarketingFees = newMarketingTax;
        _buyDevelopmentFees = newDevelopmentTax;

        _totalTaxIfBuying = _buyLiquidityFees.add(_buyMarketingFees).add(_buyDevelopmentFees);
    }

    function setSellFee(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevelopmentTax) external onlyOwner() {
        _sellLiquidityFees = newLiquidityTax;
        _sellMarketingFees = newMarketingTax;
        _sellDevelopmentFees = newDevelopmentTax;

        _totalTaxIfSelling = _sellLiquidityFees.add(_sellMarketingFees).add(_sellDevelopmentFees);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newDevelopmentShare) external onlyOwner() {
        _liquidityShares = newLiquidityShare;
        _marketingShares = newMarketingShare;
        _developmentShares = newDevelopmentShare;

        _totalDistributionShares = _liquidityShares.add(_marketingShares).add(_developmentShares);
    }
    
    function adjustMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount <= (10000 * 10**6 * 10**9), "Max wallet should be less or euqal to 4% totalSupply");
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

    function setcheckWalletLimitExcept(address holder, bool exempt) external onlyOwner {
        checkWalletLimitExcept[holder] = exempt;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

    function settaxWallet1(address newAddress) external onlyOwner() {
        taxWallet1 = payable(newAddress);
    }

    function settaxWallet2(address newAddress) external onlyOwner() {
        taxWallet2 = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        checkWalletLimitExcept[address(uniswapPair)] = true;
        checkMarketPair[address(uniswapPair)] = true;
    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

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

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if(!checkTxLimitExcept[sender] && !checkTxLimitExcept[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }            

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !checkMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (checkExcludedFromFees[sender] || checkExcludedFromFees[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !checkWalletLimitExcept[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShares).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShares.div(2));
        
        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShares).div(totalETHFee).div(2);
        uint256 amountETHDevelopment = amountReceived.mul(_developmentShares).div(totalETHFee);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(amountETHDevelopment);

        if(amountETHMarketing > 0)
            transferToAddressETH(taxWallet1, amountETHMarketing);

        if(amountETHDevelopment > 0)
            transferToAddressETH(taxWallet2, amountETHDevelopment);

        if(amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);
    }
    
    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), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(checkMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(checkMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
    
}

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":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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"},{"inputs":[],"name":"_buyDevelopmentFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_developmentShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevelopmentFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"adjustMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkTxLimitExcept","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkWalletLimitExcept","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentTax","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentTax","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setcheckExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setcheckTxLimitExcept","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setcheckWalletLimitExcept","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"settaxWallet1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"settaxWallet2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"uniswapPair","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":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280601181526020017f416c6578616e64726961204f636173696f000000000000000000000000000000815250600290805190602001906200005192919062000b3f565b506040518060400160405280600481526020017f24414f4300000000000000000000000000000000000000000000000000000000815250600390805190602001906200009f92919062000b3f565b506009600460006101000a81548160ff021916908360ff16021790555073e509b1e3b80f679a7c2924741de46905e86d5d9d600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e509b1e3b80f679a7c2924741de46905e86d5d9d600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152506000600c556000600d556000600e556000600f5560636010556000601155600060125560636013556000601455600060155560636016556063601755670de0b6b3a764000060185566470de4df82000060195566470de4df820000601a556402540be400601b556001601d60156101000a81548160ff0219169083151502179055506000601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff0219169083151502179055503480156200026357600080fd5b5060006200027662000aab60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037457600080fd5b505afa15801562000389573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003af919062000c06565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041257600080fd5b505afa15801562000427573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044d919062000c06565b6040518363ffffffff1660e01b81526004016200046c92919062000c81565b602060405180830381600087803b1580156200048757600080fd5b505af11580156200049c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c2919062000c06565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601854600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160086000620005fe62000ab360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006e0600e54620006cc600d54600c5462000adc60201b620028d11790919060201c565b62000adc60201b620028d11790919060201c565b6015819055506200071f6011546200070b601054600f5462000adc60201b620028d11790919060201c565b62000adc60201b620028d11790919060201c565b6016819055506200075e6014546200074a60135460125462000adc60201b620028d11790919060201c565b62000adc60201b620028d11790919060201c565b6017819055506001600960006200077a62000ab360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000620008b362000ab360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060185460066000620009ed62000aab60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000a3b62000aab60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000a9c919062000cd0565b60405180910390a35062000e75565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000aed919062000cfe565b90508381101562000b35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b2c9062000cae565b60405180910390fd5b8091505092915050565b82805462000b4d9062000d99565b90600052602060002090601f01602090048101928262000b71576000855562000bbd565b82601f1062000b8c57805160ff191683800117855562000bbd565b8280016001018555821562000bbd579182015b8281111562000bbc57825182559160200191906001019062000b9f565b5b50905062000bcc919062000bd0565b5090565b5b8082111562000beb57600081600090555060010162000bd1565b5090565b60008151905062000c008162000e5b565b92915050565b60006020828403121562000c1f5762000c1e62000e2d565b5b600062000c2f8482850162000bef565b91505092915050565b62000c438162000d5b565b82525050565b600062000c58601b8362000ced565b915062000c658262000e32565b602082019050919050565b62000c7b8162000d8f565b82525050565b600060408201905062000c98600083018562000c38565b62000ca7602083018462000c38565b9392505050565b6000602082019050818103600083015262000cc98162000c49565b9050919050565b600060208201905062000ce7600083018462000c70565b92915050565b600082825260208201905092915050565b600062000d0b8262000d8f565b915062000d188362000d8f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d505762000d4f62000dcf565b5b828201905092915050565b600062000d688262000d6f565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000db257607f821691505b6020821081141562000dc95762000dc862000dfe565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b62000e668162000d5b565b811462000e7257600080fd5b50565b60805160601c614bba62000e9b6000396000818161124801526112740152614bba6000f3fe6080604052600436106103545760003560e01c806370a08231116101c6578063bbaa7d44116100f7578063dd62ed3e11610095578063f1d5f5171161006f578063f1d5f51714610c87578063f2fde38b14610cb0578063f872858a14610cd9578063fabf706314610d045761035b565b8063dd62ed3e14610bf6578063e207a92b14610c33578063f0cd1dac14610c5c5761035b565b8063c78a789b116100d1578063c78a789b14610b38578063c816841b14610b75578063d76e26a314610ba0578063da00097d14610bcb5761035b565b8063bbaa7d4414610abd578063c2d4640e14610ae6578063c49b9a8014610b0f5761035b565b806395d89b4111610164578063a457c2d71161013e578063a457c2d7146109ef578063a5d69d1f14610a2c578063a9059cbb14610a55578063b6c3af3414610a925761035b565b806395d89b411461096e5780639e3fa32314610999578063a08e671f146109c45761035b565b806382eefb43116101a057806382eefb43146108d85780638da5cb5b146109035780638f03aad51461092e578063914eb66a146109575761035b565b806370a08231146108455780637d1db4a514610882578063807c2d9c146108ad5761035b565b80632f0a5fd4116102a0578063565cec381161023e578063646d470011610218578063646d47001461079b578063661b6e36146107c6578063667b511c146107f1578063705f9d741461081a5761035b565b8063565cec381461070a57806357e6adcb146107355780635881f3ef1461075e5761035b565b80633b97084a1161027a5780633b97084a1461063c5780634a74bb0214610665578063526012e81461069057806355324fa9146106cd5761035b565b80632f0a5fd4146105a9578063313ce567146105d457806339509351146105ff5761035b565b806323b872dd1161030d57806327c8f835116102e757806327c8f835146104ff5780632b112e491461052a5780632cdae5cb146105555780632df671091461057e5761035b565b806323b872dd1461047057806325519cf2146104ad5780632563ae83146104d65761035b565b806306fdde0314610360578063095ea7b31461038b5780630fe1203c146103c85780631694505e146103f157806318160ddd1461041c5780631d865c30146104475761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d41565b6040516103829190614299565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190613e08565b610dd3565b6040516103bf9190614263565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613cdb565b610df1565b005b3480156103fd57600080fd5b50610406610eca565b604051610413919061427e565b60405180910390f35b34801561042857600080fd5b50610431610ef0565b60405161043e91906143fb565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613ea2565b610efa565b005b34801561047c57600080fd5b5061049760048036038101906104929190613d75565b610fda565b6040516104a49190614263565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190613ea2565b6110b4565b005b3480156104e257600080fd5b506104fd60048036038101906104f89190613e48565b611194565b005b34801561050b57600080fd5b50610514611246565b60405161052191906141be565b60405180910390f35b34801561053657600080fd5b5061053f61126a565b60405161054c91906143fb565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190613dc8565b6112ae565b005b34801561058a57600080fd5b5061059361139e565b6040516105a091906143fb565b60405180910390f35b3480156105b557600080fd5b506105be6113a4565b6040516105cb91906143fb565b60405180910390f35b3480156105e057600080fd5b506105e96113aa565b6040516105f691906144a0565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190613e08565b6113c1565b6040516106339190614263565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190613e75565b611474565b005b34801561067157600080fd5b5061067a611513565b6040516106879190614263565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b29190613cdb565b611526565b6040516106c49190614263565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190613cdb565b611546565b6040516107019190614263565b60405180910390f35b34801561071657600080fd5b5061071f611566565b60405161072c91906143fb565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190613dc8565b61156c565b005b34801561076a57600080fd5b5061078560048036038101906107809190613cdb565b61165c565b60405161079291906141be565b60405180910390f35b3480156107a757600080fd5b506107b0611bba565b6040516107bd91906143fb565b60405180910390f35b3480156107d257600080fd5b506107db611bc0565b6040516107e891906143fb565b60405180910390f35b3480156107fd57600080fd5b5061081860048036038101906108139190613dc8565b611bc6565b005b34801561082657600080fd5b5061082f611cb6565b60405161083c91906143fb565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190613cdb565b611cbc565b60405161087991906143fb565b60405180910390f35b34801561088e57600080fd5b50610897611d05565b6040516108a491906143fb565b60405180910390f35b3480156108b957600080fd5b506108c2611d0b565b6040516108cf91906143fb565b60405180910390f35b3480156108e457600080fd5b506108ed611d11565b6040516108fa91906143fb565b60405180910390f35b34801561090f57600080fd5b50610918611d17565b60405161092591906141be565b60405180910390f35b34801561093a57600080fd5b5061095560048036038101906109509190613e75565b611d40565b005b34801561096357600080fd5b5061096c611e2a565b005b34801561097a57600080fd5b50610983611f7d565b6040516109909190614299565b60405180910390f35b3480156109a557600080fd5b506109ae61200f565b6040516109bb91906143fb565b60405180910390f35b3480156109d057600080fd5b506109d9612015565b6040516109e691906143fb565b60405180910390f35b3480156109fb57600080fd5b50610a166004803603810190610a119190613e08565b61201b565b604051610a239190614263565b60405180910390f35b348015610a3857600080fd5b50610a536004803603810190610a4e9190613e48565b6120e8565b005b348015610a6157600080fd5b50610a7c6004803603810190610a779190613e08565b61219a565b604051610a899190614263565b60405180910390f35b348015610a9e57600080fd5b50610aa76121b9565b604051610ab491906143fb565b60405180910390f35b348015610ac957600080fd5b50610ae46004803603810190610adf9190613cdb565b6121bf565b005b348015610af257600080fd5b50610b0d6004803603810190610b089190613ea2565b612298565b005b348015610b1b57600080fd5b50610b366004803603810190610b319190613e48565b612378565b005b348015610b4457600080fd5b50610b5f6004803603810190610b5a9190613cdb565b612461565b604051610b6c9190614263565b60405180910390f35b348015610b8157600080fd5b50610b8a612481565b604051610b9791906141be565b60405180910390f35b348015610bac57600080fd5b50610bb56124a7565b604051610bc291906143fb565b60405180910390f35b348015610bd757600080fd5b50610be06124ad565b604051610bed9190614263565b60405180910390f35b348015610c0257600080fd5b50610c1d6004803603810190610c189190613d35565b6124c0565b604051610c2a91906143fb565b60405180910390f35b348015610c3f57600080fd5b50610c5a6004803603810190610c559190613cdb565b612547565b005b348015610c6857600080fd5b50610c71612637565b604051610c7e91906143fb565b60405180910390f35b348015610c9357600080fd5b50610cae6004803603810190610ca99190613e75565b61263d565b005b348015610cbc57600080fd5b50610cd76004803603810190610cd29190613cdb565b6126dc565b005b348015610ce557600080fd5b50610cee61289e565b604051610cfb9190614263565b60405180910390f35b348015610d1057600080fd5b50610d2b6004803603810190610d269190613cdb565b6128b1565b604051610d389190614263565b60405180910390f35b606060028054610d50906146f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7c906146f5565b8015610dc95780601f10610d9e57610100808354040283529160200191610dc9565b820191906000526020600020905b815481529060010190602001808311610dac57829003601f168201915b5050505050905090565b6000610de7610de061292f565b8484612937565b6001905092915050565b610df961292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d9061439b565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610f0261292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f869061439b565b60405180910390fd5b82600f819055508160108190555080601181905550610fcf601154610fc1601054600f546128d190919063ffffffff16565b6128d190919063ffffffff16565b601681905550505050565b6000610fe7848484612b02565b506110a984610ff461292f565b6110a485604051806060016040528060288152602001614b3860289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061105a61292f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b612937565b600190509392505050565b6110bc61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111409061439b565b60405180910390fd5b82600c8190555081600d8190555080600e81905550611189600e5461117b600d54600c546128d190919063ffffffff16565b6128d190919063ffffffff16565b601581905550505050565b61119c61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112209061439b565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006112a96112987f0000000000000000000000000000000000000000000000000000000000000000611cbc565b60185461314b90919063ffffffff16565b905090565b6112b661292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a9061439b565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b600f5481565b6000600460009054906101000a900460ff16905090565b600061146a6113ce61292f565b8461146585600760006113df61292f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b612937565b6001905092915050565b61147c61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115009061439b565b60405180910390fd5b80601b8190555050565b601d60159054906101000a900460ff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b60135481565b61157461292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f89061439b565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061166661292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea9061439b565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561173e57600080fd5b505afa158015611752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117769190613d08565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117d857600080fd5b505afa1580156117ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118109190613d08565b6040518363ffffffff1660e01b815260040161182d9291906141d9565b60206040518083038186803b15801561184557600080fd5b505afa158015611859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187d9190613d08565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a3e578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156118fa57600080fd5b505afa15801561190e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119329190613d08565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561199457600080fd5b505afa1580156119a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cc9190613d08565b6040518363ffffffff1660e01b81526004016119e99291906141d9565b602060405180830381600087803b158015611a0357600080fd5b505af1158015611a17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3b9190613d08565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60115481565b60105481565b611bce61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c529061439b565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b601a5481565b60165481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d4861292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcc9061439b565b60405180910390fd5b678ac7230489e80000811115611e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e17906142db565b60405180910390fd5b8060198190555050565b611e3261292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb69061439b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060038054611f8c906146f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611fb8906146f5565b80156120055780601f10611fda57610100808354040283529160200191612005565b820191906000526020600020905b815481529060010190602001808311611fe857829003601f168201915b5050505050905090565b60125481565b60175481565b60006120de61202861292f565b846120d985604051806060016040528060258152602001614b60602591396007600061205261292f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b612937565b6001905092915050565b6120f061292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461217d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121749061439b565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b60006121ae6121a761292f565b8484612b02565b506001905092915050565b600c5481565b6121c761292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b9061439b565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122a061292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123249061439b565b60405180910390fd5b82601281905550816013819055508060148190555061236d60145461235f6013546012546128d190919063ffffffff16565b6128d190919063ffffffff16565b601781905550505050565b61238061292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461240d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124049061439b565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516124569190614263565b60405180910390a150565b600a6020528060005260406000206000915054906101000a900460ff1681565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b601d60169054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61254f61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d39061439b565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60155481565b61264561292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c99061439b565b60405180910390fd5b80601a8190555050565b6126e461292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612771576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127689061439b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d8906142fb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60179054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b60008082846128e09190614510565b905083811015612925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291c9061433b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299e906143db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0e9061431b565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612af591906143fb565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6a906143bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bda906142bb565b60405180910390fd5b601d60149054906101000a900460ff1615612c0a57612c03848484613195565b90506130e0565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612cae5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cf957601954821115612cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cef9061435b565b60405180910390fd5b5b6000612d0430611cbc565b90506000601b548210159050808015612d2a5750601d60149054906101000a900460ff16155b8015612d805750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d985750601d60159054906101000a900460ff165b15612dc257601d60169054906101000a900460ff1615612db857601b5491505b612dc182613368565b5b612e4b846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f315750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f4557612f40878787613559565b612f47565b845b9050601d60179054906101000a900460ff168015612faf5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fde57601a54612fd282612fc489611cbc565b6128d190919063ffffffff16565b1115612fdd57600080fd5b5b61303081600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130d091906143fb565b60405180910390a3600193505050505b9392505050565b600083831115829061312f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131269190614299565b60405180910390fd5b506000838561313e91906145f1565b9050809150509392505050565b600061318d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130e7565b905092915050565b6000613220826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132b582600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161335591906143fb565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff02191690831515021790555060006133c160026133b36017546133a56012548761378090919063ffffffff16565b6137fb90919063ffffffff16565b6137fb90919063ffffffff16565b905060006133d8828461314b90919063ffffffff16565b90506133e381613845565b6000479050600061341461340360026012546137fb90919063ffffffff16565b60175461314b90919063ffffffff16565b905060006134526002613444846134366012548861378090919063ffffffff16565b6137fb90919063ffffffff16565b6137fb90919063ffffffff16565b9050600061347d8361346f6014548761378090919063ffffffff16565b6137fb90919063ffffffff16565b905060006134a682613498858861314b90919063ffffffff16565b61314b90919063ffffffff16565b905060008111156134de576134dd600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613ad0565b5b600082111561351457613513600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613ad0565b5b6000831180156135245750600087115b15613534576135338784613b1b565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135e1576135da60646135cc6015548661378090919063ffffffff16565b6137fb90919063ffffffff16565b905061365f565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561365e5761365b606461364d6016548661378090919063ffffffff16565b6137fb90919063ffffffff16565b90505b5b6000811115613763576136ba81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161375a91906143fb565b60405180910390a35b613776818461314b90919063ffffffff16565b9150509392505050565b60008083141561379357600090506137f5565b600082846137a19190614597565b90508284826137b09190614566565b146137f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e79061437b565b60405180910390fd5b809150505b92915050565b600061383d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c0f565b905092915050565b6000600267ffffffffffffffff811115613862576138616147e3565b5b6040519080825280602002602001820160405280156138905781602001602082028036833780820191505090505b50905030816000815181106138a8576138a76147b4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561394a57600080fd5b505afa15801561395e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139829190613d08565b81600181518110613996576139956147b4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139fd30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612937565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a61959493929190614446565b600060405180830381600087803b158015613a7b57600080fd5b505af1158015613a8f573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613ac4929190614416565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613b16573d6000803e3d6000fd5b505050565b613b4830601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612937565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b94611d17565b426040518863ffffffff1660e01b8152600401613bb696959493929190614202565b6060604051808303818588803b158015613bcf57600080fd5b505af1158015613be3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c089190613ef5565b5050505050565b60008083118290613c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c4d9190614299565b60405180910390fd5b5060008385613c659190614566565b9050809150509392505050565b600081359050613c8181614af2565b92915050565b600081519050613c9681614af2565b92915050565b600081359050613cab81614b09565b92915050565b600081359050613cc081614b20565b92915050565b600081519050613cd581614b20565b92915050565b600060208284031215613cf157613cf0614812565b5b6000613cff84828501613c72565b91505092915050565b600060208284031215613d1e57613d1d614812565b5b6000613d2c84828501613c87565b91505092915050565b60008060408385031215613d4c57613d4b614812565b5b6000613d5a85828601613c72565b9250506020613d6b85828601613c72565b9150509250929050565b600080600060608486031215613d8e57613d8d614812565b5b6000613d9c86828701613c72565b9350506020613dad86828701613c72565b9250506040613dbe86828701613cb1565b9150509250925092565b60008060408385031215613ddf57613dde614812565b5b6000613ded85828601613c72565b9250506020613dfe85828601613c9c565b9150509250929050565b60008060408385031215613e1f57613e1e614812565b5b6000613e2d85828601613c72565b9250506020613e3e85828601613cb1565b9150509250929050565b600060208284031215613e5e57613e5d614812565b5b6000613e6c84828501613c9c565b91505092915050565b600060208284031215613e8b57613e8a614812565b5b6000613e9984828501613cb1565b91505092915050565b600080600060608486031215613ebb57613eba614812565b5b6000613ec986828701613cb1565b9350506020613eda86828701613cb1565b9250506040613eeb86828701613cb1565b9150509250925092565b600080600060608486031215613f0e57613f0d614812565b5b6000613f1c86828701613cc6565b9350506020613f2d86828701613cc6565b9250506040613f3e86828701613cc6565b9150509250925092565b6000613f548383613f60565b60208301905092915050565b613f6981614625565b82525050565b613f7881614625565b82525050565b6000613f89826144cb565b613f9381856144ee565b9350613f9e836144bb565b8060005b83811015613fcf578151613fb68882613f48565b9750613fc1836144e1565b925050600181019050613fa2565b5085935050505092915050565b613fe581614637565b82525050565b613ff48161467a565b82525050565b6140038161468c565b82525050565b6000614014826144d6565b61401e81856144ff565b935061402e8185602086016146c2565b61403781614817565b840191505092915050565b600061404f6023836144ff565b915061405a82614828565b604082019050919050565b60006140726034836144ff565b915061407d82614877565b604082019050919050565b60006140956026836144ff565b91506140a0826148c6565b604082019050919050565b60006140b86022836144ff565b91506140c382614915565b604082019050919050565b60006140db601b836144ff565b91506140e682614964565b602082019050919050565b60006140fe6028836144ff565b91506141098261498d565b604082019050919050565b60006141216021836144ff565b915061412c826149dc565b604082019050919050565b60006141446020836144ff565b915061414f82614a2b565b602082019050919050565b60006141676025836144ff565b915061417282614a54565b604082019050919050565b600061418a6024836144ff565b915061419582614aa3565b604082019050919050565b6141a981614663565b82525050565b6141b88161466d565b82525050565b60006020820190506141d36000830184613f6f565b92915050565b60006040820190506141ee6000830185613f6f565b6141fb6020830184613f6f565b9392505050565b600060c0820190506142176000830189613f6f565b61422460208301886141a0565b6142316040830187613ffa565b61423e6060830186613ffa565b61424b6080830185613f6f565b61425860a08301846141a0565b979650505050505050565b60006020820190506142786000830184613fdc565b92915050565b60006020820190506142936000830184613feb565b92915050565b600060208201905081810360008301526142b38184614009565b905092915050565b600060208201905081810360008301526142d481614042565b9050919050565b600060208201905081810360008301526142f481614065565b9050919050565b6000602082019050818103600083015261431481614088565b9050919050565b60006020820190508181036000830152614334816140ab565b9050919050565b60006020820190508181036000830152614354816140ce565b9050919050565b60006020820190508181036000830152614374816140f1565b9050919050565b6000602082019050818103600083015261439481614114565b9050919050565b600060208201905081810360008301526143b481614137565b9050919050565b600060208201905081810360008301526143d48161415a565b9050919050565b600060208201905081810360008301526143f48161417d565b9050919050565b600060208201905061441060008301846141a0565b92915050565b600060408201905061442b60008301856141a0565b818103602083015261443d8184613f7e565b90509392505050565b600060a08201905061445b60008301886141a0565b6144686020830187613ffa565b818103604083015261447a8186613f7e565b90506144896060830185613f6f565b61449660808301846141a0565b9695505050505050565b60006020820190506144b560008301846141af565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061451b82614663565b915061452683614663565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561455b5761455a614727565b5b828201905092915050565b600061457182614663565b915061457c83614663565b92508261458c5761458b614756565b5b828204905092915050565b60006145a282614663565b91506145ad83614663565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145e6576145e5614727565b5b828202905092915050565b60006145fc82614663565b915061460783614663565b92508282101561461a57614619614727565b5b828203905092915050565b600061463082614643565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006146858261469e565b9050919050565b600061469782614663565b9050919050565b60006146a9826146b0565b9050919050565b60006146bb82614643565b9050919050565b60005b838110156146e05780820151818401526020810190506146c5565b838111156146ef576000848401525b50505050565b6000600282049050600182168061470d57607f821691505b6020821081141561472157614720614785565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c65742073686f756c64206265206c657373206f722065757160008201527f616c20746f20342520746f74616c537570706c79000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614afb81614625565b8114614b0657600080fd5b50565b614b1281614637565b8114614b1d57600080fd5b50565b614b2981614663565b8114614b3457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c180d985946c7305e5afeb7a3da60cea8d97270439597fcfffa537349d39588464736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103545760003560e01c806370a08231116101c6578063bbaa7d44116100f7578063dd62ed3e11610095578063f1d5f5171161006f578063f1d5f51714610c87578063f2fde38b14610cb0578063f872858a14610cd9578063fabf706314610d045761035b565b8063dd62ed3e14610bf6578063e207a92b14610c33578063f0cd1dac14610c5c5761035b565b8063c78a789b116100d1578063c78a789b14610b38578063c816841b14610b75578063d76e26a314610ba0578063da00097d14610bcb5761035b565b8063bbaa7d4414610abd578063c2d4640e14610ae6578063c49b9a8014610b0f5761035b565b806395d89b4111610164578063a457c2d71161013e578063a457c2d7146109ef578063a5d69d1f14610a2c578063a9059cbb14610a55578063b6c3af3414610a925761035b565b806395d89b411461096e5780639e3fa32314610999578063a08e671f146109c45761035b565b806382eefb43116101a057806382eefb43146108d85780638da5cb5b146109035780638f03aad51461092e578063914eb66a146109575761035b565b806370a08231146108455780637d1db4a514610882578063807c2d9c146108ad5761035b565b80632f0a5fd4116102a0578063565cec381161023e578063646d470011610218578063646d47001461079b578063661b6e36146107c6578063667b511c146107f1578063705f9d741461081a5761035b565b8063565cec381461070a57806357e6adcb146107355780635881f3ef1461075e5761035b565b80633b97084a1161027a5780633b97084a1461063c5780634a74bb0214610665578063526012e81461069057806355324fa9146106cd5761035b565b80632f0a5fd4146105a9578063313ce567146105d457806339509351146105ff5761035b565b806323b872dd1161030d57806327c8f835116102e757806327c8f835146104ff5780632b112e491461052a5780632cdae5cb146105555780632df671091461057e5761035b565b806323b872dd1461047057806325519cf2146104ad5780632563ae83146104d65761035b565b806306fdde0314610360578063095ea7b31461038b5780630fe1203c146103c85780631694505e146103f157806318160ddd1461041c5780631d865c30146104475761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d41565b6040516103829190614299565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190613e08565b610dd3565b6040516103bf9190614263565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613cdb565b610df1565b005b3480156103fd57600080fd5b50610406610eca565b604051610413919061427e565b60405180910390f35b34801561042857600080fd5b50610431610ef0565b60405161043e91906143fb565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613ea2565b610efa565b005b34801561047c57600080fd5b5061049760048036038101906104929190613d75565b610fda565b6040516104a49190614263565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190613ea2565b6110b4565b005b3480156104e257600080fd5b506104fd60048036038101906104f89190613e48565b611194565b005b34801561050b57600080fd5b50610514611246565b60405161052191906141be565b60405180910390f35b34801561053657600080fd5b5061053f61126a565b60405161054c91906143fb565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190613dc8565b6112ae565b005b34801561058a57600080fd5b5061059361139e565b6040516105a091906143fb565b60405180910390f35b3480156105b557600080fd5b506105be6113a4565b6040516105cb91906143fb565b60405180910390f35b3480156105e057600080fd5b506105e96113aa565b6040516105f691906144a0565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190613e08565b6113c1565b6040516106339190614263565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190613e75565b611474565b005b34801561067157600080fd5b5061067a611513565b6040516106879190614263565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b29190613cdb565b611526565b6040516106c49190614263565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190613cdb565b611546565b6040516107019190614263565b60405180910390f35b34801561071657600080fd5b5061071f611566565b60405161072c91906143fb565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190613dc8565b61156c565b005b34801561076a57600080fd5b5061078560048036038101906107809190613cdb565b61165c565b60405161079291906141be565b60405180910390f35b3480156107a757600080fd5b506107b0611bba565b6040516107bd91906143fb565b60405180910390f35b3480156107d257600080fd5b506107db611bc0565b6040516107e891906143fb565b60405180910390f35b3480156107fd57600080fd5b5061081860048036038101906108139190613dc8565b611bc6565b005b34801561082657600080fd5b5061082f611cb6565b60405161083c91906143fb565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190613cdb565b611cbc565b60405161087991906143fb565b60405180910390f35b34801561088e57600080fd5b50610897611d05565b6040516108a491906143fb565b60405180910390f35b3480156108b957600080fd5b506108c2611d0b565b6040516108cf91906143fb565b60405180910390f35b3480156108e457600080fd5b506108ed611d11565b6040516108fa91906143fb565b60405180910390f35b34801561090f57600080fd5b50610918611d17565b60405161092591906141be565b60405180910390f35b34801561093a57600080fd5b5061095560048036038101906109509190613e75565b611d40565b005b34801561096357600080fd5b5061096c611e2a565b005b34801561097a57600080fd5b50610983611f7d565b6040516109909190614299565b60405180910390f35b3480156109a557600080fd5b506109ae61200f565b6040516109bb91906143fb565b60405180910390f35b3480156109d057600080fd5b506109d9612015565b6040516109e691906143fb565b60405180910390f35b3480156109fb57600080fd5b50610a166004803603810190610a119190613e08565b61201b565b604051610a239190614263565b60405180910390f35b348015610a3857600080fd5b50610a536004803603810190610a4e9190613e48565b6120e8565b005b348015610a6157600080fd5b50610a7c6004803603810190610a779190613e08565b61219a565b604051610a899190614263565b60405180910390f35b348015610a9e57600080fd5b50610aa76121b9565b604051610ab491906143fb565b60405180910390f35b348015610ac957600080fd5b50610ae46004803603810190610adf9190613cdb565b6121bf565b005b348015610af257600080fd5b50610b0d6004803603810190610b089190613ea2565b612298565b005b348015610b1b57600080fd5b50610b366004803603810190610b319190613e48565b612378565b005b348015610b4457600080fd5b50610b5f6004803603810190610b5a9190613cdb565b612461565b604051610b6c9190614263565b60405180910390f35b348015610b8157600080fd5b50610b8a612481565b604051610b9791906141be565b60405180910390f35b348015610bac57600080fd5b50610bb56124a7565b604051610bc291906143fb565b60405180910390f35b348015610bd757600080fd5b50610be06124ad565b604051610bed9190614263565b60405180910390f35b348015610c0257600080fd5b50610c1d6004803603810190610c189190613d35565b6124c0565b604051610c2a91906143fb565b60405180910390f35b348015610c3f57600080fd5b50610c5a6004803603810190610c559190613cdb565b612547565b005b348015610c6857600080fd5b50610c71612637565b604051610c7e91906143fb565b60405180910390f35b348015610c9357600080fd5b50610cae6004803603810190610ca99190613e75565b61263d565b005b348015610cbc57600080fd5b50610cd76004803603810190610cd29190613cdb565b6126dc565b005b348015610ce557600080fd5b50610cee61289e565b604051610cfb9190614263565b60405180910390f35b348015610d1057600080fd5b50610d2b6004803603810190610d269190613cdb565b6128b1565b604051610d389190614263565b60405180910390f35b606060028054610d50906146f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7c906146f5565b8015610dc95780601f10610d9e57610100808354040283529160200191610dc9565b820191906000526020600020905b815481529060010190602001808311610dac57829003601f168201915b5050505050905090565b6000610de7610de061292f565b8484612937565b6001905092915050565b610df961292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d9061439b565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610f0261292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f869061439b565b60405180910390fd5b82600f819055508160108190555080601181905550610fcf601154610fc1601054600f546128d190919063ffffffff16565b6128d190919063ffffffff16565b601681905550505050565b6000610fe7848484612b02565b506110a984610ff461292f565b6110a485604051806060016040528060288152602001614b3860289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061105a61292f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b612937565b600190509392505050565b6110bc61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111409061439b565b60405180910390fd5b82600c8190555081600d8190555080600e81905550611189600e5461117b600d54600c546128d190919063ffffffff16565b6128d190919063ffffffff16565b601581905550505050565b61119c61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112209061439b565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006112a96112987f000000000000000000000000000000000000000000000000000000000000dead611cbc565b60185461314b90919063ffffffff16565b905090565b6112b661292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a9061439b565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b600f5481565b6000600460009054906101000a900460ff16905090565b600061146a6113ce61292f565b8461146585600760006113df61292f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b612937565b6001905092915050565b61147c61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115009061439b565b60405180910390fd5b80601b8190555050565b601d60159054906101000a900460ff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b60135481565b61157461292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f89061439b565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061166661292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea9061439b565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561173e57600080fd5b505afa158015611752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117769190613d08565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117d857600080fd5b505afa1580156117ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118109190613d08565b6040518363ffffffff1660e01b815260040161182d9291906141d9565b60206040518083038186803b15801561184557600080fd5b505afa158015611859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187d9190613d08565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a3e578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156118fa57600080fd5b505afa15801561190e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119329190613d08565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561199457600080fd5b505afa1580156119a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cc9190613d08565b6040518363ffffffff1660e01b81526004016119e99291906141d9565b602060405180830381600087803b158015611a0357600080fd5b505af1158015611a17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3b9190613d08565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60115481565b60105481565b611bce61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c529061439b565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b601a5481565b60165481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d4861292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcc9061439b565b60405180910390fd5b678ac7230489e80000811115611e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e17906142db565b60405180910390fd5b8060198190555050565b611e3261292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb69061439b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060038054611f8c906146f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611fb8906146f5565b80156120055780601f10611fda57610100808354040283529160200191612005565b820191906000526020600020905b815481529060010190602001808311611fe857829003601f168201915b5050505050905090565b60125481565b60175481565b60006120de61202861292f565b846120d985604051806060016040528060258152602001614b60602591396007600061205261292f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b612937565b6001905092915050565b6120f061292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461217d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121749061439b565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b60006121ae6121a761292f565b8484612b02565b506001905092915050565b600c5481565b6121c761292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b9061439b565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122a061292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123249061439b565b60405180910390fd5b82601281905550816013819055508060148190555061236d60145461235f6013546012546128d190919063ffffffff16565b6128d190919063ffffffff16565b601781905550505050565b61238061292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461240d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124049061439b565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516124569190614263565b60405180910390a150565b600a6020528060005260406000206000915054906101000a900460ff1681565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b601d60169054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61254f61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d39061439b565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60155481565b61264561292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c99061439b565b60405180910390fd5b80601a8190555050565b6126e461292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612771576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127689061439b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d8906142fb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60179054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b60008082846128e09190614510565b905083811015612925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291c9061433b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299e906143db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0e9061431b565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612af591906143fb565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6a906143bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bda906142bb565b60405180910390fd5b601d60149054906101000a900460ff1615612c0a57612c03848484613195565b90506130e0565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612cae5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cf957601954821115612cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cef9061435b565b60405180910390fd5b5b6000612d0430611cbc565b90506000601b548210159050808015612d2a5750601d60149054906101000a900460ff16155b8015612d805750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d985750601d60159054906101000a900460ff165b15612dc257601d60169054906101000a900460ff1615612db857601b5491505b612dc182613368565b5b612e4b846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f315750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f4557612f40878787613559565b612f47565b845b9050601d60179054906101000a900460ff168015612faf5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fde57601a54612fd282612fc489611cbc565b6128d190919063ffffffff16565b1115612fdd57600080fd5b5b61303081600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130d091906143fb565b60405180910390a3600193505050505b9392505050565b600083831115829061312f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131269190614299565b60405180910390fd5b506000838561313e91906145f1565b9050809150509392505050565b600061318d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130e7565b905092915050565b6000613220826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132b582600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161335591906143fb565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff02191690831515021790555060006133c160026133b36017546133a56012548761378090919063ffffffff16565b6137fb90919063ffffffff16565b6137fb90919063ffffffff16565b905060006133d8828461314b90919063ffffffff16565b90506133e381613845565b6000479050600061341461340360026012546137fb90919063ffffffff16565b60175461314b90919063ffffffff16565b905060006134526002613444846134366012548861378090919063ffffffff16565b6137fb90919063ffffffff16565b6137fb90919063ffffffff16565b9050600061347d8361346f6014548761378090919063ffffffff16565b6137fb90919063ffffffff16565b905060006134a682613498858861314b90919063ffffffff16565b61314b90919063ffffffff16565b905060008111156134de576134dd600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613ad0565b5b600082111561351457613513600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613ad0565b5b6000831180156135245750600087115b15613534576135338784613b1b565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135e1576135da60646135cc6015548661378090919063ffffffff16565b6137fb90919063ffffffff16565b905061365f565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561365e5761365b606461364d6016548661378090919063ffffffff16565b6137fb90919063ffffffff16565b90505b5b6000811115613763576136ba81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161375a91906143fb565b60405180910390a35b613776818461314b90919063ffffffff16565b9150509392505050565b60008083141561379357600090506137f5565b600082846137a19190614597565b90508284826137b09190614566565b146137f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e79061437b565b60405180910390fd5b809150505b92915050565b600061383d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c0f565b905092915050565b6000600267ffffffffffffffff811115613862576138616147e3565b5b6040519080825280602002602001820160405280156138905781602001602082028036833780820191505090505b50905030816000815181106138a8576138a76147b4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561394a57600080fd5b505afa15801561395e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139829190613d08565b81600181518110613996576139956147b4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139fd30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612937565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a61959493929190614446565b600060405180830381600087803b158015613a7b57600080fd5b505af1158015613a8f573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613ac4929190614416565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613b16573d6000803e3d6000fd5b505050565b613b4830601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612937565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b94611d17565b426040518863ffffffff1660e01b8152600401613bb696959493929190614202565b6060604051808303818588803b158015613bcf57600080fd5b505af1158015613be3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c089190613ef5565b5050505050565b60008083118290613c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c4d9190614299565b60405180910390fd5b5060008385613c659190614566565b9050809150509392505050565b600081359050613c8181614af2565b92915050565b600081519050613c9681614af2565b92915050565b600081359050613cab81614b09565b92915050565b600081359050613cc081614b20565b92915050565b600081519050613cd581614b20565b92915050565b600060208284031215613cf157613cf0614812565b5b6000613cff84828501613c72565b91505092915050565b600060208284031215613d1e57613d1d614812565b5b6000613d2c84828501613c87565b91505092915050565b60008060408385031215613d4c57613d4b614812565b5b6000613d5a85828601613c72565b9250506020613d6b85828601613c72565b9150509250929050565b600080600060608486031215613d8e57613d8d614812565b5b6000613d9c86828701613c72565b9350506020613dad86828701613c72565b9250506040613dbe86828701613cb1565b9150509250925092565b60008060408385031215613ddf57613dde614812565b5b6000613ded85828601613c72565b9250506020613dfe85828601613c9c565b9150509250929050565b60008060408385031215613e1f57613e1e614812565b5b6000613e2d85828601613c72565b9250506020613e3e85828601613cb1565b9150509250929050565b600060208284031215613e5e57613e5d614812565b5b6000613e6c84828501613c9c565b91505092915050565b600060208284031215613e8b57613e8a614812565b5b6000613e9984828501613cb1565b91505092915050565b600080600060608486031215613ebb57613eba614812565b5b6000613ec986828701613cb1565b9350506020613eda86828701613cb1565b9250506040613eeb86828701613cb1565b9150509250925092565b600080600060608486031215613f0e57613f0d614812565b5b6000613f1c86828701613cc6565b9350506020613f2d86828701613cc6565b9250506040613f3e86828701613cc6565b9150509250925092565b6000613f548383613f60565b60208301905092915050565b613f6981614625565b82525050565b613f7881614625565b82525050565b6000613f89826144cb565b613f9381856144ee565b9350613f9e836144bb565b8060005b83811015613fcf578151613fb68882613f48565b9750613fc1836144e1565b925050600181019050613fa2565b5085935050505092915050565b613fe581614637565b82525050565b613ff48161467a565b82525050565b6140038161468c565b82525050565b6000614014826144d6565b61401e81856144ff565b935061402e8185602086016146c2565b61403781614817565b840191505092915050565b600061404f6023836144ff565b915061405a82614828565b604082019050919050565b60006140726034836144ff565b915061407d82614877565b604082019050919050565b60006140956026836144ff565b91506140a0826148c6565b604082019050919050565b60006140b86022836144ff565b91506140c382614915565b604082019050919050565b60006140db601b836144ff565b91506140e682614964565b602082019050919050565b60006140fe6028836144ff565b91506141098261498d565b604082019050919050565b60006141216021836144ff565b915061412c826149dc565b604082019050919050565b60006141446020836144ff565b915061414f82614a2b565b602082019050919050565b60006141676025836144ff565b915061417282614a54565b604082019050919050565b600061418a6024836144ff565b915061419582614aa3565b604082019050919050565b6141a981614663565b82525050565b6141b88161466d565b82525050565b60006020820190506141d36000830184613f6f565b92915050565b60006040820190506141ee6000830185613f6f565b6141fb6020830184613f6f565b9392505050565b600060c0820190506142176000830189613f6f565b61422460208301886141a0565b6142316040830187613ffa565b61423e6060830186613ffa565b61424b6080830185613f6f565b61425860a08301846141a0565b979650505050505050565b60006020820190506142786000830184613fdc565b92915050565b60006020820190506142936000830184613feb565b92915050565b600060208201905081810360008301526142b38184614009565b905092915050565b600060208201905081810360008301526142d481614042565b9050919050565b600060208201905081810360008301526142f481614065565b9050919050565b6000602082019050818103600083015261431481614088565b9050919050565b60006020820190508181036000830152614334816140ab565b9050919050565b60006020820190508181036000830152614354816140ce565b9050919050565b60006020820190508181036000830152614374816140f1565b9050919050565b6000602082019050818103600083015261439481614114565b9050919050565b600060208201905081810360008301526143b481614137565b9050919050565b600060208201905081810360008301526143d48161415a565b9050919050565b600060208201905081810360008301526143f48161417d565b9050919050565b600060208201905061441060008301846141a0565b92915050565b600060408201905061442b60008301856141a0565b818103602083015261443d8184613f7e565b90509392505050565b600060a08201905061445b60008301886141a0565b6144686020830187613ffa565b818103604083015261447a8186613f7e565b90506144896060830185613f6f565b61449660808301846141a0565b9695505050505050565b60006020820190506144b560008301846141af565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061451b82614663565b915061452683614663565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561455b5761455a614727565b5b828201905092915050565b600061457182614663565b915061457c83614663565b92508261458c5761458b614756565b5b828204905092915050565b60006145a282614663565b91506145ad83614663565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145e6576145e5614727565b5b828202905092915050565b60006145fc82614663565b915061460783614663565b92508282101561461a57614619614727565b5b828203905092915050565b600061463082614643565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006146858261469e565b9050919050565b600061469782614663565b9050919050565b60006146a9826146b0565b9050919050565b60006146bb82614643565b9050919050565b60005b838110156146e05780820151818401526020810190506146c5565b838111156146ef576000848401525b50505050565b6000600282049050600182168061470d57607f821691505b6020821081141561472157614720614785565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c65742073686f756c64206265206c657373206f722065757160008201527f616c20746f20342520746f74616c537570706c79000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614afb81614625565b8114614b0657600080fd5b50565b614b1281614637565b8114614b1d57600080fd5b50565b614b2981614663565b8114614b3457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c180d985946c7305e5afeb7a3da60cea8d97270439597fcfffa537349d39588464736f6c63430008070033

Deployed Bytecode Sourcemap

14246:14943:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17956:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19122:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21957:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15923:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18233:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20420:373;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23883:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20047:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21445:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14696:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22519:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19896:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15198:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15286:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18142:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18619:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21825:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16038:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14978:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15098:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15465:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21566:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22793:813;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15375:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15330:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19751:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15241:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18341:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15753:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15808:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15597:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5785:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21209:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6010:145;;;;;;;;;;;;;:::i;:::-;;18047:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15423:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15642:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18845:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22382:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23708:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15155:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22080:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20805:392;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22203:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15040:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15971:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15508:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16085:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18468:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19636:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15554:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21715:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6163:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16137:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14917:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17956:83;17993:13;18026:5;18019:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17956:83;:::o;19122:161::-;19197:4;19214:39;19223:12;:10;:12::i;:::-;19237:7;19246:6;19214:8;:39::i;:::-;19271:4;19264:11;;19122:161;;;;:::o;21957:115::-;5929:12;:10;:12::i;:::-;5919:22;;:6;;;;;;;;;;:22;;;5911:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22053:10:::1;22032;;:32;;;;;;;;;;;;;;;;;;21957:115:::0;:::o;15923:41::-;;;;;;;;;;;;;:::o;18233:100::-;18286:7;18313:12;;18306:19;;18233:100;:::o;20420:373::-;5929:12;:10;:12::i;:::-;5919:22;;:6;;;;;;;;;;:22;;;5911:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20570:15:::1;20549:18;:36;;;;20617:15;20596:18;:36;;;;20666:17;20643:20;:40;;;;20717:68;20764:20;;20717:42;20740:18;;20717;;:22;;:42;;;;:::i;:::-;:46;;:68;;;;:::i;:::-;20696:18;:89;;;;20420:373:::0;;;:::o;23883:313::-;23981:4;23998:36;24008:6;24016:9;24027:6;23998:9;:36::i;:::-;;24045:121;24054:6;24062:12;:10;:12::i;:::-;24076:89;24114:6;24076:89;;;;;;;;;;;;;;;;;:11;:19;24088:6;24076:19;;;;;;;;;;;;;;;:33;24096:12;:10;:12::i;:::-;24076:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;24045:8;:121::i;:::-;24184:4;24177:11;;23883:313;;;;;:::o;20047:365::-;5929:12;:10;:12::i;:::-;5919:22;;:6;;;;;;;;;;:22;;;5911:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20195:15:::1;20175:17;:35;;;;20241:15;20221:17;:35;;;;20289:17;20267:19;:39;;;;20339:65;20384:19;;20339:40;20361:17;;20339;;:21;;:40;;;;:::i;:::-;:44;;:65;;;;:::i;:::-;20319:17;:85;;;;20047:365:::0;;;:::o;21445:113::-;5929:12;:10;:12::i;:::-;5919:22;;:6;;;;;;;;;;:22;;;5911:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21542:8:::1;21523:16;;:27;;;;;;;;;;;;;;;;;;21445:113:::0;:::o;14696:81::-;;;:::o;22519:128::-;22572:7;22599:40;22616:22;22626:11;22616:9;:22::i;:::-;22599:12;;:16;;:40;;;;:::i;:::-;22592:47;;22519:128;:::o;19896:143::-;5929:12;:10;:12::i;:::-;5919:22;;:6;;;;;;;;;;:22;;;5911:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20023:8:::1;19990:21;:30;20012:7;19990:30;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;19896:143:::0;;:::o;15198:36::-;;;;:::o;15286:37::-;;;;:::o;18142:83::-;18183:5;18208:9;;;;;;;;;;;18201:16;;18142:83;:::o;18619:218::-;18707:4;18724:83;18733:12;:10;:12::i;:::-;18747:7;18756:50;18795:10;18756:11;:25;18768:12;:10;:12::i;:::-;18756:25;;;;;;;;;;;;;;;:34;18782:7;18756:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18724:8;:83::i;:::-;18825:4;18818:11;;18619:218;;;;:::o;21825:124::-;5929:12;:10;:12::i;:::-;5919:22;;:6;;;;;;;;;;:22;;;5911:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21933:8:::1;21907:23;:34;;;;21825:124:::0;:::o;16038:40::-;;;;;;;;;;;;;:::o;14978:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;15098:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;15465:36::-;;;;:::o;21566:141::-;5929:12;:10;:12::i;:::-;5919:22;;:6;;;;;;;;;;:22;;;5911:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21693:6:::1;21660:22;:30;21683:6;21660:30;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21566:141:::0;;:::o;22793:813::-;22873:22;5929:12;:10;:12::i;:::-;5919:22;;:6;;;;;;;;;;:22;;;5911:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22910:35:::1;22967:16;22910:74;;23033:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23015:53;;;23077:4;23084:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23015:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22998:110;;23150:1;23124:28;;:14;:28;;;23121:225;;;23238:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23220:74;;;23303:4;23310:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23220:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23203:131;;23121:225;23372:14;23358:11;;:28;;;;;;;;;;;;;;;;;;23438:16;23420:15;;:34;;;;;;;;;;;;;;;;;;23539:4;23492:22;:44;23523:11;;;;;;;;;;;23492:44;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;23594:4;23554:15;:37;23578:11;;;;;;;;;;;23554:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;22897:709;22793:813:::0;;;:::o;15375:39::-;;;;:::o;15330:38::-;;;;:::o;19751:133::-;5929:12;:10;:12::i;:::-;5919:22;;:6;;;;;;;;;;:22;;;5911:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19870:6:::1;19841:18;:26;19860:6;19841:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;19751:133:::0;;:::o;15241:38::-;;;;:::o;18341:119::-;18407:7;18434:9;:18;18444:7;18434:18;;;;;;;;;;;;;;;;18427:25;;18341:119;;;:::o;15753:48::-;;;;:::o;15808:46::-;;;;:::o;15597:38::-;;;;:::o;5785:79::-;5823:7;5850:6;;;;;;;;;;;5843:13;;5785:79;:::o;21209:228::-;5929:12;:10;:12::i;:::-;5919:22;;:6;;;;;;;;;;:22;;;5911:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21313:21:::1;21297:11;:38;;21289:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;21418:11;21403:12;:26;;;;21209:228:::0;:::o;6010:145::-;5929:12;:10;:12::i;:::-;5919:22;;:6;;;;;;;;;;:22;;;5911:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6114:1:::1;6077:40;;6098:6;::::0;::::1;;;;;;;;6077:40;;;;;;;;;;;;6145:1;6128:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6010:145::o:0;18047:87::-;18086:13;18119:7;18112:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18047:87;:::o;15423:35::-;;;;:::o;15642:44::-;;;;:::o;18845:269::-;18938:4;18955:129;18964:12;:10;:12::i;:::-;18978:7;18987:96;19026:15;18987:96;;;;;;;;;;;;;;;;;:11;:25;18999:12;:10;:12::i;:::-;18987:25;;;;;;;;;;;;;;;:34;19013:7;18987:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18955:8;:129::i;:::-;19102:4;19095:11;;18845:269;;;;:::o;22382:125::-;5929:12;:10;:12::i;:::-;5919:22;;:6;;;;;;;;;;:22;;;5911:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22491:8:::1;22463:25;;:36;;;;;;;;;;;;;;;;;;22382:125:::0;:::o;23708:167::-;23786:4;23803:42;23813:12;:10;:12::i;:::-;23827:9;23838:6;23803:9;:42::i;:::-;;23863:4;23856:11;;23708:167;;;;:::o;15155:36::-;;;;:::o;22080:115::-;5929:12;:10;:12::i;:::-;5919:22;;:6;;;;;;;;;;:22;;;5911:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22176:10:::1;22155;;:32;;;;;;;;;;;;;;;;;;22080:115:::0;:::o;20805:392::-;5929:12;:10;:12::i;:::-;5919:22;;:6;;;;;;;;;;:22;;;5911:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20972:17:::1;20953:16;:36;;;;21019:17;21000:16;:36;;;;21068:19;21047:18;:40;;;;21127:62;21170:18;;21127:38;21148:16;;21127;;:20;;:38;;;;:::i;:::-;:42;;:62;;;;:::i;:::-;21100:24;:89;;;;20805:392:::0;;;:::o;22203:171::-;5929:12;:10;:12::i;:::-;5919:22;;:6;;;;;;;;;;:22;;;5911:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22304:8:::1;22280:21;;:32;;;;;;;;;;;;;;;;;;22328:38;22357:8;22328:38;;;;;;:::i;:::-;;;;;;;;22203:171:::0;:::o;15040:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;15971:26::-;;;;;;;;;;;;;:::o;15508:37::-;;;;:::o;16085:45::-;;;;;;;;;;;;;:::o;18468:143::-;18549:7;18576:11;:18;18588:5;18576:18;;;;;;;;;;;;;;;:27;18595:7;18576:27;;;;;;;;;;;;;;;;18569:34;;18468:143;;;;:::o;19636:107::-;5929:12;:10;:12::i;:::-;5919:22;;:6;;;;;;;;;;:22;;;5911:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19731:4:::1;19704:15;:24;19720:7;19704:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;19636:107:::0;:::o;15554:36::-;;;;:::o;21715:102::-;5929:12;:10;:12::i;:::-;5919:22;;:6;;;;;;;;;;:22;;;5911:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21801:8:::1;21787:10;:22;;;;21715:102:::0;:::o;6163:244::-;5929:12;:10;:12::i;:::-;5919:22;;:6;;;;;;;;;;:22;;;5911:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6272:1:::1;6252:22;;:8;:22;;;;6244:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6362:8;6333:38;;6354:6;::::0;::::1;;;;;;;;6333:38;;;;;;;;;;;;6391:8;6382:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6163:244:::0;:::o;16137:35::-;;;;;;;;;;;;;:::o;14917:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;1187:181::-;1245:7;1265:9;1281:1;1277;:5;;;;:::i;:::-;1265:17;;1306:1;1301;:6;;1293:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1359:1;1352:8;;;1187:181;;;;:::o;119:115::-;172:15;215:10;200:26;;119:115;:::o;19291:337::-;19401:1;19384:19;;:5;:19;;;;19376:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19482:1;19463:21;;:7;:21;;;;19455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19566:6;19536:11;:18;19548:5;19536:18;;;;;;;;;;;;;;;:27;19555:7;19536:27;;;;;;;;;;;;;;;:36;;;;19604:7;19588:32;;19597:5;19588:32;;;19613:6;19588:32;;;;;;:::i;:::-;;;;;;;;19291:337;;;:::o;24204:1727::-;24291:4;24336:1;24318:20;;:6;:20;;;;24310:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24420:1;24399:23;;:9;:23;;;;24391:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24478:16;;;;;;;;;;;24475:1449;;;24528:41;24543:6;24551:9;24562:6;24528:14;:41::i;:::-;24521:48;;;;24475:1449;24625:18;:26;24644:6;24625:26;;;;;;;;;;;;;;;;;;;;;;;;;24624:27;:61;;;;;24656:18;:29;24675:9;24656:29;;;;;;;;;;;;;;;;;;;;;;;;;24655:30;24624:61;24621:176;;;24724:12;;24714:6;:22;;24706:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24621:176;24825:28;24856:24;24874:4;24856:9;:24::i;:::-;24825:55;;24895:28;24950:23;;24926:20;:47;;24895:78;;25006:23;:44;;;;;25034:16;;;;;;;;;;;25033:17;25006:44;:72;;;;;25055:15;:23;25071:6;25055:23;;;;;;;;;;;;;;;;;;;;;;;;;25054:24;25006:72;:97;;;;;25082:21;;;;;;;;;;;25006:97;25002:308;;;25141:25;;;;;;;;;;;25138:97;;;25212:23;;25189:46;;25138:97;25254:36;25269:20;25254:14;:36::i;:::-;25002:308;25346:53;25368:6;25346:53;;;;;;;;;;;;;;;;;:9;:17;25356:6;25346:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25326:9;:17;25336:6;25326:17;;;;;;;;;;;;;;;:73;;;;25416:19;25439:21;:29;25461:6;25439:29;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;25472:21;:32;25494:9;25472:32;;;;;;;;;;;;;;;;;;;;;;;;;25439:65;25438:156;;25560:34;25568:6;25576:9;25587:6;25560:7;:34::i;:::-;25438:156;;;25551:6;25438:156;25416:178;;25614:16;;;;;;;;;;;:54;;;;;25635:22;:33;25658:9;25635:33;;;;;;;;;;;;;;;;;;;;;;;;;25634:34;25614:54;25611:136;;;25736:10;;25695:37;25720:11;25695:20;25705:9;25695;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;25687:60;;;;;;25611:136;25787:37;25812:11;25787:9;:20;25797:9;25787:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;25764:9;:20;25774:9;25764:20;;;;;;;;;;;;;;;:60;;;;25863:9;25846:40;;25855:6;25846:40;;;25874:11;25846:40;;;;;;:::i;:::-;;;;;;;;25908:4;25901:11;;;;;24204:1727;;;;;;:::o;1520:192::-;1606:7;1639:1;1634;:6;;1642:12;1626:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1666:9;1682:1;1678;:5;;;;:::i;:::-;1666:17;;1703:1;1696:8;;;1520:192;;;;;:::o;1376:136::-;1434:7;1461:43;1465:1;1468;1461:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1454:50;;1376:136;;;;:::o;25939:330::-;26032:4;26069:53;26091:6;26069:53;;;;;;;;;;;;;;;;;:9;:17;26079:6;26069:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;26049:9;:17;26059:6;26049:17;;;;;;;;;;;;;;;:73;;;;26156:32;26181:6;26156:9;:20;26166:9;26156:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;26133:9;:20;26143:9;26133:20;;;;;;;;;;;;;;;:55;;;;26221:9;26204:35;;26213:6;26204:35;;;26232:6;26204:35;;;;;;:::i;:::-;;;;;;;;26257:4;26250:11;;25939:330;;;;;:::o;26277:1068::-;16614:4;16595:16;;:23;;;;;;;;;;;;;;;;;;26359:19:::1;26381:66;26445:1;26381:59;26415:24;;26381:29;26393:16;;26381:7;:11;;:29;;;;:::i;:::-;:33;;:59;;;;:::i;:::-;:63;;:66;;;;:::i;:::-;26359:88;;26458:21;26482:24;26494:11;26482:7;:11;;:24;;;;:::i;:::-;26458:48;;26519:31;26536:13;26519:16;:31::i;:::-;26561:22;26586:21;26561:46;;26620:19;26642:53;26671:23;26692:1;26671:16;;:20;;:23;;;;:::i;:::-;26642:24;;:28;;:53;;;;:::i;:::-;26620:75;;26716:26;26745:60;26803:1;26745:53;26786:11;26745:36;26764:16;;26745:14;:18;;:36;;;;:::i;:::-;:40;;:53;;;;:::i;:::-;:57;;:60;;;;:::i;:::-;26716:89;;26816:28;26847:55;26890:11;26847:38;26866:18;;26847:14;:18;;:38;;;;:::i;:::-;:42;;:55;;;;:::i;:::-;26816:86;;26913:26;26942:64;26985:20;26942:38;26961:18;26942:14;:18;;:38;;;;:::i;:::-;:42;;:64;;;;:::i;:::-;26913:93;;27043:1;27022:18;:22;27019:92;;;27059:52;27080:10;;;;;;;;;;;27092:18;27059:20;:52::i;:::-;27019:92;27150:1;27127:20;:24;27124:96;;;27166:54;27187:10;;;;;;;;;;;27199:20;27166;:54::i;:::-;27124:96;27257:1;27236:18;:22;:41;;;;;27276:1;27262:11;:15;27236:41;27233:104;;;27292:45;27305:11;27318:18;27292:12;:45::i;:::-;27233:104;26338:1007;;;;;;;16660:5:::0;16641:16;;:24;;;;;;;;;;;;;;;;;;26277:1068;:::o;28552:628::-;28638:7;28668:17;28688:1;28668:21;;28713:15;:23;28729:6;28713:23;;;;;;;;;;;;;;;;;;;;;;;;;28710:229;;;28765:38;28799:3;28765:29;28776:17;;28765:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;28753:50;;28710:229;;;28833:15;:26;28849:9;28833:26;;;;;;;;;;;;;;;;;;;;;;;;;28830:109;;;28888:39;28923:3;28888:30;28899:18;;28888:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;28876:51;;28830:109;28710:229;28974:1;28962:9;:13;28959:173;;;29019:39;29048:9;29019;:24;29037:4;29019:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;28992:9;:24;29010:4;28992:24;;;;;;;;;;;;;;;:66;;;;29103:4;29078:42;;29087:6;29078:42;;;29110:9;29078:42;;;;;;:::i;:::-;;;;;;;;28959:173;29151:21;29162:9;29151:6;:10;;:21;;;;:::i;:::-;29144:28;;;28552:628;;;;;:::o;1720:250::-;1778:7;1807:1;1802;:6;1798:47;;;1832:1;1825:8;;;;1798:47;1857:9;1873:1;1869;:5;;;;:::i;:::-;1857:17;;1902:1;1897;1893;:5;;;;:::i;:::-;:10;1885:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1961:1;1954:8;;;1720:250;;;;;:::o;1978:132::-;2036:7;2063:39;2067:1;2070;2063:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2056:46;;1978:132;;;;:::o;27357:666::-;27483:21;27521:1;27507:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27483:40;;27552:4;27534;27539:1;27534:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27578:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27568:4;27573:1;27568:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27613:62;27630:4;27645:15;;;;;;;;;;;27663:11;27613:8;:62::i;:::-;27714:15;;;;;;;;;;;:66;;;27795:11;27821:1;27865:4;27892;27928:15;27714:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27980:35;27997:11;28010:4;27980:35;;;;;;;:::i;:::-;;;;;;;;27412:611;27357:666;:::o;22655:126::-;22747:9;:18;;:26;22766:6;22747:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22655:126;;:::o;28031:513::-;28179:62;28196:4;28211:15;;;;;;;;;;;28229:11;28179:8;:62::i;:::-;28284:15;;;;;;;;;;;:31;;;28323:9;28356:4;28376:11;28402:1;28445;28488:7;:5;:7::i;:::-;28510:15;28284:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28031:513;;:::o;2118:278::-;2204:7;2236:1;2232;:5;2239:12;2224:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2263:9;2279:1;2275;:5;;;;:::i;:::-;2263:17;;2387:1;2380:8;;;2118:278;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;440:139;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;585:143;;;;:::o;734:329::-;793:6;842:2;830:9;821:7;817:23;813:32;810:119;;;848:79;;:::i;:::-;810:119;968:1;993:53;1038:7;1029:6;1018:9;1014:22;993:53;:::i;:::-;983:63;;939:117;734:329;;;;:::o;1069:351::-;1139:6;1188:2;1176:9;1167:7;1163:23;1159:32;1156:119;;;1194:79;;:::i;:::-;1156:119;1314:1;1339:64;1395:7;1386:6;1375:9;1371:22;1339:64;:::i;:::-;1329:74;;1285:128;1069:351;;;;:::o;1426:474::-;1494:6;1502;1551:2;1539:9;1530:7;1526:23;1522:32;1519:119;;;1557:79;;:::i;:::-;1519:119;1677:1;1702:53;1747:7;1738:6;1727:9;1723:22;1702:53;:::i;:::-;1692:63;;1648:117;1804:2;1830:53;1875:7;1866:6;1855:9;1851:22;1830:53;:::i;:::-;1820:63;;1775:118;1426:474;;;;;:::o;1906:619::-;1983:6;1991;1999;2048:2;2036:9;2027:7;2023:23;2019:32;2016:119;;;2054:79;;:::i;:::-;2016:119;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2301:2;2327:53;2372:7;2363:6;2352:9;2348:22;2327:53;:::i;:::-;2317:63;;2272:118;2429:2;2455:53;2500:7;2491:6;2480:9;2476:22;2455:53;:::i;:::-;2445:63;;2400:118;1906:619;;;;;:::o;2531:468::-;2596:6;2604;2653:2;2641:9;2632:7;2628:23;2624:32;2621:119;;;2659:79;;:::i;:::-;2621:119;2779:1;2804:53;2849:7;2840:6;2829:9;2825:22;2804:53;:::i;:::-;2794:63;;2750:117;2906:2;2932:50;2974:7;2965:6;2954:9;2950:22;2932:50;:::i;:::-;2922:60;;2877:115;2531:468;;;;;:::o;3005:474::-;3073:6;3081;3130:2;3118:9;3109:7;3105:23;3101:32;3098:119;;;3136:79;;:::i;:::-;3098:119;3256:1;3281:53;3326:7;3317:6;3306:9;3302:22;3281:53;:::i;:::-;3271:63;;3227:117;3383:2;3409:53;3454:7;3445:6;3434:9;3430:22;3409:53;:::i;:::-;3399:63;;3354:118;3005:474;;;;;:::o;3485:323::-;3541:6;3590:2;3578:9;3569:7;3565:23;3561:32;3558:119;;;3596:79;;:::i;:::-;3558:119;3716:1;3741:50;3783:7;3774:6;3763:9;3759:22;3741:50;:::i;:::-;3731:60;;3687:114;3485:323;;;;:::o;3814:329::-;3873:6;3922:2;3910:9;3901:7;3897:23;3893:32;3890:119;;;3928:79;;:::i;:::-;3890:119;4048:1;4073:53;4118:7;4109:6;4098:9;4094:22;4073:53;:::i;:::-;4063:63;;4019:117;3814:329;;;;:::o;4149:619::-;4226:6;4234;4242;4291:2;4279:9;4270:7;4266:23;4262:32;4259:119;;;4297:79;;:::i;:::-;4259:119;4417:1;4442:53;4487:7;4478:6;4467:9;4463:22;4442:53;:::i;:::-;4432:63;;4388:117;4544:2;4570:53;4615:7;4606:6;4595:9;4591:22;4570:53;:::i;:::-;4560:63;;4515:118;4672:2;4698:53;4743:7;4734:6;4723:9;4719:22;4698:53;:::i;:::-;4688:63;;4643:118;4149:619;;;;;:::o;4774:663::-;4862:6;4870;4878;4927:2;4915:9;4906:7;4902:23;4898:32;4895:119;;;4933:79;;:::i;:::-;4895:119;5053:1;5078:64;5134:7;5125:6;5114:9;5110:22;5078:64;:::i;:::-;5068:74;;5024:128;5191:2;5217:64;5273:7;5264:6;5253:9;5249:22;5217:64;:::i;:::-;5207:74;;5162:129;5330:2;5356:64;5412:7;5403:6;5392:9;5388:22;5356:64;:::i;:::-;5346:74;;5301:129;4774:663;;;;;:::o;5443:179::-;5512:10;5533:46;5575:3;5567:6;5533:46;:::i;:::-;5611:4;5606:3;5602:14;5588:28;;5443:179;;;;:::o;5628:108::-;5705:24;5723:5;5705:24;:::i;:::-;5700:3;5693:37;5628:108;;:::o;5742:118::-;5829:24;5847:5;5829:24;:::i;:::-;5824:3;5817:37;5742:118;;:::o;5896:732::-;6015:3;6044:54;6092:5;6044:54;:::i;:::-;6114:86;6193:6;6188:3;6114:86;:::i;:::-;6107:93;;6224:56;6274:5;6224:56;:::i;:::-;6303:7;6334:1;6319:284;6344:6;6341:1;6338:13;6319:284;;;6420:6;6414:13;6447:63;6506:3;6491:13;6447:63;:::i;:::-;6440:70;;6533:60;6586:6;6533:60;:::i;:::-;6523:70;;6379:224;6366:1;6363;6359:9;6354:14;;6319:284;;;6323:14;6619:3;6612:10;;6020:608;;;5896:732;;;;:::o;6634:109::-;6715:21;6730:5;6715:21;:::i;:::-;6710:3;6703:34;6634:109;;:::o;6749:185::-;6863:64;6921:5;6863:64;:::i;:::-;6858:3;6851:77;6749:185;;:::o;6940:147::-;7035:45;7074:5;7035:45;:::i;:::-;7030:3;7023:58;6940:147;;:::o;7093:364::-;7181:3;7209:39;7242:5;7209:39;:::i;:::-;7264:71;7328:6;7323:3;7264:71;:::i;:::-;7257:78;;7344:52;7389:6;7384:3;7377:4;7370:5;7366:16;7344:52;:::i;:::-;7421:29;7443:6;7421:29;:::i;:::-;7416:3;7412:39;7405:46;;7185:272;7093:364;;;;:::o;7463:366::-;7605:3;7626:67;7690:2;7685:3;7626:67;:::i;:::-;7619:74;;7702:93;7791:3;7702:93;:::i;:::-;7820:2;7815:3;7811:12;7804:19;;7463:366;;;:::o;7835:::-;7977:3;7998:67;8062:2;8057:3;7998:67;:::i;:::-;7991:74;;8074:93;8163:3;8074:93;:::i;:::-;8192:2;8187:3;8183:12;8176:19;;7835:366;;;:::o;8207:::-;8349:3;8370:67;8434:2;8429:3;8370:67;:::i;:::-;8363:74;;8446:93;8535:3;8446:93;:::i;:::-;8564:2;8559:3;8555:12;8548:19;;8207:366;;;:::o;8579:::-;8721:3;8742:67;8806:2;8801:3;8742:67;:::i;:::-;8735:74;;8818:93;8907:3;8818:93;:::i;:::-;8936:2;8931:3;8927:12;8920:19;;8579:366;;;:::o;8951:::-;9093:3;9114:67;9178:2;9173:3;9114:67;:::i;:::-;9107:74;;9190:93;9279:3;9190:93;:::i;:::-;9308:2;9303:3;9299:12;9292:19;;8951:366;;;:::o;9323:::-;9465:3;9486:67;9550:2;9545:3;9486:67;:::i;:::-;9479:74;;9562:93;9651:3;9562:93;:::i;:::-;9680:2;9675:3;9671:12;9664:19;;9323:366;;;:::o;9695:::-;9837:3;9858:67;9922:2;9917:3;9858:67;:::i;:::-;9851:74;;9934:93;10023:3;9934:93;:::i;:::-;10052:2;10047:3;10043:12;10036:19;;9695:366;;;:::o;10067:::-;10209:3;10230:67;10294:2;10289:3;10230:67;:::i;:::-;10223:74;;10306:93;10395:3;10306:93;:::i;:::-;10424:2;10419:3;10415:12;10408:19;;10067:366;;;:::o;10439:::-;10581:3;10602:67;10666:2;10661:3;10602:67;:::i;:::-;10595:74;;10678:93;10767:3;10678:93;:::i;:::-;10796:2;10791:3;10787:12;10780:19;;10439:366;;;:::o;10811:::-;10953:3;10974:67;11038:2;11033:3;10974:67;:::i;:::-;10967:74;;11050:93;11139:3;11050:93;:::i;:::-;11168:2;11163:3;11159:12;11152:19;;10811:366;;;:::o;11183:118::-;11270:24;11288:5;11270:24;:::i;:::-;11265:3;11258:37;11183:118;;:::o;11307:112::-;11390:22;11406:5;11390:22;:::i;:::-;11385:3;11378:35;11307:112;;:::o;11425:222::-;11518:4;11556:2;11545:9;11541:18;11533:26;;11569:71;11637:1;11626:9;11622:17;11613:6;11569:71;:::i;:::-;11425:222;;;;:::o;11653:332::-;11774:4;11812:2;11801:9;11797:18;11789:26;;11825:71;11893:1;11882:9;11878:17;11869:6;11825:71;:::i;:::-;11906:72;11974:2;11963:9;11959:18;11950:6;11906:72;:::i;:::-;11653:332;;;;;:::o;11991:807::-;12240:4;12278:3;12267:9;12263:19;12255:27;;12292:71;12360:1;12349:9;12345:17;12336:6;12292:71;:::i;:::-;12373:72;12441:2;12430:9;12426:18;12417:6;12373:72;:::i;:::-;12455:80;12531:2;12520:9;12516:18;12507:6;12455:80;:::i;:::-;12545;12621:2;12610:9;12606:18;12597:6;12545:80;:::i;:::-;12635:73;12703:3;12692:9;12688:19;12679:6;12635:73;:::i;:::-;12718;12786:3;12775:9;12771:19;12762:6;12718:73;:::i;:::-;11991:807;;;;;;;;;:::o;12804:210::-;12891:4;12929:2;12918:9;12914:18;12906:26;;12942:65;13004:1;12993:9;12989:17;12980:6;12942:65;:::i;:::-;12804:210;;;;:::o;13020:276::-;13140:4;13178:2;13167:9;13163:18;13155:26;;13191:98;13286:1;13275:9;13271:17;13262:6;13191:98;:::i;:::-;13020:276;;;;:::o;13302:313::-;13415:4;13453:2;13442:9;13438:18;13430:26;;13502:9;13496:4;13492:20;13488:1;13477:9;13473:17;13466:47;13530:78;13603:4;13594:6;13530:78;:::i;:::-;13522:86;;13302:313;;;;:::o;13621:419::-;13787:4;13825:2;13814:9;13810:18;13802:26;;13874:9;13868:4;13864:20;13860:1;13849:9;13845:17;13838:47;13902:131;14028:4;13902:131;:::i;:::-;13894:139;;13621:419;;;:::o;14046:::-;14212:4;14250:2;14239:9;14235:18;14227:26;;14299:9;14293:4;14289:20;14285:1;14274:9;14270:17;14263:47;14327:131;14453:4;14327:131;:::i;:::-;14319:139;;14046:419;;;:::o;14471:::-;14637:4;14675:2;14664:9;14660:18;14652:26;;14724:9;14718:4;14714:20;14710:1;14699:9;14695:17;14688:47;14752:131;14878:4;14752:131;:::i;:::-;14744:139;;14471:419;;;:::o;14896:::-;15062:4;15100:2;15089:9;15085:18;15077:26;;15149:9;15143:4;15139:20;15135:1;15124:9;15120:17;15113:47;15177:131;15303:4;15177:131;:::i;:::-;15169:139;;14896:419;;;:::o;15321:::-;15487:4;15525:2;15514:9;15510:18;15502:26;;15574:9;15568:4;15564:20;15560:1;15549:9;15545:17;15538:47;15602:131;15728:4;15602:131;:::i;:::-;15594:139;;15321:419;;;:::o;15746:::-;15912:4;15950:2;15939:9;15935:18;15927:26;;15999:9;15993:4;15989:20;15985:1;15974:9;15970:17;15963:47;16027:131;16153:4;16027:131;:::i;:::-;16019:139;;15746:419;;;:::o;16171:::-;16337:4;16375:2;16364:9;16360:18;16352:26;;16424:9;16418:4;16414:20;16410:1;16399:9;16395:17;16388:47;16452:131;16578:4;16452:131;:::i;:::-;16444:139;;16171:419;;;:::o;16596:::-;16762:4;16800:2;16789:9;16785:18;16777:26;;16849:9;16843:4;16839:20;16835:1;16824:9;16820:17;16813:47;16877:131;17003:4;16877:131;:::i;:::-;16869:139;;16596:419;;;:::o;17021:::-;17187:4;17225:2;17214:9;17210:18;17202:26;;17274:9;17268:4;17264:20;17260:1;17249:9;17245:17;17238:47;17302:131;17428:4;17302:131;:::i;:::-;17294:139;;17021:419;;;:::o;17446:::-;17612:4;17650:2;17639:9;17635:18;17627:26;;17699:9;17693:4;17689:20;17685:1;17674:9;17670:17;17663:47;17727:131;17853:4;17727:131;:::i;:::-;17719:139;;17446:419;;;:::o;17871:222::-;17964:4;18002:2;17991:9;17987:18;17979:26;;18015:71;18083:1;18072:9;18068:17;18059:6;18015:71;:::i;:::-;17871:222;;;;:::o;18099:483::-;18270:4;18308:2;18297:9;18293:18;18285:26;;18321:71;18389:1;18378:9;18374:17;18365:6;18321:71;:::i;:::-;18439:9;18433:4;18429:20;18424:2;18413:9;18409:18;18402:48;18467:108;18570:4;18561:6;18467:108;:::i;:::-;18459:116;;18099:483;;;;;:::o;18588:831::-;18851:4;18889:3;18878:9;18874:19;18866:27;;18903:71;18971:1;18960:9;18956:17;18947:6;18903:71;:::i;:::-;18984:80;19060:2;19049:9;19045:18;19036:6;18984:80;:::i;:::-;19111:9;19105:4;19101:20;19096:2;19085:9;19081:18;19074:48;19139:108;19242:4;19233:6;19139:108;:::i;:::-;19131:116;;19257:72;19325:2;19314:9;19310:18;19301:6;19257:72;:::i;:::-;19339:73;19407:3;19396:9;19392:19;19383:6;19339:73;:::i;:::-;18588:831;;;;;;;;:::o;19425:214::-;19514:4;19552:2;19541:9;19537:18;19529:26;;19565:67;19629:1;19618:9;19614:17;19605:6;19565:67;:::i;:::-;19425:214;;;;:::o;19726:132::-;19793:4;19816:3;19808:11;;19846:4;19841:3;19837:14;19829:22;;19726:132;;;:::o;19864:114::-;19931:6;19965:5;19959:12;19949:22;;19864:114;;;:::o;19984:99::-;20036:6;20070:5;20064:12;20054:22;;19984:99;;;:::o;20089:113::-;20159:4;20191;20186:3;20182:14;20174:22;;20089:113;;;:::o;20208:184::-;20307:11;20341:6;20336:3;20329:19;20381:4;20376:3;20372:14;20357:29;;20208:184;;;;:::o;20398:169::-;20482:11;20516:6;20511:3;20504:19;20556:4;20551:3;20547:14;20532:29;;20398:169;;;;:::o;20573:305::-;20613:3;20632:20;20650:1;20632:20;:::i;:::-;20627:25;;20666:20;20684:1;20666:20;:::i;:::-;20661:25;;20820:1;20752:66;20748:74;20745:1;20742:81;20739:107;;;20826:18;;:::i;:::-;20739:107;20870:1;20867;20863:9;20856:16;;20573:305;;;;:::o;20884:185::-;20924:1;20941:20;20959:1;20941:20;:::i;:::-;20936:25;;20975:20;20993:1;20975:20;:::i;:::-;20970:25;;21014:1;21004:35;;21019:18;;:::i;:::-;21004:35;21061:1;21058;21054:9;21049:14;;20884:185;;;;:::o;21075:348::-;21115:7;21138:20;21156:1;21138:20;:::i;:::-;21133:25;;21172:20;21190:1;21172:20;:::i;:::-;21167:25;;21360:1;21292:66;21288:74;21285:1;21282:81;21277:1;21270:9;21263:17;21259:105;21256:131;;;21367:18;;:::i;:::-;21256:131;21415:1;21412;21408:9;21397:20;;21075:348;;;;:::o;21429:191::-;21469:4;21489:20;21507:1;21489:20;:::i;:::-;21484:25;;21523:20;21541:1;21523:20;:::i;:::-;21518:25;;21562:1;21559;21556:8;21553:34;;;21567:18;;:::i;:::-;21553:34;21612:1;21609;21605:9;21597:17;;21429:191;;;;:::o;21626:96::-;21663:7;21692:24;21710:5;21692:24;:::i;:::-;21681:35;;21626:96;;;:::o;21728:90::-;21762:7;21805:5;21798:13;21791:21;21780:32;;21728:90;;;:::o;21824:126::-;21861:7;21901:42;21894:5;21890:54;21879:65;;21824:126;;;:::o;21956:77::-;21993:7;22022:5;22011:16;;21956:77;;;:::o;22039:86::-;22074:7;22114:4;22107:5;22103:16;22092:27;;22039:86;;;:::o;22131:153::-;22208:9;22241:37;22272:5;22241:37;:::i;:::-;22228:50;;22131:153;;;:::o;22290:121::-;22348:9;22381:24;22399:5;22381:24;:::i;:::-;22368:37;;22290:121;;;:::o;22417:126::-;22467:9;22500:37;22531:5;22500:37;:::i;:::-;22487:50;;22417:126;;;:::o;22549:113::-;22599:9;22632:24;22650:5;22632:24;:::i;:::-;22619:37;;22549:113;;;:::o;22668:307::-;22736:1;22746:113;22760:6;22757:1;22754:13;22746:113;;;22845:1;22840:3;22836:11;22830:18;22826:1;22821:3;22817:11;22810:39;22782:2;22779:1;22775:10;22770:15;;22746:113;;;22877:6;22874:1;22871:13;22868:101;;;22957:1;22948:6;22943:3;22939:16;22932:27;22868:101;22717:258;22668:307;;;:::o;22981:320::-;23025:6;23062:1;23056:4;23052:12;23042:22;;23109:1;23103:4;23099:12;23130:18;23120:81;;23186:4;23178:6;23174:17;23164:27;;23120:81;23248:2;23240:6;23237:14;23217:18;23214:38;23211:84;;;23267:18;;:::i;:::-;23211:84;23032:269;22981:320;;;:::o;23307:180::-;23355:77;23352:1;23345:88;23452:4;23449:1;23442:15;23476:4;23473:1;23466:15;23493:180;23541:77;23538:1;23531:88;23638:4;23635:1;23628:15;23662:4;23659:1;23652:15;23679:180;23727:77;23724:1;23717:88;23824:4;23821:1;23814:15;23848:4;23845:1;23838:15;23865:180;23913:77;23910:1;23903:88;24010:4;24007:1;24000:15;24034:4;24031:1;24024:15;24051:180;24099:77;24096:1;24089:88;24196:4;24193:1;24186:15;24220:4;24217:1;24210:15;24360:117;24469:1;24466;24459:12;24483:102;24524:6;24575:2;24571:7;24566:2;24559:5;24555:14;24551:28;24541:38;;24483:102;;;:::o;24591:222::-;24731:34;24727:1;24719:6;24715:14;24708:58;24800:5;24795:2;24787:6;24783:15;24776:30;24591:222;:::o;24819:239::-;24959:34;24955:1;24947:6;24943:14;24936:58;25028:22;25023:2;25015:6;25011:15;25004:47;24819:239;:::o;25064:225::-;25204:34;25200:1;25192:6;25188:14;25181:58;25273:8;25268:2;25260:6;25256:15;25249:33;25064:225;:::o;25295:221::-;25435:34;25431:1;25423:6;25419:14;25412:58;25504:4;25499:2;25491:6;25487:15;25480:29;25295:221;:::o;25522:177::-;25662:29;25658:1;25650:6;25646:14;25639:53;25522:177;:::o;25705:227::-;25845:34;25841:1;25833:6;25829:14;25822:58;25914:10;25909:2;25901:6;25897:15;25890:35;25705:227;:::o;25938:220::-;26078:34;26074:1;26066:6;26062:14;26055:58;26147:3;26142:2;26134:6;26130:15;26123:28;25938:220;:::o;26164:182::-;26304:34;26300:1;26292:6;26288:14;26281:58;26164:182;:::o;26352:224::-;26492:34;26488:1;26480:6;26476:14;26469:58;26561:7;26556:2;26548:6;26544:15;26537:32;26352:224;:::o;26582:223::-;26722:34;26718:1;26710:6;26706:14;26699:58;26791:6;26786:2;26778:6;26774:15;26767:31;26582:223;:::o;26811:122::-;26884:24;26902:5;26884:24;:::i;:::-;26877:5;26874:35;26864:63;;26923:1;26920;26913:12;26864:63;26811:122;:::o;26939:116::-;27009:21;27024:5;27009:21;:::i;:::-;27002:5;26999:32;26989:60;;27045:1;27042;27035:12;26989:60;26939:116;:::o;27061:122::-;27134:24;27152:5;27134:24;:::i;:::-;27127:5;27124:35;27114:63;;27173:1;27170;27163:12;27114:63;27061:122;:::o

Swarm Source

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