ETH Price: $3,383.89 (-1.83%)
Gas: 1 Gwei

Contract

0x5C0217E4e126d501896594bEC409898A9AFc5970
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Frens (FRENS) (@$0.00)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve201661532024-06-25 3:56:353 days ago1719287795IN
Frens: FRENS Token
0 ETH0.000211214.47915665
Approve201520602024-06-23 4:37:355 days ago1719117455IN
Frens: FRENS Token
0 ETH0.000086851.84193447
Approve200597352024-06-10 6:47:1118 days ago1718002031IN
Frens: FRENS Token
0 ETH0.000241225.1484035
Approve200175112024-06-04 9:18:1124 days ago1717492691IN
Frens: FRENS Token
0 ETH0.000372617.91206573
Approve199736312024-05-29 6:08:3530 days ago1716962915IN
Frens: FRENS Token
0 ETH0.0004803810.20046404
Approve199489332024-05-25 19:19:2334 days ago1716664763IN
Frens: FRENS Token
0 ETH0.000235745.00573503
Approve198979662024-05-18 16:17:3541 days ago1716049055IN
Frens: FRENS Token
0 ETH0.0002635.58464251
Approve198391302024-05-10 10:46:4749 days ago1715338007IN
Frens: FRENS Token
0 ETH0.000397158.43321991
Transfer198249572024-05-08 11:10:3551 days ago1715166635IN
Frens: FRENS Token
0 ETH0.000501146.52315969
Approve198242182024-05-08 8:41:3551 days ago1715157695IN
Frens: FRENS Token
0 ETH0.000141834.72892179
Approve198241682024-05-08 8:31:3551 days ago1715157095IN
Frens: FRENS Token
0 ETH0.00011564.30996173
Approve198241672024-05-08 8:31:2351 days ago1715157083IN
Frens: FRENS Token
0 ETH0.000205874.40633264
Approve198241212024-05-08 8:22:1151 days ago1715156531IN
Frens: FRENS Token
0 ETH0.00014325.34165662
Approve198109132024-05-06 12:02:1153 days ago1714996931IN
Frens: FRENS Token
0 ETH0.000266155.64435104
Approve198103212024-05-06 10:03:1153 days ago1714989791IN
Frens: FRENS Token
0 ETH0.000369177.82910548
Approve198016922024-05-05 5:05:2354 days ago1714885523IN
Frens: FRENS Token
0 ETH0.000254615.39961143
Approve198009002024-05-05 2:25:1154 days ago1714875911IN
Frens: FRENS Token
0 ETH0.000250915.32796579
Approve197948162024-05-04 6:01:1155 days ago1714802471IN
Frens: FRENS Token
0 ETH0.000274015.8110821
Approve197662992024-04-30 6:20:4759 days ago1714458047IN
Frens: FRENS Token
0 ETH0.000366397.77024483
Approve197324092024-04-25 12:33:5964 days ago1714048439IN
Frens: FRENS Token
0 ETH0.000673314.29706411
Approve196579682024-04-15 2:34:3574 days ago1713148475IN
Frens: FRENS Token
0 ETH0.000408448.71730829
Approve196378212024-04-12 6:45:2377 days ago1712904323IN
Frens: FRENS Token
0 ETH0.0005743612.19608381
Approve196376612024-04-12 6:13:2377 days ago1712902403IN
Frens: FRENS Token
0 ETH0.0005555511.7816109
Approve196342102024-04-11 18:37:3578 days ago1712860655IN
Frens: FRENS Token
0 ETH0.0009402619.96570971
Approve196277302024-04-10 20:51:2379 days ago1712782283IN
Frens: FRENS Token
0 ETH0.0009526620.20325752
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
201661602024-06-25 3:57:593 days ago1719287879
Frens: FRENS Token
0.00047266 ETH
201661602024-06-25 3:57:593 days ago1719287879
Frens: FRENS Token
0.00236333 ETH
201661602024-06-25 3:57:593 days ago1719287879
Frens: FRENS Token
0.002836 ETH
201520642024-06-23 4:38:235 days ago1719117503
Frens: FRENS Token
0.00047406 ETH
201520642024-06-23 4:38:235 days ago1719117503
Frens: FRENS Token
0.0023703 ETH
201520642024-06-23 4:38:235 days ago1719117503
Frens: FRENS Token
0.00284436 ETH
200597452024-06-10 6:49:1118 days ago1718002151
Frens: FRENS Token
0.00047593 ETH
200597452024-06-10 6:49:1118 days ago1718002151
Frens: FRENS Token
0.00237966 ETH
200597452024-06-10 6:49:1118 days ago1718002151
Frens: FRENS Token
0.00285559 ETH
200175132024-06-04 9:18:3524 days ago1717492715
Frens: FRENS Token
0.00051463 ETH
200175132024-06-04 9:18:3524 days ago1717492715
Frens: FRENS Token
0.00257316 ETH
200175132024-06-04 9:18:3524 days ago1717492715
Frens: FRENS Token
0.00308779 ETH
200003862024-06-01 23:54:1127 days ago1717286051
Frens: FRENS Token
0.00051664 ETH
200003862024-06-01 23:54:1127 days ago1717286051
Frens: FRENS Token
0.00258324 ETH
200003862024-06-01 23:54:1127 days ago1717286051
Frens: FRENS Token
0.00309989 ETH
199736322024-05-29 6:08:4730 days ago1716962927
Frens: FRENS Token
0.00051907 ETH
199736322024-05-29 6:08:4730 days ago1716962927
Frens: FRENS Token
0.00259538 ETH
199736322024-05-29 6:08:4730 days ago1716962927
Frens: FRENS Token
0.00311446 ETH
199489362024-05-25 19:19:5934 days ago1716664799
Frens: FRENS Token
0.00052004 ETH
199489362024-05-25 19:19:5934 days ago1716664799
Frens: FRENS Token
0.00260022 ETH
199489362024-05-25 19:19:5934 days ago1716664799
Frens: FRENS Token
0.00312027 ETH
199309022024-05-23 6:50:2336 days ago1716447023
Frens: FRENS Token
0.00053554 ETH
199309022024-05-23 6:50:2336 days ago1716447023
Frens: FRENS Token
0.0026777 ETH
199309022024-05-23 6:50:2336 days ago1716447023
Frens: FRENS Token
0.00321324 ETH
199280082024-05-22 21:08:5937 days ago1716412139
Frens: FRENS Token
0.00055173 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Frens

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 2 : Frens.sol
/**
 *Submitted for verification at Etherscan.io on 2023-03-16
*/

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.9.0;

import "./SafeMath.sol";

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IFactoryV2 {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
}

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    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 swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    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 IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

