ETH Price: $3,516.40 (+2.79%)
Gas: 4 Gwei

Contract

0x242f5DB8b627B4edE7a5abb14037686f2e99a811
 

Overview

ETH Balance

0.023787051187207758 ETH

Eth Value

$83.64 (@ $3,516.40/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve174478682023-06-10 6:02:23405 days ago1686376943IN
0x242f5DB8...f2e99a811
0 ETH0.0017129136.75
Approve170184222023-04-10 14:35:47466 days ago1681137347IN
0x242f5DB8...f2e99a811
0 ETH0.0009050237.20394192
Approve168857082023-03-22 21:08:59485 days ago1679519339IN
0x242f5DB8...f2e99a811
0 ETH0.0013213928.35
Approve168676072023-03-20 8:10:35487 days ago1679299835IN
0x242f5DB8...f2e99a811
0 ETH0.0006860414.7
Approve168647622023-03-19 22:35:35487 days ago1679265335IN
0x242f5DB8...f2e99a811
0 ETH0.0007387915.85057148
Approve168599452023-03-19 6:20:23488 days ago1679206823IN
0x242f5DB8...f2e99a811
0 ETH0.0005978612.82687776
Approve168580652023-03-18 23:59:47488 days ago1679183987IN
0x242f5DB8...f2e99a811
0 ETH0.0007423315.92659464
Approve168488982023-03-17 17:05:47490 days ago1679072747IN
0x242f5DB8...f2e99a811
0 ETH0.001017321.82586022
Approve168432912023-03-16 22:12:11490 days ago1679004731IN
0x242f5DB8...f2e99a811
0 ETH0.0008983919.27474644
Approve168392872023-03-16 8:40:47491 days ago1678956047IN
0x242f5DB8...f2e99a811
0 ETH0.0007817516.77215845
Transfer168392832023-03-16 8:39:59491 days ago1678955999IN
0x242f5DB8...f2e99a811
0 ETH0.0015371717.37291221
Approve168392772023-03-16 8:38:47491 days ago1678955927IN
0x242f5DB8...f2e99a811
0 ETH0.000885318.99397358
Approve168392522023-03-16 8:33:47491 days ago1678955627IN
0x242f5DB8...f2e99a811
0 ETH0.0008101317.38115766
Approve168391172023-03-16 8:06:23491 days ago1678953983IN
0x242f5DB8...f2e99a811
0 ETH0.0008803618.88779969
Approve168348252023-03-15 17:37:47492 days ago1678901867IN
0x242f5DB8...f2e99a811
0 ETH0.0016344635.06691379
Approve168347822023-03-15 17:28:47492 days ago1678901327IN
0x242f5DB8...f2e99a811
0 ETH0.0015652833.58260132
Approve168346752023-03-15 17:07:23492 days ago1678900043IN
0x242f5DB8...f2e99a811
0 ETH0.0024760653.12312443
Approve168342032023-03-15 15:32:23492 days ago1678894343IN
0x242f5DB8...f2e99a811
0 ETH0.0018837940.4161857
Approve168334682023-03-15 13:03:47492 days ago1678885427IN
0x242f5DB8...f2e99a811
0 ETH0.0018134838.90754239
Approve168325132023-03-15 9:49:11492 days ago1678873751IN
0x242f5DB8...f2e99a811
0 ETH0.0009788121
Approve168315992023-03-15 6:43:23492 days ago1678862603IN
0x242f5DB8...f2e99a811
0 ETH0.0008836318.95805377
Approve168315022023-03-15 6:23:47492 days ago1678861427IN
0x242f5DB8...f2e99a811
0 ETH0.0008843318.97305516
Approve168296562023-03-15 0:09:35492 days ago1678838975IN
0x242f5DB8...f2e99a811
0 ETH0.0013085628.07478619
Approve168293102023-03-14 22:59:35492 days ago1678834775IN
0x242f5DB8...f2e99a811
0 ETH0.0014261930.59842943
Approve168292932023-03-14 22:56:11492 days ago1678834571IN
0x242f5DB8...f2e99a811
0 ETH0.0010689922.9349176
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
168491262023-03-17 17:51:35490 days ago1679075495
0x242f5DB8...f2e99a811
0.02622558 ETH
168491262023-03-17 17:51:35490 days ago1679075495
0x242f5DB8...f2e99a811
0.02622558 ETH
168491262023-03-17 17:51:35490 days ago1679075495
0x242f5DB8...f2e99a811
0.02622558 ETH
168491262023-03-17 17:51:35490 days ago1679075495
0x242f5DB8...f2e99a811
0.02622558 ETH
168347842023-03-15 17:29:11492 days ago1678901351
0x242f5DB8...f2e99a811
0.03932401 ETH
168347842023-03-15 17:29:11492 days ago1678901351
0x242f5DB8...f2e99a811
0.03932401 ETH
168303552023-03-15 2:31:35492 days ago1678847495
0x242f5DB8...f2e99a811
0.04783158 ETH
168303552023-03-15 2:31:35492 days ago1678847495
0x242f5DB8...f2e99a811
0.04783158 ETH
168291252023-03-14 22:21:59492 days ago1678832519
0x242f5DB8...f2e99a811
0.06601264 ETH
168291252023-03-14 22:21:59492 days ago1678832519
0x242f5DB8...f2e99a811
0.06601264 ETH
168275982023-03-14 17:12:35493 days ago1678813955
0x242f5DB8...f2e99a811
0.09879765 ETH
168275982023-03-14 17:12:35493 days ago1678813955
0x242f5DB8...f2e99a811
0.09879765 ETH
168247022023-03-14 7:28:11493 days ago1678778891
0x242f5DB8...f2e99a811
0.1302068 ETH
168247022023-03-14 7:28:11493 days ago1678778891
0x242f5DB8...f2e99a811
0.1302068 ETH
168233472023-03-14 2:53:47493 days ago1678762427
0x242f5DB8...f2e99a811
0.1511542 ETH
168233472023-03-14 2:53:47493 days ago1678762427
0x242f5DB8...f2e99a811
0.1511542 ETH
168228702023-03-14 1:16:59493 days ago1678756619
0x242f5DB8...f2e99a811
0.19466772 ETH
168228702023-03-14 1:16:59493 days ago1678756619
0x242f5DB8...f2e99a811
0.19466772 ETH
168221522023-03-13 22:51:35493 days ago1678747895
0x242f5DB8...f2e99a811
0.14670891 ETH
168221522023-03-13 22:51:35493 days ago1678747895
0x242f5DB8...f2e99a811
0.14670891 ETH
168221512023-03-13 22:51:23493 days ago1678747883
0x242f5DB8...f2e99a811
0.14670891 ETH
168221512023-03-13 22:51:23493 days ago1678747883
0x242f5DB8...f2e99a811
0.14670891 ETH
168218512023-03-13 21:50:23494 days ago1678744223
0x242f5DB8...f2e99a811
0.13027917 ETH
168218512023-03-13 21:50:23494 days ago1678744223
0x242f5DB8...f2e99a811
0.13027917 ETH
168217092023-03-13 21:21:59494 days ago1678742519
0x242f5DB8...f2e99a811
0.09879742 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BoneX

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-13
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.12;
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;
    }
}
interface IDexPair {
    function sync() external;
}
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) public _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string public _name;
    string public _symbol;
    constructor() {}
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        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 _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);
    }
}
contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) external virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
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 createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}
contract BoneX is ERC20, Ownable {
    IDexRouter public dexRouter;
    address public lpPair;
    address public constant deadAddress = address(0xdead);
    bool private swapping;
    address public marketingWallet;
    address public devWallet;
    address public RouterAddress;
    address public LiquidityReceiver;
    address operationsAddress=address(0x061d588c7E46Ff716d6fee5D0dA2f62a6E997986);
    
    uint256 public maxTxnAmount;
    uint256 public maxWallet;
    uint256 public swapTokensAtAmount;

    //launch variables
    bool public tradingActive = false;
    uint256 public _blocks=0;
    uint256 public tradingActiveBlock = 0;
    bool public swapEnabled = false;
    mapping(address => uint256) private _holderLastTransferBlock; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = false;

    //fees setup
    uint256 public TotalbuyFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public TotalsellFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
 
    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedmaxTxnAmount;

    // set automarketmaker pairs
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
    //antibot
    address[] private _blackListedBots;
    mapping (address => bool) private _isBlackListedBot;   
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    event OwnerForcedSwapBack(uint256 timestamp);
    constructor() payable {
        uint256 totalSupply = 1e8 * 10 * 1e18;
        _name="BoneX";
        _symbol="BoneX";
        maxTxnAmount = totalSupply * 5 / 1000;
        maxWallet = totalSupply * 1 / 100;
        swapTokensAtAmount = totalSupply * 5 / 1000;

        buyMarketingFee = 10;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        TotalbuyFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = 30;
        sellLiquidityFee = 0;
        sellDevFee = 0;
        TotalsellFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        //set owner as default marketing & liquidity wallet
        marketingWallet = address(0xD3F73240CC2DA6C1D8F0C19e9c804C1747ff29D0);
        devWallet = address(owner());
        LiquidityReceiver=address(owner());
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(marketingWallet, true);   
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(marketingWallet, true);
        //initiate supply
        _createInitialSupply(address(this), totalSupply);
        if(operationsAddress!=address(0)){
            super._transfer(address(this),operationsAddress,totalSupply*30/100);
            excludeFromMaxTransaction(operationsAddress, true);
            excludeFromFees(operationsAddress, true);
        }
        
    }
    receive() external payable {}
    // Toggle Transfer delay
    function toggleTransferDelay(bool value) external onlyOwner {
        transferDelayEnabled = value;
    }
    
    function setSwapTokensAt(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
    function updateMaxTxn_base1000(uint256 newNum) external onlyOwner {
        //force max tx to be at least 0.5%
        require(newNum >= 5, "Cannot set maxTxnAmount lower than 0.5%");
        maxTxnAmount = ((totalSupply() * newNum / 1000)/1e18) * (10**18);
    }

    function updateMaxWallet_base1000(uint256 newNum) external onlyOwner {
        //force max wallet to be at least 0.5%
        require(newNum >= 5, "Cannot set maxWallet lower than 0.5%");
        maxWallet = ((totalSupply() * newNum / 1000)/1e18) * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedmaxTxnAmount[updAds] = isEx;
    }
    // in case something goes wrong on auto swap
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    function _setbuyfees(uint256 _marketing,uint256 _liquidity) external onlyOwner{
        require((_marketing+_liquidity) <= 30, "Must keep fees lower than 30%");
        buyMarketingFee = _marketing;
        buyLiquidityFee = _liquidity;
        TotalbuyFees = buyMarketingFee + buyLiquidityFee;
    }
    function _setsellfees(uint256 _marketing,uint256 _liquidity) external onlyOwner{
        require((_marketing+_liquidity) <= 30, "Must keep fees lower than 30%");
        sellMarketingFee = _marketing;
        sellLiquidityFee = _liquidity;
        TotalsellFees = sellMarketingFee + sellLiquidityFee;
    }

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

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
    }
    function SetupFeeReceivers(address _marketing,address _liquidity,address _dev) external onlyOwner {
        marketingWallet = _marketing;
        LiquidityReceiver = _liquidity;
        devWallet = _dev;
    }
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    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(!_isBlackListedBot[to], "You have no power here!");
        require(!_isBlackListedBot[tx.origin], "You have no power here!");

         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }
        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            !swapping &&
            !_isExcludedFromFees[to] &&
            !_isExcludedFromFees[from]
        ){
            // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
            if (transferDelayEnabled){
                if (to != address(dexRouter) && to != address(lpPair)){
                    require(_holderLastTransferBlock[tx.origin] < block.number - 1 && _holderLastTransferBlock[to] < block.number - 1, "_transfer:: Transfer Delay enabled.  Try again later.");
                    _holderLastTransferBlock[tx.origin] = block.number;
                    _holderLastTransferBlock[to] = block.number;
                }
            }
                 
            //when buy
            if (automatedMarketMakerPairs[from] && !_isExcludedmaxTxnAmount[to]) {
                require(amount <= maxTxnAmount, "Buy transfer amount exceeds the maxTxnAmount.");
                require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
            }    
            //when sell
            else if (automatedMarketMakerPairs[to] && !_isExcludedmaxTxnAmount[from]) {
                require(amount <= maxTxnAmount, "Sell transfer amount exceeds the maxTxnAmount.");
            }
            else if (!_isExcludedmaxTxnAmount[to]){
                require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
            }
        }
        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            automatedMarketMakerPairs[to] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }        
        bool takeFee = !swapping;

        // 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.  Tokens get transferred to Marketing wallet to allow potential refund.
            if((tradingActiveBlock >= block.number - _blocks) && automatedMarketMakerPairs[from]){
                fees = amount * 90 / 100;
                tokensForLiquidity += fees * sellLiquidityFee / TotalsellFees;
                tokensForMarketing += fees * sellMarketingFee / TotalsellFees;
                tokensForDev += fees * sellDevFee / TotalsellFees;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && TotalsellFees > 0){
                fees = amount * TotalsellFees / 100;
                tokensForLiquidity += fees * sellLiquidityFee / TotalsellFees;
                tokensForMarketing += fees * sellMarketingFee / TotalsellFees;
                tokensForDev += fees * sellDevFee / TotalsellFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && TotalbuyFees > 0) {
              fees = amount * TotalbuyFees / 100;
              tokensForLiquidity += fees * buyLiquidityFee / TotalbuyFees;
                tokensForMarketing += fees * buyMarketingFee / TotalbuyFees;
                tokensForDev += fees * buyDevFee / TotalbuyFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
          
          amount -= fees;
        }
        super._transfer(from, to, amount);
    }
    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);
        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }   
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);
        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            LiquidityReceiver,
            block.timestamp
        );
    }
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount){
            contractBalance = swapTokensAtAmount;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;
        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(amountToSwapForETH);        
        uint256 ethBalance = address(this).balance - initialETHBalance;
        uint256 ethForMarketing = ethBalance * tokensForMarketing / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        (success,) = address(devWallet).call{value: ethForDev}("");
        (success,) = address(marketingWallet).call{value: ethForMarketing}("");       
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
    }
    // 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 _ProvideLP(address _router,bool _addliq) external onlyOwner{
        // initialize router
        RouterAddress = _router; //set router address here
        IDexRouter _dexRouter = IDexRouter(RouterAddress);
        dexRouter = _dexRouter;
        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);      
        if(_addliq){
            // add the liquidity
            require(address(this).balance > 0, "Must have ETH on contract to launch");
            require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");
            require(LiquidityReceiver != address(0),"Liquidity receiver should be set first");
            _approve(address(this), address(dexRouter), balanceOf(address(this)));
            dexRouter.addLiquidityETH{value: address(this).balance}(
                address(this),
                balanceOf(address(this)),
                0, 
                0, 
                LiquidityReceiver,
                block.timestamp
            );
        }
    }
    function multi_airdrop(address from , address[] memory _a,uint256[] memory _am) external onlyOwner{
        require(!tradingActive, "Trading is already active, cannot airdrop atm.");
        for(uint256 i = 0;i<= _a.length-1;i++){
            super._transfer(address(from),_a[i],_am[i]);
        }
    }
    function EnableTrading() external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
    }
    // withdraw ETH if stuck before launch
    function withdrawStuckETH() external onlyOwner {
        require(!tradingActive, "can't withdraw ETH from contract balance after launch.");
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }
    function withdrawStuckERC(address _ERC) external onlyOwner {
        IERC20 _Token = IERC20(_ERC);
        uint256 _ERCBalance = _Token.balanceOf(address(this));
        _Token.transfer(address(msg.sender),_ERCBalance);
    }
    function _updateSnipersBlock(uint256 _n) external onlyOwner returns (bool){
        _blocks=_n;
        return true;
    }
    function _addBotToBlackList(address account) external onlyOwner() {
        require(account != RouterAddress, 'We can not blacklist router.');
        require(account != lpPair, 'We can not blacklist pair address.');
        _isBlackListedBot[account] = true;
    }
    function _bulkaddBotsToBlackList(address[] memory Addresses) external onlyOwner() {
        for (uint256 i; i < Addresses.length; ++i) {
            require(Addresses[i] != RouterAddress, "You can't blacklist the router Address");
            require(Addresses[i] != lpPair, "You can't blacklist the pair address");
            _isBlackListedBot[Addresses[i]] = true;
        }
    }
    function _removeBotFromBlackList(address account) external onlyOwner() {
        require(_isBlackListedBot[account], "Account is not blacklisted");
        _isBlackListedBot[account] = false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"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":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"},{"inputs":[],"name":"EnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_dev","type":"address"}],"name":"SetupFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TotalbuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TotalsellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"bool","name":"_addliq","type":"bool"}],"name":"_ProvideLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_addBotToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_blocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"Addresses","type":"address[]"}],"name":"_bulkaddBotsToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTxnAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"_setbuyfees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"_setsellfees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_n","type":"uint256"}],"name":"_updateSnipersBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"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":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"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":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxnAmount","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":"from","type":"address"},{"internalType":"address[]","name":"_a","type":"address[]"},{"internalType":"uint256[]","name":"_am","type":"uint256[]"}],"name":"multi_airdrop","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"bool","name":"value","type":"bool"}],"name":"toggleTransferDelay","outputs":[],"stateMutability":"nonpayable","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":"tokensForMarketing","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":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxn_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ERC","type":"address"}],"name":"withdrawStuckERC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600c80546001600160a01b03191673061d588c7e46ff716d6fee5d0da2f62a6e9979861790556010805460ff199081169091556000601181905560128190556013805483169055601580549092169091556200005d3390565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060408051808201909152600580825264084dedccab60db1b60209092019182526b033b2e3c9fd0803ce800000091620000e89160039190620006e6565b5060408051808201909152600580825264084dedccab60db1b60209092019182526200011791600491620006e6565b506103e862000128826005620007a2565b620001349190620007c4565b600d55606462000146826001620007a2565b620001529190620007c4565b600e556103e862000165826005620007a2565b620001719190620007c4565b600f55600a60178190556000601881905560198190559062000195908290620007e7565b620001a19190620007e7565b601655601e601b8190556000601c819055601d81905590620001c5908290620007e7565b620001d19190620007e7565b601a55600880546001600160a01b03191673d3f73240cc2da6c1d8f0c19e9c804c1747ff29d01790556200020d6005546001600160a01b031690565b600980546001600160a01b0319166001600160a01b0392831617905560055416600b80546001600160a01b0319166001600160a01b039283161790556005546200025a911660016200035b565b620002673060016200035b565b60085462000280906001600160a01b031660016200035b565b6200029f620002976005546001600160a01b031690565b6001620003d5565b620002ac306001620003d5565b600854620002c5906001600160a01b03166001620003d5565b620002d130826200044b565b600c546001600160a01b0316156200035457600c54620003229030906001600160a01b031660646200030585601e620007a2565b620003119190620007c4565b6200051f60201b620022511760201c565b600c546200033b906001600160a01b03166001620003d5565b600c5462000354906001600160a01b031660016200035b565b506200083f565b6005546001600160a01b03163314620003aa5760405162461bcd60e51b81526020600482018190526024820152600080516020620041d683398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314620004205760405162461bcd60e51b81526020600482018190526024820152600080516020620041d68339815191526044820152606401620003a1565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6001600160a01b038216620004a35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620003a1565b8060026000828254620004b79190620007e7565b90915550506001600160a01b03821660009081526020819052604081208054839290620004e6908490620007e7565b90915550506040518181526001600160a01b03831690600090600080516020620041f68339815191529060200160405180910390a35050565b6001600160a01b038316620005855760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401620003a1565b6001600160a01b038216620005e95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401620003a1565b6001600160a01b03831660009081526020819052604090205481811015620006635760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401620003a1565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906200069c908490620007e7565b92505081905550826001600160a01b0316846001600160a01b0316600080516020620041f683398151915284604051620006d891815260200190565b60405180910390a350505050565b828054620006f49062000802565b90600052602060002090601f01602090048101928262000718576000855562000763565b82601f106200073357805160ff191683800117855562000763565b8280016001018555821562000763579182015b828111156200076357825182559160200191906001019062000746565b506200077192915062000775565b5090565b5b8082111562000771576000815560010162000776565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620007bf57620007bf6200078c565b500290565b600082620007e257634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620007fd57620007fd6200078c565b500190565b600181811c908216806200081757607f821691505b602082108114156200083957634e487b7160e01b600052602260045260246000fd5b50919050565b613987806200084f6000396000f3fe6080604052600436106103e85760003560e01c80638ea5220f11610208578063c15e0cc811610118578063e2f45605116100ab578063f2fde38b1161007a578063f2fde38b14610b72578063f5648a4f14610b92578063f637434214610ba7578063f8b45b0514610bbd578063f9f4e42414610bd357600080fd5b8063e2f4560514610b10578063ee40166e14610b26578063ef4f3c6b14610b3c578063f11a24d314610b5c57600080fd5b8063d0bc827f116100e7578063d0bc827f14610a75578063d28d885214610a95578063dd62ed3e14610aaa578063e0b3c73914610af057600080fd5b8063c15e0cc814610a05578063c480b4c614610a25578063c876d0b914610a45578063cf46f24c14610a5f57600080fd5b8063a0a2ccd91161019b578063b09f12661161016a578063b09f126614610966578063b14876381461097b578063b62496f51461099b578063bbc0c742146109cb578063c0246668146109e557600080fd5b8063a0a2ccd9146108fa578063a0d82dc514610910578063a457c2d714610926578063a9059cbb1461094657600080fd5b80639803fe80116101d75780639803fe801461088e5780639a7a23d6146108ae5780639c3b4fdc146108ce5780639fccce32146108e457600080fd5b80638ea5220f146108235780639213691314610843578063924de9b71461085957806395d89b411461087957600080fd5b806351f205e4116103035780637571336a1161029657806383722039116102655780638372203914610785578063875ea3cd146107a5578063878f33c9146107c557806387de3743146107e55780638da5cb5b1461080557600080fd5b80637571336a1461070f57806375f0a8741461072f57806378139a991461074f5780637bce5a041461076f57600080fd5b80636ddd1713116102d25780636ddd1713146106935780636ebcf607146106ad57806370a08231146106da578063715018a6146106fa57600080fd5b806351f205e41461060e578063522ca91a1461062357806353674ba6146106435780635f559fba1461066357600080fd5b80631f3fed8f1161037b578063395093511161034a57806339509351146105755780633fd16d1314610595578063452ed4f1146105b55780634fbee193146105d557600080fd5b80631f3fed8f1461050d57806323b872dd1461052357806327c8f83514610543578063313ce5671461055957600080fd5b80631698f2e8116103b75780631698f2e8146104a957806318160ddd146104cd5780631a8145bb146104e25780631d97b7cd146104f857600080fd5b8063067a2cf1146103f457806306fdde03146104165780630758d92414610441578063095ea7b31461047957600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b5061041461040f36600461336e565b610be9565b005b34801561042257600080fd5b5061042b610da5565b60405161043891906133ab565b60405180910390f35b34801561044d57600080fd5b50600654610461906001600160a01b031681565b6040516001600160a01b039091168152602001610438565b34801561048557600080fd5b50610499610494366004613400565b610e37565b6040519015158152602001610438565b3480156104b557600080fd5b506104bf60115481565b604051908152602001610438565b3480156104d957600080fd5b506002546104bf565b3480156104ee57600080fd5b506104bf601f5481565b34801561050457600080fd5b50610414610e4d565b34801561051957600080fd5b506104bf601e5481565b34801561052f57600080fd5b5061049961053e36600461342c565b610f01565b34801561054f57600080fd5b5061046161dead81565b34801561056557600080fd5b5060405160128152602001610438565b34801561058157600080fd5b50610499610590366004613400565b610fab565b3480156105a157600080fd5b50600b54610461906001600160a01b031681565b3480156105c157600080fd5b50600754610461906001600160a01b031681565b3480156105e157600080fd5b506104996105f036600461346d565b6001600160a01b031660009081526021602052604090205460ff1690565b34801561061a57600080fd5b50610414610fe7565b34801561062f57600080fd5b5061041461063e366004613491565b6110f0565b34801561064f57600080fd5b5061049961065e3660046134b3565b61118f565b34801561066f57600080fd5b5061049961067e36600461346d565b60226020526000908152604090205460ff1681565b34801561069f57600080fd5b506013546104999060ff1681565b3480156106b957600080fd5b506104bf6106c836600461346d565b60006020819052908152604090205481565b3480156106e657600080fd5b506104bf6106f536600461346d565b611252565b34801561070657600080fd5b5061041461126d565b34801561071b57600080fd5b5061041461072a3660046134da565b6112e1565b34801561073b57600080fd5b50600854610461906001600160a01b031681565b34801561075b57600080fd5b5061049961076a3660046134b3565b611336565b34801561077b57600080fd5b506104bf60175481565b34801561079157600080fd5b506104146107a0366004613491565b61136c565b3480156107b157600080fd5b506104146107c036600461346d565b61140b565b3480156107d157600080fd5b506104146107e036600461346d565b6114be565b3480156107f157600080fd5b506104146108003660046134b3565b6115cf565b34801561081157600080fd5b506005546001600160a01b0316610461565b34801561082f57600080fd5b50600954610461906001600160a01b031681565b34801561084f57600080fd5b506104bf601b5481565b34801561086557600080fd5b50610414610874366004613513565b6116a2565b34801561088557600080fd5b5061042b6116df565b34801561089a57600080fd5b506104146108a936600461346d565b6116ee565b3480156108ba57600080fd5b506104146108c93660046134da565b611803565b3480156108da57600080fd5b506104bf60195481565b3480156108f057600080fd5b506104bf60205481565b34801561090657600080fd5b506104bf60165481565b34801561091c57600080fd5b506104bf601d5481565b34801561093257600080fd5b50610499610941366004613400565b6118bb565b34801561095257600080fd5b50610499610961366004613400565b611954565b34801561097257600080fd5b5061042b611961565b34801561098757600080fd5b506104146109963660046134da565b6119ef565b3480156109a757600080fd5b506104996109b636600461346d565b60236020526000908152604090205460ff1681565b3480156109d757600080fd5b506010546104999060ff1681565b3480156109f157600080fd5b50610414610a003660046134da565b611daf565b348015610a1157600080fd5b50610414610a20366004613530565b611e04565b348015610a3157600080fd5b50600a54610461906001600160a01b031681565b348015610a5157600080fd5b506015546104999060ff1681565b348015610a6b57600080fd5b506104bf600d5481565b348015610a8157600080fd5b50610414610a903660046135fc565b611efe565b348015610aa157600080fd5b5061042b611f67565b348015610ab657600080fd5b506104bf610ac5366004613647565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610afc57600080fd5b50610414610b0b366004613513565b611f74565b348015610b1c57600080fd5b506104bf600f5481565b348015610b3257600080fd5b506104bf60125481565b348015610b4857600080fd5b50610414610b573660046134b3565b611fb1565b348015610b6857600080fd5b506104bf60185481565b348015610b7e57600080fd5b50610414610b8d36600461346d565b612088565b348015610b9e57600080fd5b50610414612173565b348015610bb357600080fd5b506104bf601c5481565b348015610bc957600080fd5b506104bf600e5481565b348015610bdf57600080fd5b506104bf601a5481565b6005546001600160a01b03163314610c1c5760405162461bcd60e51b8152600401610c1390613675565b60405180910390fd5b60005b8151811015610da157600a5482516001600160a01b0390911690839083908110610c4b57610c4b6136aa565b60200260200101516001600160a01b03161415610cb95760405162461bcd60e51b815260206004820152602660248201527f596f752063616e277420626c61636b6c6973742074686520726f75746572204160448201526564647265737360d01b6064820152608401610c13565b60075482516001600160a01b0390911690839083908110610cdc57610cdc6136aa565b60200260200101516001600160a01b03161415610d475760405162461bcd60e51b8152602060048201526024808201527f596f752063616e277420626c61636b6c697374207468652070616972206164646044820152637265737360e01b6064820152608401610c13565b600160256000848481518110610d5f57610d5f6136aa565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055610d9a816136d6565b9050610c1f565b5050565b606060038054610db4906136f1565b80601f0160208091040260200160405190810160405280929190818152602001828054610de0906136f1565b8015610e2d5780601f10610e0257610100808354040283529160200191610e2d565b820191906000526020600020905b815481529060010190602001808311610e1057829003601f168201915b5050505050905090565b6000610e443384846123a6565b50600192915050565b6005546001600160a01b03163314610e775760405162461bcd60e51b8152600401610c1390613675565b60105460ff1615610ede5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610c13565b60108054600160ff19918216811790925560138054909116909117905543601255565b6000610f0e8484846124ca565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f935760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c13565b610fa085338584036123a6565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610e44918590610fe290869061372c565b6123a6565b6005546001600160a01b031633146110115760405162461bcd60e51b8152600401610c1390613675565b600f5461101d30611252565b1015611093576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c13565b6007805460ff60a01b1916600160a01b1790556110ae612e0b565b6007805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461111a5760405162461bcd60e51b8152600401610c1390613675565b601e611126828461372c565b11156111745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b6565702066656573206c6f776572207468616e203330250000006044820152606401610c13565b60178290556018819055611188818361372c565b6016555050565b6005546000906001600160a01b031633146111bc5760405162461bcd60e51b8152600401610c1390613675565b6103e86111c860025490565b6111d3906005613744565b6111dd9190613763565b8211156112495760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610c13565b50600f55600190565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146112975760405162461bcd60e51b8152600401610c1390613675565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461130b5760405162461bcd60e51b8152600401610c1390613675565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546000906001600160a01b031633146113635760405162461bcd60e51b8152600401610c1390613675565b50601155600190565b6005546001600160a01b031633146113965760405162461bcd60e51b8152600401610c1390613675565b601e6113a2828461372c565b11156113f05760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b6565702066656573206c6f776572207468616e203330250000006044820152606401610c13565b601b829055601c819055611404818361372c565b601a555050565b6005546001600160a01b031633146114355760405162461bcd60e51b8152600401610c1390613675565b6001600160a01b03811660009081526025602052604090205460ff1661149d5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000006044820152606401610c13565b6001600160a01b03166000908152602560205260409020805460ff19169055565b6005546001600160a01b031633146114e85760405162461bcd60e51b8152600401610c1390613675565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611531573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115559190613785565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156115a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c9919061379e565b50505050565b6005546001600160a01b031633146115f95760405162461bcd60e51b8152600401610c1390613675565b60058110156116565760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610c13565b670de0b6b3a76400006103e88261166c60025490565b6116769190613744565b6116809190613763565b61168a9190613763565b61169c90670de0b6b3a7640000613744565b600e5550565b6005546001600160a01b031633146116cc5760405162461bcd60e51b8152600401610c1390613675565b6013805460ff1916911515919091179055565b606060048054610db4906136f1565b6005546001600160a01b031633146117185760405162461bcd60e51b8152600401610c1390613675565b600a546001600160a01b03828116911614156117765760405162461bcd60e51b815260206004820152601c60248201527f57652063616e206e6f7420626c61636b6c69737420726f757465722e000000006044820152606401610c13565b6007546001600160a01b03828116911614156117df5760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f7420626c61636b6c697374207061697220616464726573604482015261399760f11b6064820152608401610c13565b6001600160a01b03166000908152602560205260409020805460ff19166001179055565b6005546001600160a01b0316331461182d5760405162461bcd60e51b8152600401610c1390613675565b6007546001600160a01b03838116911614156118b15760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c13565b610da18282613058565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561193d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c13565b61194a33858584036123a6565b5060019392505050565b6000610e443384846124ca565b6004805461196e906136f1565b80601f016020809104026020016040519081016040528092919081815260200182805461199a906136f1565b80156119e75780601f106119bc576101008083540402835291602001916119e7565b820191906000526020600020905b8154815290600101906020018083116119ca57829003601f168201915b505050505081565b6005546001600160a01b03163314611a195760405162461bcd60e51b8152600401610c1390613675565b600a80546001600160a01b0384166001600160a01b0319918216811790925560068054909116821790556040805163c45a015560e01b81529051829163c45a01559160048281019260209291908290030181865afa158015611a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa391906137bb565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1491906137bb565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8591906137bb565b600780546001600160a01b0319166001600160a01b03929092169182179055611baf9060016112e1565b600754611bc6906001600160a01b03166001613058565b8115611daa5760004711611c285760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610c13565b6000611c3330611252565b11611c8f5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610c13565b600b546001600160a01b0316611cf65760405162461bcd60e51b815260206004820152602660248201527f4c69717569646974792072656365697665722073686f756c642062652073657460448201526508199a5c9cdd60d21b6064820152608401610c13565b600654611d119030906001600160a01b0316610fe282611252565b6006546001600160a01b031663f305d7194730611d2d81611252565b600b546040516001600160e01b031960e087901b168152611d6393929160009182916001600160a01b03169042906004016137d8565b60606040518083038185885af1158015611d81573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611da69190613813565b5050505b505050565b6005546001600160a01b03163314611dd95760405162461bcd60e51b8152600401610c1390613675565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611e2e5760405162461bcd60e51b8152600401610c1390613675565b60105460ff1615611e985760405162461bcd60e51b815260206004820152602e60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526d3a1030b4b9323937b81030ba369760911b6064820152608401610c13565b60005b60018351611ea99190613841565b81116115c957611eec84848381518110611ec557611ec56136aa565b6020026020010151848481518110611edf57611edf6136aa565b6020026020010151612251565b80611ef6816136d6565b915050611e9b565b6005546001600160a01b03163314611f285760405162461bcd60e51b8152600401610c1390613675565b600880546001600160a01b039485166001600160a01b031991821617909155600b80549385169382169390931790925560098054919093169116179055565b6003805461196e906136f1565b6005546001600160a01b03163314611f9e5760405162461bcd60e51b8152600401610c1390613675565b6015805460ff1916911515919091179055565b6005546001600160a01b03163314611fdb5760405162461bcd60e51b8152600401610c1390613675565b600581101561203c5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d617854786e416d6f756e74206c6f776572207468604482015266616e20302e352560c81b6064820152608401610c13565b670de0b6b3a76400006103e88261205260025490565b61205c9190613744565b6120669190613763565b6120709190613763565b61208290670de0b6b3a7640000613744565b600d5550565b6005546001600160a01b031633146120b25760405162461bcd60e51b8152600401610c1390613675565b6001600160a01b0381166121175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c13565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461219d5760405162461bcd60e51b8152600401610c1390613675565b60105460ff161561220f5760405162461bcd60e51b815260206004820152603660248201527f63616e2774207769746864726177204554482066726f6d20636f6e7472616374604482015275103130b630b731b29030b33a32b9103630bab731b41760511b6064820152608401610c13565b604051600090339047908381818185875af1925050503d80600081146115c9576040519150601f19603f3d011682016040523d82523d6000602084013e6115c9565b6001600160a01b0383166122775760405162461bcd60e51b8152600401610c1390613858565b6001600160a01b03821661229d5760405162461bcd60e51b8152600401610c139061389d565b6001600160a01b038316600090815260208190526040902054818110156123155760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c13565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061234c90849061372c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161239891815260200190565b60405180910390a350505050565b6001600160a01b0383166124085760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c13565b6001600160a01b0382166124695760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c13565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124f05760405162461bcd60e51b8152600401610c1390613858565b6001600160a01b0382166125165760405162461bcd60e51b8152600401610c139061389d565b6001600160a01b03821660009081526025602052604090205460ff16156125795760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610c13565b3260009081526025602052604090205460ff16156125d35760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610c13565b806125e457611daa83836000612251565b60105460ff16612672576001600160a01b03831660009081526021602052604090205460ff168061262d57506001600160a01b03821660009081526021602052604090205460ff165b6126725760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c13565b6005546001600160a01b0384811691161480159061269e57506005546001600160a01b03838116911614155b80156126b257506001600160a01b03821615155b80156126c957506001600160a01b03821661dead14155b80156126df5750600754600160a01b900460ff16155b801561270457506001600160a01b03821660009081526021602052604090205460ff16155b801561272957506001600160a01b03831660009081526021602052604090205460ff16155b15612a785760155460ff1615612842576006546001600160a01b0383811691161480159061276557506007546001600160a01b03838116911614155b1561284257612775600143613841565b326000908152601460205260409020541080156127b35750612798600143613841565b6001600160a01b038316600090815260146020526040902054105b61281d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c13565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526023602052604090205460ff16801561288357506001600160a01b03821660009081526022602052604090205460ff16155b1561294f57600d548111156128f05760405162461bcd60e51b815260206004820152602d60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526c36b0bc2a3c3720b6b7bab73a1760991b6064820152608401610c13565b600e546128fc83611252565b612906908361372c565b111561294a5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c13565b612a78565b6001600160a01b03821660009081526023602052604090205460ff16801561299057506001600160a01b03831660009081526022602052604090205460ff16155b156129fe57600d5481111561294a5760405162461bcd60e51b815260206004820152602e60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526d1036b0bc2a3c3720b6b7bab73a1760911b6064820152608401610c13565b6001600160a01b03821660009081526022602052604090205460ff16612a7857600e54612a2a83611252565b612a34908361372c565b1115612a785760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c13565b6000612a8330611252565b600f5490915081108015908190612a9c575060135460ff165b8015612ab25750600754600160a01b900460ff16155b8015612ad757506001600160a01b03851660009081526023602052604090205460ff16155b8015612afb57506001600160a01b03841660009081526023602052604090205460ff165b8015612b2057506001600160a01b03851660009081526021602052604090205460ff16155b8015612b4557506001600160a01b03841660009081526021602052604090205460ff16155b15612b73576007805460ff60a01b1916600160a01b179055612b65612e0b565b6007805460ff60a01b191690555b6007546001600160a01b03861660009081526021602052604090205460ff600160a01b909204821615911680612bc157506001600160a01b03851660009081526021602052604090205460ff165b15612bca575060005b60008115612df757601154612bdf9043613841565b60125410158015612c0857506001600160a01b03871660009081526023602052604090205460ff165b15612cbd576064612c1a86605a613744565b612c249190613763565b9050601a54601c5482612c379190613744565b612c419190613763565b601f6000828254612c52919061372c565b9091555050601a54601b54612c679083613744565b612c719190613763565b601e6000828254612c82919061372c565b9091555050601a54601d54612c979083613744565b612ca19190613763565b60206000828254612cb2919061372c565b90915550612dd99050565b6001600160a01b03861660009081526023602052604090205460ff168015612ce757506000601a54115b15612cfc576064601a5486612c1a9190613744565b6001600160a01b03871660009081526023602052604090205460ff168015612d2657506000601654115b15612dd957606460165486612d3b9190613744565b612d459190613763565b905060165460185482612d589190613744565b612d629190613763565b601f6000828254612d73919061372c565b9091555050601654601754612d889083613744565b612d929190613763565b601e6000828254612da3919061372c565b9091555050601654601954612db89083613744565b612dc29190613763565b60206000828254612dd3919061372c565b90915550505b8015612dea57612dea873083612251565b612df48186613841565b94505b612e02878787612251565b50505050505050565b6000612e1630611252565b90506000602054601e54601f54612e2d919061372c565b612e37919061372c565b90506000821580612e46575081155b15612e5057505050565b600f54831115612e6057600f5492505b6000600283601f5486612e739190613744565b612e7d9190613763565b612e879190613763565b90506000612e958286613841565b905047612ea182613083565b6000612ead8247613841565b905060006002601f54612ec09190613763565b612eca9088613841565b601e54612ed79084613744565b612ee19190613763565b905060006002601f54612ef49190613763565b612efe9089613841565b602054612f0b9085613744565b612f159190613763565b9050600081612f248486613841565b612f2e9190613841565b6000601f819055601e81905560208190556009546040519293506001600160a01b031691849181818185875af1925050503d8060008114612f8b576040519150601f19603f3d011682016040523d82523d6000602084013e612f90565b606091505b50506008546040519199506001600160a01b0316908490600081818185875af1925050503d8060008114612fe0576040519150601f19603f3d011682016040523d82523d6000602084013e612fe5565b606091505b50909850508615801590612ff95750600081115b1561304c5761300887826131d5565b601f54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b50505050505050505050565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130b8576130b86136aa565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613111573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061313591906137bb565b81600181518110613148576131486136aa565b6001600160a01b03928316602091820292909201015260065461316e91309116846123a6565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906131a79085906000908690309042906004016138e0565b600060405180830381600087803b1580156131c157600080fd5b505af1158015611da6573d6000803e3d6000fd5b6006546131ed9030906001600160a01b0316846123a6565b600654600b5460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261322d92309289926000928392169042906004016137d8565b60606040518083038185885af115801561324b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132709190613813565b5050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132b6576132b6613277565b604052919050565b600067ffffffffffffffff8211156132d8576132d8613277565b5060051b60200190565b6001600160a01b03811681146132f757600080fd5b50565b600082601f83011261330b57600080fd5b8135602061332061331b836132be565b61328d565b82815260059290921b8401810191818101908684111561333f57600080fd5b8286015b84811015613363578035613356816132e2565b8352918301918301613343565b509695505050505050565b60006020828403121561338057600080fd5b813567ffffffffffffffff81111561339757600080fd5b6133a3848285016132fa565b949350505050565b600060208083528351808285015260005b818110156133d8578581018301518582016040015282016133bc565b818111156133ea576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561341357600080fd5b823561341e816132e2565b946020939093013593505050565b60008060006060848603121561344157600080fd5b833561344c816132e2565b9250602084013561345c816132e2565b929592945050506040919091013590565b60006020828403121561347f57600080fd5b813561348a816132e2565b9392505050565b600080604083850312156134a457600080fd5b50508035926020909101359150565b6000602082840312156134c557600080fd5b5035919050565b80151581146132f757600080fd5b600080604083850312156134ed57600080fd5b82356134f8816132e2565b91506020830135613508816134cc565b809150509250929050565b60006020828403121561352557600080fd5b813561348a816134cc565b60008060006060848603121561354557600080fd5b8335613550816132e2565b925060208481013567ffffffffffffffff8082111561356e57600080fd5b61357a888389016132fa565b9450604087013591508082111561359057600080fd5b508501601f810187136135a257600080fd5b80356135b061331b826132be565b81815260059190911b820183019083810190898311156135cf57600080fd5b928401925b828410156135ed578335825292840192908401906135d4565b80955050505050509250925092565b60008060006060848603121561361157600080fd5b833561361c816132e2565b9250602084013561362c816132e2565b9150604084013561363c816132e2565b809150509250925092565b6000806040838503121561365a57600080fd5b8235613665816132e2565b91506020830135613508816132e2565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156136ea576136ea6136c0565b5060010190565b600181811c9082168061370557607f821691505b6020821081141561372657634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561373f5761373f6136c0565b500190565b600081600019048311821515161561375e5761375e6136c0565b500290565b60008261378057634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561379757600080fd5b5051919050565b6000602082840312156137b057600080fd5b815161348a816134cc565b6000602082840312156137cd57600080fd5b815161348a816132e2565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561382857600080fd5b8351925060208401519150604084015190509250925092565b600082821015613853576138536136c0565b500390565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139305784516001600160a01b03168352938301939183019160010161390b565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212201be613c8ba9b456edac3a860b37b39665e5e34d90ef67465f76c4186e063834d64736f6c634300080c00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x6080604052600436106103e85760003560e01c80638ea5220f11610208578063c15e0cc811610118578063e2f45605116100ab578063f2fde38b1161007a578063f2fde38b14610b72578063f5648a4f14610b92578063f637434214610ba7578063f8b45b0514610bbd578063f9f4e42414610bd357600080fd5b8063e2f4560514610b10578063ee40166e14610b26578063ef4f3c6b14610b3c578063f11a24d314610b5c57600080fd5b8063d0bc827f116100e7578063d0bc827f14610a75578063d28d885214610a95578063dd62ed3e14610aaa578063e0b3c73914610af057600080fd5b8063c15e0cc814610a05578063c480b4c614610a25578063c876d0b914610a45578063cf46f24c14610a5f57600080fd5b8063a0a2ccd91161019b578063b09f12661161016a578063b09f126614610966578063b14876381461097b578063b62496f51461099b578063bbc0c742146109cb578063c0246668146109e557600080fd5b8063a0a2ccd9146108fa578063a0d82dc514610910578063a457c2d714610926578063a9059cbb1461094657600080fd5b80639803fe80116101d75780639803fe801461088e5780639a7a23d6146108ae5780639c3b4fdc146108ce5780639fccce32146108e457600080fd5b80638ea5220f146108235780639213691314610843578063924de9b71461085957806395d89b411461087957600080fd5b806351f205e4116103035780637571336a1161029657806383722039116102655780638372203914610785578063875ea3cd146107a5578063878f33c9146107c557806387de3743146107e55780638da5cb5b1461080557600080fd5b80637571336a1461070f57806375f0a8741461072f57806378139a991461074f5780637bce5a041461076f57600080fd5b80636ddd1713116102d25780636ddd1713146106935780636ebcf607146106ad57806370a08231146106da578063715018a6146106fa57600080fd5b806351f205e41461060e578063522ca91a1461062357806353674ba6146106435780635f559fba1461066357600080fd5b80631f3fed8f1161037b578063395093511161034a57806339509351146105755780633fd16d1314610595578063452ed4f1146105b55780634fbee193146105d557600080fd5b80631f3fed8f1461050d57806323b872dd1461052357806327c8f83514610543578063313ce5671461055957600080fd5b80631698f2e8116103b75780631698f2e8146104a957806318160ddd146104cd5780631a8145bb146104e25780631d97b7cd146104f857600080fd5b8063067a2cf1146103f457806306fdde03146104165780630758d92414610441578063095ea7b31461047957600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b5061041461040f36600461336e565b610be9565b005b34801561042257600080fd5b5061042b610da5565b60405161043891906133ab565b60405180910390f35b34801561044d57600080fd5b50600654610461906001600160a01b031681565b6040516001600160a01b039091168152602001610438565b34801561048557600080fd5b50610499610494366004613400565b610e37565b6040519015158152602001610438565b3480156104b557600080fd5b506104bf60115481565b604051908152602001610438565b3480156104d957600080fd5b506002546104bf565b3480156104ee57600080fd5b506104bf601f5481565b34801561050457600080fd5b50610414610e4d565b34801561051957600080fd5b506104bf601e5481565b34801561052f57600080fd5b5061049961053e36600461342c565b610f01565b34801561054f57600080fd5b5061046161dead81565b34801561056557600080fd5b5060405160128152602001610438565b34801561058157600080fd5b50610499610590366004613400565b610fab565b3480156105a157600080fd5b50600b54610461906001600160a01b031681565b3480156105c157600080fd5b50600754610461906001600160a01b031681565b3480156105e157600080fd5b506104996105f036600461346d565b6001600160a01b031660009081526021602052604090205460ff1690565b34801561061a57600080fd5b50610414610fe7565b34801561062f57600080fd5b5061041461063e366004613491565b6110f0565b34801561064f57600080fd5b5061049961065e3660046134b3565b61118f565b34801561066f57600080fd5b5061049961067e36600461346d565b60226020526000908152604090205460ff1681565b34801561069f57600080fd5b506013546104999060ff1681565b3480156106b957600080fd5b506104bf6106c836600461346d565b60006020819052908152604090205481565b3480156106e657600080fd5b506104bf6106f536600461346d565b611252565b34801561070657600080fd5b5061041461126d565b34801561071b57600080fd5b5061041461072a3660046134da565b6112e1565b34801561073b57600080fd5b50600854610461906001600160a01b031681565b34801561075b57600080fd5b5061049961076a3660046134b3565b611336565b34801561077b57600080fd5b506104bf60175481565b34801561079157600080fd5b506104146107a0366004613491565b61136c565b3480156107b157600080fd5b506104146107c036600461346d565b61140b565b3480156107d157600080fd5b506104146107e036600461346d565b6114be565b3480156107f157600080fd5b506104146108003660046134b3565b6115cf565b34801561081157600080fd5b506005546001600160a01b0316610461565b34801561082f57600080fd5b50600954610461906001600160a01b031681565b34801561084f57600080fd5b506104bf601b5481565b34801561086557600080fd5b50610414610874366004613513565b6116a2565b34801561088557600080fd5b5061042b6116df565b34801561089a57600080fd5b506104146108a936600461346d565b6116ee565b3480156108ba57600080fd5b506104146108c93660046134da565b611803565b3480156108da57600080fd5b506104bf60195481565b3480156108f057600080fd5b506104bf60205481565b34801561090657600080fd5b506104bf60165481565b34801561091c57600080fd5b506104bf601d5481565b34801561093257600080fd5b50610499610941366004613400565b6118bb565b34801561095257600080fd5b50610499610961366004613400565b611954565b34801561097257600080fd5b5061042b611961565b34801561098757600080fd5b506104146109963660046134da565b6119ef565b3480156109a757600080fd5b506104996109b636600461346d565b60236020526000908152604090205460ff1681565b3480156109d757600080fd5b506010546104999060ff1681565b3480156109f157600080fd5b50610414610a003660046134da565b611daf565b348015610a1157600080fd5b50610414610a20366004613530565b611e04565b348015610a3157600080fd5b50600a54610461906001600160a01b031681565b348015610a5157600080fd5b506015546104999060ff1681565b348015610a6b57600080fd5b506104bf600d5481565b348015610a8157600080fd5b50610414610a903660046135fc565b611efe565b348015610aa157600080fd5b5061042b611f67565b348015610ab657600080fd5b506104bf610ac5366004613647565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610afc57600080fd5b50610414610b0b366004613513565b611f74565b348015610b1c57600080fd5b506104bf600f5481565b348015610b3257600080fd5b506104bf60125481565b348015610b4857600080fd5b50610414610b573660046134b3565b611fb1565b348015610b6857600080fd5b506104bf60185481565b348015610b7e57600080fd5b50610414610b8d36600461346d565b612088565b348015610b9e57600080fd5b50610414612173565b348015610bb357600080fd5b506104bf601c5481565b348015610bc957600080fd5b506104bf600e5481565b348015610bdf57600080fd5b506104bf601a5481565b6005546001600160a01b03163314610c1c5760405162461bcd60e51b8152600401610c1390613675565b60405180910390fd5b60005b8151811015610da157600a5482516001600160a01b0390911690839083908110610c4b57610c4b6136aa565b60200260200101516001600160a01b03161415610cb95760405162461bcd60e51b815260206004820152602660248201527f596f752063616e277420626c61636b6c6973742074686520726f75746572204160448201526564647265737360d01b6064820152608401610c13565b60075482516001600160a01b0390911690839083908110610cdc57610cdc6136aa565b60200260200101516001600160a01b03161415610d475760405162461bcd60e51b8152602060048201526024808201527f596f752063616e277420626c61636b6c697374207468652070616972206164646044820152637265737360e01b6064820152608401610c13565b600160256000848481518110610d5f57610d5f6136aa565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055610d9a816136d6565b9050610c1f565b5050565b606060038054610db4906136f1565b80601f0160208091040260200160405190810160405280929190818152602001828054610de0906136f1565b8015610e2d5780601f10610e0257610100808354040283529160200191610e2d565b820191906000526020600020905b815481529060010190602001808311610e1057829003601f168201915b5050505050905090565b6000610e443384846123a6565b50600192915050565b6005546001600160a01b03163314610e775760405162461bcd60e51b8152600401610c1390613675565b60105460ff1615610ede5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610c13565b60108054600160ff19918216811790925560138054909116909117905543601255565b6000610f0e8484846124ca565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f935760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c13565b610fa085338584036123a6565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610e44918590610fe290869061372c565b6123a6565b6005546001600160a01b031633146110115760405162461bcd60e51b8152600401610c1390613675565b600f5461101d30611252565b1015611093576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c13565b6007805460ff60a01b1916600160a01b1790556110ae612e0b565b6007805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461111a5760405162461bcd60e51b8152600401610c1390613675565b601e611126828461372c565b11156111745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b6565702066656573206c6f776572207468616e203330250000006044820152606401610c13565b60178290556018819055611188818361372c565b6016555050565b6005546000906001600160a01b031633146111bc5760405162461bcd60e51b8152600401610c1390613675565b6103e86111c860025490565b6111d3906005613744565b6111dd9190613763565b8211156112495760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610c13565b50600f55600190565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146112975760405162461bcd60e51b8152600401610c1390613675565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461130b5760405162461bcd60e51b8152600401610c1390613675565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546000906001600160a01b031633146113635760405162461bcd60e51b8152600401610c1390613675565b50601155600190565b6005546001600160a01b031633146113965760405162461bcd60e51b8152600401610c1390613675565b601e6113a2828461372c565b11156113f05760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b6565702066656573206c6f776572207468616e203330250000006044820152606401610c13565b601b829055601c819055611404818361372c565b601a555050565b6005546001600160a01b031633146114355760405162461bcd60e51b8152600401610c1390613675565b6001600160a01b03811660009081526025602052604090205460ff1661149d5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000006044820152606401610c13565b6001600160a01b03166000908152602560205260409020805460ff19169055565b6005546001600160a01b031633146114e85760405162461bcd60e51b8152600401610c1390613675565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611531573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115559190613785565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156115a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c9919061379e565b50505050565b6005546001600160a01b031633146115f95760405162461bcd60e51b8152600401610c1390613675565b60058110156116565760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610c13565b670de0b6b3a76400006103e88261166c60025490565b6116769190613744565b6116809190613763565b61168a9190613763565b61169c90670de0b6b3a7640000613744565b600e5550565b6005546001600160a01b031633146116cc5760405162461bcd60e51b8152600401610c1390613675565b6013805460ff1916911515919091179055565b606060048054610db4906136f1565b6005546001600160a01b031633146117185760405162461bcd60e51b8152600401610c1390613675565b600a546001600160a01b03828116911614156117765760405162461bcd60e51b815260206004820152601c60248201527f57652063616e206e6f7420626c61636b6c69737420726f757465722e000000006044820152606401610c13565b6007546001600160a01b03828116911614156117df5760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f7420626c61636b6c697374207061697220616464726573604482015261399760f11b6064820152608401610c13565b6001600160a01b03166000908152602560205260409020805460ff19166001179055565b6005546001600160a01b0316331461182d5760405162461bcd60e51b8152600401610c1390613675565b6007546001600160a01b03838116911614156118b15760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c13565b610da18282613058565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561193d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c13565b61194a33858584036123a6565b5060019392505050565b6000610e443384846124ca565b6004805461196e906136f1565b80601f016020809104026020016040519081016040528092919081815260200182805461199a906136f1565b80156119e75780601f106119bc576101008083540402835291602001916119e7565b820191906000526020600020905b8154815290600101906020018083116119ca57829003601f168201915b505050505081565b6005546001600160a01b03163314611a195760405162461bcd60e51b8152600401610c1390613675565b600a80546001600160a01b0384166001600160a01b0319918216811790925560068054909116821790556040805163c45a015560e01b81529051829163c45a01559160048281019260209291908290030181865afa158015611a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa391906137bb565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1491906137bb565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8591906137bb565b600780546001600160a01b0319166001600160a01b03929092169182179055611baf9060016112e1565b600754611bc6906001600160a01b03166001613058565b8115611daa5760004711611c285760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610c13565b6000611c3330611252565b11611c8f5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610c13565b600b546001600160a01b0316611cf65760405162461bcd60e51b815260206004820152602660248201527f4c69717569646974792072656365697665722073686f756c642062652073657460448201526508199a5c9cdd60d21b6064820152608401610c13565b600654611d119030906001600160a01b0316610fe282611252565b6006546001600160a01b031663f305d7194730611d2d81611252565b600b546040516001600160e01b031960e087901b168152611d6393929160009182916001600160a01b03169042906004016137d8565b60606040518083038185885af1158015611d81573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611da69190613813565b5050505b505050565b6005546001600160a01b03163314611dd95760405162461bcd60e51b8152600401610c1390613675565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611e2e5760405162461bcd60e51b8152600401610c1390613675565b60105460ff1615611e985760405162461bcd60e51b815260206004820152602e60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526d3a1030b4b9323937b81030ba369760911b6064820152608401610c13565b60005b60018351611ea99190613841565b81116115c957611eec84848381518110611ec557611ec56136aa565b6020026020010151848481518110611edf57611edf6136aa565b6020026020010151612251565b80611ef6816136d6565b915050611e9b565b6005546001600160a01b03163314611f285760405162461bcd60e51b8152600401610c1390613675565b600880546001600160a01b039485166001600160a01b031991821617909155600b80549385169382169390931790925560098054919093169116179055565b6003805461196e906136f1565b6005546001600160a01b03163314611f9e5760405162461bcd60e51b8152600401610c1390613675565b6015805460ff1916911515919091179055565b6005546001600160a01b03163314611fdb5760405162461bcd60e51b8152600401610c1390613675565b600581101561203c5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d617854786e416d6f756e74206c6f776572207468604482015266616e20302e352560c81b6064820152608401610c13565b670de0b6b3a76400006103e88261205260025490565b61205c9190613744565b6120669190613763565b6120709190613763565b61208290670de0b6b3a7640000613744565b600d5550565b6005546001600160a01b031633146120b25760405162461bcd60e51b8152600401610c1390613675565b6001600160a01b0381166121175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c13565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461219d5760405162461bcd60e51b8152600401610c1390613675565b60105460ff161561220f5760405162461bcd60e51b815260206004820152603660248201527f63616e2774207769746864726177204554482066726f6d20636f6e7472616374604482015275103130b630b731b29030b33a32b9103630bab731b41760511b6064820152608401610c13565b604051600090339047908381818185875af1925050503d80600081146115c9576040519150601f19603f3d011682016040523d82523d6000602084013e6115c9565b6001600160a01b0383166122775760405162461bcd60e51b8152600401610c1390613858565b6001600160a01b03821661229d5760405162461bcd60e51b8152600401610c139061389d565b6001600160a01b038316600090815260208190526040902054818110156123155760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c13565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061234c90849061372c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161239891815260200190565b60405180910390a350505050565b6001600160a01b0383166124085760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c13565b6001600160a01b0382166124695760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c13565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124f05760405162461bcd60e51b8152600401610c1390613858565b6001600160a01b0382166125165760405162461bcd60e51b8152600401610c139061389d565b6001600160a01b03821660009081526025602052604090205460ff16156125795760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610c13565b3260009081526025602052604090205460ff16156125d35760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610c13565b806125e457611daa83836000612251565b60105460ff16612672576001600160a01b03831660009081526021602052604090205460ff168061262d57506001600160a01b03821660009081526021602052604090205460ff165b6126725760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c13565b6005546001600160a01b0384811691161480159061269e57506005546001600160a01b03838116911614155b80156126b257506001600160a01b03821615155b80156126c957506001600160a01b03821661dead14155b80156126df5750600754600160a01b900460ff16155b801561270457506001600160a01b03821660009081526021602052604090205460ff16155b801561272957506001600160a01b03831660009081526021602052604090205460ff16155b15612a785760155460ff1615612842576006546001600160a01b0383811691161480159061276557506007546001600160a01b03838116911614155b1561284257612775600143613841565b326000908152601460205260409020541080156127b35750612798600143613841565b6001600160a01b038316600090815260146020526040902054105b61281d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c13565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526023602052604090205460ff16801561288357506001600160a01b03821660009081526022602052604090205460ff16155b1561294f57600d548111156128f05760405162461bcd60e51b815260206004820152602d60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526c36b0bc2a3c3720b6b7bab73a1760991b6064820152608401610c13565b600e546128fc83611252565b612906908361372c565b111561294a5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c13565b612a78565b6001600160a01b03821660009081526023602052604090205460ff16801561299057506001600160a01b03831660009081526022602052604090205460ff16155b156129fe57600d5481111561294a5760405162461bcd60e51b815260206004820152602e60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526d1036b0bc2a3c3720b6b7bab73a1760911b6064820152608401610c13565b6001600160a01b03821660009081526022602052604090205460ff16612a7857600e54612a2a83611252565b612a34908361372c565b1115612a785760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c13565b6000612a8330611252565b600f5490915081108015908190612a9c575060135460ff165b8015612ab25750600754600160a01b900460ff16155b8015612ad757506001600160a01b03851660009081526023602052604090205460ff16155b8015612afb57506001600160a01b03841660009081526023602052604090205460ff165b8015612b2057506001600160a01b03851660009081526021602052604090205460ff16155b8015612b4557506001600160a01b03841660009081526021602052604090205460ff16155b15612b73576007805460ff60a01b1916600160a01b179055612b65612e0b565b6007805460ff60a01b191690555b6007546001600160a01b03861660009081526021602052604090205460ff600160a01b909204821615911680612bc157506001600160a01b03851660009081526021602052604090205460ff165b15612bca575060005b60008115612df757601154612bdf9043613841565b60125410158015612c0857506001600160a01b03871660009081526023602052604090205460ff165b15612cbd576064612c1a86605a613744565b612c249190613763565b9050601a54601c5482612c379190613744565b612c419190613763565b601f6000828254612c52919061372c565b9091555050601a54601b54612c679083613744565b612c719190613763565b601e6000828254612c82919061372c565b9091555050601a54601d54612c979083613744565b612ca19190613763565b60206000828254612cb2919061372c565b90915550612dd99050565b6001600160a01b03861660009081526023602052604090205460ff168015612ce757506000601a54115b15612cfc576064601a5486612c1a9190613744565b6001600160a01b03871660009081526023602052604090205460ff168015612d2657506000601654115b15612dd957606460165486612d3b9190613744565b612d459190613763565b905060165460185482612d589190613744565b612d629190613763565b601f6000828254612d73919061372c565b9091555050601654601754612d889083613744565b612d929190613763565b601e6000828254612da3919061372c565b9091555050601654601954612db89083613744565b612dc29190613763565b60206000828254612dd3919061372c565b90915550505b8015612dea57612dea873083612251565b612df48186613841565b94505b612e02878787612251565b50505050505050565b6000612e1630611252565b90506000602054601e54601f54612e2d919061372c565b612e37919061372c565b90506000821580612e46575081155b15612e5057505050565b600f54831115612e6057600f5492505b6000600283601f5486612e739190613744565b612e7d9190613763565b612e879190613763565b90506000612e958286613841565b905047612ea182613083565b6000612ead8247613841565b905060006002601f54612ec09190613763565b612eca9088613841565b601e54612ed79084613744565b612ee19190613763565b905060006002601f54612ef49190613763565b612efe9089613841565b602054612f0b9085613744565b612f159190613763565b9050600081612f248486613841565b612f2e9190613841565b6000601f819055601e81905560208190556009546040519293506001600160a01b031691849181818185875af1925050503d8060008114612f8b576040519150601f19603f3d011682016040523d82523d6000602084013e612f90565b606091505b50506008546040519199506001600160a01b0316908490600081818185875af1925050503d8060008114612fe0576040519150601f19603f3d011682016040523d82523d6000602084013e612fe5565b606091505b50909850508615801590612ff95750600081115b1561304c5761300887826131d5565b601f54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b50505050505050505050565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130b8576130b86136aa565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613111573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061313591906137bb565b81600181518110613148576131486136aa565b6001600160a01b03928316602091820292909201015260065461316e91309116846123a6565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906131a79085906000908690309042906004016138e0565b600060405180830381600087803b1580156131c157600080fd5b505af1158015611da6573d6000803e3d6000fd5b6006546131ed9030906001600160a01b0316846123a6565b600654600b5460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261322d92309289926000928392169042906004016137d8565b60606040518083038185885af115801561324b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132709190613813565b5050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132b6576132b6613277565b604052919050565b600067ffffffffffffffff8211156132d8576132d8613277565b5060051b60200190565b6001600160a01b03811681146132f757600080fd5b50565b600082601f83011261330b57600080fd5b8135602061332061331b836132be565b61328d565b82815260059290921b8401810191818101908684111561333f57600080fd5b8286015b84811015613363578035613356816132e2565b8352918301918301613343565b509695505050505050565b60006020828403121561338057600080fd5b813567ffffffffffffffff81111561339757600080fd5b6133a3848285016132fa565b949350505050565b600060208083528351808285015260005b818110156133d8578581018301518582016040015282016133bc565b818111156133ea576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561341357600080fd5b823561341e816132e2565b946020939093013593505050565b60008060006060848603121561344157600080fd5b833561344c816132e2565b9250602084013561345c816132e2565b929592945050506040919091013590565b60006020828403121561347f57600080fd5b813561348a816132e2565b9392505050565b600080604083850312156134a457600080fd5b50508035926020909101359150565b6000602082840312156134c557600080fd5b5035919050565b80151581146132f757600080fd5b600080604083850312156134ed57600080fd5b82356134f8816132e2565b91506020830135613508816134cc565b809150509250929050565b60006020828403121561352557600080fd5b813561348a816134cc565b60008060006060848603121561354557600080fd5b8335613550816132e2565b925060208481013567ffffffffffffffff8082111561356e57600080fd5b61357a888389016132fa565b9450604087013591508082111561359057600080fd5b508501601f810187136135a257600080fd5b80356135b061331b826132be565b81815260059190911b820183019083810190898311156135cf57600080fd5b928401925b828410156135ed578335825292840192908401906135d4565b80955050505050509250925092565b60008060006060848603121561361157600080fd5b833561361c816132e2565b9250602084013561362c816132e2565b9150604084013561363c816132e2565b809150509250925092565b6000806040838503121561365a57600080fd5b8235613665816132e2565b91506020830135613508816132e2565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156136ea576136ea6136c0565b5060010190565b600181811c9082168061370557607f821691505b6020821081141561372657634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561373f5761373f6136c0565b500190565b600081600019048311821515161561375e5761375e6136c0565b500290565b60008261378057634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561379757600080fd5b5051919050565b6000602082840312156137b057600080fd5b815161348a816134cc565b6000602082840312156137cd57600080fd5b815161348a816132e2565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561382857600080fd5b8351925060208401519150604084015190509250925092565b600082821015613853576138536136c0565b500390565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139305784516001600160a01b03168352938301939183019160010161390b565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212201be613c8ba9b456edac3a860b37b39665e5e34d90ef67465f76c4186e063834d64736f6c634300080c0033

