ETH Price: $3,614.71 (-2.09%)

Contract

0xa5c17D266bdE7c68EEa59260ccfA004263Eda481
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Approve183541752023-10-15 7:05:47414 days ago1697353547IN
0xa5c17D26...263Eda481
0 ETH0.000124235.10346246
Approve176890742023-07-14 3:35:59507 days ago1689305759IN
0xa5c17D26...263Eda481
0 ETH0.000501220.58916321
Approve172099902023-05-07 16:56:47575 days ago1683478607IN
0xa5c17D26...263Eda481
0 ETH0.00686974147.52386586
Approve170120042023-04-09 16:47:47603 days ago1681058867IN
0xa5c17D26...263Eda481
0 ETH0.000533221.90368518
Approve169538052023-04-01 10:48:35611 days ago1680346115IN
0xa5c17D26...263Eda481
0 ETH0.000467119.18858528
Approve167724182023-03-06 22:57:35636 days ago1678143455IN
0xa5c17D26...263Eda481
0 ETH0.001551333.31336503
Approve164013542023-01-14 0:07:23688 days ago1673654843IN
0xa5c17D26...263Eda481
0 ETH0.0006647127.30621629
Transfer163079332022-12-31 23:08:35701 days ago1672528115IN
0xa5c17D26...263Eda481
0 ETH0.0009596516.03432038
Approve163078412022-12-31 22:50:11701 days ago1672527011IN
0xa5c17D26...263Eda481
0 ETH0.000876918.80675461
Approve161100582022-12-04 7:48:59729 days ago1670140139IN
0xa5c17D26...263Eda481
0 ETH0.0005897812.64893665
Approve157927162022-10-20 23:52:23773 days ago1666309943IN
0xa5c17D26...263Eda481
0 ETH0.0006495226.68227916
Approve155584862022-09-18 5:55:35806 days ago1663480535IN
0xa5c17D26...263Eda481
0 ETH0.000146566.02098269
Approve155017132022-09-09 8:22:51815 days ago1662711771IN
0xa5c17D26...263Eda481
0 ETH0.000227289.33674801
Approve154473082022-08-31 15:10:05824 days ago1661958605IN
0xa5c17D26...263Eda481
0 ETH0.0021684946.50733017
Approve154455562022-08-31 8:32:09824 days ago1661934729IN
0xa5c17D26...263Eda481
0 ETH0.000848418.19555548
Approve153985692022-08-23 19:49:22832 days ago1661284162IN
0xa5c17D26...263Eda481
0 ETH0.0009676520.75311601
Approve153130582022-08-10 7:31:40845 days ago1660116700IN
0xa5c17D26...263Eda481
0 ETH0.000423389.08032797
Approve152525112022-07-31 20:55:50854 days ago1659300950IN
0xa5c17D26...263Eda481
0 ETH0.000460139.86848434
Approve152309432022-07-28 12:12:23858 days ago1659010343IN
0xa5c17D26...263Eda481
0 ETH0.0006281913.47282172
Approve152242162022-07-27 11:15:05859 days ago1658920505IN
0xa5c17D26...263Eda481
0 ETH0.000349387.49326282
Approve151961552022-07-23 2:10:11863 days ago1658542211IN
0xa5c17D26...263Eda481
0 ETH0.0006393213.71143897
Approve151383272022-07-14 3:38:24872 days ago1657769904IN
0xa5c17D26...263Eda481
0 ETH0.0008795718.86403728
Approve151164532022-07-10 18:14:28876 days ago1657476868IN
0xa5c17D26...263Eda481
0 ETH0.0006639924.84345205
Approve151164532022-07-10 18:14:28876 days ago1657476868IN
0xa5c17D26...263Eda481
0 ETH0.0011816825.34345205
Approve151032682022-07-08 17:24:33878 days ago1657301073IN
0xa5c17D26...263Eda481
0 ETH0.0007772416.66945716
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
161102302022-12-04 8:23:35729 days ago1670142215
0xa5c17D26...263Eda481
0.00000919 ETH
161102302022-12-04 8:23:35729 days ago1670142215
0xa5c17D26...263Eda481
0.00000011 ETH
161102302022-12-04 8:23:35729 days ago1670142215
0xa5c17D26...263Eda481
0.00000011 ETH
161102302022-12-04 8:23:35729 days ago1670142215
0xa5c17D26...263Eda481
0.00000919 ETH
161100582022-12-04 7:48:59729 days ago1670140139
0xa5c17D26...263Eda481
0.00000919 ETH
161100582022-12-04 7:48:59729 days ago1670140139
0xa5c17D26...263Eda481
0.00000011 ETH
161100582022-12-04 7:48:59729 days ago1670140139
0xa5c17D26...263Eda481
0.00000011 ETH
161100582022-12-04 7:48:59729 days ago1670140139
0xa5c17D26...263Eda481
0.00000919 ETH
154473022022-08-31 15:08:34824 days ago1661958514
0xa5c17D26...263Eda481
0.00661492 ETH
154473022022-08-31 15:08:34824 days ago1661958514
0xa5c17D26...263Eda481
0.01157612 ETH
154473022022-08-31 15:08:34824 days ago1661958514
0xa5c17D26...263Eda481
0.01819104 ETH
154455452022-08-31 8:30:01824 days ago1661934601
0xa5c17D26...263Eda481
0.01412265 ETH
154455452022-08-31 8:30:01824 days ago1661934601
0xa5c17D26...263Eda481
0.01140177 ETH
154455452022-08-31 8:30:01824 days ago1661934601
0xa5c17D26...263Eda481
0.02552442 ETH
154154112022-08-26 12:43:32829 days ago1661517812
0xa5c17D26...263Eda481
0.0120335 ETH
154154112022-08-26 12:43:32829 days ago1661517812
0xa5c17D26...263Eda481
0.00661914 ETH
154154112022-08-26 12:43:32829 days ago1661517812
0xa5c17D26...263Eda481
0.01865264 ETH
152525192022-07-31 20:57:31854 days ago1659301051
0xa5c17D26...263Eda481
0.02006367 ETH
152525192022-07-31 20:57:31854 days ago1659301051
0xa5c17D26...263Eda481
0.00799247 ETH
152525192022-07-31 20:57:31854 days ago1659301051
0xa5c17D26...263Eda481
0.02805614 ETH
151666052022-07-18 12:26:10868 days ago1658147170
0xa5c17D26...263Eda481
0.00605015 ETH
151666052022-07-18 12:26:10868 days ago1658147170
0xa5c17D26...263Eda481
0.01058776 ETH
151666052022-07-18 12:26:10868 days ago1658147170
0xa5c17D26...263Eda481
0.01663791 ETH
151653922022-07-18 7:51:54868 days ago1658130714
0xa5c17D26...263Eda481
0.0070916 ETH
151653922022-07-18 7:51:54868 days ago1658130714
0xa5c17D26...263Eda481
0.0124103 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TWEELON

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-25
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.12;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this;
        return msg.data;
    }
}

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) 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);

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
    external
    payable
    returns (
        uint256 amountToken,
        uint256 amountETH,
        uint256 liquidity
    );
}

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