contract Frens is IERC20 {
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromFees;
   
    uint256 constant private startingSupply = 1_000_000_000_000;
    string constant private _name = "Frens";
    string constant private _symbol = "FRENS";
    uint8 constant private _decimals = 18;

    uint256 constant private _tTotal = startingSupply * 10**_decimals;

    uint256 public tradingEnabledAt;
    using SafeMath for uint256;
    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
    }

    struct Ratios {
        uint16 marketing;
        uint16 liquidity;
        uint16 totalSwap;
    }

    Fees public _taxRates = Fees({
        buyFee: 500,
        sellFee: 500,
        transferFee: 0
        });
		
    Ratios public _ratios = Ratios({
        marketing: 900,
        liquidity: 100,
        totalSwap: 1000
        });

    uint256 constant public maxBuyTaxes = 500;
    uint256 constant public maxSellTaxes = 500;
    uint256 constant public maxTransferTaxes = 0;
    uint256 constant public maxRoundtripTax = 1000;
    uint256 constant masterTaxDivisor = 10000;

    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
       address payable marketing;
       address payable liquidity;
    }
	
    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0xD03d9377b9F888A6274f5383110850Dcf08Fabb6),
        liquidity: payable(0x7CD97D9906BF4E2cECa46fbd4317993D46f854d8)
    });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent;
    
    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Caller =/= owner.");
        _;
    }

    modifier onlyAdmin() {
        require(_admin == msg.sender, "Caller =/= admin.");
        _;
    }

    constructor () payable {
        // Set the owner.
        _owner = msg.sender;
        _admin = msg.sender;
        _tOwned[_owner] = _tTotal;
        emit Transfer(address(0), _owner, _tTotal);
        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3 || block.chainid == 5) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            //Ropstein DAI 0xaD6D458402F60fD3Bd25163575031ACDce07538D
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else if (block.chainid == 250) {
            dexRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } else {
            revert();
        }

        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;

        _approve(_owner, address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);

        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[_owner] = true;

        _isExcludedFromFees[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true; // PinkLock
        _isExcludedFromFees[0x663A5C229c09b049E36dCc11a9B0d4a8Eb9db214] = true; // Unicrypt (ETH)
        _isExcludedFromFees[0xDba68f07d1b7Ca219f78ae8582C213d975c25cAf] = true; // Unicrypt (ETH)
    }
	
    address private _owner;
    address private _admin;

    function transferOwner(address newOwner) external onlyOwner {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
		
		_isExcludedFromFees[_owner] = false;
		_isExcludedFromFees[newOwner] = true;
        
        if(balanceOf(_owner) > 0) {
            _finalizeTransfer(_owner, newOwner, balanceOf(_owner), false, false, true);
        }
        
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
        
    }

    function renounceOwnership() external onlyOwner {
		_isExcludedFromFees[_owner] = false;
        address oldOwner = _owner;
        _owner = address(0);
        emit OwnershipTransferred(oldOwner, address(0));
    }
	
    receive() external payable {}
    function totalSupply() external pure override returns (uint256) { return _tTotal; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return _owner; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

        _allowances[sender][spender] = amount;
        emit Approval(sender, spender, amount);
    }

    function approveContractContingency() public onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

    function setNewRouter(address newRouter) public onlyOwner {
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "3 Day cooldown.!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
        }
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyAdmin {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        require(buyFee + sellFee <= maxRoundtripTax, "Cannot exceed roundtrip maximum.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setRatios(uint16 marketing, uint16 liquidity) external onlyAdmin {
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.totalSwap = liquidity + marketing;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(_ratios.totalSwap <= total, "Cannot exceed sum of buy and sell fees.");
    }

    function setWallets(address payable marketing, address payable liquidity) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
        _taxWallets.liquidity = payable(liquidity);
    }

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

	function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyAdmin {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        require(swapThreshold <= swapAmount, "Threshold cannot be above amount.");
        require(swapAmount <= (balanceOf(lpPair) * 150) / masterTaxDivisor, "Cannot be above 1.5% of current PI.");
        require(swapAmount >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
        require(swapThreshold >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
    }

    function setPriceImpactSwapAmount(uint256 priceImpactSwapPercent) external onlyAdmin {
        require(priceImpactSwapPercent <= 200, "Cannot set above 2%.");
        piSwapPercent = priceImpactSwapPercent;
    }

    function setContractSwapEnabled(bool swapEnabled, bool priceImpactSwapEnabled) external onlyAdmin {
        contractSwapEnabled = swapEnabled;
        piContractSwapsEnabled = priceImpactSwapEnabled;
        emit ContractSwapEnabledUpdated(swapEnabled);
    }

    function _hasLimits(address from, address to) internal view returns (bool) {
        return from != _owner
            && to != _owner
            && from != _admin
            && to != _admin
            && tx.origin != _admin
            && tx.origin != _owner
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
		
        tradingEnabled = true;
        tradingEnabledAt = block.timestamp;
        swapThreshold = (balanceOf(lpPair) * 15) / 10000;
        swapAmount = (balanceOf(lpPair) * 30) / 10000;
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool buy = false;
        bool sell = false;
        bool other = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            other = true;
        }
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
        }
        if (sell) {
            if (!inSwap) {
                if (contractSwapEnabled) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        uint256 swapAmt = swapAmount;
                        if (piContractSwapsEnabled) { swapAmt = (balanceOf(lpPair) * piSwapPercent) / masterTaxDivisor; }
                        if (contractTokenBalance >= swapAmt) { contractTokenBalance = swapAmt; }
                        contractSwap(contractTokenBalance);
                    }
                }
            }
        }
        return _finalizeTransfer(from, to, amount, buy, sell, other);
    }

    function contractSwap(uint256 contractTokenBalance) internal lockTheSwap {
        Ratios memory ratios = _ratios;
        if (ratios.totalSwap == 0) {
            return;
        }

        if(_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        try dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            contractTokenBalance,
            0,
            path,
            address(this),
            block.timestamp
        ) {} catch {
            return;
        }

        uint256 amtBalance = address(this).balance;
        bool success;
        uint256 liquidityBalance = (amtBalance * ratios.liquidity) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - liquidityBalance;
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 35000}("");
        }
        if (ratios.liquidity > 0) {
            (success,) = _taxWallets.liquidity.call{value: liquidityBalance, gas: 35000}("");
        }
    }    

    function _contractSwap(uint256 contractTokenBalance) external {
        Ratios memory ratios = _ratios;
        if (ratios.totalSwap == 0) {
            return;
        }

        if(_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            contractTokenBalance,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amtBalance = address(this).balance;
        bool success;
        uint256 liquidityBalance = (amtBalance * ratios.liquidity) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - liquidityBalance;
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 35000}("");
        }
        if (ratios.liquidity > 0) {
            (success,) = _taxWallets.liquidity.call{value: liquidityBalance, gas: 35000}("");
        }
    }

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _isExcludedFromFees[from] = true;
            _hasLiqBeenAdded = true;
			
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }
    

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(_owner).transfer(address(this).balance);
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            _finalizeTransfer(msg.sender, accounts[i], amounts[i]*10**_decimals, false, false, true);
        }
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool buy, bool sell, bool other) internal returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }
		
        bool takeFee = true;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, buy, sell, amount) : amount;
        _tOwned[to] += amountReceived;

        emit Transfer(from, to, amountReceived);
        return true;
    }
	
    function takeTaxes(address from, bool buy, bool sell, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if(block.timestamp <= tradingEnabledAt.add(60)) {
            currentFee = 9900;
        }
        else if (buy) 
		{
            currentFee = _taxRates.buyFee;
        } 
		else if (sell) 
		{
            currentFee = _taxRates.sellFee;
        } 
		else 
		{
            currentFee = _taxRates.transferFee;
        }
        
        uint256 feeAmount = amount * currentFee / masterTaxDivisor;
        uint256 swapAmt = feeAmount;

        _tOwned[address(this)] += swapAmt;
        emit Transfer(from, address(this), swapAmt);

        return amount - feeAmount;
    }
}

File 2 of 2 : SafeMath.sol
pragma solidity 0.8.20;

