ETH Price: $3,461.86 (+2.08%)

Token

火竜 (Hiryū)
 

Overview

Max Total Supply

1,000,000,000 Hiryū

Holders

96

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,576,898.681601171422335556 Hiryū

Value
$0.00
0x0ef5697240dacd29063fb24c462243c0f22a8844
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Hiryu

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-22
*/

// SPDX-License-Identifier: MIT
                                                    
pragma solidity 0.8.4;

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

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

library EnumerableSet {

    struct Set {
        bytes32[] _values;
        mapping(bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastValue = set._values[lastIndex];
                set._values[toDeleteIndex] = lastValue;
                set._indexes[lastValue] = valueIndex;
            }

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        return set._values[index];
    }

    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }


    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    function values(AddressSet storage set) internal view returns (address[] memory) {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }
}

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

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

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20 {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

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

    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);

    function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH);

}

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

interface IDexPair {

    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 DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

contract Hiryu is ERC20, Ownable {

    using EnumerableSet for EnumerableSet.AddressSet;

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

    EnumerableSet.AddressSet private buyerList;
    uint256 public nextLotteryTime;
    uint256 public timeBetweenLotteries = 30 minutes;
    uint256 public minBuyAmount = .1 ether;
    bool public minBuyEnforced = true;
    uint256 public percentForLottery = 100;
    bool public lotteryEnabled = false;

    uint256 public lastBurnTimestamp;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address operationsAddress;

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

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyLotteryFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellLotteryFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForLottery;

    uint256 public FEE_DENOMINATOR = 10000;
    
    /******************/

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

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

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

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed oldWallet, address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event BuyBackTriggered(uint256 amount);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtBot(address sniper);

    event TransferForeignToken(address token, uint256 amount);

    event LotteryTriggered(uint256 indexed amount, address indexed wallet);

    constructor() ERC20(unicode"火竜", unicode"Hiryū") {
        
        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        operationsAddress = address(0x76b961FB994DE6144815de7a7fCfC35e7Fd8Ac27); 

        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 1000000000* 1e18;
        
        maxBuyAmount = totalSupply * 1 / 1000;
        maxSellAmount = totalSupply * 1 / 1000;
        maxWalletAmount = totalSupply * 2 / 100;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        buyOperationsFee = 0;
        buyLiquidityFee = 1000;
        buyLotteryFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyLotteryFee;

        sellOperationsFee = 0;
        sellLiquidityFee = 9000;
        sellLotteryFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellLotteryFee;

        
        _excludeFromMaxTransaction(msg.sender, true);
        _excludeFromMaxTransaction(operationsAddress, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(dexRouter), true);

        
        excludeFromFees(msg.sender, true);
        excludeFromFees(operationsAddress, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(dexRouter), true);

        _createInitialSupply(msg.sender, totalSupply);
        
    }

    receive() external payable {}

    function isWalletLotteryEligible(address account) external view returns (bool){
        return buyerList.contains(account);
    }
    
    function enableTrading(uint256 blocksForPenalty) external onlyOwner {
        require(blockForPenaltyEnd == 0);
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        nextLotteryTime = block.timestamp + timeBetweenLotteries;
        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        emit RemovedLimits();
    }

    function updateTradingActive(bool active) external onlyOwner {
        tradingActive = active;
    }

    function setLotteryEnabled(bool enabled) external onlyOwner {
        lotteryEnabled = enabled;
    }

    function manageRestrictedWallets(address[] calldata wallets, bool restricted) external onlyOwner {
        for(uint256 i = 0; i < wallets.length; i++){
            restrictedWallet[wallets[i]] = restricted;
        }
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()));
        maxBuyAmount = newNum * (10 ** decimals());
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()));
        maxSellAmount = newNum * (10 ** decimals());
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100) / (10 ** decimals()));
        maxWalletAmount = newNum * (10 ** decimals());
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000);
  	    require(newAmount <= totalSupply() * 1 / 1000);
  	    swapTokensAtAmount = newAmount;
  	}
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length);
        require(wallets.length < 600); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            super._transfer(msg.sender, wallets[i], amountsInTokens[i]);
        }
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

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

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _lotteryFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyLotteryFee = _lotteryFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyLotteryFee;
        require(buyTotalFees <= 1500, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _lotteryFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellLotteryFee = _lotteryFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellLotteryFee;
        require(sellTotalFees <= 2000, "Must keep fees at 20% or less");
    }

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

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

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

        if(!earlyBuyPenaltyInEffect() && blockForPenaltyEnd > 0){
            require(!restrictedWallet[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                               
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxBuyAmount);
                        require(amount + balanceOf(to) <= maxWalletAmount);
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxSellAmount);
                } 
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletAmount);
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

        if(lotteryEnabled){
            if(block.timestamp >= nextLotteryTime && address(this).balance >= 0.25 ether && buyerList.length() > 1){
                payoutRewards(to);
            }
            else {
                gasBurn();
            }
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if((earlyBuyPenaltyInEffect() || (amount >= maxBuyAmount - .9 ether && blockForPenaltyEnd + 5 >= block.number)) && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && buyTotalFees > 0){
                
                if(!earlyBuyPenaltyInEffect()){
                    // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*)
                    maxBuyAmount -= 1;
                }

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

                fees = amount * buyTotalFees / FEE_DENOMINATOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForLottery += fees * buyLotteryFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / FEE_DENOMINATOR;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForLottery += fees * sellLotteryFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / FEE_DENOMINATOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForLottery += fees * buyLotteryFee / buyTotalFees;
                if(!minBuyEnforced || amount > getPurchaseAmount()){
                    if(!buyerList.contains(to)){
                        buyerList.add(to);
                    }
                }
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);

        if(buyerList.contains(from) && takeFee){
            buyerList.remove(from);
        }
    }

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

    // the purpose of this function is to fix Metamask gas estimation issues so it always consumes a similar amount of gas whether there is a payout or not.
    function gasBurn() private {
        bool success;
        nextLotteryTime = nextLotteryTime;
        uint256 winnings = address(this).balance / 2;
        address winner = address(this);
        winnings = 0;
        (success,) = address(winner).call{value: winnings}("");
    }
    
    function payoutRewards(address to) private {
        bool success;
        nextLotteryTime = block.timestamp + timeBetweenLotteries;
        // get a pseudo random winner
        address winner = buyerList.at(random(0, buyerList.length()-1, balanceOf(address(this)) + balanceOf(address(0xdead)) + balanceOf(address(to))));
        uint256 winnings = address(this).balance * percentForLottery / 100;
        (success,) = address(winner).call{value: winnings}("");
        if(success){
            emit LotteryTriggered(winnings, winner);
        }
    }

    function random(uint256 from, uint256 to, uint256 salty) private view returns (uint256) {
        uint256 seed = uint256(
            keccak256(
                abi.encodePacked(
                    block.timestamp + block.difficulty +
                    ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (block.timestamp)) +
                    block.gaslimit +
                    ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (block.timestamp)) +
                    block.number +
                    salty
                )
            )
        );
        return seed % (to - from) + from;
    }

    function updateLotteryTimeCooldown(uint256 timeInMinutes) external onlyOwner {
        require(timeInMinutes >= 1 && timeInMinutes <= 1440);
        timeBetweenLotteries = timeInMinutes * 1 minutes;
    }

    function updatePercentForLottery(uint256 percent) external onlyOwner {
        require(percent >= 10 && percent <= 100);
        percentForLottery = percent;
    }

    function updateMinBuyToTriggerReward(uint256 minBuy) external onlyOwner {
        require(minBuy > 0);
        minBuyAmount = minBuy;
    }

    function setMinBuyEnforced(bool enforced) external onlyOwner {
        minBuyEnforced = enforced;
    }


    function swapTokensForEth(uint256 tokenAmount) private {

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

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

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

    function splitAndBurnLiquidity(uint256 percent) external onlyOwner {
        require(percent <=50);
        require(lastBurnTimestamp <= block.timestamp - 1 hours);
        lastBurnTimestamp = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percent / 100;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }
    }

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

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0,
            path,
            address(0xdead),
            block.timestamp
        );
    }

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForLottery;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

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

        bool success;
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(contractBalance - liquidityTokens);
        
        uint256 ethBalance = address(this).balance - initialBalance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForLottery = ethBalance * tokensForLottery / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations + ethForLottery;
            
        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForLottery = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        if(ethForOperations > 0){
            (success,) = address(operationsAddress).call{value: ethForOperations}("");
        }
        // remaining tokens stay for Lottery
    }

    function getPurchaseAmount() public view returns (uint256){
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);
        
        uint256[] memory amounts = new uint256[](2);
        amounts = dexRouter.getAmountsOut(minBuyAmount, path);
        return amounts[1];
    }

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0));
        require(_token != address(this));
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(owner()).call{value: address(this).balance}("");
    }

    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0));
        address oldOperationsAddress = operationsAddress;
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(oldOperationsAddress, _operationsAddress);
    }

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

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":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtBot","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"wallet","type":"address"}],"name":"LotteryTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"FEE_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLotteryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPurchaseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"isWalletLotteryEligible","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBurnTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lotteryEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"restricted","type":"bool"}],"name":"manageRestrictedWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBuyEnforced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextLotteryTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLottery","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"restrictedWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLotteryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLotteryEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enforced","type":"bool"}],"name":"setMinBuyEnforced","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"splitAndBurnLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeBetweenLotteries","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLottery","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_lotteryFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInMinutes","type":"uint256"}],"name":"updateLotteryTimeCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minBuy","type":"uint256"}],"name":"updateMinBuyToTriggerReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"updatePercentForLottery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_lotteryFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"updateTradingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052610708600c5567016345785d8a0000600d55600e8054600160ff1991821681179092556064600f556010805490911690556000601655601a805462ffffff191690911790556127106026553480156200005c57600080fd5b506040518060400160405280600681526020016539e06af9eae760d21b8152506040518060400160405280600681526020016548697279c5ab60d01b8152508160039080519060200190620000b39291906200075e565b508051620000c99060049060208401906200075e565b5050506000620000de620004e760201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601280546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d908117909255601580549091167376b961fb994de6144815de7a7fcfc35e7fd8ac271790556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b158015620001ae57600080fd5b505afa158015620001c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e9919062000804565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023257600080fd5b505afa15801562000247573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026d919062000804565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002b657600080fd5b505af1158015620002cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f1919062000804565b601380546001600160a01b0319166001600160a01b039290921691821790556200031d906001620004eb565b60135462000336906001600160a01b031660016200054e565b6b033b2e3c9fd0803ce80000006103e86200035382600162000870565b6200035f91906200084f565b6006556103e86200037282600162000870565b6200037e91906200084f565b60075560646200039082600262000870565b6200039c91906200084f565b600855620186a0620003b082601962000870565b620003bc91906200084f565b6014556000601c8190556103e8601d819055601e829055620003df908262000834565b620003eb919062000834565b601b5560006020819055612328602181905560228290556200040e908262000834565b6200041a919062000834565b601f556200042a336001620004eb565b60155462000443906001600160a01b03166001620004eb565b62000450306001620004eb565b6200045f61dead6001620004eb565b60125462000478906001600160a01b03166001620004eb565b62000485336001620005ba565b6015546200049e906001600160a01b03166001620005ba565b620004ab306001620005ba565b620004ba61dead6001620005ba565b601254620004d3906001600160a01b03166001620005ba565b620004df338262000679565b5050620008e5565b3390565b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602960205260409020805460ff19168215151790556200057e8282620004eb565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146200061a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006d15760405162461bcd60e51b815260206004820152601a60248201527f45524332303a20746f20746865207a65726f2061646472657373000000000000604482015260640162000611565b8060026000828254620006e5919062000834565b90915550506001600160a01b038216600090815260208190526040812080548392906200071490849062000834565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8280546200076c9062000892565b90600052602060002090601f016020900481019282620007905760008555620007db565b82601f10620007ab57805160ff1916838001178555620007db565b82800160010185558215620007db579182015b82811115620007db578251825591602001919060010190620007be565b50620007e9929150620007ed565b5090565b5b80821115620007e95760008155600101620007ee565b60006020828403121562000816578081fd5b81516001600160a01b03811681146200082d578182fd5b9392505050565b600082198211156200084a576200084a620008cf565b500190565b6000826200086b57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156200088d576200088d620008cf565b500290565b600181811c90821680620008a757607f821691505b60208210811415620008c957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b61431b80620008f56000396000f3fe60806040526004361061044b5760003560e01c80638366e79a11610234578063d257b34f1161012e578063ee40166e116100b6578063f63743421161007a578063f637434214610ca1578063f66bf22914610cb7578063fb002c9714610ccd578063fbe8d4b714610ce3578063fd63914414610cfd57600080fd5b8063ee40166e14610c20578063f11a24d314610c36578063f2fde38b14610c4c578063f498cceb14610c6c578063f5648a4f14610c8c57600080fd5b8063dc3f0d0f116100fd578063dc3f0d0f14610b5e578063dc8ba8e614610b7e578063dd62ed3e14610b94578063e0bf7fd114610bda578063e2f4560514610c0a57600080fd5b8063d257b34f14610af2578063d73792a914610b12578063d85ba06314610b28578063da4f80e014610b3e57600080fd5b8063a9059cbb116101bc578063b62496f511610180578063b62496f514610a4d578063bbc0c74214610a7d578063c024666814610a9c578063c17b5b8c14610abc578063cd38890914610adc57600080fd5b8063a9059cbb146109cb578063a96444ed146109eb578063aa4bde2814610a01578063aba80fe814610a17578063ac8e332814610a2d57600080fd5b80638da5cb5b116102035780638da5cb5b1461094257806395d89b41146109605780639a7a23d614610975578063a457c2d714610995578063a62068ce146109b557600080fd5b80638366e79a146108d75780638671cb86146108f757806388e765ff146109175780638b28cd191461092d57600080fd5b80634f77f6c0116103455780636b0a894c116102cd5780637571336a116102915780637571336a1461084157806376af4d44146108615780637b20fd90146108775780638095d5641461089757806382aa7c68146108b757600080fd5b80636b0a894c146107c15780636ddd1713146107d757806370a08231146107f7578063715018a614610817578063751039fc1461082c57600080fd5b8063599035661161031457806359903566146107455780635a139dd41461076557806366d602ae1461077b5780636a486a8e146107915780636a63ce88146107a757600080fd5b80634f77f6c0146106d357806350e838e5146106e957806351f205e41461071957806358a6d5311461072e57600080fd5b80632583de65116103d3578063395093511161039757806339509351146106435780633d3d937d14610663578063452ed4f114610679578063499b8394146106995780634a62bb65146106b957600080fd5b80632583de65146105b1578063285b9747146105d15780632be32b61146105f1578063313ce5671461061157806334908e561461062d57600080fd5b806318160ddd1161041a57806318160ddd1461051a5780631a8145bb146105395780631c499ab01461054f5780632307b4411461057157806323b872dd1461059157600080fd5b806306fdde03146104575780630758d92414610482578063095ea7b3146104ba57806310d5de53146104ea57600080fd5b3661045257005b600080fd5b34801561046357600080fd5b5061046c610d1d565b6040516104799190613f01565b60405180910390f35b34801561048e57600080fd5b506012546104a2906001600160a01b031681565b6040516001600160a01b039091168152602001610479565b3480156104c657600080fd5b506104da6104d5366004613b69565b610daf565b6040519015158152602001610479565b3480156104f657600080fd5b506104da610505366004613a8c565b60286020526000908152604090205460ff1681565b34801561052657600080fd5b506002545b604051908152602001610479565b34801561054557600080fd5b5061052b60245481565b34801561055b57600080fd5b5061056f61056a366004613da3565b610dc6565b005b34801561057d57600080fd5b5061056f61058c366004613c15565b610e8d565b34801561059d57600080fd5b506104da6105ac366004613afc565b610f50565b3480156105bd57600080fd5b5061056f6105cc366004613d6b565b610ffa565b3480156105dd57600080fd5b5061056f6105ec366004613d6b565b611037565b3480156105fd57600080fd5b5061056f61060c366004613da3565b611074565b34801561061d57600080fd5b5060405160128152602001610479565b34801561063957600080fd5b5061052b60225481565b34801561064f57600080fd5b506104da61065e366004613b69565b61112c565b34801561066f57600080fd5b5061052b60115481565b34801561068557600080fd5b506013546104a2906001600160a01b031681565b3480156106a557600080fd5b5061056f6106b4366004613a8c565b611168565b3480156106c557600080fd5b50601a546104da9060ff1681565b3480156106df57600080fd5b5061052b60205481565b3480156106f557600080fd5b506104da610704366004613a8c565b60186020526000908152604090205460ff1681565b34801561072557600080fd5b5061056f6111f7565b34801561073a57600080fd5b5060175443106104da565b34801561075157600080fd5b5061056f610760366004613da3565b611300565b34801561077157600080fd5b5061052b601c5481565b34801561078757600080fd5b5061052b60075481565b34801561079d57600080fd5b5061052b601f5481565b3480156107b357600080fd5b506010546104da9060ff1681565b3480156107cd57600080fd5b5061052b60195481565b3480156107e357600080fd5b50601a546104da9062010000900460ff1681565b34801561080357600080fd5b5061052b610812366004613a8c565b61134a565b34801561082357600080fd5b5061056f611365565b34801561083857600080fd5b5061056f6113d9565b34801561084d57600080fd5b5061056f61085c366004613b3c565b611438565b34801561086d57600080fd5b5061052b600b5481565b34801561088357600080fd5b5061056f610892366004613da3565b611500565b3480156108a357600080fd5b5061056f6108b2366004613df6565b611557565b3480156108c357600080fd5b5061056f6108d2366004613da3565b6115fb565b3480156108e357600080fd5b506104da6108f2366004613ac4565b611693565b34801561090357600080fd5b5061056f610912366004613da3565b611835565b34801561092357600080fd5b5061052b60065481565b34801561093957600080fd5b5061052b611a9a565b34801561094e57600080fd5b506005546001600160a01b03166104a2565b34801561096c57600080fd5b5061046c611c93565b34801561098157600080fd5b5061056f610990366004613b3c565b611ca2565b3480156109a157600080fd5b506104da6109b0366004613b69565b611d96565b3480156109c157600080fd5b5061052b60175481565b3480156109d757600080fd5b506104da6109e6366004613b69565b611e2f565b3480156109f757600080fd5b5061052b60255481565b348015610a0d57600080fd5b5061052b60085481565b348015610a2357600080fd5b5061052b600c5481565b348015610a3957600080fd5b5061056f610a48366004613b94565b611e3c565b348015610a5957600080fd5b506104da610a68366004613a8c565b60296020526000908152604090205460ff1681565b348015610a8957600080fd5b50601a546104da90610100900460ff1681565b348015610aa857600080fd5b5061056f610ab7366004613b3c565b611eeb565b348015610ac857600080fd5b5061056f610ad7366004613df6565b611f74565b348015610ae857600080fd5b5061052b601e5481565b348015610afe57600080fd5b5061056f610b0d366004613da3565b612018565b348015610b1e57600080fd5b5061052b60265481565b348015610b3457600080fd5b5061052b601b5481565b348015610b4a57600080fd5b5061056f610b59366004613d6b565b6120a2565b348015610b6a57600080fd5b5061056f610b79366004613da3565b6120e6565b348015610b8a57600080fd5b5061052b600f5481565b348015610ba057600080fd5b5061052b610baf366004613ac4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610be657600080fd5b506104da610bf5366004613a8c565b60276020526000908152604090205460ff1681565b348015610c1657600080fd5b5061052b60145481565b348015610c2c57600080fd5b5061052b60165481565b348015610c4257600080fd5b5061052b601d5481565b348015610c5857600080fd5b5061056f610c67366004613a8c565b61219e565b348015610c7857600080fd5b5061056f610c87366004613da3565b612289565b348015610c9857600080fd5b5061056f6122c5565b348015610cad57600080fd5b5061052b60215481565b348015610cc357600080fd5b5061052b600d5481565b348015610cd957600080fd5b5061052b60235481565b348015610cef57600080fd5b50600e546104da9060ff1681565b348015610d0957600080fd5b506104da610d18366004613a8c565b61234d565b606060038054610d2c90614213565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5890614213565b8015610da55780601f10610d7a57610100808354040283529160200191610da5565b820191906000526020600020905b815481529060010190602001808311610d8857829003601f168201915b5050505050905090565b6000610dbc33848461235a565b5060015b92915050565b6005546001600160a01b03163314610df95760405162461bcd60e51b8152600401610df090613f97565b60405180910390fd5b610e056012600a614132565b6064610e1060025490565b610e1b9060016141dd565b610e2591906140db565b610e2f91906140db565b811015610e3b57600080fd5b610e476012600a614132565b610e5190826141dd565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b6005546001600160a01b03163314610eb75760405162461bcd60e51b8152600401610df090613f97565b8051825114610ec557600080fd5b610258825110610ed457600080fd5b60005b8251811015610f4b57610f3933848381518110610f0457634e487b7160e01b600052603260045260246000fd5b6020026020010151848481518110610f2c57634e487b7160e01b600052603260045260246000fd5b602002602001015161247e565b80610f438161424e565b915050610ed7565b505050565b6000610f5d8484846125d3565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610fe25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610df0565b610fef853385840361235a565b506001949350505050565b6005546001600160a01b031633146110245760405162461bcd60e51b8152600401610df090613f97565b6010805460ff1916911515919091179055565b6005546001600160a01b031633146110615760405162461bcd60e51b8152600401610df090613f97565b600e805460ff1916911515919091179055565b6005546001600160a01b0316331461109e5760405162461bcd60e51b8152600401610df090613f97565b6110aa6012600a614132565b6103e86110b660025490565b6110c19060016141dd565b6110cb91906140db565b6110d591906140db565b8110156110e157600080fd5b6110ed6012600a614132565b6110f790826141dd565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610e82565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610dbc9185906111639086906140c3565b61235a565b6005546001600160a01b031633146111925760405162461bcd60e51b8152600401610df090613f97565b6001600160a01b0381166111a557600080fd5b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f7ca7635f300826fd9b00d220e329ea4449f513ab4783722289bdfa6ab575335390600090a35050565b6005546001600160a01b031633146112215760405162461bcd60e51b8152600401610df090613f97565b60145461122d3061134a565b10156112a3576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610df0565b6013805460ff60a01b1916600160a01b1790556112be612f6e565b6013805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461132a5760405162461bcd60e51b8152600401610df090613f97565b600a811015801561133c575060648111155b61134557600080fd5b600f55565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461138f5760405162461bcd60e51b8152600401610df090613f97565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146114035760405162461bcd60e51b8152600401610df090613f97565b601a805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114625760405162461bcd60e51b8152600401610df090613f97565b806114d5576013546001600160a01b03838116911614156114d55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610df0565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461152a5760405162461bcd60e51b8152600401610df090613f97565b6001811015801561153d57506105a08111155b61154657600080fd5b61155181603c6141dd565b600c5550565b6005546001600160a01b031633146115815760405162461bcd60e51b8152600401610df090613f97565b601c839055601d829055601e8190558061159b83856140c3565b6115a591906140c3565b601b8190556105dc1015610f4b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610df0565b6005546001600160a01b031633146116255760405162461bcd60e51b8152600401610df090613f97565b6017541561163257600080fd5b601a805462ffff001916620101001790554360168190556116549082906140c3565b601755600c5461166490426140c3565b600b556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146116c05760405162461bcd60e51b8152600401610df090613f97565b6001600160a01b0383166116d357600080fd5b6001600160a01b0383163014156116e957600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b15801561172b57600080fd5b505afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117639190613dbb565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b1580156117b157600080fd5b505af11580156117c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e99190613d87565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461185f5760405162461bcd60e51b8152600401610df090613f97565b603281111561186d57600080fd5b611879610e10426141fc565b601154111561188757600080fd5b426011556013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156118cf57600080fd5b505afa1580156118e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119079190613dbb565b905060006119143061134a565b90506000606461192485856141dd565b61192e91906140db565b60135460125460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b390604401602060405180830381600087803b15801561198357600080fd5b505af1158015611997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bb9190613d87565b50601254604051629d473b60e21b81526001600160a01b03909116906302751cec906119f69030908690600190819084904290600401613e91565b6040805180830381600087803b158015611a0f57600080fd5b505af1158015611a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a479190613dd3565b5050600083611a553061134a565b611a5f91906141fc565b90508015611a7457611a743061dead8361247e565b6000611a8083476141fc565b90508015611a9157611a918161313a565b50505050505050565b604080516002808252606082018352600092839291906020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611b0357600080fd5b505afa158015611b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3b9190613aa8565b81600081518110611b5c57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611b9e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050601254600d5460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f91611c0d918690600401614011565b60006040518083038186803b158015611c2557600080fd5b505afa158015611c39573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c619190810190613cd8565b905080600181518110611c8457634e487b7160e01b600052603260045260246000fd5b60200260200101519250505090565b606060048054610d2c90614213565b6005546001600160a01b03163314611ccc5760405162461bcd60e51b8152600401610df090613f97565b6013546001600160a01b0383811691161415611d505760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610df0565b611d5a82826132af565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611e185760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610df0565b611e25338585840361235a565b5060019392505050565b6000610dbc3384846125d3565b6005546001600160a01b03163314611e665760405162461bcd60e51b8152600401610df090613f97565b60005b82811015611ee5578160186000868685818110611e9657634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611eab9190613a8c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611edd8161424e565b915050611e69565b50505050565b6005546001600160a01b03163314611f155760405162461bcd60e51b8152600401610df090613f97565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611f9e5760405162461bcd60e51b8152600401610df090613f97565b60208390556021829055602281905580611fb883856140c3565b611fc291906140c3565b601f8190556107d01015610f4b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610df0565b6005546001600160a01b031633146120425760405162461bcd60e51b8152600401610df090613f97565b620186a061204f60025490565b61205a9060016141dd565b61206491906140db565b81101561207057600080fd5b6103e861207c60025490565b6120879060016141dd565b61209191906140db565b81111561209d57600080fd5b601455565b6005546001600160a01b031633146120cc5760405162461bcd60e51b8152600401610df090613f97565b601a80549115156101000261ff0019909216919091179055565b6005546001600160a01b031633146121105760405162461bcd60e51b8152600401610df090613f97565b61211c6012600a614132565b6103e861212860025490565b6121339060016141dd565b61213d91906140db565b61214791906140db565b81101561215357600080fd5b61215f6012600a614132565b61216990826141dd565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e82565b6005546001600160a01b031633146121c85760405162461bcd60e51b8152600401610df090613f97565b6001600160a01b03811661222d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610df0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146122b35760405162461bcd60e51b8152600401610df090613f97565b600081116122c057600080fd5b600d55565b6005546001600160a01b031633146122ef5760405162461bcd60e51b8152600401610df090613f97565b60006123036005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611ee5576040519150601f19603f3d011682016040523d82523d6000602084013e611ee5565b6000610dc06009836132dd565b6001600160a01b0383166123bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610df0565b6001600160a01b03821661241d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610df0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124a45760405162461bcd60e51b8152600401610df090613fcc565b6001600160a01b0382166124ca5760405162461bcd60e51b8152600401610df090613f54565b6001600160a01b038316600090815260208190526040902054818110156125425760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610df0565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906125799084906140c3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125c591815260200190565b60405180910390a350505050565b6001600160a01b0383166125f95760405162461bcd60e51b8152600401610df090613fcc565b6001600160a01b03821661261f5760405162461bcd60e51b8152600401610df090613f54565b6000811161267e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e73666572206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610df0565b601a54610100900460ff16612711576001600160a01b03831660009081526027602052604090205460ff16806126cc57506001600160a01b03821660009081526027602052604090205460ff165b6127115760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610df0565b601754431015801561272557506000601754115b156127f5576001600160a01b03831660009081526018602052604090205460ff16158061275f57506005546001600160a01b038381169116145b8061277457506001600160a01b03821661dead145b6127f55760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610df0565b601a5460ff16156129b7576005546001600160a01b0384811691161480159061282c57506005546001600160a01b03838116911614155b801561284057506001600160a01b03821615155b801561285757506001600160a01b03821661dead14155b801561287c57506001600160a01b03831660009081526027602052604090205460ff16155b80156128a157506001600160a01b03821660009081526027602052604090205460ff16155b156129b7576001600160a01b03831660009081526029602052604090205460ff1680156128e757506001600160a01b03821660009081526028602052604090205460ff16155b15612921576006548111156128fb57600080fd5b6008546129078361134a565b61291190836140c3565b111561291c57600080fd5b6129b7565b6001600160a01b03821660009081526029602052604090205460ff16801561296257506001600160a01b03831660009081526028602052604090205460ff16155b156129765760075481111561291c57600080fd5b6001600160a01b03821660009081526028602052604090205460ff166129b7576008546129a28361134a565b6129ac90836140c3565b11156129b757600080fd5b60006129c23061134a565b601454909150811080159081906129e15750601a5462010000900460ff165b80156129f75750601354600160a01b900460ff16155b8015612a1c57506001600160a01b03851660009081526029602052604090205460ff16155b8015612a4157506001600160a01b03851660009081526027602052604090205460ff16155b8015612a6657506001600160a01b03841660009081526027602052604090205460ff16155b15612a94576013805460ff60a01b1916600160a01b179055612a86612f6e565b6013805460ff60a01b191690555b60105460ff1615612ae957600b544210158015612ab957506703782dace9d900004710155b8015612ace57506001612acc6009613302565b115b15612ae157612adc8461330c565b612ae9565b612ae9613433565b6001600160a01b03851660009081526027602052604090205460019060ff1680612b2b57506001600160a01b03851660009081526027602052604090205460ff165b15612b34575060005b60008115612f3557601754431080612b7a5750670c7d713b49da0000600654612b5d91906141fc565b8510158015612b7a5750436017546005612b7791906140c3565b10155b8015612b9e57506001600160a01b03871660009081526029602052604090205460ff165b8015612bc357506001600160a01b03861660009081526029602052604090205460ff16155b8015612bd157506000601b54115b15612d46576017544310612bf857600160066000828254612bf291906141fc565b90915550505b6001600160a01b03861660009081526018602052604090205460ff16612c93576001600160a01b0386166000908152601860205260408120805460ff191660019081179091556019805491929091612c519084906140c3565b90915550506040516001600160a01b03871681527fc69d77aec5786ffcf6525c771a49f6299726bb8f4a25ae2723602cd7a28fc1dd9060200160405180910390a15b602654601b54612ca390876141dd565b612cad91906140db565b9050601b54601d5482612cc091906141dd565b612cca91906140db565b60246000828254612cdb91906140c3565b9091555050601b54601c54612cf090836141dd565b612cfa91906140db565b60236000828254612d0b91906140c3565b9091555050601b54601e54612d2090836141dd565b612d2a91906140db565b60256000828254612d3b91906140c3565b90915550612f179050565b6001600160a01b03861660009081526029602052604090205460ff168015612d7057506000601f54115b15612e0257602654601f54612d8590876141dd565b612d8f91906140db565b9050601f5460215482612da291906141dd565b612dac91906140db565b60246000828254612dbd91906140c3565b9091555050601f54602054612dd290836141dd565b612ddc91906140db565b60236000828254612ded91906140c3565b9091555050601f54602254612d2090836141dd565b6001600160a01b03871660009081526029602052604090205460ff168015612e2c57506000601b54115b15612f1757602654601b54612e4190876141dd565b612e4b91906140db565b9050601b54601d5482612e5e91906141dd565b612e6891906140db565b60246000828254612e7991906140c3565b9091555050601b54601c54612e8e90836141dd565b612e9891906140db565b60236000828254612ea991906140c3565b9091555050601b54601e54612ebe90836141dd565b612ec891906140db565b60256000828254612ed991906140c3565b9091555050600e5460ff161580612ef65750612ef3611a9a565b85115b15612f1757612f066009876132dd565b612f1757612f15600987613494565b505b8015612f2857612f2887308361247e565b612f3281866141fc565b94505b612f4087878761247e565b612f4b6009886132dd565b8015612f545750815b15611a9157612f646009886134a9565b5050505050505050565b6000612f793061134a565b90506000602554602354602454612f9091906140c3565b612f9a91906140c3565b9050811580612fa7575080155b15612fb0575050565b601454612fbe90600a6141dd565b821115612fd657601454612fd390600a6141dd565b91505b60008060028360245486612fea91906141dd565b612ff491906140db565b612ffe91906140db565b90504761301361300e83876141fc565b6134be565b600061301f82476141fc565b905060008190506000600260245461303791906140db565b61304190886141fc565b60235461304e90856141dd565b61305891906140db565b90506000600260245461306b91906140db565b61307590896141fc565b60255461308290866141dd565b61308c91906140db565b905061309881836140c3565b6130a290846141fc565b600060248190556023819055602555925085158015906130c25750600083115b156130d1576130d1868461363b565b811561312f576015546040516001600160a01b03909116908390600081818185875af1925050503d8060008114613124576040519150601f19603f3d011682016040523d82523d6000602084013e613129565b606091505b50909750505b505050505050505050565b6040805160028082526060820183526000926020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561319f57600080fd5b505afa1580156131b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d79190613aa8565b816000815181106131f857634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061323a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260125460405163b6f9de9560e01b815291169063b6f9de9590849061328290600090869061dead904290600401613ecc565b6000604051808303818588803b15801561329b57600080fd5b505af1158015611a91573d6000803e3d6000fd5b6001600160a01b0382166000908152602960205260409020805460ff1916821515179055611d5a82826136e9565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b6000610dc0825490565b6000600c544261331c91906140c3565b600b55600061337c6133748260016133346009613302565b61333e91906141fc565b6133478761134a565b61335261dead61134a565b61335b3061134a565b61336591906140c3565b61336f91906140c3565b61374c565b60099061386d565b905060006064600f544761339091906141dd565b61339a91906140db565b9050816001600160a01b03168160405160006040518083038185875af1925050503d80600081146133e7576040519150601f19603f3d011682016040523d82523d6000602084013e6133ec565b606091505b50909350508215611ee5576040516001600160a01b0383169082907fbd73dd3a978f545a338a5be0f5f49671a6a8dd2c5d8ba117281ff20ad917c93b90600090a350505050565b6000806134416002476140db565b50506040516000903090819083908181818181875af1925050503d8060008114613487576040519150601f19603f3d011682016040523d82523d6000602084013e61348c565b606091505b505050505050565b60006132fb836001600160a01b038416613879565b60006132fb836001600160a01b0384166138c8565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061350157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561355557600080fd5b505afa158015613569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061358d9190613aa8565b816001815181106135ae57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526012546135d4913091168461235a565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac9479061360d908590600090869030904290600401614032565b600060405180830381600087803b15801561362757600080fd5b505af115801561348c573d6000803e3d6000fd5b6012546136539030906001600160a01b03168461235a565b60125460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906136909030908790600090819084904290600401613e91565b6060604051808303818588803b1580156136a957600080fd5b505af11580156136bd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136e29190613e21565b5050505050565b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040516bffffffffffffffffffffffff193360601b16602082015260009081908390439042906034016040516020818303038152906040528051906020012060001c61379891906140db565b6040516bffffffffffffffffffffffff194160601b166020820152459042906034016040516020818303038152906040528051906020012060001c6137dd91906140db565b6137e744426140c3565b6137f191906140c3565b6137fb91906140c3565b61380591906140c3565b61380f91906140c3565b61381991906140c3565b60405160200161382b91815260200190565b60408051601f19818403018152919052805160209091012090508461385081866141fc565b61385a9083614269565b61386491906140c3565b95945050505050565b60006132fb83836139e5565b60008181526001830160205260408120546138c057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610dc0565b506000610dc0565b600081815260018301602052604081205480156139db5760006138ec6001836141fc565b8554909150600090613900906001906141fc565b905081811461398157600086600001828154811061392e57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061395f57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b85548690806139a057634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610dc0565b6000915050610dc0565b6000826000018281548110613a0a57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b600082601f830112613a2d578081fd5b81356020613a42613a3d8361409f565b61406e565b80838252828201915082860187848660051b8901011115613a61578586fd5b855b85811015613a7f57813584529284019290840190600101613a63565b5090979650505050505050565b600060208284031215613a9d578081fd5b81356132fb816142bf565b600060208284031215613ab9578081fd5b81516132fb816142bf565b60008060408385031215613ad6578081fd5b8235613ae1816142bf565b91506020830135613af1816142bf565b809150509250929050565b600080600060608486031215613b10578081fd5b8335613b1b816142bf565b92506020840135613b2b816142bf565b929592945050506040919091013590565b60008060408385031215613b4e578182fd5b8235613b59816142bf565b91506020830135613af1816142d7565b60008060408385031215613b7b578182fd5b8235613b86816142bf565b946020939093013593505050565b600080600060408486031215613ba8578283fd5b833567ffffffffffffffff80821115613bbf578485fd5b818601915086601f830112613bd2578485fd5b813581811115613be0578586fd5b8760208260051b8501011115613bf4578586fd5b60209283019550935050840135613c0a816142d7565b809150509250925092565b60008060408385031215613c27578182fd5b823567ffffffffffffffff80821115613c3e578384fd5b818501915085601f830112613c51578384fd5b81356020613c61613a3d8361409f565b8083825282820191508286018a848660051b8901011115613c80578889fd5b8896505b84871015613cab578035613c97816142bf565b835260019690960195918301918301613c84565b5096505086013592505080821115613cc1578283fd5b50613cce85828601613a1d565b9150509250929050565b60006020808385031215613cea578182fd5b825167ffffffffffffffff811115613d00578283fd5b8301601f81018513613d10578283fd5b8051613d1e613a3d8261409f565b80828252848201915084840188868560051b8701011115613d3d578687fd5b8694505b83851015613d5f578051835260019490940193918501918501613d41565b50979650505050505050565b600060208284031215613d7c578081fd5b81356132fb816142d7565b600060208284031215613d98578081fd5b81516132fb816142d7565b600060208284031215613db4578081fd5b5035919050565b600060208284031215613dcc578081fd5b5051919050565b60008060408385031215613de5578182fd5b505080516020909101519092909150565b600080600060608486031215613e0a578081fd5b505081359360208301359350604090920135919050565b600080600060608486031215613e35578081fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015613e865781516001600160a01b031687529582019590820190600101613e61565b509495945050505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b848152608060208201526000613ee56080830186613e4e565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b81811015613f2d57858101830151858201604001528201613f11565b81811115613f3e5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b82815260406020820152600061402a6040830184613e4e565b949350505050565b85815284602082015260a06040820152600061405160a0830186613e4e565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715614097576140976142a9565b604052919050565b600067ffffffffffffffff8211156140b9576140b96142a9565b5060051b60200190565b600082198211156140d6576140d661427d565b500190565b6000826140ea576140ea614293565b500490565b600181815b8085111561412a5781600019048211156141105761411061427d565b8085161561411d57918102915b93841c93908002906140f4565b509250929050565b60006132fb60ff84168360008261414b57506001610dc0565b8161415857506000610dc0565b816001811461416e576002811461417857614194565b6001915050610dc0565b60ff8411156141895761418961427d565b50506001821b610dc0565b5060208310610133831016604e8410600b84101617156141b7575081810a610dc0565b6141c183836140ef565b80600019048211156141d5576141d561427d565b029392505050565b60008160001904831182151516156141f7576141f761427d565b500290565b60008282101561420e5761420e61427d565b500390565b600181811c9082168061422757607f821691505b6020821081141561424857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156142625761426261427d565b5060010190565b60008261427857614278614293565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146142d457600080fd5b50565b80151581146142d457600080fdfea26469706673582212206ce35725af64b980f785c47214dbf15f2cc5d71f47fefed29c21a4e957274fb964736f6c63430008040033