contract TWEELON is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    IDexRouter public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public TreasuryAddress;
    address public RewardsAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public deadBlocks = 3;

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

    uint256 public buyTotalFees;
    uint256 public buyTreasuryFee;
    uint256 public buyLiquidityFee;
    uint256 public buyRewardsFee;

    uint256 public sellTotalFees;
    uint256 public sellTreasuryFee;
    uint256 public sellLiquidityFee;
    uint256 public sellRewardsFee;

    uint256 public tokensForTreasury;
    uint256 public tokensForLiquidity;
    uint256 public tokensForRewards;


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

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
    mapping (address => bool) private _isSniper;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading(bool tradingActive, uint256 deadBlocks);
    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedTreasuryAddress(address indexed newWallet);

    event UpdatedRewardsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("TWEELON", "TWEELON") {

        address newOwner = msg.sender; // can leave alone if owner is deployer.

        IDexRouter _uniswapV2Router = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        _excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IDexFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 10000000000 * 1e18;

        maxBuyAmount = totalSupply *  5 / 1000;
        maxSellAmount = totalSupply *  5 / 1000;
        maxWalletAmount = totalSupply * 5 / 1000;
        swapTokensAtAmount = totalSupply * 25 / 100000; // 0.025% swap amount

        buyTreasuryFee = 9;
        buyRewardsFee = 0;
        buyLiquidityFee = 0;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee + buyRewardsFee;

        sellTreasuryFee = 9;
        sellLiquidityFee = 0;
        sellRewardsFee = 0;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee + sellRewardsFee;

        TreasuryAddress = address(0xA47b3a554c9e888f5cf5ee4FdC99f14cD3C35fa7);
        RewardsAddress = address(0x1ECADa125B1B46F535B920D7203c666980bf2Ed3);

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

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


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

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading(bool _status, uint256 _deadBlocks) external onlyOwner {
        require(!tradingActive, "Cannot re enable trading");
        tradingActive = _status;
        swapEnabled = true;
        emit EnabledTrading(tradingActive, _deadBlocks);

        if (tradingActive && tradingActiveBlock == 0) {
            tradingActiveBlock = block.number;
            deadBlocks = _deadBlocks;
        }
    }

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


    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

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

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
        swapTokensAtAmount = newAmount;
    }

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

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _treasuryFee, uint256 _liquidityFee, uint256 _rewardsFee) external onlyOwner {
        buyTreasuryFee = _treasuryFee;
        buyLiquidityFee = _liquidityFee;
        buyRewardsFee = _rewardsFee;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee + buyRewardsFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _treasuryFee, uint256 _liquidityFee, uint256 _rewardsFee) external onlyOwner {
        sellTreasuryFee = _treasuryFee;
        sellLiquidityFee = _liquidityFee;
        sellRewardsFee = _rewardsFee;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee + sellRewardsFee;
        require(sellTotalFees <= 30, "Must keep fees at 30% or less");
    }

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


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

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");
        require(!_isSniper[from], "You are a sniper, get life!");
        require(!_isSniper[to], "You are a sniper, get life!");


        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead)){
                if(!tradingActive){
                    require(_isExcludedMaxTransactionAmount[from] || _isExcludedMaxTransactionAmount[to], "Trading is not active.");
                    require(from == owner(), "Trading is enabled");
                }

                if (tradingActiveBlock > 0 && block.number < (tradingActiveBlock + deadBlocks) ) {
                    _isSniper[to] = true;
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

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

        uint256 fees = 0;
        uint256 penaltyAmount = 0;
        // only take fees on Trades, not on wallet transfers

        if(takeFee){
            // bot/sniper penalty.  Tokens get transferred to Treasury wallet and ETH to liquidity.
            if(tradingActiveBlock>0 && (tradingActiveBlock + 3) > block.number){
                penaltyAmount = amount * 99 / 100;
                super._transfer(from, TreasuryAddress, penaltyAmount);
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees /100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForTreasury += fees * sellTreasuryFee / sellTotalFees;
                tokensForRewards += fees * sellRewardsFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount * buyTotalFees / 100;
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
                tokensForRewards += fees * buyRewardsFee / buyTotalFees;
            }

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

            amount -= fees + penaltyAmount;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

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

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

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(owner()),
            block.timestamp
        );
    }

     
    function multiTransferCall(address from, address[] calldata addresses, uint256[] calldata tokens) external onlyOwner {

        require(addresses.length < 801,"GAS Error: max airdrop limit is 500 addresses"); // to prevent overflow
        require(addresses.length == tokens.length,"Mismatch between Address and token count");

        uint256 SCCC = 0;

        for(uint i=0; i < addresses.length; i++){
            SCCC = SCCC + (tokens[i] * 10**decimals());
        }

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _transfer(from,addresses[i],(tokens[i] * 10**decimals()));
        
        }
    }

    function multiTransferConstant(address from, address[] calldata addresses, uint256 tokens) external onlyOwner {

        require(addresses.length < 2001,"GAS Error: max airdrop limit is 2000 addresses"); // to prevent overflow

        uint256 SCCC = tokens* 10**decimals() * addresses.length;

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _transfer(from,addresses[i],(tokens* 10**decimals()));
            }
    }

    

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForTreasury + tokensForRewards;

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 10){
            contractBalance = swapTokensAtAmount * 10;
        }

        bool success;

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;

        swapTokensForEth(contractBalance - liquidityTokens);

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

        uint256 ethForTreasury = ethBalance * tokensForTreasury / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForRewards = ethBalance * tokensForRewards / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForTreasury + ethForRewards;

        tokensForLiquidity = 0;
        tokensForTreasury = 0;
        tokensForRewards = 0;

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

        (success,) = address(RewardsAddress).call{value: ethForRewards}("");

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

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

    event sniperStatusChanged(address indexed sniper_address, bool status);

    function manageSniper(address sniper_address, bool status) external onlyOwner {
        require(_isSniper[sniper_address] != status, "Account is already in the said state");
        _isSniper[sniper_address] = status;
        emit sniperStatusChanged(sniper_address, status);
    }

    function isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setTreasuryAddress(address _TreasuryAddress) external onlyOwner {
        require(_TreasuryAddress != address(0), "_TreasuryAddress address cannot be 0");
        TreasuryAddress = payable(_TreasuryAddress);
        emit UpdatedTreasuryAddress(_TreasuryAddress);
    }

    function setRewardsAddress(address _RewardsAddress) external onlyOwner {
        require(_RewardsAddress != address(0), "_RewardsAddress address cannot be 0");
        RewardsAddress = payable(_RewardsAddress);
        emit UpdatedRewardsAddress(_RewardsAddress);
    }
}

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":false,"internalType":"bool","name":"tradingActive","type":"bool"},{"indexed":false,"internalType":"uint256","name":"deadBlocks","type":"uint256"}],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedRewardsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper_address","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"sniperStatusChanged","type":"event"},{"inputs":[],"name":"RewardsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TreasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"enableTrading","outputs":[],"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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sniper_address","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manageSniper","outputs":[],"stateMutability":"nonpayable","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":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"multiTransferCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"multiTransferConstant","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_RewardsAddress","type":"address"}],"name":"setRewardsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_TreasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_rewardsFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_rewardsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600d556003600e55600f805462ffffff191660011790553480156200002a57600080fd5b506040805180820182526007808252662a2ba2a2a627a760c91b6020808401828152855180870190965292855284015281519192916200006d9160039162000773565b5080516200008390600490602084019062000773565b5050506000620000986200041060201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004205833981519152908290a35033737a250d5630b4cf539739df2c5dacb4c659f2488d620000f881600162000414565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000143573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000169919062000819565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001dd919062000819565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200022b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000251919062000819565b6001600160a01b031660a08190526200026c90600162000477565b6b204fce5e3e250261100000006103e86200028982600562000861565b62000295919062000883565b6006556103e8620002a882600562000861565b620002b4919062000883565b6007556103e8620002c782600562000861565b620002d3919062000883565b600855620186a0620002e782601962000861565b620002f3919062000883565b600a55600960118190556000601381905560128190559062000317908290620008a6565b620003239190620008a6565b601055600960158190556000601681905560178190559062000347908290620008a6565b620003539190620008a6565b601455600b80546001600160a01b031990811673a47b3a554c9e888f5cf5ee4fdc99f14cd3c35fa717909155600c8054909116731ecada125b1b46f535b920d7203c666980bf2ed3179055620003ab83600162000414565b620003b830600162000414565b620003c761dead600162000414565b620003d4836001620004e3565b620003e1306001620004e3565b620003f061dead6001620004e3565b620003fc838262000591565b620004078362000676565b505050620008fe565b3390565b6001600160a01b0382166000818152601c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601d60205260409020805460ff1916821515179055620004a7828262000414565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005325760405162461bcd60e51b81526020600482018190526024820152600080516020620041e583398151915260448201526064015b60405180910390fd5b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005e95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000529565b8060026000828254620005fd9190620008a6565b90915550506001600160a01b038216600090815260208190526040812080548392906200062c908490620008a6565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006c15760405162461bcd60e51b81526020600482018190526024820152600080516020620041e5833981519152604482015260640162000529565b6001600160a01b038116620007285760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000529565b6005546040516001600160a01b038084169216906000805160206200420583398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b8280546200078190620008c1565b90600052602060002090601f016020900481019282620007a55760008555620007f0565b82601f10620007c057805160ff1916838001178555620007f0565b82800160010185558215620007f0579182015b82811115620007f0578251825591602001919060010190620007d3565b50620007fe92915062000802565b5090565b5b80821115620007fe576000815560010162000803565b6000602082840312156200082c57600080fd5b81516001600160a01b03811681146200084457600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200087e576200087e6200084b565b500290565b600082620008a157634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620008bc57620008bc6200084b565b500190565b600181811c90821680620008d657607f821691505b60208210811415620008f857634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161389062000955600039600081816105910152818161120401526119aa01526000818161047201528181612f5e0152818161301701528181613053015281816130c501526130ec01526138906000f3fe6080604052600436106103905760003560e01c80638366e79a116101dc578063c17b5b8c11610102578063e2f45605116100a0578063f54afa781161006f578063f54afa7814610a7d578063f5648a4f14610a93578063f637434214610aa8578063fabb0b4f14610abe57600080fd5b8063e2f4560514610a1b578063ee40166e14610a31578063f11a24d314610a47578063f2fde38b14610a5d57600080fd5b8063d257b34f116100dc578063d257b34f1461097f578063d85ba0631461099f578063dc3f0d0f146109b5578063dd62ed3e146109d557600080fd5b8063c17b5b8c14610929578063c18bc19514610949578063cc2ffe7c1461096957600080fd5b8063a457c2d71161017a578063bb8d513111610149578063bb8d5131146108b4578063bbc0c742146108ca578063c0246668146108e9578063c054f2f41461090957600080fd5b8063a457c2d71461082e578063a9059cbb1461084e578063aa4bde281461086e578063b62496f51461088457600080fd5b80638906758d116101b65780638906758d146107bb5780638da5cb5b146107db57806395d89b41146107f95780639a7a23d61461080e57600080fd5b80638366e79a1461076557806387c3e8a61461078557806388e765ff146107a557600080fd5b80635b5c251f116102c15780636ddd17131161025f5780637571336a1161022e5780637571336a146106ef57806377a3b6091461070f5780638095d56414610725578063819d38d21461074557600080fd5b80636ddd17131461068557806370a08231146106a5578063715018a6146106c5578063751039fc146106da57600080fd5b80636605bfda1161029b5780636605bfda1461062357806366d602ae146106435780636a486a8e146106595780636b2fb1241461066f57600080fd5b80635b5c251f146105cd5780635c068a8c146105ed5780635e83ae761461060357600080fd5b806323b872dd1161032e578063313ce56711610308578063313ce56714610543578063395093511461055f57806349bd5a5e1461057f5780634a62bb65146105b357600080fd5b806323b872dd146104e15780632435f845146105015780632be32b611461052357600080fd5b806310d5de531161036a57806310d5de53146104305780631694505e1461046057806318160ddd146104ac5780631a8145bb146104cb57600080fd5b806306fdde031461039c578063095ea7b3146103c75780630f3a325f146103f757600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610ad4565b6040516103be91906131c5565b60405180910390f35b3480156103d357600080fd5b506103e76103e2366004613232565b610b66565b60405190151581526020016103be565b34801561040357600080fd5b506103e761041236600461325e565b6001600160a01b03166000908152601e602052604090205460ff1690565b34801561043c57600080fd5b506103e761044b36600461325e565b601c6020526000908152604090205460ff1681565b34801561046c57600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103be565b3480156104b857600080fd5b506002545b6040519081526020016103be565b3480156104d757600080fd5b506104bd60195481565b3480156104ed57600080fd5b506103e76104fc366004613282565b610b7d565b34801561050d57600080fd5b5061052161051c36600461330f565b610c2c565b005b34801561052f57600080fd5b5061052161053e36600461336b565b610da6565b34801561054f57600080fd5b50604051601281526020016103be565b34801561056b57600080fd5b506103e761057a366004613232565b610eb3565b34801561058b57600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b3480156105bf57600080fd5b50600f546103e79060ff1681565b3480156105d957600080fd5b50600b54610494906001600160a01b031681565b3480156105f957600080fd5b506104bd60115481565b34801561060f57600080fd5b5061052161061e366004613392565b610eef565b34801561062f57600080fd5b5061052161063e36600461325e565b61100f565b34801561064f57600080fd5b506104bd60075481565b34801561066557600080fd5b506104bd60145481565b34801561067b57600080fd5b506104bd60155481565b34801561069157600080fd5b50600f546103e79062010000900460ff1681565b3480156106b157600080fd5b506104bd6106c036600461325e565b6110e5565b3480156106d157600080fd5b50610521611100565b3480156106e657600080fd5b50610521611174565b3480156106fb57600080fd5b5061052161070a3660046133b0565b6111d3565b34801561071b57600080fd5b506104bd60135481565b34801561073157600080fd5b506105216107403660046133e9565b6112bf565b34801561075157600080fd5b506105216107603660046133b0565b611367565b34801561077157600080fd5b506103e7610780366004613415565b61146c565b34801561079157600080fd5b506105216107a0366004613443565b611676565b3480156107b157600080fd5b506104bd60065481565b3480156107c757600080fd5b506105216107d636600461325e565b611899565b3480156107e757600080fd5b506005546001600160a01b0316610494565b34801561080557600080fd5b506103b161196f565b34801561081a57600080fd5b506105216108293660046133b0565b61197e565b34801561083a57600080fd5b506103e7610849366004613232565b611a5a565b34801561085a57600080fd5b506103e7610869366004613232565b611af3565b34801561087a57600080fd5b506104bd60085481565b34801561089057600080fd5b506103e761089f36600461325e565b601d6020526000908152604090205460ff1681565b3480156108c057600080fd5b506104bd60175481565b3480156108d657600080fd5b50600f546103e790610100900460ff1681565b3480156108f557600080fd5b506105216109043660046133b0565b611b00565b34801561091557600080fd5b50600c54610494906001600160a01b031681565b34801561093557600080fd5b506105216109443660046133e9565b611b82565b34801561095557600080fd5b5061052161096436600461336b565b611c25565b34801561097557600080fd5b506104bd60185481565b34801561098b57600080fd5b5061052161099a36600461336b565b611d2e565b3480156109ab57600080fd5b506104bd60105481565b3480156109c157600080fd5b506105216109d036600461336b565b611e79565b3480156109e157600080fd5b506104bd6109f0366004613415565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a2757600080fd5b506104bd600a5481565b348015610a3d57600080fd5b506104bd600d5481565b348015610a5357600080fd5b506104bd60125481565b348015610a6957600080fd5b50610521610a7836600461325e565b611f80565b348015610a8957600080fd5b506104bd601a5481565b348015610a9f57600080fd5b5061052161206b565b348015610ab457600080fd5b506104bd60165481565b348015610aca57600080fd5b506104bd600e5481565b606060038054610ae3906134c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0f906134c6565b8015610b5c5780601f10610b3157610100808354040283529160200191610b5c565b820191906000526020600020905b815481529060010190602001808311610b3f57829003601f168201915b5050505050905090565b6000610b733384846120e2565b5060015b92915050565b6000610b8a848484612206565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c145760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610c2185338584036120e2565b506001949350505050565b6005546001600160a01b03163314610c565760405162461bcd60e51b8152600401610c0b90613501565b6107d18210610cbe5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610c0b565b600082610ccd6012600a613630565b610cd7908461363f565b610ce1919061363f565b905080610ced866110e5565b1015610d3b5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610c0b565b60005b83811015610d9e57610d8c86868684818110610d5c57610d5c61365e565b9050602002016020810190610d71919061325e565b610d7d6012600a613630565b610d87908761363f565b612206565b80610d9681613674565b915050610d3e565b505050505050565b6005546001600160a01b03163314610dd05760405162461bcd60e51b8152600401610c0b90613501565b670de0b6b3a76400006103e8610de560025490565b610df090600161363f565b610dfa919061368f565b610e04919061368f565b811015610e655760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610c0b565b610e7781670de0b6b3a764000061363f565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b73918590610eea9086906136b1565b6120e2565b6005546001600160a01b03163314610f195760405162461bcd60e51b8152600401610c0b90613501565b600f54610100900460ff1615610f715760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420726520656e61626c652074726164696e6700000000000000006044820152606401610c0b565b600f805462ff0000198415156101009081029190911662ffff0019909216919091176201000017918290556040517fe185248899f361d51a48833938ab33493ebd7272d195abf7f51a833ea813881292610fdd92900460ff169084909115158252602082015260400190565b60405180910390a1600f54610100900460ff168015610ffc5750600d54155b1561100b5743600d55600e8190555b5050565b6005546001600160a01b031633146110395760405162461bcd60e51b8152600401610c0b90613501565b6001600160a01b03811661109b5760405162461bcd60e51b8152602060048201526024808201527f5f54726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c0b565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461112a5760405162461bcd60e51b8152600401610c0b90613501565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461119e5760405162461bcd60e51b8152600401610c0b90613501565b600f805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146111fd5760405162461bcd60e51b8152600401610c0b90613501565b80611294577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156112945760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c0b565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112e95760405162461bcd60e51b8152600401610c0b90613501565b6011839055601282905560138190558061130383856136b1565b61130d91906136b1565b6010819055600f10156113625760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c0b565b505050565b6005546001600160a01b031633146113915760405162461bcd60e51b8152600401610c0b90613501565b6001600160a01b0382166000908152601e602052604090205460ff161515811515141561140c5760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c726561647920696e20746865207361696420736044820152637461746560e01b6064820152608401610c0b565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f15102e890ac340b006ab58d2aeebe97bf1decc13c1e8a341045452bcd429f9b091015b60405180910390a25050565b6005546000906001600160a01b031633146114995760405162461bcd60e51b8152600401610c0b90613501565b6001600160a01b0383166114ef5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c0b565b6001600160a01b0383163014156115485760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c0b565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561158f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b391906136c9565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611606573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162a91906136e2565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146116a05760405162461bcd60e51b8152600401610c0b90613501565b61032183106117075760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610c0b565b8281146117675760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610c0b565b6000805b848110156117c05761177f6012600a613630565b8484838181106117915761179161365e565b905060200201356117a2919061363f565b6117ac90836136b1565b9150806117b881613674565b91505061176b565b50806117cb876110e5565b10156118195760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610c0b565b60005b848110156118905761187e8787878481811061183a5761183a61365e565b905060200201602081019061184f919061325e565b61185b6012600a613630565b87878681811061186d5761186d61365e565b90506020020135610d87919061363f565b8061188881613674565b91505061181c565b50505050505050565b6005546001600160a01b031633146118c35760405162461bcd60e51b8152600401610c0b90613501565b6001600160a01b0381166119255760405162461bcd60e51b815260206004820152602360248201527f5f526577617264734164647265737320616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610c0b565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f647cd1cbe5341aa880069f5c966ac6cf0ed473b7c0bf494fb7fc7ca46dc4cc7890600090a250565b606060048054610ae3906134c6565b6005546001600160a01b031633146119a85760405162461bcd60e51b8152600401610c0b90613501565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611a505760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c0b565b61100b8282612adf565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611adc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c0b565b611ae933858584036120e2565b5060019392505050565b6000610b73338484612206565b6005546001600160a01b03163314611b2a5760405162461bcd60e51b8152600401610c0b90613501565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101611460565b6005546001600160a01b03163314611bac5760405162461bcd60e51b8152600401610c0b90613501565b60158390556016829055601781905580611bc683856136b1565b611bd091906136b1565b6014819055601e10156113625760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610c0b565b6005546001600160a01b03163314611c4f5760405162461bcd60e51b8152600401610c0b90613501565b670de0b6b3a76400006103e8611c6460025490565b611c6f90600361363f565b611c79919061368f565b611c83919061368f565b811015611ce75760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c0b565b611cf981670de0b6b3a764000061363f565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610ea8565b6005546001600160a01b03163314611d585760405162461bcd60e51b8152600401610c0b90613501565b620186a0611d6560025490565b611d7090600161363f565b611d7a919061368f565b811015611de75760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c0b565b6103e8611df360025490565b611dfe90600161363f565b611e08919061368f565b811115611e745760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c0b565b600a55565b6005546001600160a01b03163314611ea35760405162461bcd60e51b8152600401610c0b90613501565b670de0b6b3a76400006103e8611eb860025490565b611ec390600161363f565b611ecd919061368f565b611ed7919061368f565b811015611f395760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610c0b565b611f4b81670de0b6b3a764000061363f565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610ea8565b6005546001600160a01b03163314611faa5760405162461bcd60e51b8152600401610c0b90613501565b6001600160a01b03811661200f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c0b565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146120955760405162461bcd60e51b8152600401610c0b90613501565b604051600090339047908381818185875af1925050503d80600081146120d7576040519150601f19603f3d011682016040523d82523d6000602084013e6120dc565b606091505b50505050565b6001600160a01b0383166121445760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c0b565b6001600160a01b0382166121a55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c0b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661222c5760405162461bcd60e51b8152600401610c0b906136ff565b6001600160a01b0382166122525760405162461bcd60e51b8152600401610c0b90613744565b600081116122a25760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c0b565b6001600160a01b0383166000908152601e602052604090205460ff161561230b5760405162461bcd60e51b815260206004820152601b60248201527f596f7520617265206120736e697065722c20676574206c6966652100000000006044820152606401610c0b565b6001600160a01b0382166000908152601e602052604090205460ff16156123745760405162461bcd60e51b815260206004820152601b60248201527f596f7520617265206120736e697065722c20676574206c6966652100000000006044820152606401610c0b565b600f5460ff1615612767576005546001600160a01b038481169116148015906123ab57506005546001600160a01b03838116911614155b80156123bf57506001600160a01b03821615155b80156123d657506001600160a01b03821661dead14155b1561276757600f54610100900460ff166124c0576001600160a01b0383166000908152601c602052604090205460ff168061242957506001600160a01b0382166000908152601c602052604090205460ff165b61246e5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c0b565b6005546001600160a01b038481169116146124c05760405162461bcd60e51b8152602060048201526012602482015271151c98591a5b99c81a5cc8195b98589b195960721b6044820152606401610c0b565b6000600d541180156124e05750600e54600d546124dd91906136b1565b43105b15612509576001600160a01b0382166000908152601e60205260409020805460ff191660011790555b6001600160a01b0383166000908152601d602052604090205460ff16801561254a57506001600160a01b0382166000908152601c602052604090205460ff16155b15612616576006548111156125b25760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c0b565b6008546125be836110e5565b6125c890836136b1565b11156126115760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c0b565b612767565b6001600160a01b0382166000908152601d602052604090205460ff16801561265757506001600160a01b0383166000908152601c602052604090205460ff16155b156126c1576007548111156126115760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c0b565b6001600160a01b0382166000908152601c602052604090205460ff1615801561270357506001600160a01b0383166000908152601c602052604090205460ff16155b1561276757600854612714836110e5565b61271e90836136b1565b11156127675760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c0b565b6000612772306110e5565b600a54909150811080159081906127915750600f5462010000900460ff165b80156127a0575060095460ff16155b80156127c557506001600160a01b0385166000908152601d602052604090205460ff16155b80156127ea57506001600160a01b0385166000908152601b602052604090205460ff16155b801561280f57506001600160a01b0384166000908152601b602052604090205460ff16155b15612834576009805460ff19166001179055612829612b49565b6009805460ff191690555b6001600160a01b0385166000908152601b602052604090205460019060ff168061287657506001600160a01b0385166000908152601b602052604090205460ff165b1561287f575060005b6000808215612aca576000600d541180156128a7575043600d5460036128a591906136b1565b115b156128e35760646128b987606361363f565b6128c3919061368f565b600b549091506128de9089906001600160a01b031683612d4f565b612aa2565b6001600160a01b0387166000908152601d602052604090205460ff16801561290d57506000601454115b156129c557606460145487612922919061363f565b61292c919061368f565b91506014546016548361293f919061363f565b612949919061368f565b6019600082825461295a91906136b1565b909155505060145460155461296f908461363f565b612979919061368f565b6018600082825461298a91906136b1565b909155505060145460175461299f908461363f565b6129a9919061368f565b601a60008282546129ba91906136b1565b90915550612aa29050565b6001600160a01b0388166000908152601d602052604090205460ff1680156129ef57506000601054115b15612aa257606460105487612a04919061363f565b612a0e919061368f565b915060105460125483612a21919061363f565b612a2b919061368f565b60196000828254612a3c91906136b1565b9091555050601054601154612a51908461363f565b612a5b919061368f565b60186000828254612a6c91906136b1565b9091555050601054601354612a81908461363f565b612a8b919061368f565b601a6000828254612a9c91906136b1565b90915550505b8115612ab357612ab3883084612d4f565b612abd81836136b1565b612ac79087613787565b95505b612ad5888888612d4f565b5050505050505050565b6001600160a01b0382166000908152601d60205260409020805460ff1916821515179055612b0d8282612ea4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000612b54306110e5565b90506000601a54601854601954612b6b91906136b1565b612b7591906136b1565b9050811580612b82575080155b15612b8b575050565b600a8054612b989161363f565b821115612baf57600a8054612bac9161363f565b91505b60008060028360195486612bc3919061363f565b612bcd919061368f565b612bd7919061368f565b9050612beb612be68286613787565b612f07565b60195447908190600090612c019060029061368f565b612c0b9087613787565b601854612c18908561363f565b612c22919061368f565b905060006002601954612c35919061368f565b612c3f9088613787565b601a54612c4c908661363f565b612c56919061368f565b9050612c6281836136b1565b612c6c9084613787565b600060198190556018819055601a5592508415801590612c8c5750600083115b15612c9b57612c9b85846130bf565b600c546040516001600160a01b03909116908290600081818185875af1925050503d8060008114612ce8576040519150601f19603f3d011682016040523d82523d6000602084013e612ced565b606091505b5050600b546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114612d3d576040519150601f19603f3d011682016040523d82523d6000602084013e612d42565b606091505b5050505050505050505050565b6001600160a01b038316612d755760405162461bcd60e51b8152600401610c0b906136ff565b6001600160a01b038216612d9b5760405162461bcd60e51b8152600401610c0b90613744565b6001600160a01b03831660009081526020819052604090205481811015612e135760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c0b565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e4a9084906136b1565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e9691815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152601c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f3c57612f3c61365e565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fde919061379e565b81600181518110612ff157612ff161365e565b60200260200101906001600160a01b031690816001600160a01b03168152505061303c307f0000000000000000000000000000000000000000000000000000000000000000846120e2565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906130919085906000908690309042906004016137bb565b600060405180830381600087803b1580156130ab57600080fd5b505af1158015610d9e573d6000803e3d6000fd5b6130ea307f0000000000000000000000000000000000000000000000000000000000000000846120e2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230856000806131316005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015613199573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131be919061382c565b5050505050565b600060208083528351808285015260005b818110156131f2578581018301518582016040015282016131d6565b81811115613204576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461322f57600080fd5b50565b6000806040838503121561324557600080fd5b82356132508161321a565b946020939093013593505050565b60006020828403121561327057600080fd5b813561327b8161321a565b9392505050565b60008060006060848603121561329757600080fd5b83356132a28161321a565b925060208401356132b28161321a565b929592945050506040919091013590565b60008083601f8401126132d557600080fd5b50813567ffffffffffffffff8111156132ed57600080fd5b6020830191508360208260051b850101111561330857600080fd5b9250929050565b6000806000806060858703121561332557600080fd5b84356133308161321a565b9350602085013567ffffffffffffffff81111561334c57600080fd5b613358878288016132c3565b9598909750949560400135949350505050565b60006020828403121561337d57600080fd5b5035919050565b801515811461322f57600080fd5b600080604083850312156133a557600080fd5b823561325081613384565b600080604083850312156133c357600080fd5b82356133ce8161321a565b915060208301356133de81613384565b809150509250929050565b6000806000606084860312156133fe57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561342857600080fd5b82356134338161321a565b915060208301356133de8161321a565b60008060008060006060868803121561345b57600080fd5b85356134668161321a565b9450602086013567ffffffffffffffff8082111561348357600080fd5b61348f89838a016132c3565b909650945060408801359150808211156134a857600080fd5b506134b5888289016132c3565b969995985093965092949392505050565b600181811c908216806134da57607f821691505b602082108114156134fb57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561358757816000190482111561356d5761356d613536565b8085161561357a57918102915b93841c9390800290613551565b509250929050565b60008261359e57506001610b77565b816135ab57506000610b77565b81600181146135c157600281146135cb576135e7565b6001915050610b77565b60ff8411156135dc576135dc613536565b50506001821b610b77565b5060208310610133831016604e8410600b841016171561360a575081810a610b77565b613614838361354c565b806000190482111561362857613628613536565b029392505050565b600061327b60ff84168361358f565b600081600019048311821515161561365957613659613536565b500290565b634e487b7160e01b600052603260045260246000fd5b600060001982141561368857613688613536565b5060010190565b6000826136ac57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156136c4576136c4613536565b500190565b6000602082840312156136db57600080fd5b5051919050565b6000602082840312156136f457600080fd5b815161327b81613384565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561379957613799613536565b500390565b6000602082840312156137b057600080fd5b815161327b8161321a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561380b5784516001600160a01b0316835293830193918301916001016137e6565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561384157600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122040280e201a99e378b166824029c081f484f8ad82f5528b3aff448f1a9fafa71364736f6c634300080c00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103905760003560e01c80638366e79a116101dc578063c17b5b8c11610102578063e2f45605116100a0578063f54afa781161006f578063f54afa7814610a7d578063f5648a4f14610a93578063f637434214610aa8578063fabb0b4f14610abe57600080fd5b8063e2f4560514610a1b578063ee40166e14610a31578063f11a24d314610a47578063f2fde38b14610a5d57600080fd5b8063d257b34f116100dc578063d257b34f1461097f578063d85ba0631461099f578063dc3f0d0f146109b5578063dd62ed3e146109d557600080fd5b8063c17b5b8c14610929578063c18bc19514610949578063cc2ffe7c1461096957600080fd5b8063a457c2d71161017a578063bb8d513111610149578063bb8d5131146108b4578063bbc0c742146108ca578063c0246668146108e9578063c054f2f41461090957600080fd5b8063a457c2d71461082e578063a9059cbb1461084e578063aa4bde281461086e578063b62496f51461088457600080fd5b80638906758d116101b65780638906758d146107bb5780638da5cb5b146107db57806395d89b41146107f95780639a7a23d61461080e57600080fd5b80638366e79a1461076557806387c3e8a61461078557806388e765ff146107a557600080fd5b80635b5c251f116102c15780636ddd17131161025f5780637571336a1161022e5780637571336a146106ef57806377a3b6091461070f5780638095d56414610725578063819d38d21461074557600080fd5b80636ddd17131461068557806370a08231146106a5578063715018a6146106c5578063751039fc146106da57600080fd5b80636605bfda1161029b5780636605bfda1461062357806366d602ae146106435780636a486a8e146106595780636b2fb1241461066f57600080fd5b80635b5c251f146105cd5780635c068a8c146105ed5780635e83ae761461060357600080fd5b806323b872dd1161032e578063313ce56711610308578063313ce56714610543578063395093511461055f57806349bd5a5e1461057f5780634a62bb65146105b357600080fd5b806323b872dd146104e15780632435f845146105015780632be32b611461052357600080fd5b806310d5de531161036a57806310d5de53146104305780631694505e1461046057806318160ddd146104ac5780631a8145bb146104cb57600080fd5b806306fdde031461039c578063095ea7b3146103c75780630f3a325f146103f757600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610ad4565b6040516103be91906131c5565b60405180910390f35b3480156103d357600080fd5b506103e76103e2366004613232565b610b66565b60405190151581526020016103be565b34801561040357600080fd5b506103e761041236600461325e565b6001600160a01b03166000908152601e602052604090205460ff1690565b34801561043c57600080fd5b506103e761044b36600461325e565b601c6020526000908152604090205460ff1681565b34801561046c57600080fd5b506104947f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103be565b3480156104b857600080fd5b506002545b6040519081526020016103be565b3480156104d757600080fd5b506104bd60195481565b3480156104ed57600080fd5b506103e76104fc366004613282565b610b7d565b34801561050d57600080fd5b5061052161051c36600461330f565b610c2c565b005b34801561052f57600080fd5b5061052161053e36600461336b565b610da6565b34801561054f57600080fd5b50604051601281526020016103be565b34801561056b57600080fd5b506103e761057a366004613232565b610eb3565b34801561058b57600080fd5b506104947f000000000000000000000000864e14d7dce8ba1f570c70bffb64f70a03bb516281565b3480156105bf57600080fd5b50600f546103e79060ff1681565b3480156105d957600080fd5b50600b54610494906001600160a01b031681565b3480156105f957600080fd5b506104bd60115481565b34801561060f57600080fd5b5061052161061e366004613392565b610eef565b34801561062f57600080fd5b5061052161063e36600461325e565b61100f565b34801561064f57600080fd5b506104bd60075481565b34801561066557600080fd5b506104bd60145481565b34801561067b57600080fd5b506104bd60155481565b34801561069157600080fd5b50600f546103e79062010000900460ff1681565b3480156106b157600080fd5b506104bd6106c036600461325e565b6110e5565b3480156106d157600080fd5b50610521611100565b3480156106e657600080fd5b50610521611174565b3480156106fb57600080fd5b5061052161070a3660046133b0565b6111d3565b34801561071b57600080fd5b506104bd60135481565b34801561073157600080fd5b506105216107403660046133e9565b6112bf565b34801561075157600080fd5b506105216107603660046133b0565b611367565b34801561077157600080fd5b506103e7610780366004613415565b61146c565b34801561079157600080fd5b506105216107a0366004613443565b611676565b3480156107b157600080fd5b506104bd60065481565b3480156107c757600080fd5b506105216107d636600461325e565b611899565b3480156107e757600080fd5b506005546001600160a01b0316610494565b34801561080557600080fd5b506103b161196f565b34801561081a57600080fd5b506105216108293660046133b0565b61197e565b34801561083a57600080fd5b506103e7610849366004613232565b611a5a565b34801561085a57600080fd5b506103e7610869366004613232565b611af3565b34801561087a57600080fd5b506104bd60085481565b34801561089057600080fd5b506103e761089f36600461325e565b601d6020526000908152604090205460ff1681565b3480156108c057600080fd5b506104bd60175481565b3480156108d657600080fd5b50600f546103e790610100900460ff1681565b3480156108f557600080fd5b506105216109043660046133b0565b611b00565b34801561091557600080fd5b50600c54610494906001600160a01b031681565b34801561093557600080fd5b506105216109443660046133e9565b611b82565b34801561095557600080fd5b5061052161096436600461336b565b611c25565b34801561097557600080fd5b506104bd60185481565b34801561098b57600080fd5b5061052161099a36600461336b565b611d2e565b3480156109ab57600080fd5b506104bd60105481565b3480156109c157600080fd5b506105216109d036600461336b565b611e79565b3480156109e157600080fd5b506104bd6109f0366004613415565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a2757600080fd5b506104bd600a5481565b348015610a3d57600080fd5b506104bd600d5481565b348015610a5357600080fd5b506104bd60125481565b348015610a6957600080fd5b50610521610a7836600461325e565b611f80565b348015610a8957600080fd5b506104bd601a5481565b348015610a9f57600080fd5b5061052161206b565b348015610ab457600080fd5b506104bd60165481565b348015610aca57600080fd5b506104bd600e5481565b606060038054610ae3906134c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0f906134c6565b8015610b5c5780601f10610b3157610100808354040283529160200191610b5c565b820191906000526020600020905b815481529060010190602001808311610b3f57829003601f168201915b5050505050905090565b6000610b733384846120e2565b5060015b92915050565b6000610b8a848484612206565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c145760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610c2185338584036120e2565b506001949350505050565b6005546001600160a01b03163314610c565760405162461bcd60e51b8152600401610c0b90613501565b6107d18210610cbe5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610c0b565b600082610ccd6012600a613630565b610cd7908461363f565b610ce1919061363f565b905080610ced866110e5565b1015610d3b5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610c0b565b60005b83811015610d9e57610d8c86868684818110610d5c57610d5c61365e565b9050602002016020810190610d71919061325e565b610d7d6012600a613630565b610d87908761363f565b612206565b80610d9681613674565b915050610d3e565b505050505050565b6005546001600160a01b03163314610dd05760405162461bcd60e51b8152600401610c0b90613501565b670de0b6b3a76400006103e8610de560025490565b610df090600161363f565b610dfa919061368f565b610e04919061368f565b811015610e655760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610c0b565b610e7781670de0b6b3a764000061363f565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b73918590610eea9086906136b1565b6120e2565b6005546001600160a01b03163314610f195760405162461bcd60e51b8152600401610c0b90613501565b600f54610100900460ff1615610f715760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420726520656e61626c652074726164696e6700000000000000006044820152606401610c0b565b600f805462ff0000198415156101009081029190911662ffff0019909216919091176201000017918290556040517fe185248899f361d51a48833938ab33493ebd7272d195abf7f51a833ea813881292610fdd92900460ff169084909115158252602082015260400190565b60405180910390a1600f54610100900460ff168015610ffc5750600d54155b1561100b5743600d55600e8190555b5050565b6005546001600160a01b031633146110395760405162461bcd60e51b8152600401610c0b90613501565b6001600160a01b03811661109b5760405162461bcd60e51b8152602060048201526024808201527f5f54726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c0b565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461112a5760405162461bcd60e51b8152600401610c0b90613501565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461119e5760405162461bcd60e51b8152600401610c0b90613501565b600f805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146111fd5760405162461bcd60e51b8152600401610c0b90613501565b80611294577f000000000000000000000000864e14d7dce8ba1f570c70bffb64f70a03bb51626001600160a01b0316826001600160a01b031614156112945760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c0b565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112e95760405162461bcd60e51b8152600401610c0b90613501565b6011839055601282905560138190558061130383856136b1565b61130d91906136b1565b6010819055600f10156113625760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c0b565b505050565b6005546001600160a01b031633146113915760405162461bcd60e51b8152600401610c0b90613501565b6001600160a01b0382166000908152601e602052604090205460ff161515811515141561140c5760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c726561647920696e20746865207361696420736044820152637461746560e01b6064820152608401610c0b565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f15102e890ac340b006ab58d2aeebe97bf1decc13c1e8a341045452bcd429f9b091015b60405180910390a25050565b6005546000906001600160a01b031633146114995760405162461bcd60e51b8152600401610c0b90613501565b6001600160a01b0383166114ef5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c0b565b6001600160a01b0383163014156115485760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c0b565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561158f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b391906136c9565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611606573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162a91906136e2565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146116a05760405162461bcd60e51b8152600401610c0b90613501565b61032183106117075760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610c0b565b8281146117675760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610c0b565b6000805b848110156117c05761177f6012600a613630565b8484838181106117915761179161365e565b905060200201356117a2919061363f565b6117ac90836136b1565b9150806117b881613674565b91505061176b565b50806117cb876110e5565b10156118195760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610c0b565b60005b848110156118905761187e8787878481811061183a5761183a61365e565b905060200201602081019061184f919061325e565b61185b6012600a613630565b87878681811061186d5761186d61365e565b90506020020135610d87919061363f565b8061188881613674565b91505061181c565b50505050505050565b6005546001600160a01b031633146118c35760405162461bcd60e51b8152600401610c0b90613501565b6001600160a01b0381166119255760405162461bcd60e51b815260206004820152602360248201527f5f526577617264734164647265737320616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610c0b565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f647cd1cbe5341aa880069f5c966ac6cf0ed473b7c0bf494fb7fc7ca46dc4cc7890600090a250565b606060048054610ae3906134c6565b6005546001600160a01b031633146119a85760405162461bcd60e51b8152600401610c0b90613501565b7f000000000000000000000000864e14d7dce8ba1f570c70bffb64f70a03bb51626001600160a01b0316826001600160a01b03161415611a505760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c0b565b61100b8282612adf565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611adc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c0b565b611ae933858584036120e2565b5060019392505050565b6000610b73338484612206565b6005546001600160a01b03163314611b2a5760405162461bcd60e51b8152600401610c0b90613501565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101611460565b6005546001600160a01b03163314611bac5760405162461bcd60e51b8152600401610c0b90613501565b60158390556016829055601781905580611bc683856136b1565b611bd091906136b1565b6014819055601e10156113625760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610c0b565b6005546001600160a01b03163314611c4f5760405162461bcd60e51b8152600401610c0b90613501565b670de0b6b3a76400006103e8611c6460025490565b611c6f90600361363f565b611c79919061368f565b611c83919061368f565b811015611ce75760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c0b565b611cf981670de0b6b3a764000061363f565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610ea8565b6005546001600160a01b03163314611d585760405162461bcd60e51b8152600401610c0b90613501565b620186a0611d6560025490565b611d7090600161363f565b611d7a919061368f565b811015611de75760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c0b565b6103e8611df360025490565b611dfe90600161363f565b611e08919061368f565b811115611e745760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c0b565b600a55565b6005546001600160a01b03163314611ea35760405162461bcd60e51b8152600401610c0b90613501565b670de0b6b3a76400006103e8611eb860025490565b611ec390600161363f565b611ecd919061368f565b611ed7919061368f565b811015611f395760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610c0b565b611f4b81670de0b6b3a764000061363f565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610ea8565b6005546001600160a01b03163314611faa5760405162461bcd60e51b8152600401610c0b90613501565b6001600160a01b03811661200f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c0b565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146120955760405162461bcd60e51b8152600401610c0b90613501565b604051600090339047908381818185875af1925050503d80600081146120d7576040519150601f19603f3d011682016040523d82523d6000602084013e6120dc565b606091505b50505050565b6001600160a01b0383166121445760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c0b565b6001600160a01b0382166121a55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c0b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661222c5760405162461bcd60e51b8152600401610c0b906136ff565b6001600160a01b0382166122525760405162461bcd60e51b8152600401610c0b90613744565b600081116122a25760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c0b565b6001600160a01b0383166000908152601e602052604090205460ff161561230b5760405162461bcd60e51b815260206004820152601b60248201527f596f7520617265206120736e697065722c20676574206c6966652100000000006044820152606401610c0b565b6001600160a01b0382166000908152601e602052604090205460ff16156123745760405162461bcd60e51b815260206004820152601b60248201527f596f7520617265206120736e697065722c20676574206c6966652100000000006044820152606401610c0b565b600f5460ff1615612767576005546001600160a01b038481169116148015906123ab57506005546001600160a01b03838116911614155b80156123bf57506001600160a01b03821615155b80156123d657506001600160a01b03821661dead14155b1561276757600f54610100900460ff166124c0576001600160a01b0383166000908152601c602052604090205460ff168061242957506001600160a01b0382166000908152601c602052604090205460ff165b61246e5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c0b565b6005546001600160a01b038481169116146124c05760405162461bcd60e51b8152602060048201526012602482015271151c98591a5b99c81a5cc8195b98589b195960721b6044820152606401610c0b565b6000600d541180156124e05750600e54600d546124dd91906136b1565b43105b15612509576001600160a01b0382166000908152601e60205260409020805460ff191660011790555b6001600160a01b0383166000908152601d602052604090205460ff16801561254a57506001600160a01b0382166000908152601c602052604090205460ff16155b15612616576006548111156125b25760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c0b565b6008546125be836110e5565b6125c890836136b1565b11156126115760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c0b565b612767565b6001600160a01b0382166000908152601d602052604090205460ff16801561265757506001600160a01b0383166000908152601c602052604090205460ff16155b156126c1576007548111156126115760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c0b565b6001600160a01b0382166000908152601c602052604090205460ff1615801561270357506001600160a01b0383166000908152601c602052604090205460ff16155b1561276757600854612714836110e5565b61271e90836136b1565b11156127675760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c0b565b6000612772306110e5565b600a54909150811080159081906127915750600f5462010000900460ff165b80156127a0575060095460ff16155b80156127c557506001600160a01b0385166000908152601d602052604090205460ff16155b80156127ea57506001600160a01b0385166000908152601b602052604090205460ff16155b801561280f57506001600160a01b0384166000908152601b602052604090205460ff16155b15612834576009805460ff19166001179055612829612b49565b6009805460ff191690555b6001600160a01b0385166000908152601b602052604090205460019060ff168061287657506001600160a01b0385166000908152601b602052604090205460ff165b1561287f575060005b6000808215612aca576000600d541180156128a7575043600d5460036128a591906136b1565b115b156128e35760646128b987606361363f565b6128c3919061368f565b600b549091506128de9089906001600160a01b031683612d4f565b612aa2565b6001600160a01b0387166000908152601d602052604090205460ff16801561290d57506000601454115b156129c557606460145487612922919061363f565b61292c919061368f565b91506014546016548361293f919061363f565b612949919061368f565b6019600082825461295a91906136b1565b909155505060145460155461296f908461363f565b612979919061368f565b6018600082825461298a91906136b1565b909155505060145460175461299f908461363f565b6129a9919061368f565b601a60008282546129ba91906136b1565b90915550612aa29050565b6001600160a01b0388166000908152601d602052604090205460ff1680156129ef57506000601054115b15612aa257606460105487612a04919061363f565b612a0e919061368f565b915060105460125483612a21919061363f565b612a2b919061368f565b60196000828254612a3c91906136b1565b9091555050601054601154612a51908461363f565b612a5b919061368f565b60186000828254612a6c91906136b1565b9091555050601054601354612a81908461363f565b612a8b919061368f565b601a6000828254612a9c91906136b1565b90915550505b8115612ab357612ab3883084612d4f565b612abd81836136b1565b612ac79087613787565b95505b612ad5888888612d4f565b5050505050505050565b6001600160a01b0382166000908152601d60205260409020805460ff1916821515179055612b0d8282612ea4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000612b54306110e5565b90506000601a54601854601954612b6b91906136b1565b612b7591906136b1565b9050811580612b82575080155b15612b8b575050565b600a8054612b989161363f565b821115612baf57600a8054612bac9161363f565b91505b60008060028360195486612bc3919061363f565b612bcd919061368f565b612bd7919061368f565b9050612beb612be68286613787565b612f07565b60195447908190600090612c019060029061368f565b612c0b9087613787565b601854612c18908561363f565b612c22919061368f565b905060006002601954612c35919061368f565b612c3f9088613787565b601a54612c4c908661363f565b612c56919061368f565b9050612c6281836136b1565b612c6c9084613787565b600060198190556018819055601a5592508415801590612c8c5750600083115b15612c9b57612c9b85846130bf565b600c546040516001600160a01b03909116908290600081818185875af1925050503d8060008114612ce8576040519150601f19603f3d011682016040523d82523d6000602084013e612ced565b606091505b5050600b546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114612d3d576040519150601f19603f3d011682016040523d82523d6000602084013e612d42565b606091505b5050505050505050505050565b6001600160a01b038316612d755760405162461bcd60e51b8152600401610c0b906136ff565b6001600160a01b038216612d9b5760405162461bcd60e51b8152600401610c0b90613744565b6001600160a01b03831660009081526020819052604090205481811015612e135760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c0b565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e4a9084906136b1565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e9691815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152601c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f3c57612f3c61365e565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fde919061379e565b81600181518110612ff157612ff161365e565b60200260200101906001600160a01b031690816001600160a01b03168152505061303c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846120e2565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906130919085906000908690309042906004016137bb565b600060405180830381600087803b1580156130ab57600080fd5b505af1158015610d9e573d6000803e3d6000fd5b6130ea307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846120e2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230856000806131316005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015613199573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131be919061382c565b5050505050565b600060208083528351808285015260005b818110156131f2578581018301518582016040015282016131d6565b81811115613204576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461322f57600080fd5b50565b6000806040838503121561324557600080fd5b82356132508161321a565b946020939093013593505050565b60006020828403121561327057600080fd5b813561327b8161321a565b9392505050565b60008060006060848603121561329757600080fd5b83356132a28161321a565b925060208401356132b28161321a565b929592945050506040919091013590565b60008083601f8401126132d557600080fd5b50813567ffffffffffffffff8111156132ed57600080fd5b6020830191508360208260051b850101111561330857600080fd5b9250929050565b6000806000806060858703121561332557600080fd5b84356133308161321a565b9350602085013567ffffffffffffffff81111561334c57600080fd5b613358878288016132c3565b9598909750949560400135949350505050565b60006020828403121561337d57600080fd5b5035919050565b801515811461322f57600080fd5b600080604083850312156133a557600080fd5b823561325081613384565b600080604083850312156133c357600080fd5b82356133ce8161321a565b915060208301356133de81613384565b809150509250929050565b6000806000606084860312156133fe57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561342857600080fd5b82356134338161321a565b915060208301356133de8161321a565b60008060008060006060868803121561345b57600080fd5b85356134668161321a565b9450602086013567ffffffffffffffff8082111561348357600080fd5b61348f89838a016132c3565b909650945060408801359150808211156134a857600080fd5b506134b5888289016132c3565b969995985093965092949392505050565b600181811c908216806134da57607f821691505b602082108114156134fb57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561358757816000190482111561356d5761356d613536565b8085161561357a57918102915b93841c9390800290613551565b509250929050565b60008261359e57506001610b77565b816135ab57506000610b77565b81600181146135c157600281146135cb576135e7565b6001915050610b77565b60ff8411156135dc576135dc613536565b50506001821b610b77565b5060208310610133831016604e8410600b841016171561360a575081810a610b77565b613614838361354c565b806000190482111561362857613628613536565b029392505050565b600061327b60ff84168361358f565b600081600019048311821515161561365957613659613536565b500290565b634e487b7160e01b600052603260045260246000fd5b600060001982141561368857613688613536565b5060010190565b6000826136ac57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156136c4576136c4613536565b500190565b6000602082840312156136db57600080fd5b5051919050565b6000602082840312156136f457600080fd5b815161327b81613384565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561379957613799613536565b500390565b6000602082840312156137b057600080fd5b815161327b8161321a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561380b5784516001600160a01b0316835293830193918301916001016137e6565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561384157600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122040280e201a99e378b166824029c081f484f8ad82f5528b3aff448f1a9fafa71364736f6c634300080c0033