// SPDX-License-Identifier: MIT

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) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/OpenZeppelin-contracts/pull/522
        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;
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"contractTokenBalance","type":"uint256"}],"name":"_contractSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"liquidity","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRoundtripTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"piContractSwapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"liquidity","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabledAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040525f60025560405180606001604052806101f461ffff1681526020016101f461ffff1681526020015f61ffff1681525060075f820151815f015f6101000a81548161ffff021916908361ffff1602179055506020820151815f0160026101000a81548161ffff021916908361ffff1602179055506040820151815f0160046101000a81548161ffff021916908361ffff1602179055505050604051806060016040528061038461ffff168152602001606461ffff1681526020016103e861ffff1681525060085f820151815f015f6101000a81548161ffff021916908361ffff1602179055506020820151815f0160026101000a81548161ffff021916908361ffff1602179055506040820151815f0160046101000a81548161ffff021916908361ffff1602179055505050604051806040016040528073d03d9377b9f888a6274f5383110850dcf08fabb673ffffffffffffffffffffffffffffffffffffffff168152602001737cd97d9906bf4e2ceca46fbd4317993d46f854d873ffffffffffffffffffffffffffffffffffffffff16815250600b5f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505f600d60016101000a81548160ff0219169083151502179055505f60125f6101000a81548160ff0219169083151502179055505f601260016101000a81548160ff02191690831515021790555033601260026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a62000304919062000f95565b64e8d4a5100062000316919062000fe5565b5f80601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012600a620003f9919062000f95565b64e8d4a510006200040b919062000fe5565b6040516200041a919062001040565b60405180910390a36038460362000485577310ed43c718714eb63d5aa57b78b54704e256024e60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200063f565b60614603620004e85773d99d1c33f9fc3444f8101754abc46c52416550d160095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200063e565b6001461480620004f85750600446145b80620005045750600346145b80620005105750600546145b156200057057737a250d5630b4cf539739df2c5dacb4c659f2488d60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200063d565b61a86a4603620005d4577360ae616a2155ee3d9a68541ba4544862310933d460095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200063c565b60fa4603620006375773f491e7b69e4244ad4002bc14e878a34207e38c2960095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200063b565b5f80fd5b5b5b5b5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006aa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620006d09190620010c0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000756573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200077c9190620010c0565b306040518363ffffffff1660e01b81526004016200079c92919062001101565b6020604051808303815f875af1158015620007b9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620007df9190620010c0565b600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001805f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555062000909601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000c3860201b60201c565b6200095d3060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000c3860201b60201c565b600160055f601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160045f601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f73407993575c91ce7643a4d4ccacc9a98c36ee1bbe73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f73663a5c229c09b049e36dcc11a9b0d4a8eb9db21473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f73dba68f07d1b7ca219f78ae8582c213d975c25caf73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620011aa565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000ca9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ca0906200118a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000d1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d11906200118a565b60405180910390fd5b8060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000df6919062001040565b60405180910390a3505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000e8d5780860481111562000e655762000e6462000e03565b5b600185161562000e755780820291505b808102905062000e858562000e30565b945062000e45565b94509492505050565b5f8262000ea7576001905062000f79565b8162000eb6575f905062000f79565b816001811462000ecf576002811462000eda5762000f10565b600191505062000f79565b60ff84111562000eef5762000eee62000e03565b5b8360020a91508482111562000f095762000f0862000e03565b5b5062000f79565b5060208310610133831016604e8410600b841016171562000f4a5782820a90508381111562000f445762000f4362000e03565b5b62000f79565b62000f59848484600162000e3c565b9250905081840481111562000f735762000f7262000e03565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f62000fa18262000f80565b915062000fae8362000f89565b925062000fdd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000e96565b905092915050565b5f62000ff18262000f80565b915062000ffe8362000f80565b92508282026200100e8162000f80565b9150828204841483151762001028576200102762000e03565b5b5092915050565b6200103a8162000f80565b82525050565b5f602082019050620010555f8301846200102f565b92915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200108a826200105f565b9050919050565b6200109c816200107e565b8114620010a7575f80fd5b50565b5f81519050620010ba8162001091565b92915050565b5f60208284031215620010d857620010d76200105b565b5b5f620010e784828501620010aa565b91505092915050565b620010fb816200107e565b82525050565b5f604082019050620011165f830185620010f0565b620011256020830184620010f0565b9392505050565b5f82825260208201905092915050565b7f45524332303a205a65726f2041646472657373000000000000000000000000005f82015250565b5f620011726013836200112c565b91506200117f826200113c565b602082019050919050565b5f6020820190508181035f830152620011a38162001164565b9050919050565b615c8680620011b85f395ff3fe608060405260043610610275575f3560e01c8063649204801161014e578063b7df8b36116100c0578063dd62ed3e11610079578063dd62ed3e14610908578063eafb5a3c14610944578063ee5d9c2d1461096c578063f94aa1b414610982578063fb78680d146109ad578063fdb78c0e146109d55761027c565b8063b7df8b3614610810578063bcd96a251461083a578063bfc2fc3514610862578063c31fe80a1461088a578063cf847706146108b4578063d3f6a157146108e05761027c565b80638a63bd9b116101125780638a63bd9b146107165780638a8c523c1461074057806395d89b4114610756578063a9059cbb14610780578063b1b08f71146107bc578063b3d514fb146107e65761027c565b8063649204801461064a57806370a0823114610672578063715018a6146106ae57806380c581d1146106c4578063893d20e8146106ec5761027c565b80632e8fa821116101e75780634ada218b116101ab5780634ada218b146105425780634e718e481461056c5780634fb2e45d146105945780634fbee193146105bc57806350a8e016146105f8578063590ffdce146106225761027c565b80632e8fa82114610472578063313ce5671461049c57806332cde664146104c6578063452ed4f1146104ee57806346ea7ac8146105185761027c565b8063095ea7b311610239578063095ea7b31461035457806318160ddd1461039057806323b872dd146103ba5780632610eaca146103f6578063285777511461041e5780632b28fc7a146104485761027c565b806303fd2a45146102805780630445b667146102aa578063069d955f146102d457806306fdde03146103005780630758d9241461032a5761027c565b3661027c57005b5f80fd5b34801561028b575f80fd5b506102946109ff565b6040516102a191906143cb565b60405180910390f35b3480156102b5575f80fd5b506102be610a05565b6040516102cb91906143fc565b60405180910390f35b3480156102df575f80fd5b506102e8610a0b565b6040516102f793929190614431565b60405180910390f35b34801561030b575f80fd5b50610314610a49565b60405161032191906144f0565b60405180910390f35b348015610335575f80fd5b5061033e610a86565b60405161034b919061456b565b60405180910390f35b34801561035f575f80fd5b5061037a600480360381019061037591906145e9565b610aab565b6040516103879190614641565b60405180910390f35b34801561039b575f80fd5b506103a4610ac1565b6040516103b191906143fc565b60405180910390f35b3480156103c5575f80fd5b506103e060048036038101906103db919061465a565b610ae5565b6040516103ed9190614641565b60405180910390f35b348015610401575f80fd5b5061041c600480360381019061041791906148aa565b610c28565b005b348015610429575f80fd5b50610432610db5565b60405161043f91906143fc565b60405180910390f35b348015610453575f80fd5b5061045c610dbb565b60405161046991906143fc565b60405180910390f35b34801561047d575f80fd5b50610486610dc1565b60405161049391906143fc565b60405180910390f35b3480156104a7575f80fd5b506104b0610dc7565b6040516104bd919061493b565b60405180910390f35b3480156104d1575f80fd5b506104ec60048036038101906104e7919061497e565b610dcf565b005b3480156104f9575f80fd5b50610502610f7e565b60405161050f91906143cb565b60405180910390f35b348015610523575f80fd5b5061052c610fa3565b60405161053991906143fc565b60405180910390f35b34801561054d575f80fd5b50610556610fa9565b6040516105639190614641565b60405180910390f35b348015610577575f80fd5b50610592600480360381019061058d91906149ce565b610fbb565b005b34801561059f575f80fd5b506105ba60048036038101906105b591906149f9565b611098565b005b3480156105c7575f80fd5b506105e260048036038101906105dd91906149f9565b611425565b6040516105ef9190614641565b60405180910390f35b348015610603575f80fd5b5061060c611477565b6040516106199190614641565b60405180910390f35b34801561062d575f80fd5b5061064860048036038101906106439190614a4e565b61148a565b005b348015610655575f80fd5b50610670600480360381019061066b91906149ce565b611572565b005b34801561067d575f80fd5b50610698600480360381019061069391906149f9565b611b04565b6040516106a591906143fc565b60405180910390f35b3480156106b9575f80fd5b506106c2611b49565b005b3480156106cf575f80fd5b506106ea60048036038101906106e59190614a4e565b611d13565b005b3480156106f7575f80fd5b50610700611ec3565b60405161070d91906143cb565b60405180910390f35b348015610721575f80fd5b5061072a611eec565b6040516107379190614641565b60405180910390f35b34801561074b575f80fd5b50610754611fd0565b005b348015610761575f80fd5b5061076a6121b3565b60405161077791906144f0565b60405180910390f35b34801561078b575f80fd5b506107a660048036038101906107a191906145e9565b6121f0565b6040516107b39190614641565b60405180910390f35b3480156107c7575f80fd5b506107d0612207565b6040516107dd91906143fc565b60405180910390f35b3480156107f1575f80fd5b506107fa61220b565b60405161080791906143fc565b60405180910390f35b34801561081b575f80fd5b50610824612211565b6040516108319190614641565b60405180910390f35b348015610845575f80fd5b50610860600480360381019061085b9190614a8c565b612223565b005b34801561086d575f80fd5b5061088860048036038101906108839190614aca565b6123ad565b005b348015610895575f80fd5b5061089e6124aa565b6040516108ab91906143fc565b60405180910390f35b3480156108bf575f80fd5b506108c86124b0565b6040516108d793929190614431565b60405180910390f35b3480156108eb575f80fd5b5061090660048036038101906109019190614b43565b6124ee565b005b348015610913575f80fd5b5061092e60048036038101906109299190614b81565b612607565b60405161093b91906143fc565b60405180910390f35b34801561094f575f80fd5b5061096a600480360381019061096591906149f9565b612689565b005b348015610977575f80fd5b50610980612b0e565b005b34801561098d575f80fd5b50610996612c56565b6040516109a4929190614bce565b60405180910390f35b3480156109b8575f80fd5b506109d360048036038101906109ce9190614bf5565b612ca5565b005b3480156109e0575f80fd5b506109e9612f5c565b6040516109f69190614641565b60405180910390f35b61dead81565b600e5481565b6007805f015f9054906101000a900461ffff1690805f0160029054906101000a900461ffff1690805f0160049054906101000a900461ffff16905083565b60606040518060400160405280600581526020017f4672656e73000000000000000000000000000000000000000000000000000000815250905090565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f610ab7338484612f6f565b6001905092915050565b5f6012600a610ad09190614db5565b64e8d4a51000610ae09190614dff565b905090565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414610c14578160035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c0c9190614e40565b925050819055505b610c1f848484613132565b90509392505050565b3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caf90614ebd565b60405180910390fd5b8051825114610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390614f25565b60405180910390fd5b5f5b82518160ff161015610db057818160ff1681518110610d2057610d1f614f43565b5b6020026020010151610d3133611b04565b1015610d3b575f80fd5b610d9c33848360ff1681518110610d5557610d54614f43565b5b60200260200101516012600a610d6b9190614db5565b858560ff1681518110610d8157610d80614f43565b5b6020026020010151610d939190614dff565b5f806001613440565b508080610da890614f70565b915050610cfe565b505050565b60115481565b6101f481565b600f5481565b5f6012905090565b3373ffffffffffffffffffffffffffffffffffffffff1660135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5590614fe2565b60405180910390fd5b6101f48361ffff1611158015610e7a57506101f48261ffff1611155b8015610e8a57505f8161ffff1611155b610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec09061504a565b60405180910390fd5b6103e88284610ed89190615068565b61ffff161115610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f14906150e7565b60405180910390fd5b8260075f015f6101000a81548161ffff021916908361ffff1602179055508160075f0160026101000a81548161ffff021916908361ffff1602179055508060075f0160046101000a81548161ffff021916908361ffff160217905550505050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6103e881565b60125f9054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff1660135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461104a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104190614fe2565b60405180910390fd5b60c881111561108e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110859061514f565b60405180910390fd5b8060118190555050565b3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111f90614ebd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d906151dd565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd906151dd565b60405180910390fd5b5f60055f601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f6112fd601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b04565b11156113605761135e601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611355601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b04565b5f806001613440565b505b5f601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081601260026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b601260019054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151190614ebd565b60405180910390fd5b8060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60086040518060600160405290815f82015f9054906101000a900461ffff1661ffff1661ffff1681526020015f820160029054906101000a900461ffff1661ffff1661ffff1681526020015f820160049054906101000a900461ffff1661ffff1661ffff168152505090505f816040015161ffff16036115f35750611b01565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414611772577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5f600267ffffffffffffffff81111561178e5761178d6146ae565b5b6040519080825280602002602001820160405280156117bc5781602001602082028036833780820191505090505b50905030815f815181106117d3576117d2614f43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611877573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061189b919061520f565b816001815181106118af576118ae614f43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b815260040161194b95949392919061532a565b5f604051808303815f87803b158015611962575f80fd5b505af1158015611974573d5f803e3d5ffd5b505050505f4790505f80846040015161ffff16856020015161ffff168461199b9190614dff565b6119a591906153af565b90505f81846119b49190614e40565b90505f865f015161ffff161115611a5757600b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816188b890604051611a109061540c565b5f60405180830381858888f193505050503d805f8114611a4b576040519150601f19603f3d011682016040523d82523d5f602084013e611a50565b606091505b5050809350505b5f866020015161ffff161115611afa57600b6001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826188b890604051611ab39061540c565b5f60405180830381858888f193505050503d805f8114611aee576040519150601f19603f3d011682016040523d82523d5f602084013e611af3565b606091505b5050809350505b5050505050505b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd090614ebd565b60405180910390fd5b5f60055f601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f601260026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9a90614ebd565b60405180910390fd5b5f151581151503611e07575f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611ebf565b5f60025414611e63576203f48060025442611e229190614e40565b11611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e599061546a565b60405180910390fd5b5b6001805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550426002819055505b5050565b5f601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490614ebd565b60405180910390fd5b611fc93060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612f6f565b6001905090565b3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205790614ebd565b60405180910390fd5b60125f9054906101000a900460ff16156120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a6906154d2565b60405180910390fd5b601260019054906101000a900460ff166120fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f59061553a565b60405180910390fd5b600160125f6101000a81548160ff02191690831515021790555042600681905550612710600f61214e600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b04565b6121589190614dff565b61216291906153af565b600e81905550612710601e612197600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b04565b6121a19190614dff565b6121ab91906153af565b600f81905550565b60606040518060400160405280600581526020017f4652454e53000000000000000000000000000000000000000000000000000000815250905090565b5f6121fc338484613132565b506001905092915050565b5f81565b6101f481565b60105f9054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff1660135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a990614fe2565b60405180910390fd5b8060085f0160026101000a81548161ffff021916908361ffff1602179055508160085f015f6101000a81548161ffff021916908361ffff16021790555081816122fb9190615068565b60085f0160046101000a81548161ffff021916908361ffff1602179055505f60075f0160029054906101000a900461ffff1660075f015f9054906101000a900461ffff166123499190615068565b61ffff1690508060085f0160049054906101000a900461ffff1661ffff1611156123a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239f906155c8565b60405180910390fd5b505050565b3373ffffffffffffffffffffffffffffffffffffffff1660135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461243c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243390614fe2565b60405180910390fd5b81600d60016101000a81548160ff0219169083151502179055508060105f6101000a81548160ff0219169083151502179055507f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532578260405161249e9190614641565b60405180910390a15050565b60065481565b6008805f015f9054906101000a900461ffff1690805f0160029054906101000a900461ffff1690805f0160049054906101000a900461ffff16905083565b3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461257e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257590614ebd565b60405180910390fd5b81600b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b6001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271090614ebd565b60405180910390fd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612767573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278b919061520f565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612814919061520f565b6040518363ffffffff1660e01b81526004016128319291906155e6565b602060405180830381865afa15801561284c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612870919061520f565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a3c578173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128ee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612912919061520f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612977573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061299b919061520f565b6040518363ffffffff1660e01b81526004016129b89291906155e6565b6020604051808303815f875af11580156129d4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129f8919061520f565b600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612a7d565b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8160095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612b093060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612f6f565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9590614ebd565b60405180910390fd5b601260019054906101000a900460ff1615612bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be590615657565b60405180910390fd5b601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015612c53573d5f803e3d5ffd5b50565b600b805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b3373ffffffffffffffffffffffffffffffffffffffff1660135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2b90614fe2565b60405180910390fd5b82846012600a612d449190614db5565b64e8d4a51000612d549190614dff565b612d5e9190614dff565b612d6891906153af565b600e8190555080826012600a612d7e9190614db5565b64e8d4a51000612d8e9190614dff565b612d989190614dff565b612da291906153af565b600f81905550600f54600e541115612def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de6906156e5565b60405180910390fd5b6127106096612e1e600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b04565b612e289190614dff565b612e3291906153af565b600f541115612e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6d90615773565b60405180910390fd5b620f42406012600a612e889190614db5565b64e8d4a51000612e989190614dff565b612ea291906153af565b600f541015612ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612edd90615801565b60405180910390fd5b620f42406012600a612ef89190614db5565b64e8d4a51000612f089190614dff565b612f1291906153af565b600e541015612f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4d90615801565b60405180910390fd5b50505050565b600d60019054906101000a900460ff1681565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd490615869565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361304b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304290615869565b60405180910390fd5b8060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161312591906143fc565b60405180910390a3505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036131a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613198906158f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361320f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320690615985565b60405180910390fd5b5f8211613251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324890615a13565b60405180910390fd5b5f805f60015f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156132ac576001925061330a565b60015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156133045760019150613309565b600190505b5b61331487876136aa565b156133685760125f9054906101000a900460ff16613367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335e90615a7b565b60405180910390fd5b5b811561342657600d5f9054906101000a900460ff1661342557600d60019054906101000a900460ff1615613424575f6133a030611b04565b9050600e548110613422575f600f54905060105f9054906101000a900460ff161561340c576127106011546133f5600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b04565b6133ff9190614dff565b61340991906153af565b90505b808210613417578091505b61342082613a14565b505b505b5b5b613434878787868686613440565b93505050509392505050565b5f601260019054906101000a900460ff166134cd5761345f8787613fdf565b601260019054906101000a900460ff16158015613482575061348187876136aa565b5b801561348c575081155b156134cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c390615b09565b60405180910390fd5b5b5f6001905060055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061356d575060055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613576575f90505b855f808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546135c19190614e40565b925050819055505f816135d457866135e1565b6135e08987878a6141b4565b5b9050805f808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461362e9190615b27565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161369291906143fc565b60405180910390a36001925050509695505050505050565b5f601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156137575750601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156137b0575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015613809575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613862575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b80156138bc5750601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b801561390f575060045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613962575060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561399c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156139d457505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613a0c57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b6001600d5f6101000a81548160ff0219169083151502179055505f60086040518060600160405290815f82015f9054906101000a900461ffff1661ffff1661ffff1681526020015f820160029054906101000a900461ffff1661ffff1661ffff1681526020015f820160049054906101000a900461ffff1661ffff1661ffff168152505090505f816040015161ffff1603613aaf5750613fc3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414613c2e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5f600267ffffffffffffffff811115613c4a57613c496146ae565b5b604051908082528060200260200182016040528015613c785781602001602082028036833780820191505090505b50905030815f81518110613c8f57613c8e614f43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d33573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d57919061520f565b81600181518110613d6b57613d6a614f43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b8152600401613e0795949392919061532a565b5f604051808303815f87803b158015613e1e575f80fd5b505af1925050508015613e2f575060015b613e3a575050613fc3565b5f4790505f80846040015161ffff16856020015161ffff1684613e5d9190614dff565b613e6791906153af565b90505f8184613e769190614e40565b90505f865f015161ffff161115613f1957600b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816188b890604051613ed29061540c565b5f60405180830381858888f193505050503d805f8114613f0d576040519150601f19603f3d011682016040523d82523d5f602084013e613f12565b606091505b5050809350505b5f866020015161ffff161115613fbc57600b6001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826188b890604051613f759061540c565b5f60405180830381858888f193505050503d805f8114613fb0576040519150601f19603f3d011682016040523d82523d5f602084013e613fb5565b606091505b5050809350505b5050505050505b5f600d5f6101000a81548160ff02191690831515021790555050565b601260019054906101000a900460ff161561402f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161402690615bca565b60405180910390fd5b61403982826136aa565b1580156140925750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156141b057600160045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001601260016101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff0219169083151502179055507f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325760016040516141a79190614641565b60405180910390a15b5050565b5f806141cc603c60065461432f90919063ffffffff16565b42116141dc576126ac905061423f565b84156141ff5760075f015f9054906101000a900461ffff1661ffff16905061423e565b83156142235760075f0160029054906101000a900461ffff1661ffff16905061423d565b60075f0160049054906101000a900461ffff1661ffff1690505b5b5b5f612710828561424f9190614dff565b61425991906153af565b90505f819050805f803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546142aa9190615b27565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161430e91906143fc565b60405180910390a381856143229190614e40565b9350505050949350505050565b5f80828461433d9190615b27565b905083811015614382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161437990615c32565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6143b58261438c565b9050919050565b6143c5816143ab565b82525050565b5f6020820190506143de5f8301846143bc565b92915050565b5f819050919050565b6143f6816143e4565b82525050565b5f60208201905061440f5f8301846143ed565b92915050565b5f61ffff82169050919050565b61442b81614415565b82525050565b5f6060820190506144445f830186614422565b6144516020830185614422565b61445e6040830184614422565b949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561449d578082015181840152602081019050614482565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6144c282614466565b6144cc8185614470565b93506144dc818560208601614480565b6144e5816144a8565b840191505092915050565b5f6020820190508181035f83015261450881846144b8565b905092915050565b5f819050919050565b5f61453361452e6145298461438c565b614510565b61438c565b9050919050565b5f61454482614519565b9050919050565b5f6145558261453a565b9050919050565b6145658161454b565b82525050565b5f60208201905061457e5f83018461455c565b92915050565b5f604051905090565b5f80fd5b5f80fd5b61459e816143ab565b81146145a8575f80fd5b50565b5f813590506145b981614595565b92915050565b6145c8816143e4565b81146145d2575f80fd5b50565b5f813590506145e3816145bf565b92915050565b5f80604083850312156145ff576145fe61458d565b5b5f61460c858286016145ab565b925050602061461d858286016145d5565b9150509250929050565b5f8115159050919050565b61463b81614627565b82525050565b5f6020820190506146545f830184614632565b92915050565b5f805f606084860312156146715761467061458d565b5b5f61467e868287016145ab565b935050602061468f868287016145ab565b92505060406146a0868287016145d5565b9150509250925092565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6146e4826144a8565b810181811067ffffffffffffffff82111715614703576147026146ae565b5b80604052505050565b5f614715614584565b905061472182826146db565b919050565b5f67ffffffffffffffff8211156147405761473f6146ae565b5b602082029050602081019050919050565b5f80fd5b5f61476761476284614726565b61470c565b9050808382526020820190506020840283018581111561478a57614789614751565b5b835b818110156147b3578061479f88826145ab565b84526020840193505060208101905061478c565b5050509392505050565b5f82601f8301126147d1576147d06146aa565b5b81356147e1848260208601614755565b91505092915050565b5f67ffffffffffffffff821115614804576148036146ae565b5b602082029050602081019050919050565b5f614827614822846147ea565b61470c565b9050808382526020820190506020840283018581111561484a57614849614751565b5b835b81811015614873578061485f88826145d5565b84526020840193505060208101905061484c565b5050509392505050565b5f82601f830112614891576148906146aa565b5b81356148a1848260208601614815565b91505092915050565b5f80604083850312156148c0576148bf61458d565b5b5f83013567ffffffffffffffff8111156148dd576148dc614591565b5b6148e9858286016147bd565b925050602083013567ffffffffffffffff81111561490a57614909614591565b5b6149168582860161487d565b9150509250929050565b5f60ff82169050919050565b61493581614920565b82525050565b5f60208201905061494e5f83018461492c565b92915050565b61495d81614415565b8114614967575f80fd5b50565b5f8135905061497881614954565b92915050565b5f805f606084860312156149955761499461458d565b5b5f6149a28682870161496a565b93505060206149b38682870161496a565b92505060406149c48682870161496a565b9150509250925092565b5f602082840312156149e3576149e261458d565b5b5f6149f0848285016145d5565b91505092915050565b5f60208284031215614a0e57614a0d61458d565b5b5f614a1b848285016145ab565b91505092915050565b614a2d81614627565b8114614a37575f80fd5b50565b5f81359050614a4881614a24565b92915050565b5f8060408385031215614a6457614a6361458d565b5b5f614a71858286016145ab565b9250506020614a8285828601614a3a565b9150509250929050565b5f8060408385031215614aa257614aa161458d565b5b5f614aaf8582860161496a565b9250506020614ac08582860161496a565b9150509250929050565b5f8060408385031215614ae057614adf61458d565b5b5f614aed85828601614a3a565b9250506020614afe85828601614a3a565b9150509250929050565b5f614b128261438c565b9050919050565b614b2281614b08565b8114614b2c575f80fd5b50565b5f81359050614b3d81614b19565b92915050565b5f8060408385031215614b5957614b5861458d565b5b5f614b6685828601614b2f565b9250506020614b7785828601614b2f565b9150509250929050565b5f8060408385031215614b9757614b9661458d565b5b5f614ba4858286016145ab565b9250506020614bb5858286016145ab565b9150509250929050565b614bc881614b08565b82525050565b5f604082019050614be15f830185614bbf565b614bee6020830184614bbf565b9392505050565b5f805f8060808587031215614c0d57614c0c61458d565b5b5f614c1a878288016145d5565b9450506020614c2b878288016145d5565b9350506040614c3c878288016145d5565b9250506060614c4d878288016145d5565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115614cdb57808604811115614cb757614cb6614c59565b5b6001851615614cc65780820291505b8081029050614cd485614c86565b9450614c9b565b94509492505050565b5f82614cf35760019050614dae565b81614d00575f9050614dae565b8160018114614d165760028114614d2057614d4f565b6001915050614dae565b60ff841115614d3257614d31614c59565b5b8360020a915084821115614d4957614d48614c59565b5b50614dae565b5060208310610133831016604e8410600b8410161715614d845782820a905083811115614d7f57614d7e614c59565b5b614dae565b614d918484846001614c92565b92509050818404811115614da857614da7614c59565b5b81810290505b9392505050565b5f614dbf826143e4565b9150614dca83614920565b9250614df77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614ce4565b905092915050565b5f614e09826143e4565b9150614e14836143e4565b9250828202614e22816143e4565b91508282048414831517614e3957614e38614c59565b5b5092915050565b5f614e4a826143e4565b9150614e55836143e4565b9250828203905081811115614e6d57614e6c614c59565b5b92915050565b7f43616c6c6572203d2f3d206f776e65722e0000000000000000000000000000005f82015250565b5f614ea7601183614470565b9150614eb282614e73565b602082019050919050565b5f6020820190508181035f830152614ed481614e9b565b9050919050565b7f4c656e6774687320646f206e6f74206d617463682e00000000000000000000005f82015250565b5f614f0f601583614470565b9150614f1a82614edb565b602082019050919050565b5f6020820190508181035f830152614f3c81614f03565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f614f7a82614920565b915060ff8203614f8d57614f8c614c59565b5b600182019050919050565b7f43616c6c6572203d2f3d2061646d696e2e0000000000000000000000000000005f82015250565b5f614fcc601183614470565b9150614fd782614f98565b602082019050919050565b5f6020820190508181035f830152614ff981614fc0565b9050919050565b7f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000005f82015250565b5f615034601783614470565b915061503f82615000565b602082019050919050565b5f6020820190508181035f83015261506181615028565b9050919050565b5f61507282614415565b915061507d83614415565b9250828201905061ffff81111561509757615096614c59565b5b92915050565b7f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e5f82015250565b5f6150d1602083614470565b91506150dc8261509d565b602082019050919050565b5f6020820190508181035f8301526150fe816150c5565b9050919050565b7f43616e6e6f74207365742061626f76652032252e0000000000000000000000005f82015250565b5f615139601483614470565b915061514482615105565b602082019050919050565b5f6020820190508181035f8301526151668161512d565b9050919050565b7f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e73665f8201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000602082015250565b5f6151c7603d83614470565b91506151d28261516d565b604082019050919050565b5f6020820190508181035f8301526151f4816151bb565b9050919050565b5f8151905061520981614595565b92915050565b5f602082840312156152245761522361458d565b5b5f615231848285016151fb565b91505092915050565b5f819050919050565b5f61525d6152586152538461523a565b614510565b6143e4565b9050919050565b61526d81615243565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6152a5816143ab565b82525050565b5f6152b6838361529c565b60208301905092915050565b5f602082019050919050565b5f6152d882615273565b6152e2818561527d565b93506152ed8361528d565b805f5b8381101561531d57815161530488826152ab565b975061530f836152c2565b9250506001810190506152f0565b5085935050505092915050565b5f60a08201905061533d5f8301886143ed565b61534a6020830187615264565b818103604083015261535c81866152ce565b905061536b60608301856143bc565b61537860808301846143ed565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6153b9826143e4565b91506153c4836143e4565b9250826153d4576153d3615382565b5b828204905092915050565b5f81905092915050565b50565b5f6153f75f836153df565b9150615402826153e9565b5f82019050919050565b5f615416826153ec565b9150819050919050565b7f332044617920636f6f6c646f776e2e21000000000000000000000000000000005f82015250565b5f615454601083614470565b915061545f82615420565b602082019050919050565b5f6020820190508181035f83015261548181615448565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642100000000000000005f82015250565b5f6154bc601883614470565b91506154c782615488565b602082019050919050565b5f6020820190508181035f8301526154e9816154b0565b9050919050565b7f4c6971756964697479206d7573742062652061646465642e00000000000000005f82015250565b5f615524601883614470565b915061552f826154f0565b602082019050919050565b5f6020820190508181035f83015261555181615518565b9050919050565b7f43616e6e6f74206578636565642073756d206f662062757920616e642073656c5f8201527f6c20666565732e00000000000000000000000000000000000000000000000000602082015250565b5f6155b2602783614470565b91506155bd82615558565b604082019050919050565b5f6020820190508181035f8301526155df816155a6565b9050919050565b5f6040820190506155f95f8301856143bc565b61560660208301846143bc565b9392505050565b7f43616e6e6f742063616c6c206166746572206c69717569646974792e000000005f82015250565b5f615641601c83614470565b915061564c8261560d565b602082019050919050565b5f6020820190508181035f83015261566e81615635565b9050919050565b7f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e745f8201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b5f6156cf602183614470565b91506156da82615675565b604082019050919050565b5f6020820190508181035f8301526156fc816156c3565b9050919050565b7f43616e6e6f742062652061626f766520312e3525206f662063757272656e74205f8201527f50492e0000000000000000000000000000000000000000000000000000000000602082015250565b5f61575d602383614470565b915061576882615703565b604082019050919050565b5f6020820190508181035f83015261578a81615751565b9050919050565b7f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f665f8201527f20746f74616c20737570706c792e000000000000000000000000000000000000602082015250565b5f6157eb602e83614470565b91506157f682615791565b604082019050919050565b5f6020820190508181035f830152615818816157df565b9050919050565b7f45524332303a205a65726f2041646472657373000000000000000000000000005f82015250565b5f615853601383614470565b915061585e8261581f565b602082019050919050565b5f6020820190508181035f83015261588081615847565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6158e1602583614470565b91506158ec82615887565b604082019050919050565b5f6020820190508181035f83015261590e816158d5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61596f602383614470565b915061597a82615915565b604082019050919050565b5f6020820190508181035f83015261599c81615963565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f6159fd602983614470565b9150615a08826159a3565b604082019050919050565b5f6020820190508181035f830152615a2a816159f1565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642100000000000000005f82015250565b5f615a65601883614470565b9150615a7082615a31565b602082019050919050565b5f6020820190508181035f830152615a9281615a59565b9050919050565b7f5072652d6c6971756964697479207472616e736665722070726f74656374696f5f8201527f6e2e000000000000000000000000000000000000000000000000000000000000602082015250565b5f615af3602283614470565b9150615afe82615a99565b604082019050919050565b5f6020820190508181035f830152615b2081615ae7565b9050919050565b5f615b31826143e4565b9150615b3c836143e4565b9250828201905080821115615b5457615b53614c59565b5b92915050565b7f4c697175696469747920616c726561647920616464656420616e64206d61726b5f8201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b5f615bb4602383614470565b9150615bbf82615b5a565b604082019050919050565b5f6020820190508181035f830152615be181615ba8565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f615c1c601b83614470565b9150615c2782615be8565b602082019050919050565b5f6020820190508181035f830152615c4981615c10565b905091905056fea2646970667358221220ea90dcdfb003372f5242d4cc27d70a91cb1829b595d96e5ea04c39dfa729f98864736f6c63430008140033