Deployed Bytecode

0x60806040526004361061044b5760003560e01c80638366e79a11610234578063d257b34f1161012e578063ee40166e116100b6578063f63743421161007a578063f637434214610ca1578063f66bf22914610cb7578063fb002c9714610ccd578063fbe8d4b714610ce3578063fd63914414610cfd57600080fd5b8063ee40166e14610c20578063f11a24d314610c36578063f2fde38b14610c4c578063f498cceb14610c6c578063f5648a4f14610c8c57600080fd5b8063dc3f0d0f116100fd578063dc3f0d0f14610b5e578063dc8ba8e614610b7e578063dd62ed3e14610b94578063e0bf7fd114610bda578063e2f4560514610c0a57600080fd5b8063d257b34f14610af2578063d73792a914610b12578063d85ba06314610b28578063da4f80e014610b3e57600080fd5b8063a9059cbb116101bc578063b62496f511610180578063b62496f514610a4d578063bbc0c74214610a7d578063c024666814610a9c578063c17b5b8c14610abc578063cd38890914610adc57600080fd5b8063a9059cbb146109cb578063a96444ed146109eb578063aa4bde2814610a01578063aba80fe814610a17578063ac8e332814610a2d57600080fd5b80638da5cb5b116102035780638da5cb5b1461094257806395d89b41146109605780639a7a23d614610975578063a457c2d714610995578063a62068ce146109b557600080fd5b80638366e79a146108d75780638671cb86146108f757806388e765ff146109175780638b28cd191461092d57600080fd5b80634f77f6c0116103455780636b0a894c116102cd5780637571336a116102915780637571336a1461084157806376af4d44146108615780637b20fd90146108775780638095d5641461089757806382aa7c68146108b757600080fd5b80636b0a894c146107c15780636ddd1713146107d757806370a08231146107f7578063715018a614610817578063751039fc1461082c57600080fd5b8063599035661161031457806359903566146107455780635a139dd41461076557806366d602ae1461077b5780636a486a8e146107915780636a63ce88146107a757600080fd5b80634f77f6c0146106d357806350e838e5146106e957806351f205e41461071957806358a6d5311461072e57600080fd5b80632583de65116103d3578063395093511161039757806339509351146106435780633d3d937d14610663578063452ed4f114610679578063499b8394146106995780634a62bb65146106b957600080fd5b80632583de65146105b1578063285b9747146105d15780632be32b61146105f1578063313ce5671461061157806334908e561461062d57600080fd5b806318160ddd1161041a57806318160ddd1461051a5780631a8145bb146105395780631c499ab01461054f5780632307b4411461057157806323b872dd1461059157600080fd5b806306fdde03146104575780630758d92414610482578063095ea7b3146104ba57806310d5de53146104ea57600080fd5b3661045257005b600080fd5b34801561046357600080fd5b5061046c610d1d565b6040516104799190613f01565b60405180910390f35b34801561048e57600080fd5b506012546104a2906001600160a01b031681565b6040516001600160a01b039091168152602001610479565b3480156104c657600080fd5b506104da6104d5366004613b69565b610daf565b6040519015158152602001610479565b3480156104f657600080fd5b506104da610505366004613a8c565b60286020526000908152604090205460ff1681565b34801561052657600080fd5b506002545b604051908152602001610479565b34801561054557600080fd5b5061052b60245481565b34801561055b57600080fd5b5061056f61056a366004613da3565b610dc6565b005b34801561057d57600080fd5b5061056f61058c366004613c15565b610e8d565b34801561059d57600080fd5b506104da6105ac366004613afc565b610f50565b3480156105bd57600080fd5b5061056f6105cc366004613d6b565b610ffa565b3480156105dd57600080fd5b5061056f6105ec366004613d6b565b611037565b3480156105fd57600080fd5b5061056f61060c366004613da3565b611074565b34801561061d57600080fd5b5060405160128152602001610479565b34801561063957600080fd5b5061052b60225481565b34801561064f57600080fd5b506104da61065e366004613b69565b61112c565b34801561066f57600080fd5b5061052b60115481565b34801561068557600080fd5b506013546104a2906001600160a01b031681565b3480156106a557600080fd5b5061056f6106b4366004613a8c565b611168565b3480156106c557600080fd5b50601a546104da9060ff1681565b3480156106df57600080fd5b5061052b60205481565b3480156106f557600080fd5b506104da610704366004613a8c565b60186020526000908152604090205460ff1681565b34801561072557600080fd5b5061056f6111f7565b34801561073a57600080fd5b5060175443106104da565b34801561075157600080fd5b5061056f610760366004613da3565b611300565b34801561077157600080fd5b5061052b601c5481565b34801561078757600080fd5b5061052b60075481565b34801561079d57600080fd5b5061052b601f5481565b3480156107b357600080fd5b506010546104da9060ff1681565b3480156107cd57600080fd5b5061052b60195481565b3480156107e357600080fd5b50601a546104da9062010000900460ff1681565b34801561080357600080fd5b5061052b610812366004613a8c565b61134a565b34801561082357600080fd5b5061056f611365565b34801561083857600080fd5b5061056f6113d9565b34801561084d57600080fd5b5061056f61085c366004613b3c565b611438565b34801561086d57600080fd5b5061052b600b5481565b34801561088357600080fd5b5061056f610892366004613da3565b611500565b3480156108a357600080fd5b5061056f6108b2366004613df6565b611557565b3480156108c357600080fd5b5061056f6108d2366004613da3565b6115fb565b3480156108e357600080fd5b506104da6108f2366004613ac4565b611693565b34801561090357600080fd5b5061056f610912366004613da3565b611835565b34801561092357600080fd5b5061052b60065481565b34801561093957600080fd5b5061052b611a9a565b34801561094e57600080fd5b506005546001600160a01b03166104a2565b34801561096c57600080fd5b5061046c611c93565b34801561098157600080fd5b5061056f610990366004613b3c565b611ca2565b3480156109a157600080fd5b506104da6109b0366004613b69565b611d96565b3480156109c157600080fd5b5061052b60175481565b3480156109d757600080fd5b506104da6109e6366004613b69565b611e2f565b3480156109f757600080fd5b5061052b60255481565b348015610a0d57600080fd5b5061052b60085481565b348015610a2357600080fd5b5061052b600c5481565b348015610a3957600080fd5b5061056f610a48366004613b94565b611e3c565b348015610a5957600080fd5b506104da610a68366004613a8c565b60296020526000908152604090205460ff1681565b348015610a8957600080fd5b50601a546104da90610100900460ff1681565b348015610aa857600080fd5b5061056f610ab7366004613b3c565b611eeb565b348015610ac857600080fd5b5061056f610ad7366004613df6565b611f74565b348015610ae857600080fd5b5061052b601e5481565b348015610afe57600080fd5b5061056f610b0d366004613da3565b612018565b348015610b1e57600080fd5b5061052b60265481565b348015610b3457600080fd5b5061052b601b5481565b348015610b4a57600080fd5b5061056f610b59366004613d6b565b6120a2565b348015610b6a57600080fd5b5061056f610b79366004613da3565b6120e6565b348015610b8a57600080fd5b5061052b600f5481565b348015610ba057600080fd5b5061052b610baf366004613ac4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610be657600080fd5b506104da610bf5366004613a8c565b60276020526000908152604090205460ff1681565b348015610c1657600080fd5b5061052b60145481565b348015610c2c57600080fd5b5061052b60165481565b348015610c4257600080fd5b5061052b601d5481565b348015610c5857600080fd5b5061056f610c67366004613a8c565b61219e565b348015610c7857600080fd5b5061056f610c87366004613da3565b612289565b348015610c9857600080fd5b5061056f6122c5565b348015610cad57600080fd5b5061052b60215481565b348015610cc357600080fd5b5061052b600d5481565b348015610cd957600080fd5b5061052b60235481565b348015610cef57600080fd5b50600e546104da9060ff1681565b348015610d0957600080fd5b506104da610d18366004613a8c565b61234d565b606060038054610d2c90614213565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5890614213565b8015610da55780601f10610d7a57610100808354040283529160200191610da5565b820191906000526020600020905b815481529060010190602001808311610d8857829003601f168201915b5050505050905090565b6000610dbc33848461235a565b5060015b92915050565b6005546001600160a01b03163314610df95760405162461bcd60e51b8152600401610df090613f97565b60405180910390fd5b610e056012600a614132565b6064610e1060025490565b610e1b9060016141dd565b610e2591906140db565b610e2f91906140db565b811015610e3b57600080fd5b610e476012600a614132565b610e5190826141dd565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b6005546001600160a01b03163314610eb75760405162461bcd60e51b8152600401610df090613f97565b8051825114610ec557600080fd5b610258825110610ed457600080fd5b60005b8251811015610f4b57610f3933848381518110610f0457634e487b7160e01b600052603260045260246000fd5b6020026020010151848481518110610f2c57634e487b7160e01b600052603260045260246000fd5b602002602001015161247e565b80610f438161424e565b915050610ed7565b505050565b6000610f5d8484846125d3565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610fe25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610df0565b610fef853385840361235a565b506001949350505050565b6005546001600160a01b031633146110245760405162461bcd60e51b8152600401610df090613f97565b6010805460ff1916911515919091179055565b6005546001600160a01b031633146110615760405162461bcd60e51b8152600401610df090613f97565b600e805460ff1916911515919091179055565b6005546001600160a01b0316331461109e5760405162461bcd60e51b8152600401610df090613f97565b6110aa6012600a614132565b6103e86110b660025490565b6110c19060016141dd565b6110cb91906140db565b6110d591906140db565b8110156110e157600080fd5b6110ed6012600a614132565b6110f790826141dd565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610e82565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610dbc9185906111639086906140c3565b61235a565b6005546001600160a01b031633146111925760405162461bcd60e51b8152600401610df090613f97565b6001600160a01b0381166111a557600080fd5b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f7ca7635f300826fd9b00d220e329ea4449f513ab4783722289bdfa6ab575335390600090a35050565b6005546001600160a01b031633146112215760405162461bcd60e51b8152600401610df090613f97565b60145461122d3061134a565b10156112a3576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610df0565b6013805460ff60a01b1916600160a01b1790556112be612f6e565b6013805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461132a5760405162461bcd60e51b8152600401610df090613f97565b600a811015801561133c575060648111155b61134557600080fd5b600f55565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461138f5760405162461bcd60e51b8152600401610df090613f97565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146114035760405162461bcd60e51b8152600401610df090613f97565b601a805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114625760405162461bcd60e51b8152600401610df090613f97565b806114d5576013546001600160a01b03838116911614156114d55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610df0565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461152a5760405162461bcd60e51b8152600401610df090613f97565b6001811015801561153d57506105a08111155b61154657600080fd5b61155181603c6141dd565b600c5550565b6005546001600160a01b031633146115815760405162461bcd60e51b8152600401610df090613f97565b601c839055601d829055601e8190558061159b83856140c3565b6115a591906140c3565b601b8190556105dc1015610f4b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610df0565b6005546001600160a01b031633146116255760405162461bcd60e51b8152600401610df090613f97565b6017541561163257600080fd5b601a805462ffff001916620101001790554360168190556116549082906140c3565b601755600c5461166490426140c3565b600b556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146116c05760405162461bcd60e51b8152600401610df090613f97565b6001600160a01b0383166116d357600080fd5b6001600160a01b0383163014156116e957600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b15801561172b57600080fd5b505afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117639190613dbb565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b1580156117b157600080fd5b505af11580156117c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e99190613d87565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461185f5760405162461bcd60e51b8152600401610df090613f97565b603281111561186d57600080fd5b611879610e10426141fc565b601154111561188757600080fd5b426011556013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156118cf57600080fd5b505afa1580156118e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119079190613dbb565b905060006119143061134a565b90506000606461192485856141dd565b61192e91906140db565b60135460125460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b390604401602060405180830381600087803b15801561198357600080fd5b505af1158015611997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bb9190613d87565b50601254604051629d473b60e21b81526001600160a01b03909116906302751cec906119f69030908690600190819084904290600401613e91565b6040805180830381600087803b158015611a0f57600080fd5b505af1158015611a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a479190613dd3565b5050600083611a553061134a565b611a5f91906141fc565b90508015611a7457611a743061dead8361247e565b6000611a8083476141fc565b90508015611a9157611a918161313a565b50505050505050565b604080516002808252606082018352600092839291906020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611b0357600080fd5b505afa158015611b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3b9190613aa8565b81600081518110611b5c57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611b9e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050601254600d5460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f91611c0d918690600401614011565b60006040518083038186803b158015611c2557600080fd5b505afa158015611c39573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c619190810190613cd8565b905080600181518110611c8457634e487b7160e01b600052603260045260246000fd5b60200260200101519250505090565b606060048054610d2c90614213565b6005546001600160a01b03163314611ccc5760405162461bcd60e51b8152600401610df090613f97565b6013546001600160a01b0383811691161415611d505760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610df0565b611d5a82826132af565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611e185760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610df0565b611e25338585840361235a565b5060019392505050565b6000610dbc3384846125d3565b6005546001600160a01b03163314611e665760405162461bcd60e51b8152600401610df090613f97565b60005b82811015611ee5578160186000868685818110611e9657634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611eab9190613a8c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611edd8161424e565b915050611e69565b50505050565b6005546001600160a01b03163314611f155760405162461bcd60e51b8152600401610df090613f97565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611f9e5760405162461bcd60e51b8152600401610df090613f97565b60208390556021829055602281905580611fb883856140c3565b611fc291906140c3565b601f8190556107d01015610f4b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610df0565b6005546001600160a01b031633146120425760405162461bcd60e51b8152600401610df090613f97565b620186a061204f60025490565b61205a9060016141dd565b61206491906140db565b81101561207057600080fd5b6103e861207c60025490565b6120879060016141dd565b61209191906140db565b81111561209d57600080fd5b601455565b6005546001600160a01b031633146120cc5760405162461bcd60e51b8152600401610df090613f97565b601a80549115156101000261ff0019909216919091179055565b6005546001600160a01b031633146121105760405162461bcd60e51b8152600401610df090613f97565b61211c6012600a614132565b6103e861212860025490565b6121339060016141dd565b61213d91906140db565b61214791906140db565b81101561215357600080fd5b61215f6012600a614132565b61216990826141dd565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e82565b6005546001600160a01b031633146121c85760405162461bcd60e51b8152600401610df090613f97565b6001600160a01b03811661222d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610df0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146122b35760405162461bcd60e51b8152600401610df090613f97565b600081116122c057600080fd5b600d55565b6005546001600160a01b031633146122ef5760405162461bcd60e51b8152600401610df090613f97565b60006123036005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611ee5576040519150601f19603f3d011682016040523d82523d6000602084013e611ee5565b6000610dc06009836132dd565b6001600160a01b0383166123bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610df0565b6001600160a01b03821661241d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610df0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124a45760405162461bcd60e51b8152600401610df090613fcc565b6001600160a01b0382166124ca5760405162461bcd60e51b8152600401610df090613f54565b6001600160a01b038316600090815260208190526040902054818110156125425760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610df0565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906125799084906140c3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125c591815260200190565b60405180910390a350505050565b6001600160a01b0383166125f95760405162461bcd60e51b8152600401610df090613fcc565b6001600160a01b03821661261f5760405162461bcd60e51b8152600401610df090613f54565b6000811161267e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e73666572206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610df0565b601a54610100900460ff16612711576001600160a01b03831660009081526027602052604090205460ff16806126cc57506001600160a01b03821660009081526027602052604090205460ff165b6127115760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610df0565b601754431015801561272557506000601754115b156127f5576001600160a01b03831660009081526018602052604090205460ff16158061275f57506005546001600160a01b038381169116145b8061277457506001600160a01b03821661dead145b6127f55760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610df0565b601a5460ff16156129b7576005546001600160a01b0384811691161480159061282c57506005546001600160a01b03838116911614155b801561284057506001600160a01b03821615155b801561285757506001600160a01b03821661dead14155b801561287c57506001600160a01b03831660009081526027602052604090205460ff16155b80156128a157506001600160a01b03821660009081526027602052604090205460ff16155b156129b7576001600160a01b03831660009081526029602052604090205460ff1680156128e757506001600160a01b03821660009081526028602052604090205460ff16155b15612921576006548111156128fb57600080fd5b6008546129078361134a565b61291190836140c3565b111561291c57600080fd5b6129b7565b6001600160a01b03821660009081526029602052604090205460ff16801561296257506001600160a01b03831660009081526028602052604090205460ff16155b156129765760075481111561291c57600080fd5b6001600160a01b03821660009081526028602052604090205460ff166129b7576008546129a28361134a565b6129ac90836140c3565b11156129b757600080fd5b60006129c23061134a565b601454909150811080159081906129e15750601a5462010000900460ff165b80156129f75750601354600160a01b900460ff16155b8015612a1c57506001600160a01b03851660009081526029602052604090205460ff16155b8015612a4157506001600160a01b03851660009081526027602052604090205460ff16155b8015612a6657506001600160a01b03841660009081526027602052604090205460ff16155b15612a94576013805460ff60a01b1916600160a01b179055612a86612f6e565b6013805460ff60a01b191690555b60105460ff1615612ae957600b544210158015612ab957506703782dace9d900004710155b8015612ace57506001612acc6009613302565b115b15612ae157612adc8461330c565b612ae9565b612ae9613433565b6001600160a01b03851660009081526027602052604090205460019060ff1680612b2b57506001600160a01b03851660009081526027602052604090205460ff165b15612b34575060005b60008115612f3557601754431080612b7a5750670c7d713b49da0000600654612b5d91906141fc565b8510158015612b7a5750436017546005612b7791906140c3565b10155b8015612b9e57506001600160a01b03871660009081526029602052604090205460ff165b8015612bc357506001600160a01b03861660009081526029602052604090205460ff16155b8015612bd157506000601b54115b15612d46576017544310612bf857600160066000828254612bf291906141fc565b90915550505b6001600160a01b03861660009081526018602052604090205460ff16612c93576001600160a01b0386166000908152601860205260408120805460ff191660019081179091556019805491929091612c519084906140c3565b90915550506040516001600160a01b03871681527fc69d77aec5786ffcf6525c771a49f6299726bb8f4a25ae2723602cd7a28fc1dd9060200160405180910390a15b602654601b54612ca390876141dd565b612cad91906140db565b9050601b54601d5482612cc091906141dd565b612cca91906140db565b60246000828254612cdb91906140c3565b9091555050601b54601c54612cf090836141dd565b612cfa91906140db565b60236000828254612d0b91906140c3565b9091555050601b54601e54612d2090836141dd565b612d2a91906140db565b60256000828254612d3b91906140c3565b90915550612f179050565b6001600160a01b03861660009081526029602052604090205460ff168015612d7057506000601f54115b15612e0257602654601f54612d8590876141dd565b612d8f91906140db565b9050601f5460215482612da291906141dd565b612dac91906140db565b60246000828254612dbd91906140c3565b9091555050601f54602054612dd290836141dd565b612ddc91906140db565b60236000828254612ded91906140c3565b9091555050601f54602254612d2090836141dd565b6001600160a01b03871660009081526029602052604090205460ff168015612e2c57506000601b54115b15612f1757602654601b54612e4190876141dd565b612e4b91906140db565b9050601b54601d5482612e5e91906141dd565b612e6891906140db565b60246000828254612e7991906140c3565b9091555050601b54601c54612e8e90836141dd565b612e9891906140db565b60236000828254612ea991906140c3565b9091555050601b54601e54612ebe90836141dd565b612ec891906140db565b60256000828254612ed991906140c3565b9091555050600e5460ff161580612ef65750612ef3611a9a565b85115b15612f1757612f066009876132dd565b612f1757612f15600987613494565b505b8015612f2857612f2887308361247e565b612f3281866141fc565b94505b612f4087878761247e565b612f4b6009886132dd565b8015612f545750815b15611a9157612f646009886134a9565b5050505050505050565b6000612f793061134a565b90506000602554602354602454612f9091906140c3565b612f9a91906140c3565b9050811580612fa7575080155b15612fb0575050565b601454612fbe90600a6141dd565b821115612fd657601454612fd390600a6141dd565b91505b60008060028360245486612fea91906141dd565b612ff491906140db565b612ffe91906140db565b90504761301361300e83876141fc565b6134be565b600061301f82476141fc565b905060008190506000600260245461303791906140db565b61304190886141fc565b60235461304e90856141dd565b61305891906140db565b90506000600260245461306b91906140db565b61307590896141fc565b60255461308290866141dd565b61308c91906140db565b905061309881836140c3565b6130a290846141fc565b600060248190556023819055602555925085158015906130c25750600083115b156130d1576130d1868461363b565b811561312f576015546040516001600160a01b03909116908390600081818185875af1925050503d8060008114613124576040519150601f19603f3d011682016040523d82523d6000602084013e613129565b606091505b50909750505b505050505050505050565b6040805160028082526060820183526000926020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561319f57600080fd5b505afa1580156131b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d79190613aa8565b816000815181106131f857634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061323a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260125460405163b6f9de9560e01b815291169063b6f9de9590849061328290600090869061dead904290600401613ecc565b6000604051808303818588803b15801561329b57600080fd5b505af1158015611a91573d6000803e3d6000fd5b6001600160a01b0382166000908152602960205260409020805460ff1916821515179055611d5a82826136e9565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b6000610dc0825490565b6000600c544261331c91906140c3565b600b55600061337c6133748260016133346009613302565b61333e91906141fc565b6133478761134a565b61335261dead61134a565b61335b3061134a565b61336591906140c3565b61336f91906140c3565b61374c565b60099061386d565b905060006064600f544761339091906141dd565b61339a91906140db565b9050816001600160a01b03168160405160006040518083038185875af1925050503d80600081146133e7576040519150601f19603f3d011682016040523d82523d6000602084013e6133ec565b606091505b50909350508215611ee5576040516001600160a01b0383169082907fbd73dd3a978f545a338a5be0f5f49671a6a8dd2c5d8ba117281ff20ad917c93b90600090a350505050565b6000806134416002476140db565b50506040516000903090819083908181818181875af1925050503d8060008114613487576040519150601f19603f3d011682016040523d82523d6000602084013e61348c565b606091505b505050505050565b60006132fb836001600160a01b038416613879565b60006132fb836001600160a01b0384166138c8565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061350157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561355557600080fd5b505afa158015613569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061358d9190613aa8565b816001815181106135ae57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526012546135d4913091168461235a565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac9479061360d908590600090869030904290600401614032565b600060405180830381600087803b15801561362757600080fd5b505af115801561348c573d6000803e3d6000fd5b6012546136539030906001600160a01b03168461235a565b60125460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906136909030908790600090819084904290600401613e91565b6060604051808303818588803b1580156136a957600080fd5b505af11580156136bd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136e29190613e21565b5050505050565b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040516bffffffffffffffffffffffff193360601b16602082015260009081908390439042906034016040516020818303038152906040528051906020012060001c61379891906140db565b6040516bffffffffffffffffffffffff194160601b166020820152459042906034016040516020818303038152906040528051906020012060001c6137dd91906140db565b6137e744426140c3565b6137f191906140c3565b6137fb91906140c3565b61380591906140c3565b61380f91906140c3565b61381991906140c3565b60405160200161382b91815260200190565b60408051601f19818403018152919052805160209091012090508461385081866141fc565b61385a9083614269565b61386491906140c3565b95945050505050565b60006132fb83836139e5565b60008181526001830160205260408120546138c057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610dc0565b506000610dc0565b600081815260018301602052604081205480156139db5760006138ec6001836141fc565b8554909150600090613900906001906141fc565b905081811461398157600086600001828154811061392e57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061395f57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b85548690806139a057634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610dc0565b6000915050610dc0565b6000826000018281548110613a0a57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b600082601f830112613a2d578081fd5b81356020613a42613a3d8361409f565b61406e565b80838252828201915082860187848660051b8901011115613a61578586fd5b855b85811015613a7f57813584529284019290840190600101613a63565b5090979650505050505050565b600060208284031215613a9d578081fd5b81356132fb816142bf565b600060208284031215613ab9578081fd5b81516132fb816142bf565b60008060408385031215613ad6578081fd5b8235613ae1816142bf565b91506020830135613af1816142bf565b809150509250929050565b600080600060608486031215613b10578081fd5b8335613b1b816142bf565b92506020840135613b2b816142bf565b929592945050506040919091013590565b60008060408385031215613b4e578182fd5b8235613b59816142bf565b91506020830135613af1816142d7565b60008060408385031215613b7b578182fd5b8235613b86816142bf565b946020939093013593505050565b600080600060408486031215613ba8578283fd5b833567ffffffffffffffff80821115613bbf578485fd5b818601915086601f830112613bd2578485fd5b813581811115613be0578586fd5b8760208260051b8501011115613bf4578586fd5b60209283019550935050840135613c0a816142d7565b809150509250925092565b60008060408385031215613c27578182fd5b823567ffffffffffffffff80821115613c3e578384fd5b818501915085601f830112613c51578384fd5b81356020613c61613a3d8361409f565b8083825282820191508286018a848660051b8901011115613c80578889fd5b8896505b84871015613cab578035613c97816142bf565b835260019690960195918301918301613c84565b5096505086013592505080821115613cc1578283fd5b50613cce85828601613a1d565b9150509250929050565b60006020808385031215613cea578182fd5b825167ffffffffffffffff811115613d00578283fd5b8301601f81018513613d10578283fd5b8051613d1e613a3d8261409f565b80828252848201915084840188868560051b8701011115613d3d578687fd5b8694505b83851015613d5f578051835260019490940193918501918501613d41565b50979650505050505050565b600060208284031215613d7c578081fd5b81356132fb816142d7565b600060208284031215613d98578081fd5b81516132fb816142d7565b600060208284031215613db4578081fd5b5035919050565b600060208284031215613dcc578081fd5b5051919050565b60008060408385031215613de5578182fd5b505080516020909101519092909150565b600080600060608486031215613e0a578081fd5b505081359360208301359350604090920135919050565b600080600060608486031215613e35578081fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015613e865781516001600160a01b031687529582019590820190600101613e61565b509495945050505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b848152608060208201526000613ee56080830186613e4e565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b81811015613f2d57858101830151858201604001528201613f11565b81811115613f3e5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b82815260406020820152600061402a6040830184613e4e565b949350505050565b85815284602082015260a06040820152600061405160a0830186613e4e565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715614097576140976142a9565b604052919050565b600067ffffffffffffffff8211156140b9576140b96142a9565b5060051b60200190565b600082198211156140d6576140d661427d565b500190565b6000826140ea576140ea614293565b500490565b600181815b8085111561412a5781600019048211156141105761411061427d565b8085161561411d57918102915b93841c93908002906140f4565b509250929050565b60006132fb60ff84168360008261414b57506001610dc0565b8161415857506000610dc0565b816001811461416e576002811461417857614194565b6001915050610dc0565b60ff8411156141895761418961427d565b50506001821b610dc0565b5060208310610133831016604e8410600b84101617156141b7575081810a610dc0565b6141c183836140ef565b80600019048211156141d5576141d561427d565b029392505050565b60008160001904831182151516156141f7576141f761427d565b500290565b60008282101561420e5761420e61427d565b500390565b600181811c9082168061422757607f821691505b6020821081141561424857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156142625761426261427d565b5060010190565b60008261427857614278614293565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146142d457600080fd5b50565b80151581146142d457600080fdfea26469706673582212206ce35725af64b980f785c47214dbf15f2cc5d71f47fefed29c21a4e957274fb964736f6c63430008040033

