ETH Price: $2,443.30 (+1.37%)

Contract

0x69d77cff3D3c8222D1F23CA476700dC42fBe8373
 

Overview

ETH Balance

1 wei

Eth Value

Less Than $0.01 (@ $2,443.30/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve187991252023-12-16 14:09:35295 days ago1702735775IN
0x69d77cff...42fBe8373
0 ETH0.001678768.90121004
Approve182522352023-10-01 0:54:23371 days ago1696121663IN
0x69d77cff...42fBe8373
0 ETH0.000171127.02378919
Approve175367152023-06-22 17:42:59472 days ago1687455779IN
0x69d77cff...42fBe8373
0 ETH0.0003952516.22296739
Approve167603172023-03-05 6:06:47581 days ago1677996407IN
0x69d77cff...42fBe8373
0 ETH0.0004799919.70101729
Approve166679132023-02-20 6:14:59594 days ago1676873699IN
0x69d77cff...42fBe8373
0 ETH0.000661827.16314694
Approve165126902023-01-29 13:11:11616 days ago1674997871IN
0x69d77cff...42fBe8373
0 ETH0.0005597122.97296456
Approve164545432023-01-21 10:21:23624 days ago1674296483IN
0x69d77cff...42fBe8373
0 ETH0.0004121516.91669142
Approve164515372023-01-21 0:15:59624 days ago1674260159IN
0x69d77cff...42fBe8373
0 ETH0.0006286825.80379291
Approve164421252023-01-19 16:44:23626 days ago1674146663IN
0x69d77cff...42fBe8373
0 ETH0.001662635.68738181
Transfer164421212023-01-19 16:43:35626 days ago1674146615IN
0x69d77cff...42fBe8373
0 ETH0.0021958129.43378786
Approve164421042023-01-19 16:40:11626 days ago1674146411IN
0x69d77cff...42fBe8373
0 ETH0.0009627620.66558093
Approve163631702023-01-08 16:09:59637 days ago1673194199IN
0x69d77cff...42fBe8373
0 ETH0.0004829619.82293892
Approve163599062023-01-08 5:13:11637 days ago1673154791IN
0x69d77cff...42fBe8373
0 ETH0.0006590914.12907454
Approve163478252023-01-06 12:44:47639 days ago1673009087IN
0x69d77cff...42fBe8373
0 ETH0.0007108915.23953757
Approve163470662023-01-06 10:12:11639 days ago1672999931IN
0x69d77cff...42fBe8373
0 ETH0.0007363415.78513598
Transfer163436232023-01-05 22:39:11639 days ago1672958351IN
0x69d77cff...42fBe8373
0 ETH0.0021448628.75080008
Approve163436182023-01-05 22:38:11639 days ago1672958291IN
0x69d77cff...42fBe8373
0 ETH0.0014200930.44270552
Approve163436132023-01-05 22:37:11639 days ago1672958231IN
0x69d77cff...42fBe8373
0 ETH0.0014086430.19727752
Approve163436062023-01-05 22:35:47639 days ago1672958147IN
0x69d77cff...42fBe8373
0 ETH0.0014978432.10949236
Approve163427342023-01-05 19:39:35639 days ago1672947575IN
0x69d77cff...42fBe8373
0 ETH0.0011973625.66803017
Approve163348942023-01-04 17:23:47641 days ago1672853027IN
0x69d77cff...42fBe8373
0 ETH0.0011666625.00994056
Approve163302242023-01-04 1:45:23641 days ago1672796723IN
0x69d77cff...42fBe8373
0 ETH0.0007092815.20498179
Approve163217592023-01-02 21:25:11642 days ago1672694711IN
0x69d77cff...42fBe8373
0 ETH0.000918919.69871859
Approve163076812022-12-31 22:17:59644 days ago1672525079IN
0x69d77cff...42fBe8373
0 ETH0.0007408715.88220029
Approve163025542022-12-31 5:07:59645 days ago1672463279IN
0x69d77cff...42fBe8373
0 ETH0.0008342217.88336622
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
164421312023-01-19 16:45:35626 days ago1674146735
0x69d77cff...42fBe8373
0.00820912 ETH
164421312023-01-19 16:45:35626 days ago1674146735
0x69d77cff...42fBe8373
0.00820912 ETH
164421312023-01-19 16:45:35626 days ago1674146735
0x69d77cff...42fBe8373
0.00033506 ETH
164421312023-01-19 16:45:35626 days ago1674146735
0x69d77cff...42fBe8373
0.01675331 ETH
163478282023-01-06 12:45:23639 days ago1673009123
0x69d77cff...42fBe8373
0.00108776 ETH
163478282023-01-06 12:45:23639 days ago1673009123
0x69d77cff...42fBe8373
0.00108776 ETH
163478282023-01-06 12:45:23639 days ago1673009123
0x69d77cff...42fBe8373
0.00004439 ETH
163478282023-01-06 12:45:23639 days ago1673009123
0x69d77cff...42fBe8373
0.00221992 ETH
163436152023-01-05 22:37:35639 days ago1672958255
0x69d77cff...42fBe8373
0.00174809 ETH
163436152023-01-05 22:37:35639 days ago1672958255
0x69d77cff...42fBe8373
0.00174809 ETH
163436152023-01-05 22:37:35639 days ago1672958255
0x69d77cff...42fBe8373
0.00007135 ETH
163436152023-01-05 22:37:35639 days ago1672958255
0x69d77cff...42fBe8373
0.00356754 ETH
163348972023-01-04 17:24:23641 days ago1672853063
0x69d77cff...42fBe8373
0.00251966 ETH
163348972023-01-04 17:24:23641 days ago1672853063
0x69d77cff...42fBe8373
0.00251966 ETH
163348972023-01-04 17:24:23641 days ago1672853063
0x69d77cff...42fBe8373
0.00010284 ETH
163348972023-01-04 17:24:23641 days ago1672853063
0x69d77cff...42fBe8373
0.00514217 ETH
163230092023-01-03 1:36:11642 days ago1672709771
0x69d77cff...42fBe8373
0.00216962 ETH
163230092023-01-03 1:36:11642 days ago1672709771
0x69d77cff...42fBe8373
0.00216962 ETH
163230092023-01-03 1:36:11642 days ago1672709771
0x69d77cff...42fBe8373
0.00008855 ETH
163230092023-01-03 1:36:11642 days ago1672709771
0x69d77cff...42fBe8373
0.0044278 ETH
162725202022-12-27 0:31:11649 days ago1672101071
0x69d77cff...42fBe8373
0.00251557 ETH
162725202022-12-27 0:31:11649 days ago1672101071
0x69d77cff...42fBe8373
0.00251557 ETH
162725202022-12-27 0:31:11649 days ago1672101071
0x69d77cff...42fBe8373
0.00010267 ETH
162725202022-12-27 0:31:11649 days ago1672101071
0x69d77cff...42fBe8373
0.00513382 ETH
162415642022-12-22 16:53:35654 days ago1671728015
0x69d77cff...42fBe8373
0.00379136 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StandardERC20

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-20
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity 0.8.15;

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

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

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

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function factory() external view returns (address);
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract StandardERC20 is Context, IERC20 {
    // Ownership moved to in-contract for customizability.
    address public _owner;

    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public isExcludedFromMaxWalletRestrictions;
    mapping (address => bool) private _isblacklisted;
    mapping (address => uint256) private _transferDelay;
    mapping (address => bool) private _holderDelay;


    bool private sameBlockActive = false;
    mapping (address => uint256) private lastTrade;   

    bool private isInitialized = false;
    
    mapping (address => uint256) firstBuy;
    
    uint256 private startingSupply;

    string private _name;
    string private _symbol;
//==========================
    // FEES
    struct taxes {
    uint buyFee;
    uint sellFee;
    uint transferFee;
    }

    taxes public Fees = taxes(
    {buyFee: 300, sellFee: 5000, transferFee: 0});
//==========================
    // Max Limits

    struct MaxLimits {
    uint maxBuy;
    uint maxSell;
    uint maxTransfer;
    }

    MaxLimits public maxFees = MaxLimits(
    {maxBuy: 8000, maxSell: 8000, maxTransfer: 1500});
//==========================    
    //Proportions of Taxes
    struct feeProportions {
    uint liquidity;
    uint developer;
    uint team;
    }

    feeProportions public Ratios = feeProportions(
    { liquidity: 4, developer: 48, team: 48});

    uint256 private constant masterTaxDivisor = 10000;
    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
 
    uint256 private _tTotal = startingSupply * 10**_decimals;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;


    address constant private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD; // Receives tokens, deflates supply, increases price floor.
    
    address public _devWallet;
    address public _teamWallet;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private maxTxPercent;
    uint256 private maxTxDivisor;
    uint256 private _maxTxAmount;
    uint256 private _liqAddedBlock;
    
    uint256 private maxWalletPercent;
    uint256 private maxWalletDivisor;
    uint256 private _maxWalletSize;

    uint256 private swapThreshold;
    uint256 private swapAmount;

    bool public _hasLiqBeenAdded = false;
    
    uint256 private _liqAddStatus = 0;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private _initialLiquidityAmount = 0; // make constant

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender() || _devWallet == _msgSender(), "Caller != owner.");
        _;
    }
    
    constructor () {
        _owner = msg.sender;
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and recnouncements.
    // This allows for removal of ownership privelages from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

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

    function renounceOwnership() public virtual onlyOwner() {
        setExcludedFromFees(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
    
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

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

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

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

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

    function approveMax(address spender) public returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function getFirstBuy(address account) public view returns (uint256) {
        return firstBuy[account];
    }

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

        return _transfer(sender, recipient, amount);
    }

    function 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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

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

    function openTrade() external onlyOwner {
        _liqAddStatus = 1;
    }
    
    function oneShotLaunch(string memory initName, string memory initSymbol, uint256 initSupply, address _devWall, address _teamWall, address[] memory presales, uint256[] memory tokenamount) external onlyOwner payable {
        require(!isInitialized, "can only run this once");
        require(presales.length == tokenamount.length, "arrays must be the same length");
        require(presales.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
 
        require(_liqAddStatus == 0);
   
        _name = initName;
        _symbol = initSymbol;

        startingSupply = initSupply;
        _decimals = 18;
        _tTotal = startingSupply * 10**_decimals;

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;

        _devWallet = _devWall;
        _teamWallet = _teamWall;

        maxTxPercent = 100; // Max Transaction Amount: 100 = 1%
        maxTxDivisor = 10000;
        _maxTxAmount = (_tTotal * maxTxPercent) / maxTxDivisor;
        
        maxWalletPercent = 100; //Max Wallet 100: 1%
        maxWalletDivisor = 10000;
        _maxWalletSize = (_tTotal * maxWalletPercent) / maxWalletDivisor;
        
        swapThreshold = (_tTotal * 5) / 10_000;
        swapAmount = (_tTotal * 5) / 1_000;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[_devWallet] = true;
        _isExcludedFromFees[_teamWallet] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[owner()] = true;

        approve(_routerAddress, type(uint256).max);
        approve(owner(), type(uint256).max);

        isInitialized = true;
        _tOwned[owner()] = _tTotal;
        _approve(owner(), _routerAddress, _tTotal);
        emit Transfer(address(0), owner(), _tTotal);
 
        _approve(_owner, address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);


        for(uint256 i = 0; i < presales.length; i++){
            address presale = presales[i];
            uint256 amount = tokenamount[i]*1e18;
            _transfer(_owner, presale, amount);
        }

        _transfer(_owner, address(this), balanceOf(_owner));

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
        _liqAddStatus = 1;
        _liqAddedBlock = block.number;
        isInitialized = true;
    }

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

    function excludeFromWalletRestrictions(address excludedAddress) public onlyOwner{
        isExcludedFromMaxWalletRestrictions[excludedAddress] = true;
    }

    function revokeExcludedFromWalletRestrictions(address excludedAddress) public onlyOwner{
        isExcludedFromMaxWalletRestrictions[excludedAddress] = false;
    }
    
    function setRatios(uint _liquidity, uint _developer, uint _team) external onlyOwner {
        require ( (_liquidity+_developer+_team) == 100, "ratios must equal 100");
        Ratios.liquidity = _liquidity;
        Ratios.developer = _developer;
        Ratios.team = _team;
        }

    function setTaxes(uint _buyFee, uint _sellFee, uint _transferFee) external onlyOwner {
        require(_buyFee <= maxFees.maxBuy
                && _sellFee <= maxFees.maxSell
                && _transferFee <= maxFees.maxTransfer,
                "Cannot exceed maximums.");
         Fees.buyFee = _buyFee;
         Fees.sellFee = _sellFee;
         Fees.transferFee = _transferFee;

    }

    function removeLimits() external onlyOwner {
        _maxTxAmount = _tTotal;
        _maxWalletSize = _tTotal;
    }

    function setMaxTxPercent(uint percent, uint divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 300), "Must be above 0.33~% of total supply.");
        _maxTxAmount = check;
    }

    function setMaxWalletSize(uint percent, uint divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 300), "Must be above 0.33~% of total supply.");
        _maxWalletSize = check;

    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

    function setWallets(address payable developerWallet, address payable teamWallet) external onlyOwner {
        _devWallet = payable(developerWallet);
        _teamWallet = payable(teamWallet);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
     
    function setBlacklist(address[] memory blacklisted_, bool status_) public onlyOwner {
        for (uint i = 0; i < blacklisted_.length; i++) {
            if (!lpPairs[blacklisted_[i]] && blacklisted_[i] != address(_routerAddress)) {
                _isblacklisted[blacklisted_[i]] = status_;
            }
        }
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function transferDelay(address from, address to, address orig) internal returns (bool) {
       bool oktoswap = true;
      if (lpPair == from) {  _transferDelay[to] = block.number;  _transferDelay[orig] = block.number;}
      else if (lpPair == to) {
             if (_transferDelay[from] >= block.number) { _holderDelay[from] = true; oktoswap = false;}
                 if (_holderDelay[from]) { oktoswap = false; }
                else if (lpPair != to && lpPair != from) { _transferDelay[from] = block.number; _transferDelay[to] = block.number; _transferDelay[orig] = block.number;}
            }
           return (oktoswap);
    }
    

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: Zero address.");
        require(to != address(0), "ERC20: Zero address.");
        require(amount > 0, "Must >0.");
        require(!_isblacklisted[to] && !_isblacklisted[from],"unable to trade");
        if (_liqAddedBlock > block.number - 50) {
            bool oktoswap;
            address orig = tx.origin;
            oktoswap = transferDelay(from,to,orig);
            require(oktoswap, "transfer delay enabled");
        }
        if(_hasLimits(from, to)) {
            if (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                    } 
                else {
                    require(lastTrade[from] != block.number);
                    lastTrade[from] = block.number;
                    }
            }
            if(!(isExcludedFromMaxWalletRestrictions[from] || isExcludedFromMaxWalletRestrictions[to])) {
                if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Exceeds the maxTxAmount.");
                }
                if(to != _routerAddress && !lpPairs[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
                }

            }
            
        }

        if (_tOwned[to] == 0) {
            firstBuy[to] = block.timestamp;
        }

        bool takeFee = true;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        if (lpPairs[to]) {
            if (!inSwapAndLiquify
                && swapAndLiquifyEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    swapAndLiquify(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        if (Ratios.liquidity + Ratios.developer == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * Ratios.liquidity) / (Ratios.liquidity + Ratios.developer + Ratios.team) ) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;
        swapTokensForEth(toSwapForEth);

        uint256 currentBalance = address(this).balance;
        uint256 liquidityBalance = ((currentBalance * Ratios.liquidity) / (Ratios.liquidity + Ratios.developer + Ratios.team) ) / 2;


        if (toLiquify > 0) {
            addLiquidity(toLiquify, liquidityBalance);
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        
        currentBalance = address(this).balance;
        if (currentBalance > 0) {
            uint256 devETH = (currentBalance * Ratios.developer) / (Ratios.developer + Ratios.team);
            uint256 teamETH = (currentBalance * Ratios.team) / (Ratios.developer + Ratios.team);
    
            bool success = true;
            (success,) = address(_devWallet).call{value: devETH}("");
            (success,) = address(_teamWallet).call{value: teamETH}("");
        }
    }

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
                _liqAddBlock = block.number;

            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    function airdropPresale(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i]*1e18;
            _transfer(msg.sender, wallet, amount);
        }
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee) private returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        } 
        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, to, amount) : amount; //A
        _tOwned[to] += amountReceived;

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee;

        if (to == lpPair) {
            currentFee=Fees.sellFee;
            } 

        else if (from == lpPair) {currentFee = Fees.buyFee;} 

        else {currentFee = Fees.transferFee;}

        if (_hasLimits(from, to)){
            if (_liqAddStatus == 0 || _liqAddStatus != (1)) {
                revert();
            }
        }
        uint256 feeAmount = (amount * currentFee / masterTaxDivisor);
        _tOwned[address(this)] += (feeAmount);
        emit Transfer(from, address(this), feeAmount);
        return amount - feeAmount;
    }
}

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":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Fees","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"transferFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Ratios","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"developer","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"excludedAddress","type":"address"}],"name":"excludeFromWalletRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getFirstBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxWalletRestrictions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFees","outputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"},{"internalType":"uint256","name":"maxTransfer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"initName","type":"string"},{"internalType":"string","name":"initSymbol","type":"string"},{"internalType":"uint256","name":"initSupply","type":"uint256"},{"internalType":"address","name":"_devWall","type":"address"},{"internalType":"address","name":"_teamWall","type":"address"},{"internalType":"address[]","name":"presales","type":"address[]"},{"internalType":"uint256[]","name":"tokenamount","type":"uint256[]"}],"name":"oneShotLaunch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"excludedAddress","type":"address"}],"name":"revokeExcludedFromWalletRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"blacklisted_","type":"address[]"},{"internalType":"bool","name":"status_","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_developer","type":"uint256"},{"internalType":"uint256","name":"_team","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"developerWallet","type":"address"},{"internalType":"address payable","name":"teamWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60006003819055600b805460ff19908116909155600d8054909116905561012c608081905261138860a081905260c0839052601291909155601355601455611f4060e08190526101008190526105dc61012081905260158290556016919091556017556101a0604052600461014081905260306101608190526101808190526018919091556019819055601a55601b546200009f9060ff16600a62000217565b600f54620000ae91906200022f565b601c556021805460ff60a81b19169055602b805460ff191690556000602c819055602d819055602e819055602f55348015620000e957600080fd5b50600080546001600160a01b0319163317905562000251565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620001595781600019048211156200013d576200013d62000102565b808516156200014b57918102915b93841c93908002906200011d565b509250929050565b600082620001725750600162000211565b81620001815750600062000211565b81600181146200019a5760028114620001a557620001c5565b600191505062000211565b60ff841115620001b957620001b962000102565b50506001821b62000211565b5060208310610133831016604e8410600b8410161715620001ea575081810a62000211565b620001f6838362000118565b80600019048211156200020d576200020d62000102565b0290505b92915050565b60006200022860ff84168362000161565b9392505050565b60008160001904831182151516156200024c576200024c62000102565b500290565b61365880620002616000396000f3fe6080604052600436106102765760003560e01c806370a082311161014f578063b2bdfa7b116100c1578063d3f6a1571161007a578063d3f6a1571461078d578063dd62ed3e146107ad578063e83e34b1146107f3578063e9dae5ed14610812578063fb201b1d14610832578063fb78680d1461084757600080fd5b8063b2bdfa7b146106ce578063b5f7bfa2146106ee578063bc1323e81461070d578063c49b9a801461072d578063cdfdb7dc1461074d578063ce8b79c91461076d57600080fd5b80638da5cb5b116101135780638da5cb5b146105e257806395d89b4114610630578063a13ce2c614610645578063a457c2d71461067b578063a702bb001461069b578063a9059cbb146106ae57600080fd5b806370a0823114610598578063715018a6146105b8578063751039fc146105cd578063893d20e8146105e25780638c7321ad1461060057600080fd5b806337e294d5116101e85780634a74bb02116101ac5780634a74bb02146104c45780634fb2e45d146104e55780634fbee1931461050557806350a8e0161461053e578063571ac8b014610558578063590ffdce1461057857600080fd5b806337e294d51461040a578063395093511461042a5780633aaa36e61461044a5780633f3cf56c14610484578063452ed4f1146104a457600080fd5b806311a63e171161023a57806311a63e171461034957806318160ddd1461036957806323b872dd1461038857806326003957146103a857806330b91e57146103c8578063313ce567146103e857600080fd5b806303fd2a451461028257806306fdde03146102b55780630758d924146102d7578063095ea7b3146102f75780630e85d1e31461032757600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b5061029861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102c157600080fd5b506102ca610867565b6040516102ac9190612bd6565b3480156102e357600080fd5b50601e54610298906001600160a01b031681565b34801561030357600080fd5b50610317610312366004612c53565b6108f9565b60405190151581526020016102ac565b34801561033357600080fd5b50610347610342366004612d6e565b610910565b005b34801561035557600080fd5b50602054610298906001600160a01b031681565b34801561037557600080fd5b50601c545b6040519081526020016102ac565b34801561039457600080fd5b506103176103a3366004612dbc565b610a60565b3480156103b457600080fd5b506103476103c3366004612dfd565b610ad8565b3480156103d457600080fd5b506103476103e3366004612e7a565b610b6a565b3480156103f457600080fd5b50601b5460405160ff90911681526020016102ac565b34801561041657600080fd5b50602154610298906001600160a01b031681565b34801561043657600080fd5b50610317610445366004612c53565b610c97565b34801561045657600080fd5b5060125460135460145461046992919083565b604080519384526020840192909252908201526060016102ac565b34801561049057600080fd5b5061034761049f366004612dfd565b610cd3565b3480156104b057600080fd5b50601f54610298906001600160a01b031681565b3480156104d057600080fd5b5060215461031790600160a81b900460ff1681565b3480156104f157600080fd5b50610347610500366004612ede565b610d65565b34801561051157600080fd5b50610317610520366004612ede565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561054a57600080fd5b50602b546103179060ff1681565b34801561056457600080fd5b50610317610573366004612ede565b610f0d565b34801561058457600080fd5b50610347610593366004612efb565b610f1b565b3480156105a457600080fd5b5061037a6105b3366004612ede565b610f85565b3480156105c457600080fd5b50610347610fa0565b3480156105d957600080fd5b50610347611034565b3480156105ee57600080fd5b506000546001600160a01b0316610298565b34801561060c57600080fd5b5061031761061b366004612ede565b60076020526000908152604090205460ff1681565b34801561063c57600080fd5b506102ca611080565b34801561065157600080fd5b5061037a610660366004612ede565b6001600160a01b03166000908152600e602052604090205490565b34801561068757600080fd5b50610317610696366004612c53565b61108f565b6103476106a9366004612f97565b6110c6565b3480156106ba57600080fd5b506103176106c9366004612c53565b611830565b3480156106da57600080fd5b50600054610298906001600160a01b031681565b3480156106fa57600080fd5b50601854601954601a5461046992919083565b34801561071957600080fd5b50610347610728366004612ede565b611847565b34801561073957600080fd5b5061034761074836600461306f565b6118a7565b34801561075957600080fd5b5061034761076836600461308a565b61193e565b34801561077957600080fd5b50610347610788366004612ede565b6119e7565b34801561079957600080fd5b506103476107a83660046130b6565b611a4a565b3480156107b957600080fd5b5061037a6107c83660046130b6565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156107ff57600080fd5b5060155460165460175461046992919083565b34801561081e57600080fd5b5061034761082d36600461308a565b611ab7565b34801561083e57600080fd5b50610347611b72565b34801561085357600080fd5b506103476108623660046130ef565b611bb8565b60606010805461087690613121565b80601f01602080910402602001604051908101604052809291908181526020018280546108a290613121565b80156108ef5780601f106108c4576101008083540402835291602001916108ef565b820191906000526020600020905b8154815290600101906020018083116108d257829003601f168201915b5050505050905090565b6000610906338484611c36565b5060015b92915050565b6000546001600160a01b031633148061093357506020546001600160a01b031633145b6109585760405162461bcd60e51b815260040161094f9061315b565b60405180910390fd5b60005b8251811015610a5b576002600084838151811061097a5761097a613185565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161580156109ed5750737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03168382815181106109d9576109d9613185565b60200260200101516001600160a01b031614155b15610a49578160086000858481518110610a0957610a09613185565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80610a53816131b1565b91505061095b565b505050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610ac5576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610abf9084906131ca565b90915550505b610ad0848484611d2f565b949350505050565b6000546001600160a01b0316331480610afb57506020546001600160a01b031633145b610b175760405162461bcd60e51b815260040161094f9061315b565b60008183601c54610b2891906131e1565b610b329190613200565b905061012c601c54610b449190613200565b811015610b635760405162461bcd60e51b815260040161094f90613222565b6028555050565b6000546001600160a01b0316331480610b8d57506020546001600160a01b031633145b610ba95760405162461bcd60e51b815260040161094f9061315b565b8051825114610bfa5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e6774680000604482015260640161094f565b60c8825110610c1b5760405162461bcd60e51b815260040161094f90613267565b60005b8251811015610a5b576000838281518110610c3b57610c3b613185565b602002602001015190506000838381518110610c5957610c59613185565b6020026020010151670de0b6b3a7640000610c7491906131e1565b9050610c81338383611d2f565b5050508080610c8f906131b1565b915050610c1e565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610906918590610cce9086906132bd565b611c36565b6000546001600160a01b0316331480610cf657506020546001600160a01b031633145b610d125760405162461bcd60e51b815260040161094f9061315b565b60008183601c54610d2391906131e1565b610d2d9190613200565b905061012c601c54610d3f9190613200565b811015610d5e5760405162461bcd60e51b815260040161094f90613222565b6024555050565b6000546001600160a01b0316331480610d8857506020546001600160a01b031633145b610da45760405162461bcd60e51b815260040161094f9061315b565b6001600160a01b038116610dca5760405162461bcd60e51b815260040161094f906132d5565b61deac196001600160a01b03821601610df55760405162461bcd60e51b815260040161094f906132d5565b60008054610e0e916001600160a01b0390911690610f1b565b610e19816001610f1b565b6000546020546001600160a01b03918216911603610e4d57602080546001600160a01b0319166001600160a01b0383161790555b600054610e62906001600160a01b0316610f85565b600080546001600160a01b039081168252600460209081526040808420868416855290915282209290925580549091610e9b9116610f85565b1115610ec257600054610ec0906001600160a01b031682610ebb82610f85565b611d2f565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600061090a826000196108f9565b6000546001600160a01b0316331480610f3e57506020546001600160a01b031633145b610f5a5760405162461bcd60e51b815260040161094f9061315b565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b0316331480610fc357506020546001600160a01b031633145b610fdf5760405162461bcd60e51b815260040161094f9061315b565b60008054610ff8916001600160a01b0390911690610f1b565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633148061105757506020546001600160a01b031633145b6110735760405162461bcd60e51b815260040161094f9061315b565b601c546024819055602855565b60606011805461087690613121565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610906918590610cce9086906131ca565b6000546001600160a01b03163314806110e957506020546001600160a01b031633145b6111055760405162461bcd60e51b815260040161094f9061315b565b600d5460ff16156111515760405162461bcd60e51b815260206004820152601660248201527563616e206f6e6c792072756e2074686973206f6e636560501b604482015260640161094f565b80518251146111a25760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e6774680000604482015260640161094f565b60c88251106111c35760405162461bcd60e51b815260040161094f90613267565b602c54156111d057600080fd5b60106111dc8882613378565b5060116111e98782613378565b50600f859055601b805460ff1916601290811790915561120a90600a61351c565b600f5461121791906131e1565b601c55601e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561127e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a2919061352b565b6001600160a01b031663c9c65396601e60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611303573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611327919061352b565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611373573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611397919061352b565b601f80546001600160a01b03199081166001600160a01b039384169081179092556000918252600260209081526040808420805460ff1916600117905530845260048252808420601e548616855282529092206000199055815481168784161790915560218054909116918516919091179055606460228190556127106023819055601c549091611427916131e1565b6114319190613200565b602455606460268190556127106027819055601c549091611451916131e1565b61145b9190613200565b602855601c54612710906114709060056131e1565b61147a9190613200565b602955601c546103e89061148f9060056131e1565b6114999190613200565b602a556001600660006114b46000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055835482168152600690935281832080548516600190811790915560215490911683528183208054851682179055308352908220805484168217905561dead82527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805490931681179092556005906115626000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556115aa737a250d5630b4cf539739df2c5dacb4c659f2488d6000196108f9565b506115c86115c06000546001600160a01b031690565b6000196108f9565b50600d805460ff19166001908117909155601c549060006115f16000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205561163d6116206000546001600160a01b031690565b737a250d5630b4cf539739df2c5dacb4c659f2488d601c54611c36565b6000546001600160a01b03166001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601c5460405161169091815260200190565b60405180910390a3600054601e546116b7916001600160a01b039081169116600019611c36565b601e546116d19030906001600160a01b0316600019611c36565b60005b825181101561175a5760008382815181106116f1576116f1613185565b60200260200101519050600083838151811061170f5761170f613185565b6020026020010151670de0b6b3a764000061172a91906131e1565b600054909150611744906001600160a01b03168383611d2f565b5050508080611752906131b1565b9150506116d4565b50600054611775906001600160a01b031630610ebb82610f85565b50601e546001600160a01b031663f305d719473061179281610f85565b6000806117a76000546001600160a01b031690565b426040518863ffffffff1660e01b81526004016117c996959493929190613548565b60606040518083038185885af11580156117e7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061180c9190613583565b50506001602c81905543602555600d805460ff191690911790555050505050505050565b600061183d338484611d2f565b5060019392505050565b6000546001600160a01b031633148061186a57506020546001600160a01b031633145b6118865760405162461bcd60e51b815260040161094f9061315b565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314806118ca57506020546001600160a01b031633145b6118e65760405162461bcd60e51b815260040161094f9061315b565b60218054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061193390831515815260200190565b60405180910390a150565b6000546001600160a01b031633148061196157506020546001600160a01b031633145b61197d5760405162461bcd60e51b815260040161094f9061315b565b8061198883856132bd565b61199291906132bd565b6064146119d95760405162461bcd60e51b81526020600482015260156024820152740726174696f73206d75737420657175616c2031303605c1b604482015260640161094f565b601892909255601955601a55565b6000546001600160a01b0316331480611a0a57506020546001600160a01b031633145b611a265760405162461bcd60e51b815260040161094f9061315b565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b0316331480611a6d57506020546001600160a01b031633145b611a895760405162461bcd60e51b815260040161094f9061315b565b602080546001600160a01b039384166001600160a01b03199182161790915560218054929093169116179055565b6000546001600160a01b0316331480611ada57506020546001600160a01b031633145b611af65760405162461bcd60e51b815260040161094f9061315b565b6015548311801590611b0a57506016548211155b8015611b1857506017548111155b611b645760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e000000000000000000604482015260640161094f565b601292909255601355601455565b6000546001600160a01b0316331480611b9557506020546001600160a01b031633145b611bb15760405162461bcd60e51b815260040161094f9061315b565b6001602c55565b6000546001600160a01b0316331480611bdb57506020546001600160a01b031633145b611bf75760405162461bcd60e51b815260040161094f9061315b565b8284601c54611c0691906131e1565b611c109190613200565b602955601c548190611c239084906131e1565b611c2d9190613200565b602a5550505050565b6001600160a01b038316611c825760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640161094f565b6001600160a01b038216611cce5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640161094f565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611d7e5760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b604482015260640161094f565b6001600160a01b038316611dcb5760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b604482015260640161094f565b60008211611e065760405162461bcd60e51b815260206004820152600860248201526726bab9ba101f181760c11b604482015260640161094f565b6001600160a01b03831660009081526008602052604090205460ff16158015611e4857506001600160a01b03841660009081526008602052604090205460ff16155b611e865760405162461bcd60e51b815260206004820152600f60248201526e756e61626c6520746f20747261646560881b604482015260640161094f565b611e916032436131ca565b6025541115611ef357600032611ea8868683612250565b915081611ef05760405162461bcd60e51b81526020600482015260166024820152751d1c985b9cd9995c8819195b185e48195b98589b195960521b604482015260640161094f565b50505b611efd8484612384565b1561213d57600b5460ff1615611fb4576001600160a01b03841660009081526002602052604090205460ff1615611f73576001600160a01b0383166000908152600c6020526040902054439003611f5357600080fd5b6001600160a01b0383166000908152600c60205260409020439055611fb4565b6001600160a01b0384166000908152600c6020526040902054439003611f9857600080fd5b6001600160a01b0384166000908152600c602052604090204390555b6001600160a01b03841660009081526007602052604090205460ff1680611ff357506001600160a01b03831660009081526007602052604090205460ff165b61213d576001600160a01b03841660009081526002602052604090205460ff168061203657506001600160a01b03831660009081526002602052604090205460ff165b1561208d5760245482111561208d5760405162461bcd60e51b815260206004820152601860248201527f4578636565647320746865206d61785478416d6f756e742e0000000000000000604482015260640161094f565b6001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d148015906120d357506001600160a01b03831660009081526002602052604090205460ff16155b1561213d57602854826120e585610f85565b6120ef91906132bd565b111561213d5760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e000000000000604482015260640161094f565b6001600160a01b0383166000908152600160205260408120549003612178576001600160a01b0383166000908152600e602052604090204290555b6001600160a01b03841660009081526006602052604090205460019060ff16806121ba57506001600160a01b03841660009081526006602052604090205460ff165b156121c3575060005b6001600160a01b03841660009081526002602052604090205460ff161561223b57602154600160a01b900460ff161580156122075750602154600160a81b900460ff165b1561223b57600061221730610f85565b9050602954811061223957602a5481106122305750602a545b61223981612442565b505b6122478585858461268b565b95945050505050565b601f546000906001906001600160a01b03808716911603612297576001600160a01b0380851660009081526009602052604080822043908190559286168252902055610ad0565b601f546001600160a01b03808616911603610ad0576001600160a01b03851660009081526009602052604090205443116122f057506001600160a01b0384166000908152600a60205260408120805460ff191660011790555b6001600160a01b0385166000908152600a602052604090205460ff161561231957506000610ad0565b601f546001600160a01b038581169116148015906123455750601f546001600160a01b03868116911614155b15610ad0576001600160a01b03808616600090815260096020526040808220439081905587841683528183208190559286168252902055949350505050565b600080546001600160a01b038481169116148015906123b157506000546001600160a01b03838116911614155b80156123d657506001600160a01b03821660009081526005602052604090205460ff16155b80156123fb57506001600160a01b03831660009081526005602052604090205460ff16155b801561241257506001600160a01b03821661dead14155b801561242657506001600160a01b03821615155b801561243b57506001600160a01b0383163014155b9392505050565b6021805460ff60a01b1916600160a01b17905560195460185461246591906132bd565b1561267b57601a54601954601854600092600292909161248591906132bd565b61248f91906132bd565b60185461249c90856131e1565b6124a69190613200565b6124b09190613200565b905060006124be82846131ca565b90506124c9816127e8565b601a5460195460185447926000926002926124e491906132bd565b6124ee91906132bd565b6018546124fb90856131e1565b6125059190613200565b61250f9190613200565b90508315612563576125218482612929565b60408051858152602081018390529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b479150811561267657601a5460195460009161257e916132bd565b60195461258b90856131e1565b6125959190613200565b601a546019549192506000916125ab91906132bd565b601a546125b890866131e1565b6125c29190613200565b6020546040519192506001916001600160a01b03909116908490600081818185875af1925050503d8060008114612615576040519150601f19603f3d011682016040523d82523d6000602084013e61261a565b606091505b50506021546040519192506001600160a01b0316908390600081818185875af1925050503d806000811461266a576040519150601f19603f3d011682016040523d82523d6000602084013e61266f565b606091505b5050505050505b505050505b506021805460ff60a01b19169055565b602b5460009060ff16612715576126a285856129be565b602b5460ff161580156126ba57506126ba8585612384565b156127155760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b606482015260840161094f565b6001600160a01b0385166000908152600160205260408120805485929061273d9084906131ca565b909155506000905082612750578361275b565b61275b868686612acd565b6001600160a01b0386166000908152600160205260408120805492935083929091906127889084906132bd565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127d491815260200190565b60405180910390a350600195945050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061281d5761281d613185565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289a919061352b565b816001815181106128ad576128ad613185565b6001600160a01b039283166020918202929092010152601e5460405163791ac94760e01b815291169063791ac947906128f39085906000908690309042906004016135b1565b600060405180830381600087803b15801561290d57600080fd5b505af1158015612921573d6000803e3d6000fd5b505050505050565b601e546001600160a01b031663f305d7198230856000806129526000546001600160a01b031690565b426040518863ffffffff1660e01b815260040161297496959493929190613548565b60606040518083038185885af1158015612992573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129b79190613583565b5050505050565b602b5460ff1615612a1d5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b606482015260840161094f565b612a278282612384565b158015612a415750601f546001600160a01b038281169116145b15612ac95743602d556001600160a01b038216600090815260056020908152604091829020805460ff199081166001908117909255602b80549091168217905542602e556021805460ff60a81b1916600160a81b17905591519182527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159910160405180910390a15b5050565b601f5460009081906001600160a01b0390811690851603612af15750601354612b15565b601f546001600160a01b0390811690861603612b105750601254612b15565b506014545b612b1f8585612384565b15612b4057602c541580612b365750602c54600114155b15612b4057600080fd5b6000612710612b4f83866131e1565b612b599190613200565b30600090815260016020526040812080549293508392909190612b7d9084906132bd565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3612bcc81856131ca565b9695505050505050565b600060208083528351808285015260005b81811015612c0357858101830151858201604001528201612be7565b81811115612c15576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612c4057600080fd5b50565b8035612c4e81612c2b565b919050565b60008060408385031215612c6657600080fd5b8235612c7181612c2b565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612cbe57612cbe612c7f565b604052919050565b600067ffffffffffffffff821115612ce057612ce0612c7f565b5060051b60200190565b600082601f830112612cfb57600080fd5b81356020612d10612d0b83612cc6565b612c95565b82815260059290921b84018101918181019086841115612d2f57600080fd5b8286015b84811015612d53578035612d4681612c2b565b8352918301918301612d33565b509695505050505050565b80358015158114612c4e57600080fd5b60008060408385031215612d8157600080fd5b823567ffffffffffffffff811115612d9857600080fd5b612da485828601612cea565b925050612db360208401612d5e565b90509250929050565b600080600060608486031215612dd157600080fd5b8335612ddc81612c2b565b92506020840135612dec81612c2b565b929592945050506040919091013590565b60008060408385031215612e1057600080fd5b50508035926020909101359150565b600082601f830112612e3057600080fd5b81356020612e40612d0b83612cc6565b82815260059290921b84018101918181019086841115612e5f57600080fd5b8286015b84811015612d535780358352918301918301612e63565b60008060408385031215612e8d57600080fd5b823567ffffffffffffffff80821115612ea557600080fd5b612eb186838701612cea565b93506020850135915080821115612ec757600080fd5b50612ed485828601612e1f565b9150509250929050565b600060208284031215612ef057600080fd5b813561243b81612c2b565b60008060408385031215612f0e57600080fd5b8235612f1981612c2b565b9150612db360208401612d5e565b600082601f830112612f3857600080fd5b813567ffffffffffffffff811115612f5257612f52612c7f565b612f65601f8201601f1916602001612c95565b818152846020838601011115612f7a57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060e0888a031215612fb257600080fd5b873567ffffffffffffffff80821115612fca57600080fd5b612fd68b838c01612f27565b985060208a0135915080821115612fec57600080fd5b612ff88b838c01612f27565b975060408a0135965061300d60608b01612c43565b955061301b60808b01612c43565b945060a08a013591508082111561303157600080fd5b61303d8b838c01612cea565b935060c08a013591508082111561305357600080fd5b506130608a828b01612e1f565b91505092959891949750929550565b60006020828403121561308157600080fd5b61243b82612d5e565b60008060006060848603121561309f57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156130c957600080fd5b82356130d481612c2b565b915060208301356130e481612c2b565b809150509250929050565b6000806000806080858703121561310557600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061313557607f821691505b60208210810361315557634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f21b0b63632b910109e9037bbb732b91760811b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016131c3576131c361319b565b5060010190565b6000828210156131dc576131dc61319b565b500390565b60008160001904831182151516156131fb576131fb61319b565b500290565b60008261321d57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f4d7573742062652061626f766520302e33337e25206f6620746f74616c2073756040820152643838363c9760d91b606082015260800190565b60208082526036908201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726040820152752074786e2064756520746f20676173206c696d69747360501b606082015260800190565b600082198211156132d0576132d061319b565b500190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b601f821115610a5b57600081815260208120601f850160051c810160208610156133595750805b601f850160051c820191505b8181101561292157828155600101613365565b815167ffffffffffffffff81111561339257613392612c7f565b6133a6816133a08454613121565b84613332565b602080601f8311600181146133db57600084156133c35750858301515b600019600386901b1c1916600185901b178555612921565b600085815260208120601f198616915b8281101561340a578886015182559484019460019091019084016133eb565b50858210156134285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b808511156134735781600019048211156134595761345961319b565b8085161561346657918102915b93841c939080029061343d565b509250929050565b60008261348a5750600161090a565b816134975750600061090a565b81600181146134ad57600281146134b7576134d3565b600191505061090a565b60ff8411156134c8576134c861319b565b50506001821b61090a565b5060208310610133831016604e8410600b84101617156134f6575081810a61090a565b6135008383613438565b80600019048211156135145761351461319b565b029392505050565b600061243b60ff84168361347b565b60006020828403121561353d57600080fd5b815161243b81612c2b565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561359857600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136015784516001600160a01b0316835293830193918301916001016135dc565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220aa40598d4452ef20384b7bac1763c7334412c8dcfdf8b955b75027f8441b03ce64736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102765760003560e01c806370a082311161014f578063b2bdfa7b116100c1578063d3f6a1571161007a578063d3f6a1571461078d578063dd62ed3e146107ad578063e83e34b1146107f3578063e9dae5ed14610812578063fb201b1d14610832578063fb78680d1461084757600080fd5b8063b2bdfa7b146106ce578063b5f7bfa2146106ee578063bc1323e81461070d578063c49b9a801461072d578063cdfdb7dc1461074d578063ce8b79c91461076d57600080fd5b80638da5cb5b116101135780638da5cb5b146105e257806395d89b4114610630578063a13ce2c614610645578063a457c2d71461067b578063a702bb001461069b578063a9059cbb146106ae57600080fd5b806370a0823114610598578063715018a6146105b8578063751039fc146105cd578063893d20e8146105e25780638c7321ad1461060057600080fd5b806337e294d5116101e85780634a74bb02116101ac5780634a74bb02146104c45780634fb2e45d146104e55780634fbee1931461050557806350a8e0161461053e578063571ac8b014610558578063590ffdce1461057857600080fd5b806337e294d51461040a578063395093511461042a5780633aaa36e61461044a5780633f3cf56c14610484578063452ed4f1146104a457600080fd5b806311a63e171161023a57806311a63e171461034957806318160ddd1461036957806323b872dd1461038857806326003957146103a857806330b91e57146103c8578063313ce567146103e857600080fd5b806303fd2a451461028257806306fdde03146102b55780630758d924146102d7578063095ea7b3146102f75780630e85d1e31461032757600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b5061029861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102c157600080fd5b506102ca610867565b6040516102ac9190612bd6565b3480156102e357600080fd5b50601e54610298906001600160a01b031681565b34801561030357600080fd5b50610317610312366004612c53565b6108f9565b60405190151581526020016102ac565b34801561033357600080fd5b50610347610342366004612d6e565b610910565b005b34801561035557600080fd5b50602054610298906001600160a01b031681565b34801561037557600080fd5b50601c545b6040519081526020016102ac565b34801561039457600080fd5b506103176103a3366004612dbc565b610a60565b3480156103b457600080fd5b506103476103c3366004612dfd565b610ad8565b3480156103d457600080fd5b506103476103e3366004612e7a565b610b6a565b3480156103f457600080fd5b50601b5460405160ff90911681526020016102ac565b34801561041657600080fd5b50602154610298906001600160a01b031681565b34801561043657600080fd5b50610317610445366004612c53565b610c97565b34801561045657600080fd5b5060125460135460145461046992919083565b604080519384526020840192909252908201526060016102ac565b34801561049057600080fd5b5061034761049f366004612dfd565b610cd3565b3480156104b057600080fd5b50601f54610298906001600160a01b031681565b3480156104d057600080fd5b5060215461031790600160a81b900460ff1681565b3480156104f157600080fd5b50610347610500366004612ede565b610d65565b34801561051157600080fd5b50610317610520366004612ede565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561054a57600080fd5b50602b546103179060ff1681565b34801561056457600080fd5b50610317610573366004612ede565b610f0d565b34801561058457600080fd5b50610347610593366004612efb565b610f1b565b3480156105a457600080fd5b5061037a6105b3366004612ede565b610f85565b3480156105c457600080fd5b50610347610fa0565b3480156105d957600080fd5b50610347611034565b3480156105ee57600080fd5b506000546001600160a01b0316610298565b34801561060c57600080fd5b5061031761061b366004612ede565b60076020526000908152604090205460ff1681565b34801561063c57600080fd5b506102ca611080565b34801561065157600080fd5b5061037a610660366004612ede565b6001600160a01b03166000908152600e602052604090205490565b34801561068757600080fd5b50610317610696366004612c53565b61108f565b6103476106a9366004612f97565b6110c6565b3480156106ba57600080fd5b506103176106c9366004612c53565b611830565b3480156106da57600080fd5b50600054610298906001600160a01b031681565b3480156106fa57600080fd5b50601854601954601a5461046992919083565b34801561071957600080fd5b50610347610728366004612ede565b611847565b34801561073957600080fd5b5061034761074836600461306f565b6118a7565b34801561075957600080fd5b5061034761076836600461308a565b61193e565b34801561077957600080fd5b50610347610788366004612ede565b6119e7565b34801561079957600080fd5b506103476107a83660046130b6565b611a4a565b3480156107b957600080fd5b5061037a6107c83660046130b6565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156107ff57600080fd5b5060155460165460175461046992919083565b34801561081e57600080fd5b5061034761082d36600461308a565b611ab7565b34801561083e57600080fd5b50610347611b72565b34801561085357600080fd5b506103476108623660046130ef565b611bb8565b60606010805461087690613121565b80601f01602080910402602001604051908101604052809291908181526020018280546108a290613121565b80156108ef5780601f106108c4576101008083540402835291602001916108ef565b820191906000526020600020905b8154815290600101906020018083116108d257829003601f168201915b5050505050905090565b6000610906338484611c36565b5060015b92915050565b6000546001600160a01b031633148061093357506020546001600160a01b031633145b6109585760405162461bcd60e51b815260040161094f9061315b565b60405180910390fd5b60005b8251811015610a5b576002600084838151811061097a5761097a613185565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161580156109ed5750737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03168382815181106109d9576109d9613185565b60200260200101516001600160a01b031614155b15610a49578160086000858481518110610a0957610a09613185565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80610a53816131b1565b91505061095b565b505050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610ac5576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610abf9084906131ca565b90915550505b610ad0848484611d2f565b949350505050565b6000546001600160a01b0316331480610afb57506020546001600160a01b031633145b610b175760405162461bcd60e51b815260040161094f9061315b565b60008183601c54610b2891906131e1565b610b329190613200565b905061012c601c54610b449190613200565b811015610b635760405162461bcd60e51b815260040161094f90613222565b6028555050565b6000546001600160a01b0316331480610b8d57506020546001600160a01b031633145b610ba95760405162461bcd60e51b815260040161094f9061315b565b8051825114610bfa5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e6774680000604482015260640161094f565b60c8825110610c1b5760405162461bcd60e51b815260040161094f90613267565b60005b8251811015610a5b576000838281518110610c3b57610c3b613185565b602002602001015190506000838381518110610c5957610c59613185565b6020026020010151670de0b6b3a7640000610c7491906131e1565b9050610c81338383611d2f565b5050508080610c8f906131b1565b915050610c1e565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610906918590610cce9086906132bd565b611c36565b6000546001600160a01b0316331480610cf657506020546001600160a01b031633145b610d125760405162461bcd60e51b815260040161094f9061315b565b60008183601c54610d2391906131e1565b610d2d9190613200565b905061012c601c54610d3f9190613200565b811015610d5e5760405162461bcd60e51b815260040161094f90613222565b6024555050565b6000546001600160a01b0316331480610d8857506020546001600160a01b031633145b610da45760405162461bcd60e51b815260040161094f9061315b565b6001600160a01b038116610dca5760405162461bcd60e51b815260040161094f906132d5565b61deac196001600160a01b03821601610df55760405162461bcd60e51b815260040161094f906132d5565b60008054610e0e916001600160a01b0390911690610f1b565b610e19816001610f1b565b6000546020546001600160a01b03918216911603610e4d57602080546001600160a01b0319166001600160a01b0383161790555b600054610e62906001600160a01b0316610f85565b600080546001600160a01b039081168252600460209081526040808420868416855290915282209290925580549091610e9b9116610f85565b1115610ec257600054610ec0906001600160a01b031682610ebb82610f85565b611d2f565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600061090a826000196108f9565b6000546001600160a01b0316331480610f3e57506020546001600160a01b031633145b610f5a5760405162461bcd60e51b815260040161094f9061315b565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b0316331480610fc357506020546001600160a01b031633145b610fdf5760405162461bcd60e51b815260040161094f9061315b565b60008054610ff8916001600160a01b0390911690610f1b565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633148061105757506020546001600160a01b031633145b6110735760405162461bcd60e51b815260040161094f9061315b565b601c546024819055602855565b60606011805461087690613121565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610906918590610cce9086906131ca565b6000546001600160a01b03163314806110e957506020546001600160a01b031633145b6111055760405162461bcd60e51b815260040161094f9061315b565b600d5460ff16156111515760405162461bcd60e51b815260206004820152601660248201527563616e206f6e6c792072756e2074686973206f6e636560501b604482015260640161094f565b80518251146111a25760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e6774680000604482015260640161094f565b60c88251106111c35760405162461bcd60e51b815260040161094f90613267565b602c54156111d057600080fd5b60106111dc8882613378565b5060116111e98782613378565b50600f859055601b805460ff1916601290811790915561120a90600a61351c565b600f5461121791906131e1565b601c55601e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561127e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a2919061352b565b6001600160a01b031663c9c65396601e60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611303573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611327919061352b565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611373573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611397919061352b565b601f80546001600160a01b03199081166001600160a01b039384169081179092556000918252600260209081526040808420805460ff1916600117905530845260048252808420601e548616855282529092206000199055815481168784161790915560218054909116918516919091179055606460228190556127106023819055601c549091611427916131e1565b6114319190613200565b602455606460268190556127106027819055601c549091611451916131e1565b61145b9190613200565b602855601c54612710906114709060056131e1565b61147a9190613200565b602955601c546103e89061148f9060056131e1565b6114999190613200565b602a556001600660006114b46000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055835482168152600690935281832080548516600190811790915560215490911683528183208054851682179055308352908220805484168217905561dead82527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805490931681179092556005906115626000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556115aa737a250d5630b4cf539739df2c5dacb4c659f2488d6000196108f9565b506115c86115c06000546001600160a01b031690565b6000196108f9565b50600d805460ff19166001908117909155601c549060006115f16000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205561163d6116206000546001600160a01b031690565b737a250d5630b4cf539739df2c5dacb4c659f2488d601c54611c36565b6000546001600160a01b03166001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601c5460405161169091815260200190565b60405180910390a3600054601e546116b7916001600160a01b039081169116600019611c36565b601e546116d19030906001600160a01b0316600019611c36565b60005b825181101561175a5760008382815181106116f1576116f1613185565b60200260200101519050600083838151811061170f5761170f613185565b6020026020010151670de0b6b3a764000061172a91906131e1565b600054909150611744906001600160a01b03168383611d2f565b5050508080611752906131b1565b9150506116d4565b50600054611775906001600160a01b031630610ebb82610f85565b50601e546001600160a01b031663f305d719473061179281610f85565b6000806117a76000546001600160a01b031690565b426040518863ffffffff1660e01b81526004016117c996959493929190613548565b60606040518083038185885af11580156117e7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061180c9190613583565b50506001602c81905543602555600d805460ff191690911790555050505050505050565b600061183d338484611d2f565b5060019392505050565b6000546001600160a01b031633148061186a57506020546001600160a01b031633145b6118865760405162461bcd60e51b815260040161094f9061315b565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314806118ca57506020546001600160a01b031633145b6118e65760405162461bcd60e51b815260040161094f9061315b565b60218054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061193390831515815260200190565b60405180910390a150565b6000546001600160a01b031633148061196157506020546001600160a01b031633145b61197d5760405162461bcd60e51b815260040161094f9061315b565b8061198883856132bd565b61199291906132bd565b6064146119d95760405162461bcd60e51b81526020600482015260156024820152740726174696f73206d75737420657175616c2031303605c1b604482015260640161094f565b601892909255601955601a55565b6000546001600160a01b0316331480611a0a57506020546001600160a01b031633145b611a265760405162461bcd60e51b815260040161094f9061315b565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b0316331480611a6d57506020546001600160a01b031633145b611a895760405162461bcd60e51b815260040161094f9061315b565b602080546001600160a01b039384166001600160a01b03199182161790915560218054929093169116179055565b6000546001600160a01b0316331480611ada57506020546001600160a01b031633145b611af65760405162461bcd60e51b815260040161094f9061315b565b6015548311801590611b0a57506016548211155b8015611b1857506017548111155b611b645760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e000000000000000000604482015260640161094f565b601292909255601355601455565b6000546001600160a01b0316331480611b9557506020546001600160a01b031633145b611bb15760405162461bcd60e51b815260040161094f9061315b565b6001602c55565b6000546001600160a01b0316331480611bdb57506020546001600160a01b031633145b611bf75760405162461bcd60e51b815260040161094f9061315b565b8284601c54611c0691906131e1565b611c109190613200565b602955601c548190611c239084906131e1565b611c2d9190613200565b602a5550505050565b6001600160a01b038316611c825760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640161094f565b6001600160a01b038216611cce5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640161094f565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611d7e5760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b604482015260640161094f565b6001600160a01b038316611dcb5760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b604482015260640161094f565b60008211611e065760405162461bcd60e51b815260206004820152600860248201526726bab9ba101f181760c11b604482015260640161094f565b6001600160a01b03831660009081526008602052604090205460ff16158015611e4857506001600160a01b03841660009081526008602052604090205460ff16155b611e865760405162461bcd60e51b815260206004820152600f60248201526e756e61626c6520746f20747261646560881b604482015260640161094f565b611e916032436131ca565b6025541115611ef357600032611ea8868683612250565b915081611ef05760405162461bcd60e51b81526020600482015260166024820152751d1c985b9cd9995c8819195b185e48195b98589b195960521b604482015260640161094f565b50505b611efd8484612384565b1561213d57600b5460ff1615611fb4576001600160a01b03841660009081526002602052604090205460ff1615611f73576001600160a01b0383166000908152600c6020526040902054439003611f5357600080fd5b6001600160a01b0383166000908152600c60205260409020439055611fb4565b6001600160a01b0384166000908152600c6020526040902054439003611f9857600080fd5b6001600160a01b0384166000908152600c602052604090204390555b6001600160a01b03841660009081526007602052604090205460ff1680611ff357506001600160a01b03831660009081526007602052604090205460ff165b61213d576001600160a01b03841660009081526002602052604090205460ff168061203657506001600160a01b03831660009081526002602052604090205460ff165b1561208d5760245482111561208d5760405162461bcd60e51b815260206004820152601860248201527f4578636565647320746865206d61785478416d6f756e742e0000000000000000604482015260640161094f565b6001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d148015906120d357506001600160a01b03831660009081526002602052604090205460ff16155b1561213d57602854826120e585610f85565b6120ef91906132bd565b111561213d5760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e000000000000604482015260640161094f565b6001600160a01b0383166000908152600160205260408120549003612178576001600160a01b0383166000908152600e602052604090204290555b6001600160a01b03841660009081526006602052604090205460019060ff16806121ba57506001600160a01b03841660009081526006602052604090205460ff165b156121c3575060005b6001600160a01b03841660009081526002602052604090205460ff161561223b57602154600160a01b900460ff161580156122075750602154600160a81b900460ff165b1561223b57600061221730610f85565b9050602954811061223957602a5481106122305750602a545b61223981612442565b505b6122478585858461268b565b95945050505050565b601f546000906001906001600160a01b03808716911603612297576001600160a01b0380851660009081526009602052604080822043908190559286168252902055610ad0565b601f546001600160a01b03808616911603610ad0576001600160a01b03851660009081526009602052604090205443116122f057506001600160a01b0384166000908152600a60205260408120805460ff191660011790555b6001600160a01b0385166000908152600a602052604090205460ff161561231957506000610ad0565b601f546001600160a01b038581169116148015906123455750601f546001600160a01b03868116911614155b15610ad0576001600160a01b03808616600090815260096020526040808220439081905587841683528183208190559286168252902055949350505050565b600080546001600160a01b038481169116148015906123b157506000546001600160a01b03838116911614155b80156123d657506001600160a01b03821660009081526005602052604090205460ff16155b80156123fb57506001600160a01b03831660009081526005602052604090205460ff16155b801561241257506001600160a01b03821661dead14155b801561242657506001600160a01b03821615155b801561243b57506001600160a01b0383163014155b9392505050565b6021805460ff60a01b1916600160a01b17905560195460185461246591906132bd565b1561267b57601a54601954601854600092600292909161248591906132bd565b61248f91906132bd565b60185461249c90856131e1565b6124a69190613200565b6124b09190613200565b905060006124be82846131ca565b90506124c9816127e8565b601a5460195460185447926000926002926124e491906132bd565b6124ee91906132bd565b6018546124fb90856131e1565b6125059190613200565b61250f9190613200565b90508315612563576125218482612929565b60408051858152602081018390529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b479150811561267657601a5460195460009161257e916132bd565b60195461258b90856131e1565b6125959190613200565b601a546019549192506000916125ab91906132bd565b601a546125b890866131e1565b6125c29190613200565b6020546040519192506001916001600160a01b03909116908490600081818185875af1925050503d8060008114612615576040519150601f19603f3d011682016040523d82523d6000602084013e61261a565b606091505b50506021546040519192506001600160a01b0316908390600081818185875af1925050503d806000811461266a576040519150601f19603f3d011682016040523d82523d6000602084013e61266f565b606091505b5050505050505b505050505b506021805460ff60a01b19169055565b602b5460009060ff16612715576126a285856129be565b602b5460ff161580156126ba57506126ba8585612384565b156127155760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b606482015260840161094f565b6001600160a01b0385166000908152600160205260408120805485929061273d9084906131ca565b909155506000905082612750578361275b565b61275b868686612acd565b6001600160a01b0386166000908152600160205260408120805492935083929091906127889084906132bd565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127d491815260200190565b60405180910390a350600195945050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061281d5761281d613185565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289a919061352b565b816001815181106128ad576128ad613185565b6001600160a01b039283166020918202929092010152601e5460405163791ac94760e01b815291169063791ac947906128f39085906000908690309042906004016135b1565b600060405180830381600087803b15801561290d57600080fd5b505af1158015612921573d6000803e3d6000fd5b505050505050565b601e546001600160a01b031663f305d7198230856000806129526000546001600160a01b031690565b426040518863ffffffff1660e01b815260040161297496959493929190613548565b60606040518083038185885af1158015612992573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129b79190613583565b5050505050565b602b5460ff1615612a1d5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b606482015260840161094f565b612a278282612384565b158015612a415750601f546001600160a01b038281169116145b15612ac95743602d556001600160a01b038216600090815260056020908152604091829020805460ff199081166001908117909255602b80549091168217905542602e556021805460ff60a81b1916600160a81b17905591519182527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159910160405180910390a15b5050565b601f5460009081906001600160a01b0390811690851603612af15750601354612b15565b601f546001600160a01b0390811690861603612b105750601254612b15565b506014545b612b1f8585612384565b15612b4057602c541580612b365750602c54600114155b15612b4057600080fd5b6000612710612b4f83866131e1565b612b599190613200565b30600090815260016020526040812080549293508392909190612b7d9084906132bd565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3612bcc81856131ca565b9695505050505050565b600060208083528351808285015260005b81811015612c0357858101830151858201604001528201612be7565b81811115612c15576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612c4057600080fd5b50565b8035612c4e81612c2b565b919050565b60008060408385031215612c6657600080fd5b8235612c7181612c2b565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612cbe57612cbe612c7f565b604052919050565b600067ffffffffffffffff821115612ce057612ce0612c7f565b5060051b60200190565b600082601f830112612cfb57600080fd5b81356020612d10612d0b83612cc6565b612c95565b82815260059290921b84018101918181019086841115612d2f57600080fd5b8286015b84811015612d53578035612d4681612c2b565b8352918301918301612d33565b509695505050505050565b80358015158114612c4e57600080fd5b60008060408385031215612d8157600080fd5b823567ffffffffffffffff811115612d9857600080fd5b612da485828601612cea565b925050612db360208401612d5e565b90509250929050565b600080600060608486031215612dd157600080fd5b8335612ddc81612c2b565b92506020840135612dec81612c2b565b929592945050506040919091013590565b60008060408385031215612e1057600080fd5b50508035926020909101359150565b600082601f830112612e3057600080fd5b81356020612e40612d0b83612cc6565b82815260059290921b84018101918181019086841115612e5f57600080fd5b8286015b84811015612d535780358352918301918301612e63565b60008060408385031215612e8d57600080fd5b823567ffffffffffffffff80821115612ea557600080fd5b612eb186838701612cea565b93506020850135915080821115612ec757600080fd5b50612ed485828601612e1f565b9150509250929050565b600060208284031215612ef057600080fd5b813561243b81612c2b565b60008060408385031215612f0e57600080fd5b8235612f1981612c2b565b9150612db360208401612d5e565b600082601f830112612f3857600080fd5b813567ffffffffffffffff811115612f5257612f52612c7f565b612f65601f8201601f1916602001612c95565b818152846020838601011115612f7a57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060e0888a031215612fb257600080fd5b873567ffffffffffffffff80821115612fca57600080fd5b612fd68b838c01612f27565b985060208a0135915080821115612fec57600080fd5b612ff88b838c01612f27565b975060408a0135965061300d60608b01612c43565b955061301b60808b01612c43565b945060a08a013591508082111561303157600080fd5b61303d8b838c01612cea565b935060c08a013591508082111561305357600080fd5b506130608a828b01612e1f565b91505092959891949750929550565b60006020828403121561308157600080fd5b61243b82612d5e565b60008060006060848603121561309f57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156130c957600080fd5b82356130d481612c2b565b915060208301356130e481612c2b565b809150509250929050565b6000806000806080858703121561310557600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061313557607f821691505b60208210810361315557634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f21b0b63632b910109e9037bbb732b91760811b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016131c3576131c361319b565b5060010190565b6000828210156131dc576131dc61319b565b500390565b60008160001904831182151516156131fb576131fb61319b565b500290565b60008261321d57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f4d7573742062652061626f766520302e33337e25206f6620746f74616c2073756040820152643838363c9760d91b606082015260800190565b60208082526036908201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726040820152752074786e2064756520746f20676173206c696d69747360501b606082015260800190565b600082198211156132d0576132d061319b565b500190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b601f821115610a5b57600081815260208120601f850160051c810160208610156133595750805b601f850160051c820191505b8181101561292157828155600101613365565b815167ffffffffffffffff81111561339257613392612c7f565b6133a6816133a08454613121565b84613332565b602080601f8311600181146133db57600084156133c35750858301515b600019600386901b1c1916600185901b178555612921565b600085815260208120601f198616915b8281101561340a578886015182559484019460019091019084016133eb565b50858210156134285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b808511156134735781600019048211156134595761345961319b565b8085161561346657918102915b93841c939080029061343d565b509250929050565b60008261348a5750600161090a565b816134975750600061090a565b81600181146134ad57600281146134b7576134d3565b600191505061090a565b60ff8411156134c8576134c861319b565b50506001821b61090a565b5060208310610133831016604e8410600b84101617156134f6575081810a61090a565b6135008383613438565b80600019048211156135145761351461319b565b029392505050565b600061243b60ff84168361347b565b60006020828403121561353d57600080fd5b815161243b81612c2b565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561359857600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136015784516001600160a01b0316835293830193918301916001016135dc565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220aa40598d4452ef20384b7bac1763c7334412c8dcfdf8b955b75027f8441b03ce64736f6c634300080f0033

Deployed Bytecode Sourcemap

3636:21748:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5770:73;;;;;;;;;;;;5801:42;5770:73;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;5770:73:0;;;;;;;;9562:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;5599:35::-;;;;;;;;;;-1:-1:-1;5599:35:0;;;;-1:-1:-1;;;;;5599:35:0;;;10175:161;;;;;;;;;;-1:-1:-1;10175:161:0;;;;;:::i;:::-;;:::i;:::-;;;1818:14:1;;1811:22;1793:41;;1781:2;1766:18;10175:161:0;1653:187:1;17375:328:0;;;;;;;;;;-1:-1:-1;17375:328:0;;;;;:::i;:::-;;:::i;:::-;;5916:25;;;;;;;;;;-1:-1:-1;5916:25:0;;;;-1:-1:-1;;;;;5916:25:0;;;9297:83;;;;;;;;;;-1:-1:-1;9370:7:0;;9297:83;;;3919:25:1;;;3907:2;3892:18;9297:83:0;3773:177:1;10908:306:0;;;;;;;;;;-1:-1:-1;10908:306:0;;;;;:::i;:::-;;:::i;16421:257::-;;;;;;;;;;-1:-1:-1;16421:257:0;;;;;:::i;:::-;;:::i;23479:615::-;;;;;;;;;;-1:-1:-1;23479:615:0;;;;;:::i;:::-;;:::i;9386:80::-;;;;;;;;;;-1:-1:-1;9454:9:0;;9386:80;;9454:9;;;;6078:36:1;;6066:2;6051:18;9386:80:0;5936:184:1;5948:26:0;;;;;;;;;;-1:-1:-1;5948:26:0;;;;-1:-1:-1;;;;;5948:26:0;;;11222:215;;;;;;;;;;-1:-1:-1;11222:215:0;;;;;:::i;:::-;;:::i;4776:77::-;;;;;;;;;;-1:-1:-1;4776:77:0;;;;;;;;;;;;;;;;6327:25:1;;;6383:2;6368:18;;6361:34;;;;6411:18;;;6404:34;6315:2;6300:18;4776:77:0;6125:319:1;16161:252:0;;;;;;;;;;-1:-1:-1;16161:252:0;;;;;:::i;:::-;;:::i;5641:21::-;;;;;;;;;;-1:-1:-1;5641:21:0;;;;-1:-1:-1;;;;;5641:21:0;;;6015:41;;;;;;;;;;-1:-1:-1;6015:41:0;;;;-1:-1:-1;;;6015:41:0;;;;;;7986:749;;;;;;;;;;-1:-1:-1;7986:749:0;;;;;:::i;:::-;;:::i;11678:125::-;;;;;;;;;;-1:-1:-1;11678:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;11767:28:0;11743:4;11767:28;;;:19;:28;;;;;;;;;11678:125;6405:36;;;;;;;;;;-1:-1:-1;6405:36:0;;;;;;;;10661:120;;;;;;;;;;-1:-1:-1;10661:120:0;;;;;:::i;:::-;;:::i;14844:134::-;;;;;;;;;;-1:-1:-1;14844:134:0;;;;;:::i;:::-;;:::i;9875:117::-;;;;;;;;;;-1:-1:-1;9875:117:0;;;;;:::i;:::-;;:::i;8743:195::-;;;;;;;;;;;;;:::i;16034:119::-;;;;;;;;;;;;;:::i;9648:80::-;;;;;;;;;;-1:-1:-1;9700:7:0;7964:6;-1:-1:-1;;;;;7964:6:0;9648:80;;4106:68;;;;;;;;;;-1:-1:-1;4106:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9472:84;;;;;;;;;;;;;:::i;10789:111::-;;;;;;;;;;-1:-1:-1;10789:111:0;;;;;:::i;:::-;-1:-1:-1;;;;;10875:17:0;10848:7;10875:17;;;:8;:17;;;;;;;10789:111;11445:225;;;;;;;;;;-1:-1:-1;11445:225:0;;;;;:::i;:::-;;:::i;11899:2937::-;;;;;;:::i;:::-;;:::i;10000:167::-;;;;;;;;;;-1:-1:-1;10000:167:0;;;;;:::i;:::-;;:::i;3745:21::-;;;;;;;;;;-1:-1:-1;3745:21:0;;;;-1:-1:-1;;;;;3745:21:0;;;5261:93;;;;;;;;;;-1:-1:-1;5261:93:0;;;;;;;;;;;;15152:166;;;;;;;;;;-1:-1:-1;15152:166:0;;;;;:::i;:::-;;:::i;17191:171::-;;;;;;;;;;-1:-1:-1;17191:171:0;;;;;:::i;:::-;;:::i;15330:289::-;;;;;;;;;;-1:-1:-1;15330:289:0;;;;;:::i;:::-;;:::i;14986:158::-;;;;;;;;;;-1:-1:-1;14986:158:0;;;;;:::i;:::-;;:::i;16983:200::-;;;;;;;;;;-1:-1:-1;16983:200:0;;;;;:::i;:::-;;:::i;9734:133::-;;;;;;;;;;-1:-1:-1;9734:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;9836:19:0;;;9818:7;9836:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;9734:133;5004:92;;;;;;;;;;-1:-1:-1;5004:92:0;;;;;;;;;;;;15627:399;;;;;;;;;;-1:-1:-1;15627:399:0;;;;;:::i;:::-;;:::i;11811:76::-;;;;;;;;;;;;;:::i;16686:289::-;;;;;;;;;;-1:-1:-1;16686:289:0;;;;;:::i;:::-;;:::i;9562:80::-;9610:13;9634:5;9627:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9562:80;:::o;10175:161::-;10250:4;10267:39;188:10;10290:7;10299:6;10267:8;:39::i;:::-;-1:-1:-1;10324:4:0;10175:161;;;;;:::o;17375:328::-;7151:6;;-1:-1:-1;;;;;7151:6:0;188:10;7151:22;;:52;;-1:-1:-1;7177:10:0;;-1:-1:-1;;;;;7177:10:0;188;7177:26;7151:52;7143:81;;;;-1:-1:-1;;;7143:81:0;;;;;;;:::i;:::-;;;;;;;;;17475:6:::1;17470:226;17491:12;:19;17487:1;:23;17470:226;;;17537:7;:24;17545:12;17558:1;17545:15;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;17537:24:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;17537:24:0;;::::1;;17536:25;:71:::0;::::1;;;;5715:42;-1:-1:-1::0;;;;;17565:42:0::1;:12;17578:1;17565:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;17565:42:0::1;;;17536:71;17532:153;;;17662:7;17628:14;:31;17643:12;17656:1;17643:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;17628:31:0::1;-1:-1:-1::0;;;;;17628:31:0::1;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;17532:153;17512:3:::0;::::1;::::0;::::1;:::i;:::-;;;;17470:226;;;;17375:328:::0;;:::o;10908:306::-;-1:-1:-1;;;;;11029:19:0;;11008:4;11029:19;;;:11;:19;;;;;;;;11049:10;11029:31;;;;;;;;-1:-1:-1;;11029:52:0;11025:126;;-1:-1:-1;;;;;11098:19:0;;;;;;:11;:19;;;;;;;;11118:10;11098:31;;;;;;;:41;;11133:6;;11098:19;:41;;11133:6;;11098:41;:::i;:::-;;;;-1:-1:-1;;11025:126:0;11170:36;11180:6;11188:9;11199:6;11170:9;:36::i;:::-;11163:43;10908:306;-1:-1:-1;;;;10908:306:0:o;16421:257::-;7151:6;;-1:-1:-1;;;;;7151:6:0;188:10;7151:22;;:52;;-1:-1:-1;7177:10:0;;-1:-1:-1;;;;;7177:10:0;188;7177:26;7151:52;7143:81;;;;-1:-1:-1;;;7143:81:0;;;;;;;:::i;:::-;16505:13:::1;16543:7;16532;16522;;:17;;;;:::i;:::-;16521:29;;;;:::i;:::-;16505:45;;16589:3;16579:7;;:13;;;;:::i;:::-;16569:5;:24;;16561:74;;;;-1:-1:-1::0;;;16561:74:0::1;;;;;;;:::i;:::-;16646:14;:22:::0;-1:-1:-1;;16421:257:0:o;23479:615::-;7151:6;;-1:-1:-1;;;;;7151:6:0;188:10;7151:22;;:52;;-1:-1:-1;7177:10:0;;-1:-1:-1;;;;;7177:10:0;188;7177:26;7151:52;7143:81;;;;-1:-1:-1;;;7143:81:0;;;;;;;:::i;:::-;23619:15:::1;:22;23601:7;:14;:40;23593:83;;;::::0;-1:-1:-1;;;23593:83:0;;12742:2:1;23593:83:0::1;::::0;::::1;12724:21:1::0;12781:2;12761:18;;;12754:30;12820:32;12800:18;;;12793:60;12870:18;;23593:83:0::1;12540:354:1::0;23593:83:0::1;23712:3;23695:7;:14;:20;23687:87;;;;-1:-1:-1::0;;;23687:87:0::1;;;;;;;:::i;:::-;23887:9;23883:204;23906:7;:14;23902:1;:18;23883:204;;;23941:14;23958:7;23966:1;23958:10;;;;;;;;:::i;:::-;;;;;;;23941:27;;23983:14;24000:15;24016:1;24000:18;;;;;;;;:::i;:::-;;;;;;;24019:4;24000:23;;;;:::i;:::-;23983:40;;24038:37;24048:10;24060:6;24068;24038:9;:37::i;:::-;;23926:161;;23922:3;;;;;:::i;:::-;;;;23883:204;;11222:215:::0;188:10;11310:4;11359:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11359:34:0;;;;;;;;;;11310:4;;11327:80;;11350:7;;11359:47;;11396:10;;11359:47;:::i;:::-;11327:8;:80::i;16161:252::-;7151:6;;-1:-1:-1;;;;;7151:6:0;188:10;7151:22;;:52;;-1:-1:-1;7177:10:0;;-1:-1:-1;;;;;7177:10:0;188;7177:26;7151:52;7143:81;;;;-1:-1:-1;;;7143:81:0;;;;;;;:::i;:::-;16244:13:::1;16282:7;16271;16261;;:17;;;;:::i;:::-;16260:29;;;;:::i;:::-;16244:45;;16328:3;16318:7;;:13;;;;:::i;:::-;16308:5;:24;;16300:74;;;;-1:-1:-1::0;;;16300:74:0::1;;;;;;;:::i;:::-;16385:12;:20:::0;-1:-1:-1;;16161:252:0:o;7986:749::-;7151:6;;-1:-1:-1;;;;;7151:6:0;188:10;7151:22;;:52;;-1:-1:-1;7177:10:0;;-1:-1:-1;;;;;7177:10:0;188;7177:26;7151:52;7143:81;;;;-1:-1:-1;;;7143:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8067:22:0;::::1;8059:96;;;;-1:-1:-1::0;;;8059:96:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;8174:16:0;::::1;::::0;8166:90:::1;;;;-1:-1:-1::0;;;8166:90:0::1;;;;;;;:::i;:::-;8287:6;::::0;;8267:34:::1;::::0;-1:-1:-1;;;;;8287:6:0;;::::1;::::0;8267:19:::1;:34::i;:::-;8312:35;8332:8;8342:4;8312:19;:35::i;:::-;8394:6;::::0;8372:10:::1;::::0;-1:-1:-1;;;;;8394:6:0;;::::1;8372:10:::0;::::1;:29:::0;8368:78:::1;;8416:10;:30:::0;;-1:-1:-1;;;;;;8416:30:0::1;-1:-1:-1::0;;;;;8416:30:0;::::1;;::::0;;8368:78:::1;8509:6;::::0;8499:17:::1;::::0;-1:-1:-1;;;;;8509:6:0::1;8499:9;:17::i;:::-;8467:19;8479:6:::0;;-1:-1:-1;;;;;8479:6:0;;::::1;8467:19:::0;;:11:::1;:19;::::0;;;;;;;:29;;::::1;::::0;;;;;;;:49;;;;8540:6;;8467:19;;8530:17:::1;::::0;8540:6:::1;8530:9;:17::i;:::-;:21;8527:99;;;8578:6;::::0;8568:46:::1;::::0;-1:-1:-1;;;;;8578:6:0::1;8586:8:::0;8596:17:::1;8578:6:::0;8596:9:::1;:17::i;:::-;8568:9;:46::i;:::-;;8527:99;8646:6;:17:::0;;-1:-1:-1;;;;;;8646:17:0::1;-1:-1:-1::0;;;;;8646:17:0;::::1;::::0;;::::1;::::0;;8679:38:::1;::::0;8646:17;;;;8679:38:::1;::::0;8646:6;8679:38:::1;7986:749:::0;:::o;10661:120::-;10714:4;10738:35;10746:7;-1:-1:-1;;10738:7:0;:35::i;14844:134::-;7151:6;;-1:-1:-1;;;;;7151:6:0;188:10;7151:22;;:52;;-1:-1:-1;7177:10:0;;-1:-1:-1;;;;;7177:10:0;188;7177:26;7151:52;7143:81;;;;-1:-1:-1;;;7143:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14932:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;14932:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14844:134::o;9875:117::-;-1:-1:-1;;;;;9968:16:0;9941:7;9968:16;;;:7;:16;;;;;;;9875:117::o;8743:195::-;7151:6;;-1:-1:-1;;;;;7151:6:0;188:10;7151:22;;:52;;-1:-1:-1;7177:10:0;;-1:-1:-1;;;;;7177:10:0;188;7177:26;7151:52;7143:81;;;;-1:-1:-1;;;7143:81:0;;;;;;;:::i;:::-;8830:6:::1;::::0;;8810:34:::1;::::0;-1:-1:-1;;;;;8830:6:0;;::::1;::::0;8810:19:::1;:34::i;:::-;8872:1;8855:19:::0;;-1:-1:-1;;;;;;8855:19:0::1;::::0;;8890:40:::1;::::0;8872:1;;8890:40:::1;::::0;8872:1;;8890:40:::1;8743:195::o:0;16034:119::-;7151:6;;-1:-1:-1;;;;;7151:6:0;188:10;7151:22;;:52;;-1:-1:-1;7177:10:0;;-1:-1:-1;;;;;7177:10:0;188;7177:26;7151:52;7143:81;;;;-1:-1:-1;;;7143:81:0;;;;;;;:::i;:::-;16103:7:::1;::::0;16088:12:::1;:22:::0;;;16121:14:::1;:24:::0;16034:119::o;9472:84::-;9522:13;9546:7;9539:14;;;;;:::i;11445:225::-;188:10;11538:4;11587:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11587:34:0;;;;;;;;;;11538:4;;11555:85;;11578:7;;11587:52;;11624:15;;11587:52;:::i;11899:2937::-;7151:6;;-1:-1:-1;;;;;7151:6:0;188:10;7151:22;;:52;;-1:-1:-1;7177:10:0;;-1:-1:-1;;;;;7177:10:0;188;7177:26;7151:52;7143:81;;;;-1:-1:-1;;;7143:81:0;;;;;;;:::i;:::-;12133:13:::1;::::0;::::1;;12132:14;12124:49;;;::::0;-1:-1:-1;;;12124:49:0;;14087:2:1;12124:49:0::1;::::0;::::1;14069:21:1::0;14126:2;14106:18;;;14099:30;-1:-1:-1;;;14145:18:1;;;14138:52;14207:18;;12124:49:0::1;13885:346:1::0;12124:49:0::1;12211:11;:18;12192:8;:15;:37;12184:80;;;::::0;-1:-1:-1;;;12184:80:0;;12742:2:1;12184:80:0::1;::::0;::::1;12724:21:1::0;12781:2;12761:18;;;12754:30;12820:32;12800:18;;;12793:60;12870:18;;12184:80:0::1;12540:354:1::0;12184:80:0::1;12301:3;12283:8;:15;:21;12275:88;;;;-1:-1:-1::0;;;12275:88:0::1;;;;;;;:::i;:::-;12483:13;::::0;:18;12475:27:::1;;;::::0;::::1;;12518:5;:16;12526:8:::0;12518:5;:16:::1;:::i;:::-;-1:-1:-1::0;12545:7:0::1;:20;12555:10:::0;12545:7;:20:::1;:::i;:::-;-1:-1:-1::0;12578:14:0::1;:27:::0;;;12616:9:::1;:14:::0;;-1:-1:-1;;12616:14:0::1;12628:2;12616:14:::0;;::::1;::::0;;;12668:13:::1;::::0;:2:::1;:13;:::i;:::-;12651:14;;:30;;;;:::i;:::-;12641:7;:40:::0;12694:9:::1;:46:::0;;-1:-1:-1;;;;;;12694:46:0::1;5715:42;12694:46:::0;;::::1;::::0;;;12778:19:::1;::::0;;-1:-1:-1;;;12778:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;5715:42;12778:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12760:49:0::1;;12810:9;;;;;;;;;-1:-1:-1::0;;;;;12810:9:0::1;-1:-1:-1::0;;;;;12810:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12760:82;::::0;-1:-1:-1;;;;;;12760:82:0::1;::::0;;;;;;-1:-1:-1;;;;;18309:15:1;;;12760:82:0::1;::::0;::::1;18291:34:1::0;12836:4:0::1;18341:18:1::0;;;18334:43;18226:18;;12760:82:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12751:6;:91:::0;;-1:-1:-1;;;;;;12751:91:0;;::::1;-1:-1:-1::0;;;;;12751:91:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;12853:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;12853:22:0::1;-1:-1:-1::0;12853:22:0::1;::::0;;12906:4:::1;12886:26:::0;;:11:::1;:26:::0;;;;;12921:9:::1;::::0;;::::1;12886:46:::0;;;;;;;-1:-1:-1;;12886:66:0;;12965:21;;;::::1;::::0;;::::1;;::::0;;;12997:11:::1;:23:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;13048:3:::1;13033:12;:18:::0;;;13113:5:::1;13098:12;:20:::0;;;13145:7:::1;::::0;13113:5;;13145:22:::1;::::0;::::1;:::i;:::-;13144:39;;;;:::i;:::-;13129:12;:54:::0;13223:3:::1;13204:16;:22:::0;;;13277:5:::1;13258:16;:24:::0;;;13311:7:::1;::::0;13277:5;;13311:26:::1;::::0;::::1;:::i;:::-;13310:47;;;;:::i;:::-;13293:14;:64:::0;13395:7:::1;::::0;13410:6:::1;::::0;13395:11:::1;::::0;13405:1:::1;13395:11;:::i;:::-;13394:22;;;;:::i;:::-;13378:13;:38:::0;13441:7:::1;::::0;13456:5:::1;::::0;13441:11:::1;::::0;13451:1:::1;13441:11;:::i;:::-;13440:21;;;;:::i;:::-;13427:10;:34:::0;13505:4:::1;13474:19;:28;13494:7;7937::::0;7964:6;-1:-1:-1;;;;;7964:6:0;;7899:79;13494:7:::1;-1:-1:-1::0;;;;;13474:28:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;13474:28:0;;;:35;;;::::1;;-1:-1:-1::0;;13474:35:0;;::::1;;::::0;;13540:10;;;::::1;13520:31:::0;;:19:::1;:31:::0;;;;;;:38;;;::::1;13474:35:::0;13520:38;;::::1;::::0;;;13589:11:::1;::::0;;;::::1;13569:32:::0;;;;;:39;;;::::1;::::0;::::1;::::0;;13647:4:::1;13619:34:::0;;;;;:41;;;::::1;::::0;::::1;::::0;;5801:42:::1;13671:25:::0;;;:32;;;;::::1;::::0;::::1;::::0;;;13714:17:::1;::::0;13732:7:::1;7937::::0;7964:6;-1:-1:-1;;;;;7964:6:0;;7899:79;13732:7:::1;-1:-1:-1::0;;;;;13714:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13714:26:0;:33;;-1:-1:-1;;13714:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13760:42:::1;5715;-1:-1:-1::0;;13760:7:0::1;:42::i;:::-;;13813:35;13821:7;7937::::0;7964:6;-1:-1:-1;;;;;7964:6:0;;7899:79;13821:7:::1;-1:-1:-1::0;;13813:7:0::1;:35::i;:::-;-1:-1:-1::0;13861:13:0::1;:20:::0;;-1:-1:-1;;13861:20:0::1;13877:4;13861:20:::0;;::::1;::::0;;;13911:7:::1;::::0;;13861:13:::1;13900:7;7937::::0;7964:6;-1:-1:-1;;;;;7964:6:0;;7899:79;13900:7:::1;-1:-1:-1::0;;;;;13892:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13892:16:0;:26;13929:42:::1;13938:7;7937::::0;7964:6;-1:-1:-1;;;;;7964:6:0;;7899:79;13938:7:::1;5715:42;13963:7;;13929:8;:42::i;:::-;7937:7:::0;7964:6;-1:-1:-1;;;;;7964:6:0;-1:-1:-1;;;;;13987:38:0::1;14004:1;-1:-1:-1::0;;;;;13987:38:0::1;;14017:7;;13987:38;;;;3919:25:1::0;;3907:2;3892:18;;3773:177;13987:38:0::1;;;;;;;;14048:6;::::0;14064:9:::1;::::0;14039:55:::1;::::0;-1:-1:-1;;;;;14048:6:0;;::::1;::::0;14064:9:::1;-1:-1:-1::0;;14039:8:0::1;:55::i;:::-;14137:9;::::0;14105:62:::1;::::0;14122:4:::1;::::0;-1:-1:-1;;;;;14137:9:0::1;-1:-1:-1::0;;14105:8:0::1;:62::i;:::-;14186:9;14182:200;14205:8;:15;14201:1;:19;14182:200;;;14241:15;14259:8;14268:1;14259:11;;;;;;;;:::i;:::-;;;;;;;14241:29;;14285:14;14302:11;14314:1;14302:14;;;;;;;;:::i;:::-;;;;;;;14317:4;14302:19;;;;:::i;:::-;14346:6;::::0;14285:36;;-1:-1:-1;14336:34:0::1;::::0;-1:-1:-1;;;;;14346:6:0::1;14354:7:::0;14285:36;14336:9:::1;:34::i;:::-;;14226:156;;14222:3;;;;;:::i;:::-;;;;14182:200;;;-1:-1:-1::0;14404:6:0::1;::::0;14394:51:::1;::::0;-1:-1:-1;;;;;14404:6:0::1;14420:4;14427:17;14404:6:::0;14427:9:::1;:17::i;14394:51::-;-1:-1:-1::0;14458:9:0::1;::::0;-1:-1:-1;;;;;14458:9:0::1;:25;14491:21;14536:4;14556:24;14536:4:::0;14556:9:::1;:24::i;:::-;14595:1;14638::::0;14681:7:::1;7937::::0;7964:6;-1:-1:-1;;;;;7964:6:0;;7899:79;14681:7:::1;14703:15;14458:271;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;14756:1:0::1;14740:13;:17:::0;;;14785:12:::1;14768:14;:29:::0;14808:13:::1;:20:::0;;-1:-1:-1;;14808:20:0::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;;;11899:2937:0:o;10000:167::-;10078:4;10095:42;188:10;10119:9;10130:6;10095:9;:42::i;:::-;-1:-1:-1;10155:4:0;;10000:167;-1:-1:-1;;;10000:167:0:o;15152:166::-;7151:6;;-1:-1:-1;;;;;7151:6:0;188:10;7151:22;;:52;;-1:-1:-1;7177:10:0;;-1:-1:-1;;;;;7177:10:0;188;7177:26;7151:52;7143:81;;;;-1:-1:-1;;;7143:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15250:52:0::1;15305:5;15250:52:::0;;;:35:::1;:52;::::0;;;;:60;;-1:-1:-1;;15250:60:0::1;::::0;;15152:166::o;17191:171::-;7151:6;;-1:-1:-1;;;;;7151:6:0;188:10;7151:22;;:52;;-1:-1:-1;7177:10:0;;-1:-1:-1;;;;;7177:10:0;188;7177:26;7151:52;7143:81;;;;-1:-1:-1;;;7143:81:0;;;;;;;:::i;:::-;17268:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;17268:32:0::1;-1:-1:-1::0;;;;17268:32:0;;::::1;;::::0;;17316:38:::1;::::0;::::1;::::0;::::1;::::0;17292:8;1818:14:1;1811:22;1793:41;;1781:2;1766:18;;1653:187;17316:38:0::1;;;;;;;;17191:171:::0;:::o;15330:289::-;7151:6;;-1:-1:-1;;;;;7151:6:0;188:10;7151:22;;:52;;-1:-1:-1;7177:10:0;;-1:-1:-1;;;;;7177:10:0;188;7177:26;7151:52;7143:81;;;;-1:-1:-1;;;7143:81:0;;;;;;;:::i;:::-;15458:5;15436:21:::1;15447:10:::0;15436;:21:::1;:::i;:::-;:27;;;;:::i;:::-;15468:3;15435:36;15425:72;;;::::0;-1:-1:-1;;;15425:72:0;;19513:2:1;15425:72:0::1;::::0;::::1;19495:21:1::0;19552:2;19532:18;;;19525:30;-1:-1:-1;;;19571:18:1;;;19564:51;19632:18;;15425:72:0::1;19311:345:1::0;15425:72:0::1;15508:6;:29:::0;;;;15548:16;:29;15588:11;:19;15330:289::o;14986:158::-;7151:6;;-1:-1:-1;;;;;7151:6:0;188:10;7151:22;;:52;;-1:-1:-1;7177:10:0;;-1:-1:-1;;;;;7177:10:0;188;7177:26;7151:52;7143:81;;;;-1:-1:-1;;;7143:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15077:52:0::1;;::::0;;;:35:::1;:52;::::0;;;;:59;;-1:-1:-1;;15077:59:0::1;15132:4;15077:59;::::0;;14986:158::o;16983:200::-;7151:6;;-1:-1:-1;;;;;7151:6:0;188:10;7151:22;;:52;;-1:-1:-1;7177:10:0;;-1:-1:-1;;;;;7177:10:0;188;7177:26;7151:52;7143:81;;;;-1:-1:-1;;;7143:81:0;;;;;;;:::i;:::-;17094:10:::1;:37:::0;;-1:-1:-1;;;;;17094:37:0;;::::1;-1:-1:-1::0;;;;;;17094:37:0;;::::1;;::::0;;;17142:11:::1;:33:::0;;;;;::::1;::::0;::::1;;::::0;;16983:200::o;15627:399::-;7151:6;;-1:-1:-1;;;;;7151:6:0;188:10;7151:22;;:52;;-1:-1:-1;7177:10:0;;-1:-1:-1;;;;;7177:10:0;188;7177:26;7151:52;7143:81;;;;-1:-1:-1;;;7143:81:0;;;;;;;:::i;:::-;15742:7:::1;:14:::0;15731:25;::::1;::::0;::::1;::::0;:73:::1;;-1:-1:-1::0;15789:15:0;;15777:27;::::1;;15731:73;:129;;;;-1:-1:-1::0;15841:19:0;;15825:35;::::1;;15731:129;15723:182;;;::::0;-1:-1:-1;;;15723:182:0;;19863:2:1;15723:182:0::1;::::0;::::1;19845:21:1::0;19902:2;19882:18;;;19875:30;19941:25;19921:18;;;19914:53;19984:18;;15723:182:0::1;19661:347:1::0;15723:182:0::1;15917:4;:21:::0;;;;15950:12;:23;15985:16;:31;15627:399::o;11811:76::-;7151:6;;-1:-1:-1;;;;;7151:6:0;188:10;7151:22;;:52;;-1:-1:-1;7177:10:0;;-1:-1:-1;;;;;7177:10:0;188;7177:26;7151:52;7143:81;;;;-1:-1:-1;;;7143:81:0;;;;;;;:::i;:::-;11878:1:::1;11862:13;:17:::0;11811:76::o;16686:289::-;7151:6;;-1:-1:-1;;;;;7151:6:0;188:10;7151:22;;:52;;-1:-1:-1;7177:10:0;;-1:-1:-1;;;;;7177:10:0;188;7177:26;7151:52;7143:81;;;;-1:-1:-1;;;7143:81:0;;;;;;;:::i;:::-;16886:16:::1;16866;16856:7;;:26;;;;:::i;:::-;16855:47;;;;:::i;:::-;16839:13;:63:::0;16927:7:::1;::::0;16954:13;;16927:23:::1;::::0;16937:13;;16927:23:::1;:::i;:::-;16926:41;;;;:::i;:::-;16913:10;:54:::0;-1:-1:-1;;;;16686:289:0:o;10344:309::-;-1:-1:-1;;;;;10438:20:0;;10430:52;;;;-1:-1:-1;;;10430:52:0;;20215:2:1;10430:52:0;;;20197:21:1;20254:2;20234:18;;;20227:30;-1:-1:-1;;;20273:18:1;;;20266:49;20332:18;;10430:52:0;20013:343:1;10430:52:0;-1:-1:-1;;;;;10501:21:0;;10493:53;;;;-1:-1:-1;;;10493:53:0;;20215:2:1;10493:53:0;;;20197:21:1;20254:2;20234:18;;;20227:30;-1:-1:-1;;;20273:18:1;;;20266:49;20332:18;;10493:53:0;20013:343:1;10493:53:0;-1:-1:-1;;;;;10559:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;10612:33;;3919:25:1;;;10612:33:0;;3892:18:1;10612:33:0;;;;;;;10344:309;;;:::o;18701:2243::-;18780:4;-1:-1:-1;;;;;18805:18:0;;18797:51;;;;-1:-1:-1;;;18797:51:0;;20563:2:1;18797:51:0;;;20545:21:1;20602:2;20582:18;;;20575:30;-1:-1:-1;;;20621:18:1;;;20614:50;20681:18;;18797:51:0;20361:344:1;18797:51:0;-1:-1:-1;;;;;18867:16:0;;18859:49;;;;-1:-1:-1;;;18859:49:0;;20563:2:1;18859:49:0;;;20545:21:1;20602:2;20582:18;;;20575:30;-1:-1:-1;;;20621:18:1;;;20614:50;20681:18;;18859:49:0;20361:344:1;18859:49:0;18936:1;18927:6;:10;18919:31;;;;-1:-1:-1;;;18919:31:0;;20912:2:1;18919:31:0;;;20894:21:1;20951:1;20931:18;;;20924:29;-1:-1:-1;;;20969:18:1;;;20962:38;21017:18;;18919:31:0;20710:331:1;18919:31:0;-1:-1:-1;;;;;18970:18:0;;;;;;:14;:18;;;;;;;;18969:19;:44;;;;-1:-1:-1;;;;;;18993:20:0;;;;;;:14;:20;;;;;;;;18992:21;18969:44;18961:71;;;;-1:-1:-1;;;18961:71:0;;21248:2:1;18961:71:0;;;21230:21:1;21287:2;21267:18;;;21260:30;-1:-1:-1;;;21306:18:1;;;21299:45;21361:18;;18961:71:0;21046:339:1;18961:71:0;19064:17;19079:2;19064:12;:17;:::i;:::-;19047:14;;:34;19043:230;;;19098:13;19141:9;19176:27;19190:4;19195:2;19141:9;19176:13;:27::i;:::-;19165:38;;19226:8;19218:43;;;;-1:-1:-1;;;19218:43:0;;21592:2:1;19218:43:0;;;21574:21:1;21631:2;21611:18;;;21604:30;-1:-1:-1;;;21650:18:1;;;21643:52;21712:18;;19218:43:0;21390:346:1;19218:43:0;19083:190;;19043:230;19286:20;19297:4;19303:2;19286:10;:20::i;:::-;19283:891;;;19327:15;;;;19323:373;;;-1:-1:-1;;;;;19367:13:0;;;;;;:7;:13;;;;;;;;19363:318;;;-1:-1:-1;;;;;19412:13:0;;;;;;:9;:13;;;;;;19429:12;19412:29;;19404:38;;;;;;-1:-1:-1;;;;;19465:13:0;;;;;;:9;:13;;;;;19481:12;19465:28;;19363:318;;;-1:-1:-1;;;;;19572:15:0;;;;;;:9;:15;;;;;;19591:12;19572:31;;19564:40;;;;;;-1:-1:-1;;;;;19627:15:0;;;;;;:9;:15;;;;;19645:12;19627:30;;19363:318;-1:-1:-1;;;;;19715:41:0;;;;;;:35;:41;;;;;;;;;:84;;-1:-1:-1;;;;;;19760:39:0;;;;;;:35;:39;;;;;;;;19715:84;19710:439;;-1:-1:-1;;;;;19824:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;19841:11:0;;;;;;:7;:11;;;;;;;;19824:28;19821:130;;;19890:12;;19880:6;:22;;19872:59;;;;-1:-1:-1;;;19872:59:0;;21943:2:1;19872:59:0;;;21925:21:1;21982:2;21962:18;;;21955:30;22021:26;22001:18;;;21994:54;22065:18;;19872:59:0;21741:348:1;19872:59:0;-1:-1:-1;;;;;19972:20:0;;5715:42;19972:20;;;;:36;;-1:-1:-1;;;;;;19997:11:0;;;;;;:7;:11;;;;;;;;19996:12;19972:36;19969:163;;;20067:14;;20057:6;20041:13;20051:2;20041:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;20033:79;;;;-1:-1:-1;;;20033:79:0;;22296:2:1;20033:79:0;;;22278:21:1;22335:2;22315:18;;;22308:30;22374:28;22354:18;;;22347:56;22420:18;;20033:79:0;22094:350:1;20033:79:0;-1:-1:-1;;;;;20190:11:0;;;;;;:7;:11;;;;;;:16;;20186:79;;-1:-1:-1;;;;;20223:12:0;;;;;;:8;:12;;;;;20238:15;20223:30;;20186:79;-1:-1:-1;;;;;20310:25:0;;20277:12;20310:25;;;:19;:25;;;;;;20292:4;;20310:25;;;:52;;-1:-1:-1;;;;;;20339:23:0;;;;;;:19;:23;;;;;;;;20310:52;20307:98;;;-1:-1:-1;20388:5:0;20307:98;-1:-1:-1;;;;;20421:11:0;;;;;;:7;:11;;;;;;;;20417:457;;;20454:16;;-1:-1:-1;;;20454:16:0;;;;20453:17;:59;;;;-1:-1:-1;20491:21:0;;-1:-1:-1;;;20491:21:0;;;;20453:59;20449:408;;;20547:28;20578:24;20596:4;20578:9;:24::i;:::-;20547:55;;20649:13;;20625:20;:37;20621:221;;20714:10;;20690:20;:34;20687:77;;-1:-1:-1;20751:10:0;;20687:77;20786:36;20801:20;20786:14;:36::i;:::-;20528:329;20449:408;20892:44;20910:4;20916:2;20920:6;20928:7;20892:17;:44::i;:::-;20885:51;18701:2243;-1:-1:-1;;;;;18701:2243:0:o;18042:645::-;18172:6;;18123:4;;18155;;-1:-1:-1;;;;;18172:14:0;;;:6;;:14;18168:481;;-1:-1:-1;;;;;18191:18:0;;;;;;;:14;:18;;;;;;18212:12;18191:33;;;;18227:20;;;;;;;:35;18168:481;;;18281:6;;-1:-1:-1;;;;;18281:12:0;;;:6;;:12;18277:372;;-1:-1:-1;;;;;18315:20:0;;;;;;:14;:20;;;;;;18339:12;-1:-1:-1;18311:89:0;;-1:-1:-1;;;;;;18355:18:0;;;;;;:12;:18;;;;;:25;;-1:-1:-1;;18355:25:0;18376:4;18355:25;;;18311:89;-1:-1:-1;;;;;18423:18:0;;;;;;:12;:18;;;;;;;;18419:215;;;-1:-1:-1;18456:5:0;18419:215;;;18491:6;;-1:-1:-1;;;;;18491:12:0;;;:6;;:12;;;;:30;;-1:-1:-1;18507:6:0;;-1:-1:-1;;;;;18507:14:0;;;:6;;:14;;18491:30;18487:147;;;-1:-1:-1;;;;;18525:20:0;;;;;;;:14;:20;;;;;;18548:12;18525:35;;;;18562:18;;;;;;;;:33;;;18597:20;;;;;;;:35;18670:8;18042:645;-1:-1:-1;;;;18042:645:0:o;17711:323::-;17779:4;7964:6;;-1:-1:-1;;;;;17803:15:0;;;7964:6;;17803:15;;;;:45;;-1:-1:-1;7937:7:0;7964:6;-1:-1:-1;;;;;17835:13:0;;;7964:6;;17835:13;;17803:45;:84;;;;-1:-1:-1;;;;;;17866:21:0;;;;;;:17;:21;;;;;;;;17865:22;17803:84;:125;;;;-1:-1:-1;;;;;;17905:23:0;;;;;;:17;:23;;;;;;;;17904:24;17803:125;:152;;;;-1:-1:-1;;;;;;17945:10:0;;5801:42;17945:10;;17803:152;:185;;;;-1:-1:-1;;;;;;17972:16:0;;;;17803:185;:223;;;;-1:-1:-1;;;;;;18005:21:0;;18021:4;18005:21;;17803:223;17796:230;17711:323;-1:-1:-1;;;17711:323:0:o;20952:1257::-;7025:16;:23;;-1:-1:-1;;;;7025:23:0;-1:-1:-1;;;7025:23:0;;;21060:16;;:6:::1;21041:16:::0;:35:::1;::::0;21060:16;21041:35:::1;:::i;:::-;21037:66:::0;21096:7:::1;21037:66;21217:11:::0;;21198:16;;21217:6:::1;21179:16:::0;21113:17:::1;::::0;21234:1:::1;::::0;21217:11;;21179:35:::1;::::0;21198:16;21179:35:::1;:::i;:::-;:49;;;;:::i;:::-;21158:6;:16:::0;21135:39:::1;::::0;:20;:39:::1;:::i;:::-;21134:95;;;;:::i;:::-;21133:102;;;;:::i;:::-;21113:122:::0;-1:-1:-1;21248:20:0::1;21271:32;21113:122:::0;21271:20;:32:::1;:::i;:::-;21248:55;;21314:30;21331:12;21314:16;:30::i;:::-;21519:11:::0;;21500:16;;21519:6:::1;21481:16:::0;21382:21:::1;::::0;21357:22:::1;::::0;21536:1:::1;::::0;21481:35:::1;::::0;21500:16;21481:35:::1;:::i;:::-;:49;;;;:::i;:::-;21460:6;:16:::0;21443:33:::1;::::0;:14;:33:::1;:::i;:::-;21442:89;;;;:::i;:::-;21441:96;;;;:::i;:::-;21414:123:::0;-1:-1:-1;21556:13:0;;21552:161:::1;;21586:41;21599:9;21610:16;21586:12;:41::i;:::-;21647:54;::::0;;6327:25:1;;;6383:2;6368:18;;6361:34;;;6411:18;;;6404:34;;;21647:54:0::1;::::0;6315:2:1;6300:18;21647:54:0::1;;;;;;;21552:161;21750:21;::::0;-1:-1:-1;21786:18:0;;21782:420:::1;;21896:11:::0;;21877:16;;21821:14:::1;::::0;21877:30:::1;::::0;::::1;:::i;:::-;21856:16:::0;;21839:33:::1;::::0;:14;:33:::1;:::i;:::-;21838:70;;;;:::i;:::-;21994:11:::0;;21975:16;;21821:87;;-1:-1:-1;21923:15:0::1;::::0;21975:30:::1;::::0;21994:11;21975:30:::1;:::i;:::-;21959:11:::0;;21942:28:::1;::::0;:14;:28:::1;:::i;:::-;21941:65;;;;:::i;:::-;22082:10;::::0;22074:43:::1;::::0;21923:83;;-1:-1:-1;22042:4:0::1;::::0;-1:-1:-1;;;;;22082:10:0;;::::1;::::0;22106:6;;22074:43:::1;::::0;;;22106:6;22082:10;22074:43:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;22153:11:0::1;::::0;22145:45:::1;::::0;22061:56;;-1:-1:-1;;;;;;22153:11:0::1;::::0;22178:7;;22145:45:::1;::::0;;;22178:7;22153:11;22145:45:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;21782:420:0::1;21026:1183;;;;7059:1;-1:-1:-1::0;7071:16:0;:24;;-1:-1:-1;;;;7071:24:0;;;20952:1257::o;24102:582::-;24224:16;;24202:4;;24224:16;;24219:221;;24257:28;24276:4;24282:2;24257:18;:28::i;:::-;24305:16;;;;24304:17;:41;;;;;24325:20;24336:4;24342:2;24325:10;:20::i;:::-;24300:129;;;24366:47;;-1:-1:-1;;;24366:47:0;;22861:2:1;24366:47:0;;;22843:21:1;22900:2;22880:18;;;22873:30;22939:34;22919:18;;;22912:62;-1:-1:-1;;;22990:18:1;;;22983:35;23035:19;;24366:47:0;22659:401:1;24300:129:0;-1:-1:-1;;;;;24451:13:0;;;;;;:7;:13;;;;;:23;;24468:6;;24451:13;:23;;24468:6;;24451:23;:::i;:::-;;;;-1:-1:-1;24485:22:0;;-1:-1:-1;24511:7:0;24510:48;;24552:6;24510:48;;;24522:27;24532:4;24538:2;24542:6;24522:9;:27::i;:::-;-1:-1:-1;;;;;24573:11:0;;;;;;:7;:11;;;;;:29;;24485:73;;-1:-1:-1;24485:73:0;;24573:11;;;:29;;24485:73;;24573:29;:::i;:::-;;;;;;;;24635:2;-1:-1:-1;;;;;24620:34:0;24629:4;-1:-1:-1;;;;;24620:34:0;;24639:14;24620:34;;;;3919:25:1;;3907:2;3892:18;;3773:177;24620:34:0;;;;;;;;-1:-1:-1;24672:4:0;;24102:582;-1:-1:-1;;;;;24102:582:0:o;22217:417::-;22308:16;;;22322:1;22308:16;;;;;;;;22284:21;;22308:16;;;;;;;;;;-1:-1:-1;22308:16:0;22284:40;;22353:4;22335;22340:1;22335:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22335:23:0;;;:7;;;;;;;;;;:23;;;;22379:9;;:16;;;-1:-1:-1;;;22379:16:0;;;;:9;;;;;:14;;:16;;;;;22335:7;;22379:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22369:4;22374:1;22369:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22369:26:0;;;:7;;;;;;;;;:26;22408:9;;:218;;-1:-1:-1;;;22408:218:0;;:9;;;:60;;:218;;22483:11;;22408:9;;22553:4;;22580;;22600:15;;22408:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22273:361;22217:417;:::o;22642:335::-;22723:9;;-1:-1:-1;;;;;22723:9:0;:25;22756:9;22789:4;22809:11;22723:9;;22921:7;7937;7964:6;-1:-1:-1;;;;;7964:6:0;;7899:79;22921:7;22943:15;22723:246;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22642:335;;:::o;22985:486::-;23067:16;;;;23066:17;23058:65;;;;-1:-1:-1;;;23058:65:0;;24252:2:1;23058:65:0;;;24234:21:1;24291:2;24271:18;;;24264:30;24330:34;24310:18;;;24303:62;-1:-1:-1;;;24381:18:1;;;24374:33;24424:19;;23058:65:0;24050:399:1;23058:65:0;23139:20;23150:4;23156:2;23139:10;:20::i;:::-;23138:21;:37;;;;-1:-1:-1;23169:6:0;;-1:-1:-1;;;;;23163:12:0;;;23169:6;;23163:12;23138:37;23134:330;;;23211:12;23196;:27;-1:-1:-1;;;;;23240:23:0;;;;;;:17;:23;;;;;;;;;:30;;-1:-1:-1;;23240:30:0;;;23266:4;23240:30;;;;;;23285:16;:23;;;;;;;;;23338:15;23323:12;:30;23370:21;:28;;-1:-1:-1;;;;23370:28:0;-1:-1:-1;;;23370:28:0;;;23418:34;;1793:41:1;;;23418:34:0;;1766:18:1;23418:34:0;;;;;;;23134:330;22985:486;;:::o;24692:689::-;24832:6;;24771:7;;;;-1:-1:-1;;;;;24832:6:0;;;24826:12;;;;24822:187;;-1:-1:-1;24866:12:0;;24822:187;;;24924:6;;-1:-1:-1;;;;;24924:6:0;;;24916:14;;;;24912:97;;-1:-1:-1;24946:4:0;:11;24912:97;;;-1:-1:-1;24991:16:0;;24912:97;25025:20;25036:4;25042:2;25025:10;:20::i;:::-;25021:142;;;25065:13;;:18;;:42;;;25087:13;;25105:1;25087:20;;25065:42;25061:91;;;25128:8;;;25061:91;25173:17;5407:5;25194:19;25203:10;25194:6;:19;:::i;:::-;:38;;;;:::i;:::-;25260:4;25244:22;;;;:7;:22;;;;;:37;;25173:60;;-1:-1:-1;25173:60:0;;25244:22;;;:37;;25173:60;;25244:37;:::i;:::-;;;;-1:-1:-1;;25297:40:0;;3919:25:1;;;25320:4:0;;-1:-1:-1;;;;;25297:40:0;;;;;3907:2:1;3892:18;25297:40:0;;;;;;;25355:18;25364:9;25355:6;:18;:::i;:::-;25348:25;24692:689;-1:-1:-1;;;;;;24692:689:0:o;222:597:1:-;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;660:6;657:1;654:13;651:91;;;730:1;725:2;716:6;705:9;701:22;697:31;690:42;651:91;-1:-1:-1;803:2:1;782:15;-1:-1:-1;;778:29:1;763:45;;;;810:2;759:54;;222:597;-1:-1:-1;;;222:597:1:o;1058:131::-;-1:-1:-1;;;;;1133:31:1;;1123:42;;1113:70;;1179:1;1176;1169:12;1113:70;1058:131;:::o;1194:134::-;1262:20;;1291:31;1262:20;1291:31;:::i;:::-;1194:134;;;:::o;1333:315::-;1401:6;1409;1462:2;1450:9;1441:7;1437:23;1433:32;1430:52;;;1478:1;1475;1468:12;1430:52;1517:9;1504:23;1536:31;1561:5;1536:31;:::i;:::-;1586:5;1638:2;1623:18;;;;1610:32;;-1:-1:-1;;;1333:315:1:o;1845:127::-;1906:10;1901:3;1897:20;1894:1;1887:31;1937:4;1934:1;1927:15;1961:4;1958:1;1951:15;1977:275;2048:2;2042:9;2113:2;2094:13;;-1:-1:-1;;2090:27:1;2078:40;;2148:18;2133:34;;2169:22;;;2130:62;2127:88;;;2195:18;;:::i;:::-;2231:2;2224:22;1977:275;;-1:-1:-1;1977:275:1:o;2257:183::-;2317:4;2350:18;2342:6;2339:30;2336:56;;;2372:18;;:::i;:::-;-1:-1:-1;2417:1:1;2413:14;2429:4;2409:25;;2257:183::o;2445:737::-;2499:5;2552:3;2545:4;2537:6;2533:17;2529:27;2519:55;;2570:1;2567;2560:12;2519:55;2606:6;2593:20;2632:4;2656:60;2672:43;2712:2;2672:43;:::i;:::-;2656:60;:::i;:::-;2750:15;;;2836:1;2832:10;;;;2820:23;;2816:32;;;2781:12;;;;2860:15;;;2857:35;;;2888:1;2885;2878:12;2857:35;2924:2;2916:6;2912:15;2936:217;2952:6;2947:3;2944:15;2936:217;;;3032:3;3019:17;3049:31;3074:5;3049:31;:::i;:::-;3093:18;;3131:12;;;;2969;;2936:217;;;-1:-1:-1;3171:5:1;2445:737;-1:-1:-1;;;;;;2445:737:1:o;3187:160::-;3252:20;;3308:13;;3301:21;3291:32;;3281:60;;3337:1;3334;3327:12;3352:416;3442:6;3450;3503:2;3491:9;3482:7;3478:23;3474:32;3471:52;;;3519:1;3516;3509:12;3471:52;3559:9;3546:23;3592:18;3584:6;3581:30;3578:50;;;3624:1;3621;3614:12;3578:50;3647:61;3700:7;3691:6;3680:9;3676:22;3647:61;:::i;:::-;3637:71;;;3727:35;3758:2;3747:9;3743:18;3727:35;:::i;:::-;3717:45;;3352:416;;;;;:::o;3955:456::-;4032:6;4040;4048;4101:2;4089:9;4080:7;4076:23;4072:32;4069:52;;;4117:1;4114;4107:12;4069:52;4156:9;4143:23;4175:31;4200:5;4175:31;:::i;:::-;4225:5;-1:-1:-1;4282:2:1;4267:18;;4254:32;4295:33;4254:32;4295:33;:::i;:::-;3955:456;;4347:7;;-1:-1:-1;;;4401:2:1;4386:18;;;;4373:32;;3955:456::o;4416:248::-;4484:6;4492;4545:2;4533:9;4524:7;4520:23;4516:32;4513:52;;;4561:1;4558;4551:12;4513:52;-1:-1:-1;;4584:23:1;;;4654:2;4639:18;;;4626:32;;-1:-1:-1;4416:248:1:o;4669:662::-;4723:5;4776:3;4769:4;4761:6;4757:17;4753:27;4743:55;;4794:1;4791;4784:12;4743:55;4830:6;4817:20;4856:4;4880:60;4896:43;4936:2;4896:43;:::i;4880:60::-;4974:15;;;5060:1;5056:10;;;;5044:23;;5040:32;;;5005:12;;;;5084:15;;;5081:35;;;5112:1;5109;5102:12;5081:35;5148:2;5140:6;5136:15;5160:142;5176:6;5171:3;5168:15;5160:142;;;5242:17;;5230:30;;5280:12;;;;5193;;5160:142;;5336:595;5454:6;5462;5515:2;5503:9;5494:7;5490:23;5486:32;5483:52;;;5531:1;5528;5521:12;5483:52;5571:9;5558:23;5600:18;5641:2;5633:6;5630:14;5627:34;;;5657:1;5654;5647:12;5627:34;5680:61;5733:7;5724:6;5713:9;5709:22;5680:61;:::i;:::-;5670:71;;5794:2;5783:9;5779:18;5766:32;5750:48;;5823:2;5813:8;5810:16;5807:36;;;5839:1;5836;5829:12;5807:36;;5862:63;5917:7;5906:8;5895:9;5891:24;5862:63;:::i;:::-;5852:73;;;5336:595;;;;;:::o;6449:247::-;6508:6;6561:2;6549:9;6540:7;6536:23;6532:32;6529:52;;;6577:1;6574;6567:12;6529:52;6616:9;6603:23;6635:31;6660:5;6635:31;:::i;6701:315::-;6766:6;6774;6827:2;6815:9;6806:7;6802:23;6798:32;6795:52;;;6843:1;6840;6833:12;6795:52;6882:9;6869:23;6901:31;6926:5;6901:31;:::i;:::-;6951:5;-1:-1:-1;6975:35:1;7006:2;6991:18;;6975:35;:::i;7021:531::-;7064:5;7117:3;7110:4;7102:6;7098:17;7094:27;7084:55;;7135:1;7132;7125:12;7084:55;7171:6;7158:20;7197:18;7193:2;7190:26;7187:52;;;7219:18;;:::i;:::-;7263:55;7306:2;7287:13;;-1:-1:-1;;7283:27:1;7312:4;7279:38;7263:55;:::i;:::-;7343:2;7334:7;7327:19;7389:3;7382:4;7377:2;7369:6;7365:15;7361:26;7358:35;7355:55;;;7406:1;7403;7396:12;7355:55;7471:2;7464:4;7456:6;7452:17;7445:4;7436:7;7432:18;7419:55;7519:1;7494:16;;;7512:4;7490:27;7483:38;;;;7498:7;7021:531;-1:-1:-1;;;7021:531:1:o;7557:1215::-;7740:6;7748;7756;7764;7772;7780;7788;7841:3;7829:9;7820:7;7816:23;7812:33;7809:53;;;7858:1;7855;7848:12;7809:53;7898:9;7885:23;7927:18;7968:2;7960:6;7957:14;7954:34;;;7984:1;7981;7974:12;7954:34;8007:50;8049:7;8040:6;8029:9;8025:22;8007:50;:::i;:::-;7997:60;;8110:2;8099:9;8095:18;8082:32;8066:48;;8139:2;8129:8;8126:16;8123:36;;;8155:1;8152;8145:12;8123:36;8178:52;8222:7;8211:8;8200:9;8196:24;8178:52;:::i;:::-;8168:62;;8277:2;8266:9;8262:18;8249:32;8239:42;;8300:38;8334:2;8323:9;8319:18;8300:38;:::i;:::-;8290:48;;8357:39;8391:3;8380:9;8376:19;8357:39;:::i;:::-;8347:49;;8449:3;8438:9;8434:19;8421:33;8405:49;;8479:2;8469:8;8466:16;8463:36;;;8495:1;8492;8485:12;8463:36;8518:63;8573:7;8562:8;8551:9;8547:24;8518:63;:::i;:::-;8508:73;;8634:3;8623:9;8619:19;8606:33;8590:49;;8664:2;8654:8;8651:16;8648:36;;;8680:1;8677;8670:12;8648:36;;8703:63;8758:7;8747:8;8736:9;8732:24;8703:63;:::i;:::-;8693:73;;;7557:1215;;;;;;;;;;:::o;8777:180::-;8833:6;8886:2;8874:9;8865:7;8861:23;8857:32;8854:52;;;8902:1;8899;8892:12;8854:52;8925:26;8941:9;8925:26;:::i;8962:316::-;9039:6;9047;9055;9108:2;9096:9;9087:7;9083:23;9079:32;9076:52;;;9124:1;9121;9114:12;9076:52;-1:-1:-1;;9147:23:1;;;9217:2;9202:18;;9189:32;;-1:-1:-1;9268:2:1;9253:18;;;9240:32;;8962:316;-1:-1:-1;8962:316:1:o;9283:404::-;9367:6;9375;9428:2;9416:9;9407:7;9403:23;9399:32;9396:52;;;9444:1;9441;9434:12;9396:52;9483:9;9470:23;9502:31;9527:5;9502:31;:::i;:::-;9552:5;-1:-1:-1;9609:2:1;9594:18;;9581:32;9622:33;9581:32;9622:33;:::i;:::-;9674:7;9664:17;;;9283:404;;;;;:::o;10085:385::-;10171:6;10179;10187;10195;10248:3;10236:9;10227:7;10223:23;10219:33;10216:53;;;10265:1;10262;10255:12;10216:53;-1:-1:-1;;10288:23:1;;;10358:2;10343:18;;10330:32;;-1:-1:-1;10409:2:1;10394:18;;10381:32;;10460:2;10445:18;10432:32;;-1:-1:-1;10085:385:1;-1:-1:-1;10085:385:1:o;10475:380::-;10554:1;10550:12;;;;10597;;;10618:61;;10672:4;10664:6;10660:17;10650:27;;10618:61;10725:2;10717:6;10714:14;10694:18;10691:38;10688:161;;10771:10;10766:3;10762:20;10759:1;10752:31;10806:4;10803:1;10796:15;10834:4;10831:1;10824:15;10688:161;;10475:380;;;:::o;10860:340::-;11062:2;11044:21;;;11101:2;11081:18;;;11074:30;-1:-1:-1;;;11135:2:1;11120:18;;11113:46;11191:2;11176:18;;10860:340::o;11205:127::-;11266:10;11261:3;11257:20;11254:1;11247:31;11297:4;11294:1;11287:15;11321:4;11318:1;11311:15;11337:127;11398:10;11393:3;11389:20;11386:1;11379:31;11429:4;11426:1;11419:15;11453:4;11450:1;11443:15;11469:135;11508:3;11529:17;;;11526:43;;11549:18;;:::i;:::-;-1:-1:-1;11596:1:1;11585:13;;11469:135::o;11609:125::-;11649:4;11677:1;11674;11671:8;11668:34;;;11682:18;;:::i;:::-;-1:-1:-1;11719:9:1;;11609:125::o;11739:168::-;11779:7;11845:1;11841;11837:6;11833:14;11830:1;11827:21;11822:1;11815:9;11808:17;11804:45;11801:71;;;11852:18;;:::i;:::-;-1:-1:-1;11892:9:1;;11739:168::o;11912:217::-;11952:1;11978;11968:132;;12022:10;12017:3;12013:20;12010:1;12003:31;12057:4;12054:1;12047:15;12085:4;12082:1;12075:15;11968:132;-1:-1:-1;12114:9:1;;11912:217::o;12134:401::-;12336:2;12318:21;;;12375:2;12355:18;;;12348:30;12414:34;12409:2;12394:18;;12387:62;-1:-1:-1;;;12480:2:1;12465:18;;12458:35;12525:3;12510:19;;12134:401::o;12899:418::-;13101:2;13083:21;;;13140:2;13120:18;;;13113:30;13179:34;13174:2;13159:18;;13152:62;-1:-1:-1;;;13245:2:1;13230:18;;13223:52;13307:3;13292:19;;12899:418::o;13322:128::-;13362:3;13393:1;13389:6;13386:1;13383:13;13380:39;;;13399:18;;:::i;:::-;-1:-1:-1;13435:9:1;;13322:128::o;13455:425::-;13657:2;13639:21;;;13696:2;13676:18;;;13669:30;13735:34;13730:2;13715:18;;13708:62;13806:31;13801:2;13786:18;;13779:59;13870:3;13855:19;;13455:425::o;14362:545::-;14464:2;14459:3;14456:11;14453:448;;;14500:1;14525:5;14521:2;14514:17;14570:4;14566:2;14556:19;14640:2;14628:10;14624:19;14621:1;14617:27;14611:4;14607:38;14676:4;14664:10;14661:20;14658:47;;;-1:-1:-1;14699:4:1;14658:47;14754:2;14749:3;14745:12;14742:1;14738:20;14732:4;14728:31;14718:41;;14809:82;14827:2;14820:5;14817:13;14809:82;;;14872:17;;;14853:1;14842:13;14809:82;;15083:1352;15209:3;15203:10;15236:18;15228:6;15225:30;15222:56;;;15258:18;;:::i;:::-;15287:97;15377:6;15337:38;15369:4;15363:11;15337:38;:::i;:::-;15331:4;15287:97;:::i;:::-;15439:4;;15503:2;15492:14;;15520:1;15515:663;;;;16222:1;16239:6;16236:89;;;-1:-1:-1;16291:19:1;;;16285:26;16236:89;-1:-1:-1;;15040:1:1;15036:11;;;15032:24;15028:29;15018:40;15064:1;15060:11;;;15015:57;16338:81;;15485:944;;15515:663;14309:1;14302:14;;;14346:4;14333:18;;-1:-1:-1;;15551:20:1;;;15669:236;15683:7;15680:1;15677:14;15669:236;;;15772:19;;;15766:26;15751:42;;15864:27;;;;15832:1;15820:14;;;;15699:19;;15669:236;;;15673:3;15933:6;15924:7;15921:19;15918:201;;;15994:19;;;15988:26;-1:-1:-1;;16077:1:1;16073:14;;;16089:3;16069:24;16065:37;16061:42;16046:58;16031:74;;15918:201;-1:-1:-1;;;;;16165:1:1;16149:14;;;16145:22;16132:36;;-1:-1:-1;15083:1352:1:o;16440:422::-;16529:1;16572:5;16529:1;16586:270;16607:7;16597:8;16594:21;16586:270;;;16666:4;16662:1;16658:6;16654:17;16648:4;16645:27;16642:53;;;16675:18;;:::i;:::-;16725:7;16715:8;16711:22;16708:55;;;16745:16;;;;16708:55;16824:22;;;;16784:15;;;;16586:270;;;16590:3;16440:422;;;;;:::o;16867:806::-;16916:5;16946:8;16936:80;;-1:-1:-1;16987:1:1;17001:5;;16936:80;17035:4;17025:76;;-1:-1:-1;17072:1:1;17086:5;;17025:76;17117:4;17135:1;17130:59;;;;17203:1;17198:130;;;;17110:218;;17130:59;17160:1;17151:10;;17174:5;;;17198:130;17235:3;17225:8;17222:17;17219:43;;;17242:18;;:::i;:::-;-1:-1:-1;;17298:1:1;17284:16;;17313:5;;17110:218;;17412:2;17402:8;17399:16;17393:3;17387:4;17384:13;17380:36;17374:2;17364:8;17361:16;17356:2;17350:4;17347:12;17343:35;17340:77;17337:159;;;-1:-1:-1;17449:19:1;;;17481:5;;17337:159;17528:34;17553:8;17547:4;17528:34;:::i;:::-;17598:6;17594:1;17590:6;17586:19;17577:7;17574:32;17571:58;;;17609:18;;:::i;:::-;17647:20;;16867:806;-1:-1:-1;;;16867:806:1:o;17678:140::-;17736:5;17765:47;17806:4;17796:8;17792:19;17786:4;17765:47;:::i;17823:251::-;17893:6;17946:2;17934:9;17925:7;17921:23;17917:32;17914:52;;;17962:1;17959;17952:12;17914:52;17994:9;17988:16;18013:31;18038:5;18013:31;:::i;18388:607::-;-1:-1:-1;;;;;18747:15:1;;;18729:34;;18794:2;18779:18;;18772:34;;;;18837:2;18822:18;;18815:34;;;;18880:2;18865:18;;18858:34;;;;18929:15;;;18923:3;18908:19;;18901:44;18709:3;18961:19;;18954:35;;;;18678:3;18663:19;;18388:607::o;19000:306::-;19088:6;19096;19104;19157:2;19145:9;19136:7;19132:23;19128:32;19125:52;;;19173:1;19170;19163:12;19125:52;19202:9;19196:16;19186:26;;19252:2;19241:9;19237:18;19231:25;19221:35;;19296:2;19285:9;19281:18;19275:25;19265:35;;19000:306;;;;;:::o;23065:980::-;23327:4;23375:3;23364:9;23360:19;23406:6;23395:9;23388:25;23432:2;23470:6;23465:2;23454:9;23450:18;23443:34;23513:3;23508:2;23497:9;23493:18;23486:31;23537:6;23572;23566:13;23603:6;23595;23588:22;23641:3;23630:9;23626:19;23619:26;;23680:2;23672:6;23668:15;23654:29;;23701:1;23711:195;23725:6;23722:1;23719:13;23711:195;;;23790:13;;-1:-1:-1;;;;;23786:39:1;23774:52;;23881:15;;;;23846:12;;;;23822:1;23740:9;23711:195;;;-1:-1:-1;;;;;;;23962:32:1;;;;23957:2;23942:18;;23935:60;-1:-1:-1;;;24026:3:1;24011:19;24004:35;23923:3;23065:980;-1:-1:-1;;;23065:980:1:o

Swarm Source

ipfs://aa40598d4452ef20384b7bac1763c7334412c8dcfdf8b955b75027f8441b03ce

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.