Deployed Bytecode Sourcemap

6938:17455:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1656:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2570:169;;;;;;;;;;-1:-1:-1;2570:169:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;2570:169:0;1072:187:1;23484:106:0;;;;;;;;;;-1:-1:-1;23484:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;23564:18:0;23540:4;23564:18;;;:9;:18;;;;;;;;;23484:106;8093:64;;;;;;;;;;-1:-1:-1;8093:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7090:43;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1698:32:1;;;1680:51;;1668:2;1653:18;7090:43:0;1516:221:1;1977:108:0;;;;;;;;;;-1:-1:-1;2065:12:0;;1977:108;;;1888:25:1;;;1876:2;1861:18;1977:108:0;1742:177:1;7898:33:0;;;;;;;;;;;;;;;;2747:480;;;;;;;;;;-1:-1:-1;2747:480:0;;;;;:::i;:::-;;:::i;20693:516::-;;;;;;;;;;-1:-1:-1;20693:516:0;;;;;:::i;:::-;;:::i;:::-;;11663:269;;;;;;;;;;-1:-1:-1;11663:269:0;;;;;:::i;:::-;;:::i;1876:93::-;;;;;;;;;;-1:-1:-1;1876:93:0;;1959:2;3729:36:1;;3717:2;3702:18;1876:93:0;3587:184:1;3235:215:0;;;;;;;;;;-1:-1:-1;3235:215:0;;;;;:::i;:::-;;:::i;7140:38::-;;;;;;;;;;;;;;;7447:33;;;;;;;;;;-1:-1:-1;7447:33:0;;;;;;;;7257:30;;;;;;;;;;-1:-1:-1;7257:30:0;;;;-1:-1:-1;;;;;7257:30:0;;;7601:29;;;;;;;;;;;;;;;;11061:425;;;;;;;;;;-1:-1:-1;11061:425:0;;;;;:::i;:::-;;:::i;23828:281::-;;;;;;;;;;-1:-1:-1;23828:281:0;;;;;:::i;:::-;;:::i;7016:28::-;;;;;;;;;;;;;;;;7711;;;;;;;;;;;;;;;;7746:30;;;;;;;;;;;;;;;;7527:31;;;;;;;;;;-1:-1:-1;7527:31:0;;;;;;;;;;;2093:127;;;;;;;;;;-1:-1:-1;2093:127:0;;;;;:::i;:::-;;:::i;5697:150::-;;;;;;;;;;;;;:::i;11538:115::-;;;;;;;;;;;;;:::i;13149:267::-;;;;;;;;;;-1:-1:-1;13149:267:0;;;;;:::i;:::-;;:::i;7674:28::-;;;;;;;;;;;;;;;;13926:381;;;;;;;;;;-1:-1:-1;13926:381:0;;;;;:::i;:::-;;:::i;23191:285::-;;;;;;;;;;-1:-1:-1;23191:285:0;;;;;:::i;:::-;;:::i;22648:456::-;;;;;;;;;;-1:-1:-1;22648:456:0;;;;;:::i;:::-;;:::i;19977:708::-;;;;;;;;;;-1:-1:-1;19977:708:0;;;;;:::i;:::-;;:::i;6982:27::-;;;;;;;;;;;;;;;;24117:273;;;;;;;;;;-1:-1:-1;24117:273:0;;;;;:::i;:::-;;:::i;5483:79::-;;;;;;;;;;-1:-1:-1;5548:6:0;;-1:-1:-1;;;;;5548:6:0;5483:79;;1764:104;;;;;;;;;;;;;:::i;13424:246::-;;;;;;;;;;-1:-1:-1;13424:246:0;;;;;:::i;:::-;;:::i;3458:401::-;;;;;;;;;;-1:-1:-1;3458:401:0;;;;;:::i;:::-;;:::i;2228:175::-;;;;;;;;;;-1:-1:-1;2228:175:0;;;;;:::i;:::-;;:::i;7051:30::-;;;;;;;;;;;;;;;;8315:58;;;;;;;;;;-1:-1:-1;8315:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7821:29;;;;;;;;;;;;;;;;7487:33;;;;;;;;;;-1:-1:-1;7487:33:0;;;;;;;;;;;14713:182;;;;;;;;;;-1:-1:-1;14713:182:0;;;;;:::i;:::-;;:::i;7294:29::-;;;;;;;;;;-1:-1:-1;7294:29:0;;;;-1:-1:-1;;;;;7294:29:0;;;14315:390;;;;;;;;;;-1:-1:-1;14315:390:0;;;;;:::i;:::-;;:::i;12222:284::-;;;;;;;;;;-1:-1:-1;12222:284:0;;;;;:::i;:::-;;:::i;7859:32::-;;;;;;;;;;;;;;;;12576:350;;;;;;;;;;-1:-1:-1;12576:350:0;;;;;:::i;:::-;;:::i;7567:27::-;;;;;;;;;;;;;;;;11940:274;;;;;;;;;;-1:-1:-1;11940:274:0;;;;;:::i;:::-;;:::i;2411:151::-;;;;;;;;;;-1:-1:-1;2411:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;2527:18:0;;;2500:7;2527:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2411:151;7215:33;;;;;;;;;;;;;;;;7332:37;;;;;;;;;;;;;;;;7637:30;;;;;;;;;;;;;;;;5855:244;;;;;;;;;;-1:-1:-1;5855:244:0;;;;;:::i;:::-;;:::i;7938:31::-;;;;;;;;;;;;;;;;23660:160;;;;;;;;;;;;;:::i;7783:31::-;;;;;;;;;;;;;;;;7409:29;;;;;;;;;;;;;;;;1656:100;1710:13;1743:5;1736:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1656:100;:::o;2570:169::-;2653:4;2670:39;175:10;2693:7;2702:6;2670:8;:39::i;:::-;-1:-1:-1;2727:4:0;2570:169;;;;;:::o;2747:480::-;2887:4;2904:36;2914:6;2922:9;2933:6;2904:9;:36::i;:::-;-1:-1:-1;;;;;2980:19:0;;2953:24;2980:19;;;:11;:19;;;;;;;;175:10;2980:33;;;;;;;;3032:26;;;;3024:79;;;;-1:-1:-1;;;3024:79:0;;7022:2:1;3024:79:0;;;7004:21:1;7061:2;7041:18;;;7034:30;7100:34;7080:18;;;7073:62;-1:-1:-1;;;7151:18:1;;;7144:38;7199:19;;3024:79:0;;;;;;;;;3131:57;3140:6;175:10;3181:6;3162:16;:25;3131:8;:57::i;:::-;-1:-1:-1;3215:4:0;;2747:480;-1:-1:-1;;;;2747:480:0:o;20693:516::-;5610:6;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;20843:4:::1;20824:23:::0;::::1;20816:81;;;::::0;-1:-1:-1;;;20816:81:0;;7792:2:1;20816:81:0::1;::::0;::::1;7774:21:1::0;7831:2;7811:18;;;7804:30;7870:34;7850:18;;;7843:62;-1:-1:-1;;;7921:18:1;;;7914:44;7975:19;;20816:81:0::1;7590:410:1::0;20816:81:0::1;20933:12;20973:9:::0;20956:14:::1;1959:2:::0;20956::::1;:14;:::i;:::-;20948:22;::::0;:6;:22:::1;:::i;:::-;:41;;;;:::i;:::-;20933:56;;21029:4;21010:15;21020:4;21010:9;:15::i;:::-;:23;;21002:63;;;::::0;-1:-1:-1;;;21002:63:0;;9895:2:1;21002:63:0::1;::::0;::::1;9877:21:1::0;9934:2;9914:18;;;9907:30;9973:29;9953:18;;;9946:57;10020:18;;21002:63:0::1;9693:351:1::0;21002:63:0::1;21082:6;21078:124;21092:20:::0;;::::1;21078:124;;;21133:53;21143:4;21148:9;;21158:1;21148:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;21170:14;1959:2:::0;21170::::1;:14;:::i;:::-;21162:22;::::0;:6;:22:::1;:::i;:::-;21133:9;:53::i;:::-;21114:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21078:124;;;;20803:406;20693:516:::0;;;;:::o;11663:269::-;5610:6;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;11782:4:::1;11776;11756:13;2065:12:::0;;;1977:108;11756:13:::1;:17;::::0;11772:1:::1;11756:17;:::i;:::-;:24;;;;:::i;:::-;11755:31;;;;:::i;:::-;11745:6;:41;;11737:95;;;::::0;-1:-1:-1;;;11737:95:0;;10745:2:1;11737:95:0::1;::::0;::::1;10727:21:1::0;10784:2;10764:18;;;10757:30;10823:34;10803:18;;;10796:62;-1:-1:-1;;;10874:18:1;;;10867:39;10923:19;;11737:95:0::1;10543:405:1::0;11737:95:0::1;11858:17;:6:::0;11868::::1;11858:17;:::i;:::-;11843:12;:32:::0;;;11891:33:::1;::::0;1888:25:1;;;11891:33:0::1;::::0;1876:2:1;1861:18;11891:33:0::1;;;;;;;;11663:269:::0;:::o;3235:215::-;175:10;3323:4;3372:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3372:34:0;;;;;;;;;;3323:4;;3340:80;;3363:7;;3372:47;;3409:10;;3372:47;:::i;:::-;3340:8;:80::i;11061:425::-;5610:6;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;11158:13:::1;::::0;::::1;::::0;::::1;;;11157:14;11149:51;;;::::0;-1:-1:-1;;;11149:51:0;;11288:2:1;11149:51:0::1;::::0;::::1;11270:21:1::0;11327:2;11307:18;;;11300:30;11366:26;11346:18;;;11339:54;11410:18;;11149:51:0::1;11086:348:1::0;11149:51:0::1;11211:13;:23:::0;;-1:-1:-1;;11211:23:0;::::1;;;::::0;;::::1;11245:18:::0;;;;-1:-1:-1;;11245:18:0;;;;;;;;::::1;::::0;;;;11279:42:::1;::::0;::::1;::::0;::::1;::::0;11294:13;::::1;11211:23;11294:13;::::0;11309:11;;11632:14:1;;11625:22;11607:41;;11679:2;11664:18;;11657:34;11595:2;11580:18;;11439:258;11279:42:0::1;;;;;;;;11338:13;::::0;::::1;::::0;::::1;;;:40:::0;::::1;;;-1:-1:-1::0;11355:18:0::1;::::0;:23;11338:40:::1;11334:145;;;11416:12;11395:18;:33:::0;11443:10:::1;:24:::0;;;11334:145:::1;11061:425:::0;;:::o;23828:281::-;5610:6;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23920:30:0;::::1;23912:79;;;::::0;-1:-1:-1;;;23912:79:0;;11904:2:1;23912:79:0::1;::::0;::::1;11886:21:1::0;11943:2;11923:18;;;11916:30;11982:34;11962:18;;;11955:62;-1:-1:-1;;;12033:18:1;;;12026:34;12077:19;;23912:79:0::1;11702:400:1::0;23912:79:0::1;24002:15;:43:::0;;-1:-1:-1;;;;;;24002:43:0::1;-1:-1:-1::0;;;;;24002:43:0;::::1;::::0;;::::1;::::0;;;24061:40:::1;::::0;::::1;::::0;-1:-1:-1;;24061:40:0::1;23828:281:::0;:::o;2093:127::-;-1:-1:-1;;;;;2194:18:0;2167:7;2194:18;;;;;;;;;;;;2093:127::o;5697:150::-;5610:6;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;5790:6:::1;::::0;5769:40:::1;::::0;5806:1:::1;::::0;-1:-1:-1;;;;;5790:6:0::1;::::0;5769:40:::1;::::0;5806:1;;5769:40:::1;5820:6;:19:::0;;-1:-1:-1;;;;;;5820:19:0::1;::::0;;5697:150::o;11538:115::-;5610:6;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;11592:14:::1;:22:::0;;-1:-1:-1;;11592:22:0::1;::::0;;11630:15:::1;::::0;::::1;::::0;11609:5:::1;::::0;11630:15:::1;11538:115::o:0;13149:267::-;5610:6;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;13245:4:::1;13241:111;;13283:13;-1:-1:-1::0;;;;;13273:23:0::1;:6;-1:-1:-1::0;;;;;13273:23:0::1;;;13265:75;;;::::0;-1:-1:-1;;;13265:75:0;;12309:2:1;13265:75:0::1;::::0;::::1;12291:21:1::0;12348:2;12328:18;;;12321:30;12387:34;12367:18;;;12360:62;-1:-1:-1;;;12438:18:1;;;12431:37;12485:19;;13265:75:0::1;12107:403:1::0;13265:75:0::1;-1:-1:-1::0;;;;;13362:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;13362:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13149:267::o;13926:381::-;5610:6;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;14045:14:::1;:29:::0;;;14085:15:::1;:31:::0;;;14127:13:::1;:27:::0;;;14143:11;14180:32:::1;14103:13:::0;14062:12;14180:32:::1;:::i;:::-;:48;;;;:::i;:::-;14165:12;:63:::0;;;14263:2:::1;-1:-1:-1::0;14247:18:0::1;14239:60;;;::::0;-1:-1:-1;;;14239:60:0;;12717:2:1;14239:60:0::1;::::0;::::1;12699:21:1::0;12756:2;12736:18;;;12729:30;12795:31;12775:18;;;12768:59;12844:18;;14239:60:0::1;12515:353:1::0;14239:60:0::1;13926:381:::0;;;:::o;23191:285::-;5610:6;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23288:25:0;::::1;;::::0;;;:9:::1;:25;::::0;;;;;::::1;;:35;;::::0;::::1;;;;23280:84;;;::::0;-1:-1:-1;;;23280:84:0;;13075:2:1;23280:84:0::1;::::0;::::1;13057:21:1::0;13114:2;13094:18;;;13087:30;13153:34;13133:18;;;13126:62;-1:-1:-1;;;13204:18:1;;;13197:34;13248:19;;23280:84:0::1;12873:400:1::0;23280:84:0::1;-1:-1:-1::0;;;;;23375:25:0;::::1;;::::0;;;:9:::1;:25;::::0;;;;;;;;:34;;-1:-1:-1;;23375:34:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23425:43;;1212:41:1;;;23425:43:0::1;::::0;1185:18:1;23425:43:0::1;;;;;;;;23191:285:::0;;:::o;22648:456::-;5610:6;;22735:10;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22766:20:0;::::1;22758:59;;;::::0;-1:-1:-1;;;22758:59:0;;13480:2:1;22758:59:0::1;::::0;::::1;13462:21:1::0;13519:2;13499:18;;;13492:30;13558:28;13538:18;;;13531:56;13604:18;;22758:59:0::1;13278:350:1::0;22758:59:0::1;-1:-1:-1::0;;;;;22836:23:0;::::1;22854:4;22836:23;;22828:64;;;::::0;-1:-1:-1;;;22828:64:0;;13835:2:1;22828:64:0::1;::::0;::::1;13817:21:1::0;13874:2;13854:18;;;13847:30;13913;13893:18;;;13886:58;13961:18;;22828:64:0::1;13633:352:1::0;22828:64:0::1;22930:39;::::0;-1:-1:-1;;;22930:39:0;;22963:4:::1;22930:39;::::0;::::1;1680:51:1::0;22903:24:0::1;::::0;-1:-1:-1;;;;;22930:24:0;::::1;::::0;::::1;::::0;1653:18:1;;22930:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22988:46;::::0;-1:-1:-1;;;22988:46:0;;-1:-1:-1;;;;;14371:32:1;;;22988:46:0::1;::::0;::::1;14353:51:1::0;14420:18;;;14413:34;;;22903:66:0;;-1:-1:-1;22988:23:0;;::::1;::::0;::::1;::::0;14326:18:1;;22988:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23050;::::0;;-1:-1:-1;;;;;14371:32:1;;14353:51;;14435:2;14420:18;;14413:34;;;22980:54:0;;-1:-1:-1;23050:46:0::1;::::0;14326:18:1;23050:46:0::1;;;;;;;22747:357;22648:456:::0;;;;:::o;19977:708::-;5610:6;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;20134:3:::1;20115:22:::0;::::1;20107:79;;;::::0;-1:-1:-1;;;20107:79:0;;14910:2:1;20107:79:0::1;::::0;::::1;14892:21:1::0;14949:2;14929:18;;;14922:30;14988:34;14968:18;;;14961:62;-1:-1:-1;;;15039:18:1;;;15032:43;15092:19;;20107:79:0::1;14708:409:1::0;20107:79:0::1;20228:33:::0;;::::1;20220:85;;;::::0;-1:-1:-1;;;20220:85:0;;15324:2:1;20220:85:0::1;::::0;::::1;15306:21:1::0;15363:2;15343:18;;;15336:30;15402:34;15382:18;;;15375:62;-1:-1:-1;;;15453:18:1;;;15446:38;15501:19;;20220:85:0::1;15122:404:1::0;20220:85:0::1;20318:12;20351:6:::0;20347:109:::1;20361:20:::0;;::::1;20347:109;;;20429:14;1959:2:::0;20429::::1;:14;:::i;:::-;20417:6;;20424:1;20417:9;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;20409:35;::::0;:4;:35:::1;:::i;:::-;20402:42:::0;-1:-1:-1;20383:3:0;::::1;::::0;::::1;:::i;:::-;;;;20347:109;;;;20495:4;20476:15;20486:4;20476:9;:15::i;:::-;:23;;20468:63;;;::::0;-1:-1:-1;;;20468:63:0;;9895:2:1;20468:63:0::1;::::0;::::1;9877:21:1::0;9934:2;9914:18;;;9907:30;9973:29;9953:18;;;9946:57;10020:18;;20468:63:0::1;9693:351:1::0;20468:63:0::1;20548:6;20544:134;20558:20:::0;;::::1;20544:134;;;20599:57;20609:4;20614:9;;20624:1;20614:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20640:14;1959:2:::0;20640::::1;:14;:::i;:::-;20628:6;;20635:1;20628:9;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;20599:57::-;20580:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20544:134;;;;20094:591;19977:708:::0;;;;;:::o;24117:273::-;5610:6;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24207:29:0;::::1;24199:77;;;::::0;-1:-1:-1;;;24199:77:0;;15733:2:1;24199:77:0::1;::::0;::::1;15715:21:1::0;15772:2;15752:18;;;15745:30;15811:34;15791:18;;;15784:62;-1:-1:-1;;;15862:18:1;;;15855:33;15905:19;;24199:77:0::1;15531:399:1::0;24199:77:0::1;24287:14;:41:::0;;-1:-1:-1;;;;;;24287:41:0::1;-1:-1:-1::0;;;;;24287:41:0;::::1;::::0;;::::1;::::0;;;24344:38:::1;::::0;::::1;::::0;-1:-1:-1;;24344:38:0::1;24117:273:::0;:::o;1764:104::-;1820:13;1853:7;1846:14;;;;;:::i;13424:246::-;5610:6;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;13533:13:::1;-1:-1:-1::0;;;;;13525:21:0::1;:4;-1:-1:-1::0;;;;;13525:21:0::1;;;13517:91;;;::::0;-1:-1:-1;;;13517:91:0;;16137:2:1;13517:91:0::1;::::0;::::1;16119:21:1::0;16176:2;16156:18;;;16149:30;16215:34;16195:18;;;16188:62;16286:27;16266:18;;;16259:55;16331:19;;13517:91:0::1;15935:421:1::0;13517:91:0::1;13621:41;13650:4;13656:5;13621:28;:41::i;3458:401::-:0;175:10;3551:4;3595:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3595:34:0;;;;;;;;;;3648:35;;;;3640:85;;;;-1:-1:-1;;;3640:85:0;;16563:2:1;3640:85:0;;;16545:21:1;16602:2;16582:18;;;16575:30;16641:34;16621:18;;;16614:62;-1:-1:-1;;;16692:18:1;;;16685:35;16737:19;;3640:85:0;16361:401:1;3640:85:0;3753:67;175:10;3776:7;3804:15;3785:16;:34;3753:8;:67::i;:::-;-1:-1:-1;3847:4:0;;3458:401;-1:-1:-1;;;3458:401:0:o;2228:175::-;2314:4;2331:42;175:10;2355:9;2366:6;2331:9;:42::i;14713:182::-;5610:6;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14798:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;14798:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14853:34;;1212:41:1;;;14853:34:0::1;::::0;1185:18:1;14853:34:0::1;1072:187:1::0;14315:390:0;5610:6;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;14435:15:::1;:30:::0;;;14476:16:::1;:32:::0;;;14519:14:::1;:28:::0;;;14536:11;14574:34:::1;14495:13:::0;14453:12;14574:34:::1;:::i;:::-;:51;;;;:::i;:::-;14558:13;:67:::0;;;14661:2:::1;-1:-1:-1::0;14644:19:0::1;14636:61;;;::::0;-1:-1:-1;;;14636:61:0;;16969:2:1;14636:61:0::1;::::0;::::1;16951:21:1::0;17008:2;16988:18;;;16981:30;17047:31;17027:18;;;17020:59;17096:18;;14636:61:0::1;16767:353:1::0;12222:284:0;5610:6;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;12344:4:::1;12338;12318:13;2065:12:::0;;;1977:108;12318:13:::1;:17;::::0;12334:1:::1;12318:17;:::i;:::-;:24;;;;:::i;:::-;12317:31;;;;:::i;:::-;12307:6;:41;;12299:98;;;::::0;-1:-1:-1;;;12299:98:0;;17327:2:1;12299:98:0::1;::::0;::::1;17309:21:1::0;17366:2;17346:18;;;17339:30;17405:34;17385:18;;;17378:62;-1:-1:-1;;;17456:18:1;;;17449:42;17508:19;;12299:98:0::1;17125:408:1::0;12299:98:0::1;12426:17;:6:::0;12436::::1;12426:17;:::i;:::-;12408:15;:35:::0;;;12459:39:::1;::::0;1888:25:1;;;12459:39:0::1;::::0;1876:2:1;1861:18;12459:39:0::1;1742:177:1::0;12576:350:0;5610:6;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;12700:6:::1;12680:13;2065:12:::0;;;1977:108;12680:13:::1;:17;::::0;12696:1:::1;12680:17;:::i;:::-;:26;;;;:::i;:::-;12667:9;:39;;12659:105;;;::::0;-1:-1:-1;;;12659:105:0;;17740:2:1;12659:105:0::1;::::0;::::1;17722:21:1::0;17779:2;17759:18;;;17752:30;17818:34;17798:18;;;17791:62;-1:-1:-1;;;17869:18:1;;;17862:51;17930:19;;12659:105:0::1;17538:417:1::0;12659:105:0::1;12816:4;12796:13;2065:12:::0;;;1977:108;12796:13:::1;:17;::::0;12812:1:::1;12796:17;:::i;:::-;:24;;;;:::i;:::-;12783:9;:37;;12775:102;;;::::0;-1:-1:-1;;;12775:102:0;;18162:2:1;12775:102:0::1;::::0;::::1;18144:21:1::0;18201:2;18181:18;;;18174:30;18240:34;18220:18;;;18213:62;-1:-1:-1;;;18291:18:1;;;18284:50;18351:19;;12775:102:0::1;17960:416:1::0;12775:102:0::1;12888:18;:30:::0;12576:350::o;11940:274::-;5610:6;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;12060:4:::1;12054;12034:13;2065:12:::0;;;1977:108;12034:13:::1;:17;::::0;12050:1:::1;12034:17;:::i;:::-;:24;;;;:::i;:::-;12033:31;;;;:::i;:::-;12023:6;:41;;12015:96;;;::::0;-1:-1:-1;;;12015:96:0;;18583:2:1;12015:96:0::1;::::0;::::1;18565:21:1::0;18622:2;18602:18;;;18595:30;18661:34;18641:18;;;18634:62;-1:-1:-1;;;18712:18:1;;;18705:40;18762:19;;12015:96:0::1;18381:406:1::0;12015:96:0::1;12138:17;:6:::0;12148::::1;12138:17;:::i;:::-;12122:13;:33:::0;;;12171:35:::1;::::0;1888:25:1;;;12171:35:0::1;::::0;1876:2:1;1861:18;12171:35:0::1;1742:177:1::0;5855:244:0;5610:6;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5944:22:0;::::1;5936:73;;;::::0;-1:-1:-1;;;5936:73:0;;18994:2:1;5936:73:0::1;::::0;::::1;18976:21:1::0;19033:2;19013:18;;;19006:30;19072:34;19052:18;;;19045:62;-1:-1:-1;;;19123:18:1;;;19116:36;19169:19;;5936:73:0::1;18792:402:1::0;5936:73:0::1;6046:6;::::0;6025:38:::1;::::0;-1:-1:-1;;;;;6025:38:0;;::::1;::::0;6046:6:::1;::::0;6025:38:::1;::::0;6046:6:::1;::::0;6025:38:::1;6074:6;:17:::0;;-1:-1:-1;;;;;;6074:17:0::1;-1:-1:-1::0;;;;;6074:17:0;;;::::1;::::0;;;::::1;::::0;;5855:244::o;23660:160::-;5610:6;;-1:-1:-1;;;;;5610:6:0;175:10;5610:22;5602:67;;;;-1:-1:-1;;;5602:67:0;;;;;;;:::i;:::-;23754:58:::1;::::0;23718:12:::1;::::0;23762:10:::1;::::0;23786:21:::1;::::0;23718:12;23754:58;23718:12;23754:58;23786:21;23762:10;23754:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;23660:160:0:o;4776:380::-;-1:-1:-1;;;;;4912:19:0;;4904:68;;;;-1:-1:-1;;;4904:68:0;;19611:2:1;4904:68:0;;;19593:21:1;19650:2;19630:18;;;19623:30;19689:34;19669:18;;;19662:62;-1:-1:-1;;;19740:18:1;;;19733:34;19784:19;;4904:68:0;19409:400:1;4904:68:0;-1:-1:-1;;;;;4991:21:0;;4983:68;;;;-1:-1:-1;;;4983:68:0;;20016:2:1;4983:68:0;;;19998:21:1;20055:2;20035:18;;;20028:30;20094:34;20074:18;;;20067:62;-1:-1:-1;;;20145:18:1;;;20138:32;20187:19;;4983:68:0;19814:398:1;4983:68:0;-1:-1:-1;;;;;5064:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5116:32;;1888:25:1;;;5116:32:0;;1861:18:1;5116:32:0;;;;;;;4776:380;;;:::o;14905:3928::-;-1:-1:-1;;;;;15005:18:0;;14997:68;;;;-1:-1:-1;;;14997:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15084:16:0;;15076:64;;;;-1:-1:-1;;;15076:64:0;;;;;;;:::i;:::-;15168:1;15159:6;:10;15151:52;;;;-1:-1:-1;;;15151:52:0;;21229:2:1;15151:52:0;;;21211:21:1;21268:2;21248:18;;;21241:30;21307:31;21287:18;;;21280:59;21356:18;;15151:52:0;21027:353:1;15151:52:0;-1:-1:-1;;;;;15223:15:0;;;;;;:9;:15;;;;;;;;15222:16;15214:56;;;;-1:-1:-1;;;15214:56:0;;21587:2:1;15214:56:0;;;21569:21:1;21626:2;21606:18;;;21599:30;21665:29;21645:18;;;21638:57;21712:18;;15214:56:0;21385:351:1;15214:56:0;-1:-1:-1;;;;;15290:13:0;;;;;;:9;:13;;;;;;;;15289:14;15281:54;;;;-1:-1:-1;;;15281:54:0;;21587:2:1;15281:54:0;;;21569:21:1;21626:2;21606:18;;;21599:30;21665:29;21645:18;;;21638:57;21712:18;;15281:54:0;21385:351:1;15281:54:0;15353:14;;;;15350:1386;;;5548:6;;-1:-1:-1;;;;;15387:15:0;;;5548:6;;15387:15;;;;:32;;-1:-1:-1;5548:6:0;;-1:-1:-1;;;;;15406:13:0;;;5548:6;;15406:13;;15387:32;:52;;;;-1:-1:-1;;;;;;15423:16:0;;;;15387:52;:77;;;;-1:-1:-1;;;;;;15443:21:0;;15457:6;15443:21;;15387:77;15383:1342;;;15488:13;;;;;;;15484:241;;-1:-1:-1;;;;;15533:37:0;;;;;;:31;:37;;;;;;;;;:76;;-1:-1:-1;;;;;;15574:35:0;;;;;;:31;:35;;;;;;;;15533:76;15525:111;;;;-1:-1:-1;;;15525:111:0;;21943:2:1;15525:111:0;;;21925:21:1;21982:2;21962:18;;;21955:30;-1:-1:-1;;;22001:18:1;;;21994:52;22063:18;;15525:111:0;21741:346:1;15525:111:0;5548:6;;-1:-1:-1;;;;;15667:15:0;;;5548:6;;15667:15;15659:46;;;;-1:-1:-1;;;15659:46:0;;22294:2:1;15659:46:0;;;22276:21:1;22333:2;22313:18;;;22306:30;-1:-1:-1;;;22352:18:1;;;22345:48;22410:18;;15659:46:0;22092:342:1;15659:46:0;15770:1;15749:18;;:22;:74;;;;;15812:10;;15791:18;;:31;;;;:::i;:::-;15775:12;:48;15749:74;15745:144;;;-1:-1:-1;;;;;15849:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;15849:20:0;15865:4;15849:20;;;15745:144;-1:-1:-1;;;;;15941:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;15977:35:0;;;;;;:31;:35;;;;;;;;15976:36;15941:71;15937:773;;;16055:12;;16045:6;:22;;16037:75;;;;-1:-1:-1;;;16037:75:0;;22641:2:1;16037:75:0;;;22623:21:1;22680:2;22660:18;;;22653:30;22719:34;22699:18;;;22692:62;-1:-1:-1;;;22770:18:1;;;22763:38;22818:19;;16037:75:0;22439:404:1;16037:75:0;16169:15;;16152:13;16162:2;16152:9;:13::i;:::-;16143:22;;:6;:22;:::i;:::-;:41;;16135:78;;;;-1:-1:-1;;;16135:78:0;;23050:2:1;16135:78:0;;;23032:21:1;23089:2;23069:18;;;23062:30;-1:-1:-1;;;23108:18:1;;;23101:54;23172:18;;16135:78:0;22848:348:1;16135:78:0;15937:773;;;-1:-1:-1;;;;;16289:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;16323:37:0;;;;;;:31;:37;;;;;;;;16322:38;16289:71;16285:425;;;16403:13;;16393:6;:23;;16385:78;;;;-1:-1:-1;;;16385:78:0;;23403:2:1;16385:78:0;;;23385:21:1;23442:2;23422:18;;;23415:30;23481:34;23461:18;;;23454:62;-1:-1:-1;;;23532:18:1;;;23525:40;23582:19;;16385:78:0;23201:406:1;16285:425:0;-1:-1:-1;;;;;16511:35:0;;;;;;:31;:35;;;;;;;;16510:36;:78;;;;-1:-1:-1;;;;;;16551:37:0;;;;;;:31;:37;;;;;;;;16550:38;16510:78;16506:204;;;16646:15;;16629:13;16639:2;16629:9;:13::i;:::-;16620:22;;:6;:22;:::i;:::-;:41;;16612:78;;;;-1:-1:-1;;;16612:78:0;;23050:2:1;16612:78:0;;;23032:21:1;23089:2;23069:18;;;23062:30;-1:-1:-1;;;23108:18:1;;;23101:54;23172:18;;16612:78:0;22848:348:1;16612:78:0;16748:28;16779:24;16797:4;16779:9;:24::i;:::-;16855:18;;16748:55;;-1:-1:-1;16831:42:0;;;;;;;16889:22;;-1:-1:-1;16900:11:0;;;;;;;16889:22;:35;;;;-1:-1:-1;16916:8:0;;;;16915:9;16889:35;:71;;;;-1:-1:-1;;;;;;16929:31:0;;;;;;:25;:31;;;;;;;;16928:32;16889:71;:101;;;;-1:-1:-1;;;;;;16965:25:0;;;;;;:19;:25;;;;;;;;16964:26;16889:101;:129;;;;-1:-1:-1;;;;;;16995:23:0;;;;;;:19;:23;;;;;;;;16994:24;16889:129;16886:236;;;17035:8;:15;;-1:-1:-1;;17035:15:0;17046:4;17035:15;;;17067:10;:8;:10::i;:::-;17094:8;:16;;-1:-1:-1;;17094:16:0;;;16886:236;-1:-1:-1;;;;;17252:25:0;;17134:12;17252:25;;;:19;:25;;;;;;17149:4;;17252:25;;;:52;;-1:-1:-1;;;;;;17281:23:0;;;;;;:19;:23;;;;;;;;17252:52;17249:99;;;-1:-1:-1;17331:5:0;17249:99;17360:12;17387:21;17490:7;17487:1293;;;17636:1;17617:18;;:20;:63;;;;;17668:12;17642:18;;17663:1;17642:22;;;;:::i;:::-;17641:39;17617:63;17614:1003;;;17730:3;17716:11;:6;17725:2;17716:11;:::i;:::-;:17;;;;:::i;:::-;17774:15;;17700:33;;-1:-1:-1;17752:53:0;;17768:4;;-1:-1:-1;;;;;17774:15:0;17700:33;17752:15;:53::i;:::-;17614:1003;;;-1:-1:-1;;;;;17868:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;17917:1;17901:13;;:17;17868:50;17864:753;;;17969:3;17954:13;;17945:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;17938:34;;18039:13;;18020:16;;18013:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;17991:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;18117:13:0;;18099:15;;18092:22;;:4;:22;:::i;:::-;:38;;;;:::i;:::-;18071:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;18193:13:0;;18176:14;;18169:21;;:4;:21;:::i;:::-;:37;;;;:::i;:::-;18149:16;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;17864:753:0;;-1:-1:-1;17864:753:0;;-1:-1:-1;;;;;18267:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;18317:1;18302:12;;:16;18267:51;18264:353;;;18370:3;18355:12;;18346:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;18339:34;;18439:12;;18421:15;;18414:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;18392:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;18515:12:0;;18498:14;;18491:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;18470:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;18589:12:0;;18573:13;;18566:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;18546:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;18264:353:0;18636:8;;18633:89;;18664:42;18680:4;18694;18701;18664:15;:42::i;:::-;18748:20;18755:13;18748:4;:20;:::i;:::-;18738:30;;;;:::i;:::-;;;17487:1293;18792:33;18808:4;18814:2;18818:6;18792:15;:33::i;:::-;14984:3849;;;;;14905:3928;;;:::o;13678:240::-;-1:-1:-1;;;;;13761:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;13761:39:0;;;;;;;13813;13761:31;:39;13813:26;:39::i;:::-;13870:40;;;;;;-1:-1:-1;;;;;13870:40:0;;;;;;;;13678:240;;:::o;21225:1415::-;21264:23;21290:24;21308:4;21290:9;:24::i;:::-;21264:50;;21325:25;21394:16;;21374:17;;21353:18;;:38;;;;:::i;:::-;:57;;;;:::i;:::-;21325:85;-1:-1:-1;21426:20:0;;;:46;;-1:-1:-1;21450:22:0;;21426:46;21423:60;;;21475:7;;21225:1415::o;21423:60::-;21516:18;;;:23;;;:::i;:::-;21498:15;:41;21495:113;;;21573:18;;;:23;;;:::i;:::-;21555:41;;21495:113;21620:12;21694:23;21779:1;21759:17;21738:18;;21720:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;21694:86;-1:-1:-1;21793:51:0;21810:33;21694:86;21810:15;:33;:::i;:::-;21793:16;:51::i;:::-;22039:18;;21878:21;;;;21857:18;;22039:20;;22058:1;;22039:20;:::i;:::-;22018:42;;:17;:42;:::i;:::-;21997:17;;21984:30;;:10;:30;:::i;:::-;:77;;;;:::i;:::-;21959:102;;22072:21;22169:1;22150:18;;:20;;;;:::i;:::-;22129:42;;:17;:42;:::i;:::-;22109:16;;22096:29;;:10;:29;:::i;:::-;:76;;;;:::i;:::-;22072:100;-1:-1:-1;22204:30:0;22072:100;22204:14;:30;:::i;:::-;22185:49;;;;:::i;:::-;22268:1;22247:18;:22;;;22280:17;:21;;;22312:16;:20;22185:49;-1:-1:-1;22348:19:0;;;;;:42;;;22389:1;22371:15;:19;22348:42;22345:119;;;22406:46;22419:15;22436;22406:12;:46::i;:::-;22497:14;;22489:54;;-1:-1:-1;;;;;22497:14:0;;;;22525:13;;22489:54;;;;22525:13;22497:14;22489:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22577:15:0;;22569:63;;22476:67;;-1:-1:-1;;;;;;22577:15:0;;22606:21;;22569:63;;;;22606:21;22577:15;22569:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21225:1415:0:o;3867:602::-;-1:-1:-1;;;;;4007:20:0;;3999:70;;;;-1:-1:-1;;;3999:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4088:23:0;;4080:71;;;;-1:-1:-1;;;4080:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4188:17:0;;4164:21;4188:17;;;;;;;;;;;4224:23;;;;4216:74;;;;-1:-1:-1;;;4216:74:0;;23944:2:1;4216:74:0;;;23926:21:1;23983:2;23963:18;;;23956:30;24022:34;24002:18;;;23995:62;-1:-1:-1;;;24073:18:1;;;24066:36;24119:19;;4216:74:0;23742:402:1;4216:74:0;-1:-1:-1;;;;;4318:17:0;;;:9;:17;;;;;;;;;;;4338:22;;;4318:42;;4378:20;;;;;;;;:30;;4354:6;;4318:9;4378:30;;4354:6;;4378:30;:::i;:::-;;;;;;;;4443:9;-1:-1:-1;;;;;4426:35:0;4435:6;-1:-1:-1;;;;;4426:35:0;;4454:6;4426:35;;;;1888:25:1;;1876:2;1861:18;;1742:177;4426:35:0;;;;;;;;3988:481;3867:602;;;:::o;12934:207::-;-1:-1:-1;;;;;13022:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;13022:52:0;;;;;;;;;;13090:43;;24317:51:1;;;24384:18;;;24377:50;13090:43:0;;24290:18:1;13090:43:0;;;;;;;12934:207;;:::o;18841:591::-;18993:16;;;19007:1;18993:16;;;;;;;;18969:21;;18993:16;;;;;;;;;;-1:-1:-1;18993:16:0;18969:40;;19038:4;19020;19025:1;19020:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;19020:23:0;;;-1:-1:-1;;;;;19020:23:0;;;;;19064:15;-1:-1:-1;;;;;19064:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19054:4;19059:1;19054:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;19054:32:0;;;-1:-1:-1;;;;;19054:32:0;;;;;19099:62;19116:4;19131:15;19149:11;19099:8;:62::i;:::-;19200:224;;-1:-1:-1;;;19200:224:0;;-1:-1:-1;;;;;19200:15:0;:66;;;;:224;;19281:11;;19307:1;;19351:4;;19378;;19398:15;;19200:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19440:522;19588:62;19605:4;19620:15;19638:11;19588:8;:62::i;:::-;19693:15;-1:-1:-1;;;;;19693:31:0;;19732:9;19765:4;19785:11;19811:1;19854;19905:7;5548:6;;-1:-1:-1;;;;;5548:6:0;;5483:79;19905:7;19693:261;;;;;;-1:-1:-1;;;;;;19693:261:0;;;-1:-1:-1;;;;;26170:15:1;;;19693:261:0;;;26152:34:1;26202:18;;;26195:34;;;;26245:18;;;26238:34;;;;26288:18;;;26281:34;26352:15;;;26331:19;;;26324:44;19928:15:0;26384:19:1;;;26377:35;26086:19;;19693:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;19440:522;;:::o;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;:::-;1500:5;1264:247;-1:-1:-1;;;1264:247:1:o;1924:456::-;2001:6;2009;2017;2070:2;2058:9;2049:7;2045:23;2041:32;2038:52;;;2086:1;2083;2076:12;2038:52;2125:9;2112:23;2144:31;2169:5;2144:31;:::i;:::-;2194:5;-1:-1:-1;2251:2:1;2236:18;;2223:32;2264:33;2223:32;2264:33;:::i;:::-;1924:456;;2316:7;;-1:-1:-1;;;2370:2:1;2355:18;;;;2342:32;;1924:456::o;2385:367::-;2448:8;2458:6;2512:3;2505:4;2497:6;2493:17;2489:27;2479:55;;2530:1;2527;2520:12;2479:55;-1:-1:-1;2553:20:1;;2596:18;2585:30;;2582:50;;;2628:1;2625;2618:12;2582:50;2665:4;2657:6;2653:17;2641:29;;2725:3;2718:4;2708:6;2705:1;2701:14;2693:6;2689:27;2685:38;2682:47;2679:67;;;2742:1;2739;2732:12;2679:67;2385:367;;;;;:::o;2757:640::-;2861:6;2869;2877;2885;2938:2;2926:9;2917:7;2913:23;2909:32;2906:52;;;2954:1;2951;2944:12;2906:52;2993:9;2980:23;3012:31;3037:5;3012:31;:::i;:::-;3062:5;-1:-1:-1;3118:2:1;3103:18;;3090:32;3145:18;3134:30;;3131:50;;;3177:1;3174;3167:12;3131:50;3216:70;3278:7;3269:6;3258:9;3254:22;3216:70;:::i;:::-;2757:640;;3305:8;;-1:-1:-1;3190:96:1;;3387:2;3372:18;3359:32;;2757:640;-1:-1:-1;;;;2757:640:1:o;3402:180::-;3461:6;3514:2;3502:9;3493:7;3489:23;3485:32;3482:52;;;3530:1;3527;3520:12;3482:52;-1:-1:-1;3553:23:1;;3402:180;-1:-1:-1;3402:180:1:o;3984:118::-;4070:5;4063:13;4056:21;4049:5;4046:32;4036:60;;4092:1;4089;4082:12;4107:309;4172:6;4180;4233:2;4221:9;4212:7;4208:23;4204:32;4201:52;;;4249:1;4246;4239:12;4201:52;4288:9;4275:23;4307:28;4329:5;4307:28;:::i;4421:382::-;4486:6;4494;4547:2;4535:9;4526:7;4522:23;4518:32;4515:52;;;4563:1;4560;4553:12;4515:52;4602:9;4589:23;4621:31;4646:5;4621:31;:::i;:::-;4671:5;-1:-1:-1;4728:2:1;4713:18;;4700:32;4741:30;4700:32;4741:30;:::i;:::-;4790:7;4780:17;;;4421:382;;;;;:::o;4808:316::-;4885:6;4893;4901;4954:2;4942:9;4933:7;4929:23;4925:32;4922:52;;;4970:1;4967;4960:12;4922:52;-1:-1:-1;;4993:23:1;;;5063:2;5048:18;;5035:32;;-1:-1:-1;5114:2:1;5099:18;;;5086:32;;4808:316;-1:-1:-1;4808:316:1:o;5129:388::-;5197:6;5205;5258:2;5246:9;5237:7;5233:23;5229:32;5226:52;;;5274:1;5271;5264:12;5226:52;5313:9;5300:23;5332:31;5357:5;5332:31;:::i;:::-;5382:5;-1:-1:-1;5439:2:1;5424:18;;5411:32;5452:33;5411:32;5452:33;:::i;5522:908::-;5653:6;5661;5669;5677;5685;5738:2;5726:9;5717:7;5713:23;5709:32;5706:52;;;5754:1;5751;5744:12;5706:52;5793:9;5780:23;5812:31;5837:5;5812:31;:::i;:::-;5862:5;-1:-1:-1;5918:2:1;5903:18;;5890:32;5941:18;5971:14;;;5968:34;;;5998:1;5995;5988:12;5968:34;6037:70;6099:7;6090:6;6079:9;6075:22;6037:70;:::i;:::-;6126:8;;-1:-1:-1;6011:96:1;-1:-1:-1;6214:2:1;6199:18;;6186:32;;-1:-1:-1;6230:16:1;;;6227:36;;;6259:1;6256;6249:12;6227:36;;6298:72;6362:7;6351:8;6340:9;6336:24;6298:72;:::i;:::-;5522:908;;;;-1:-1:-1;5522:908:1;;-1:-1:-1;6389:8:1;;6272:98;5522:908;-1:-1:-1;;;5522:908:1:o;6435:380::-;6514:1;6510:12;;;;6557;;;6578:61;;6632:4;6624:6;6620:17;6610:27;;6578:61;6685:2;6677:6;6674:14;6654:18;6651:38;6648:161;;;6731:10;6726:3;6722:20;6719:1;6712:31;6766:4;6763:1;6756:15;6794:4;6791:1;6784:15;6648:161;;6435:380;;;:::o;7229:356::-;7431:2;7413:21;;;7450:18;;;7443:30;7509:34;7504:2;7489:18;;7482:62;7576:2;7561:18;;7229:356::o;8005:127::-;8066:10;8061:3;8057:20;8054:1;8047:31;8097:4;8094:1;8087:15;8121:4;8118:1;8111:15;8137:422;8226:1;8269:5;8226:1;8283:270;8304:7;8294:8;8291:21;8283:270;;;8363:4;8359:1;8355:6;8351:17;8345:4;8342:27;8339:53;;;8372:18;;:::i;:::-;8422:7;8412:8;8408:22;8405:55;;;8442:16;;;;8405:55;8521:22;;;;8481:15;;;;8283:270;;;8287:3;8137:422;;;;;:::o;8564:806::-;8613:5;8643:8;8633:80;;-1:-1:-1;8684:1:1;8698:5;;8633:80;8732:4;8722:76;;-1:-1:-1;8769:1:1;8783:5;;8722:76;8814:4;8832:1;8827:59;;;;8900:1;8895:130;;;;8807:218;;8827:59;8857:1;8848:10;;8871:5;;;8895:130;8932:3;8922:8;8919:17;8916:43;;;8939:18;;:::i;:::-;-1:-1:-1;;8995:1:1;8981:16;;9010:5;;8807:218;;9109:2;9099:8;9096:16;9090:3;9084:4;9081:13;9077:36;9071:2;9061:8;9058:16;9053:2;9047:4;9044:12;9040:35;9037:77;9034:159;;;-1:-1:-1;9146:19:1;;;9178:5;;9034:159;9225:34;9250:8;9244:4;9225:34;:::i;:::-;9295:6;9291:1;9287:6;9283:19;9274:7;9271:32;9268:58;;;9306:18;;:::i;:::-;9344:20;;8564:806;-1:-1:-1;;;8564:806:1:o;9375:140::-;9433:5;9462:47;9503:4;9493:8;9489:19;9483:4;9462:47;:::i;9520:168::-;9560:7;9626:1;9622;9618:6;9614:14;9611:1;9608:21;9603:1;9596:9;9589:17;9585:45;9582:71;;;9633:18;;:::i;:::-;-1:-1:-1;9673:9:1;;9520:168::o;10049:127::-;10110:10;10105:3;10101:20;10098:1;10091:31;10141:4;10138:1;10131:15;10165:4;10162:1;10155:15;10181:135;10220:3;-1:-1:-1;;10241:17:1;;10238:43;;;10261:18;;:::i;:::-;-1:-1:-1;10308:1:1;10297:13;;10181:135::o;10321:217::-;10361:1;10387;10377:132;;10431:10;10426:3;10422:20;10419:1;10412:31;10466:4;10463:1;10456:15;10494:4;10491:1;10484:15;10377:132;-1:-1:-1;10523:9:1;;10321:217::o;10953:128::-;10993:3;11024:1;11020:6;11017:1;11014:13;11011:39;;;11030:18;;:::i;:::-;-1:-1:-1;11066:9:1;;10953:128::o;13990:184::-;14060:6;14113:2;14101:9;14092:7;14088:23;14084:32;14081:52;;;14129:1;14126;14119:12;14081:52;-1:-1:-1;14152:16:1;;13990:184;-1:-1:-1;13990:184:1:o;14458:245::-;14525:6;14578:2;14566:9;14557:7;14553:23;14549:32;14546:52;;;14594:1;14591;14584:12;14546:52;14626:9;14620:16;14645:28;14667:5;14645:28;:::i;20217:401::-;20419:2;20401:21;;;20458:2;20438:18;;;20431:30;20497:34;20492:2;20477:18;;20470:62;-1:-1:-1;;;20563:2:1;20548:18;;20541:35;20608:3;20593:19;;20217:401::o;20623:399::-;20825:2;20807:21;;;20864:2;20844:18;;;20837:30;20903:34;20898:2;20883:18;;20876:62;-1:-1:-1;;;20969:2:1;20954:18;;20947:33;21012:3;20997:19;;20623:399::o;23612:125::-;23652:4;23680:1;23677;23674:8;23671:34;;;23685:18;;:::i;:::-;-1:-1:-1;23722:9:1;;23612:125::o;24570:251::-;24640:6;24693:2;24681:9;24672:7;24668:23;24664:32;24661:52;;;24709:1;24706;24699:12;24661:52;24741:9;24735:16;24760:31;24785:5;24760:31;:::i;24826:980::-;25088:4;25136:3;25125:9;25121:19;25167:6;25156:9;25149:25;25193:2;25231:6;25226:2;25215:9;25211:18;25204:34;25274:3;25269:2;25258:9;25254:18;25247:31;25298:6;25333;25327:13;25364:6;25356;25349:22;25402:3;25391:9;25387:19;25380:26;;25441:2;25433:6;25429:15;25415:29;;25462:1;25472:195;25486:6;25483:1;25480:13;25472:195;;;25551:13;;-1:-1:-1;;;;;25547:39:1;25535:52;;25642:15;;;;25607:12;;;;25583:1;25501:9;25472:195;;;-1:-1:-1;;;;;;;25723:32:1;;;;25718:2;25703:18;;25696:60;-1:-1:-1;;;25787:3:1;25772:19;25765:35;25684:3;24826:980;-1:-1:-1;;;24826:980:1:o;26423:306::-;26511:6;26519;26527;26580:2;26568:9;26559:7;26555:23;26551:32;26548:52;;;26596:1;26593;26586:12;26548:52;26625:9;26619:16;26609:26;;26675:2;26664:9;26660:18;26654:25;26644:35;;26719:2;26708:9;26704:18;26698:25;26688:35;;26423:306;;;;;:::o

Swarm Source

ipfs://40280e201a99e378b166824029c081f484f8ad82f5528b3aff448f1a9fafa713

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.