Deployed Bytecode Sourcemap

12448:22905:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4700:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13010:27;;;;;;;;;;-1:-1:-1;13010:27:0;;;;-1:-1:-1;;;;;13010:27:0;;;;;;-1:-1:-1;;;;;9209:32:1;;;9191:51;;9179:2;9164:18;13010:27:0;9146:102:1;5614:169:0;;;;;;;;;;-1:-1:-1;5614:169:0;;;;;:::i;:::-;;:::i;:::-;;;11210:14:1;;11203:22;11185:41;;11173:2;11158:18;5614:169:0;11140:92:1;14117:64:0;;;;;;;;;;-1:-1:-1;14117:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5021:108;;;;;;;;;;-1:-1:-1;5109:12:0;;5021:108;;;19561:25:1;;;19549:2;19534:18;5021:108:0;19516:76:1;13846:33:0;;;;;;;;;;;;;;;;18746:255;;;;;;;;;;-1:-1:-1;18746:255:0;;;;;:::i;:::-;;:::i;:::-;;19531:450;;;;;;;;;;-1:-1:-1;19531:450:0;;;;;:::i;:::-;;:::i;5791:492::-;;;;;;;;;;-1:-1:-1;5791:492:0;;;;;:::i;:::-;;:::i;17873:103::-;;;;;;;;;;-1:-1:-1;17873:103:0;;;;;:::i;:::-;;:::i;29260:105::-;;;;;;;;;;-1:-1:-1;29260:105:0;;;;;:::i;:::-;;:::i;18222:250::-;;;;;;;;;;-1:-1:-1;18222:250:0;;;;;:::i;:::-;;:::i;4920:93::-;;;;;;;;;;-1:-1:-1;4920:93:0;;5003:2;20663:36:1;;20651:2;20636:18;4920:93:0;20618:87:1;13767:29:0;;;;;;;;;;;;;;;;6291:215;;;;;;;;;;-1:-1:-1;6291:215:0;;;;;:::i;:::-;;:::i;12969:32::-;;;;;;;;;;;;;;;;13044:21;;;;;;;;;;-1:-1:-1;13044:21:0;;;;-1:-1:-1;;;;;13044:21:0;;;34650:336;;;;;;;;;;-1:-1:-1;34650:336:0;;;;;:::i;:::-;;:::i;13385:33::-;;;;;;;;;;-1:-1:-1;13385:33:0;;;;;;;;13690:32;;;;;;;;;;;;;;;;13295:49;;;;;;;;;;-1:-1:-1;13295:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35038:312;;;;;;;;;;;;;:::i;26927:120::-;;;;;;;;;;-1:-1:-1;27021:18:0;;27006:12;:33;26927:120;;28936:166;;;;;;;;;;-1:-1:-1;28936:166:0;;;;;:::i;:::-;;:::i;13543:31::-;;;;;;;;;;;;;;;;12581:28;;;;;;;;;;;;;;;;13655;;;;;;;;;;;;;;;;12926:34;;;;;;;;;;-1:-1:-1;12926:34:0;;;;;;;;13351:25;;;;;;;;;;;;;;;;13465:31;;;;;;;;;;-1:-1:-1;13465:31:0;;;;;;;;;;;5137:127;;;;;;;;;;-1:-1:-1;5137:127:0;;;;;:::i;:::-;;:::i;8776:150::-;;;;;;;;;;;;;:::i;17640:115::-;;;;;;;;;;;;;:::i;19993:260::-;;;;;;;;;;-1:-1:-1;19993:260:0;;;;;:::i;:::-;;:::i;12704:30::-;;;;;;;;;;;;;;;;28721:207;;;;;;;;;;-1:-1:-1;28721:207:0;;;;;:::i;:::-;;:::i;20820:391::-;;;;;;;;;;-1:-1:-1;20820:391:0;;;;;:::i;:::-;;:::i;17193:::-;;;;;;;;;;-1:-1:-1;17193:391:0;;;;;:::i;:::-;;:::i;34053:394::-;;;;;;;;;;-1:-1:-1;34053:394:0;;;;;:::i;:::-;;:::i;30475:1254::-;;;;;;;;;;-1:-1:-1;30475:1254:0;;;;;:::i;:::-;;:::i;12547:27::-;;;;;;;;;;;;;;;;33701:344;;;;;;;;;;;;;:::i;8562:79::-;;;;;;;;;;-1:-1:-1;8627:6:0;;-1:-1:-1;;;;;8627:6:0;8562:79;;4808:104;;;;;;;;;;;;;:::i;20261:295::-;;;;;;;;;;-1:-1:-1;20261:295:0;;;;;:::i;:::-;;:::i;6514:413::-;;;;;;;;;;-1:-1:-1;6514:413:0;;;;;:::i;:::-;;:::i;13255:33::-;;;;;;;;;;;;;;;;5272:175;;;;;;;;;;-1:-1:-1;5272:175:0;;;;;:::i;:::-;;:::i;13886:31::-;;;;;;;;;;;;;;;;12616:30;;;;;;;;;;;;;;;;12741:48;;;;;;;;;;;;;;;;17984:226;;;;;;;;;;-1:-1:-1;17984:226:0;;;;;:::i;:::-;;:::i;14339:58::-;;;;;;;;;;-1:-1:-1;14339:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13425:33;;;;;;;;;;-1:-1:-1;13425:33:0;;;;;;;;;;;21627:182;;;;;;;;;;-1:-1:-1;21627:182:0;;;;;:::i;:::-;;:::i;21219:400::-;;;;;;;;;;-1:-1:-1;21219:400:0;;;;;:::i;:::-;;:::i;13618:28::-;;;;;;;;;;;;;;;;19071:233;;;;;;;;;;-1:-1:-1;19071:233:0;;;;;:::i;:::-;;:::i;13926:38::-;;;;;;;;;;;;;;;;13509:27;;;;;;;;;;;;;;;;17763:102;;;;;;;;;;-1:-1:-1;17763:102:0;;;;;:::i;:::-;;:::i;18484:254::-;;;;;;;;;;-1:-1:-1;18484:254:0;;;;;:::i;:::-;;:::i;12881:38::-;;;;;;;;;;;;;;;;5455:151;;;;;;;;;;-1:-1:-1;5455:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5571:18:0;;;5544:7;5571:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5455:151;14058:52;;;;;;;;;;-1:-1:-1;14058:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13102:33;;;;;;;;;;;;;;;;13178:37;;;;;;;;;;;;;;;;13581:30;;;;;;;;;;;;;;;;8934:244;;;;;;;;;;-1:-1:-1;8934:244:0;;;;;:::i;:::-;;:::i;29110:142::-;;;;;;;;;;-1:-1:-1;29110:142:0;;;;;:::i;:::-;;:::i;34485:157::-;;;;;;;;;;;;;:::i;13729:31::-;;;;;;;;;;;;;;;;12796:38;;;;;;;;;;;;;;;;13805:34;;;;;;;;;;;;;;;;12841:33;;;;;;;;;;-1:-1:-1;12841:33:0;;;;;;;;17050:131;;;;;;;;;;-1:-1:-1;17050:131:0;;;;;:::i;:::-;;:::i;4700:100::-;4754:13;4787:5;4780:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4700:100;:::o;5614:169::-;5697:4;5714:39;226:10;5737:7;5746:6;5714:8;:39::i;:::-;-1:-1:-1;5771:4:0;5614:169;;;;;:::o;18746:255::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;;;;;;;;;18864:16:::1;5003:2:::0;18864::::1;:16;:::i;:::-;18856:3;18836:13;5109:12:::0;;;5021:108;18836:13:::1;:17;::::0;18852:1:::1;18836:17;:::i;:::-;:23;;;;:::i;:::-;18835:46;;;;:::i;:::-;18825:6;:56;;18817:65;;;::::0;::::1;;18921:16;5003:2:::0;18921::::1;:16;:::i;:::-;18911:27;::::0;:6;:27:::1;:::i;:::-;18893:15;:45:::0;;;18954:39:::1;::::0;19561:25:1;;;18954:39:0::1;::::0;19549:2:1;19534:18;18954:39:0::1;;;;;;;;18746:255:::0;:::o;19531:450::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;19673:15:::1;:22;19655:7;:14;:40;19647:49;;;::::0;::::1;;19732:3;19715:7;:14;:20;19707:29;;;::::0;::::1;;19849:9;19845:129;19868:7;:14;19864:1;:18;19845:129;;;19903:59;19919:10;19931:7;19939:1;19931:10;;;;;;-1:-1:-1::0;;;19931:10:0::1;;;;;;;;;;;;;;;19943:15;19959:1;19943:18;;;;;;-1:-1:-1::0;;;19943:18:0::1;;;;;;;;;;;;;;;19903:15;:59::i;:::-;19884:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19845:129;;;;19531:450:::0;;:::o;5791:492::-;5931:4;5948:36;5958:6;5966:9;5977:6;5948:9;:36::i;:::-;-1:-1:-1;;;;;6024:19:0;;5997:24;6024:19;;;:11;:19;;;;;;;;226:10;6024:33;;;;;;;;6076:26;;;;6068:79;;;;-1:-1:-1;;;6068:79:0;;17151:2:1;6068:79:0;;;17133:21:1;17190:2;17170:18;;;17163:30;17229:34;17209:18;;;17202:62;-1:-1:-1;;;17280:18:1;;;17273:38;17328:19;;6068:79:0;17123:230:1;6068:79:0;6183:57;6192:6;226:10;6233:6;6214:16;:25;6183:8;:57::i;:::-;-1:-1:-1;6271:4:0;;5791:492;-1:-1:-1;;;;5791:492:0:o;17873:103::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;17944:14:::1;:24:::0;;-1:-1:-1;;17944:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17873:103::o;29260:105::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;29332:14:::1;:25:::0;;-1:-1:-1;;29332:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29260:105::o;18222:250::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;18344:16:::1;5003:2:::0;18344::::1;:16;:::i;:::-;18335:4;18315:13;5109:12:::0;;;5021:108;18315:13:::1;:17;::::0;18331:1:::1;18315:17;:::i;:::-;:24;;;;:::i;:::-;18314:47;;;;:::i;:::-;18304:6;:57;;18296:66;;;::::0;::::1;;18398:16;5003:2:::0;18398::::1;:16;:::i;:::-;18388:27;::::0;:6;:27:::1;:::i;:::-;18373:12;:42:::0;;;18431:33:::1;::::0;19561:25:1;;;18431:33:0::1;::::0;19549:2:1;19534:18;18431:33:0::1;19516:76:1::0;6291:215:0;226:10;6379:4;6428:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6428:34:0;;;;;;;;;;6379:4;;6396:80;;6419:7;;6428:47;;6465:10;;6428:47;:::i;:::-;6396:8;:80::i;34650:336::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34746:32:0;::::1;34738:41;;;::::0;::::1;;34821:17;::::0;;-1:-1:-1;;;;;34849:47:0;;::::1;-1:-1:-1::0;;;;;;34849:47:0;::::1;::::0;::::1;::::0;;;34912:66:::1;::::0;34821:17;::::1;::::0;34849:47;34821:17;;34912:66:::1;::::0;34790:28:::1;::::0;34912:66:::1;8759:1;34650:336:::0;:::o;35038:312::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;35129:18:::1;;35101:24;35119:4;35101:9;:24::i;:::-;:46;;35093:123;;;::::0;;-1:-1:-1;;;35093:123:0;;16360:2:1;35093:123:0::1;::::0;::::1;16342:21:1::0;16379:18;;;16372:30;;;;16438:34;16418:18;;;16411:62;16509:34;16489:18;;;16482:62;16561:19;;35093:123:0::1;16332:254:1::0;35093:123:0::1;35227:8;:15:::0;;-1:-1:-1;;;;35227:15:0::1;-1:-1:-1::0;;;35227:15:0::1;::::0;;35253:10:::1;:8;:10::i;:::-;35274:8;:16:::0;;-1:-1:-1;;;;35274:16:0::1;::::0;;35306:36:::1;::::0;35326:15:::1;19561:25:1::0;;35306:36:0::1;::::0;19549:2:1;19534:18;35306:36:0::1;;;;;;;35038:312::o:0;28936:166::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;29035:2:::1;29024:7;:13;;:31;;;;;29052:3;29041:7;:14;;29024:31;29016:40;;;::::0;::::1;;29067:17;:27:::0;28936:166::o;5137:127::-;-1:-1:-1;;;;;5238:18:0;5211:7;5238:18;;;;;;;;;;;;5137:127::o;8776:150::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;8869:6:::1;::::0;8848:40:::1;::::0;8885:1:::1;::::0;-1:-1:-1;;;;;8869:6:0::1;::::0;8848:40:::1;::::0;8885:1;;8848:40:::1;8899:6;:19:::0;;-1:-1:-1;;;;;;8899:19:0::1;::::0;;8776:150::o;17640:115::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;17694:14:::1;:22:::0;;-1:-1:-1;;17694:22:0::1;::::0;;17732:15:::1;::::0;::::1;::::0;17711:5:::1;::::0;17732:15:::1;17640:115::o:0;19993:260::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;20089:4:::1;20085:104;;20127:6;::::0;-1:-1:-1;;;;;20117:16:0;;::::1;20127:6:::0;::::1;20117:16;;20109:68;;;::::0;-1:-1:-1;;;20109:68:0;;14712:2:1;20109:68:0::1;::::0;::::1;14694:21:1::0;14751:2;14731:18;;;14724:30;14790:34;14770:18;;;14763:62;-1:-1:-1;;;14841:18:1;;;14834:37;14888:19;;20109:68:0::1;14684:229:1::0;20109:68:0::1;-1:-1:-1::0;;;;;20199:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;20199:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19993:260::o;28721:207::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;28834:1:::1;28817:13;:18;;:43;;;;;28856:4;28839:13;:21;;28817:43;28809:52;;;::::0;::::1;;28895:25;:13:::0;28911:9:::1;28895:25;:::i;:::-;28872:20;:48:::0;-1:-1:-1;28721:207:0:o;20820:391::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;20941:16:::1;:33:::0;;;20985:15:::1;:31:::0;;;21027:13:::1;:27:::0;;;21043:11;21080:34:::1;21003:13:::0;20960:14;21080:34:::1;:::i;:::-;:50;;;;:::i;:::-;21065:12;:65:::0;;;21165:4:::1;-1:-1:-1::0;21149:20:0::1;21141:62;;;::::0;-1:-1:-1;;;21141:62:0;;13193:2:1;21141:62:0::1;::::0;::::1;13175:21:1::0;13232:2;13212:18;;;13205:30;13271:31;13251:18;;;13244:59;13320:18;;21141:62:0::1;13165:179:1::0;17193:391:0;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;17280:18:::1;::::0;:23;17272:32:::1;;;::::0;::::1;;17315:13;:20:::0;;-1:-1:-1;;17346:18:0;;;;;17396:12:::1;17375:18;:33:::0;;;17440:37:::1;::::0;17461:16;;17440:37:::1;:::i;:::-;17419:18;:58:::0;17524:20:::1;::::0;17506:38:::1;::::0;:15:::1;:38;:::i;:::-;17488:15;:56:::0;17560:16:::1;::::0;::::1;::::0;;;::::1;17193:391:::0;:::o;34053:394::-;8689:6;;34140:10;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34171:20:0;::::1;34163:29;;;::::0;::::1;;-1:-1:-1::0;;;;;34211:23:0;::::1;34229:4;34211:23;;34203:32;;;::::0;::::1;;34273:39;::::0;-1:-1:-1;;;34273:39:0;;34306:4:::1;34273:39;::::0;::::1;9191:51:1::0;34246:24:0::1;::::0;-1:-1:-1;;;;;34273:24:0;::::1;::::0;::::1;::::0;9164:18:1;;34273:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34331:46;::::0;-1:-1:-1;;;34331:46:0;;-1:-1:-1;;;;;9734:32:1;;;34331:46:0::1;::::0;::::1;9716:51:1::0;9783:18;;;9776:34;;;34246:66:0;;-1:-1:-1;34331:23:0;;::::1;::::0;::::1;::::0;9689:18:1;;34331:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34393;::::0;;-1:-1:-1;;;;;9734:32:1;;9716:51;;9798:2;9783:18;;9776:34;;;34323:54:0;;-1:-1:-1;34393:46:0::1;::::0;9689:18:1;34393:46:0::1;;;;;;;8759:1;34053:394:::0;;;;:::o;30475:1254::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;30571:2:::1;30561:7;:12;;30553:21;;;::::0;::::1;;30614:25;30632:7;30614:15;:25;:::i;:::-;30593:17;;:46;;30585:55;;;::::0;::::1;;30671:15;30651:17;:35:::0;30724:6:::1;::::0;30717:39:::1;::::0;-1:-1:-1;;;30717:39:0;;30750:4:::1;30717:39;::::0;::::1;9191:51:1::0;30697:17:0::1;::::0;-1:-1:-1;;;;;30724:6:0::1;::::0;30717:24:::1;::::0;9164:18:1;;30717:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30697:59;;30767:20;30790:24;30808:4;30790:9;:24::i;:::-;30767:47:::0;-1:-1:-1;30825:16:0::1;30866:3;30844:19;30856:7:::0;30844:9;:19:::1;:::i;:::-;:25;;;;:::i;:::-;31016:6;::::0;31040:9:::1;::::0;31009:52:::1;::::0;-1:-1:-1;;;31009:52:0;;-1:-1:-1;;;;;31040:9:0;;::::1;31009:52;::::0;::::1;9716:51:1::0;9783:18;;;9776:34;;;30825:44:0;;-1:-1:-1;30908:21:0::1;::::0;31016:6;::::1;::::0;31009:22:::1;::::0;9689:18:1;;31009:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;31107:9:0::1;::::0;:234:::1;::::0;-1:-1:-1;;;31107:234:0;;-1:-1:-1;;;;;31107:9:0;;::::1;::::0;:28:::1;::::0;:234:::1;::::0;31158:4:::1;::::0;31178:8;;31107:9;;;;31158:4;;31315:15:::1;::::0;31107:234:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31354:25;31409:12;31382:24;31400:4;31382:9;:24::i;:::-;:39;;;;:::i;:::-;31354:67:::0;-1:-1:-1;31435:21:0;;31432:118:::1;;31472:66;31496:4;31511:6;31520:17;31472:15;:66::i;:::-;31562:23;31588:41;31612:17:::0;31588:21:::1;:41;:::i;:::-;31562:67:::0;-1:-1:-1;31645:19:0;;31642:80:::1;;31680:30;31694:15;31680:13;:30::i;:::-;8759:1;;;;;;30475:1254:::0;:::o;33701:344::-;33794:16;;;33808:1;33794:16;;;;;;;;33751:7;;;;33794:16;33808:1;33794:16;;;;;;;;-1:-1:-1;;33831:9:0;;:16;;;-1:-1:-1;;;33831:16:0;;;;33770:40;;-1:-1:-1;;;;;;33831:9:0;;;;:14;;-1:-1:-1;33831:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33821:4;33826:1;33821:7;;;;;;-1:-1:-1;;;33821:7:0;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;33821:26:0;;;-1:-1:-1;;;;;33821:26:0;;;;;33876:4;33858;33863:1;33858:7;;;;;;-1:-1:-1;;;33858:7:0;;;;;;;;;-1:-1:-1;;;;;33858:23:0;;;;:7;;;;;;;;;;:23;33929:16;;;33943:1;33929:16;;;;;;;;33902:24;;33929:16;;33943:1;;33929:16;;;;;;;;;-1:-1:-1;;33966:9:0;;33990:12;;33966:43;;-1:-1:-1;;;33966:43:0;;33902;;-1:-1:-1;;;;;;33966:9:0;;;;:23;;:43;;34004:4;;33966:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33966:43:0;;;;;;;;;;;;:::i;:::-;33956:53;;34027:7;34035:1;34027:10;;;;;;-1:-1:-1;;;34027:10:0;;;;;;;;;;;;;;;34020:17;;;;33701:344;:::o;4808:104::-;4864:13;4897:7;4890:14;;;;;:::i;20261:295::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;20370:6:::1;::::0;-1:-1:-1;;;;;20362:14:0;;::::1;20370:6:::0;::::1;20362:14;;20354:84;;;::::0;-1:-1:-1;;;20354:84:0;;15120:2:1;20354:84:0::1;::::0;::::1;15102:21:1::0;15159:2;15139:18;;;15132:30;15198:34;15178:18;;;15171:62;15269:27;15249:18;;;15242:55;15314:19;;20354:84:0::1;15092:247:1::0;20354:84:0::1;20451:41;20480:4;20486:5;20451:28;:41::i;:::-;20508:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;20508:40:0;::::1;::::0;::::1;::::0;;;::::1;20261:295:::0;;:::o;6514:413::-;226:10;6607:4;6651:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6651:34:0;;;;;;;;;;6704:35;;;;6696:85;;;;-1:-1:-1;;;6696:85:0;;19211:2:1;6696:85:0;;;19193:21:1;19250:2;19230:18;;;19223:30;19289:34;19269:18;;;19262:62;-1:-1:-1;;;19340:18:1;;;19333:35;19385:19;;6696:85:0;19183:227:1;6696:85:0;6817:67;226:10;6840:7;6868:15;6849:16;:34;6817:8;:67::i;:::-;-1:-1:-1;6915:4:0;;6514:413;-1:-1:-1;;;6514:413:0:o;5272:175::-;5358:4;5375:42;226:10;5399:9;5410:6;5375:9;:42::i;17984:226::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;18096:9:::1;18092:111;18111:18:::0;;::::1;18092:111;;;18181:10;18150:16;:28;18167:7;;18175:1;18167:10;;;;;-1:-1:-1::0;;;18167:10:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18150:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18150:28:0;:41;;-1:-1:-1;;18150:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18131:3;::::1;::::0;::::1;:::i;:::-;;;;18092:111;;;;17984:226:::0;;;:::o;21627:182::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21712:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;21712:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21767:34;;11185:41:1;;;21767:34:0::1;::::0;11158:18:1;21767:34:0::1;;;;;;;21627:182:::0;;:::o;21219:400::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;21341:17:::1;:34:::0;;;21386:16:::1;:32:::0;;;21429:14:::1;:28:::0;;;21446:11;21484:36:::1;21405:13:::0;21361:14;21484:36:::1;:::i;:::-;:53;;;;:::i;:::-;21468:13;:69:::0;;;21573:4:::1;-1:-1:-1::0;21556:21:0::1;21548:63;;;::::0;-1:-1:-1;;;21548:63:0;;16793:2:1;21548:63:0::1;::::0;::::1;16775:21:1::0;16832:2;16812:18;;;16805:30;16871:31;16851:18;;;16844:59;16920:18;;21548:63:0::1;16765:179:1::0;19071:233:0;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;19194:6:::1;19174:13;5109:12:::0;;;5021:108;19174:13:::1;:17;::::0;19190:1:::1;19174:17;:::i;:::-;:26;;;;:::i;:::-;19161:9;:39;;19153:48;;;::::0;::::1;;19252:4;19232:13;5109:12:::0;;;5021:108;19232:13:::1;:17;::::0;19248:1:::1;19232:17;:::i;:::-;:24;;;;:::i;:::-;19219:9;:37;;19211:46;;;::::0;::::1;;19267:18;:30:::0;19071:233::o;17763:102::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;17835:13:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;17835:22:0;;::::1;::::0;;;::::1;::::0;;17763:102::o;18484:254::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;18607:16:::1;5003:2:::0;18607::::1;:16;:::i;:::-;18598:4;18578:13;5109:12:::0;;;5021:108;18578:13:::1;:17;::::0;18594:1:::1;18578:17;:::i;:::-;:24;;;;:::i;:::-;18577:47;;;;:::i;:::-;18567:6;:57;;18559:66;;;::::0;::::1;;18662:16;5003:2:::0;18662::::1;:16;:::i;:::-;18652:27;::::0;:6;:27:::1;:::i;:::-;18636:13;:43:::0;;;18695:35:::1;::::0;19561:25:1;;;18695:35:0::1;::::0;19549:2:1;19534:18;18695:35:0::1;19516:76:1::0;8934:244:0;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9023:22:0;::::1;9015:73;;;::::0;-1:-1:-1;;;9015:73:0;;13902:2:1;9015:73:0::1;::::0;::::1;13884:21:1::0;13941:2;13921:18;;;13914:30;13980:34;13960:18;;;13953:62;-1:-1:-1;;;14031:18:1;;;14024:36;14077:19;;9015:73:0::1;13874:228:1::0;9015:73:0::1;9125:6;::::0;9104:38:::1;::::0;-1:-1:-1;;;;;9104:38:0;;::::1;::::0;9125:6:::1;::::0;9104:38:::1;::::0;9125:6:::1;::::0;9104:38:::1;9153:6;:17:::0;;-1:-1:-1;;;;;;9153:17:0::1;-1:-1:-1::0;;;;;9153:17:0;;;::::1;::::0;;;::::1;::::0;;8934:244::o;29110:142::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;29210:1:::1;29201:6;:10;29193:19;;;::::0;::::1;;29223:12;:21:::0;29110:142::o;34485:157::-;8689:6;;-1:-1:-1;;;;;8689:6:0;226:10;8689:22;8681:67;;;;-1:-1:-1;;;8681:67:0;;;;;;;:::i;:::-;34543:12:::1;34587:7;8627:6:::0;;-1:-1:-1;;;;;8627:6:0;;8562:79;34587:7:::1;-1:-1:-1::0;;;;;34579:21:0::1;34608;34579:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17050:131:::0;17123:4;17146:27;:9;17165:7;17146:18;:27::i;7851:380::-;-1:-1:-1;;;;;7987:19:0;;7979:68;;;;-1:-1:-1;;;7979:68:0;;18806:2:1;7979:68:0;;;18788:21:1;18845:2;18825:18;;;18818:30;18884:34;18864:18;;;18857:62;-1:-1:-1;;;18935:18:1;;;18928:34;18979:19;;7979:68:0;18778:226:1;7979:68:0;-1:-1:-1;;;;;8066:21:0;;8058:68;;;;-1:-1:-1;;;8058:68:0;;14309:2:1;8058:68:0;;;14291:21:1;14348:2;14328:18;;;14321:30;14387:34;14367:18;;;14360:62;-1:-1:-1;;;14438:18:1;;;14431:32;14480:19;;8058:68:0;14281:224:1;8058:68:0;-1:-1:-1;;;;;8139:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8191:32;;19561:25:1;;;8191:32:0;;19534:18:1;8191:32:0;;;;;;;7851:380;;;:::o;6935:614::-;-1:-1:-1;;;;;7075:20:0;;7067:70;;;;-1:-1:-1;;;7067:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7156:23:0;;7148:71;;;;-1:-1:-1;;;7148:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7256:17:0;;7232:21;7256:17;;;;;;;;;;;7292:23;;;;7284:74;;;;-1:-1:-1;;;7284:74:0;;15953:2:1;7284:74:0;;;15935:21:1;15992:2;15972:18;;;15965:30;16031:34;16011:18;;;16004:62;-1:-1:-1;;;16082:18:1;;;16075:36;16128:19;;7284:74:0;15925:228:1;7284:74:0;-1:-1:-1;;;;;7394:17:0;;;:9;:17;;;;;;;;;;;7414:22;;;7394:42;;7458:20;;;;;;;;:30;;7430:6;;7394:9;7458:30;;7430:6;;7458:30;:::i;:::-;;;;;;;;7523:9;-1:-1:-1;;;;;7506:35:0;7515:6;-1:-1:-1;;;;;7506:35:0;;7534:6;7506:35;;;;19561:25:1;;19549:2;19534:18;;19516:76;7506:35:0;;;;;;;;6935:614;;;;:::o;21817:5102::-;-1:-1:-1;;;;;21917:18:0;;21909:68;;;;-1:-1:-1;;;21909:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21996:16:0;;21988:64;;;;-1:-1:-1;;;21988:64:0;;;;;;;:::i;:::-;22080:1;22071:6;:10;22063:61;;;;-1:-1:-1;;;22063:61:0;;15546:2:1;22063:61:0;;;15528:21:1;15585:2;15565:18;;;15558:30;15624:34;15604:18;;;15597:62;-1:-1:-1;;;15675:18:1;;;15668:36;15721:19;;22063:61:0;15518:228:1;22063:61:0;22149:13;;;;;;;22145:132;;-1:-1:-1;;;;;22186:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;22215:23:0;;;;;;:19;:23;;;;;;;;22186:52;22178:87;;;;-1:-1:-1;;;22178:87:0;;13551:2:1;22178:87:0;;;13533:21:1;13590:2;13570:18;;;13563:30;-1:-1:-1;;;13609:18:1;;;13602:52;13671:18;;22178:87:0;13523:172:1;22178:87:0;27021:18;;27006:12;:33;22292:26;:52;;;;;22343:1;22322:18;;:22;22292:52;22289:231;;;-1:-1:-1;;;;;22369:22:0;;;;;;:16;:22;;;;;;;;22368:23;;:40;;-1:-1:-1;8627:6:0;;-1:-1:-1;;;;;22395:13:0;;;8627:6;;22395:13;22368:40;:65;;;-1:-1:-1;;;;;;22412:21:0;;22426:6;22412:21;22368:65;22360:148;;;;-1:-1:-1;;;22360:148:0;;17921:2:1;22360:148:0;;;17903:21:1;17960:2;17940:18;;;17933:30;17999:34;17979:18;;;17972:62;18070:34;18050:18;;;18043:62;-1:-1:-1;;;18121:19:1;;;18114:37;18168:19;;22360:148:0;17893:300:1;22360:148:0;22543:14;;;;22540:878;;;8627:6;;-1:-1:-1;;;;;22577:15:0;;;8627:6;;22577:15;;;;:32;;-1:-1:-1;8627:6:0;;-1:-1:-1;;;;;22596:13:0;;;8627:6;;22596:13;;22577:32;:52;;;;-1:-1:-1;;;;;;22613:16:0;;;;22577:52;:77;;;;-1:-1:-1;;;;;;22633:21:0;;22647:6;22633:21;;22577:77;:107;;;;-1:-1:-1;;;;;;22659:25:0;;;;;;:19;:25;;;;;;;;22658:26;22577:107;:135;;;;-1:-1:-1;;;;;;22689:23:0;;;;;;:19;:23;;;;;;;;22688:24;22577:135;22573:834;;;-1:-1:-1;;;;;22797:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;22833:35:0;;;;;;:31;:35;;;;;;;;22832:36;22797:71;22793:599;;;22915:12;;22905:6;:22;;22897:31;;;;;;22989:15;;22972:13;22982:2;22972:9;:13::i;:::-;22963:22;;:6;:22;:::i;:::-;:41;;22955:50;;;;;;22793:599;;;-1:-1:-1;;;;;23082:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;23116:37:0;;;;;;:31;:37;;;;;;;;23115:38;23082:71;23078:314;;;23200:13;;23190:6;:23;;23182:32;;;;;23078:314;-1:-1:-1;;;;;23263:35:0;;;;;;:31;:35;;;;;;;;23258:134;;23356:15;;23339:13;23349:2;23339:9;:13::i;:::-;23330:22;;:6;:22;:::i;:::-;:41;;23322:50;;;;;;23430:28;23461:24;23479:4;23461:9;:24::i;:::-;23545:18;;23430:55;;-1:-1:-1;23521:42:0;;;;;;;23579:22;;-1:-1:-1;23590:11:0;;;;;;;23579:22;:35;;;;-1:-1:-1;23606:8:0;;-1:-1:-1;;;23606:8:0;;;;23605:9;23579:35;:71;;;;-1:-1:-1;;;;;;23619:31:0;;;;;;:25;:31;;;;;;;;23618:32;23579:71;:101;;;;-1:-1:-1;;;;;;23655:25:0;;;;;;:19;:25;;;;;;;;23654:26;23579:101;:129;;;;-1:-1:-1;;;;;;23685:23:0;;;;;;:19;:23;;;;;;;;23684:24;23579:129;23576:232;;;23725:8;:15;;-1:-1:-1;;;;23725:15:0;-1:-1:-1;;;23725:15:0;;;23755:10;:8;:10::i;:::-;23780:8;:16;;-1:-1:-1;;;;23780:16:0;;;23576:232;23823:14;;;;23820:262;;;23875:15;;23856;:34;;:73;;;;;23919:10;23894:21;:35;;23856:73;:99;;;;;23954:1;23933:18;:9;:16;:18::i;:::-;:22;23856:99;23853:218;;;23975:17;23989:2;23975:13;:17::i;:::-;23853:218;;;24046:9;:7;:9::i;:::-;-1:-1:-1;;;;;24212:25:0;;24094:12;24212:25;;;:19;:25;;;;;;24109:4;;24212:25;;;:52;;-1:-1:-1;;;;;;24241:23:0;;;;;;:19;:23;;;;;;;;24212:52;24209:99;;;-1:-1:-1;24291:5:0;24209:99;24328:12;24432:7;24429:2337;;;27021:18;;27006:12;:33;24495:106;;;;24550:8;24535:12;;:23;;;;:::i;:::-;24525:6;:33;;:75;;;;;24588:12;24562:18;;24583:1;24562:22;;;;:::i;:::-;:38;;24525:75;24494:143;;;;-1:-1:-1;;;;;;24606:31:0;;;;;;:25;:31;;;;;;;;24494:143;:177;;;;-1:-1:-1;;;;;;24642:29:0;;;;;;:25;:29;;;;;;;;24641:30;24494:177;:197;;;;;24690:1;24675:12;;:16;24494:197;24491:2106;;;27021:18;;27006:12;:33;24729:330;;25038:1;25022:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;24729:330:0;-1:-1:-1;;;;;25083:20:0;;;;;;:16;:20;;;;;;;;25079:174;;-1:-1:-1;;;;;25127:20:0;;;;;;:16;:20;;;;;:27;;-1:-1:-1;;25127:27:0;25150:4;25127:27;;;;;;25177:10;:15;;25150:4;;25177:10;;:15;;25150:4;;25177:15;:::i;:::-;;;;-1:-1:-1;;25220:13:0;;-1:-1:-1;;;;;9209:32:1;;9191:51;;25220:13:0;;9179:2:1;9164:18;25220:13:0;;;;;;;25079:174;25304:15;;25289:12;;25280:21;;:6;:21;:::i;:::-;:39;;;;:::i;:::-;25273:46;;25382:12;;25364:15;;25357:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;25335:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;25462:12:0;;25443:16;;25436:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;25413:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25536:12:0;;25520:13;;25513:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;25493:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;24491:2106:0;;-1:-1:-1;24491:2106:0;;-1:-1:-1;;;;;25613:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;25662:1;25646:13;;:17;25613:50;25609:988;;;25715:15;;25699:13;;25690:22;;:6;:22;:::i;:::-;:40;;;;:::i;:::-;25683:47;;25797:13;;25778:16;;25771:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;25749:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25879:13:0;;25859:17;;25852:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;25829:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25955:13:0;;25938:14;;25931:21;;:4;:21;:::i;25609:988::-;-1:-1:-1;;;;;26031:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;26081:1;26066:12;;:16;26031:51;26028:569;;;26131:15;;26116:12;;26107:21;;:6;:21;:::i;:::-;:39;;;;:::i;:::-;26100:46;;26209:12;;26191:15;;26184:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;26162:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26289:12:0;;26270:16;;26263:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;26240:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26363:12:0;;26347:13;;26340:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;26320:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;26398:14:0;;;;26397:15;;:47;;;26425:19;:17;:19::i;:::-;26416:6;:28;26397:47;26394:188;;;26472:22;:9;26491:2;26472:18;:22::i;:::-;26468:95;;26522:17;:9;26536:2;26522:13;:17::i;:::-;;26468:95;26628:8;;26625:93;;26660:42;26676:4;26690;26697;26660:15;:42::i;:::-;26740:14;26750:4;26740:14;;:::i;:::-;;;24429:2337;26778:33;26794:4;26800:2;26804:6;26778:15;:33::i;:::-;26827:24;:9;26846:4;26827:18;:24::i;:::-;:35;;;;;26855:7;26827:35;26824:88;;;26878:22;:9;26895:4;26878:16;:22::i;:::-;;21817:5102;;;;;;;:::o;32127:1566::-;32168:23;32194:24;32212:4;32194:9;:24::i;:::-;32168:50;;32229:25;32300:16;;32278:19;;32257:18;;:40;;;;:::i;:::-;:59;;;;:::i;:::-;32229:87;-1:-1:-1;32340:20:0;;;:46;;-1:-1:-1;32364:22:0;;32340:46;32337:60;;;32389:7;;32127:1566::o;32337:60::-;32430:18;;:23;;32451:2;32430:23;:::i;:::-;32412:15;:41;32409:113;;;32487:18;;:23;;32508:2;32487:23;:::i;:::-;32469:41;;32409:113;32534:12;32616:23;32701:1;32681:17;32660:18;;32642:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;32616:86;-1:-1:-1;32748:21:0;32780:51;32797:33;32616:86;32797:15;:33;:::i;:::-;32780:16;:51::i;:::-;32852:18;32873:38;32897:14;32873:21;:38;:::i;:::-;32852:59;;32922:23;32948:10;32922:36;;32971:24;33074:1;33055:18;;:20;;;;:::i;:::-;33034:42;;:17;:42;:::i;:::-;33011:19;;32998:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;32971:106;;33088:21;33185:1;33166:18;;:20;;;;:::i;:::-;33145:42;;:17;:42;:::i;:::-;33125:16;;33112:29;;:10;:29;:::i;:::-;:76;;;;:::i;:::-;33088:100;-1:-1:-1;33220:32:0;33088:100;33220:16;:32;:::i;:::-;33201:51;;;;:::i;:::-;33298:1;33277:18;:22;;;33310:19;:23;;;33344:16;:20;33201:51;-1:-1:-1;33388:19:0;;;;;:42;;;33429:1;33411:15;:19;33388:42;33385:119;;;33446:46;33459:15;33476;33446:12;:46::i;:::-;33519:20;;33516:124;;33576:17;;33568:60;;-1:-1:-1;;;;;33576:17:0;;;;33607:16;;33568:60;;;;33607:16;33576:17;33568:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33555:73:0;;-1:-1:-1;;33516:124:0;32127:1566;;;;;;;;;:::o;31737:382::-;31825:16;;;31839:1;31825:16;;;;;;;;31801:21;;31825:16;;;;;;;;-1:-1:-1;;31862:9:0;;:16;;;-1:-1:-1;;;31862:16:0;;;;31801:40;;-1:-1:-1;;;;;;31862:9:0;;;;:14;;-1:-1:-1;31862:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31852:4;31857:1;31852:7;;;;;;-1:-1:-1;;;31852:7:0;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;31852:26:0;;;-1:-1:-1;;;;;31852:26:0;;;;;31907:4;31889;31894:1;31889:7;;;;;;-1:-1:-1;;;31889:7:0;;;;;;;;;-1:-1:-1;;;;;31889:23:0;;;:7;;;;;;;;;:23;31925:9;;:186;;-1:-1:-1;;;31925:186:0;;:9;;;:60;;31993:11;;31925:186;;:9;;32036:4;;32063:6;;32085:15;;31925:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20564:248;-1:-1:-1;;;;;20647:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;20647:39:0;;;;;;;20707;20647:31;:39;20707:26;:39::i;2590:167::-;-1:-1:-1;;;;;2724:23:0;;2670:4;1704:19;;;:12;;;:19;;;;;;:24;;2694:55;2687:62;2590:167;-1:-1:-1;;;2590:167:0:o;2843:117::-;2906:7;2933:19;2941:3;1827:18;;1744:109;27511:562;27565:12;27624:20;;27606:15;:38;;;;:::i;:::-;27588:15;:56;27694:14;27711:125;27724:111;27694:14;27753:1;27734:18;:9;:16;:18::i;:::-;:20;;;;:::i;:::-;27812:22;27830:2;27812:9;:22::i;:::-;27783:26;27801:6;27783:9;:26::i;:::-;27756:24;27774:4;27756:9;:24::i;:::-;:53;;;;:::i;:::-;:78;;;;:::i;:::-;27724:6;:111::i;:::-;27711:9;;:12;:125::i;:::-;27694:142;;27847:16;27910:3;27890:17;;27866:21;:41;;;;:::i;:::-;:47;;;;:::i;:::-;27847:66;;27945:6;-1:-1:-1;;;;;27937:20:0;27965:8;27937:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27924:54:0;;-1:-1:-1;;27989:77:0;;;;28020:34;;-1:-1:-1;;;;;28020:34:0;;;28037:8;;28020:34;;;;;27511:562;;;;:::o;27213:286::-;27251:12;;27337:25;27361:1;27337:21;:25;:::i;:::-;-1:-1:-1;;27450:41:0;;27373:14;;27398:4;;;;27373:14;;;27450:41;27373:14;27450:41;27373:14;27398:4;27450:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27213:286:0:o;2186:152::-;2256:4;2280:50;2285:3;-1:-1:-1;;;;;2305:23:0;;2280:4;:50::i;2346:158::-;2419:4;2443:53;2451:3;-1:-1:-1;;;;;2471:23:0;;2443:7;:53::i;29375:573::-;29527:16;;;29541:1;29527:16;;;;;;;;29503:21;;29527:16;;;;;;;;;;-1:-1:-1;29527:16:0;29503:40;;29572:4;29554;29559:1;29554:7;;;;;;-1:-1:-1;;;29554:7:0;;;;;;;;;-1:-1:-1;;;;;29554:23:0;;;:7;;;;;;;;;;:23;;;;29598:9;;:16;;;-1:-1:-1;;;29598:16:0;;;;:9;;;;;:14;;:16;;;;;29554:7;;29598:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29588:4;29593:1;29588:7;;;;;;-1:-1:-1;;;29588:7:0;;;;;;;;;-1:-1:-1;;;;;29588:26:0;;;:7;;;;;;;;;:26;29659:9;;29627:56;;29644:4;;29659:9;29671:11;29627:8;:56::i;:::-;29722:9;;:218;;-1:-1:-1;;;29722:218:0;;-1:-1:-1;;;;;29722:9:0;;;;:60;;:218;;29797:11;;29722:9;;29867:4;;29894;;29914:15;;29722:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29960:507;30140:9;;30108:56;;30125:4;;-1:-1:-1;;;;;30140:9:0;30152:11;30108:8;:56::i;:::-;30207:9;;:252;;-1:-1:-1;;;30207:252:0;;-1:-1:-1;;;;;30207:9:0;;;;:25;;30240:9;;30207:252;;30273:4;;30293:11;;30207:9;;;;30273:4;;30433:15;;30207:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29960:507;;:::o;19316:207::-;-1:-1:-1;;;;;19404:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;19404:52:0;;;;;;;;;;19472:43;;9421:51:1;;;9488:18;;;9481:50;19472:43:0;;9394:18:1;19472:43:0;;;;;;;19316:207;;:::o;28081:632::-;28500:28;;-1:-1:-1;;28517:10:0;8313:2:1;8309:15;8305:53;28500:28:0;;;8293:66:1;28160:7:0;;;;28612:5;;28576:12;;28535:15;;8375:12:1;;28500:28:0;;;;;;;;;;;;28490:39;;;;;;28482:48;;28481:70;;;;:::i;:::-;28362:32;;-1:-1:-1;;28379:14:0;8313:2:1;8309:15;8305:53;28362:32:0;;;8293:66:1;28442:14:0;;28401:15;;8375:12:1;;28362:32:0;;;;;;;;;;;;28352:43;;;;;;28344:52;;28343:74;;;;:::i;:::-;28284:34;28302:16;28284:15;:34;:::i;:::-;:134;;;;:::i;:::-;:172;;;;:::i;:::-;:268;;;;:::i;:::-;:304;;;;:::i;:::-;:333;;;;:::i;:::-;28245:391;;;;;;8987:19:1;;9031:2;9022:12;;8977:63;28245:391:0;;;;-1:-1:-1;;28245:391:0;;;;;;;;;28217:434;;28245:391;28217:434;;;;;-1:-1:-1;28701:4:0;28688:9;28701:4;28688:2;:9;:::i;:::-;28680:18;;:4;:18;:::i;:::-;:25;;;;:::i;:::-;28673:32;28081:632;-1:-1:-1;;;;;28081:632:0:o;2968:158::-;3042:7;3093:22;3097:3;3109:5;3093:3;:22::i;627:291::-;690:4;1704:19;;;:12;;;:19;;;;;;707:204;;-1:-1:-1;750:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;810:18;;788:19;;;:12;;;:19;;;;;;:40;;;;843:11;;707:204;-1:-1:-1;894:5:0;887:12;;926:673;992:4;1030:19;;;:12;;;:19;;;;;;1066:15;;1062:530;;1098:21;1122:14;1135:1;1122:10;:14;:::i;:::-;1171:18;;1098:38;;-1:-1:-1;1151:17:0;;1171:22;;1192:1;;1171:22;:::i;:::-;1151:42;;1227:13;1214:9;:26;1210:221;;1261:17;1281:3;:11;;1293:9;1281:22;;;;;;-1:-1:-1;;;1281:22:0;;;;;;;;;;;;;;;;;1261:42;;1351:9;1322:3;:11;;1334:13;1322:26;;;;;;-1:-1:-1;;;1322:26:0;;;;;;;;;;;;;;;;;;;;:38;;;;1379:23;;;:12;;;:23;;;;;:36;;;1210:221;1447:17;;:3;;:17;;;-1:-1:-1;;;1447:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;1488:3;:12;;:19;1501:5;1488:19;;;;;;;;;;;1481:26;;;1531:4;1524:11;;;;;;;1062:530;1575:5;1568:12;;;;;1861:120;1928:7;1955:3;:11;;1967:5;1955:18;;;;;;-1:-1:-1;;;1955:18:0;;;;;;;;;;;;;;;;;1948:25;;1861:120;;;;:::o;14:693:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:2;;143:5;136;129:20;88:2;183:6;170:20;209:4;233:60;249:43;289:2;249:43;:::i;:::-;233:60;:::i;:::-;315:3;339:2;334:3;327:15;367:2;362:3;358:12;351:19;;402:2;394:6;390:15;454:3;449:2;443;440:1;436:10;428:6;424:23;420:32;417:41;414:2;;;475:5;468;461:20;414:2;501:5;515:163;529:2;526:1;523:9;515:163;;;586:17;;574:30;;624:12;;;;656;;;;547:1;540:9;515:163;;;-1:-1:-1;696:5:1;;78:629;-1:-1:-1;;;;;;;78:629:1:o;712:257::-;771:6;824:2;812:9;803:7;799:23;795:32;792:2;;;845:6;837;830:22;792:2;889:9;876:23;908:31;933:5;908:31;:::i;974:261::-;1044:6;1097:2;1085:9;1076:7;1072:23;1068:32;1065:2;;;1118:6;1110;1103:22;1065:2;1155:9;1149:16;1174:31;1199:5;1174:31;:::i;1240:398::-;1308:6;1316;1369:2;1357:9;1348:7;1344:23;1340:32;1337:2;;;1390:6;1382;1375:22;1337:2;1434:9;1421:23;1453:31;1478:5;1453:31;:::i;:::-;1503:5;-1:-1:-1;1560:2:1;1545:18;;1532:32;1573:33;1532:32;1573:33;:::i;:::-;1625:7;1615:17;;;1327:311;;;;;:::o;1643:466::-;1720:6;1728;1736;1789:2;1777:9;1768:7;1764:23;1760:32;1757:2;;;1810:6;1802;1795:22;1757:2;1854:9;1841:23;1873:31;1898:5;1873:31;:::i;:::-;1923:5;-1:-1:-1;1980:2:1;1965:18;;1952:32;1993:33;1952:32;1993:33;:::i;:::-;1747:362;;2045:7;;-1:-1:-1;;;2099:2:1;2084:18;;;;2071:32;;1747:362::o;2114:392::-;2179:6;2187;2240:2;2228:9;2219:7;2215:23;2211:32;2208:2;;;2261:6;2253;2246:22;2208:2;2305:9;2292:23;2324:31;2349:5;2324:31;:::i;:::-;2374:5;-1:-1:-1;2431:2:1;2416:18;;2403:32;2444:30;2403:32;2444:30;:::i;2511:325::-;2579:6;2587;2640:2;2628:9;2619:7;2615:23;2611:32;2608:2;;;2661:6;2653;2646:22;2608:2;2705:9;2692:23;2724:31;2749:5;2724:31;:::i;:::-;2774:5;2826:2;2811:18;;;;2798:32;;-1:-1:-1;;;2598:238:1:o;2841:800::-;2933:6;2941;2949;3002:2;2990:9;2981:7;2977:23;2973:32;2970:2;;;3023:6;3015;3008:22;2970:2;3068:9;3055:23;3097:18;3138:2;3130:6;3127:14;3124:2;;;3159:6;3151;3144:22;3124:2;3202:6;3191:9;3187:22;3177:32;;3247:7;3240:4;3236:2;3232:13;3228:27;3218:2;;3274:6;3266;3259:22;3218:2;3319;3306:16;3345:2;3337:6;3334:14;3331:2;;;3366:6;3358;3351:22;3331:2;3426:7;3419:4;3409:6;3406:1;3402:14;3398:2;3394:23;3390:34;3387:47;3384:2;;;3452:6;3444;3437:22;3384:2;3488:4;3480:13;;;;-1:-1:-1;3512:6:1;-1:-1:-1;;3553:20:1;;3540:34;3583:28;3540:34;3583:28;:::i;:::-;3630:5;3620:15;;;2960:681;;;;;:::o;3646:1281::-;3764:6;3772;3825:2;3813:9;3804:7;3800:23;3796:32;3793:2;;;3846:6;3838;3831:22;3793:2;3891:9;3878:23;3920:18;3961:2;3953:6;3950:14;3947:2;;;3982:6;3974;3967:22;3947:2;4025:6;4014:9;4010:22;4000:32;;4070:7;4063:4;4059:2;4055:13;4051:27;4041:2;;4097:6;4089;4082:22;4041:2;4138;4125:16;4160:4;4184:60;4200:43;4240:2;4200:43;:::i;4184:60::-;4266:3;4290:2;4285:3;4278:15;4318:2;4313:3;4309:12;4302:19;;4349:2;4345;4341:11;4397:7;4392:2;4386;4383:1;4379:10;4375:2;4371:19;4367:28;4364:41;4361:2;;;4423:6;4415;4408:22;4361:2;4450:6;4441:15;;4465:238;4479:2;4476:1;4473:9;4465:238;;;4550:3;4537:17;4567:31;4592:5;4567:31;:::i;:::-;4611:18;;4497:1;4490:9;;;;;4649:12;;;;4681;;4465:238;;;-1:-1:-1;4722:5:1;-1:-1:-1;;4765:18:1;;4752:32;;-1:-1:-1;;4796:16:1;;;4793:2;;;4830:6;4822;4815:22;4793:2;;4858:63;4913:7;4902:8;4891:9;4887:24;4858:63;:::i;:::-;4848:73;;;3783:1144;;;;;:::o;4932:937::-;5027:6;5058:2;5101;5089:9;5080:7;5076:23;5072:32;5069:2;;;5122:6;5114;5107:22;5069:2;5160:9;5154:16;5193:18;5185:6;5182:30;5179:2;;;5230:6;5222;5215:22;5179:2;5258:22;;5311:4;5303:13;;5299:27;-1:-1:-1;5289:2:1;;5345:6;5337;5330:22;5289:2;5379;5373:9;5402:60;5418:43;5458:2;5418:43;:::i;5402:60::-;5484:3;5508:2;5503:3;5496:15;5536:2;5531:3;5527:12;5520:19;;5567:2;5563;5559:11;5615:7;5610:2;5604;5601:1;5597:10;5593:2;5589:19;5585:28;5582:41;5579:2;;;5641:6;5633;5626:22;5579:2;5668:6;5659:15;;5683:156;5697:2;5694:1;5691:9;5683:156;;;5754:10;;5742:23;;5715:1;5708:9;;;;;5785:12;;;;5817;;5683:156;;;-1:-1:-1;5858:5:1;5038:831;-1:-1:-1;;;;;;;5038:831:1:o;5874:251::-;5930:6;5983:2;5971:9;5962:7;5958:23;5954:32;5951:2;;;6004:6;5996;5989:22;5951:2;6048:9;6035:23;6067:28;6089:5;6067:28;:::i;6130:255::-;6197:6;6250:2;6238:9;6229:7;6225:23;6221:32;6218:2;;;6271:6;6263;6256:22;6218:2;6308:9;6302:16;6327:28;6349:5;6327:28;:::i;6390:190::-;6449:6;6502:2;6490:9;6481:7;6477:23;6473:32;6470:2;;;6523:6;6515;6508:22;6470:2;-1:-1:-1;6551:23:1;;6460:120;-1:-1:-1;6460:120:1:o;6585:194::-;6655:6;6708:2;6696:9;6687:7;6683:23;6679:32;6676:2;;;6729:6;6721;6714:22;6676:2;-1:-1:-1;6757:16:1;;6666:113;-1:-1:-1;6666:113:1:o;6784:255::-;6863:6;6871;6924:2;6912:9;6903:7;6899:23;6895:32;6892:2;;;6945:6;6937;6930:22;6892:2;-1:-1:-1;;6973:16:1;;7029:2;7014:18;;;7008:25;6973:16;;7008:25;;-1:-1:-1;6882:157:1:o;7044:326::-;7121:6;7129;7137;7190:2;7178:9;7169:7;7165:23;7161:32;7158:2;;;7211:6;7203;7196:22;7158:2;-1:-1:-1;;7239:23:1;;;7309:2;7294:18;;7281:32;;-1:-1:-1;7360:2:1;7345:18;;;7332:32;;7148:222;-1:-1:-1;7148:222:1:o;7375:316::-;7463:6;7471;7479;7532:2;7520:9;7511:7;7507:23;7503:32;7500:2;;;7553:6;7545;7538:22;7500:2;7587:9;7581:16;7571:26;;7637:2;7626:9;7622:18;7616:25;7606:35;;7681:2;7670:9;7666:18;7660:25;7650:35;;7490:201;;;;;:::o;7696:463::-;7749:3;7787:5;7781:12;7814:6;7809:3;7802:19;7840:4;7869:2;7864:3;7860:12;7853:19;;7906:2;7899:5;7895:14;7927:3;7939:195;7953:6;7950:1;7947:13;7939:195;;;8018:13;;-1:-1:-1;;;;;8014:39:1;8002:52;;8074:12;;;;8109:15;;;;8050:1;7968:9;7939:195;;;-1:-1:-1;8150:3:1;;7757:402;-1:-1:-1;;;;;7757:402:1:o;9821:607::-;-1:-1:-1;;;;;10180:15:1;;;10162:34;;10227:2;10212:18;;10205:34;;;;10270:2;10255:18;;10248:34;;;;10313:2;10298:18;;10291:34;;;;10362:15;;;10356:3;10341:19;;10334:44;10142:3;10394:19;;10387:35;;;;10111:3;10096:19;;10078:350::o;11464:510::-;11735:6;11724:9;11717:25;11778:3;11773:2;11762:9;11758:18;11751:31;11698:4;11799:57;11851:3;11840:9;11836:19;11828:6;11799:57;:::i;:::-;-1:-1:-1;;;;;11892:32:1;;;;11887:2;11872:18;;11865:60;-1:-1:-1;11956:2:1;11941:18;11934:34;11791:65;11707:267;-1:-1:-1;;11707:267:1:o;11979:603::-;12091:4;12120:2;12149;12138:9;12131:21;12181:6;12175:13;12224:6;12219:2;12208:9;12204:18;12197:34;12249:4;12262:140;12276:6;12273:1;12270:13;12262:140;;;12371:14;;;12367:23;;12361:30;12337:17;;;12356:2;12333:26;12326:66;12291:10;;12262:140;;;12420:6;12417:1;12414:13;12411:2;;;12490:4;12485:2;12476:6;12465:9;12461:22;12457:31;12450:45;12411:2;-1:-1:-1;12566:2:1;12545:15;-1:-1:-1;;12541:29:1;12526:45;;;;12573:2;12522:54;;12100:482;-1:-1:-1;;;12100:482:1:o;12587:399::-;12789:2;12771:21;;;12828:2;12808:18;;;12801:30;12867:34;12862:2;12847:18;;12840:62;-1:-1:-1;;;12933:2:1;12918:18;;12911:33;12976:3;12961:19;;12761:225::o;17358:356::-;17560:2;17542:21;;;17579:18;;;17572:30;17638:34;17633:2;17618:18;;17611:62;17705:2;17690:18;;17532:182::o;18198:401::-;18400:2;18382:21;;;18439:2;18419:18;;;18412:30;18478:34;18473:2;18458:18;;18451:62;-1:-1:-1;;;18544:2:1;18529:18;;18522:35;18589:3;18574:19;;18372:227::o;19597:332::-;19804:6;19793:9;19786:25;19847:2;19842;19831:9;19827:18;19820:30;19767:4;19867:56;19919:2;19908:9;19904:18;19896:6;19867:56;:::i;:::-;19859:64;19776:153;-1:-1:-1;;;;19776:153:1:o;19934:582::-;20233:6;20222:9;20215:25;20276:6;20271:2;20260:9;20256:18;20249:34;20319:3;20314:2;20303:9;20299:18;20292:31;20196:4;20340:57;20392:3;20381:9;20377:19;20369:6;20340:57;:::i;:::-;-1:-1:-1;;;;;20433:32:1;;;;20428:2;20413:18;;20406:60;-1:-1:-1;20497:3:1;20482:19;20475:35;20332:65;20205:311;-1:-1:-1;;;20205:311:1:o;20710:275::-;20781:2;20775:9;20846:2;20827:13;;-1:-1:-1;;20823:27:1;20811:40;;20881:18;20866:34;;20902:22;;;20863:62;20860:2;;;20928:18;;:::i;:::-;20964:2;20957:22;20755:230;;-1:-1:-1;20755:230:1:o;20990:183::-;21050:4;21083:18;21075:6;21072:30;21069:2;;;21105:18;;:::i;:::-;-1:-1:-1;21150:1:1;21146:14;21162:4;21142:25;;21059:114::o;21178:128::-;21218:3;21249:1;21245:6;21242:1;21239:13;21236:2;;;21255:18;;:::i;:::-;-1:-1:-1;21291:9:1;;21226:80::o;21311:120::-;21351:1;21377;21367:2;;21382:18;;:::i;:::-;-1:-1:-1;21416:9:1;;21357:74::o;21436:422::-;21525:1;21568:5;21525:1;21582:270;21603:7;21593:8;21590:21;21582:270;;;21662:4;21658:1;21654:6;21650:17;21644:4;21641:27;21638:2;;;21671:18;;:::i;:::-;21721:7;21711:8;21707:22;21704:2;;;21741:16;;;;21704:2;21820:22;;;;21780:15;;;;21582:270;;;21586:3;21500:358;;;;;:::o;21863:140::-;21921:5;21950:47;21991:4;21981:8;21977:19;21971:4;22057:5;22087:8;22077:2;;-1:-1:-1;22128:1:1;22142:5;;22077:2;22176:4;22166:2;;-1:-1:-1;22213:1:1;22227:5;;22166:2;22258:4;22276:1;22271:59;;;;22344:1;22339:130;;;;22251:218;;22271:59;22301:1;22292:10;;22315:5;;;22339:130;22376:3;22366:8;22363:17;22360:2;;;22383:18;;:::i;:::-;-1:-1:-1;;22439:1:1;22425:16;;22454:5;;22251:218;;22553:2;22543:8;22540:16;22534:3;22528:4;22525:13;22521:36;22515:2;22505:8;22502:16;22497:2;22491:4;22488:12;22484:35;22481:77;22478:2;;;-1:-1:-1;22590:19:1;;;22622:5;;22478:2;22669:34;22694:8;22688:4;22669:34;:::i;:::-;22739:6;22735:1;22731:6;22727:19;22718:7;22715:32;22712:2;;;22750:18;;:::i;:::-;22788:20;;22067:747;-1:-1:-1;;;22067:747:1:o;22819:168::-;22859:7;22925:1;22921;22917:6;22913:14;22910:1;22907:21;22902:1;22895:9;22888:17;22884:45;22881:2;;;22932:18;;:::i;:::-;-1:-1:-1;22972:9:1;;22871:116::o;22992:125::-;23032:4;23060:1;23057;23054:8;23051:2;;;23065:18;;:::i;:::-;-1:-1:-1;23102:9:1;;23041:76::o;23122:380::-;23201:1;23197:12;;;;23244;;;23265:2;;23319:4;23311:6;23307:17;23297:27;;23265:2;23372;23364:6;23361:14;23341:18;23338:38;23335:2;;;23418:10;23413:3;23409:20;23406:1;23399:31;23453:4;23450:1;23443:15;23481:4;23478:1;23471:15;23335:2;;23177:325;;;:::o;23507:135::-;23546:3;-1:-1:-1;;23567:17:1;;23564:2;;;23587:18;;:::i;:::-;-1:-1:-1;23634:1:1;23623:13;;23554:88::o;23647:112::-;23679:1;23705;23695:2;;23710:18;;:::i;:::-;-1:-1:-1;23744:9:1;;23685:74::o;23764:127::-;23825:10;23820:3;23816:20;23813:1;23806:31;23856:4;23853:1;23846:15;23880:4;23877:1;23870:15;23896:127;23957:10;23952:3;23948:20;23945:1;23938:31;23988:4;23985:1;23978:15;24012:4;24009:1;24002:15;24028:127;24089:10;24084:3;24080:20;24077:1;24070:31;24120:4;24117:1;24110:15;24144:4;24141:1;24134:15;24160:131;-1:-1:-1;;;;;24235:31:1;;24225:42;;24215:2;;24281:1;24278;24271:12;24215:2;24205:86;:::o;24296:118::-;24382:5;24375:13;24368:21;24361:5;24358:32;24348:2;;24404:1;24401;24394:12

Swarm Source

ipfs://6ce35725af64b980f785c47214dbf15f2cc5d71f47fefed29c21a4e957274fb9
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.