ETH Price: $2,318.56 (-4.13%)

Contract

0x67e989f78a32A1547443f1706eC050EEc725547e
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Approve201490542024-06-22 18:32:5985 days ago1719081179IN
0x67e989f7...Ec725547e
0 ETH0.000064142.65156764
Transfer198464762024-05-11 11:25:11127 days ago1715426711IN
0x67e989f7...Ec725547e
0 ETH0.000377955.16230603
Approve187378452023-12-08 0:03:23282 days ago1701993803IN
0x67e989f7...Ec725547e
0 ETH0.0028645161.57208951
Approve185562632023-11-12 13:55:11308 days ago1699797311IN
0x67e989f7...Ec725547e
0 ETH0.001714936.899452
Approve185438592023-11-10 20:14:23310 days ago1699647263IN
0x67e989f7...Ec725547e
0 ETH0.002497253.66302149
Approve185433862023-11-10 18:39:23310 days ago1699641563IN
0x67e989f7...Ec725547e
0 ETH0.0024428952.85025528
Approve185418692023-11-10 13:33:35310 days ago1699623215IN
0x67e989f7...Ec725547e
0 ETH0.000907331.15439764
Approve185417582023-11-10 13:11:11310 days ago1699621871IN
0x67e989f7...Ec725547e
0 ETH0.0015969434.31708031
Approve185416712023-11-10 12:53:35310 days ago1699620815IN
0x67e989f7...Ec725547e
0 ETH0.001502932.29630893
Transfer185416592023-11-10 12:51:11310 days ago1699620671IN
0x67e989f7...Ec725547e
0 ETH0.0022537230.77723877
Approve185415182023-11-10 12:22:47310 days ago1699618967IN
0x67e989f7...Ec725547e
0 ETH0.0019878242.772022
Update Fees185414642023-11-10 12:11:47310 days ago1699618307IN
0x67e989f7...Ec725547e
0 ETH0.0014150936.68799214
Approve185404822023-11-10 8:54:23310 days ago1699606463IN
0x67e989f7...Ec725547e
0 ETH0.0014201630.72416166
Transfer185404562023-11-10 8:49:11310 days ago1699606151IN
0x67e989f7...Ec725547e
0 ETH0.0017670431.48302467
Approve185389142023-11-10 3:39:11310 days ago1699587551IN
0x67e989f7...Ec725547e
0 ETH0.0015474133.29563441
Approve185389062023-11-10 3:37:23310 days ago1699587443IN
0x67e989f7...Ec725547e
0 ETH0.0014264930.69390835
Approve185388802023-11-10 3:32:11310 days ago1699587131IN
0x67e989f7...Ec725547e
0 ETH0.0015746133.88084411
Approve185307592023-11-09 0:16:59311 days ago1699489019IN
0x67e989f7...Ec725547e
0 ETH0.0016745236.03074678
Approve185237912023-11-08 0:54:23312 days ago1699404863IN
0x67e989f7...Ec725547e
0 ETH0.0011359124.44135027
Approve185236202023-11-08 0:19:59312 days ago1699402799IN
0x67e989f7...Ec725547e
0 ETH0.001202625.87646432
Approve185235542023-11-08 0:06:35312 days ago1699401995IN
0x67e989f7...Ec725547e
0 ETH0.0012895827.74802663
Transfer184658902023-10-30 22:15:59321 days ago1698704159IN
0x67e989f7...Ec725547e
0 ETH0.0017532131.24994602
Approve184651762023-10-30 19:51:47321 days ago1698695507IN
0x67e989f7...Ec725547e
0 ETH0.0014688831.56515253
Transfer184646832023-10-30 18:13:11321 days ago1698689591IN
0x67e989f7...Ec725547e
0 ETH0.0026162333.54021225
Approve184579952023-10-29 19:43:23322 days ago1698608603IN
0x67e989f7...Ec725547e
0 ETH0.000620413.34923991
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
185416162023-11-10 12:42:35310 days ago1699620155
0x67e989f7...Ec725547e
0.00291284 ETH
185416162023-11-10 12:42:35310 days ago1699620155
0x67e989f7...Ec725547e
0.00291284 ETH
185405942023-11-10 9:16:59310 days ago1699607819
0x67e989f7...Ec725547e
0.00333584 ETH
185405942023-11-10 9:16:59310 days ago1699607819
0x67e989f7...Ec725547e
0.00333584 ETH
185405892023-11-10 9:15:59310 days ago1699607759
0x67e989f7...Ec725547e
0.00352068 ETH
185405892023-11-10 9:15:59310 days ago1699607759
0x67e989f7...Ec725547e
0.00352068 ETH
185405752023-11-10 9:13:11310 days ago1699607591
0x67e989f7...Ec725547e
0.00212954 ETH
185405752023-11-10 9:13:11310 days ago1699607591
0x67e989f7...Ec725547e
0.00212954 ETH
185389252023-11-10 3:41:35310 days ago1699587695
0x67e989f7...Ec725547e
0.00302064 ETH
185389252023-11-10 3:41:35310 days ago1699587695
0x67e989f7...Ec725547e
0.00302064 ETH
185389242023-11-10 3:41:23310 days ago1699587683
0x67e989f7...Ec725547e
0.00311914 ETH
185389242023-11-10 3:41:23310 days ago1699587683
0x67e989f7...Ec725547e
0.00311914 ETH
185389212023-11-10 3:40:47310 days ago1699587647
0x67e989f7...Ec725547e
0.00322253 ETH
185389212023-11-10 3:40:47310 days ago1699587647
0x67e989f7...Ec725547e
0.00322253 ETH
185389182023-11-10 3:40:11310 days ago1699587611
0x67e989f7...Ec725547e
0.00332787 ETH
185389182023-11-10 3:40:11310 days ago1699587611
0x67e989f7...Ec725547e
0.00332787 ETH
185389112023-11-10 3:38:35310 days ago1699587515
0x67e989f7...Ec725547e
0.00252638 ETH
185389112023-11-10 3:38:35310 days ago1699587515
0x67e989f7...Ec725547e
0.00252638 ETH
185389032023-11-10 3:36:47310 days ago1699587407
0x67e989f7...Ec725547e
0.00353282 ETH
185389032023-11-10 3:36:47310 days ago1699587407
0x67e989f7...Ec725547e
0.00353282 ETH
185389012023-11-10 3:36:23310 days ago1699587383
0x67e989f7...Ec725547e
0.00365767 ETH
185389012023-11-10 3:36:23310 days ago1699587383
0x67e989f7...Ec725547e
0.00365767 ETH
185388992023-11-10 3:35:59310 days ago1699587359
0x67e989f7...Ec725547e
0.00378926 ETH
185388992023-11-10 3:35:59310 days ago1699587359
0x67e989f7...Ec725547e
0.00378926 ETH
185388912023-11-10 3:34:23310 days ago1699587263
0x67e989f7...Ec725547e
0.00491188 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
iBubbles

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-20
*/

// SPDX-License-Identifier: MIT

// In memory of (John Kusac) 

// Pepe’s ibubbles founder @mobys_dick aka John Kusac passed away in April 2023 leaving behind a wife and 3 young daughters, 
// while working on ibubbles and unfortunately never had the chance to see it launch. The rest of his team decided to launch 
// his token with the plans to build it out as he wanted. 
// He loved the crypto space and was a degen at heart. So, Pepe’s ibubbles is a token that is easy to call for the culture. 
// Let’s make it as big of a success that my friend John would have loved.

//https://t.me/pepes_ibubbles

pragma solidity 0.8.9;
 

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns(address pair);
}

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

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

}

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

        mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;

    
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    
    function decimals() public view virtual override returns(uint8) {
        return 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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased cannot be below zero"));
        return true;
    }


    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

    
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    
}
 