Deployed Bytecode Sourcemap

7211:17515:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24128:389;;;;;;;;;;-1:-1:-1;24128:389:0;;;;;:::i;:::-;;:::i;:::-;;1712:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7251:27;;;;;;;;;;-1:-1:-1;7251:27:0;;;;-1:-1:-1;;;;;7251:27:0;;;;;;-1:-1:-1;;;;;2629:32:1;;;2611:51;;2599:2;2584:18;7251:27:0;2447:221:1;2612:169:0;;;;;;;;;;-1:-1:-1;2612:169:0;;;;;:::i;:::-;;:::i;:::-;;;3158:14:1;;3151:22;3133:41;;3121:2;3106:18;2612:169:0;2993:187:1;7804:24:0;;;;;;;;;;;;;;;;;;;3331:25:1;;;3319:2;3304:18;7804:24:0;3185:177:1;2027:108:0;;;;;;;;;;-1:-1:-1;2115:12:0;;2027:108;;8437:33;;;;;;;;;;;;;;;;22907:272;;;;;;;;;;;;;:::i;8397:33::-;;;;;;;;;;;;;;;;2787:488;;;;;;;;;;-1:-1:-1;2787:488:0;;;;;:::i;:::-;;:::i;7313:53::-;;;;;;;;;;;;7359:6;7313:53;;1928:93;;;;;;;;;;-1:-1:-1;1928:93:0;;2011:2;4178:36:1;;4166:2;4151:18;1928:93:0;4036:184:1;3281:215:0;;;;;;;;;;-1:-1:-1;3281:215:0;;;;;:::i;:::-;;:::i;7504:32::-;;;;;;;;;;-1:-1:-1;7504:32:0;;;;-1:-1:-1;;;;;7504:32:0;;;7285:21;;;;;;;;;;-1:-1:-1;7285:21:0;;;;-1:-1:-1;;;;;7285:21:0;;;13396:125;;;;;;;;;;-1:-1:-1;13396:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;13485:28:0;13461:4;13485:28;;;:19;:28;;;;;;;;;13396:125;21059:312;;;;;;;;;;;;;:::i;12028:305::-;;;;;;;;;;-1:-1:-1;12028:305:0;;;;;:::i;:::-;;:::i;10907:261::-;;;;;;;;;;-1:-1:-1;10907:261:0;;;;;:::i;:::-;;:::i;8627:56::-;;;;;;;;;;-1:-1:-1;8627:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7879:31;;;;;;;;;;-1:-1:-1;7879:31:0;;;;;;;;1476:44;;;;;;;;;;-1:-1:-1;1476:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;2141:127;;;;;;;;;;-1:-1:-1;2141:127:0;;;;;:::i;:::-;;:::i;5737:150::-;;;;;;;;;;;;;:::i;11729:136::-;;;;;;;;;;-1:-1:-1;11729:136:0;;;;;:::i;:::-;;:::i;7401:30::-;;;;;;;;;;-1:-1:-1;7401:30:0;;;;-1:-1:-1;;;;;7401:30:0;;;23722:125;;;;;;;;;;-1:-1:-1;23722:125:0;;;;;:::i;:::-;;:::i;8137:30::-;;;;;;;;;;;;;;;;12339:311;;;;;;;;;;-1:-1:-1;12339:311:0;;;;;:::i;:::-;;:::i;24523:200::-;;;;;;;;;;-1:-1:-1;24523:200:0;;;;;:::i;:::-;;:::i;23487:229::-;;;;;;;;;;-1:-1:-1;23487:229:0;;;;;:::i;:::-;;:::i;11449:268::-;;;;;;;;;;-1:-1:-1;11449:268:0;;;;;:::i;:::-;;:::i;5527:79::-;;;;;;;;;;-1:-1:-1;5592:6:0;;-1:-1:-1;;;;;5592:6:0;5527:79;;7438:24;;;;;;;;;;-1:-1:-1;7438:24:0;;;;-1:-1:-1;;;;;7438:24:0;;;8283:31;;;;;;;;;;;;;;;;11921:101;;;;;;;;;;-1:-1:-1;11921:101:0;;;;;:::i;:::-;;:::i;1818:104::-;;;;;;;;;;;;;:::i;23853:269::-;;;;;;;;;;-1:-1:-1;23853:269:0;;;;;:::i;:::-;;:::i;12798:237::-;;;;;;;;;;-1:-1:-1;12798:237:0;;;;;:::i;:::-;;:::i;8211:24::-;;;;;;;;;;;;;;;;8477:27;;;;;;;;;;;;;;;;8103;;;;;;;;;;;;;;;;8359:25;;;;;;;;;;;;;;;;3502:411;;;;;;;;;;-1:-1:-1;3502:411:0;;;;;:::i;:::-;;:::i;2274:175::-;;;;;;;;;;-1:-1:-1;2274:175:0;;;;;:::i;:::-;;:::i;1662:21::-;;;;;;;;;;;;;:::i;21378:1209::-;;;;;;;;;;-1:-1:-1;21378:1209:0;;;;;:::i;:::-;;:::i;8780:58::-;;;;;;;;;;-1:-1:-1;8780:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7764:33;;;;;;;;;;-1:-1:-1;7764:33:0;;;;;;;;12658:132;;;;;;;;;;-1:-1:-1;12658:132:0;;;;;:::i;:::-;;:::i;22593:308::-;;;;;;;;;;-1:-1:-1;22593:308:0;;;;;:::i;:::-;;:::i;7469:28::-;;;;;;;;;;-1:-1:-1;7469:28:0;;;;-1:-1:-1;;;;;7469:28:0;;;8036:40;;;;;;;;;;-1:-1:-1;8036:40:0;;;;;;;;7633:27;;;;;;;;;;;;;;;;13177:213;;;;;;;;;;-1:-1:-1;13177:213:0;;;;;:::i;:::-;;:::i;1636:19::-;;;;;;;;;;;;;:::i;2455:151::-;;;;;;;;;;-1:-1:-1;2455:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;2571:18:0;;;2544:7;2571:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2455:151;10788:107;;;;;;;;;;-1:-1:-1;10788:107:0;;;;;:::i;:::-;;:::i;7698:33::-;;;;;;;;;;;;;;;;7835:37;;;;;;;;;;;;;;;;11174:267;;;;;;;;;;-1:-1:-1;11174:267:0;;;;;:::i;:::-;;:::i;8174:30::-;;;;;;;;;;;;;;;;5893:246;;;;;;;;;;-1:-1:-1;5893:246:0;;;;;:::i;:::-;;:::i;23229:252::-;;;;;;;;;;;;;:::i;8321:31::-;;;;;;;;;;;;;;;;7667:24;;;;;;;;;;;;;;;;8248:28;;;;;;;;;;;;;;;;24128:389;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;;;;;;;;;24226:9:::1;24221:289;24241:9;:16;24237:1;:20;24221:289;;;24303:13;::::0;24287:12;;-1:-1:-1;;;;;24303:13:0;;::::1;::::0;24287:9;;24297:1;;24287:12;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;24287:29:0::1;;;24279:80;;;::::0;-1:-1:-1;;;24279:80:0;;8571:2:1;24279:80:0::1;::::0;::::1;8553:21:1::0;8610:2;8590:18;;;8583:30;8649:34;8629:18;;;8622:62;-1:-1:-1;;;8700:18:1;;;8693:36;8746:19;;24279:80:0::1;8369:402:1::0;24279:80:0::1;24398:6;::::0;24382:12;;-1:-1:-1;;;;;24398:6:0;;::::1;::::0;24382:9;;24392:1;;24382:12;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;24382:22:0::1;;;24374:71;;;::::0;-1:-1:-1;;;24374:71:0;;8978:2:1;24374:71:0::1;::::0;::::1;8960:21:1::0;9017:2;8997:18;;;8990:30;9056:34;9036:18;;;9029:62;-1:-1:-1;;;9107:18:1;;;9100:34;9151:19;;24374:71:0::1;8776:400:1::0;24374:71:0::1;24494:4;24460:17;:31;24478:9;24488:1;24478:12;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;24460:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;24460:31:0;:38;;-1:-1:-1;;24460:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24259:3:::1;::::0;::::1;:::i;:::-;;;24221:289;;;;24128:389:::0;:::o;1712:100::-;1766:13;1799:5;1792:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1712:100;:::o;2612:169::-;2695:4;2712:39;171:10;2735:7;2744:6;2712:8;:39::i;:::-;-1:-1:-1;2769:4:0;2612:169;;;;:::o;22907:272::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;22971:13:::1;::::0;::::1;;22970:14;22962:70;;;::::0;-1:-1:-1;;;22962:70:0;;10040:2:1;22962:70:0::1;::::0;::::1;10022:21:1::0;10079:2;10059:18;;;10052:30;10118:34;10098:18;;;10091:62;-1:-1:-1;;;10169:18:1;;;10162:41;10220:19;;22962:70:0::1;9838:407:1::0;22962:70:0::1;23078:13;:20:::0;;23094:4:::1;-1:-1:-1::0;;23078:20:0;;::::1;::::0;::::1;::::0;;;23109:11:::1;:18:::0;;;;::::1;::::0;;::::1;::::0;;23159:12:::1;23138:18;:33:::0;22907:272::o;2787:488::-;2927:4;2944:36;2954:6;2962:9;2973:6;2944:9;:36::i;:::-;-1:-1:-1;;;;;3018:19:0;;2991:24;3018:19;;;:11;:19;;;;;;;;171:10;3018:33;;;;;;;;3070:26;;;;3062:79;;;;-1:-1:-1;;;3062:79:0;;10452:2:1;3062:79:0;;;10434:21:1;10491:2;10471:18;;;10464:30;10530:34;10510:18;;;10503:62;-1:-1:-1;;;10581:18:1;;;10574:38;10629:19;;3062:79:0;10250:404:1;3062:79:0;3177:57;3186:6;171:10;3227:6;3208:16;:25;3177:8;:57::i;:::-;-1:-1:-1;3263:4:0;;2787:488;-1:-1:-1;;;;2787:488:0:o;3281:215::-;171:10;3369:4;3418:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3418:34:0;;;;;;;;;;3369:4;;3386:80;;3409:7;;3418:47;;3455:10;;3418:47;:::i;:::-;3386:8;:80::i;21059:312::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;21150:18:::1;;21122:24;21140:4;21122:9;:24::i;:::-;:46;;21114:123;;;::::0;;-1:-1:-1;;;21114:123:0;;10994:2:1;21114:123:0::1;::::0;::::1;10976:21:1::0;11013:18;;;11006:30;;;;11072:34;11052:18;;;11045:62;11143:34;11123:18;;;11116:62;11195:19;;21114:123:0::1;10792:428:1::0;21114:123:0::1;21248:8;:15:::0;;-1:-1:-1;;;;21248:15:0::1;-1:-1:-1::0;;;21248:15:0::1;::::0;;21274:10:::1;:8;:10::i;:::-;21295:8;:16:::0;;-1:-1:-1;;;;21295:16:0::1;::::0;;21327:36:::1;::::0;21347:15:::1;3331:25:1::0;;21327:36:0::1;::::0;3319:2:1;3304:18;21327:36:0::1;;;;;;;21059:312::o:0;12028:305::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;12152:2:::1;12126:21;12137:10:::0;12126;:21:::1;:::i;:::-;12125:29;;12117:71;;;::::0;-1:-1:-1;;;12117:71:0;;11427:2:1;12117:71:0::1;::::0;::::1;11409:21:1::0;11466:2;11446:18;;;11439:30;11505:31;11485:18;;;11478:59;11554:18;;12117:71:0::1;11225:353:1::0;12117:71:0::1;12199:15;:28:::0;;;12238:15:::1;:28:::0;;;12292:33:::1;12256:10:::0;12217;12292:33:::1;:::i;:::-;12277:12;:48:::0;-1:-1:-1;;12028:305:0:o;10907:261::-;5652:6;;10979:4;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;11036:4:::1;11016:13;2115:12:::0;;;2027:108;11016:13:::1;:17;::::0;11032:1:::1;11016:17;:::i;:::-;:24;;;;:::i;:::-;11003:9;:37;;10995:102;;;::::0;-1:-1:-1;;;10995:102:0;;12180:2:1;10995:102:0::1;::::0;::::1;12162:21:1::0;12219:2;12199:18;;;12192:30;12258:34;12238:18;;;12231:62;-1:-1:-1;;;12309:18:1;;;12302:50;12369:19;;10995:102:0::1;11978:416:1::0;10995:102:0::1;-1:-1:-1::0;11108:18:0::1;:30:::0;11156:4:::1;::::0;10907:261::o;2141:127::-;-1:-1:-1;;;;;2242:18:0;2215:7;2242:18;;;;;;;;;;;;2141:127::o;5737:150::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;5830:6:::1;::::0;5809:40:::1;::::0;5846:1:::1;::::0;-1:-1:-1;;;;;5830:6:0::1;::::0;5809:40:::1;::::0;5846:1;;5809:40:::1;5860:6;:19:::0;;-1:-1:-1;;;;;;5860:19:0::1;::::0;;5737:150::o;11729:136::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11819:31:0;;;::::1;;::::0;;;:23:::1;:31;::::0;;;;:38;;-1:-1:-1;;11819:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11729:136::o;23722:125::-;5652:6;;23791:4;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;-1:-1:-1;23807:7:0::1;:10:::0;23835:4:::1;::::0;23722:125::o;12339:311::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;12464:2:::1;12438:21;12449:10:::0;12438;:21:::1;:::i;:::-;12437:29;;12429:71;;;::::0;-1:-1:-1;;;12429:71:0;;11427:2:1;12429:71:0::1;::::0;::::1;11409:21:1::0;11466:2;11446:18;;;11439:30;11505:31;11485:18;;;11478:59;11554:18;;12429:71:0::1;11225:353:1::0;12429:71:0::1;12511:16;:29:::0;;;12551:16:::1;:29:::0;;;12607:35:::1;12570:10:::0;12530;12607:35:::1;:::i;:::-;12591:13;:51:::0;-1:-1:-1;;12339:311:0:o;24523:200::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24613:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;24605:65;;;::::0;-1:-1:-1;;;24605:65:0;;12601:2:1;24605:65:0::1;::::0;::::1;12583:21:1::0;12640:2;12620:18;;;12613:30;12679:28;12659:18;;;12652:56;12725:18;;24605:65:0::1;12399:350:1::0;24605:65:0::1;-1:-1:-1::0;;;;;24681:26:0::1;24710:5;24681:26:::0;;;:17:::1;:26;::::0;;;;:34;;-1:-1:-1;;24681:34:0::1;::::0;;24523:200::o;23487:229::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;23618:31:::1;::::0;-1:-1:-1;;;23618:31:0;;23643:4:::1;23618:31;::::0;::::1;2611:51:1::0;23580:4:0;;23557:13:::1;::::0;-1:-1:-1;;;;;23618:16:0;::::1;::::0;::::1;::::0;2584:18:1;;23618:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23660:48;::::0;-1:-1:-1;;;23660:48:0;;23684:10:::1;23660:48;::::0;::::1;13117:51:1::0;13184:18;;;13177:34;;;23596:53:0;;-1:-1:-1;;;;;;23660:15:0;::::1;::::0;::::1;::::0;13090:18:1;;23660:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23546:170;;23487:229:::0;:::o;11449:268::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;11595:1:::1;11585:6;:11;;11577:60;;;::::0;-1:-1:-1;;;11577:60:0;;13674:2:1;11577:60:0::1;::::0;::::1;13656:21:1::0;13713:2;13693:18;;;13686:30;13752:34;13732:18;;;13725:62;-1:-1:-1;;;13803:18:1;;;13796:34;13847:19;;11577:60:0::1;13472:400:1::0;11577:60:0::1;11693:4;11687;11678:6;11662:13;2115:12:::0;;;2027:108;11662:13:::1;:22;;;;:::i;:::-;:29;;;;:::i;:::-;11661:36;;;;:::i;:::-;11660:49;::::0;11702:6:::1;11660:49;:::i;:::-;11648:9;:61:::0;-1:-1:-1;11449:268:0:o;11921:101::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;11993:11:::1;:21:::0;;-1:-1:-1;;11993:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11921:101::o;1818:104::-;1874:13;1907:7;1900:14;;;;;:::i;23853:269::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;23949:13:::1;::::0;-1:-1:-1;;;;;23938:24:0;;::::1;23949:13:::0;::::1;23938:24;;23930:65;;;::::0;-1:-1:-1;;;23930:65:0;;14079:2:1;23930:65:0::1;::::0;::::1;14061:21:1::0;14118:2;14098:18;;;14091:30;14157;14137:18;;;14130:58;14205:18;;23930:65:0::1;13877:352:1::0;23930:65:0::1;24025:6;::::0;-1:-1:-1;;;;;24014:17:0;;::::1;24025:6:::0;::::1;24014:17;;24006:64;;;::::0;-1:-1:-1;;;24006:64:0;;14436:2:1;24006:64:0::1;::::0;::::1;14418:21:1::0;14475:2;14455:18;;;14448:30;14514:34;14494:18;;;14487:62;-1:-1:-1;;;14565:18:1;;;14558:32;14607:19;;24006:64:0::1;14234:398:1::0;24006:64:0::1;-1:-1:-1::0;;;;;24081:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;24081:33:0::1;24110:4;24081:33;::::0;;23853:269::o;12798:237::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;12905:6:::1;::::0;-1:-1:-1;;;;;12897:14:0;;::::1;12905:6:::0;::::1;12897:14;;12889:84;;;::::0;-1:-1:-1;;;12889:84:0;;14839:2:1;12889:84:0::1;::::0;::::1;14821:21:1::0;14878:2;14858:18;;;14851:30;14917:34;14897:18;;;14890:62;14988:27;14968:18;;;14961:55;15033:19;;12889:84:0::1;14637:421:1::0;12889:84:0::1;12986:41;13015:4;13021:5;12986:28;:41::i;3502:411::-:0;171:10;3595:4;3639:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3639:34:0;;;;;;;;;;3692:35;;;;3684:85;;;;-1:-1:-1;;;3684:85:0;;15265:2:1;3684:85:0;;;15247:21:1;15304:2;15284:18;;;15277:30;15343:34;15323:18;;;15316:62;-1:-1:-1;;;15394:18:1;;;15387:35;15439:19;;3684:85:0;15063:401:1;3684:85:0;3805:67;171:10;3828:7;3856:15;3837:16;:34;3805:8;:67::i;:::-;-1:-1:-1;3901:4:0;;3502:411;-1:-1:-1;;;3502:411:0:o;2274:175::-;2360:4;2377:42;171:10;2401:9;2412:6;2377:9;:42::i;1662:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21378:1209::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;21487:13:::1;:23:::0;;-1:-1:-1;;;;;21487:23:0;::::1;-1:-1:-1::0;;;;;;21487:23:0;;::::1;::::0;::::1;::::0;;;21607:9:::1;:22:::0;;;;::::1;::::0;::::1;::::0;;21685:20:::1;::::0;;-1:-1:-1;;;21685:20:0;;;;21487:23;;21685:18:::1;::::0;-1:-1:-1;21685:20:0;;::::1;::::0;::::1;::::0;;;;;;;;21487:23;21685:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21673:44:0::1;;21726:4;21733:10;-1:-1:-1::0;;;;;21733:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21673:78;::::0;-1:-1:-1;;;;;;21673:78:0::1;::::0;;;;;;-1:-1:-1;;;;;15955:15:1;;;21673:78:0::1;::::0;::::1;15937:34:1::0;16007:15;;15987:18;;;15980:43;15872:18;;21673:78:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21664:6;:87:::0;;-1:-1:-1;;;;;;21664:87:0::1;-1:-1:-1::0;;;;;21664:87:0;;;::::1;::::0;;::::1;::::0;;21762:48:::1;::::0;-1:-1:-1;21762:25:0::1;:48::i;:::-;21858:6;::::0;21821:51:::1;::::0;-1:-1:-1;;;;;21858:6:0::1;::::0;21821:28:::1;:51::i;:::-;21892:7;21889:691;;;21981:1;21957:21;:25;21949:73;;;::::0;-1:-1:-1;;;21949:73:0;;16236:2:1;21949:73:0::1;::::0;::::1;16218:21:1::0;16275:2;16255:18;;;16248:30;16314:34;16294:18;;;16287:62;-1:-1:-1;;;16365:18:1;;;16358:33;16408:19;;21949:73:0::1;16034:399:1::0;21949:73:0::1;22072:1;22045:24;22063:4;22045:9;:24::i;:::-;:28;22037:79;;;::::0;-1:-1:-1;;;22037:79:0;;16640:2:1;22037:79:0::1;::::0;::::1;16622:21:1::0;16679:2;16659:18;;;16652:30;16718:34;16698:18;;;16691:62;-1:-1:-1;;;16769:18:1;;;16762:36;16815:19;;22037:79:0::1;16438:402:1::0;22037:79:0::1;22139:17;::::0;-1:-1:-1;;;;;22139:17:0::1;22131:81;;;::::0;-1:-1:-1;;;22131:81:0;;17047:2:1;22131:81:0::1;::::0;::::1;17029:21:1::0;17086:2;17066:18;;;17059:30;17125:34;17105:18;;;17098:62;-1:-1:-1;;;17176:18:1;;;17169:36;17222:19;;22131:81:0::1;16845:402:1::0;22131:81:0::1;22259:9;::::0;22227:69:::1;::::0;22244:4:::1;::::0;-1:-1:-1;;;;;22259:9:0::1;22271:24;22244:4:::0;22271:9:::1;:24::i;22227:69::-;22311:9;::::0;-1:-1:-1;;;;;22311:9:0::1;:25;22344:21;22393:4;22417:24;22393:4:::0;22417:9:::1;:24::i;:::-;22502:17;::::0;22311:257:::1;::::0;-1:-1:-1;;;;;;22311:257:0::1;::::0;;;;;;::::1;::::0;;;22460:1:::1;::::0;;;-1:-1:-1;;;;;22502:17:0::1;::::0;22538:15:::1;::::0;22311:257:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21889:691;21446:1141;21378:1209:::0;;:::o;12658:132::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12743:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:39;;-1:-1:-1;;12743:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12658:132::o;22593:308::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;22711:13:::1;::::0;::::1;;22710:14;22702:73;;;::::0;-1:-1:-1;;;22702:73:0;;18377:2:1;22702:73:0::1;::::0;::::1;18359:21:1::0;18416:2;18396:18;;;18389:30;18455:34;18435:18;;;18428:62;-1:-1:-1;;;18506:18:1;;;18499:44;18560:19;;22702:73:0::1;18175:410:1::0;22702:73:0::1;22790:9;22786:108;22818:1;22808:2;:9;:11;;;;:::i;:::-;22804:1;:15;22786:108;;22839:43;22863:4;22869:2;22872:1;22869:5;;;;;;;;:::i;:::-;;;;;;;22875:3;22879:1;22875:6;;;;;;;;:::i;:::-;;;;;;;22839:15;:43::i;:::-;22820:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22786:108;;13177:213:::0;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;13286:15:::1;:28:::0;;-1:-1:-1;;;;;13286:28:0;;::::1;-1:-1:-1::0;;;;;;13286:28:0;;::::1;;::::0;;;13325:17:::1;:30:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;13366:9:::1;:16:::0;;;;;::::1;::::0;::::1;;::::0;;13177:213::o;1636:19::-;;;;;;;:::i;10788:107::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;10859:20:::1;:28:::0;;-1:-1:-1;;10859:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10788:107::o;11174:267::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;11313:1:::1;11303:6;:11;;11295:63;;;::::0;-1:-1:-1;;;11295:63:0;;18922:2:1;11295:63:0::1;::::0;::::1;18904:21:1::0;18961:2;18941:18;;;18934:30;19000:34;18980:18;;;18973:62;-1:-1:-1;;;19051:18:1;;;19044:37;19098:19;;11295:63:0::1;18720:403:1::0;11295:63:0::1;11417:4;11411;11402:6;11386:13;2115:12:::0;;;2027:108;11386:13:::1;:22;;;;:::i;:::-;:29;;;;:::i;:::-;11385:36;;;;:::i;:::-;11384:49;::::0;11426:6:::1;11384:49;:::i;:::-;11369:12;:64:::0;-1:-1:-1;11174:267:0:o;5893:246::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5984:22:0;::::1;5976:73;;;::::0;-1:-1:-1;;;5976:73:0;;19330:2:1;5976:73:0::1;::::0;::::1;19312:21:1::0;19369:2;19349:18;;;19342:30;19408:34;19388:18;;;19381:62;-1:-1:-1;;;19459:18:1;;;19452:36;19505:19;;5976:73:0::1;19128:402:1::0;5976:73:0::1;6086:6;::::0;6065:38:::1;::::0;-1:-1:-1;;;;;6065:38:0;;::::1;::::0;6086:6:::1;::::0;6065:38:::1;::::0;6086:6:::1;::::0;6065:38:::1;6114:6;:17:::0;;-1:-1:-1;;;;;;6114:17:0::1;-1:-1:-1::0;;;;;6114:17:0;;;::::1;::::0;;;::::1;::::0;;5893:246::o;23229:252::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;23296:13:::1;::::0;::::1;;23295:14;23287:81;;;::::0;-1:-1:-1;;;23287:81:0;;19737:2:1;23287:81:0::1;::::0;::::1;19719:21:1::0;19776:2;19756:18;;;19749:30;19815:34;19795:18;;;19788:62;-1:-1:-1;;;19866:18:1;;;19859:52;19928:19;;23287:81:0::1;19535:418:1::0;23287:81:0::1;23415:58;::::0;23379:12:::1;::::0;23423:10:::1;::::0;23447:21:::1;::::0;23379:12;23415:58;23379:12;23415:58;23447:21;23423:10;23415:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3919:610:::0;-1:-1:-1;;;;;4059:20:0;;4051:70;;;;-1:-1:-1;;;4051:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4140:23:0;;4132:71;;;;-1:-1:-1;;;4132:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4238:17:0;;4214:21;4238:17;;;;;;;;;;;4274:23;;;;4266:74;;;;-1:-1:-1;;;4266:74:0;;21180:2:1;4266:74:0;;;21162:21:1;21219:2;21199:18;;;21192:30;21258:34;21238:18;;;21231:62;-1:-1:-1;;;21309:18:1;;;21302:36;21355:19;;4266:74:0;20978:402:1;4266:74:0;-1:-1:-1;;;;;4376:17:0;;;:9;:17;;;;;;;;;;;4396:22;;;4376:42;;4440:20;;;;;;;;:30;;4412:6;;4376:9;4440:30;;4412:6;;4440:30;:::i;:::-;;;;;;;;4503:9;-1:-1:-1;;;;;4486:35:0;4495:6;-1:-1:-1;;;;;4486:35:0;;4514:6;4486:35;;;;3331:25:1;;3319:2;3304:18;;3185:177;4486:35:0;;;;;;;;4040:489;3919:610;;;:::o;4830:378::-;-1:-1:-1;;;;;4966:19:0;;4958:68;;;;-1:-1:-1;;;4958:68:0;;21587:2:1;4958:68:0;;;21569:21:1;21626:2;21606:18;;;21599:30;21665:34;21645:18;;;21638:62;-1:-1:-1;;;21716:18:1;;;21709:34;21760:19;;4958:68:0;21385:400:1;4958:68:0;-1:-1:-1;;;;;5045:21:0;;5037:68;;;;-1:-1:-1;;;5037:68:0;;21992:2:1;5037:68:0;;;21974:21:1;22031:2;22011:18;;;22004:30;22070:34;22050:18;;;22043:62;-1:-1:-1;;;22121:18:1;;;22114:32;22163:19;;5037:68:0;21790:398:1;5037:68:0;-1:-1:-1;;;;;5116:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5168:32;;3331:25:1;;;5168:32:0;;3304:18:1;5168:32:0;;;;;;;4830:378;;;:::o;13731:4643::-;-1:-1:-1;;;;;13863:18:0;;13855:68;;;;-1:-1:-1;;;13855:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13942:16:0;;13934:64;;;;-1:-1:-1;;;13934:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14018:21:0;;;;;;:17;:21;;;;;;;;14017:22;14009:58;;;;-1:-1:-1;;;14009:58:0;;22395:2:1;14009:58:0;;;22377:21:1;22434:2;22414:18;;;22407:30;-1:-1:-1;;;22453:18:1;;;22446:53;22516:18;;14009:58:0;22193:347:1;14009:58:0;14105:9;14087:28;;;;:17;:28;;;;;;;;14086:29;14078:65;;;;-1:-1:-1;;;14078:65:0;;22395:2:1;14078:65:0;;;22377:21:1;22434:2;22414:18;;;22407:30;-1:-1:-1;;;22453:18:1;;;22446:53;22516:18;;14078:65:0;22193:347:1;14078:65:0;14160:11;14157:92;;14188:28;14204:4;14210:2;14214:1;14188:15;:28::i;14157:92::-;14265:13;;;;14261:132;;-1:-1:-1;;;;;14302:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;14331:23:0;;;;;;:19;:23;;;;;;;;14302:52;14294:87;;;;-1:-1:-1;;;14294:87:0;;22747:2:1;14294:87:0;;;22729:21:1;22786:2;22766:18;;;22759:30;-1:-1:-1;;;22805:18:1;;;22798:52;22867:18;;14294:87:0;22545:346:1;14294:87:0;5592:6;;-1:-1:-1;;;;;14421:15:0;;;5592:6;;14421:15;;;;:45;;-1:-1:-1;5592:6:0;;-1:-1:-1;;;;;14453:13:0;;;5592:6;;14453:13;;14421:45;:78;;;;-1:-1:-1;;;;;;14483:16:0;;;;14421:78;:116;;;;-1:-1:-1;;;;;;14516:21:0;;14530:6;14516:21;;14421:116;:142;;;;-1:-1:-1;14555:8:0;;-1:-1:-1;;;14555:8:0;;;;14554:9;14421:142;:183;;;;-1:-1:-1;;;;;;14581:23:0;;;;;;:19;:23;;;;;;;;14580:24;14421:183;:226;;;;-1:-1:-1;;;;;;14622:25:0;;;;;;:19;:25;;;;;;;;14621:26;14421:226;14403:1591;;;14807:20;;;;14803:466;;;14865:9;;-1:-1:-1;;;;;14851:24:0;;;14865:9;;14851:24;;;;:49;;-1:-1:-1;14893:6:0;;-1:-1:-1;;;;;14879:21:0;;;14893:6;;14879:21;;14851:49;14847:407;;;14970:16;14985:1;14970:12;:16;:::i;:::-;14957:9;14932:35;;;;:24;:35;;;;;;:54;:105;;;;-1:-1:-1;15021:16:0;15036:1;15021:12;:16;:::i;:::-;-1:-1:-1;;;;;14990:28:0;;;;;;:24;:28;;;;;;:47;14932:105;14924:171;;;;-1:-1:-1;;;14924:171:0;;23098:2:1;14924:171:0;;;23080:21:1;23137:2;23117:18;;;23110:30;23176:34;23156:18;;;23149:62;-1:-1:-1;;;23227:18:1;;;23220:51;23288:19;;14924:171:0;22896:417:1;14924:171:0;15143:9;15118:35;;;;:24;:35;;;;;;15156:12;15118:50;;;;-1:-1:-1;;;;;15191:28:0;;;;;;:43;14847:407;-1:-1:-1;;;;;15330:31:0;;;;;;:25;:31;;;;;;;;:63;;;;-1:-1:-1;;;;;;15366:27:0;;;;;;:23;:27;;;;;;;;15365:28;15330:63;15326:657;;;15432:12;;15422:6;:22;;15414:80;;;;-1:-1:-1;;;15414:80:0;;23520:2:1;15414:80:0;;;23502:21:1;23559:2;23539:18;;;23532:30;23598:34;23578:18;;;23571:62;-1:-1:-1;;;23649:18:1;;;23642:43;23702:19;;15414:80:0;23318:409:1;15414:80:0;15547:9;;15530:13;15540:2;15530:9;:13::i;:::-;15521:22;;:6;:22;:::i;:::-;:35;;15513:67;;;;-1:-1:-1;;;15513:67:0;;23934:2:1;15513:67:0;;;23916:21:1;23973:2;23953:18;;;23946:30;-1:-1:-1;;;23992:18:1;;;23985:49;24051:18;;15513:67:0;23732:343:1;15513:67:0;15326:657;;;-1:-1:-1;;;;;15648:29:0;;;;;;:25;:29;;;;;;;;:63;;;;-1:-1:-1;;;;;;15682:29:0;;;;;;:23;:29;;;;;;;;15681:30;15648:63;15644:339;;;15750:12;;15740:6;:22;;15732:81;;;;-1:-1:-1;;;15732:81:0;;24282:2:1;15732:81:0;;;24264:21:1;24321:2;24301:18;;;24294:30;24360:34;24340:18;;;24333:62;-1:-1:-1;;;24411:18:1;;;24404:44;24465:19;;15732:81:0;24080:410:1;15644:339:0;-1:-1:-1;;;;;15853:27:0;;;;;;:23;:27;;;;;;;;15848:135;;15934:9;;15917:13;15927:2;15917:9;:13::i;:::-;15908:22;;:6;:22;:::i;:::-;:35;;15900:67;;;;-1:-1:-1;;;15900:67:0;;23934:2:1;15900:67:0;;;23916:21:1;23973:2;23953:18;;;23946:30;-1:-1:-1;;;23992:18:1;;;23985:49;24051:18;;15900:67:0;23732:343:1;15900:67:0;16004:28;16035:24;16053:4;16035:9;:24::i;:::-;16109:18;;16004:55;;-1:-1:-1;16085:42:0;;;;;;;16156:35;;-1:-1:-1;16180:11:0;;;;16156:35;:61;;;;-1:-1:-1;16209:8:0;;-1:-1:-1;;;16209:8:0;;;;16208:9;16156:61;:110;;;;-1:-1:-1;;;;;;16235:31:0;;;;;;:25;:31;;;;;;;;16234:32;16156:110;:156;;;;-1:-1:-1;;;;;;16283:29:0;;;;;;:25;:29;;;;;;;;16156:156;:199;;;;-1:-1:-1;;;;;;16330:25:0;;;;;;:19;:25;;;;;;;;16329:26;16156:199;:240;;;;-1:-1:-1;;;;;;16373:23:0;;;;;;:19;:23;;;;;;;;16372:24;16156:240;16138:368;;;16423:8;:15;;-1:-1:-1;;;;16423:15:0;-1:-1:-1;;;16423:15:0;;;16453:10;:8;:10::i;:::-;16478:8;:16;;-1:-1:-1;;;;16478:16:0;;;16138:368;16540:8;;-1:-1:-1;;;;;16649:25:0;;16524:12;16649:25;;;:19;:25;;;;;;16540:8;-1:-1:-1;;;16540:8:0;;;;;16539:9;;16649:25;;:52;;-1:-1:-1;;;;;;16678:23:0;;;;;;:19;:23;;;;;;;;16649:52;16646:99;;;-1:-1:-1;16728:5:0;16646:99;16765:12;16869:7;16866:1457;;;17040:7;;17025:22;;:12;:22;:::i;:::-;17003:18;;:44;;17002:81;;;;-1:-1:-1;;;;;;17052:31:0;;;;;;:25;:31;;;;;;;;17002:81;16999:1153;;;17124:3;17110:11;:6;17119:2;17110:11;:::i;:::-;:17;;;;:::i;:::-;17103:24;;17194:13;;17175:16;;17168:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;17146:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;17274:13:0;;17255:16;;17248:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;17226:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;17342:13:0;;17329:10;;17322:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;17306:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;16999:1153:0;;-1:-1:-1;16999:1153:0;;-1:-1:-1;;;;;17418:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;17467:1;17451:13;;:17;17418:50;17414:738;;;17520:3;17504:13;;17495:6;:22;;;;:::i;17414:738::-;-1:-1:-1;;;;;17812:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;17862:1;17847:12;;:16;17812:51;17809:343;;;17913:3;17898:12;;17889:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;17882:34;;17980:12;;17962:15;;17955:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;17933:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;18058:12:0;;18040:15;;18033:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;18011:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;18124:12:0;;18112:9;;18105:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;18089:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;17809:343:0;18183:8;;18180:93;;18215:42;18231:4;18245;18252;18215:15;:42::i;:::-;18297:14;18307:4;18297:14;;:::i;:::-;;;16866:1457;18333:33;18349:4;18355:2;18359:6;18333:15;:33::i;:::-;13844:4530;;;;13731:4643;;;:::o;19411:1598::-;19450:23;19476:24;19494:4;19476:9;:24::i;:::-;19450:50;;19511:25;19581:12;;19560:18;;19539;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;19511:82;-1:-1:-1;19604:12:0;19640:20;;;:46;;-1:-1:-1;19664:22:0;;19640:46;19637:60;;;19689:7;;;19411:1598::o;19637:60::-;19730:18;;19712:15;:36;19709:103;;;19782:18;;19764:36;;19709:103;19881:23;19966:1;19946:17;19925:18;;19907:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;19881:86;-1:-1:-1;19978:26:0;20007:33;19881:86;20007:15;:33;:::i;:::-;19978:62;-1:-1:-1;20079:21:0;20111:36;19978:62;20111:16;:36::i;:::-;20166:18;20187:41;20211:17;20187:21;:41;:::i;:::-;20166:62;;20239:23;20340:1;20321:18;;:20;;;;:::i;:::-;20300:42;;:17;:42;:::i;:::-;20278:18;;20265:31;;:10;:31;:::i;:::-;:78;;;;:::i;:::-;20239:104;;20354:17;20443:1;20424:18;;:20;;;;:::i;:::-;20403:42;;:17;:42;:::i;:::-;20387:12;;20374:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;20354:92;-1:-1:-1;20465:23:0;20354:92;20491:28;20504:15;20491:10;:28;:::i;:::-;:40;;;;:::i;:::-;20563:1;20542:18;:22;;;20575:18;:22;;;20608:12;:16;;;20656:9;;20648:45;;20465:66;;-1:-1:-1;;;;;;20656:9:0;;20679;;20648:45;20563:1;20648:45;20679:9;20656;20648:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20725:15:0;;20717:57;;20635:58;;-1:-1:-1;;;;;;20725:15:0;;20754;;20717:57;;;;20754:15;20725;20717:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20704:70:0;;-1:-1:-1;;20795:19:0;;;;;:42;;;20836:1;20818:15;:19;20795:42;20792:210;;;20853:46;20866:15;20883;20853:12;:46::i;:::-;20971:18;;20919:71;;;24697:25:1;;;24753:2;24738:18;;24731:34;;;24781:18;;;24774:34;;;;20919:71:0;;;;;;24685:2:1;20919:71:0;;;20792:210;19439:1570;;;;;;;;;;19411:1598::o;13041:130::-;-1:-1:-1;;;;;13124:31:0;;;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;13124:39:0;;;;;;;;;;13041:130::o;18380:507::-;18470:16;;;18484:1;18470:16;;;;;;;;18446:21;;18470:16;;;;;;;;;;-1:-1:-1;18470:16:0;18446:40;;18515:4;18497;18502:1;18497:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18497:23:0;;;:7;;;;;;;;;;:23;;;;18541:9;;:16;;;-1:-1:-1;;;18541:16:0;;;;:9;;;;;:14;;:16;;;;;18497:7;;18541:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18531:4;18536:1;18531:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18531:26:0;;;:7;;;;;;;;;:26;18600:9;;18568:56;;18585:4;;18600:9;18612:11;18568:8;:56::i;:::-;18661:9;;:218;;-1:-1:-1;;;18661:218:0;;-1:-1:-1;;;;;18661:9:0;;;;:60;;:218;;18736:11;;18661:9;;18806:4;;18833;;18853:15;;18661:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18896:509;19076:9;;19044:56;;19061:4;;-1:-1:-1;;;;;19076:9:0;19088:11;19044:8;:56::i;:::-;19141:9;;19339:17;;19141:256;;-1:-1:-1;;;19141:256:0;;-1:-1:-1;;;;;19141:9:0;;;;:25;;19174:9;;19141:256;;19207:4;;19227:11;;19141:9;;;;19339:17;;19371:15;;19141:256;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;18896:509;;:::o;14:127:1:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:275;217:2;211:9;282:2;263:13;;-1:-1:-1;;259:27:1;247:40;;317:18;302:34;;338:22;;;299:62;296:88;;;364:18;;:::i;:::-;400:2;393:22;146:275;;-1:-1:-1;146:275:1:o;426:183::-;486:4;519:18;511:6;508:30;505:56;;;541:18;;:::i;:::-;-1:-1:-1;586:1:1;582:14;598:4;578:25;;426:183::o;614:131::-;-1:-1:-1;;;;;689:31:1;;679:42;;669:70;;735:1;732;725:12;669:70;614:131;:::o;750:737::-;804:5;857:3;850:4;842:6;838:17;834:27;824:55;;875:1;872;865:12;824:55;911:6;898:20;937:4;961:60;977:43;1017:2;977:43;:::i;:::-;961:60;:::i;:::-;1055:15;;;1141:1;1137:10;;;;1125:23;;1121:32;;;1086:12;;;;1165:15;;;1162:35;;;1193:1;1190;1183:12;1162:35;1229:2;1221:6;1217:15;1241:217;1257:6;1252:3;1249:15;1241:217;;;1337:3;1324:17;1354:31;1379:5;1354:31;:::i;:::-;1398:18;;1436:12;;;;1274;;1241:217;;;-1:-1:-1;1476:5:1;750:737;-1:-1:-1;;;;;;750:737:1:o;1492:348::-;1576:6;1629:2;1617:9;1608:7;1604:23;1600:32;1597:52;;;1645:1;1642;1635:12;1597:52;1685:9;1672:23;1718:18;1710:6;1707:30;1704:50;;;1750:1;1747;1740:12;1704:50;1773:61;1826:7;1817:6;1806:9;1802:22;1773:61;:::i;:::-;1763:71;1492:348;-1:-1:-1;;;;1492:348:1:o;1845:597::-;1957:4;1986:2;2015;2004:9;1997:21;2047:6;2041:13;2090:6;2085:2;2074:9;2070:18;2063:34;2115:1;2125:140;2139:6;2136:1;2133:13;2125:140;;;2234:14;;;2230:23;;2224:30;2200:17;;;2219:2;2196:26;2189:66;2154:10;;2125:140;;;2283:6;2280:1;2277:13;2274:91;;;2353:1;2348:2;2339:6;2328:9;2324:22;2320:31;2313:42;2274:91;-1:-1:-1;2426:2:1;2405:15;-1:-1:-1;;2401:29:1;2386:45;;;;2433:2;2382:54;;1845:597;-1:-1:-1;;;1845:597:1:o;2673:315::-;2741:6;2749;2802:2;2790:9;2781:7;2777:23;2773:32;2770:52;;;2818:1;2815;2808:12;2770:52;2857:9;2844:23;2876:31;2901:5;2876:31;:::i;:::-;2926:5;2978:2;2963:18;;;;2950:32;;-1:-1:-1;;;2673:315:1:o;3367:456::-;3444:6;3452;3460;3513:2;3501:9;3492:7;3488:23;3484:32;3481:52;;;3529:1;3526;3519:12;3481:52;3568:9;3555:23;3587:31;3612:5;3587:31;:::i;:::-;3637:5;-1:-1:-1;3694:2:1;3679:18;;3666:32;3707:33;3666:32;3707:33;:::i;:::-;3367:456;;3759:7;;-1:-1:-1;;;3813:2:1;3798:18;;;;3785:32;;3367:456::o;4225:247::-;4284:6;4337:2;4325:9;4316:7;4312:23;4308:32;4305:52;;;4353:1;4350;4343:12;4305:52;4392:9;4379:23;4411:31;4436:5;4411:31;:::i;:::-;4461:5;4225:247;-1:-1:-1;;;4225:247:1:o;4477:248::-;4545:6;4553;4606:2;4594:9;4585:7;4581:23;4577:32;4574:52;;;4622:1;4619;4612:12;4574:52;-1:-1:-1;;4645:23:1;;;4715:2;4700:18;;;4687:32;;-1:-1:-1;4477:248:1:o;4730:180::-;4789:6;4842:2;4830:9;4821:7;4817:23;4813:32;4810:52;;;4858:1;4855;4848:12;4810:52;-1:-1:-1;4881:23:1;;4730:180;-1:-1:-1;4730:180:1:o;4915:118::-;5001:5;4994:13;4987:21;4980:5;4977:32;4967:60;;5023:1;5020;5013:12;5038:382;5103:6;5111;5164:2;5152:9;5143:7;5139:23;5135:32;5132:52;;;5180:1;5177;5170:12;5132:52;5219:9;5206:23;5238:31;5263:5;5238:31;:::i;:::-;5288:5;-1:-1:-1;5345:2:1;5330:18;;5317:32;5358:30;5317:32;5358:30;:::i;:::-;5407:7;5397:17;;;5038:382;;;;;:::o;5425:241::-;5481:6;5534:2;5522:9;5513:7;5509:23;5505:32;5502:52;;;5550:1;5547;5540:12;5502:52;5589:9;5576:23;5608:28;5630:5;5608:28;:::i;5671:1273::-;5798:6;5806;5814;5867:2;5855:9;5846:7;5842:23;5838:32;5835:52;;;5883:1;5880;5873:12;5835:52;5922:9;5909:23;5941:31;5966:5;5941:31;:::i;:::-;5991:5;-1:-1:-1;6015:2:1;6053:18;;;6040:32;6091:18;6121:14;;;6118:34;;;6148:1;6145;6138:12;6118:34;6171:61;6224:7;6215:6;6204:9;6200:22;6171:61;:::i;:::-;6161:71;;6285:2;6274:9;6270:18;6257:32;6241:48;;6314:2;6304:8;6301:16;6298:36;;;6330:1;6327;6320:12;6298:36;-1:-1:-1;6353:24:1;;6408:4;6400:13;;6396:27;-1:-1:-1;6386:55:1;;6437:1;6434;6427:12;6386:55;6473:2;6460:16;6496:60;6512:43;6552:2;6512:43;:::i;6496:60::-;6590:15;;;6672:1;6668:10;;;;6660:19;;6656:28;;;6621:12;;;;6696:19;;;6693:39;;;6728:1;6725;6718:12;6693:39;6752:11;;;;6772:142;6788:6;6783:3;6780:15;6772:142;;;6854:17;;6842:30;;6805:12;;;;6892;;;;6772:142;;;6933:5;6923:15;;;;;;;5671:1273;;;;;:::o;6949:529::-;7026:6;7034;7042;7095:2;7083:9;7074:7;7070:23;7066:32;7063:52;;;7111:1;7108;7101:12;7063:52;7150:9;7137:23;7169:31;7194:5;7169:31;:::i;:::-;7219:5;-1:-1:-1;7276:2:1;7261:18;;7248:32;7289:33;7248:32;7289:33;:::i;:::-;7341:7;-1:-1:-1;7400:2:1;7385:18;;7372:32;7413:33;7372:32;7413:33;:::i;:::-;7465:7;7455:17;;;6949:529;;;;;:::o;7483:388::-;7551:6;7559;7612:2;7600:9;7591:7;7587:23;7583:32;7580:52;;;7628:1;7625;7618:12;7580:52;7667:9;7654:23;7686:31;7711:5;7686:31;:::i;:::-;7736:5;-1:-1:-1;7793:2:1;7778:18;;7765:32;7806:33;7765:32;7806:33;:::i;7876:356::-;8078:2;8060:21;;;8097:18;;;8090:30;8156:34;8151:2;8136:18;;8129:62;8223:2;8208:18;;7876:356::o;8237:127::-;8298:10;8293:3;8289:20;8286:1;8279:31;8329:4;8326:1;8319:15;8353:4;8350:1;8343:15;9181:127;9242:10;9237:3;9233:20;9230:1;9223:31;9273:4;9270:1;9263:15;9297:4;9294:1;9287:15;9313:135;9352:3;-1:-1:-1;;9373:17:1;;9370:43;;;9393:18;;:::i;:::-;-1:-1:-1;9440:1:1;9429:13;;9313:135::o;9453:380::-;9532:1;9528:12;;;;9575;;;9596:61;;9650:4;9642:6;9638:17;9628:27;;9596:61;9703:2;9695:6;9692:14;9672:18;9669:38;9666:161;;;9749:10;9744:3;9740:20;9737:1;9730:31;9784:4;9781:1;9774:15;9812:4;9809:1;9802:15;9666:161;;9453:380;;;:::o;10659:128::-;10699:3;10730:1;10726:6;10723:1;10720:13;10717:39;;;10736:18;;:::i;:::-;-1:-1:-1;10772:9:1;;10659:128::o;11583:168::-;11623:7;11689:1;11685;11681:6;11677:14;11674:1;11671:21;11666:1;11659:9;11652:17;11648:45;11645:71;;;11696:18;;:::i;:::-;-1:-1:-1;11736:9:1;;11583:168::o;11756:217::-;11796:1;11822;11812:132;;11866:10;11861:3;11857:20;11854:1;11847:31;11901:4;11898:1;11891:15;11929:4;11926:1;11919:15;11812:132;-1:-1:-1;11958:9:1;;11756:217::o;12754:184::-;12824:6;12877:2;12865:9;12856:7;12852:23;12848:32;12845:52;;;12893:1;12890;12883:12;12845:52;-1:-1:-1;12916:16:1;;12754:184;-1:-1:-1;12754:184:1:o;13222:245::-;13289:6;13342:2;13330:9;13321:7;13317:23;13313:32;13310:52;;;13358:1;13355;13348:12;13310:52;13390:9;13384:16;13409:28;13431:5;13409:28;:::i;15469:251::-;15539:6;15592:2;15580:9;15571:7;15567:23;15563:32;15560:52;;;15608:1;15605;15598:12;15560:52;15640:9;15634:16;15659:31;15684:5;15659:31;:::i;17252:607::-;-1:-1:-1;;;;;17611:15:1;;;17593:34;;17658:2;17643:18;;17636:34;;;;17701:2;17686:18;;17679:34;;;;17744:2;17729:18;;17722:34;;;;17793:15;;;17787:3;17772:19;;17765:44;17573:3;17825:19;;17818:35;;;;17542:3;17527:19;;17252:607::o;17864:306::-;17952:6;17960;17968;18021:2;18009:9;18000:7;17996:23;17992:32;17989:52;;;18037:1;18034;18027:12;17989:52;18066:9;18060:16;18050:26;;18116:2;18105:9;18101:18;18095:25;18085:35;;18160:2;18149:9;18145:18;18139:25;18129:35;;17864:306;;;;;:::o;18590:125::-;18630:4;18658:1;18655;18652:8;18649:34;;;18663:18;;:::i;:::-;-1:-1:-1;18700:9:1;;18590:125::o;20168:401::-;20370:2;20352:21;;;20409:2;20389:18;;;20382:30;20448:34;20443:2;20428:18;;20421:62;-1:-1:-1;;;20514:2:1;20499:18;;20492:35;20559:3;20544:19;;20168:401::o;20574:399::-;20776:2;20758:21;;;20815:2;20795:18;;;20788:30;20854:34;20849:2;20834:18;;20827:62;-1:-1:-1;;;20920:2:1;20905:18;;20898:33;20963:3;20948:19;;20574:399::o;24819:980::-;25081:4;25129:3;25118:9;25114:19;25160:6;25149:9;25142:25;25186:2;25224:6;25219:2;25208:9;25204:18;25197:34;25267:3;25262:2;25251:9;25247:18;25240:31;25291:6;25326;25320:13;25357:6;25349;25342:22;25395:3;25384:9;25380:19;25373:26;;25434:2;25426:6;25422:15;25408:29;;25455:1;25465:195;25479:6;25476:1;25473:13;25465:195;;;25544:13;;-1:-1:-1;;;;;25540:39:1;25528:52;;25635:15;;;;25600:12;;;;25576:1;25494:9;25465:195;;;-1:-1:-1;;;;;;;25716:32:1;;;;25711:2;25696:18;;25689:60;-1:-1:-1;;;25780:3:1;25765:19;25758:35;25677:3;24819:980;-1:-1:-1;;;24819:980:1:o

Swarm Source

ipfs://1be613c8ba9b456edac3a860b37b39665e5e34d90ef67465f76c4186e063834d

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  ]
[ 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.