Deployed Bytecode

0x608060405260043610610275575f3560e01c8063649204801161014e578063b7df8b36116100c0578063dd62ed3e11610079578063dd62ed3e14610908578063eafb5a3c14610944578063ee5d9c2d1461096c578063f94aa1b414610982578063fb78680d146109ad578063fdb78c0e146109d55761027c565b8063b7df8b3614610810578063bcd96a251461083a578063bfc2fc3514610862578063c31fe80a1461088a578063cf847706146108b4578063d3f6a157146108e05761027c565b80638a63bd9b116101125780638a63bd9b146107165780638a8c523c1461074057806395d89b4114610756578063a9059cbb14610780578063b1b08f71146107bc578063b3d514fb146107e65761027c565b8063649204801461064a57806370a0823114610672578063715018a6146106ae57806380c581d1146106c4578063893d20e8146106ec5761027c565b80632e8fa821116101e75780634ada218b116101ab5780634ada218b146105425780634e718e481461056c5780634fb2e45d146105945780634fbee193146105bc57806350a8e016146105f8578063590ffdce146106225761027c565b80632e8fa82114610472578063313ce5671461049c57806332cde664146104c6578063452ed4f1146104ee57806346ea7ac8146105185761027c565b8063095ea7b311610239578063095ea7b31461035457806318160ddd1461039057806323b872dd146103ba5780632610eaca146103f6578063285777511461041e5780632b28fc7a146104485761027c565b806303fd2a45146102805780630445b667146102aa578063069d955f146102d457806306fdde03146103005780630758d9241461032a5761027c565b3661027c57005b5f80fd5b34801561028b575f80fd5b506102946109ff565b6040516102a191906143cb565b60405180910390f35b3480156102b5575f80fd5b506102be610a05565b6040516102cb91906143fc565b60405180910390f35b3480156102df575f80fd5b506102e8610a0b565b6040516102f793929190614431565b60405180910390f35b34801561030b575f80fd5b50610314610a49565b60405161032191906144f0565b60405180910390f35b348015610335575f80fd5b5061033e610a86565b60405161034b919061456b565b60405180910390f35b34801561035f575f80fd5b5061037a600480360381019061037591906145e9565b610aab565b6040516103879190614641565b60405180910390f35b34801561039b575f80fd5b506103a4610ac1565b6040516103b191906143fc565b60405180910390f35b3480156103c5575f80fd5b506103e060048036038101906103db919061465a565b610ae5565b6040516103ed9190614641565b60405180910390f35b348015610401575f80fd5b5061041c600480360381019061041791906148aa565b610c28565b005b348015610429575f80fd5b50610432610db5565b60405161043f91906143fc565b60405180910390f35b348015610453575f80fd5b5061045c610dbb565b60405161046991906143fc565b60405180910390f35b34801561047d575f80fd5b50610486610dc1565b60405161049391906143fc565b60405180910390f35b3480156104a7575f80fd5b506104b0610dc7565b6040516104bd919061493b565b60405180910390f35b3480156104d1575f80fd5b506104ec60048036038101906104e7919061497e565b610dcf565b005b3480156104f9575f80fd5b50610502610f7e565b60405161050f91906143cb565b60405180910390f35b348015610523575f80fd5b5061052c610fa3565b60405161053991906143fc565b60405180910390f35b34801561054d575f80fd5b50610556610fa9565b6040516105639190614641565b60405180910390f35b348015610577575f80fd5b50610592600480360381019061058d91906149ce565b610fbb565b005b34801561059f575f80fd5b506105ba60048036038101906105b591906149f9565b611098565b005b3480156105c7575f80fd5b506105e260048036038101906105dd91906149f9565b611425565b6040516105ef9190614641565b60405180910390f35b348015610603575f80fd5b5061060c611477565b6040516106199190614641565b60405180910390f35b34801561062d575f80fd5b5061064860048036038101906106439190614a4e565b61148a565b005b348015610655575f80fd5b50610670600480360381019061066b91906149ce565b611572565b005b34801561067d575f80fd5b50610698600480360381019061069391906149f9565b611b04565b6040516106a591906143fc565b60405180910390f35b3480156106b9575f80fd5b506106c2611b49565b005b3480156106cf575f80fd5b506106ea60048036038101906106e59190614a4e565b611d13565b005b3480156106f7575f80fd5b50610700611ec3565b60405161070d91906143cb565b60405180910390f35b348015610721575f80fd5b5061072a611eec565b6040516107379190614641565b60405180910390f35b34801561074b575f80fd5b50610754611fd0565b005b348015610761575f80fd5b5061076a6121b3565b60405161077791906144f0565b60405180910390f35b34801561078b575f80fd5b506107a660048036038101906107a191906145e9565b6121f0565b6040516107b39190614641565b60405180910390f35b3480156107c7575f80fd5b506107d0612207565b6040516107dd91906143fc565b60405180910390f35b3480156107f1575f80fd5b506107fa61220b565b60405161080791906143fc565b60405180910390f35b34801561081b575f80fd5b50610824612211565b6040516108319190614641565b60405180910390f35b348015610845575f80fd5b50610860600480360381019061085b9190614a8c565b612223565b005b34801561086d575f80fd5b5061088860048036038101906108839190614aca565b6123ad565b005b348015610895575f80fd5b5061089e6124aa565b6040516108ab91906143fc565b60405180910390f35b3480156108bf575f80fd5b506108c86124b0565b6040516108d793929190614431565b60405180910390f35b3480156108eb575f80fd5b5061090660048036038101906109019190614b43565b6124ee565b005b348015610913575f80fd5b5061092e60048036038101906109299190614b81565b612607565b60405161093b91906143fc565b60405180910390f35b34801561094f575f80fd5b5061096a600480360381019061096591906149f9565b612689565b005b348015610977575f80fd5b50610980612b0e565b005b34801561098d575f80fd5b50610996612c56565b6040516109a4929190614bce565b60405180910390f35b3480156109b8575f80fd5b506109d360048036038101906109ce9190614bf5565b612ca5565b005b3480156109e0575f80fd5b506109e9612f5c565b6040516109f69190614641565b60405180910390f35b61dead81565b600e5481565b6007805f015f9054906101000a900461ffff1690805f0160029054906101000a900461ffff1690805f0160049054906101000a900461ffff16905083565b60606040518060400160405280600581526020017f4672656e73000000000000000000000000000000000000000000000000000000815250905090565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f610ab7338484612f6f565b6001905092915050565b5f6012600a610ad09190614db5565b64e8d4a51000610ae09190614dff565b905090565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414610c14578160035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c0c9190614e40565b925050819055505b610c1f848484613132565b90509392505050565b3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caf90614ebd565b60405180910390fd5b8051825114610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390614f25565b60405180910390fd5b5f5b82518160ff161015610db057818160ff1681518110610d2057610d1f614f43565b5b6020026020010151610d3133611b04565b1015610d3b575f80fd5b610d9c33848360ff1681518110610d5557610d54614f43565b5b60200260200101516012600a610d6b9190614db5565b858560ff1681518110610d8157610d80614f43565b5b6020026020010151610d939190614dff565b5f806001613440565b508080610da890614f70565b915050610cfe565b505050565b60115481565b6101f481565b600f5481565b5f6012905090565b3373ffffffffffffffffffffffffffffffffffffffff1660135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5590614fe2565b60405180910390fd5b6101f48361ffff1611158015610e7a57506101f48261ffff1611155b8015610e8a57505f8161ffff1611155b610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec09061504a565b60405180910390fd5b6103e88284610ed89190615068565b61ffff161115610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f14906150e7565b60405180910390fd5b8260075f015f6101000a81548161ffff021916908361ffff1602179055508160075f0160026101000a81548161ffff021916908361ffff1602179055508060075f0160046101000a81548161ffff021916908361ffff160217905550505050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6103e881565b60125f9054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff1660135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461104a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104190614fe2565b60405180910390fd5b60c881111561108e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110859061514f565b60405180910390fd5b8060118190555050565b3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111f90614ebd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d906151dd565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd906151dd565b60405180910390fd5b5f60055f601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f6112fd601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b04565b11156113605761135e601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611355601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b04565b5f806001613440565b505b5f601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081601260026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b601260019054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151190614ebd565b60405180910390fd5b8060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60086040518060600160405290815f82015f9054906101000a900461ffff1661ffff1661ffff1681526020015f820160029054906101000a900461ffff1661ffff1661ffff1681526020015f820160049054906101000a900461ffff1661ffff1661ffff168152505090505f816040015161ffff16036115f35750611b01565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414611772577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5f600267ffffffffffffffff81111561178e5761178d6146ae565b5b6040519080825280602002602001820160405280156117bc5781602001602082028036833780820191505090505b50905030815f815181106117d3576117d2614f43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611877573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061189b919061520f565b816001815181106118af576118ae614f43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b815260040161194b95949392919061532a565b5f604051808303815f87803b158015611962575f80fd5b505af1158015611974573d5f803e3d5ffd5b505050505f4790505f80846040015161ffff16856020015161ffff168461199b9190614dff565b6119a591906153af565b90505f81846119b49190614e40565b90505f865f015161ffff161115611a5757600b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816188b890604051611a109061540c565b5f60405180830381858888f193505050503d805f8114611a4b576040519150601f19603f3d011682016040523d82523d5f602084013e611a50565b606091505b5050809350505b5f866020015161ffff161115611afa57600b6001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826188b890604051611ab39061540c565b5f60405180830381858888f193505050503d805f8114611aee576040519150601f19603f3d011682016040523d82523d5f602084013e611af3565b606091505b5050809350505b5050505050505b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd090614ebd565b60405180910390fd5b5f60055f601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f601260026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9a90614ebd565b60405180910390fd5b5f151581151503611e07575f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611ebf565b5f60025414611e63576203f48060025442611e229190614e40565b11611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e599061546a565b60405180910390fd5b5b6001805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550426002819055505b5050565b5f601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490614ebd565b60405180910390fd5b611fc93060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612f6f565b6001905090565b3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205790614ebd565b60405180910390fd5b60125f9054906101000a900460ff16156120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a6906154d2565b60405180910390fd5b601260019054906101000a900460ff166120fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f59061553a565b60405180910390fd5b600160125f6101000a81548160ff02191690831515021790555042600681905550612710600f61214e600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b04565b6121589190614dff565b61216291906153af565b600e81905550612710601e612197600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b04565b6121a19190614dff565b6121ab91906153af565b600f81905550565b60606040518060400160405280600581526020017f4652454e53000000000000000000000000000000000000000000000000000000815250905090565b5f6121fc338484613132565b506001905092915050565b5f81565b6101f481565b60105f9054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff1660135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a990614fe2565b60405180910390fd5b8060085f0160026101000a81548161ffff021916908361ffff1602179055508160085f015f6101000a81548161ffff021916908361ffff16021790555081816122fb9190615068565b60085f0160046101000a81548161ffff021916908361ffff1602179055505f60075f0160029054906101000a900461ffff1660075f015f9054906101000a900461ffff166123499190615068565b61ffff1690508060085f0160049054906101000a900461ffff1661ffff1611156123a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239f906155c8565b60405180910390fd5b505050565b3373ffffffffffffffffffffffffffffffffffffffff1660135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461243c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243390614fe2565b60405180910390fd5b81600d60016101000a81548160ff0219169083151502179055508060105f6101000a81548160ff0219169083151502179055507f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532578260405161249e9190614641565b60405180910390a15050565b60065481565b6008805f015f9054906101000a900461ffff1690805f0160029054906101000a900461ffff1690805f0160049054906101000a900461ffff16905083565b3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461257e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257590614ebd565b60405180910390fd5b81600b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b6001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271090614ebd565b60405180910390fd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612767573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278b919061520f565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612814919061520f565b6040518363ffffffff1660e01b81526004016128319291906155e6565b602060405180830381865afa15801561284c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612870919061520f565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a3c578173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128ee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612912919061520f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612977573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061299b919061520f565b6040518363ffffffff1660e01b81526004016129b89291906155e6565b6020604051808303815f875af11580156129d4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129f8919061520f565b600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612a7d565b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8160095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612b093060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612f6f565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9590614ebd565b60405180910390fd5b601260019054906101000a900460ff1615612bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be590615657565b60405180910390fd5b601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015612c53573d5f803e3d5ffd5b50565b600b805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b3373ffffffffffffffffffffffffffffffffffffffff1660135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2b90614fe2565b60405180910390fd5b82846012600a612d449190614db5565b64e8d4a51000612d549190614dff565b612d5e9190614dff565b612d6891906153af565b600e8190555080826012600a612d7e9190614db5565b64e8d4a51000612d8e9190614dff565b612d989190614dff565b612da291906153af565b600f81905550600f54600e541115612def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de6906156e5565b60405180910390fd5b6127106096612e1e600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b04565b612e289190614dff565b612e3291906153af565b600f541115612e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6d90615773565b60405180910390fd5b620f42406012600a612e889190614db5565b64e8d4a51000612e989190614dff565b612ea291906153af565b600f541015612ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612edd90615801565b60405180910390fd5b620f42406012600a612ef89190614db5565b64e8d4a51000612f089190614dff565b612f1291906153af565b600e541015612f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4d90615801565b60405180910390fd5b50505050565b600d60019054906101000a900460ff1681565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd490615869565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361304b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304290615869565b60405180910390fd5b8060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161312591906143fc565b60405180910390a3505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036131a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613198906158f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361320f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320690615985565b60405180910390fd5b5f8211613251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324890615a13565b60405180910390fd5b5f805f60015f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156132ac576001925061330a565b60015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156133045760019150613309565b600190505b5b61331487876136aa565b156133685760125f9054906101000a900460ff16613367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335e90615a7b565b60405180910390fd5b5b811561342657600d5f9054906101000a900460ff1661342557600d60019054906101000a900460ff1615613424575f6133a030611b04565b9050600e548110613422575f600f54905060105f9054906101000a900460ff161561340c576127106011546133f5600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b04565b6133ff9190614dff565b61340991906153af565b90505b808210613417578091505b61342082613a14565b505b505b5b5b613434878787868686613440565b93505050509392505050565b5f601260019054906101000a900460ff166134cd5761345f8787613fdf565b601260019054906101000a900460ff16158015613482575061348187876136aa565b5b801561348c575081155b156134cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c390615b09565b60405180910390fd5b5b5f6001905060055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061356d575060055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613576575f90505b855f808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546135c19190614e40565b925050819055505f816135d457866135e1565b6135e08987878a6141b4565b5b9050805f808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461362e9190615b27565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161369291906143fc565b60405180910390a36001925050509695505050505050565b5f601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156137575750601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156137b0575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015613809575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613862575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b80156138bc5750601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b801561390f575060045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613962575060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561399c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156139d457505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613a0c57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b6001600d5f6101000a81548160ff0219169083151502179055505f60086040518060600160405290815f82015f9054906101000a900461ffff1661ffff1661ffff1681526020015f820160029054906101000a900461ffff1661ffff1661ffff1681526020015f820160049054906101000a900461ffff1661ffff1661ffff168152505090505f816040015161ffff1603613aaf5750613fc3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414613c2e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5f600267ffffffffffffffff811115613c4a57613c496146ae565b5b604051908082528060200260200182016040528015613c785781602001602082028036833780820191505090505b50905030815f81518110613c8f57613c8e614f43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d33573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d57919061520f565b81600181518110613d6b57613d6a614f43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b8152600401613e0795949392919061532a565b5f604051808303815f87803b158015613e1e575f80fd5b505af1925050508015613e2f575060015b613e3a575050613fc3565b5f4790505f80846040015161ffff16856020015161ffff1684613e5d9190614dff565b613e6791906153af565b90505f8184613e769190614e40565b90505f865f015161ffff161115613f1957600b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816188b890604051613ed29061540c565b5f60405180830381858888f193505050503d805f8114613f0d576040519150601f19603f3d011682016040523d82523d5f602084013e613f12565b606091505b5050809350505b5f866020015161ffff161115613fbc57600b6001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826188b890604051613f759061540c565b5f60405180830381858888f193505050503d805f8114613fb0576040519150601f19603f3d011682016040523d82523d5f602084013e613fb5565b606091505b5050809350505b5050505050505b5f600d5f6101000a81548160ff02191690831515021790555050565b601260019054906101000a900460ff161561402f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161402690615bca565b60405180910390fd5b61403982826136aa565b1580156140925750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156141b057600160045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001601260016101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff0219169083151502179055507f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325760016040516141a79190614641565b60405180910390a15b5050565b5f806141cc603c60065461432f90919063ffffffff16565b42116141dc576126ac905061423f565b84156141ff5760075f015f9054906101000a900461ffff1661ffff16905061423e565b83156142235760075f0160029054906101000a900461ffff1661ffff16905061423d565b60075f0160049054906101000a900461ffff1661ffff1690505b5b5b5f612710828561424f9190614dff565b61425991906153af565b90505f819050805f803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546142aa9190615b27565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161430e91906143fc565b60405180910390a381856143229190614e40565b9350505050949350505050565b5f80828461433d9190615b27565b905083811015614382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161437990615c32565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6143b58261438c565b9050919050565b6143c5816143ab565b82525050565b5f6020820190506143de5f8301846143bc565b92915050565b5f819050919050565b6143f6816143e4565b82525050565b5f60208201905061440f5f8301846143ed565b92915050565b5f61ffff82169050919050565b61442b81614415565b82525050565b5f6060820190506144445f830186614422565b6144516020830185614422565b61445e6040830184614422565b949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561449d578082015181840152602081019050614482565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6144c282614466565b6144cc8185614470565b93506144dc818560208601614480565b6144e5816144a8565b840191505092915050565b5f6020820190508181035f83015261450881846144b8565b905092915050565b5f819050919050565b5f61453361452e6145298461438c565b614510565b61438c565b9050919050565b5f61454482614519565b9050919050565b5f6145558261453a565b9050919050565b6145658161454b565b82525050565b5f60208201905061457e5f83018461455c565b92915050565b5f604051905090565b5f80fd5b5f80fd5b61459e816143ab565b81146145a8575f80fd5b50565b5f813590506145b981614595565b92915050565b6145c8816143e4565b81146145d2575f80fd5b50565b5f813590506145e3816145bf565b92915050565b5f80604083850312156145ff576145fe61458d565b5b5f61460c858286016145ab565b925050602061461d858286016145d5565b9150509250929050565b5f8115159050919050565b61463b81614627565b82525050565b5f6020820190506146545f830184614632565b92915050565b5f805f606084860312156146715761467061458d565b5b5f61467e868287016145ab565b935050602061468f868287016145ab565b92505060406146a0868287016145d5565b9150509250925092565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6146e4826144a8565b810181811067ffffffffffffffff82111715614703576147026146ae565b5b80604052505050565b5f614715614584565b905061472182826146db565b919050565b5f67ffffffffffffffff8211156147405761473f6146ae565b5b602082029050602081019050919050565b5f80fd5b5f61476761476284614726565b61470c565b9050808382526020820190506020840283018581111561478a57614789614751565b5b835b818110156147b3578061479f88826145ab565b84526020840193505060208101905061478c565b5050509392505050565b5f82601f8301126147d1576147d06146aa565b5b81356147e1848260208601614755565b91505092915050565b5f67ffffffffffffffff821115614804576148036146ae565b5b602082029050602081019050919050565b5f614827614822846147ea565b61470c565b9050808382526020820190506020840283018581111561484a57614849614751565b5b835b81811015614873578061485f88826145d5565b84526020840193505060208101905061484c565b5050509392505050565b5f82601f830112614891576148906146aa565b5b81356148a1848260208601614815565b91505092915050565b5f80604083850312156148c0576148bf61458d565b5b5f83013567ffffffffffffffff8111156148dd576148dc614591565b5b6148e9858286016147bd565b925050602083013567ffffffffffffffff81111561490a57614909614591565b5b6149168582860161487d565b9150509250929050565b5f60ff82169050919050565b61493581614920565b82525050565b5f60208201905061494e5f83018461492c565b92915050565b61495d81614415565b8114614967575f80fd5b50565b5f8135905061497881614954565b92915050565b5f805f606084860312156149955761499461458d565b5b5f6149a28682870161496a565b93505060206149b38682870161496a565b92505060406149c48682870161496a565b9150509250925092565b5f602082840312156149e3576149e261458d565b5b5f6149f0848285016145d5565b91505092915050565b5f60208284031215614a0e57614a0d61458d565b5b5f614a1b848285016145ab565b91505092915050565b614a2d81614627565b8114614a37575f80fd5b50565b5f81359050614a4881614a24565b92915050565b5f8060408385031215614a6457614a6361458d565b5b5f614a71858286016145ab565b9250506020614a8285828601614a3a565b9150509250929050565b5f8060408385031215614aa257614aa161458d565b5b5f614aaf8582860161496a565b9250506020614ac08582860161496a565b9150509250929050565b5f8060408385031215614ae057614adf61458d565b5b5f614aed85828601614a3a565b9250506020614afe85828601614a3a565b9150509250929050565b5f614b128261438c565b9050919050565b614b2281614b08565b8114614b2c575f80fd5b50565b5f81359050614b3d81614b19565b92915050565b5f8060408385031215614b5957614b5861458d565b5b5f614b6685828601614b2f565b9250506020614b7785828601614b2f565b9150509250929050565b5f8060408385031215614b9757614b9661458d565b5b5f614ba4858286016145ab565b9250506020614bb5858286016145ab565b9150509250929050565b614bc881614b08565b82525050565b5f604082019050614be15f830185614bbf565b614bee6020830184614bbf565b9392505050565b5f805f8060808587031215614c0d57614c0c61458d565b5b5f614c1a878288016145d5565b9450506020614c2b878288016145d5565b9350506040614c3c878288016145d5565b9250506060614c4d878288016145d5565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115614cdb57808604811115614cb757614cb6614c59565b5b6001851615614cc65780820291505b8081029050614cd485614c86565b9450614c9b565b94509492505050565b5f82614cf35760019050614dae565b81614d00575f9050614dae565b8160018114614d165760028114614d2057614d4f565b6001915050614dae565b60ff841115614d3257614d31614c59565b5b8360020a915084821115614d4957614d48614c59565b5b50614dae565b5060208310610133831016604e8410600b8410161715614d845782820a905083811115614d7f57614d7e614c59565b5b614dae565b614d918484846001614c92565b92509050818404811115614da857614da7614c59565b5b81810290505b9392505050565b5f614dbf826143e4565b9150614dca83614920565b9250614df77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614ce4565b905092915050565b5f614e09826143e4565b9150614e14836143e4565b9250828202614e22816143e4565b91508282048414831517614e3957614e38614c59565b5b5092915050565b5f614e4a826143e4565b9150614e55836143e4565b9250828203905081811115614e6d57614e6c614c59565b5b92915050565b7f43616c6c6572203d2f3d206f776e65722e0000000000000000000000000000005f82015250565b5f614ea7601183614470565b9150614eb282614e73565b602082019050919050565b5f6020820190508181035f830152614ed481614e9b565b9050919050565b7f4c656e6774687320646f206e6f74206d617463682e00000000000000000000005f82015250565b5f614f0f601583614470565b9150614f1a82614edb565b602082019050919050565b5f6020820190508181035f830152614f3c81614f03565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f614f7a82614920565b915060ff8203614f8d57614f8c614c59565b5b600182019050919050565b7f43616c6c6572203d2f3d2061646d696e2e0000000000000000000000000000005f82015250565b5f614fcc601183614470565b9150614fd782614f98565b602082019050919050565b5f6020820190508181035f830152614ff981614fc0565b9050919050565b7f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000005f82015250565b5f615034601783614470565b915061503f82615000565b602082019050919050565b5f6020820190508181035f83015261506181615028565b9050919050565b5f61507282614415565b915061507d83614415565b9250828201905061ffff81111561509757615096614c59565b5b92915050565b7f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e5f82015250565b5f6150d1602083614470565b91506150dc8261509d565b602082019050919050565b5f6020820190508181035f8301526150fe816150c5565b9050919050565b7f43616e6e6f74207365742061626f76652032252e0000000000000000000000005f82015250565b5f615139601483614470565b915061514482615105565b602082019050919050565b5f6020820190508181035f8301526151668161512d565b9050919050565b7f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e73665f8201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000602082015250565b5f6151c7603d83614470565b91506151d28261516d565b604082019050919050565b5f6020820190508181035f8301526151f4816151bb565b9050919050565b5f8151905061520981614595565b92915050565b5f602082840312156152245761522361458d565b5b5f615231848285016151fb565b91505092915050565b5f819050919050565b5f61525d6152586152538461523a565b614510565b6143e4565b9050919050565b61526d81615243565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6152a5816143ab565b82525050565b5f6152b6838361529c565b60208301905092915050565b5f602082019050919050565b5f6152d882615273565b6152e2818561527d565b93506152ed8361528d565b805f5b8381101561531d57815161530488826152ab565b975061530f836152c2565b9250506001810190506152f0565b5085935050505092915050565b5f60a08201905061533d5f8301886143ed565b61534a6020830187615264565b818103604083015261535c81866152ce565b905061536b60608301856143bc565b61537860808301846143ed565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6153b9826143e4565b91506153c4836143e4565b9250826153d4576153d3615382565b5b828204905092915050565b5f81905092915050565b50565b5f6153f75f836153df565b9150615402826153e9565b5f82019050919050565b5f615416826153ec565b9150819050919050565b7f332044617920636f6f6c646f776e2e21000000000000000000000000000000005f82015250565b5f615454601083614470565b915061545f82615420565b602082019050919050565b5f6020820190508181035f83015261548181615448565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642100000000000000005f82015250565b5f6154bc601883614470565b91506154c782615488565b602082019050919050565b5f6020820190508181035f8301526154e9816154b0565b9050919050565b7f4c6971756964697479206d7573742062652061646465642e00000000000000005f82015250565b5f615524601883614470565b915061552f826154f0565b602082019050919050565b5f6020820190508181035f83015261555181615518565b9050919050565b7f43616e6e6f74206578636565642073756d206f662062757920616e642073656c5f8201527f6c20666565732e00000000000000000000000000000000000000000000000000602082015250565b5f6155b2602783614470565b91506155bd82615558565b604082019050919050565b5f6020820190508181035f8301526155df816155a6565b9050919050565b5f6040820190506155f95f8301856143bc565b61560660208301846143bc565b9392505050565b7f43616e6e6f742063616c6c206166746572206c69717569646974792e000000005f82015250565b5f615641601c83614470565b915061564c8261560d565b602082019050919050565b5f6020820190508181035f83015261566e81615635565b9050919050565b7f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e745f8201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b5f6156cf602183614470565b91506156da82615675565b604082019050919050565b5f6020820190508181035f8301526156fc816156c3565b9050919050565b7f43616e6e6f742062652061626f766520312e3525206f662063757272656e74205f8201527f50492e0000000000000000000000000000000000000000000000000000000000602082015250565b5f61575d602383614470565b915061576882615703565b604082019050919050565b5f6020820190508181035f83015261578a81615751565b9050919050565b7f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f665f8201527f20746f74616c20737570706c792e000000000000000000000000000000000000602082015250565b5f6157eb602e83614470565b91506157f682615791565b604082019050919050565b5f6020820190508181035f830152615818816157df565b9050919050565b7f45524332303a205a65726f2041646472657373000000000000000000000000005f82015250565b5f615853601383614470565b915061585e8261581f565b602082019050919050565b5f6020820190508181035f83015261588081615847565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6158e1602583614470565b91506158ec82615887565b604082019050919050565b5f6020820190508181035f83015261590e816158d5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61596f602383614470565b915061597a82615915565b604082019050919050565b5f6020820190508181035f83015261599c81615963565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f6159fd602983614470565b9150615a08826159a3565b604082019050919050565b5f6020820190508181035f830152615a2a816159f1565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642100000000000000005f82015250565b5f615a65601883614470565b9150615a7082615a31565b602082019050919050565b5f6020820190508181035f830152615a9281615a59565b9050919050565b7f5072652d6c6971756964697479207472616e736665722070726f74656374696f5f8201527f6e2e000000000000000000000000000000000000000000000000000000000000602082015250565b5f615af3602283614470565b9150615afe82615a99565b604082019050919050565b5f6020820190508181035f830152615b2081615ae7565b9050919050565b5f615b31826143e4565b9150615b3c836143e4565b9250828201905080821115615b5457615b53614c59565b5b92915050565b7f4c697175696469747920616c726561647920616464656420616e64206d61726b5f8201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b5f615bb4602383614470565b9150615bbf82615b5a565b604082019050919050565b5f6020820190508181035f830152615be181615ba8565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f615c1c601b83614470565b9150615c2782615be8565b602082019050919050565b5f6020820190508181035f830152615c4981615c10565b905091905056fea2646970667358221220ea90dcdfb003372f5242d4cc27d70a91cb1829b595d96e5ea04c39dfa729f98864736f6c63430008140033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

Frens claims to be the ultimate meme coin mashup that will leave you howling with joy! They have combined the top dogs of the meme world - Doge, Pepe, Shiba, Floki, Bob, and more - to create a decentralized playground of laughter and excitement.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.