library SafeMath {
   
    function add(uint256 a, uint256 b) internal pure returns(uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

   
    function sub(uint256 a, uint256 b) internal pure returns(uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

   
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns(uint256) {
    
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

 
    function div(uint256 a, uint256 b) internal pure returns(uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

  
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

    
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    
    function mul(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    
    function div(int256 a, int256 b) internal pure returns(int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    
    function sub(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    
    function add(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    
    function abs(int256 a) internal pure returns(int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns(uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns(int256) {
    int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}


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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns(uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns(uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns(uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns(uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns(uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns(uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns(uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns(uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns(uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract iBubbles is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable router;
    address public immutable uniswapV2Pair;


    // addresses
    address private stackingPool;
    address private marketingWallet;

    // limits 
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;   
    uint256 public maxWalletSize;

    // status flags
    bool private isTrading = false;
    bool public swapEnabled = false;
    bool public isSwapping;


    struct Fees {
        uint256 buyTotalFees;
        uint256 buyMarketingFee;
        uint256 buyStackingPoolFee;
        uint256 buyLiquidityFee;

        uint256 sellTotalFees;
        uint256 sellMarketingFee;
        uint256 sellStackingPoolFee;
        uint256 sellLiquidityFee;
    }  

    Fees public _fees = Fees({
        buyTotalFees: 0,
        buyMarketingFee: 0,
        buyStackingPoolFee:0,
        buyLiquidityFee: 0,

        sellTotalFees: 0,
        sellMarketingFee: 0,
        sellStackingPoolFee:0,
        sellLiquidityFee: 0
    });


    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;
    uint256 private tokensForStackingPool;
    uint256 private taxTill;
    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public _isExcludedMaxWalletSize;

    mapping(address => bool) public marketPair;

    mapping(address => bool) private _blacklisted;
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );


    constructor() ERC20("iBubbles", "BUBLS") {
 
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);


        uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH());

        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;        
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;

        _isExcludedMaxWalletSize[owner()] = true;
        _isExcludedMaxWalletSize[address(this)] = true;
        _isExcludedMaxWalletSize[address(uniswapV2Pair)] = true;

        marketPair[address(uniswapV2Pair)] = true;

        approve(address(router), type(uint256).max);
        uint256 totalSupply = 25e7 * 1e18;

        maxBuyAmount = totalSupply / 50; // 2% maxBuy
        maxSellAmount = totalSupply / 100; // 1% maxSell
        maxWalletSize = totalSupply * 3 / 100; // 1% maxWalletSize

        _fees.buyMarketingFee = 10; //10
        _fees.buyLiquidityFee = 2; //2
        _fees.buyStackingPoolFee = 2; //2
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyStackingPoolFee;

        _fees.sellMarketingFee = 4; //4
        _fees.sellLiquidityFee = 5; //5
        _fees.sellStackingPoolFee = 5; //5
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellStackingPoolFee;


        marketingWallet = address(0xdfEef74149Ad135Bd7648e2287A766E18f13fCf3);
        stackingPool = address(0x356CE10c626302dE0228456Aa06c08A5641C2BDF);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

    }

    // To blacklist a wallet
    function blacklistDev(address _account, bool _isBlacklisted) external onlyOwner{
        _blacklisted[_account] = _isBlacklisted;
    }

    // If you want to know if x is Blacklisted
    function isBlacklisted(address _user) public view returns (bool){
        return _blacklisted[_user];
    }

    // Withdraws an amount of ETH stored on the contract
    function withdrawETH(uint256 amount) external onlyOwner{
        payable(msg.sender).transfer(amount);
    }

    // Withdraws an amount of ERC20 tokens stored on the contract
    function withdrawERC20(address contractAddress, uint256 amount) external onlyOwner {
        IERC20 paymentToken = IERC20(contractAddress);
        paymentToken.transfer(msg.sender, amount);
    }

    // once enabled, can never be turned off
    function swapTrading() external onlyOwner {
        isTrading = true;
        swapEnabled = true;
        taxTill = block.number + 2;
    }

    // For updating maxSell and maxBuy amount
    function updateMaxTxnAmount(uint256 newMaxBuy, uint256 newMaxSell) external onlyOwner {
        require(((totalSupply() * newMaxBuy) / 1000) >= (totalSupply() / 1000), "Cannot set maxTransactionAmounts lower than 1%");
        require(((totalSupply() * newMaxSell) / 1000) >= (totalSupply() / 1000), "Cannot set maxTransactionAmounts lower than 1%");
        maxBuyAmount = (totalSupply() * newMaxBuy) / 1000;
        maxSellAmount = (totalSupply() * newMaxSell) / 1000;
    }

    // For updating maxWalletSize
    function updateMaxWalletSize(uint256 newPercentage) external onlyOwner {
        require(((totalSupply() * newPercentage) / 1000) >= (totalSupply() / 1000), "Cannot set maxWallet lower than 1%");
        maxWalletSize = (totalSupply() * newPercentage) / 1000;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function toggleSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

    // For updating fees
    function updateFees(uint256 _marketingFeeBuy, uint256 _liquidityFeeBuy,uint256 _stackingPoolFeeBuy,uint256 _marketingFeeSell, uint256 _liquidityFeeSell,uint256 _stackingPoolFeeSell) external onlyOwner{
        _fees.buyMarketingFee = _marketingFeeBuy;
        _fees.buyLiquidityFee = _liquidityFeeBuy;
        _fees.buyStackingPoolFee = _stackingPoolFeeBuy;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyStackingPoolFee;

        _fees.sellMarketingFee = _marketingFeeSell;
        _fees.sellLiquidityFee = _liquidityFeeSell;
        _fees.sellStackingPoolFee = _stackingPoolFeeSell;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellStackingPoolFee;
        require(_fees.buyTotalFees <= 40, "Must keep fees at 40% or less");   
        require(_fees.sellTotalFees <= 40, "Must keep fees at 40% or less");
     
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }
    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedMaxWalletSize[account] = excluded;
    }
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }


    function setMarketPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from marketPair");
        marketPair[pair] = value;
    }

    // For updating marketingWallet and stackingPool address
    function setWallets(address _marketingWallet,address _stackingPool) external onlyOwner{
        marketingWallet = _marketingWallet;
        stackingPool = _stackingPool;
    }

    // To know if a wallet is excluded from fees
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(!isBlacklisted(sender), 'Sender is blacklisted; cannot proceed with transfer');
        require(!isBlacklisted(recipient), 'Recipient is blacklisted; cannot proceed with transfer');
        require(swapEnabled || sender == owner() || sender == address(0), 'Trading has not started yet');

        if (amount == 0) {
            super._transfer(sender, recipient, 0);
            return;
        }

        if (
            sender != owner() &&
            recipient != owner() &&
            !isSwapping
        ) {

            if (!isTrading) {
                require(_isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "Trading is not active.");
            }
            if (marketPair[sender] && !_isExcludedMaxTransactionAmount[recipient]) {
                require(amount <= maxBuyAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
            } 
            else if (marketPair[recipient] && !_isExcludedMaxTransactionAmount[sender]) {
                require(amount <= maxSellAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
            }

            if (!_isExcludedMaxWalletSize[recipient]) {
                require(amount + balanceOf(recipient) <= maxWalletSize, "Max wallet exceeded");
            }

        }

        if (
            swapEnabled &&
            !isSwapping &&
            marketPair[recipient] &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[recipient]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
 
        bool takeFee = !isSwapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) {
            takeFee = false;
        }
 
        
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            uint256 fees = 0;
            if(block.number < taxTill) {
                fees = amount.mul(99).div(100);
                tokensForMarketing += (fees * 94) / 99;
                tokensForStackingPool += (fees * 5) / 99;
            } else if (marketPair[recipient] && _fees.sellTotalFees > 0) {
                fees = amount.mul(_fees.sellTotalFees).div(100);
                tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees;
                tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees;
                tokensForStackingPool += fees * _fees.sellStackingPoolFee / _fees.sellTotalFees;
            }
            // on buy
            else if (marketPair[sender] && _fees.buyTotalFees > 0) {
                fees = amount.mul(_fees.buyTotalFees).div(100);
                tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees;
                tokensForMarketing += fees * _fees.buyMarketingFee / _fees.buyTotalFees;
                tokensForStackingPool += fees * _fees.buyStackingPoolFee / _fees.buyTotalFees;
            }

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

            amount -= fees;

        }

        super._transfer(sender, recipient, amount);
    }

    function swapTokensForEth(uint256 tAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), tAmount);


        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

    }

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

        // add the liquidity
        router.addLiquidityETH{ value: ethAmount } (address(this), tAmount, 0, 0 , address(this), block.timestamp);
    }

    function swapBack() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForStackingPool;
        bool success;

        if (contractTokenBalance == 0 || toSwap == 0) { return; }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractTokenBalance * tokensForLiquidity / toSwap / 2;
        uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
 
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap);
        uint256 ethForStackingPool = newBalance.mul(tokensForStackingPool).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForStackingPool);


        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForStackingPool = 0;


        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity);
        }

        (success,) = address(stackingPool).call{ value: (address(this).balance - ethForMarketing) } ("");
        (success,) = address(marketingWallet).call{ value: address(this).balance } ("");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"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":"_fees","outputs":[{"internalType":"uint256","name":"buyTotalFees","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyStackingPoolFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTotalFees","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellStackingPoolFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletSize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_isBlacklisted","type":"bool"}],"name":"blacklistDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","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":"_user","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_stackingPool","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_stackingPoolFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_stackingPoolFeeSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600b805461ffff191690556101c0604052600060c081905260e08190526101008190526101208190526101408190526101608190526101808190526101a0819052600c819055600d819055600e819055600f8190556010819055601181905560128190556013553480156200007357600080fd5b50604080518082018252600881526769427562626c657360c01b6020808301918252835180850190945260058452644255424c5360d81b908401528151919291620000c19160039162000740565b508051620000d790600490602084019062000740565b5050506000620000ec6200055960201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200018b57600080fd5b505afa158015620001a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c69190620007e6565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021157600080fd5b505afa15801562000226573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024c9190620007e6565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200029557600080fd5b505af1158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d09190620007e6565b6001600160a01b0390811660a081905260805190911660009081526019602081905260408083208054600160ff19918216811790925594845290832080549094168117909355906200032a6005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526019909252812080549092166001908117909255601890620003836005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526018909252812080549092166001908117909255601a90620003dc6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152601a845282812080548616600190811790915560a05190921681528281208054861683179055601b9093529120805490921617905560805162000453906000196200055d565b506acecb8f27f4200f3a0000006200046d60328262000827565b6008556200047d60648262000827565b60095560646200048f8260036200084a565b6200049b919062000827565b600a908155600d8190556002600f819055600e81905590620004bf9082906200086c565b620004cb91906200086c565b600c556004601181905560056013819055601281905590620004ef9082906200086c565b620004fb91906200086c565b601055600780546001600160a01b031990811673dfeef74149ad135bd7648e2287a766e18f13fcf3179091556006805490911673356ce10c626302de0228456aa06c08a5641c2bdf17905562000552338262000575565b50620008c4565b3390565b60006200056c33848462000675565b50600192915050565b6001600160a01b038216620005d15760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b620005ed81600254620006d660201b620012bf1790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000620918390620012bf620006d6821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080620006e583856200086c565b905083811015620007395760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620005c8565b9392505050565b8280546200074e9062000887565b90600052602060002090601f016020900481019282620007725760008555620007bd565b82601f106200078d57805160ff1916838001178555620007bd565b82800160010185558215620007bd579182015b82811115620007bd578251825591602001919060010190620007a0565b50620007cb929150620007cf565b5090565b5b80821115620007cb5760008155600101620007d0565b600060208284031215620007f957600080fd5b81516001600160a01b03811681146200073957600080fd5b634e487b7160e01b600052601160045260246000fd5b6000826200084557634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161562000867576200086762000811565b500290565b6000821982111562000882576200088262000811565b500190565b600181811c908216806200089c57607f821691505b60208210811415620008be57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161271c62000914600039600081816103c50152610fb90152600081816107f201528181611fac01528181612074015281816120b001528181612122015261217e015261271c6000f3fe60806040526004361061023f5760003560e01c806395d89b411161012e578063d3f6a157116100ab578063f14210a61161006f578063f14210a614610770578063f2fde38b14610790578063f5b3c3bf146107b0578063f887ea40146107e0578063fe575a871461081457600080fd5b8063d3f6a1571461069a578063da8e474b146106ba578063dd62ed3e146106ea578063e16830a814610730578063e6229ca01461075057600080fd5b8063b8863115116100f2578063b8863115146105b7578063b9e418e7146105d7578063c0246668146105ec578063c16dd4a41461060c578063d212a69a1461062c57600080fd5b806395d89b4114610522578063992c58e414610537578063a1db978214610557578063a457c2d714610577578063a9059cbb1461059757600080fd5b806349bd5a5e116101bc578063715018a611610180578063715018a6146104a35780637571336a146104b857806388e765ff146104d85780638da5cb5b146104ee5780638f3fa8601461050c57600080fd5b806349bd5a5e146103b35780634fbee193146103ff57806366d602ae146104385780636ddd17131461044e57806370a082311461046d57600080fd5b80631c6e8a75116102035780631c6e8a751461031757806323b872dd1461033757806324887e8014610357578063313ce56714610377578063395093511461039357600080fd5b806306fdde031461024b578063095ea7b31461027657806310d5de53146102a657806311a582c3146102d657806318160ddd146102f857600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026061084d565b60405161026d9190612239565b60405180910390f35b34801561028257600080fd5b506102966102913660046122a6565b6108df565b604051901515815260200161026d565b3480156102b257600080fd5b506102966102c13660046122d2565b60196020526000908152604090205460ff1681565b3480156102e257600080fd5b506102f66102f13660046122ef565b6108f6565b005b34801561030457600080fd5b506002545b60405190815260200161026d565b34801561032357600080fd5b506102f661033236600461231f565b610a1f565b34801561034357600080fd5b5061029661035236600461233c565b610a63565b34801561036357600080fd5b506102f661037236600461237d565b610acc565b34801561038357600080fd5b506040516012815260200161026d565b34801561039f57600080fd5b506102966103ae3660046122a6565b610bad565b3480156103bf57600080fd5b506103e77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161026d565b34801561040b57600080fd5b5061029661041a3660046122d2565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561044457600080fd5b5061030960095481565b34801561045a57600080fd5b50600b5461029690610100900460ff1681565b34801561047957600080fd5b506103096104883660046122d2565b6001600160a01b031660009081526020819052604090205490565b3480156104af57600080fd5b506102f6610be3565b3480156104c457600080fd5b506102f66104d3366004612396565b610c57565b3480156104e457600080fd5b5061030960085481565b3480156104fa57600080fd5b506005546001600160a01b03166103e7565b34801561051857600080fd5b50610309600a5481565b34801561052e57600080fd5b50610260610cac565b34801561054357600080fd5b506102f66105523660046123cf565b610cbb565b34801561056357600080fd5b506102f66105723660046122a6565b610de1565b34801561058357600080fd5b506102966105923660046122a6565b610e93565b3480156105a357600080fd5b506102966105b23660046122a6565b610ee2565b3480156105c357600080fd5b50600b546102969062010000900460ff1681565b3480156105e357600080fd5b506102f6610eef565b3480156105f857600080fd5b506102f6610607366004612396565b610f38565b34801561061857600080fd5b506102f6610627366004612396565b610f8d565b34801561063857600080fd5b50600c54600d54600e54600f5460105460115460125460135461065f979695949392919088565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161026d565b3480156106a657600080fd5b506102f66106b5366004612412565b611077565b3480156106c657600080fd5b506102966106d53660046122d2565b601a6020526000908152604090205460ff1681565b3480156106f657600080fd5b50610309610705366004612412565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561073c57600080fd5b506102f661074b366004612396565b6110cf565b34801561075c57600080fd5b506102f661076b366004612396565b611124565b34801561077c57600080fd5b506102f661078b36600461237d565b611179565b34801561079c57600080fd5b506102f66107ab3660046122d2565b6111d4565b3480156107bc57600080fd5b506102966107cb3660046122d2565b601b6020526000908152604090205460ff1681565b3480156107ec57600080fd5b506103e77f000000000000000000000000000000000000000000000000000000000000000081565b34801561082057600080fd5b5061029661082f3660046122d2565b6001600160a01b03166000908152601c602052604090205460ff1690565b60606003805461085c90612440565b80601f016020809104026020016040519081016040528092919081815260200182805461088890612440565b80156108d55780601f106108aa576101008083540402835291602001916108d5565b820191906000526020600020905b8154815290600101906020018083116108b857829003601f168201915b5050505050905090565b60006108ec338484611325565b5060015b92915050565b6005546001600160a01b031633146109295760405162461bcd60e51b81526004016109209061247b565b60405180910390fd5b6103e861093560025490565b61093f91906124c6565b6103e88361094c60025490565b61095691906124e8565b61096091906124c6565b101561097e5760405162461bcd60e51b815260040161092090612507565b6103e861098a60025490565b61099491906124c6565b6103e8826109a160025490565b6109ab91906124e8565b6109b591906124c6565b10156109d35760405162461bcd60e51b815260040161092090612507565b6103e8826109e060025490565b6109ea91906124e8565b6109f491906124c6565b6008556103e881610a0460025490565b610a0e91906124e8565b610a1891906124c6565b6009555050565b6005546001600160a01b03163314610a495760405162461bcd60e51b81526004016109209061247b565b600b80549115156101000261ff0019909216919091179055565b6000610a70848484611387565b610ac28433610abd856040518060600160405280602881526020016126bf602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611b4e565b611325565b5060019392505050565b6005546001600160a01b03163314610af65760405162461bcd60e51b81526004016109209061247b565b6103e8610b0260025490565b610b0c91906124c6565b6103e882610b1960025490565b610b2391906124e8565b610b2d91906124c6565b1015610b865760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b6064820152608401610920565b6103e881610b9360025490565b610b9d91906124e8565b610ba791906124c6565b600a5550565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108ec918590610abd90866112bf565b6005546001600160a01b03163314610c0d5760405162461bcd60e51b81526004016109209061247b565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610c815760405162461bcd60e51b81526004016109209061247b565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b60606004805461085c90612440565b6005546001600160a01b03163314610ce55760405162461bcd60e51b81526004016109209061247b565b600d869055600f859055600e84905583610cff8688612555565b610d099190612555565b600c5560118390556013829055601281905580610d268385612555565b610d309190612555565b601055600c5460281015610d865760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420343025206f72206c6573730000006044820152606401610920565b60105460281015610dd95760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420343025206f72206c6573730000006044820152606401610920565b505050505050565b6005546001600160a01b03163314610e0b5760405162461bcd60e51b81526004016109209061247b565b60405163a9059cbb60e01b81523360048201526024810182905282906001600160a01b0382169063a9059cbb90604401602060405180830381600087803b158015610e5557600080fd5b505af1158015610e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8d919061256d565b50505050565b60006108ec3384610abd85604051806060016040528060258152602001612674602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611b4e565b60006108ec338484611387565b6005546001600160a01b03163314610f195760405162461bcd60e51b81526004016109209061247b565b600b805461ffff1916610101179055610f33436002612555565b601755565b6005546001600160a01b03163314610f625760405162461bcd60e51b81526004016109209061247b565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610fb75760405162461bcd60e51b81526004016109209061247b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561104c5760405162461bcd60e51b815260206004820152602a60248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201526936b0b935b2ba2830b4b960b11b6064820152608401610920565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110a15760405162461bcd60e51b81526004016109209061247b565b600780546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055565b6005546001600160a01b031633146110f95760405162461bcd60e51b81526004016109209061247b565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461114e5760405162461bcd60e51b81526004016109209061247b565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111a35760405162461bcd60e51b81526004016109209061247b565b604051339082156108fc029083906000818181858888f193505050501580156111d0573d6000803e3d6000fd5b5050565b6005546001600160a01b031633146111fe5760405162461bcd60e51b81526004016109209061247b565b6001600160a01b0381166112635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610920565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000806112cc8385612555565b90508381101561131e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610920565b9392505050565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166000908152601c602052604090205460ff161561140c5760405162461bcd60e51b815260206004820152603360248201527f53656e64657220697320626c61636b6c69737465643b2063616e6e6f7420707260448201527237b1b2b2b2103bb4ba34103a3930b739b332b960691b6064820152608401610920565b6001600160a01b0382166000908152601c602052604090205460ff16156114945760405162461bcd60e51b815260206004820152603660248201527f526563697069656e7420697320626c61636b6c69737465643b2063616e6e6f7460448201527510383937b1b2b2b2103bb4ba34103a3930b739b332b960511b6064820152608401610920565b600b54610100900460ff16806114b757506005546001600160a01b038481169116145b806114c957506001600160a01b038316155b6115155760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720686173206e6f7420737461727465642079657400000000006044820152606401610920565b8061152b5761152683836000611b88565b505050565b6005546001600160a01b0384811691161480159061155757506005546001600160a01b03838116911614155b801561156c5750600b5462010000900460ff16155b156117fb57600b5460ff166115ff576001600160a01b03831660009081526018602052604090205460ff16806115ba57506001600160a01b03821660009081526018602052604090205460ff165b6115ff5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610920565b6001600160a01b0383166000908152601b602052604090205460ff16801561164057506001600160a01b03821660009081526019602052604090205460ff16155b156116ba576008548111156116b55760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610920565b611771565b6001600160a01b0382166000908152601b602052604090205460ff1680156116fb57506001600160a01b03831660009081526019602052604090205460ff16155b15611771576009548111156117715760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610920565b6001600160a01b0382166000908152601a602052604090205460ff166117fb57600a546001600160a01b0383166000908152602081905260409020546117b79083612555565b11156117fb5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610920565b600b54610100900460ff16801561181b5750600b5462010000900460ff16155b801561183f57506001600160a01b0382166000908152601b602052604090205460ff165b801561186457506001600160a01b03831660009081526018602052604090205460ff16155b801561188957506001600160a01b03821660009081526018602052604090205460ff16155b156118b457600b805462ff00001916620100001790556118a7611c45565b600b805462ff0000191690555b600b546001600160a01b03841660009081526018602052604090205460ff6201000090920482161591168061190157506001600160a01b03831660009081526018602052604090205460ff165b1561190a575060005b8015611b4357600060175443101561199557611932606461192c856063611e52565b90611ed1565b9050606361194182605e6124e8565b61194b91906124c6565b6014600082825461195c9190612555565b909155506063905061196f8260056124e8565b61197991906124c6565b6016600082825461198a9190612555565b90915550611b249050565b6001600160a01b0384166000908152601b602052604090205460ff1680156119be575060105415155b15611a4c576010546119d89060649061192c908690611e52565b601054601354919250906119ec90836124e8565b6119f691906124c6565b60156000828254611a079190612555565b9091555050601054601154611a1c90836124e8565b611a2691906124c6565b60146000828254611a379190612555565b909155505060105460125461196f90836124e8565b6001600160a01b0385166000908152601b602052604090205460ff168015611a755750600c5415155b15611b2457600c54611a8f9060649061192c908690611e52565b600c54600f5491925090611aa390836124e8565b611aad91906124c6565b60156000828254611abe9190612555565b9091555050600c54600d54611ad390836124e8565b611add91906124c6565b60146000828254611aee9190612555565b9091555050600c54600e54611b0390836124e8565b611b0d91906124c6565b60166000828254611b1e9190612555565b90915550505b8015611b3557611b35853083611b88565b611b3f818461258a565b9250505b610e8d848484611b88565b60008184841115611b725760405162461bcd60e51b81526004016109209190612239565b506000611b7f848661258a565b95945050505050565b611bc581604051806060016040528060268152602001612699602691396001600160a01b0386166000908152602081905260409020549190611b4e565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611bf490826112bf565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161137a565b3060009081526020819052604081205490506000601654601454601554611c6c9190612555565b611c769190612555565b90506000821580611c85575081155b15611c8f57505050565b600060028360155486611ca291906124e8565b611cac91906124c6565b611cb691906124c6565b90506000611cc48583611f13565b905047611cd082611f55565b6000611cdc4783611f13565b90506000611cf98761192c60145485611e5290919063ffffffff16565b90506000611d168861192c60165486611e5290919063ffffffff16565b90506000611d248284612555565b611d2e908561258a565b60006015819055601481905560165590508615801590611d4e5750600081115b15611d9757611d5d878261211c565b60408051878152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b6006546001600160a01b0316611dad844761258a565b604051600081818185875af1925050503d8060008114611de9576040519150601f19603f3d011682016040523d82523d6000602084013e611dee565b606091505b50506007546040519199506001600160a01b0316904790600081818185875af1925050503d8060008114611e3e576040519150601f19603f3d011682016040523d82523d6000602084013e611e43565b606091505b50505050505050505050505050565b600082611e61575060006108f0565b6000611e6d83856124e8565b905082611e7a85836124c6565b1461131e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610920565b600061131e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061220b565b600061131e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b4e565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611f8a57611f8a6125a1565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561200357600080fd5b505afa158015612017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203b91906125b7565b8160018151811061204e5761204e6125a1565b60200260200101906001600160a01b031690816001600160a01b031681525050612099307f000000000000000000000000000000000000000000000000000000000000000084611325565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906120ee9085906000908690309042906004016125d4565b600060405180830381600087803b15801561210857600080fd5b505af1158015610dd9573d6000803e3d6000fd5b612147307f000000000000000000000000000000000000000000000000000000000000000084611325565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c4016060604051808303818588803b1580156121cb57600080fd5b505af11580156121df573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122049190612645565b5050505050565b6000818361222c5760405162461bcd60e51b81526004016109209190612239565b506000611b7f84866124c6565b600060208083528351808285015260005b818110156122665785810183015185820160400152820161224a565b81811115612278576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146122a357600080fd5b50565b600080604083850312156122b957600080fd5b82356122c48161228e565b946020939093013593505050565b6000602082840312156122e457600080fd5b813561131e8161228e565b6000806040838503121561230257600080fd5b50508035926020909101359150565b80151581146122a357600080fd5b60006020828403121561233157600080fd5b813561131e81612311565b60008060006060848603121561235157600080fd5b833561235c8161228e565b9250602084013561236c8161228e565b929592945050506040919091013590565b60006020828403121561238f57600080fd5b5035919050565b600080604083850312156123a957600080fd5b82356123b48161228e565b915060208301356123c481612311565b809150509250929050565b60008060008060008060c087890312156123e857600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561242557600080fd5b82356124308161228e565b915060208301356123c48161228e565b600181811c9082168061245457607f821691505b6020821081141561247557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000826124e357634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612502576125026124b0565b500290565b6020808252602e908201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e747360408201526d206c6f776572207468616e20312560901b606082015260800190565b60008219821115612568576125686124b0565b500190565b60006020828403121561257f57600080fd5b815161131e81612311565b60008282101561259c5761259c6124b0565b500390565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156125c957600080fd5b815161131e8161228e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126245784516001600160a01b0316835293830193918301916001016125ff565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561265a57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122023e8f39f8c175de35a4b20022f98a239e2fef5c4f6c6885d75727930c6c274d764736f6c63430008090033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c806395d89b411161012e578063d3f6a157116100ab578063f14210a61161006f578063f14210a614610770578063f2fde38b14610790578063f5b3c3bf146107b0578063f887ea40146107e0578063fe575a871461081457600080fd5b8063d3f6a1571461069a578063da8e474b146106ba578063dd62ed3e146106ea578063e16830a814610730578063e6229ca01461075057600080fd5b8063b8863115116100f2578063b8863115146105b7578063b9e418e7146105d7578063c0246668146105ec578063c16dd4a41461060c578063d212a69a1461062c57600080fd5b806395d89b4114610522578063992c58e414610537578063a1db978214610557578063a457c2d714610577578063a9059cbb1461059757600080fd5b806349bd5a5e116101bc578063715018a611610180578063715018a6146104a35780637571336a146104b857806388e765ff146104d85780638da5cb5b146104ee5780638f3fa8601461050c57600080fd5b806349bd5a5e146103b35780634fbee193146103ff57806366d602ae146104385780636ddd17131461044e57806370a082311461046d57600080fd5b80631c6e8a75116102035780631c6e8a751461031757806323b872dd1461033757806324887e8014610357578063313ce56714610377578063395093511461039357600080fd5b806306fdde031461024b578063095ea7b31461027657806310d5de53146102a657806311a582c3146102d657806318160ddd146102f857600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026061084d565b60405161026d9190612239565b60405180910390f35b34801561028257600080fd5b506102966102913660046122a6565b6108df565b604051901515815260200161026d565b3480156102b257600080fd5b506102966102c13660046122d2565b60196020526000908152604090205460ff1681565b3480156102e257600080fd5b506102f66102f13660046122ef565b6108f6565b005b34801561030457600080fd5b506002545b60405190815260200161026d565b34801561032357600080fd5b506102f661033236600461231f565b610a1f565b34801561034357600080fd5b5061029661035236600461233c565b610a63565b34801561036357600080fd5b506102f661037236600461237d565b610acc565b34801561038357600080fd5b506040516012815260200161026d565b34801561039f57600080fd5b506102966103ae3660046122a6565b610bad565b3480156103bf57600080fd5b506103e77f000000000000000000000000c26b5c60440d382b3461e234df60c42ff33a45a581565b6040516001600160a01b03909116815260200161026d565b34801561040b57600080fd5b5061029661041a3660046122d2565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561044457600080fd5b5061030960095481565b34801561045a57600080fd5b50600b5461029690610100900460ff1681565b34801561047957600080fd5b506103096104883660046122d2565b6001600160a01b031660009081526020819052604090205490565b3480156104af57600080fd5b506102f6610be3565b3480156104c457600080fd5b506102f66104d3366004612396565b610c57565b3480156104e457600080fd5b5061030960085481565b3480156104fa57600080fd5b506005546001600160a01b03166103e7565b34801561051857600080fd5b50610309600a5481565b34801561052e57600080fd5b50610260610cac565b34801561054357600080fd5b506102f66105523660046123cf565b610cbb565b34801561056357600080fd5b506102f66105723660046122a6565b610de1565b34801561058357600080fd5b506102966105923660046122a6565b610e93565b3480156105a357600080fd5b506102966105b23660046122a6565b610ee2565b3480156105c357600080fd5b50600b546102969062010000900460ff1681565b3480156105e357600080fd5b506102f6610eef565b3480156105f857600080fd5b506102f6610607366004612396565b610f38565b34801561061857600080fd5b506102f6610627366004612396565b610f8d565b34801561063857600080fd5b50600c54600d54600e54600f5460105460115460125460135461065f979695949392919088565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161026d565b3480156106a657600080fd5b506102f66106b5366004612412565b611077565b3480156106c657600080fd5b506102966106d53660046122d2565b601a6020526000908152604090205460ff1681565b3480156106f657600080fd5b50610309610705366004612412565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561073c57600080fd5b506102f661074b366004612396565b6110cf565b34801561075c57600080fd5b506102f661076b366004612396565b611124565b34801561077c57600080fd5b506102f661078b36600461237d565b611179565b34801561079c57600080fd5b506102f66107ab3660046122d2565b6111d4565b3480156107bc57600080fd5b506102966107cb3660046122d2565b601b6020526000908152604090205460ff1681565b3480156107ec57600080fd5b506103e77f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561082057600080fd5b5061029661082f3660046122d2565b6001600160a01b03166000908152601c602052604090205460ff1690565b60606003805461085c90612440565b80601f016020809104026020016040519081016040528092919081815260200182805461088890612440565b80156108d55780601f106108aa576101008083540402835291602001916108d5565b820191906000526020600020905b8154815290600101906020018083116108b857829003601f168201915b5050505050905090565b60006108ec338484611325565b5060015b92915050565b6005546001600160a01b031633146109295760405162461bcd60e51b81526004016109209061247b565b60405180910390fd5b6103e861093560025490565b61093f91906124c6565b6103e88361094c60025490565b61095691906124e8565b61096091906124c6565b101561097e5760405162461bcd60e51b815260040161092090612507565b6103e861098a60025490565b61099491906124c6565b6103e8826109a160025490565b6109ab91906124e8565b6109b591906124c6565b10156109d35760405162461bcd60e51b815260040161092090612507565b6103e8826109e060025490565b6109ea91906124e8565b6109f491906124c6565b6008556103e881610a0460025490565b610a0e91906124e8565b610a1891906124c6565b6009555050565b6005546001600160a01b03163314610a495760405162461bcd60e51b81526004016109209061247b565b600b80549115156101000261ff0019909216919091179055565b6000610a70848484611387565b610ac28433610abd856040518060600160405280602881526020016126bf602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611b4e565b611325565b5060019392505050565b6005546001600160a01b03163314610af65760405162461bcd60e51b81526004016109209061247b565b6103e8610b0260025490565b610b0c91906124c6565b6103e882610b1960025490565b610b2391906124e8565b610b2d91906124c6565b1015610b865760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b6064820152608401610920565b6103e881610b9360025490565b610b9d91906124e8565b610ba791906124c6565b600a5550565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108ec918590610abd90866112bf565b6005546001600160a01b03163314610c0d5760405162461bcd60e51b81526004016109209061247b565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610c815760405162461bcd60e51b81526004016109209061247b565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b60606004805461085c90612440565b6005546001600160a01b03163314610ce55760405162461bcd60e51b81526004016109209061247b565b600d869055600f859055600e84905583610cff8688612555565b610d099190612555565b600c5560118390556013829055601281905580610d268385612555565b610d309190612555565b601055600c5460281015610d865760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420343025206f72206c6573730000006044820152606401610920565b60105460281015610dd95760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420343025206f72206c6573730000006044820152606401610920565b505050505050565b6005546001600160a01b03163314610e0b5760405162461bcd60e51b81526004016109209061247b565b60405163a9059cbb60e01b81523360048201526024810182905282906001600160a01b0382169063a9059cbb90604401602060405180830381600087803b158015610e5557600080fd5b505af1158015610e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8d919061256d565b50505050565b60006108ec3384610abd85604051806060016040528060258152602001612674602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611b4e565b60006108ec338484611387565b6005546001600160a01b03163314610f195760405162461bcd60e51b81526004016109209061247b565b600b805461ffff1916610101179055610f33436002612555565b601755565b6005546001600160a01b03163314610f625760405162461bcd60e51b81526004016109209061247b565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610fb75760405162461bcd60e51b81526004016109209061247b565b7f000000000000000000000000c26b5c60440d382b3461e234df60c42ff33a45a56001600160a01b0316826001600160a01b0316141561104c5760405162461bcd60e51b815260206004820152602a60248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201526936b0b935b2ba2830b4b960b11b6064820152608401610920565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110a15760405162461bcd60e51b81526004016109209061247b565b600780546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055565b6005546001600160a01b031633146110f95760405162461bcd60e51b81526004016109209061247b565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461114e5760405162461bcd60e51b81526004016109209061247b565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111a35760405162461bcd60e51b81526004016109209061247b565b604051339082156108fc029083906000818181858888f193505050501580156111d0573d6000803e3d6000fd5b5050565b6005546001600160a01b031633146111fe5760405162461bcd60e51b81526004016109209061247b565b6001600160a01b0381166112635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610920565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000806112cc8385612555565b90508381101561131e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610920565b9392505050565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166000908152601c602052604090205460ff161561140c5760405162461bcd60e51b815260206004820152603360248201527f53656e64657220697320626c61636b6c69737465643b2063616e6e6f7420707260448201527237b1b2b2b2103bb4ba34103a3930b739b332b960691b6064820152608401610920565b6001600160a01b0382166000908152601c602052604090205460ff16156114945760405162461bcd60e51b815260206004820152603660248201527f526563697069656e7420697320626c61636b6c69737465643b2063616e6e6f7460448201527510383937b1b2b2b2103bb4ba34103a3930b739b332b960511b6064820152608401610920565b600b54610100900460ff16806114b757506005546001600160a01b038481169116145b806114c957506001600160a01b038316155b6115155760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720686173206e6f7420737461727465642079657400000000006044820152606401610920565b8061152b5761152683836000611b88565b505050565b6005546001600160a01b0384811691161480159061155757506005546001600160a01b03838116911614155b801561156c5750600b5462010000900460ff16155b156117fb57600b5460ff166115ff576001600160a01b03831660009081526018602052604090205460ff16806115ba57506001600160a01b03821660009081526018602052604090205460ff165b6115ff5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610920565b6001600160a01b0383166000908152601b602052604090205460ff16801561164057506001600160a01b03821660009081526019602052604090205460ff16155b156116ba576008548111156116b55760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610920565b611771565b6001600160a01b0382166000908152601b602052604090205460ff1680156116fb57506001600160a01b03831660009081526019602052604090205460ff16155b15611771576009548111156117715760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610920565b6001600160a01b0382166000908152601a602052604090205460ff166117fb57600a546001600160a01b0383166000908152602081905260409020546117b79083612555565b11156117fb5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610920565b600b54610100900460ff16801561181b5750600b5462010000900460ff16155b801561183f57506001600160a01b0382166000908152601b602052604090205460ff165b801561186457506001600160a01b03831660009081526018602052604090205460ff16155b801561188957506001600160a01b03821660009081526018602052604090205460ff16155b156118b457600b805462ff00001916620100001790556118a7611c45565b600b805462ff0000191690555b600b546001600160a01b03841660009081526018602052604090205460ff6201000090920482161591168061190157506001600160a01b03831660009081526018602052604090205460ff165b1561190a575060005b8015611b4357600060175443101561199557611932606461192c856063611e52565b90611ed1565b9050606361194182605e6124e8565b61194b91906124c6565b6014600082825461195c9190612555565b909155506063905061196f8260056124e8565b61197991906124c6565b6016600082825461198a9190612555565b90915550611b249050565b6001600160a01b0384166000908152601b602052604090205460ff1680156119be575060105415155b15611a4c576010546119d89060649061192c908690611e52565b601054601354919250906119ec90836124e8565b6119f691906124c6565b60156000828254611a079190612555565b9091555050601054601154611a1c90836124e8565b611a2691906124c6565b60146000828254611a379190612555565b909155505060105460125461196f90836124e8565b6001600160a01b0385166000908152601b602052604090205460ff168015611a755750600c5415155b15611b2457600c54611a8f9060649061192c908690611e52565b600c54600f5491925090611aa390836124e8565b611aad91906124c6565b60156000828254611abe9190612555565b9091555050600c54600d54611ad390836124e8565b611add91906124c6565b60146000828254611aee9190612555565b9091555050600c54600e54611b0390836124e8565b611b0d91906124c6565b60166000828254611b1e9190612555565b90915550505b8015611b3557611b35853083611b88565b611b3f818461258a565b9250505b610e8d848484611b88565b60008184841115611b725760405162461bcd60e51b81526004016109209190612239565b506000611b7f848661258a565b95945050505050565b611bc581604051806060016040528060268152602001612699602691396001600160a01b0386166000908152602081905260409020549190611b4e565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611bf490826112bf565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161137a565b3060009081526020819052604081205490506000601654601454601554611c6c9190612555565b611c769190612555565b90506000821580611c85575081155b15611c8f57505050565b600060028360155486611ca291906124e8565b611cac91906124c6565b611cb691906124c6565b90506000611cc48583611f13565b905047611cd082611f55565b6000611cdc4783611f13565b90506000611cf98761192c60145485611e5290919063ffffffff16565b90506000611d168861192c60165486611e5290919063ffffffff16565b90506000611d248284612555565b611d2e908561258a565b60006015819055601481905560165590508615801590611d4e5750600081115b15611d9757611d5d878261211c565b60408051878152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b6006546001600160a01b0316611dad844761258a565b604051600081818185875af1925050503d8060008114611de9576040519150601f19603f3d011682016040523d82523d6000602084013e611dee565b606091505b50506007546040519199506001600160a01b0316904790600081818185875af1925050503d8060008114611e3e576040519150601f19603f3d011682016040523d82523d6000602084013e611e43565b606091505b50505050505050505050505050565b600082611e61575060006108f0565b6000611e6d83856124e8565b905082611e7a85836124c6565b1461131e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610920565b600061131e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061220b565b600061131e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b4e565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611f8a57611f8a6125a1565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561200357600080fd5b505afa158015612017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203b91906125b7565b8160018151811061204e5761204e6125a1565b60200260200101906001600160a01b031690816001600160a01b031681525050612099307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611325565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906120ee9085906000908690309042906004016125d4565b600060405180830381600087803b15801561210857600080fd5b505af1158015610dd9573d6000803e3d6000fd5b612147307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611325565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c4016060604051808303818588803b1580156121cb57600080fd5b505af11580156121df573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122049190612645565b5050505050565b6000818361222c5760405162461bcd60e51b81526004016109209190612239565b506000611b7f84866124c6565b600060208083528351808285015260005b818110156122665785810183015185820160400152820161224a565b81811115612278576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146122a357600080fd5b50565b600080604083850312156122b957600080fd5b82356122c48161228e565b946020939093013593505050565b6000602082840312156122e457600080fd5b813561131e8161228e565b6000806040838503121561230257600080fd5b50508035926020909101359150565b80151581146122a357600080fd5b60006020828403121561233157600080fd5b813561131e81612311565b60008060006060848603121561235157600080fd5b833561235c8161228e565b9250602084013561236c8161228e565b929592945050506040919091013590565b60006020828403121561238f57600080fd5b5035919050565b600080604083850312156123a957600080fd5b82356123b48161228e565b915060208301356123c481612311565b809150509250929050565b60008060008060008060c087890312156123e857600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561242557600080fd5b82356124308161228e565b915060208301356123c48161228e565b600181811c9082168061245457607f821691505b6020821081141561247557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000826124e357634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612502576125026124b0565b500290565b6020808252602e908201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e747360408201526d206c6f776572207468616e20312560901b606082015260800190565b60008219821115612568576125686124b0565b500190565b60006020828403121561257f57600080fd5b815161131e81612311565b60008282101561259c5761259c6124b0565b500390565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156125c957600080fd5b815161131e8161228e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126245784516001600160a01b0316835293830193918301916001016125ff565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561265a57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122023e8f39f8c175de35a4b20022f98a239e2fef5c4f6c6885d75727930c6c274d764736f6c63430008090033

Deployed Bytecode Sourcemap

13954:13638:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2400:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3348:168;;;;;;;;;;-1:-1:-1;3348:168:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;3348:168:0;1072:187:1;15333:63:0;;;;;;;;;;-1:-1:-1;15333:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18708:481;;;;;;;;;;-1:-1:-1;18708:481:0;;;;;:::i;:::-;;:::i;:::-;;2736:107;;;;;;;;;;-1:-1:-1;2823:12:0;;2736:107;;;1915:25:1;;;1903:2;1888:18;2736:107:0;1769:177:1;19596:101:0;;;;;;;;;;-1:-1:-1;19596:101:0;;;;;:::i;:::-;;:::i;3530:354::-;;;;;;;;;;-1:-1:-1;3530:354:0;;;;;:::i;:::-;;:::i;19232:268::-;;;;;;;;;;-1:-1:-1;19232:268:0;;;;;:::i;:::-;;:::i;2630:92::-;;;;;;;;;;-1:-1:-1;2630:92:0;;2712:2;3108:36:1;;3096:2;3081:18;2630:92:0;2966:184:1;3898:217:0;;;;;;;;;;-1:-1:-1;3898:217:0;;;;;:::i;:::-;;:::i;14081:38::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3319:32:1;;;3301:51;;3289:2;3274:18;14081:38:0;3155:203:1;21598:125:0;;;;;;;;;;-1:-1:-1;21598:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;21687:28:0;21663:4;21687:28;;;:19;:28;;;;;;;;;21598:125;14273:28;;;;;;;;;;;;;;;;14406:31;;;;;;;;;;-1:-1:-1;14406:31:0;;;;;;;;;;;2856:126;;;;;;;;;;-1:-1:-1;2856:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;2956:18:0;2929:7;2956:18;;;;;;;;;;;;2856:126;7163:148;;;;;;;;;;;;;:::i;20942:144::-;;;;;;;;;;-1:-1:-1;20942:144:0;;;;;:::i;:::-;;:::i;14239:27::-;;;;;;;;;;;;;;;;6939:78;;;;;;;;;;-1:-1:-1;7003:6:0;;-1:-1:-1;;;;;7003:6:0;6939:78;;14311:28;;;;;;;;;;;;;;;;2513:103;;;;;;;;;;;;;:::i;19731:911::-;;;;;;;;;;-1:-1:-1;19731:911:0;;;;;:::i;:::-;;:::i;18257:199::-;;;;;;;;;;-1:-1:-1;18257:199:0;;;;;:::i;:::-;;:::i;4129:268::-;;;;;;;;;;-1:-1:-1;4129:268:0;;;;;:::i;:::-;;:::i;2996:174::-;;;;;;;;;;-1:-1:-1;2996:174:0;;;;;:::i;:::-;;:::i;14444:22::-;;;;;;;;;;-1:-1:-1;14444:22:0;;;;;;;;;;;18510:143;;;;;;;;;;;;;:::i;20654:132::-;;;;;;;;;;-1:-1:-1;20654:132:0;;;;;:::i;:::-;;:::i;21096:196::-;;;;;;;;;;-1:-1:-1;21096:196:0;;;;;:::i;:::-;;:::i;14785:269::-;;;;;;;;;;-1:-1:-1;14785:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4621:25:1;;;4677:2;4662:18;;4655:34;;;;4705:18;;;4698:34;;;;4763:2;4748:18;;4741:34;;;;4806:3;4791:19;;4784:35;4850:3;4835:19;;4828:35;4894:3;4879:19;;4872:35;4938:3;4923:19;;4916:35;4608:3;4593:19;14785:269:0;4278:679:1;21362:178:0;;;;;;;;;;-1:-1:-1;21362:178:0;;;;;:::i;:::-;;:::i;15403:56::-;;;;;;;;;;-1:-1:-1;15403:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;3184:150;;;;;;;;;;-1:-1:-1;3184:150:0;;;;;:::i;:::-;-1:-1:-1;;;;;3299:18:0;;;3272:7;3299:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3184:150;20792:144;;;;;;;;;;-1:-1:-1;20792:144:0;;;;;:::i;:::-;;:::i;17704:137::-;;;;;;;;;;-1:-1:-1;17704:137:0;;;;;:::i;:::-;;:::i;18072:110::-;;;;;;;;;;-1:-1:-1;18072:110:0;;;;;:::i;:::-;;:::i;7325:244::-;;;;;;;;;;-1:-1:-1;7325:244:0;;;;;:::i;:::-;;:::i;15468:42::-;;;;;;;;;;-1:-1:-1;15468:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14032;;;;;;;;;;;;;;;17897:109;;;;;;;;;;-1:-1:-1;17897:109:0;;;;;:::i;:::-;-1:-1:-1;;;;;17979:19:0;17956:4;17979:19;;;:12;:19;;;;;;;;;17897:109;2400:99;2453:13;2486:5;2479:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2400:99;:::o;3348:168::-;3430:4;3447:39;1914:10;3470:7;3479:6;3447:8;:39::i;:::-;-1:-1:-1;3504:4:0;3348:168;;;;;:::o;18708:481::-;7070:6;;-1:-1:-1;;;;;7070:6:0;1914:10;7070:22;7062:67;;;;-1:-1:-1;;;7062:67:0;;;;;;;:::i;:::-;;;;;;;;;18870:4:::1;18854:13;2823:12:::0;;;2736:107;18854:13:::1;:20;;;;:::i;:::-;18844:4;18831:9;18815:13;2823:12:::0;;;2736:107;18815:13:::1;:25;;;;:::i;:::-;18814:34;;;;:::i;:::-;18813:62;;18805:121;;;;-1:-1:-1::0;;;18805:121:0::1;;;;;;;:::i;:::-;19003:4;18987:13;2823:12:::0;;;2736:107;18987:13:::1;:20;;;;:::i;:::-;18977:4;18963:10;18947:13;2823:12:::0;;;2736:107;18947:13:::1;:26;;;;:::i;:::-;18946:35;;;;:::i;:::-;18945:63;;18937:122;;;;-1:-1:-1::0;;;18937:122:0::1;;;;;;;:::i;:::-;19115:4;19102:9;19086:13;2823:12:::0;;;2736:107;19086:13:::1;:25;;;;:::i;:::-;19085:34;;;;:::i;:::-;19070:12;:49:::0;19177:4:::1;19163:10:::0;19147:13:::1;2823:12:::0;;;2736:107;19147:13:::1;:26;;;;:::i;:::-;19146:35;;;;:::i;:::-;19130:13;:51:::0;-1:-1:-1;;18708:481:0:o;19596:101::-;7070:6;;-1:-1:-1;;;;;7070:6:0;1914:10;7070:22;7062:67;;;;-1:-1:-1;;;7062:67:0;;;;;;;:::i;:::-;19668:11:::1;:21:::0;;;::::1;;;;-1:-1:-1::0;;19668:21:0;;::::1;::::0;;;::::1;::::0;;19596:101::o;3530:354::-;3669:4;3686:36;3696:6;3704:9;3715:6;3686:9;:36::i;:::-;3733:121;3742:6;1914:10;3764:89;3802:6;3764:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3764:19:0;;;;;;:11;:19;;;;;;;;1914:10;3764:33;;;;;;;;;;:37;:89::i;:::-;3733:8;:121::i;:::-;-1:-1:-1;3872:4:0;3530:354;;;;;:::o;19232:268::-;7070:6;;-1:-1:-1;;;;;7070:6:0;1914:10;7070:22;7062:67;;;;-1:-1:-1;;;7062:67:0;;;;;;;:::i;:::-;19383:4:::1;19367:13;2823:12:::0;;;2736:107;19367:13:::1;:20;;;;:::i;:::-;19357:4;19340:13;19324;2823:12:::0;;;2736:107;19324:13:::1;:29;;;;:::i;:::-;19323:38;;;;:::i;:::-;19322:66;;19314:113;;;::::0;-1:-1:-1;;;19314:113:0;;7480:2:1;19314:113:0::1;::::0;::::1;7462:21:1::0;7519:2;7499:18;;;7492:30;7558:34;7538:18;;;7531:62;-1:-1:-1;;;7609:18:1;;;7602:32;7651:19;;19314:113:0::1;7278:398:1::0;19314:113:0::1;19488:4;19471:13;19455;2823:12:::0;;;2736:107;19455:13:::1;:29;;;;:::i;:::-;19454:38;;;;:::i;:::-;19438:13;:54:::0;-1:-1:-1;19232:268:0:o;3898:217::-;1914:10;3985:4;4034:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4034:34:0;;;;;;;;;;3985:4;;4002:83;;4025:7;;4034:50;;4073:10;4034:38;:50::i;7163:148::-;7070:6;;-1:-1:-1;;;;;7070:6:0;1914:10;7070:22;7062:67;;;;-1:-1:-1;;;7062:67:0;;;;;;;:::i;:::-;7254:6:::1;::::0;7233:40:::1;::::0;7270:1:::1;::::0;-1:-1:-1;;;;;7254:6:0::1;::::0;7233:40:::1;::::0;7270:1;;7233:40:::1;7284:6;:19:::0;;-1:-1:-1;;;;;;7284:19:0::1;::::0;;7163:148::o;20942:144::-;7070:6;;-1:-1:-1;;;;;7070:6:0;1914:10;7070:22;7062:67;;;;-1:-1:-1;;;7062:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21032:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;21032:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20942:144::o;2513:103::-;2568:13;2601:7;2594:14;;;;;:::i;19731:911::-;7070:6;;-1:-1:-1;;;;;7070:6:0;1914:10;7070:22;7062:67;;;;-1:-1:-1;;;7062:67:0;;;;;;;:::i;:::-;19942:21;:40;;;19993:21;:40;;;20044:24;:46;;;20071:19;20122:45:::1;20017:16:::0;19966;20122:45:::1;:::i;:::-;:72;;;;:::i;:::-;20101:5;:93:::0;20207:22;:42;;;20260:22;:42;;;20313:25;:48;;;20341:20;20394:47:::1;20285:17:::0;20232;20394:47:::1;:::i;:::-;:75;;;;:::i;:::-;20372:19:::0;:97;:5:::1;20488:18:::0;20510:2:::1;-1:-1:-1::0;20488:24:0::1;20480:66;;;::::0;-1:-1:-1;;;20480:66:0;;8016:2:1;20480:66:0::1;::::0;::::1;7998:21:1::0;8055:2;8035:18;;;8028:30;8094:31;8074:18;;;8067:59;8143:18;;20480:66:0::1;7814:353:1::0;20480:66:0::1;20568:19:::0;;20591:2:::1;-1:-1:-1::0;20568:25:0::1;20560:67;;;::::0;-1:-1:-1;;;20560:67:0;;8016:2:1;20560:67:0::1;::::0;::::1;7998:21:1::0;8055:2;8035:18;;;8028:30;8094:31;8074:18;;;8067:59;8143:18;;20560:67:0::1;7814:353:1::0;20560:67:0::1;19731:911:::0;;;;;;:::o;18257:199::-;7070:6;;-1:-1:-1;;;;;7070:6:0;1914:10;7070:22;7062:67;;;;-1:-1:-1;;;7062:67:0;;;;;;;:::i;:::-;18407:41:::1;::::0;-1:-1:-1;;;18407:41:0;;18429:10:::1;18407:41;::::0;::::1;8346:51:1::0;8413:18;;;8406:34;;;18380:15:0;;-1:-1:-1;;;;;18407:21:0;::::1;::::0;::::1;::::0;8319:18:1;;18407:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18340:116;18257:199:::0;;:::o;4129:268::-;4221:4;4238:129;1914:10;4261:7;4270:96;4309:15;4270:96;;;;;;;;;;;;;;;;;1914:10;4270:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4270:34:0;;;;;;;;;;;;:38;:96::i;2996:174::-;3081:4;3098:42;1914:10;3122:9;3133:6;3098:9;:42::i;18510:143::-;7070:6;;-1:-1:-1;;;;;7070:6:0;1914:10;7070:22;7062:67;;;;-1:-1:-1;;;7062:67:0;;;;;;;:::i;:::-;18563:9:::1;:16:::0;;-1:-1:-1;;18590:18:0;;;;;18629:16:::1;:12;18644:1;18629:16;:::i;:::-;18619:7;:26:::0;18510:143::o;20654:132::-;7070:6;;-1:-1:-1;;;;;7070:6:0;1914:10;7070:22;7062:67;;;;-1:-1:-1;;;7062:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20739:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:39;;-1:-1:-1;;20739:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20654:132::o;21096:196::-;7070:6;;-1:-1:-1;;;;;7070:6:0;1914:10;7070:22;7062:67;;;;-1:-1:-1;;;7062:67:0;;;;;;;:::i;:::-;21189:13:::1;-1:-1:-1::0;;;;;21181:21:0::1;:4;-1:-1:-1::0;;;;;21181:21:0::1;;;21173:76;;;::::0;-1:-1:-1;;;21173:76:0;;8903:2:1;21173:76:0::1;::::0;::::1;8885:21:1::0;8942:2;8922:18;;;8915:30;8981:34;8961:18;;;8954:62;-1:-1:-1;;;9032:18:1;;;9025:40;9082:19;;21173:76:0::1;8701:406:1::0;21173:76:0::1;-1:-1:-1::0;;;;;21260:16:0;;;::::1;;::::0;;;:10:::1;:16;::::0;;;;:24;;-1:-1:-1;;21260:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21096:196::o;21362:178::-;7070:6;;-1:-1:-1;;;;;7070:6:0;1914:10;7070:22;7062:67;;;;-1:-1:-1;;;7062:67:0;;;;;;;:::i;:::-;21459:15:::1;:34:::0;;-1:-1:-1;;;;;21459:34:0;;::::1;-1:-1:-1::0;;;;;;21459:34:0;;::::1;;::::0;;;21504:12:::1;:28:::0;;;;;::::1;::::0;::::1;;::::0;;21362:178::o;20792:144::-;7070:6;;-1:-1:-1;;;;;7070:6:0;1914:10;7070:22;7062:67;;;;-1:-1:-1;;;7062:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20884:33:0;;;::::1;;::::0;;;:24:::1;:33;::::0;;;;:44;;-1:-1:-1;;20884:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20792:144::o;17704:137::-;7070:6;;-1:-1:-1;;;;;7070:6:0;1914:10;7070:22;7062:67;;;;-1:-1:-1;;;7062:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17794:22:0;;;::::1;;::::0;;;:12:::1;:22;::::0;;;;:39;;-1:-1:-1;;17794:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17704:137::o;18072:110::-;7070:6;;-1:-1:-1;;;;;7070:6:0;1914:10;7070:22;7062:67;;;;-1:-1:-1;;;7062:67:0;;;;;;;:::i;:::-;18138:36:::1;::::0;18146:10:::1;::::0;18138:36;::::1;;;::::0;18167:6;;18138:36:::1;::::0;;;18167:6;18146:10;18138:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18072:110:::0;:::o;7325:244::-;7070:6;;-1:-1:-1;;;;;7070:6:0;1914:10;7070:22;7062:67;;;;-1:-1:-1;;;7062:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7414:22:0;::::1;7406:73;;;::::0;-1:-1:-1;;;7406:73:0;;9314:2:1;7406:73:0::1;::::0;::::1;9296:21:1::0;9353:2;9333:18;;;9326:30;9392:34;9372:18;;;9365:62;-1:-1:-1;;;9443:18:1;;;9436:36;9489:19;;7406:73:0::1;9112:402:1::0;7406:73:0::1;7516:6;::::0;7495:38:::1;::::0;-1:-1:-1;;;;;7495:38:0;;::::1;::::0;7516:6:::1;::::0;7495:38:::1;::::0;7516:6:::1;::::0;7495:38:::1;7544:6;:17:::0;;-1:-1:-1;;;;;;7544:17:0::1;-1:-1:-1::0;;;;;7544:17:0;;;::::1;::::0;;;::::1;::::0;;7325:244::o;5364:180::-;5421:7;;5453:5;5457:1;5453;:5;:::i;:::-;5441:17;;5482:1;5477;:6;;5469:46;;;;-1:-1:-1;;;5469:46:0;;9721:2:1;5469:46:0;;;9703:21:1;9760:2;9740:18;;;9733:30;9799:29;9779:18;;;9772:57;9846:18;;5469:46:0;9519:351:1;5469:46:0;5535:1;5364:180;-1:-1:-1;;;5364:180:0:o;5099:220::-;-1:-1:-1;;;;;5227:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5279:32;;1915:25:1;;;5279:32:0;;1888:18:1;5279:32:0;;;;;;;;5099:220;;;:::o;21731:3452::-;-1:-1:-1;;;;;17979:19:0;;17956:4;17979:19;;;:12;:19;;;;;;;;21872:22;21864:86;;;;-1:-1:-1;;;21864:86:0;;10077:2:1;21864:86:0;;;10059:21:1;10116:2;10096:18;;;10089:30;10155:34;10135:18;;;10128:62;-1:-1:-1;;;10206:18:1;;;10199:49;10265:19;;21864:86:0;9875:415:1;21864:86:0;-1:-1:-1;;;;;17979:19:0;;17956:4;17979:19;;;:12;:19;;;;;;;;21969:25;21961:92;;;;-1:-1:-1;;;21961:92:0;;10497:2:1;21961:92:0;;;10479:21:1;10536:2;10516:18;;;10509:30;10575:34;10555:18;;;10548:62;-1:-1:-1;;;10626:18:1;;;10619:52;10688:19;;21961:92:0;10295:418:1;21961:92:0;22072:11;;;;;;;;:32;;-1:-1:-1;7003:6:0;;-1:-1:-1;;;;;22087:17:0;;;7003:6;;22087:17;22072:32;:56;;;-1:-1:-1;;;;;;22108:20:0;;;22072:56;22064:96;;;;-1:-1:-1;;;22064:96:0;;10920:2:1;22064:96:0;;;10902:21:1;10959:2;10939:18;;;10932:30;10998:29;10978:18;;;10971:57;11045:18;;22064:96:0;10718:351:1;22064:96:0;22177:11;22173:102;;22205:37;22221:6;22229:9;22240:1;22205:15;:37::i;:::-;21731:3452;;;:::o;22173:102::-;7003:6;;-1:-1:-1;;;;;22305:17:0;;;7003:6;;22305:17;;;;:54;;-1:-1:-1;7003:6:0;;-1:-1:-1;;;;;22339:20:0;;;7003:6;;22339:20;;22305:54;:82;;;;-1:-1:-1;22377:10:0;;;;;;;22376:11;22305:82;22287:884;;;22421:9;;;;22416:147;;-1:-1:-1;;;;;22459:27:0;;;;;;:19;:27;;;;;;;;;:61;;-1:-1:-1;;;;;;22490:30:0;;;;;;:19;:30;;;;;;;;22459:61;22451:96;;;;-1:-1:-1;;;22451:96:0;;11276:2:1;22451:96:0;;;11258:21:1;11315:2;11295:18;;;11288:30;-1:-1:-1;;;11334:18:1;;;11327:52;11396:18;;22451:96:0;11074:346:1;22451:96:0;-1:-1:-1;;;;;22581:18:0;;;;;;:10;:18;;;;;;;;:65;;;;-1:-1:-1;;;;;;22604:42:0;;;;;;:31;:42;;;;;;;;22603:43;22581:65;22577:410;;;22685:12;;22675:6;:22;;22667:88;;;;-1:-1:-1;;;22667:88:0;;11627:2:1;22667:88:0;;;11609:21:1;11666:2;11646:18;;;11639:30;11705:34;11685:18;;;11678:62;-1:-1:-1;;;11756:18:1;;;11749:51;11817:19;;22667:88:0;11425:417:1;22667:88:0;22577:410;;;-1:-1:-1;;;;;22795:21:0;;;;;;:10;:21;;;;;;;;:65;;;;-1:-1:-1;;;;;;22821:39:0;;;;;;:31;:39;;;;;;;;22820:40;22795:65;22791:196;;;22899:13;;22889:6;:23;;22881:90;;;;-1:-1:-1;;;22881:90:0;;12049:2:1;22881:90:0;;;12031:21:1;12088:2;12068:18;;;12061:30;12127:34;12107:18;;;12100:62;-1:-1:-1;;;12178:18:1;;;12171:52;12240:19;;22881:90:0;11847:418:1;22881:90:0;-1:-1:-1;;;;;23008:35:0;;;;;;:24;:35;;;;;;;;23003:155;;23105:13;;-1:-1:-1;;;;;2956:18:0;;2929:7;2956:18;;;;;;;;;;;23072:29;;:6;:29;:::i;:::-;:46;;23064:78;;;;-1:-1:-1;;;23064:78:0;;12472:2:1;23064:78:0;;;12454:21:1;12511:2;12491:18;;;12484:30;-1:-1:-1;;;12530:18:1;;;12523:49;12589:18;;23064:78:0;12270:343:1;23064:78:0;23201:11;;;;;;;:39;;;;-1:-1:-1;23230:10:0;;;;;;;23229:11;23201:39;:77;;;;-1:-1:-1;;;;;;23257:21:0;;;;;;:10;:21;;;;;;;;23201:77;:122;;;;-1:-1:-1;;;;;;23296:27:0;;;;;;:19;:27;;;;;;;;23295:28;23201:122;:170;;;;-1:-1:-1;;;;;;23341:30:0;;;;;;:19;:30;;;;;;;;23340:31;23201:170;23183:302;;;23398:10;:17;;-1:-1:-1;;23398:17:0;;;;;23430:10;:8;:10::i;:::-;23455;:18;;-1:-1:-1;;23455:18:0;;;23183:302;23514:10;;-1:-1:-1;;;;;23626:27:0;;23498:12;23626:27;;;:19;:27;;;;;;23514:10;;;;;;;23513:11;;23626:27;;:61;;-1:-1:-1;;;;;;23657:30:0;;;;;;:19;:30;;;;;;;;23626:61;23622:109;;;-1:-1:-1;23714:5:0;23622:109;23832:7;23828:1293;;;23856:12;23905:7;;23890:12;:22;23887:1081;;;23940:23;23959:3;23940:14;:6;23951:2;23940:10;:14::i;:::-;:18;;:23::i;:::-;23933:30;-1:-1:-1;24018:2:0;24005:9;23933:30;24012:2;24005:9;:::i;:::-;24004:16;;;;:::i;:::-;23982:18;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;24077:2:0;;-1:-1:-1;24065:8:0;:4;24072:1;24065:8;:::i;:::-;24064:15;;;;:::i;:::-;24039:21;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;23887:1081:0;;-1:-1:-1;23887:1081:0;;-1:-1:-1;;;;;24105:21:0;;;;;;:10;:21;;;;;;;;:48;;;;-1:-1:-1;24130:19:0;;:23;;24105:48;24101:867;;;24192:19;;24181:40;;24217:3;;24181:31;;:6;;:10;:31::i;:40::-;24294:19;;24269:22;;24174:47;;-1:-1:-1;24294:19:0;24262:29;;24174:47;24262:29;:::i;:::-;:51;;;;:::i;:::-;24240:18;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;;24386:19:0;;24361:22;;24354:29;;:4;:29;:::i;:::-;:51;;;;:::i;:::-;24332:18;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;;24484:19:0;;24456:25;;24449:32;;:4;:32;:::i;24101:867::-;-1:-1:-1;;;;;24565:18:0;;;;;;:10;:18;;;;;;;;:44;;;;-1:-1:-1;24587:5:0;:18;:22;;24565:44;24561:407;;;24648:5;:18;24637:39;;24672:3;;24637:30;;:6;;:10;:30::i;:39::-;24748:5;:18;24724:21;;24630:46;;-1:-1:-1;24748:18:0;24717:28;;24630:46;24717:28;:::i;:::-;:49;;;;:::i;:::-;24695:18;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;24838:5:0;:18;24814:21;;24807:28;;:4;:28;:::i;:::-;:49;;;;:::i;:::-;24785:18;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;24934:5:0;:18;24907:24;;24900:31;;:4;:31;:::i;:::-;:52;;;;:::i;:::-;24875:21;;:77;;;;;;;:::i;:::-;;;;-1:-1:-1;;24561:407:0;24988:8;;24984:93;;25017:44;25033:6;25049:4;25056;25017:15;:44::i;:::-;25093:14;25103:4;25093:14;;:::i;:::-;;;23841:1280;23828:1293;25133:42;25149:6;25157:9;25168:6;25133:15;:42::i;5705:191::-;5790:7;5826:12;5818:6;;;;5810:29;;;;-1:-1:-1;;;5810:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5850:9:0;5862:5;5866:1;5862;:5;:::i;:::-;5850:17;5705:191;-1:-1:-1;;;;;5705:191:0:o;4407:348::-;4559:71;4581:6;4559:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4559:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;4539:17:0;;;:9;:17;;;;;;;;;;;:91;;;;4664:20;;;;;;;:32;;4689:6;4664:24;:32::i;:::-;-1:-1:-1;;;;;4641:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;4712:35;1915:25:1;;;4641:20:0;;4712:35;;;;;;1888:18:1;4712:35:0;1769:177:1;26113:1474:0;26201:4;26152:28;2956:18;;;;;;;;;;;26152:55;;26218:14;26277:21;;26256:18;;26235;;:39;;;;:::i;:::-;:63;;;;:::i;:::-;26218:80;-1:-1:-1;26309:12:0;26338:25;;;:40;;-1:-1:-1;26367:11:0;;26338:40;26334:57;;;26382:7;;;26113:1474::o;26334:57::-;26452:23;26531:1;26522:6;26501:18;;26478:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;26452:80;-1:-1:-1;26543:26:0;26572:41;:20;26452:80;26572:24;:41::i;:::-;26543:70;-1:-1:-1;26655:21:0;26689:36;26543:70;26689:16;:36::i;:::-;26740:18;26761:44;:21;26787:17;26761:25;:44::i;:::-;26740:65;;26819:23;26845:46;26884:6;26845:34;26860:18;;26845:10;:14;;:34;;;;:::i;:46::-;26819:72;;26902:26;26931:49;26973:6;26931:37;26946:21;;26931:10;:14;;:37;;;;:::i;:49::-;26902:78;-1:-1:-1;26991:23:0;27031:36;26902:78;27031:15;:36;:::i;:::-;27017:51;;:10;:51;:::i;:::-;27104:1;27083:18;:22;;;27116:18;:22;;;27149:21;:25;26991:77;-1:-1:-1;27193:19:0;;;;;:42;;;27234:1;27216:15;:19;27193:42;27189:192;;;27252:46;27265:15;27282;27252:12;:46::i;:::-;27318:51;;;12922:25:1;;;12978:2;12963:18;;12956:34;;;27318:51:0;;12895:18:1;27318:51:0;;;;;;;27189:192;27414:12;;-1:-1:-1;;;;;27414:12:0;27442:39;27466:15;27442:21;:39;:::i;:::-;27406:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27521:15:0;;27513:66;;27393:96;;-1:-1:-1;;;;;;27521:15:0;;27551:21;;27513:66;;;;27551:21;27521:15;27513:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;26113:1474:0:o;5904:256::-;5961:7;5991:6;5987:47;;-1:-1:-1;6021:1:0;6014:8;;5987:47;6047:9;6059:5;6063:1;6059;:5;:::i;:::-;6047:17;-1:-1:-1;6092:1:0;6083:5;6087:1;6047:17;6083:5;:::i;:::-;:10;6075:56;;;;-1:-1:-1;;;6075:56:0;;13413:2:1;6075:56:0;;;13395:21:1;13452:2;13432:18;;;13425:30;13491:34;13471:18;;;13464:62;-1:-1:-1;;;13542:18:1;;;13535:31;13583:19;;6075:56:0;13211:397:1;6171:131:0;6228:7;6255:39;6259:1;6262;6255:39;;;;;;;;;;;;;;;;;:3;:39::i;5557:135::-;5614:7;5641:43;5645:1;5648;5641:43;;;;;;;;;;;;;;;;;:3;:43::i;25191:556::-;25339:16;;;25353:1;25339:16;;;;;;;;25315:21;;25339:16;;;;;;;;;;-1:-1:-1;25339:16:0;25315:40;;25384:4;25366;25371:1;25366:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;25366:23:0;;;-1:-1:-1;;;;;25366:23:0;;;;;25410:6;-1:-1:-1;;;;;25410:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25400:4;25405:1;25400:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;25400:23:0;;;-1:-1:-1;;;;;25400:23:0;;;;;25436:49;25453:4;25468:6;25477:7;25436:8;:49::i;:::-;25526:211;;-1:-1:-1;;;25526:211:0;;-1:-1:-1;;;;;25526:6:0;:57;;;;:211;;25598:7;;25620:1;;25664:4;;25691;;25711:15;;25526:211;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25755:350;25899:49;25916:4;25931:6;25940:7;25899:8;:49::i;:::-;25991:106;;-1:-1:-1;;;25991:106:0;;26043:4;25991:106;;;15459:34:1;;;15509:18;;;15502:34;;;26059:1:0;15552:18:1;;;15545:34;;;15595:18;;;15588:34;15638:19;;;15631:44;26081:15:0;15691:19:1;;;15684:35;25991:6:0;-1:-1:-1;;;;;25991:22:0;;;;26022:9;;15393:19:1;;25991:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25755:350;;:::o;6314:277::-;6399:7;6434:12;6427:5;6419:28;;;;-1:-1:-1;;;6419:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6458:9:0;6470:5;6474:1;6470;:5;:::i;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;671:70;616:131;:::o;752:315::-;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:247::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;1431:9;1418:23;1450:31;1475:5;1450:31;:::i;1516:248::-;1584:6;1592;1645:2;1633:9;1624:7;1620:23;1616:32;1613:52;;;1661:1;1658;1651:12;1613:52;-1:-1:-1;;1684:23:1;;;1754:2;1739:18;;;1726:32;;-1:-1:-1;1516:248:1:o;1951:118::-;2037:5;2030:13;2023:21;2016:5;2013:32;2003:60;;2059:1;2056;2049:12;2074:241;2130:6;2183:2;2171:9;2162:7;2158:23;2154:32;2151:52;;;2199:1;2196;2189:12;2151:52;2238:9;2225:23;2257:28;2279:5;2257:28;:::i;2320:456::-;2397:6;2405;2413;2466:2;2454:9;2445:7;2441:23;2437:32;2434:52;;;2482:1;2479;2472:12;2434:52;2521:9;2508:23;2540:31;2565:5;2540:31;:::i;:::-;2590:5;-1:-1:-1;2647:2:1;2632:18;;2619:32;2660:33;2619:32;2660:33;:::i;:::-;2320:456;;2712:7;;-1:-1:-1;;;2766:2:1;2751:18;;;;2738:32;;2320:456::o;2781:180::-;2840:6;2893:2;2881:9;2872:7;2868:23;2864:32;2861:52;;;2909:1;2906;2899:12;2861:52;-1:-1:-1;2932:23:1;;2781:180;-1:-1:-1;2781:180:1:o;3363:382::-;3428:6;3436;3489:2;3477:9;3468:7;3464:23;3460:32;3457:52;;;3505:1;3502;3495:12;3457:52;3544:9;3531:23;3563:31;3588:5;3563:31;:::i;:::-;3613:5;-1:-1:-1;3670:2:1;3655:18;;3642:32;3683:30;3642:32;3683:30;:::i;:::-;3732:7;3722:17;;;3363:382;;;;;:::o;3750:523::-;3854:6;3862;3870;3878;3886;3894;3947:3;3935:9;3926:7;3922:23;3918:33;3915:53;;;3964:1;3961;3954:12;3915:53;-1:-1:-1;;3987:23:1;;;4057:2;4042:18;;4029:32;;-1:-1:-1;4108:2:1;4093:18;;4080:32;;4159:2;4144:18;;4131:32;;-1:-1:-1;4210:3:1;4195:19;;4182:33;;-1:-1:-1;4262:3:1;4247:19;4234:33;;-1:-1:-1;3750:523:1;-1:-1:-1;3750:523:1:o;4962:388::-;5030:6;5038;5091:2;5079:9;5070:7;5066:23;5062:32;5059:52;;;5107:1;5104;5097:12;5059:52;5146:9;5133:23;5165:31;5190:5;5165:31;:::i;:::-;5215:5;-1:-1:-1;5272:2:1;5257:18;;5244:32;5285:33;5244:32;5285:33;:::i;5590:380::-;5669:1;5665:12;;;;5712;;;5733:61;;5787:4;5779:6;5775:17;5765:27;;5733:61;5840:2;5832:6;5829:14;5809:18;5806:38;5803:161;;;5886:10;5881:3;5877:20;5874:1;5867:31;5921:4;5918:1;5911:15;5949:4;5946:1;5939:15;5803:161;;5590:380;;;:::o;5975:356::-;6177:2;6159:21;;;6196:18;;;6189:30;6255:34;6250:2;6235:18;;6228:62;6322:2;6307:18;;5975:356::o;6336:127::-;6397:10;6392:3;6388:20;6385:1;6378:31;6428:4;6425:1;6418:15;6452:4;6449:1;6442:15;6468:217;6508:1;6534;6524:132;;6578:10;6573:3;6569:20;6566:1;6559:31;6613:4;6610:1;6603:15;6641:4;6638:1;6631:15;6524:132;-1:-1:-1;6670:9:1;;6468:217::o;6690:168::-;6730:7;6796:1;6792;6788:6;6784:14;6781:1;6778:21;6773:1;6766:9;6759:17;6755:45;6752:71;;;6803:18;;:::i;:::-;-1:-1:-1;6843:9:1;;6690:168::o;6863:410::-;7065:2;7047:21;;;7104:2;7084:18;;;7077:30;7143:34;7138:2;7123:18;;7116:62;-1:-1:-1;;;7209:2:1;7194:18;;7187:44;7263:3;7248:19;;6863:410::o;7681:128::-;7721:3;7752:1;7748:6;7745:1;7742:13;7739:39;;;7758:18;;:::i;:::-;-1:-1:-1;7794:9:1;;7681:128::o;8451:245::-;8518:6;8571:2;8559:9;8550:7;8546:23;8542:32;8539:52;;;8587:1;8584;8577:12;8539:52;8619:9;8613:16;8638:28;8660:5;8638:28;:::i;12618:125::-;12658:4;12686:1;12683;12680:8;12677:34;;;12691:18;;:::i;:::-;-1:-1:-1;12728:9:1;;12618:125::o;13745:127::-;13806:10;13801:3;13797:20;13794:1;13787:31;13837:4;13834:1;13827:15;13861:4;13858:1;13851:15;13877:251;13947:6;14000:2;13988:9;13979:7;13975:23;13971:32;13968:52;;;14016:1;14013;14006:12;13968:52;14048:9;14042:16;14067:31;14092:5;14067:31;:::i;14133:980::-;14395:4;14443:3;14432:9;14428:19;14474:6;14463:9;14456:25;14500:2;14538:6;14533:2;14522:9;14518:18;14511:34;14581:3;14576:2;14565:9;14561:18;14554:31;14605:6;14640;14634:13;14671:6;14663;14656:22;14709:3;14698:9;14694:19;14687:26;;14748:2;14740:6;14736:15;14722:29;;14769:1;14779:195;14793:6;14790:1;14787:13;14779:195;;;14858:13;;-1:-1:-1;;;;;14854:39:1;14842:52;;14949:15;;;;14914:12;;;;14890:1;14808:9;14779:195;;;-1:-1:-1;;;;;;;15030:32:1;;;;15025:2;15010:18;;15003:60;-1:-1:-1;;;15094:3:1;15079:19;15072:35;14991:3;14133:980;-1:-1:-1;;;14133:980:1:o;15730:306::-;15818:6;15826;15834;15887:2;15875:9;15866:7;15862:23;15858:32;15855:52;;;15903:1;15900;15893:12;15855:52;15932:9;15926:16;15916:26;;15982:2;15971:9;15967:18;15961:25;15951:35;;16026:2;16015:9;16011:18;16005:25;15995:35;;15730:306;;;;;:::o

Swarm Source

ipfs://23e8f39f8c175de35a4b20022f98a239e2fef5c4f6c6885d75727930c6c274d7

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.