ETH Price: $2,521.22 (+0.24%)

Token

White Rabbit (RBT)
 

Overview

Max Total Supply

100,000,000 RBT

Holders

182

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000008542329 RBT

Value
$0.00
0xe78995010f9974134c076e96b7c03718029df9b2
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:
WhiteRabbit

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-09
*/

// SPDX-License-Identifier: CC-BY-ND-4.0

pragma solidity ^0.8.17;

/*

██╗    ██╗██╗  ██╗██╗████████╗███████╗    ██████╗  █████╗ ██████╗ ██████╗ ██╗████████╗
██║    ██║██║  ██║██║╚══██╔══╝██╔════╝    ██╔══██╗██╔══██╗██╔══██╗██╔══██╗██║╚══██╔══╝
██║ █╗ ██║███████║██║   ██║   █████╗      ██████╔╝███████║██████╔╝██████╔╝██║   ██║   
██║███╗██║██╔══██║██║   ██║   ██╔══╝      ██╔══██╗██╔══██║██╔══██╗██╔══██╗██║   ██║   
╚███╔███╔╝██║  ██║██║   ██║   ███████╗    ██║  ██║██║  ██║██████╔╝██████╔╝██║   ██║   
 ╚══╝╚══╝ ╚═╝  ╚═╝╚═╝   ╚═╝   ╚══════╝    ╚═╝  ╚═╝╚═╝  ╚═╝╚═════╝ ╚═════╝ ╚═╝   ╚═╝   
                                                                                      
                     /\    .-" /
                    /  ; .'  .' 
                   :   :/  .'   
                    \  ;-.'     
       .--""""--..__/     `.    
     .'           .'    `o  \   
    /                    `   ;  
   :                  \      :  
 .-;        -.         `.__.-'  
:  ;          \     ,   ;       
'._:           ;   :   (        
    \/  .__    ;    \   `-.     
     ;     "-,/_..--"`-..__)    
     '""--.._:

Beware of scammers!
Follow the only legit WhiteRabbit on:

+++ whiterabbit.click +++
+++ whiterabbit.click +++

FoLlOw ThE WhItE RabbIt

    .-.
   (o.o)
    |=|
   __|__
 //.=|=.\\

 ReD pIll (buy): you will discover the truth and you will discover 
              how deep the rabbit hole goes.

 BlUe pIll (not buy): you will wake up in your bed and believe whatever you want to believe.

*/

// ANCHOR White Rabbit methods
abstract contract WhiteRabbitSpecials {
    // White Rabbit Innovations

    string internal _website = "https://whiterabbit.click";
    event Message (string message);
    event answerThePhone (string message);

    // NOTE Communications from the White Rabbit to the users
    function _answerThePhone(string memory message) internal {
        emit Message(message);
        emit answerThePhone(message);
    }

    // NOTE Antiphishing Method: you can check the website address of the contract 
    // and compare it with the one on the website
    function getWebsiteAddress() public view returns (string memory) {
        return _website;
    }

    function _changeWebsite(string memory newWebsite) internal {
        _website = newWebsite;
    }
}

abstract contract safetyFirst {
    mapping(address => bool) is_auth;

    function authorized(address addy) public view returns (bool) {
        return is_auth[addy];
    }

    function set_authorized(address addy, bool booly) public onlyAuth {
        is_auth[addy] = booly;
    }

    modifier onlyAuth() {
        require(is_auth[msg.sender] || msg.sender == owner, "not owner");
        _;
    }
    address owner;
    modifier onlyOwner() {
        require(msg.sender == owner, "not owner");
        _;
    }
    bool locked;
    modifier safe() {
        require(!locked, "reentrant");
        locked = true;
        _;
        locked = false;
    }

    function change_owner(address new_owner) public onlyAuth {
        owner = new_owner;
    }

    receive() external payable {}

    fallback() external payable {}
}

// SECTION Interfaces
interface ERC165 {
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

interface ERC721 is ERC165 {
    event Transfer(
        address indexed _from,
        address indexed _to,
        uint256 indexed _tokenId
    );
    event Approval(
        address indexed _owner,
        address indexed _approved,
        uint256 indexed _tokenId
    );
    event ApprovalForAll(
        address indexed _owner,
        address indexed _operator,
        bool _approved
    );

    function balanceOf(address _owner) external view returns (uint256);

    function ownerOf(uint256 _tokenId) external view returns (address);

    function safeTransferFrom(
        address _from,
        address _to,
        uint256 _tokenId,
        bytes memory data
    ) external payable;

    function safeTransferFrom(
        address _from,
        address _to,
        uint256 _tokenId
    ) external payable;

    function transferFrom(
        address _from,
        address _to,
        uint256 _tokenId
    ) external payable;

    function approve(address _approved, uint256 _tokenId) external payable;

    function setApprovalForAll(address _operator, bool _approved) external;

    function getApproved(uint256 _tokenId) external view returns (address);

    function isApprovedForAll(address _owner, address _operator)
        external
        view
        returns (bool);
}

interface IERC20 {
    function getOwner() external view returns (address);

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address _owner) external view returns (uint256 balance);

    function transfer(address _to, uint256 _value)
        external
        returns (bool success);

    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    ) external returns (bool success);

    function approve(address _spender, uint256 _value)
        external
        returns (bool success);

    function allowance(address _owner, address _spender)
        external
        view
        returns (uint256 remaining);

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(
        address indexed _owner,
        address indexed _spender,
        uint256 _value
    );
}

// !SECTION Interfaces
interface IUniswapERC20 {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

interface IUniswapFactory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapRouter01 {
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getamountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getamountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

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

    function getamountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapRouter02 is IUniswapRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

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

library Listables {
    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;

            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)
    {
        require(
            set._values.length > index,
            "Listables: index out of bounds"
        );
        return set._values[index];
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value)
        internal
        returns (bool)
    {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value)
        internal
        returns (bool)
    {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value)
        internal
        view
        returns (bool)
    {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index)
        internal
        view
        returns (bytes32)
    {
        return _at(set._inner, index);
    }

    struct ActorSet {
        Set _inner;
    }

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

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

    function contains(ActorSet storage set, address value)
        internal
        view
        returns (bool)
    {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(ActorSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

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

    struct UintSet {
        Set _inner;
    }

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

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

    function contains(UintSet storage set, uint256 value)
        internal
        view
        returns (bool)
    {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

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

contract WhiteRabbit is IERC20, safetyFirst, WhiteRabbitSpecials {
    using Listables for Listables.ActorSet;

    string public constant _name = "White Rabbit";
    string public constant _symbol = "RBT";
    uint8 public constant _decimals = 18;
    uint256 public constant InitialSupply = 100 * 10**6 * 10**_decimals;

    mapping(address => uint256) public _balances;
    mapping(address => mapping(address => uint256)) public _allowances;
    mapping(address => uint256) public _coolDown;
    Listables.ActorSet private _excluded;
    Listables.ActorSet private _excludedFromCoolDown;

    mapping(address => bool) public _botlist;
    bool isBotlist = true;

    uint256 swapTreshold = InitialSupply / 200; // 0.5%

    bool isSwapPegged = true;

    uint16 public BuyLimitDivider = 50; // 2%

    uint8 public BalanceLimitDivider = 25; // 4%

    uint16 public SellLimitDivider = 125; // 0.75%

    uint16 public MaxCoolDownTime = 10 seconds;
    bool public coolDownDisabled;
    uint256 public coolDownTime = 2 seconds;
    bool public manualConversion;

    address public constant UniswapRouter =
        0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address public constant Dead = 0x000000000000000000000000000000000000dEaD;

    uint256 public _circulatingSupply = InitialSupply;
    uint256 public balanceLimit = _circulatingSupply;
    uint256 public sellLimit = _circulatingSupply;
    uint256 public buyLimit = _circulatingSupply;

    uint8 public _buyTax = 1;
    uint8 public _sellTax = 25; // INITIAL amount decreasing after 1 day to avoid dumpers
    uint8 public _transferTax = 1;

    // Shares
    uint8 public _liquidityTax = 30;
    uint8 public _projectTax = 70;

    bool isTokenSwapManual;
    bool public antiSnipe;
    bool public tradingEnabled;

    address public _UniswapPairAddress;

    IUniswapRouter02 public _UniswapRouter;

    uint256 public projectBalance;

    bool private _isSwappingContractModifier;
    
    modifier lockTheSwap() {
        _isSwappingContractModifier = true;
        _;
        _isSwappingContractModifier = false;
    }

    constructor() {
        // Ownership
        owner = msg.sender;
        is_auth[msg.sender] = true;
        _balances[msg.sender] = _circulatingSupply;
        emit Transfer(address(0), msg.sender, _circulatingSupply);
        // Defining the Uniswap Router and the Uniswap Pair
        _UniswapRouter = IUniswapRouter02(UniswapRouter);
        _UniswapPairAddress = IUniswapFactory(_UniswapRouter.factory())
            .createPair(address(this), _UniswapRouter.WETH());

        // SECTION Limits, Taxes and Locks
        // Limits
        balanceLimit = InitialSupply / BalanceLimitDivider;
        sellLimit = InitialSupply / SellLimitDivider;
        buyLimit = InitialSupply / BuyLimitDivider;
        // !SECTION Limits, Taxes and Locks

        // SECTION Exclusions
        _excluded.add(msg.sender);
        _excludedFromCoolDown.add(UniswapRouter);
        _excludedFromCoolDown.add(_UniswapPairAddress);
        _excludedFromCoolDown.add(address(this));
        // !SECTION Exclusions
    }

    // NOTE Public transfer method
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        require(sender != address(0), "Transfer from zero");

        // Botlist check
        if (isBotlist) {
            require(
                !_botlist[sender] && !_botlist[recipient],
                "Botlisted!"
            );
        }

        // Check if the transfer is to be excluded from cooldown and taxes
        bool isExcluded = (_excluded.contains(sender) ||
            _excluded.contains(recipient) ||
            is_auth[sender] ||
            is_auth[recipient]);

        bool isContractTransfer = (sender == address(this) ||
            recipient == address(this));

        bool isLiquidityTransfer = ((sender == _UniswapPairAddress &&
            recipient == UniswapRouter) ||
            (recipient == _UniswapPairAddress && sender == UniswapRouter));
        if (
            isContractTransfer || isLiquidityTransfer || isExcluded
        ) {
            _whitelistTransfer(sender, recipient, amount);
        } else {
            // If not, check if trading is enabled
            if (!tradingEnabled) {
                // except for the owner
                if (sender != owner && recipient != owner) {
                    // and apply anti-snipe if enabled
                    if (antiSnipe) {
                        emit Transfer(sender, recipient, 0);
                        return;
                    } else {
                        // or revert if not
                        require(tradingEnabled, "trading not yet enabled");
                    }
                }
            }

            // If trading is enabled, check if the transfer is a buy or a sell
            bool isBuy = sender == _UniswapPairAddress ||
                sender == UniswapRouter;
            bool isSell = recipient == _UniswapPairAddress ||
                recipient == UniswapRouter;
            // and initiate the transfer accordingly
            _normalTransfer(sender, recipient, amount, isBuy, isSell);

        }
    }

    // NOTE Transfer method for everyone
    function _normalTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool isBuy,
        bool isSell
    ) private {
        // Read the balances of the recipient locally to save gas as is used twice
        uint256 recipientBalance = _balances[recipient];
        // Apply the requirements
        require(_balances[sender] >= amount, "Transfer exceeds balance");
        // Prepare the tax variable
        uint8 tax;
        // Apply the cooldown for sells
        if (isSell) {
            if (!_excludedFromCoolDown.contains(sender)) {
                require(
                    _coolDown[sender] <= block.timestamp || coolDownDisabled,
                    "Seller in coolDown"
                );
                _coolDown[sender] = block.timestamp + coolDownTime;
            }
            // Sell limit check
            require(amount <= sellLimit, "Dump protection");
            tax = _sellTax;
        } else if (isBuy) {
            // Balance limit check
            require(
                recipientBalance + amount <= balanceLimit,
                "whale protection"
            );
            // Buy limit check
            require(amount <= buyLimit, "whale protection");
            tax = _buyTax;
        } else {
            require(
                // Balance limit check for transfers
                recipientBalance + amount <= balanceLimit,
                "whale protection"
            );
            // Update the cooldown for the sender if not excluded
            if (!_excludedFromCoolDown.contains(sender))
                require(
                    _coolDown[sender] <= block.timestamp || coolDownDisabled,
                    "Sender in Lock"
                );
            tax = _transferTax;
        }

        // Check if the transaction is fit for token swapping
        if (
            (sender != _UniswapPairAddress) &&
            (!manualConversion) &&
            (!_isSwappingContractModifier)
        ) _swapContractToken(amount);

        // Calculating the taxed amount
        uint256 contractToken = _calculateFee(
            amount,
            tax,
            _liquidityTax + _projectTax 
        );
        // Refactoring the various amounts
        uint256 taxedAmount = amount - (contractToken);
        _removeToken(sender, amount);
        _balances[address(this)] += contractToken;
        _addToken(recipient, taxedAmount);
        // Emitting the transfer event
        emit Transfer(sender, recipient, taxedAmount);
    }

    function _whitelistTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        // Basic checks
        require(_balances[sender] >= amount, "Transfer exceeds balance");
        // Plain transfer
        _removeToken(sender, amount);
        _addToken(recipient, amount);
        // Emitting the transfer event
        emit Transfer(sender, recipient, amount);
    }

    // NOTE To fully support decimal operations, we custom calculate the fees
    function _calculateFee(
        uint256 amount,
        uint8 tax,
        uint8 taxPercent
    ) private pure returns (uint256) {
        return (amount * tax * taxPercent) / 10000;
    }

    function _addToken(address addr, uint256 amount) private {
        uint256 newAmount = _balances[addr] + amount;
        _balances[addr] = newAmount;
    }

    function _removeToken(address addr, uint256 amount) private {
        uint256 newAmount = _balances[addr] - amount;
        _balances[addr] = newAmount;
    }

    // SECTION Swapping taxes and adding liquidity

    // NOTE Swap tokens on sells to create liquidity
    function _swapContractToken(uint256 totalMax) private lockTheSwap {
        uint256 contractBalance = _balances[address(this)];
        // Do not swap if the contract balance is lower than the swap treshold
        if (contractBalance < swapTreshold) {
            return;
        }

        // Calculate the amount of tokens to swap
        uint16 totalTax = _liquidityTax;
        uint256 tokenToSwap = swapTreshold;
        // Avoid swapping more than the total max of the transaction
        if (swapTreshold > totalMax) {
            if (isSwapPegged) {
                tokenToSwap = totalMax;
            }
        }
        // Avoid swapping if there are no liquidity fees to generate
        if (totalTax == 0) {
            return;
        }

        // Calculate the amount of tokens to work on for liquidity and project
        uint256 tokenForLiquidity = (tokenToSwap * _liquidityTax) / totalTax;
        uint256 tokenForProject = (tokenToSwap * _projectTax) / totalTax;
        // Divide the liquidity tokens in half to add liquidity
        uint256 liqToken = tokenForLiquidity / 2;
        uint256 liqETHToken = tokenForLiquidity - liqToken;
        // Calculate the amount of ETH to swap
        uint256 swapToken = liqETHToken +
            tokenForProject;
        // Swap the tokens for ETH
        uint256 initialETHBalance = address(this).balance;
        _swapTokenForETH(swapToken);
        // Calculate the amount of ETH generated and the amount of ETH to add liquidity with
        uint256 newETH = (address(this).balance - initialETHBalance);
        uint256 liqETH = (newETH * liqETHToken) / swapToken;
        // Add liquidity
        _addLiquidity(liqToken, liqETH);
        // Add the project ETH to the project balance
        uint256 generatedETH = (address(this).balance - initialETHBalance);
        projectBalance += generatedETH;
    }

    // NOTE Basic swap function for swapping tokens on Uniswap-v2 compatible routers
    function _swapTokenForETH(uint256 amount) private {
        // Preapprove the router to spend the tokens
        _approve(address(this), address(_UniswapRouter), amount);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _UniswapRouter.WETH();

        _UniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    // NOTE Basic add liquidity function for adding liquidity on Uniswap-v2 compatible routers
    function _addLiquidity(uint256 tokenamount, uint256 ETHamount) private {
        // Approve the router to spend the tokens
        _approve(address(this), address(_UniswapRouter), tokenamount);

        _UniswapRouter.addLiquidityETH{value: ETHamount}(
            address(this),
            tokenamount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }
    // !SECTION Swapping taxes and adding liquidity

    /// SECTION Utility functions

    function getLimits()
        public
        view
        returns (uint256 balance, uint256 sell)
    {
        return (balanceLimit, sellLimit);
    }

    function getTaxes()
        public
        view
        returns (
            uint256 projectShare,
            uint256 liquidityShare,
            uint256 buyTax,
            uint256 sellTax,
            uint256 transferTax
        )
    {
        return (
            _projectTax,
            _liquidityTax,
            _buyTax,
            _sellTax,
            _transferTax
        );
    }

    // NOTE The actual cooldown time
    function getCoolDownTimeInSeconds() public view returns (uint256) {
        return coolDownTime;
    }

    // NOTE Pegged swap means that the contract won't dump when the swap treshold is reached
    function SetPeggedSwap(bool isPegged) public onlyAuth {
        isSwapPegged = isPegged;
    }

    // NOTE The token amount that triggers swap on sells
    function SetSwapTreshold(uint256 max) public onlyAuth {
        swapTreshold = max;
    }
    // !SECTION Utility functions

    function BotlistAddress(address addy, bool booly) public onlyAuth {
        _botlist[addy] = booly;
    }

    function ExcludeAccountFromFees(address account) public onlyAuth {
        _excluded.add(account);
    }

    function IncludeAccountToFees(address account) public onlyAuth {
        _excluded.remove(account);
    }

    function ExcludeAccountFromCoolDown(address account) public onlyAuth {
        _excludedFromCoolDown.add(account);
    }

    function IncludeAccountToCoolDown(address account) public onlyAuth {
        _excludedFromCoolDown.remove(account);
    }

    function WithdrawProjectETH() public onlyAuth {
        uint256 amount = projectBalance;
        projectBalance = 0;
        address sender = msg.sender;
        (bool sent, ) = sender.call{value: (amount)}("");
        require(sent, "withdraw failed");
    }

    function SwitchManualETHConversion(bool manual) public onlyAuth {
        manualConversion = manual;
    }

    function DisableCoolDown(bool disabled) public onlyAuth {
        coolDownDisabled = disabled;
    }

    function SetCoolDownTime(uint256 coolDownSeconds) public onlyAuth {
        coolDownTime = coolDownSeconds;
    }

    function SetTaxes(
        uint8 projectTaxes,
        uint8 liquidityTaxes,
        uint8 buyTax,
        uint8 sellTax,
        uint8 transferTax
    ) public onlyAuth {
        uint8 totalTax =
            projectTaxes +
            liquidityTaxes;
        require(totalTax == 100, "Project + Liquidity taxes needs to equal 100%");
        _projectTax = projectTaxes;
        _liquidityTax = liquidityTaxes;

        _buyTax = buyTax;
        _sellTax = sellTax;
        _transferTax = transferTax;
    }

    function ManualGenerateTokenSwapBalance(uint256 _qty)
        public
        onlyAuth
    {
        _swapContractToken(_qty * 10**9);
    }

    function UpdateLimits(uint256 newBalanceLimit, uint256 newSellLimit)
        public
        onlyAuth
    {
        newBalanceLimit = newBalanceLimit * 10**_decimals;
        newSellLimit = newSellLimit * 10**_decimals;
        balanceLimit = newBalanceLimit;
        sellLimit = newSellLimit;
    }

    function EnableTrading(bool booly) public onlyAuth {
        tradingEnabled = booly;
    }

    function LiquidityTokenAddress(address liquidityTokenAddress)
        public
        onlyAuth
    {
        _UniswapPairAddress = liquidityTokenAddress;
    }

    function RescueTokens(address tknAddress) public onlyAuth {
        IERC20 token = IERC20(tknAddress);
        uint256 ourBalance = token.balanceOf(address(this));
        require(ourBalance > 0, "No tokens in our balance");
        token.transfer(msg.sender, ourBalance);
    }

    function setBotlistEnabled(bool isBotlistEnabled)
        public
        onlyAuth
    {
        isBotlist = isBotlistEnabled;
    }

    function setContractTokenSwapManual(bool manual) public onlyAuth {
        isTokenSwapManual = manual;
    }

    function setBotlistedAddress(address toBotlist)
        public
        onlyAuth
    {
        _botlist[toBotlist] = true;
    }

    function removeBotlistedAddress(address toRemove)
        public
        onlyAuth
    {
        _botlist[toRemove] = false;
    }

    function AvoidLocks() public onlyAuth {
        (bool sent, ) = msg.sender.call{value: (address(this).balance)}("");
        require(sent);
    }

    function getOwner() external view override returns (address) {
        return owner;
    }

    function name() external pure override returns (string memory) {
        return _name;
    }

    function symbol() external pure override returns (string memory) {
        return _symbol;
    }

    function decimals() external pure override returns (uint8) {
        return _decimals;
    }

    function totalSupply() external view override returns (uint256) {
        return _circulatingSupply;
    }

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

    function transfer(address recipient, uint256 amount)
        external
        override
        returns (bool)
    {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function allowance(address _owner, address spender)
        external
        view
        override
        returns (uint256)
    {
        return _allowances[_owner][spender];
    }

    function approve(address spender, uint256 amount)
        external
        override
        returns (bool)
    {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(
        address _owner,
        address spender,
        uint256 amount
    ) private {
        require(_owner != address(0), "Approve from zero");
        require(spender != address(0), "Approve to zero");

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

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

        uint256 currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "Transfer > allowance");

        _approve(sender, msg.sender, currentAllowance - amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        external
        returns (bool)
    {
        _approve(
            msg.sender,
            spender,
            _allowances[msg.sender][spender] + addedValue
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        returns (bool)
    {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "<0 allowance");

        _approve(msg.sender, spender, currentAllowance - subtractedValue);
        return true;
    }

    // White Rabbit Derivations

    function messageFromTeam(string memory message) public onlyAuth {
        _answerThePhone(message);
    }

    function changeWebsite(string memory newWebsite) public onlyAuth {
        _changeWebsite(newWebsite);
    }

}

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":"string","name":"message","type":"string"}],"name":"Message","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":"string","name":"message","type":"string"}],"name":"answerThePhone","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"AvoidLocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BalanceLimitDivider","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"BotlistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BuyLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Dead","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"disabled","type":"bool"}],"name":"DisableCoolDown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"booly","type":"bool"}],"name":"EnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"ExcludeAccountFromCoolDown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"ExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"IncludeAccountToCoolDown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"IncludeAccountToFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityTokenAddress","type":"address"}],"name":"LiquidityTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"ManualGenerateTokenSwapBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MaxCoolDownTime","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tknAddress","type":"address"}],"name":"RescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SellLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"coolDownSeconds","type":"uint256"}],"name":"SetCoolDownTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isPegged","type":"bool"}],"name":"SetPeggedSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"SetSwapTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"projectTaxes","type":"uint8"},{"internalType":"uint8","name":"liquidityTaxes","type":"uint8"},{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"SetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"SwitchManualETHConversion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UniswapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBalanceLimit","type":"uint256"},{"internalType":"uint256","name":"newSellLimit","type":"uint256"}],"name":"UpdateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WithdrawProjectETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_UniswapPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_UniswapRouter","outputs":[{"internalType":"contract IUniswapRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"_allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_botlist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_coolDown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_projectTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiSnipe","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"addy","type":"address"}],"name":"authorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"buyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"newWebsite","type":"string"}],"name":"changeWebsite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"new_owner","type":"address"}],"name":"change_owner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coolDownDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"getCoolDownTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLimits","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxes","outputs":[{"internalType":"uint256","name":"projectShare","type":"uint256"},{"internalType":"uint256","name":"liquidityShare","type":"uint256"},{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"},{"internalType":"uint256","name":"transferTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWebsiteAddress","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"manualConversion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"message","type":"string"}],"name":"messageFromTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"projectBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toRemove","type":"address"}],"name":"removeBotlistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"isBotlistEnabled","type":"bool"}],"name":"setBotlistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toBotlist","type":"address"}],"name":"setBotlistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"setContractTokenSwapManual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"set_authorized","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052601960809081527f68747470733a2f2f77686974657261626269742e636c69636b0000000000000060a0526002906200003e90826200057a565b50600b805460ff1916600117905560c86200005c6012600a62000759565b6200006c906305f5e1006200076a565b62000078919062000784565b600c55600d80546001600160401b031916660a007d190032011790556002600e55620000a76012600a62000759565b620000b7906305f5e1006200076a565b6010819055601181905560128190556013556014805464ffffffffff191664461e011901179055348015620000eb57600080fd5b50600180546001600160a01b031916339081178255600081815260208181526040808320805460ff1916909517909455601054600382528483208190559351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3601580546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e79190620007a7565b6001600160a01b031663c9c6539630601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002709190620007a7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e49190620007a7565b601480546001600160a01b03929092166801000000000000000002600160401b600160e01b0319909216919091179055600d5460ff630100000090910416620003306012600a62000759565b62000340906305f5e1006200076a565b6200034c919062000784565b601155600d54640100000000900461ffff166200036c6012600a62000759565b6200037c906305f5e1006200076a565b62000388919062000784565b6012908155600d54610100900461ffff1690620003a790600a62000759565b620003b7906305f5e1006200076a565b620003c3919062000784565b601355620003df60063362000463602090811b62001c8717901c565b506200040f737a250d5630b4cf539739df2c5dacb4c659f2488d60086200046360201b62001c871790919060201c565b5062000440601460089054906101000a90046001600160a01b031660086200046360201b62001c871790919060201c565b506200045c3060086200046360201b62001c871790919060201c565b50620007d9565b60006200047a836001600160a01b03841662000483565b90505b92915050565b6000818152600183016020526040812054620004cc575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200047d565b5060006200047d565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200050057607f821691505b6020821081036200052157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200057557600081815260208120601f850160051c81016020861015620005505750805b601f850160051c820191505b8181101562000571578281556001016200055c565b5050505b505050565b81516001600160401b03811115620005965762000596620004d5565b620005ae81620005a78454620004eb565b8462000527565b602080601f831160018114620005e65760008415620005cd5750858301515b600019600386901b1c1916600185901b17855562000571565b600085815260208120601f198616915b828110156200061757888601518255948401946001909101908401620005f6565b5085821015620006365787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200069d57816000190482111562000681576200068162000646565b808516156200068f57918102915b93841c939080029062000661565b509250929050565b600082620006b6575060016200047d565b81620006c5575060006200047d565b8160018114620006de5760028114620006e95762000709565b60019150506200047d565b60ff841115620006fd57620006fd62000646565b50506001821b6200047d565b5060208310610133831016604e8410600b84101617156200072e575081810a6200047d565b6200073a83836200065c565b806000190482111562000751576200075162000646565b029392505050565b60006200047a60ff841683620006a5565b80820281158282048414176200047d576200047d62000646565b600082620007a257634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620007ba57600080fd5b81516001600160a01b0381168114620007d257600080fd5b9392505050565b6132f480620007e96000396000f3fe6080604052600436106104055760003560e01c80636ebcf60711610211578063a6c4c88911610122578063c7639d80116100b0578063d840fd0611610077578063d840fd0614610d8a578063d9012d4a14610da0578063dd62ed3e14610dc0578063de65936814610e06578063fe48183c14610e2657005b8063c7639d8014610cd5578063ca9ec19914610cfd578063d28d885214610d1c578063d2ce0db214610d54578063d45c484114610d6a57005b8063b90291c3116100f4578063b90291c314610c1b578063b918161114610c3b578063c20c87b814610c74578063c2bcf5ea14610c94578063c41ba81014610cb457005b8063a6c4c88914610ba2578063a9059cbb14610bb7578063ada4c3e514610bd7578063b09f126614610bec57005b8063893d20e81161019f57806397832bc71161017157806397832bc714610b17578063a1337b4014610b37578063a253c06e14610b57578063a457c2d714610b6d578063a4993e7b14610b8d57005b8063893d20e814610a8d57806394ceecef14610aab578063954ea66514610acb57806395d89b4114610aeb57005b8063762bb282116101e3578063762bb282146109f65780637a1ada2f14610a0c57806382c4767b14610a3c57806385e1898614610a5257806386d0ada814610a7357005b80636ebcf607146109495780636f89e4091461097657806370a082311461099e5780637373646c146109d457005b80632a24e06411610316578063400f346c116102a45780634f91e48c1161026b5780634f91e48c146108bb578063589210d9146108d15780635d159b7b146108e757806367d479a0146109075780636e0f46821461092957005b8063400f346c1461082b578063409d96ae1461084057806342a110951461086057806349a760421461087a5780634ada218b1461089a57005b806331f1b2db116102e857806331f1b2db1461079557806332424aa3146107b5578063382e329a146107ca57806339509351146107eb5780633eca0abe1461080b57005b80632a24e064146107015780632bfe874214610740578063311a869714610760578063313ce5671461078157005b80631be094751161039357806323b872dd1161036557806323b872dd1461062657806325167dc814610646578063253c8bd4146106665780632973ef2d146106865780632a12055c146106e157005b80631be09475146105b15780631eb25d13146105d15780631f8b845e146105e6578063224f7e5a1461060657005b80630fd99e16116103d75780630fd99e16146104e7578063101c157b1461051d57806315cacef11461054a57806317391e491461056a57806318160ddd1461059c57005b8063024c2ddd1461040e57806302a89e021461045957806306fdde0314610479578063095ea7b3146104b757005b3661040c57005b005b34801561041a57600080fd5b50610446610429366004612bab565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561046557600080fd5b5061040c610474366004612bf2565b610e46565b34801561048557600080fd5b5060408051808201909152600c81526b15da1a5d1948149858989a5d60a21b60208201525b6040516104509190612c0f565b3480156104c357600080fd5b506104d76104d2366004612c5d565b610eb5565b6040519015158152602001610450565b3480156104f357600080fd5b50600d5461050a90640100000000900461ffff1681565b60405161ffff9091168152602001610450565b34801561052957600080fd5b50610446610538366004612c89565b60056020526000908152604090205481565b34801561055657600080fd5b5061040c610565366004612cbc565b610ecc565b34801561057657600080fd5b5060145461058a9062010000900460ff1681565b60405160ff9091168152602001610450565b3480156105a857600080fd5b50601054610446565b3480156105bd57600080fd5b5061040c6105cc366004612d6d565b610f1c565b3480156105dd57600080fd5b50610446610f8b565b3480156105f257600080fd5b50600d5461050a90610100900461ffff1681565b34801561061257600080fd5b5061040c610621366004612c89565b610fa8565b34801561063257600080fd5b506104d7610641366004612d9b565b610ffb565b34801561065257600080fd5b5061040c610661366004612bf2565b611092565b34801561067257600080fd5b5061040c610681366004612c89565b6110f9565b34801561069257600080fd5b506014546040805160ff6401000000008404811682526301000000840481166020830152808416928201929092526101008304821660608201526201000090920416608082015260a001610450565b3480156106ed57600080fd5b5061040c6106fc366004612bf2565b61115f565b34801561070d57600080fd5b5060145461072890600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610450565b34801561074c57600080fd5b5061040c61075b366004612d6d565b6111b6565b34801561076c57600080fd5b50600d5461058a906301000000900460ff1681565b34801561078d57600080fd5b50601261058a565b3480156107a157600080fd5b5061040c6107b0366004612ddc565b611225565b3480156107c157600080fd5b5061058a601281565b3480156107d657600080fd5b5060145461058a906301000000900460ff1681565b3480156107f757600080fd5b506104d7610806366004612c5d565b61127f565b34801561081757600080fd5b5061040c610826366004612e0b565b6112b6565b34801561083757600080fd5b50600e54610446565b34801561084c57600080fd5b5061040c61085b366004612c89565b6113db565b34801561086c57600080fd5b5060145461058a9060ff1681565b34801561088657600080fd5b5061040c610895366004612c89565b611555565b3480156108a657600080fd5b506014546104d790600160381b900460ff1681565b3480156108c757600080fd5b5061044660125481565b3480156108dd57600080fd5b5061044660135481565b3480156108f357600080fd5b5061040c610902366004612bf2565b6115a4565b34801561091357600080fd5b5060145461058a90640100000000900460ff1681565b34801561093557600080fd5b5061040c610944366004612ddc565b6115fb565b34801561095557600080fd5b50610446610964366004612c89565b60036020526000908152604090205481565b34801561098257600080fd5b5060115460125460408051928352602083019190915201610450565b3480156109aa57600080fd5b506104466109b9366004612c89565b6001600160a01b031660009081526003602052604090205490565b3480156109e057600080fd5b50600d5461050a90600160301b900461ffff1681565b348015610a0257600080fd5b5061044660115481565b348015610a1857600080fd5b506104d7610a27366004612c89565b600a6020526000908152604090205460ff1681565b348015610a4857600080fd5b5061072861dead81565b348015610a5e57600080fd5b50600d546104d790600160401b900460ff1681565b348015610a7f57600080fd5b50600f546104d79060ff1681565b348015610a9957600080fd5b506001546001600160a01b0316610728565b348015610ab757600080fd5b5061040c610ac6366004612bf2565b611644565b348015610ad757600080fd5b50601554610728906001600160a01b031681565b348015610af757600080fd5b5060408051808201909152600381526214909560ea1b60208201526104aa565b348015610b2357600080fd5b5061040c610b32366004612bf2565b6116aa565b348015610b4357600080fd5b5061040c610b52366004612c89565b611701565b348015610b6357600080fd5b5061044660105481565b348015610b7957600080fd5b506104d7610b88366004612c5d565b611769565b348015610b9957600080fd5b5061040c6117e5565b348015610bae57600080fd5b5061040c61187e565b348015610bc357600080fd5b506104d7610bd2366004612c5d565b61195c565b348015610be357600080fd5b506104aa611969565b348015610bf857600080fd5b506104aa6040518060400160405280600381526020016214909560ea1b81525081565b348015610c2757600080fd5b5061040c610c36366004612cbc565b6119fb565b348015610c4757600080fd5b506104d7610c56366004612c89565b6001600160a01b031660009081526020819052604090205460ff1690565b348015610c8057600080fd5b5061040c610c8f366004612c89565b611a48565b348015610ca057600080fd5b5061040c610caf366004612e70565b611a97565b348015610cc057600080fd5b506014546104d790600160301b900460ff1681565b348015610ce157600080fd5b50610728737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610d0957600080fd5b5060145461058a90610100900460ff1681565b348015610d2857600080fd5b506104aa6040518060400160405280600c81526020016b15da1a5d1948149858989a5d60a21b81525081565b348015610d6057600080fd5b50610446600e5481565b348015610d7657600080fd5b5061040c610d85366004612c89565b611b15565b348015610d9657600080fd5b5061044660165481565b348015610dac57600080fd5b5061040c610dbb366004612c89565b611b64565b348015610dcc57600080fd5b50610446610ddb366004612bab565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610e1257600080fd5b5061040c610e21366004612ddc565b611bc9565b348015610e3257600080fd5b5061040c610e41366004612c89565b611c12565b3360009081526020819052604090205460ff1680610e6e57506001546001600160a01b031633145b610e935760405162461bcd60e51b8152600401610e8a90612e92565b60405180910390fd5b60148054911515650100000000000265ff000000000019909216919091179055565b6000610ec2338484611ca3565b5060015b92915050565b3360009081526020819052604090205460ff1680610ef457506001546001600160a01b031633145b610f105760405162461bcd60e51b8152600401610e8a90612e92565b610f1981611d97565b50565b3360009081526020819052604090205460ff1680610f4457506001546001600160a01b031633145b610f605760405162461bcd60e51b8152600401610e8a90612e92565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b610f976012600a612faf565b610fa5906305f5e100612fbe565b81565b3360009081526020819052604090205460ff1680610fd057506001546001600160a01b031633145b610fec5760405162461bcd60e51b8152600401610e8a90612e92565b610ff7600682611e08565b5050565b6000611008848484611e1d565b6001600160a01b0384166000908152600460209081526040808320338452909152902054828110156110735760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610e8a565b61108785336110828685612fd5565b611ca3565b506001949350505050565b3360009081526020819052604090205460ff16806110ba57506001546001600160a01b031633145b6110d65760405162461bcd60e51b8152600401610e8a90612e92565b600d8054911515600160401b0268ff000000000000000019909216919091179055565b3360009081526020819052604090205460ff168061112157506001546001600160a01b031633145b61113d5760405162461bcd60e51b8152600401610e8a90612e92565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526020819052604090205460ff168061118757506001546001600160a01b031633145b6111a35760405162461bcd60e51b8152600401610e8a90612e92565b600b805460ff1916911515919091179055565b3360009081526020819052604090205460ff16806111de57506001546001600160a01b031633145b6111fa5760405162461bcd60e51b8152600401610e8a90612e92565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061124d57506001546001600160a01b031633145b6112695760405162461bcd60e51b8152600401610e8a90612e92565b610f1961127a82633b9aca00612fbe565b6121cd565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610ec2918590611082908690612fe8565b3360009081526020819052604090205460ff16806112de57506001546001600160a01b031633145b6112fa5760405162461bcd60e51b8152600401610e8a90612e92565b60006113068587612ffb565b90508060ff166064146113715760405162461bcd60e51b815260206004820152602d60248201527f50726f6a656374202b204c6971756964697479207461786573206e656564732060448201526c746f20657175616c203130302560981b6064820152608401610e8a565b506014805460ff928316620100000262ff0000199484166101000261ffff1997851663010000000263ff00000019998616640100000000029990991664ffff0000001990931692909217979097179590951693909116929092179290921791909116919091179055565b3360009081526020819052604090205460ff168061140357506001546001600160a01b031633145b61141f5760405162461bcd60e51b8152600401610e8a90612e92565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148c9190613014565b9050600081116114de5760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610e8a565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061302d565b50505050565b3360009081526020819052604090205460ff168061157d57506001546001600160a01b031633145b6115995760405162461bcd60e51b8152600401610e8a90612e92565b610ff7600682611c87565b3360009081526020819052604090205460ff16806115cc57506001546001600160a01b031633145b6115e85760405162461bcd60e51b8152600401610e8a90612e92565b600d805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061162357506001546001600160a01b031633145b61163f5760405162461bcd60e51b8152600401610e8a90612e92565b600e55565b3360009081526020819052604090205460ff168061166c57506001546001600160a01b031633145b6116885760405162461bcd60e51b8152600401610e8a90612e92565b60148054911515600160381b0267ff0000000000000019909216919091179055565b3360009081526020819052604090205460ff16806116d257506001546001600160a01b031633145b6116ee5760405162461bcd60e51b8152600401610e8a90612e92565b600f805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061172957506001546001600160a01b031633145b6117455760405162461bcd60e51b8152600401610e8a90612e92565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156117cc5760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610e8a565b6117db33856110828685612fd5565b5060019392505050565b3360009081526020819052604090205460ff168061180d57506001546001600160a01b031633145b6118295760405162461bcd60e51b8152600401610e8a90612e92565b604051600090339047908381818185875af1925050503d806000811461186b576040519150601f19603f3d011682016040523d82523d6000602084013e611870565b606091505b5050905080610f1957600080fd5b3360009081526020819052604090205460ff16806118a657506001546001600160a01b031633145b6118c25760405162461bcd60e51b8152600401610e8a90612e92565b6016805460009182905560405190913391829084908381818185875af1925050503d806000811461190f576040519150601f19603f3d011682016040523d82523d6000602084013e611914565b606091505b50509050806119575760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610e8a565b505050565b6000610ec2338484611e1d565b6060600280546119789061304a565b80601f01602080910402602001604051908101604052809291908181526020018280546119a49061304a565b80156119f15780601f106119c6576101008083540402835291602001916119f1565b820191906000526020600020905b8154815290600101906020018083116119d457829003601f168201915b5050505050905090565b3360009081526020819052604090205460ff1680611a2357506001546001600160a01b031633145b611a3f5760405162461bcd60e51b8152600401610e8a90612e92565b610f1981612335565b3360009081526020819052604090205460ff1680611a7057506001546001600160a01b031633145b611a8c5760405162461bcd60e51b8152600401610e8a90612e92565b610ff7600882611c87565b3360009081526020819052604090205460ff1680611abf57506001546001600160a01b031633145b611adb5760405162461bcd60e51b8152600401610e8a90612e92565b611ae76012600a612faf565b611af19083612fbe565b9150611aff6012600a612faf565b611b099082612fbe565b60119290925550601255565b3360009081526020819052604090205460ff1680611b3d57506001546001600160a01b031633145b611b595760405162461bcd60e51b8152600401610e8a90612e92565b610ff7600882611e08565b3360009081526020819052604090205460ff1680611b8c57506001546001600160a01b031633145b611ba85760405162461bcd60e51b8152600401610e8a90612e92565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b3360009081526020819052604090205460ff1680611bf157506001546001600160a01b031633145b611c0d5760405162461bcd60e51b8152600401610e8a90612e92565b600c55565b3360009081526020819052604090205460ff1680611c3a57506001546001600160a01b031633145b611c565760405162461bcd60e51b8152600401610e8a90612e92565b601480546001600160a01b03909216600160401b0268010000000000000000600160e01b0319909216919091179055565b6000611c9c836001600160a01b038416612341565b9392505050565b6001600160a01b038316611ced5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610e8a565b6001600160a01b038216611d355760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610e8a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b7f51a7f65c6325882f237d4aeb43228179cfad48b868511d508e24b4437a81913781604051611dc69190612c0f565b60405180910390a17f0de55d0848e0c543ad20a42b124b12dd2342cee1587aa104f17c948967a542ef81604051611dfd9190612c0f565b60405180910390a150565b6000611c9c836001600160a01b038416612390565b6001600160a01b038316611e685760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610e8a565b600b5460ff1615611eee576001600160a01b0383166000908152600a602052604090205460ff16158015611eb557506001600160a01b0382166000908152600a602052604090205460ff16155b611eee5760405162461bcd60e51b815260206004820152600a602482015269426f746c69737465642160b01b6044820152606401610e8a565b6000611efb60068561247d565b80611f0c5750611f0c60068461247d565b80611f2f57506001600160a01b03841660009081526020819052604090205460ff165b80611f5257506001600160a01b03831660009081526020819052604090205460ff165b905060006001600160a01b038516301480611f7557506001600160a01b03841630145b6014549091506000906001600160a01b03878116600160401b90920416148015611fbb57506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b8061200157506014546001600160a01b03868116600160401b9092041614801561200157506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b9050818061200c5750805b806120145750825b156120295761202486868661249f565b6121c5565b601454600160381b900460ff1661212c576001546001600160a01b0387811691161480159061206657506001546001600160a01b03868116911614155b1561212c57601454600160301b900460ff16156120d357846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040516120c391815260200190565b60405180910390a3505050505050565b601454600160381b900460ff1661212c5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610e8a565b6014546000906001600160a01b03888116600160401b90920416148061216e57506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6014549091506000906001600160a01b03888116600160401b9092041614806121b357506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b90506121c2888888858561255b565b50505b505050505050565b6017805460ff1916600117905530600090815260036020526040902054600c548110156121fa5750612328565b601454600c54630100000090910460ff16908381111561222257600d5460ff16156122225750825b8161ffff1660000361223657505050612328565b60145460009061ffff841690612256906301000000900460ff1684612fbe565b6122609190613084565b60145490915060009061ffff85169061228490640100000000900460ff1685612fbe565b61228e9190613084565b9050600061229d600284613084565b905060006122ab8285612fd5565b905060006122b98483612fe8565b9050476122c5826128f7565b60006122d18247612fd5565b90506000836122e08684612fbe565b6122ea9190613084565b90506122f68682612a48565b60006123028447612fd5565b905080601660008282546123169190612fe8565b90915550505050505050505050505050505b506017805460ff19169055565b6002610ff782826130ec565b600081815260018301602052604081205461238857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ec6565b506000610ec6565b600081815260018301602052604081205480156124735760006123b4600183612fd5565b85549091506000906123c890600190612fd5565b905060008660000182815481106123e1576123e16131ac565b9060005260206000200154905080876000018481548110612404576124046131ac565b600091825260208083209091019290925582815260018901909152604090208490558654879080612437576124376131c2565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610ec6565b6000915050610ec6565b6001600160a01b03811660009081526001830160205260408120541515611c9c565b6001600160a01b0383166000908152600360205260409020548111156125025760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e8a565b61250c8382612af9565b6125168282612b3e565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d8a91815260200190565b6001600160a01b038085166000908152600360205260408082205492881682529020548411156125c85760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e8a565b600082156126cc576125db60088861247d565b612677576001600160a01b0387166000908152600560205260409020544210158061260f5750600d54600160401b900460ff165b6126505760405162461bcd60e51b815260206004820152601260248201527129b2b63632b91034b71031b7b7b62237bbb760711b6044820152606401610e8a565b600e5461265d9042612fe8565b6001600160a01b0388166000908152600560205260409020555b6012548511156126bb5760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610e8a565b50601454610100900460ff166127e0565b831561272b576011546126df8684612fe8565b11156126fd5760405162461bcd60e51b8152600401610e8a906131d8565b60135485111561271f5760405162461bcd60e51b8152600401610e8a906131d8565b5060145460ff166127e0565b6011546127388684612fe8565b11156127565760405162461bcd60e51b8152600401610e8a906131d8565b61276160088861247d565b6127d2576001600160a01b038716600090815260056020526040902054421015806127955750600d54600160401b900460ff165b6127d25760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610e8a565b5060145462010000900460ff165b6014546001600160a01b03888116600160401b90920416148015906128085750600f5460ff16155b8015612817575060175460ff16155b1561282557612825856121cd565b60145460009061285690879084906128519060ff64010000000082048116916301000000900416612ffb565b612b62565b905060006128648288612fd5565b90506128708988612af9565b306000908152600360205260408120805484929061288f908490612fe8565b9091555061289f90508882612b3e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516128e491815260200190565b60405180910390a3505050505050505050565b60155461290f9030906001600160a01b031683611ca3565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612944576129446131ac565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561299d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c19190613202565b816001815181106129d4576129d46131ac565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b815291169063791ac94790612a1a90859060009086903090429060040161321f565b600060405180830381600087803b158015612a3457600080fd5b505af11580156121c5573d6000803e3d6000fd5b601554612a609030906001600160a01b031684611ca3565b60155460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612acd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612af29190613290565b5050505050565b6001600160a01b038216600090815260036020526040812054612b1d908390612fd5565b6001600160a01b039093166000908152600360205260409020929092555050565b6001600160a01b038216600090815260036020526040812054612b1d908390612fe8565b60006127108260ff168460ff1686612b7a9190612fbe565b612b849190612fbe565b612b8e9190613084565b949350505050565b6001600160a01b0381168114610f1957600080fd5b60008060408385031215612bbe57600080fd5b8235612bc981612b96565b91506020830135612bd981612b96565b809150509250929050565b8015158114610f1957600080fd5b600060208284031215612c0457600080fd5b8135611c9c81612be4565b600060208083528351808285015260005b81811015612c3c57858101830151858201604001528201612c20565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612c7057600080fd5b8235612c7b81612b96565b946020939093013593505050565b600060208284031215612c9b57600080fd5b8135611c9c81612b96565b634e487b7160e01b600052604160045260246000fd5b600060208284031215612cce57600080fd5b813567ffffffffffffffff80821115612ce657600080fd5b818401915084601f830112612cfa57600080fd5b813581811115612d0c57612d0c612ca6565b604051601f8201601f19908116603f01168101908382118183101715612d3457612d34612ca6565b81604052828152876020848701011115612d4d57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060408385031215612d8057600080fd5b8235612d8b81612b96565b91506020830135612bd981612be4565b600080600060608486031215612db057600080fd5b8335612dbb81612b96565b92506020840135612dcb81612b96565b929592945050506040919091013590565b600060208284031215612dee57600080fd5b5035919050565b803560ff81168114612e0657600080fd5b919050565b600080600080600060a08688031215612e2357600080fd5b612e2c86612df5565b9450612e3a60208701612df5565b9350612e4860408701612df5565b9250612e5660608701612df5565b9150612e6460808701612df5565b90509295509295909350565b60008060408385031215612e8357600080fd5b50508035926020909101359150565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612f06578160001904821115612eec57612eec612eb5565b80851615612ef957918102915b93841c9390800290612ed0565b509250929050565b600082612f1d57506001610ec6565b81612f2a57506000610ec6565b8160018114612f405760028114612f4a57612f66565b6001915050610ec6565b60ff841115612f5b57612f5b612eb5565b50506001821b610ec6565b5060208310610133831016604e8410600b8410161715612f89575081810a610ec6565b612f938383612ecb565b8060001904821115612fa757612fa7612eb5565b029392505050565b6000611c9c60ff841683612f0e565b8082028115828204841417610ec657610ec6612eb5565b81810381811115610ec657610ec6612eb5565b80820180821115610ec657610ec6612eb5565b60ff8181168382160190811115610ec657610ec6612eb5565b60006020828403121561302657600080fd5b5051919050565b60006020828403121561303f57600080fd5b8151611c9c81612be4565b600181811c9082168061305e57607f821691505b60208210810361307e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826130a157634e487b7160e01b600052601260045260246000fd5b500490565b601f82111561195757600081815260208120601f850160051c810160208610156130cd5750805b601f850160051c820191505b818110156121c5578281556001016130d9565b815167ffffffffffffffff81111561310657613106612ca6565b61311a81613114845461304a565b846130a6565b602080601f83116001811461314f57600084156131375750858301515b600019600386901b1c1916600185901b1785556121c5565b600085815260208120601f198616915b8281101561317e5788860151825594840194600190910190840161315f565b508582101561319c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b60006020828403121561321457600080fd5b8151611c9c81612b96565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561326f5784516001600160a01b03168352938301939183019160010161324a565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132a557600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a28c4389ed2b376b9d963f25777635c9d8d58b2992756a1ad33a0425cdb1bd3b64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106104055760003560e01c80636ebcf60711610211578063a6c4c88911610122578063c7639d80116100b0578063d840fd0611610077578063d840fd0614610d8a578063d9012d4a14610da0578063dd62ed3e14610dc0578063de65936814610e06578063fe48183c14610e2657005b8063c7639d8014610cd5578063ca9ec19914610cfd578063d28d885214610d1c578063d2ce0db214610d54578063d45c484114610d6a57005b8063b90291c3116100f4578063b90291c314610c1b578063b918161114610c3b578063c20c87b814610c74578063c2bcf5ea14610c94578063c41ba81014610cb457005b8063a6c4c88914610ba2578063a9059cbb14610bb7578063ada4c3e514610bd7578063b09f126614610bec57005b8063893d20e81161019f57806397832bc71161017157806397832bc714610b17578063a1337b4014610b37578063a253c06e14610b57578063a457c2d714610b6d578063a4993e7b14610b8d57005b8063893d20e814610a8d57806394ceecef14610aab578063954ea66514610acb57806395d89b4114610aeb57005b8063762bb282116101e3578063762bb282146109f65780637a1ada2f14610a0c57806382c4767b14610a3c57806385e1898614610a5257806386d0ada814610a7357005b80636ebcf607146109495780636f89e4091461097657806370a082311461099e5780637373646c146109d457005b80632a24e06411610316578063400f346c116102a45780634f91e48c1161026b5780634f91e48c146108bb578063589210d9146108d15780635d159b7b146108e757806367d479a0146109075780636e0f46821461092957005b8063400f346c1461082b578063409d96ae1461084057806342a110951461086057806349a760421461087a5780634ada218b1461089a57005b806331f1b2db116102e857806331f1b2db1461079557806332424aa3146107b5578063382e329a146107ca57806339509351146107eb5780633eca0abe1461080b57005b80632a24e064146107015780632bfe874214610740578063311a869714610760578063313ce5671461078157005b80631be094751161039357806323b872dd1161036557806323b872dd1461062657806325167dc814610646578063253c8bd4146106665780632973ef2d146106865780632a12055c146106e157005b80631be09475146105b15780631eb25d13146105d15780631f8b845e146105e6578063224f7e5a1461060657005b80630fd99e16116103d75780630fd99e16146104e7578063101c157b1461051d57806315cacef11461054a57806317391e491461056a57806318160ddd1461059c57005b8063024c2ddd1461040e57806302a89e021461045957806306fdde0314610479578063095ea7b3146104b757005b3661040c57005b005b34801561041a57600080fd5b50610446610429366004612bab565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561046557600080fd5b5061040c610474366004612bf2565b610e46565b34801561048557600080fd5b5060408051808201909152600c81526b15da1a5d1948149858989a5d60a21b60208201525b6040516104509190612c0f565b3480156104c357600080fd5b506104d76104d2366004612c5d565b610eb5565b6040519015158152602001610450565b3480156104f357600080fd5b50600d5461050a90640100000000900461ffff1681565b60405161ffff9091168152602001610450565b34801561052957600080fd5b50610446610538366004612c89565b60056020526000908152604090205481565b34801561055657600080fd5b5061040c610565366004612cbc565b610ecc565b34801561057657600080fd5b5060145461058a9062010000900460ff1681565b60405160ff9091168152602001610450565b3480156105a857600080fd5b50601054610446565b3480156105bd57600080fd5b5061040c6105cc366004612d6d565b610f1c565b3480156105dd57600080fd5b50610446610f8b565b3480156105f257600080fd5b50600d5461050a90610100900461ffff1681565b34801561061257600080fd5b5061040c610621366004612c89565b610fa8565b34801561063257600080fd5b506104d7610641366004612d9b565b610ffb565b34801561065257600080fd5b5061040c610661366004612bf2565b611092565b34801561067257600080fd5b5061040c610681366004612c89565b6110f9565b34801561069257600080fd5b506014546040805160ff6401000000008404811682526301000000840481166020830152808416928201929092526101008304821660608201526201000090920416608082015260a001610450565b3480156106ed57600080fd5b5061040c6106fc366004612bf2565b61115f565b34801561070d57600080fd5b5060145461072890600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610450565b34801561074c57600080fd5b5061040c61075b366004612d6d565b6111b6565b34801561076c57600080fd5b50600d5461058a906301000000900460ff1681565b34801561078d57600080fd5b50601261058a565b3480156107a157600080fd5b5061040c6107b0366004612ddc565b611225565b3480156107c157600080fd5b5061058a601281565b3480156107d657600080fd5b5060145461058a906301000000900460ff1681565b3480156107f757600080fd5b506104d7610806366004612c5d565b61127f565b34801561081757600080fd5b5061040c610826366004612e0b565b6112b6565b34801561083757600080fd5b50600e54610446565b34801561084c57600080fd5b5061040c61085b366004612c89565b6113db565b34801561086c57600080fd5b5060145461058a9060ff1681565b34801561088657600080fd5b5061040c610895366004612c89565b611555565b3480156108a657600080fd5b506014546104d790600160381b900460ff1681565b3480156108c757600080fd5b5061044660125481565b3480156108dd57600080fd5b5061044660135481565b3480156108f357600080fd5b5061040c610902366004612bf2565b6115a4565b34801561091357600080fd5b5060145461058a90640100000000900460ff1681565b34801561093557600080fd5b5061040c610944366004612ddc565b6115fb565b34801561095557600080fd5b50610446610964366004612c89565b60036020526000908152604090205481565b34801561098257600080fd5b5060115460125460408051928352602083019190915201610450565b3480156109aa57600080fd5b506104466109b9366004612c89565b6001600160a01b031660009081526003602052604090205490565b3480156109e057600080fd5b50600d5461050a90600160301b900461ffff1681565b348015610a0257600080fd5b5061044660115481565b348015610a1857600080fd5b506104d7610a27366004612c89565b600a6020526000908152604090205460ff1681565b348015610a4857600080fd5b5061072861dead81565b348015610a5e57600080fd5b50600d546104d790600160401b900460ff1681565b348015610a7f57600080fd5b50600f546104d79060ff1681565b348015610a9957600080fd5b506001546001600160a01b0316610728565b348015610ab757600080fd5b5061040c610ac6366004612bf2565b611644565b348015610ad757600080fd5b50601554610728906001600160a01b031681565b348015610af757600080fd5b5060408051808201909152600381526214909560ea1b60208201526104aa565b348015610b2357600080fd5b5061040c610b32366004612bf2565b6116aa565b348015610b4357600080fd5b5061040c610b52366004612c89565b611701565b348015610b6357600080fd5b5061044660105481565b348015610b7957600080fd5b506104d7610b88366004612c5d565b611769565b348015610b9957600080fd5b5061040c6117e5565b348015610bae57600080fd5b5061040c61187e565b348015610bc357600080fd5b506104d7610bd2366004612c5d565b61195c565b348015610be357600080fd5b506104aa611969565b348015610bf857600080fd5b506104aa6040518060400160405280600381526020016214909560ea1b81525081565b348015610c2757600080fd5b5061040c610c36366004612cbc565b6119fb565b348015610c4757600080fd5b506104d7610c56366004612c89565b6001600160a01b031660009081526020819052604090205460ff1690565b348015610c8057600080fd5b5061040c610c8f366004612c89565b611a48565b348015610ca057600080fd5b5061040c610caf366004612e70565b611a97565b348015610cc057600080fd5b506014546104d790600160301b900460ff1681565b348015610ce157600080fd5b50610728737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610d0957600080fd5b5060145461058a90610100900460ff1681565b348015610d2857600080fd5b506104aa6040518060400160405280600c81526020016b15da1a5d1948149858989a5d60a21b81525081565b348015610d6057600080fd5b50610446600e5481565b348015610d7657600080fd5b5061040c610d85366004612c89565b611b15565b348015610d9657600080fd5b5061044660165481565b348015610dac57600080fd5b5061040c610dbb366004612c89565b611b64565b348015610dcc57600080fd5b50610446610ddb366004612bab565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610e1257600080fd5b5061040c610e21366004612ddc565b611bc9565b348015610e3257600080fd5b5061040c610e41366004612c89565b611c12565b3360009081526020819052604090205460ff1680610e6e57506001546001600160a01b031633145b610e935760405162461bcd60e51b8152600401610e8a90612e92565b60405180910390fd5b60148054911515650100000000000265ff000000000019909216919091179055565b6000610ec2338484611ca3565b5060015b92915050565b3360009081526020819052604090205460ff1680610ef457506001546001600160a01b031633145b610f105760405162461bcd60e51b8152600401610e8a90612e92565b610f1981611d97565b50565b3360009081526020819052604090205460ff1680610f4457506001546001600160a01b031633145b610f605760405162461bcd60e51b8152600401610e8a90612e92565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b610f976012600a612faf565b610fa5906305f5e100612fbe565b81565b3360009081526020819052604090205460ff1680610fd057506001546001600160a01b031633145b610fec5760405162461bcd60e51b8152600401610e8a90612e92565b610ff7600682611e08565b5050565b6000611008848484611e1d565b6001600160a01b0384166000908152600460209081526040808320338452909152902054828110156110735760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610e8a565b61108785336110828685612fd5565b611ca3565b506001949350505050565b3360009081526020819052604090205460ff16806110ba57506001546001600160a01b031633145b6110d65760405162461bcd60e51b8152600401610e8a90612e92565b600d8054911515600160401b0268ff000000000000000019909216919091179055565b3360009081526020819052604090205460ff168061112157506001546001600160a01b031633145b61113d5760405162461bcd60e51b8152600401610e8a90612e92565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526020819052604090205460ff168061118757506001546001600160a01b031633145b6111a35760405162461bcd60e51b8152600401610e8a90612e92565b600b805460ff1916911515919091179055565b3360009081526020819052604090205460ff16806111de57506001546001600160a01b031633145b6111fa5760405162461bcd60e51b8152600401610e8a90612e92565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061124d57506001546001600160a01b031633145b6112695760405162461bcd60e51b8152600401610e8a90612e92565b610f1961127a82633b9aca00612fbe565b6121cd565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610ec2918590611082908690612fe8565b3360009081526020819052604090205460ff16806112de57506001546001600160a01b031633145b6112fa5760405162461bcd60e51b8152600401610e8a90612e92565b60006113068587612ffb565b90508060ff166064146113715760405162461bcd60e51b815260206004820152602d60248201527f50726f6a656374202b204c6971756964697479207461786573206e656564732060448201526c746f20657175616c203130302560981b6064820152608401610e8a565b506014805460ff928316620100000262ff0000199484166101000261ffff1997851663010000000263ff00000019998616640100000000029990991664ffff0000001990931692909217979097179590951693909116929092179290921791909116919091179055565b3360009081526020819052604090205460ff168061140357506001546001600160a01b031633145b61141f5760405162461bcd60e51b8152600401610e8a90612e92565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148c9190613014565b9050600081116114de5760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610e8a565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061302d565b50505050565b3360009081526020819052604090205460ff168061157d57506001546001600160a01b031633145b6115995760405162461bcd60e51b8152600401610e8a90612e92565b610ff7600682611c87565b3360009081526020819052604090205460ff16806115cc57506001546001600160a01b031633145b6115e85760405162461bcd60e51b8152600401610e8a90612e92565b600d805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061162357506001546001600160a01b031633145b61163f5760405162461bcd60e51b8152600401610e8a90612e92565b600e55565b3360009081526020819052604090205460ff168061166c57506001546001600160a01b031633145b6116885760405162461bcd60e51b8152600401610e8a90612e92565b60148054911515600160381b0267ff0000000000000019909216919091179055565b3360009081526020819052604090205460ff16806116d257506001546001600160a01b031633145b6116ee5760405162461bcd60e51b8152600401610e8a90612e92565b600f805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061172957506001546001600160a01b031633145b6117455760405162461bcd60e51b8152600401610e8a90612e92565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156117cc5760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610e8a565b6117db33856110828685612fd5565b5060019392505050565b3360009081526020819052604090205460ff168061180d57506001546001600160a01b031633145b6118295760405162461bcd60e51b8152600401610e8a90612e92565b604051600090339047908381818185875af1925050503d806000811461186b576040519150601f19603f3d011682016040523d82523d6000602084013e611870565b606091505b5050905080610f1957600080fd5b3360009081526020819052604090205460ff16806118a657506001546001600160a01b031633145b6118c25760405162461bcd60e51b8152600401610e8a90612e92565b6016805460009182905560405190913391829084908381818185875af1925050503d806000811461190f576040519150601f19603f3d011682016040523d82523d6000602084013e611914565b606091505b50509050806119575760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610e8a565b505050565b6000610ec2338484611e1d565b6060600280546119789061304a565b80601f01602080910402602001604051908101604052809291908181526020018280546119a49061304a565b80156119f15780601f106119c6576101008083540402835291602001916119f1565b820191906000526020600020905b8154815290600101906020018083116119d457829003601f168201915b5050505050905090565b3360009081526020819052604090205460ff1680611a2357506001546001600160a01b031633145b611a3f5760405162461bcd60e51b8152600401610e8a90612e92565b610f1981612335565b3360009081526020819052604090205460ff1680611a7057506001546001600160a01b031633145b611a8c5760405162461bcd60e51b8152600401610e8a90612e92565b610ff7600882611c87565b3360009081526020819052604090205460ff1680611abf57506001546001600160a01b031633145b611adb5760405162461bcd60e51b8152600401610e8a90612e92565b611ae76012600a612faf565b611af19083612fbe565b9150611aff6012600a612faf565b611b099082612fbe565b60119290925550601255565b3360009081526020819052604090205460ff1680611b3d57506001546001600160a01b031633145b611b595760405162461bcd60e51b8152600401610e8a90612e92565b610ff7600882611e08565b3360009081526020819052604090205460ff1680611b8c57506001546001600160a01b031633145b611ba85760405162461bcd60e51b8152600401610e8a90612e92565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b3360009081526020819052604090205460ff1680611bf157506001546001600160a01b031633145b611c0d5760405162461bcd60e51b8152600401610e8a90612e92565b600c55565b3360009081526020819052604090205460ff1680611c3a57506001546001600160a01b031633145b611c565760405162461bcd60e51b8152600401610e8a90612e92565b601480546001600160a01b03909216600160401b0268010000000000000000600160e01b0319909216919091179055565b6000611c9c836001600160a01b038416612341565b9392505050565b6001600160a01b038316611ced5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610e8a565b6001600160a01b038216611d355760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610e8a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b7f51a7f65c6325882f237d4aeb43228179cfad48b868511d508e24b4437a81913781604051611dc69190612c0f565b60405180910390a17f0de55d0848e0c543ad20a42b124b12dd2342cee1587aa104f17c948967a542ef81604051611dfd9190612c0f565b60405180910390a150565b6000611c9c836001600160a01b038416612390565b6001600160a01b038316611e685760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610e8a565b600b5460ff1615611eee576001600160a01b0383166000908152600a602052604090205460ff16158015611eb557506001600160a01b0382166000908152600a602052604090205460ff16155b611eee5760405162461bcd60e51b815260206004820152600a602482015269426f746c69737465642160b01b6044820152606401610e8a565b6000611efb60068561247d565b80611f0c5750611f0c60068461247d565b80611f2f57506001600160a01b03841660009081526020819052604090205460ff165b80611f5257506001600160a01b03831660009081526020819052604090205460ff165b905060006001600160a01b038516301480611f7557506001600160a01b03841630145b6014549091506000906001600160a01b03878116600160401b90920416148015611fbb57506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b8061200157506014546001600160a01b03868116600160401b9092041614801561200157506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b9050818061200c5750805b806120145750825b156120295761202486868661249f565b6121c5565b601454600160381b900460ff1661212c576001546001600160a01b0387811691161480159061206657506001546001600160a01b03868116911614155b1561212c57601454600160301b900460ff16156120d357846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040516120c391815260200190565b60405180910390a3505050505050565b601454600160381b900460ff1661212c5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610e8a565b6014546000906001600160a01b03888116600160401b90920416148061216e57506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6014549091506000906001600160a01b03888116600160401b9092041614806121b357506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b90506121c2888888858561255b565b50505b505050505050565b6017805460ff1916600117905530600090815260036020526040902054600c548110156121fa5750612328565b601454600c54630100000090910460ff16908381111561222257600d5460ff16156122225750825b8161ffff1660000361223657505050612328565b60145460009061ffff841690612256906301000000900460ff1684612fbe565b6122609190613084565b60145490915060009061ffff85169061228490640100000000900460ff1685612fbe565b61228e9190613084565b9050600061229d600284613084565b905060006122ab8285612fd5565b905060006122b98483612fe8565b9050476122c5826128f7565b60006122d18247612fd5565b90506000836122e08684612fbe565b6122ea9190613084565b90506122f68682612a48565b60006123028447612fd5565b905080601660008282546123169190612fe8565b90915550505050505050505050505050505b506017805460ff19169055565b6002610ff782826130ec565b600081815260018301602052604081205461238857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ec6565b506000610ec6565b600081815260018301602052604081205480156124735760006123b4600183612fd5565b85549091506000906123c890600190612fd5565b905060008660000182815481106123e1576123e16131ac565b9060005260206000200154905080876000018481548110612404576124046131ac565b600091825260208083209091019290925582815260018901909152604090208490558654879080612437576124376131c2565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610ec6565b6000915050610ec6565b6001600160a01b03811660009081526001830160205260408120541515611c9c565b6001600160a01b0383166000908152600360205260409020548111156125025760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e8a565b61250c8382612af9565b6125168282612b3e565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d8a91815260200190565b6001600160a01b038085166000908152600360205260408082205492881682529020548411156125c85760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e8a565b600082156126cc576125db60088861247d565b612677576001600160a01b0387166000908152600560205260409020544210158061260f5750600d54600160401b900460ff165b6126505760405162461bcd60e51b815260206004820152601260248201527129b2b63632b91034b71031b7b7b62237bbb760711b6044820152606401610e8a565b600e5461265d9042612fe8565b6001600160a01b0388166000908152600560205260409020555b6012548511156126bb5760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610e8a565b50601454610100900460ff166127e0565b831561272b576011546126df8684612fe8565b11156126fd5760405162461bcd60e51b8152600401610e8a906131d8565b60135485111561271f5760405162461bcd60e51b8152600401610e8a906131d8565b5060145460ff166127e0565b6011546127388684612fe8565b11156127565760405162461bcd60e51b8152600401610e8a906131d8565b61276160088861247d565b6127d2576001600160a01b038716600090815260056020526040902054421015806127955750600d54600160401b900460ff165b6127d25760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610e8a565b5060145462010000900460ff165b6014546001600160a01b03888116600160401b90920416148015906128085750600f5460ff16155b8015612817575060175460ff16155b1561282557612825856121cd565b60145460009061285690879084906128519060ff64010000000082048116916301000000900416612ffb565b612b62565b905060006128648288612fd5565b90506128708988612af9565b306000908152600360205260408120805484929061288f908490612fe8565b9091555061289f90508882612b3e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516128e491815260200190565b60405180910390a3505050505050505050565b60155461290f9030906001600160a01b031683611ca3565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612944576129446131ac565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561299d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c19190613202565b816001815181106129d4576129d46131ac565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b815291169063791ac94790612a1a90859060009086903090429060040161321f565b600060405180830381600087803b158015612a3457600080fd5b505af11580156121c5573d6000803e3d6000fd5b601554612a609030906001600160a01b031684611ca3565b60155460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612acd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612af29190613290565b5050505050565b6001600160a01b038216600090815260036020526040812054612b1d908390612fd5565b6001600160a01b039093166000908152600360205260409020929092555050565b6001600160a01b038216600090815260036020526040812054612b1d908390612fe8565b60006127108260ff168460ff1686612b7a9190612fbe565b612b849190612fbe565b612b8e9190613084565b949350505050565b6001600160a01b0381168114610f1957600080fd5b60008060408385031215612bbe57600080fd5b8235612bc981612b96565b91506020830135612bd981612b96565b809150509250929050565b8015158114610f1957600080fd5b600060208284031215612c0457600080fd5b8135611c9c81612be4565b600060208083528351808285015260005b81811015612c3c57858101830151858201604001528201612c20565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612c7057600080fd5b8235612c7b81612b96565b946020939093013593505050565b600060208284031215612c9b57600080fd5b8135611c9c81612b96565b634e487b7160e01b600052604160045260246000fd5b600060208284031215612cce57600080fd5b813567ffffffffffffffff80821115612ce657600080fd5b818401915084601f830112612cfa57600080fd5b813581811115612d0c57612d0c612ca6565b604051601f8201601f19908116603f01168101908382118183101715612d3457612d34612ca6565b81604052828152876020848701011115612d4d57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060408385031215612d8057600080fd5b8235612d8b81612b96565b91506020830135612bd981612be4565b600080600060608486031215612db057600080fd5b8335612dbb81612b96565b92506020840135612dcb81612b96565b929592945050506040919091013590565b600060208284031215612dee57600080fd5b5035919050565b803560ff81168114612e0657600080fd5b919050565b600080600080600060a08688031215612e2357600080fd5b612e2c86612df5565b9450612e3a60208701612df5565b9350612e4860408701612df5565b9250612e5660608701612df5565b9150612e6460808701612df5565b90509295509295909350565b60008060408385031215612e8357600080fd5b50508035926020909101359150565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612f06578160001904821115612eec57612eec612eb5565b80851615612ef957918102915b93841c9390800290612ed0565b509250929050565b600082612f1d57506001610ec6565b81612f2a57506000610ec6565b8160018114612f405760028114612f4a57612f66565b6001915050610ec6565b60ff841115612f5b57612f5b612eb5565b50506001821b610ec6565b5060208310610133831016604e8410600b8410161715612f89575081810a610ec6565b612f938383612ecb565b8060001904821115612fa757612fa7612eb5565b029392505050565b6000611c9c60ff841683612f0e565b8082028115828204841417610ec657610ec6612eb5565b81810381811115610ec657610ec6612eb5565b80820180821115610ec657610ec6612eb5565b60ff8181168382160190811115610ec657610ec6612eb5565b60006020828403121561302657600080fd5b5051919050565b60006020828403121561303f57600080fd5b8151611c9c81612be4565b600181811c9082168061305e57607f821691505b60208210810361307e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826130a157634e487b7160e01b600052601260045260246000fd5b500490565b601f82111561195757600081815260208120601f850160051c810160208610156130cd5750805b601f850160051c820191505b818110156121c5578281556001016130d9565b815167ffffffffffffffff81111561310657613106612ca6565b61311a81613114845461304a565b846130a6565b602080601f83116001811461314f57600084156131375750858301515b600019600386901b1c1916600185901b1785556121c5565b600085815260208120601f198616915b8281101561317e5788860151825594840194600190910190840161315f565b508582101561319c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b60006020828403121561321457600080fd5b8151611c9c81612b96565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561326f5784516001600160a01b03168352938301939183019160010161324a565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132a557600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a28c4389ed2b376b9d963f25777635c9d8d58b2992756a1ad33a0425cdb1bd3b64736f6c63430008110033

Deployed Bytecode Sourcemap

18671:19915:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19057:66;;;;;;;;;;-1:-1:-1;19057:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;689:25:1;;;677:2;662:18;19057:66:0;;;;;;;;35027:110;;;;;;;;;;-1:-1:-1;35027:110:0;;;;;:::i;:::-;;:::i;35683:94::-;;;;;;;;;;-1:-1:-1;35764:5:0;;;;;;;;;;;;-1:-1:-1;;;35764:5:0;;;;35683:94;;;;;;;:::i;36682:193::-;;;;;;;;;;-1:-1:-1;36682:193:0;;;;;:::i;:::-;;:::i;:::-;;;2132:14:1;;2125:22;2107:41;;2095:2;2080:18;36682:193:0;1967:187:1;19551:36:0;;;;;;;;;;-1:-1:-1;19551:36:0;;;;;;;;;;;;;;2333:6:1;2321:19;;;2303:38;;2291:2;2276:18;19551:36:0;2159:188:1;19130:44:0;;;;;;;;;;-1:-1:-1;19130:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;38356:107;;;;;;;;;;-1:-1:-1;38356:107:0;;;;;:::i;:::-;;:::i;20290:29::-;;;;;;;;;;-1:-1:-1;20290:29:0;;;;;;;;;;;;;;3835:4:1;3823:17;;;3805:36;;3793:2;3778:18;20290:29:0;3663:184:1;35993:108:0;;;;;;;;;;-1:-1:-1;36075:18:0;;35993:108;;32096:107;;;;;;;;;;-1:-1:-1;32096:107:0;;;;;:::i;:::-;;:::i;18930:67::-;;;;;;;;;;;;;:::i;19450:34::-;;;;;;;;;;-1:-1:-1;19450:34:0;;;;;;;;;;;32325:107;;;;;;;;;;-1:-1:-1;32325:107:0;;;;;:::i;:::-;;:::i;37228:426::-;;;;;;;;;;-1:-1:-1;37228:426:0;;;;;:::i;:::-;;:::i;33090:102::-;;;;;;;;;;-1:-1:-1;33090:102:0;;;;;:::i;:::-;;:::i;3883:93::-;;;;;;;;;;-1:-1:-1;3883:93:0;;;;;:::i;:::-;;:::i;31136:412::-;;;;;;;;;;-1:-1:-1;31418:11:0;;31136:412;;;31418:11;;;;;;4959:25:1;;31444:13:0;;;;;5015:2:1;5000:18;;4993:34;31472:7:0;;;5043:18:1;;;5036:34;;;;31418:11:0;31494:8;;;;5101:2:1;5086:18;;5079:34;31517:12:0;;;;;5144:3:1;5129:19;;5122:35;4946:3;4931:19;31136:412:0;4700:463:1;34883:136:0;;;;;;;;;;-1:-1:-1;34883:136:0;;;;;:::i;:::-;;:::i;20511:34::-;;;;;;;;;;-1:-1:-1;20511:34:0;;;;-1:-1:-1;;;20511:34:0;;-1:-1:-1;;;;;20511:34:0;;;;;;-1:-1:-1;;;;;5332:32:1;;;5314:51;;5302:2;5287:18;20511:34:0;5168:203:1;3378:106:0;;;;;;;;;;-1:-1:-1;3378:106:0;;;;;:::i;:::-;;:::i;19499:37::-;;;;;;;;;;-1:-1:-1;19499:37:0;;;;;;;;;;;35891:94;;;;;;;;;;-1:-1:-1;18921:2:0;35891:94;;33855:144;;;;;;;;;;-1:-1:-1;33855:144:0;;;;;:::i;:::-;;:::i;18887:36::-;;;;;;;;;;;;18921:2;18887:36;;20343:31;;;;;;;;;;-1:-1:-1;20343:31:0;;;;;;;;;;;37662:278;;;;;;;;;;-1:-1:-1;37662:278:0;;;;;:::i;:::-;;:::i;33323:524::-;;;;;;;;;;-1:-1:-1;33323:524:0;;;;;:::i;:::-;;:::i;31594:104::-;;;;;;;;;;-1:-1:-1;31678:12:0;;31594:104;;34592:283;;;;;;;;;;-1:-1:-1;34592:283:0;;;;;:::i;:::-;;:::i;20168:24::-;;;;;;;;;;-1:-1:-1;20168:24:0;;;;;;;;32211:106;;;;;;;;;;-1:-1:-1;32211:106:0;;;;;:::i;:::-;;:::i;20476:26::-;;;;;;;;;;-1:-1:-1;20476:26:0;;;;-1:-1:-1;;;20476:26:0;;;;;;20063:45;;;;;;;;;;;;;;;;20115:44;;;;;;;;;;;;;;;;31800:96;;;;;;;;;;-1:-1:-1;31800:96:0;;;;;:::i;:::-;;:::i;20381:29::-;;;;;;;;;;-1:-1:-1;20381:29:0;;;;;;;;;;;33200:115;;;;;;;;;;-1:-1:-1;33200:115:0;;;;;:::i;:::-;;:::i;19006:44::-;;;;;;;;;;-1:-1:-1;19006:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;30972:156;;;;;;;;;;-1:-1:-1;31096:12:0;;31110:9;;30972:156;;;6365:25:1;;;6421:2;6406:18;;6399:34;;;;6338:18;30972:156:0;6191:248:1;36109:162:0;;;;;;;;;;-1:-1:-1;36109:162:0;;;;;:::i;:::-;-1:-1:-1;;;;;36245:18:0;36213:7;36245:18;;;:9;:18;;;;;;;36109:162;19605:42;;;;;;;;;;-1:-1:-1;19605:42:0;;;;-1:-1:-1;;;19605:42:0;;;;;;20008:48;;;;;;;;;;;;;;;;19281:40;;;;;;;;;;-1:-1:-1;19281:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19870:73;;;;;;;;;;;;19901:42;19870:73;;19654:28;;;;;;;;;;-1:-1:-1;19654:28:0;;;;-1:-1:-1;;;19654:28:0;;;;;;19735;;;;;;;;;;-1:-1:-1;19735:28:0;;;;;;;;35583:92;;;;;;;;;;-1:-1:-1;35662:5:0;;-1:-1:-1;;;;;35662:5:0;35583:92;;34321;;;;;;;;;;-1:-1:-1;34321:92:0;;;;;:::i;:::-;;:::i;20554:38::-;;;;;;;;;;-1:-1:-1;20554:38:0;;;;-1:-1:-1;;;;;20554:38:0;;;35785:98;;;;;;;;;;-1:-1:-1;35868:7:0;;;;;;;;;;;;-1:-1:-1;;;35868:7:0;;;;35785:98;;32974:108;;;;;;;;;;-1:-1:-1;32974:108:0;;;;;:::i;:::-;;:::i;35145:132::-;;;;;;;;;;-1:-1:-1;35145:132:0;;;;;:::i;:::-;;:::i;19952:49::-;;;;;;;;;;;;;;;;37948:365;;;;;;;;;;-1:-1:-1;37948:365:0;;;;;:::i;:::-;;:::i;35427:148::-;;;;;;;;;;;;;:::i;32701:265::-;;;;;;;;;;;;;:::i;36279:199::-;;;;;;;;;;-1:-1:-1;36279:199:0;;;;;:::i;:::-;;:::i;2979:99::-;;;;;;;;;;;;;:::i;18842:38::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18842:38:0;;;;;38471:110;;;;;;;;;;-1:-1:-1;38471:110:0;;;;;:::i;:::-;;:::i;3270:100::-;;;;;;;;;;-1:-1:-1;3270:100:0;;;;;:::i;:::-;-1:-1:-1;;;;;3349:13:0;3325:4;3349:13;;;;;;;;;;;;;;3270:100;32440:122;;;;;;;;;;-1:-1:-1;32440:122:0;;;;;:::i;:::-;;:::i;34007:306::-;;;;;;;;;;-1:-1:-1;34007:306:0;;;;;:::i;:::-;;:::i;20448:21::-;;;;;;;;;;-1:-1:-1;20448:21:0;;;;-1:-1:-1;;;20448:21:0;;;;;;19772:91;;;;;;;;;;;;19821:42;19772:91;;20199:26;;;;;;;;;;-1:-1:-1;20199:26:0;;;;;;;;;;;18790:45;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18790:45:0;;;;;19689:39;;;;;;;;;;;;;;;;32570:123;;;;;;;;;;-1:-1:-1;32570:123:0;;;;;:::i;:::-;;:::i;20601:29::-;;;;;;;;;;;;;;;;35285:134;;;;;;;;;;-1:-1:-1;35285:134:0;;;;;:::i;:::-;;:::i;36486:188::-;;;;;;;;;;-1:-1:-1;36486:188:0;;;;;:::i;:::-;-1:-1:-1;;;;;36638:19:0;;;36606:7;36638:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;36486:188;31962:91;;;;;;;;;;-1:-1:-1;31962:91:0;;;;;:::i;:::-;;:::i;34421:163::-;;;;;;;;;;-1:-1:-1;34421:163:0;;;;;:::i;:::-;;:::i;35027:110::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;;;;;;;;;35103:17:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;35103:26:0;;::::1;::::0;;;::::1;::::0;;35027:110::o;36682:193::-;36786:4;36808:37;36817:10;36829:7;36838:6;36808:8;:37::i;:::-;-1:-1:-1;36863:4:0;36682:193;;;;;:::o;38356:107::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;38431:24:::1;38447:7;38431:15;:24::i;:::-;38356:107:::0;:::o;32096:::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32173:14:0;;;::::1;;::::0;;;:8:::1;:14;::::0;;;;:22;;-1:-1:-1;;32173:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32096:107::o;18930:67::-;18984:13;18921:2;18984;:13;:::i;:::-;18970:27;;:11;:27;:::i;:::-;18930:67;:::o;32325:107::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;32399:25:::1;:9;32416:7:::0;32399:16:::1;:25::i;:::-;;32325:107:::0;:::o;37228:426::-;37362:4;37379:36;37389:6;37397:9;37408:6;37379:9;:36::i;:::-;-1:-1:-1;;;;;37455:19:0;;37428:24;37455:19;;;:11;:19;;;;;;;;37475:10;37455:31;;;;;;;;37505:26;;;;37497:59;;;;-1:-1:-1;;;37497:59:0;;9156:2:1;37497:59:0;;;9138:21:1;9195:2;9175:18;;;9168:30;-1:-1:-1;;;9214:18:1;;;9207:50;9274:18;;37497:59:0;8954:344:1;37497:59:0;37569:55;37578:6;37586:10;37598:25;37617:6;37598:16;:25;:::i;:::-;37569:8;:55::i;:::-;-1:-1:-1;37642:4:0;;37228:426;-1:-1:-1;;;;37228:426:0:o;33090:102::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;33157:16:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;33157:27:0::1;-1:-1:-1::0;;33157:27:0;;::::1;::::0;;;::::1;::::0;;33090:102::o;3883:93::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;3951:5:::1;:17:::0;;-1:-1:-1;;;;;;3951:17:0::1;-1:-1:-1::0;;;;;3951:17:0;;;::::1;::::0;;;::::1;::::0;;3883:93::o;34883:136::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;34983:9:::1;:28:::0;;-1:-1:-1;;34983:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34883:136::o;3378:106::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3455:13:0;;;::::1;:7;:13:::0;;;::::1;::::0;;;;;;:21;;-1:-1:-1;;3455:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;3378:106::o;33855:144::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;33959:32:::1;33978:12;:4:::0;33985:5:::1;33978:12;:::i;:::-;33959:18;:32::i;37662:278::-:0;37807:10;37762:4;37854:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;37854:32:0;;;;;;;;;;37762:4;;37784:126;;37832:7;;37854:45;;37889:10;;37854:45;:::i;33323:524::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;33510:14:::1;33540:42;33568:14:::0;33540:12;:42:::1;:::i;:::-;33510:72;;33601:8;:15;;33613:3;33601:15;33593:73;;;::::0;-1:-1:-1;;;33593:73:0;;9921:2:1;33593:73:0::1;::::0;::::1;9903:21:1::0;9960:2;9940:18;;;9933:30;9999:34;9979:18;;;9972:62;-1:-1:-1;;;10050:18:1;;;10043:43;10103:19;;33593:73:0::1;9719:409:1::0;33593:73:0::1;-1:-1:-1::0;33677:11:0::1;:26:::0;;::::1;33813::::0;;::::1;::::0;::::1;-1:-1:-1::0;;33784:18:0;;::::1;33677:26;33784:18;-1:-1:-1::0;;33714:30:0;;::::1;::::0;::::1;-1:-1:-1::0;;33677:26:0;;::::1;::::0;::::1;33714:30:::0;;;;-1:-1:-1;;33714:30:0;;;;;;;;;;::::1;33784:18:::0;;;;33757:16;;;::::1;33784:18:::0;;;;;;;::::1;33813:26:::0;;;::::1;::::0;;;::::1;::::0;;33323:524::o;34592:283::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;34726:30:::1;::::0;-1:-1:-1;;;34726:30:0;;34750:4:::1;34726:30;::::0;::::1;5314:51:1::0;34683:10:0;;34661:12:::1;::::0;-1:-1:-1;;;;;34726:15:0;::::1;::::0;::::1;::::0;5287:18:1;;34726:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34705:51;;34788:1;34775:10;:14;34767:51;;;::::0;-1:-1:-1;;;34767:51:0;;10524:2:1;34767:51:0::1;::::0;::::1;10506:21:1::0;10563:2;10543:18;;;10536:30;10602:26;10582:18;;;10575:54;10646:18;;34767:51:0::1;10322:348:1::0;34767:51:0::1;34829:38;::::0;-1:-1:-1;;;34829:38:0;;34844:10:::1;34829:38;::::0;::::1;10849:51:1::0;10916:18;;;10909:34;;;-1:-1:-1;;;;;34829:14:0;::::1;::::0;::::1;::::0;10822:18:1;;34829:38:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34650:225;;34592:283:::0;:::o;32211:106::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;32287:22:::1;:9;32301:7:::0;32287:13:::1;:22::i;31800:96::-:0;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;31865:12:::1;:23:::0;;-1:-1:-1;;31865:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31800:96::o;33200:115::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;33277:12:::1;:30:::0;33200:115::o;34321:92::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;34383:14:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;34383:22:0::1;-1:-1:-1::0;;34383:22:0;;::::1;::::0;;;::::1;::::0;;34321:92::o;32974:108::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;33049:16:::1;:25:::0;;-1:-1:-1;;33049:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32974:108::o;35145:132::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35243:19:0::1;;::::0;;;:8:::1;:19;::::0;;;;:26;;-1:-1:-1;;35243:26:0::1;35265:4;35243:26;::::0;;35145:132::o;37948:365::-;38114:10;38053:4;38102:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;38102:32:0;;;;;;;;;;38153:35;;;;38145:60;;;;-1:-1:-1;;;38145:60:0;;11406:2:1;38145:60:0;;;11388:21:1;11445:2;11425:18;;;11418:30;-1:-1:-1;;;11464:18:1;;;11457:42;11516:18;;38145:60:0;11204:336:1;38145:60:0;38218:65;38227:10;38239:7;38248:34;38267:15;38248:16;:34;:::i;38218:65::-;-1:-1:-1;38301:4:0;;37948:365;-1:-1:-1;;;37948:365:0:o;35427:148::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;35492:51:::1;::::0;35477:9:::1;::::0;35492:10:::1;::::0;35516:21:::1;::::0;35477:9;35492:51;35477:9;35492:51;35516:21;35492:10;:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35476:67;;;35562:4;35554:13;;;::::0;::::1;32701:265:::0;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;32775:14:::1;::::0;;32758::::1;32800:18:::0;;;;32883:32:::1;::::0;32775:14;;32846:10:::1;::::0;;;32775:14;;32758;32883:32;32758:14;32883:32;32775:14;32846:10;32883:32:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32867:48;;;32934:4;32926:32;;;::::0;-1:-1:-1;;;32926:32:0;;11957:2:1;32926:32:0::1;::::0;::::1;11939:21:1::0;11996:2;11976:18;;;11969:30;-1:-1:-1;;;12015:18:1;;;12008:45;12070:18;;32926:32:0::1;11755:339:1::0;32926:32:0::1;32747:219;;;32701:265::o:0;36279:199::-;36386:4;36408:40;36418:10;36430:9;36441:6;36408:9;:40::i;2979:99::-;3029:13;3062:8;3055:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2979:99;:::o;38471:110::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;38547:26:::1;38562:10;38547:14;:26::i;32440:122::-:0;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;32520:34:::1;:21;32546:7:::0;32520:25:::1;:34::i;34007:306::-:0;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;34162:13:::1;18921:2;34162;:13;:::i;:::-;34144:31;::::0;:15;:31:::1;:::i;:::-;34126:49:::0;-1:-1:-1;34216:13:0::1;18921:2;34216;:13;:::i;:::-;34201:28;::::0;:12;:28:::1;:::i;:::-;34240:12;:30:::0;;;;-1:-1:-1;34281:9:0::1;:24:::0;34007:306::o;32570:123::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;32648:37:::1;:21;32677:7:::0;32648:28:::1;:37::i;35285:134::-:0;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35385:18:0::1;35406:5;35385:18:::0;;;:8:::1;:18;::::0;;;;:26;;-1:-1:-1;;35385:26:0::1;::::0;;35285:134::o;31962:91::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;32027:12:::1;:18:::0;31962:91::o;34421:163::-;3539:10;3531:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;3568:5:0;;-1:-1:-1;;;;;3568:5:0;3554:10;:19;3531:42;3523:64;;;;-1:-1:-1;;;3523:64:0;;;;;;;:::i;:::-;34533:19:::1;:43:::0;;-1:-1:-1;;;;;34533:43:0;;::::1;-1:-1:-1::0;;;34533:43:0::1;-1:-1:-1::0;;;;;;34533:43:0;;::::1;::::0;;;::::1;::::0;;34421:163::o;16936:173::-;17022:4;17051:50;17056:3;-1:-1:-1;;;;;17076:23:0;;17051:4;:50::i;:::-;17044:57;16936:173;-1:-1:-1;;;16936:173:0:o;36883:337::-;-1:-1:-1;;;;;37011:20:0;;37003:50;;;;-1:-1:-1;;;37003:50:0;;12686:2:1;37003:50:0;;;12668:21:1;12725:2;12705:18;;;12698:30;-1:-1:-1;;;12744:18:1;;;12737:47;12801:18;;37003:50:0;12484:341:1;37003:50:0;-1:-1:-1;;;;;37072:21:0;;37064:49;;;;-1:-1:-1;;;37064:49:0;;13032:2:1;37064:49:0;;;13014:21:1;13071:2;13051:18;;;13044:30;-1:-1:-1;;;13090:18:1;;;13083:45;13145:18;;37064:49:0;12830:339:1;37064:49:0;-1:-1:-1;;;;;37126:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;37179:33;;689:25:1;;;37179:33:0;;662:18:1;37179:33:0;;;;;;;;36883:337;;;:::o;2699:136::-;2772:16;2780:7;2772:16;;;;;;:::i;:::-;;;;;;;;2804:23;2819:7;2804:23;;;;;;:::i;:::-;;;;;;;;2699:136;:::o;17117:179::-;17206:4;17235:53;17243:3;-1:-1:-1;;;;;17263:23:0;;17235:7;:53::i;21905:2117::-;-1:-1:-1;;;;;22036:20:0;;22028:51;;;;-1:-1:-1;;;22028:51:0;;13376:2:1;22028:51:0;;;13358:21:1;13415:2;13395:18;;;13388:30;-1:-1:-1;;;13434:18:1;;;13427:48;13492:18;;22028:51:0;13174:342:1;22028:51:0;22122:9;;;;22118:155;;;-1:-1:-1;;;;;22175:16:0;;;;;;:8;:16;;;;;;;;22174:17;:41;;;;-1:-1:-1;;;;;;22196:19:0;;;;;;:8;:19;;;;;;;;22195:20;22174:41;22148:113;;;;-1:-1:-1;;;22148:113:0;;13723:2:1;22148:113:0;;;13705:21:1;13762:2;13742:18;;;13735:30;-1:-1:-1;;;13781:18:1;;;13774:40;13831:18;;22148:113:0;13521:334:1;22148:113:0;22361:15;22380:26;:9;22399:6;22380:18;:26::i;:::-;:72;;;-1:-1:-1;22423:29:0;:9;22442;22423:18;:29::i;:::-;22380:104;;;-1:-1:-1;;;;;;22469:15:0;;:7;:15;;;;;;;;;;;;;22380:104;:139;;;-1:-1:-1;;;;;;22501:18:0;;:7;:18;;;;;;;;;;;;;22380:139;22361:159;-1:-1:-1;22533:23:0;-1:-1:-1;;;;;22560:23:0;;22578:4;22560:23;;:66;;-1:-1:-1;;;;;;22600:26:0;;22621:4;22600:26;22560:66;22679:19;;22533:94;;-1:-1:-1;22640:24:0;;-1:-1:-1;;;;;22669:29:0;;;-1:-1:-1;;;22679:19:0;;;;22669:29;:72;;;;-1:-1:-1;;;;;;22715:26:0;;19821:42;22715:26;22669:72;22668:152;;;-1:-1:-1;22773:19:0;;-1:-1:-1;;;;;22760:32:0;;;-1:-1:-1;;;22773:19:0;;;;22760:32;:59;;;;-1:-1:-1;;;;;;22796:23:0;;19821:42;22796:23;22760:59;22640:181;;22850:18;:41;;;;22872:19;22850:41;:55;;;;22895:10;22850:55;22832:1183;;;22932:45;22951:6;22959:9;22970:6;22932:18;:45::i;:::-;22832:1183;;;23067:14;;-1:-1:-1;;;23067:14:0;;;;23062:523;;23157:5;;-1:-1:-1;;;;;23147:15:0;;;23157:5;;23147:15;;;;:37;;-1:-1:-1;23179:5:0;;-1:-1:-1;;;;;23166:18:0;;;23179:5;;23166:18;;23147:37;23143:427;;;23269:9;;-1:-1:-1;;;23269:9:0;;;;23265:286;;;23329:9;-1:-1:-1;;;;;23312:30:0;23321:6;-1:-1:-1;;;;;23312:30:0;;23340:1;23312:30;;;;689:25:1;;677:2;662:18;;543:177;23312:30:0;;;;;;;;23369:7;;;21905:2117;;;:::o;23265:286::-;23485:14;;-1:-1:-1;;;23485:14:0;;;;23477:50;;;;-1:-1:-1;;;23477:50:0;;14252:2:1;23477:50:0;;;14234:21:1;14291:2;14271:18;;;14264:30;14330:25;14310:18;;;14303:53;14373:18;;23477:50:0;14050:347:1;23477:50:0;23704:19;;23681:10;;-1:-1:-1;;;;;23694:29:0;;;-1:-1:-1;;;23704:19:0;;;;23694:29;;:73;;-1:-1:-1;;;;;;23744:23:0;;19821:42;23744:23;23694:73;23809:19;;23681:86;;-1:-1:-1;23782:11:0;;-1:-1:-1;;;;;23796:32:0;;;-1:-1:-1;;;23809:19:0;;;;23796:32;;:79;;-1:-1:-1;;;;;;23849:26:0;;19821:42;23849:26;23796:79;23782:93;;23944:57;23960:6;23968:9;23979:6;23987:5;23994:6;23944:15;:57::i;:::-;22995:1020;;22832:1183;22017:2005;;;21905:2117;;;:::o;27835:1912::-;20726:27;:34;;-1:-1:-1;;20726:34:0;20756:4;20726:34;;;27956:4:::1;20726:27:::0;27938:24;;;:9:::1;:24;::::0;;;;;28075:12:::1;::::0;28057:30;::::1;28053:69;;;28104:7;;;28053:69;28203:13;::::0;28249:12:::1;::::0;28203:13;;;::::1;;;::::0;28346:23;;::::1;28342:130;;;28390:12;::::0;::::1;;28386:75;;;-1:-1:-1::0;28437:8:0;28386:75:::1;28556:8;:13;;28568:1;28556:13:::0;28552:52:::1;;28586:7;;;;;28552:52;28739:13;::::0;28696:25:::1;::::0;28724:40:::1;::::0;::::1;::::0;28725:27:::1;::::0;28739:13;;::::1;;;28725:11:::0;:27:::1;:::i;:::-;28724:40;;;;:::i;:::-;28816:11;::::0;28696:68;;-1:-1:-1;28775:23:0::1;::::0;28801:38:::1;::::0;::::1;::::0;28802:25:::1;::::0;28816:11;;::::1;;;28802::::0;:25:::1;:::i;:::-;28801:38;;;;:::i;:::-;28775:64:::0;-1:-1:-1;28915:16:0::1;28934:21;28954:1;28934:17:::0;:21:::1;:::i;:::-;28915:40:::0;-1:-1:-1;28966:19:0::1;28988:28;28915:40:::0;28988:17;:28:::1;:::i;:::-;28966:50:::0;-1:-1:-1;29075:17:0::1;29095:42;29122:15:::0;28966:50;29095:42:::1;:::i;:::-;29075:62:::0;-1:-1:-1;29212:21:0::1;29244:27;29075:62:::0;29244:16:::1;:27::i;:::-;29376:14;29394:41;29418:17:::0;29394:21:::1;:41;:::i;:::-;29376:60:::0;-1:-1:-1;29447:14:0::1;29489:9:::0;29465:20:::1;29474:11:::0;29376:60;29465:20:::1;:::i;:::-;29464:34;;;;:::i;:::-;29447:51;;29535:31;29549:8;29559:6;29535:13;:31::i;:::-;29632:20;29656:41;29680:17:::0;29656:21:::1;:41;:::i;:::-;29632:66;;29727:12;29709:14;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;;;;;;;;20771:1:0::1;-1:-1:-1::0;20783:27:0;:35;;-1:-1:-1;;20783:35:0;;;27835:1912::o;3086:99::-;3156:8;:21;3167:10;3156:8;:21;:::i;14563:291::-;14626:4;15600:19;;;:12;;;:19;;;;;;14643:204;;-1:-1:-1;14686:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;14746:18;;14724:19;;;:12;;;:19;;;;;;:40;;;;14779:11;;14643:204;-1:-1:-1;14830:5:0;14823:12;;14862:601;14928:4;14966:19;;;:12;;;:19;;;;;;15002:15;;14998:458;;15034:21;15058:14;15071:1;15058:10;:14;:::i;:::-;15107:18;;15034:38;;-1:-1:-1;15087:17:0;;15107:22;;15128:1;;15107:22;:::i;:::-;15087:42;;15146:17;15166:3;:11;;15178:9;15166:22;;;;;;;;:::i;:::-;;;;;;;;;15146:42;;15234:9;15205:3;:11;;15217:13;15205:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;15258:23;;;:12;;;:23;;;;;;:36;;;15311:17;;15258:3;;15311:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;15352:3;:12;;:19;15365:5;15352:19;;;;;;;;;;;15345:26;;;15395:4;15388:11;;;;;;;;14998:458;15439:5;15432:12;;;;;17304:197;-1:-1:-1;;;;;17468:23:0;;17409:4;15600:19;;;:12;;;:19;;;;;;:24;;17438:55;15471:161;26678:425;-1:-1:-1;;;;;26843:17:0;;;;;;:9;:17;;;;;;:27;-1:-1:-1;26843:27:0;26835:64;;;;-1:-1:-1;;;26835:64:0;;17294:2:1;26835:64:0;;;17276:21:1;17333:2;17313:18;;;17306:30;-1:-1:-1;;;17352:18:1;;;17345:54;17416:18;;26835:64:0;17092:348:1;26835:64:0;26937:28;26950:6;26958;26937:12;:28::i;:::-;26976;26986:9;26997:6;26976:9;:28::i;:::-;27077:9;-1:-1:-1;;;;;27060:35:0;27069:6;-1:-1:-1;;;;;27060:35:0;;27088:6;27060:35;;;;689:25:1;;677:2;662:18;;543:177;24072:2598:0;-1:-1:-1;;;;;24355:20:0;;;24328:24;24355:20;;;:9;:20;;;;;;;24429:17;;;;;;;;:27;-1:-1:-1;24429:27:0;24421:64;;;;-1:-1:-1;;;24421:64:0;;17294:2:1;24421:64:0;;;17276:21:1;17333:2;17313:18;;;17306:30;-1:-1:-1;;;17352:18:1;;;17345:54;17416:18;;24421:64:0;17092:348:1;24421:64:0;24533:9;24598:6;24594:1307;;;24626:38;:21;24657:6;24626:30;:38::i;:::-;24621:297;;-1:-1:-1;;;;;24715:17:0;;;;;;:9;:17;;;;;;24736:15;-1:-1:-1;24715:36:0;;:56;;-1:-1:-1;24755:16:0;;-1:-1:-1;;;24755:16:0;;;;24715:56;24685:148;;;;-1:-1:-1;;;24685:148:0;;17647:2:1;24685:148:0;;;17629:21:1;17686:2;17666:18;;;17659:30;-1:-1:-1;;;17705:18:1;;;17698:48;17763:18;;24685:148:0;17445:342:1;24685:148:0;24890:12;;24872:30;;:15;:30;:::i;:::-;-1:-1:-1;;;;;24852:17:0;;;;;;:9;:17;;;;;:50;24621:297;24983:9;;24973:6;:19;;24965:47;;;;-1:-1:-1;;;24965:47:0;;17994:2:1;24965:47:0;;;17976:21:1;18033:2;18013:18;;;18006:30;-1:-1:-1;;;18052:18:1;;;18045:45;18107:18;;24965:47:0;17792:339:1;24965:47:0;-1:-1:-1;25033:8:0;;;;;;;24594:1307;;;25063:5;25059:842;;;25176:12;;25147:25;25166:6;25147:16;:25;:::i;:::-;:41;;25121:119;;;;-1:-1:-1;;;25121:119:0;;;;;;;:::i;:::-;25305:8;;25295:6;:18;;25287:47;;;;-1:-1:-1;;;25287:47:0;;;;;;;:::i;:::-;-1:-1:-1;25355:7:0;;;;25059:842;;;25504:12;;25475:25;25494:6;25475:16;:25;:::i;:::-;:41;;25395:173;;;;-1:-1:-1;;;25395:173:0;;;;;;;:::i;:::-;25655:38;:21;25686:6;25655:30;:38::i;:::-;25650:206;;-1:-1:-1;;;;;25742:17:0;;;;;;:9;:17;;;;;;25763:15;-1:-1:-1;25742:36:0;;:56;;-1:-1:-1;25782:16:0;;-1:-1:-1;;;25782:16:0;;;;25742:56;25712:144;;;;-1:-1:-1;;;25712:144:0;;18683:2:1;25712:144:0;;;18665:21:1;18722:2;18702:18;;;18695:30;-1:-1:-1;;;18741:18:1;;;18734:44;18795:18;;25712:144:0;18481:338:1;25712:144:0;-1:-1:-1;25877:12:0;;;;;;;25059:842;26005:19;;-1:-1:-1;;;;;25995:29:0;;;-1:-1:-1;;;26005:19:0;;;;25995:29;;;;25994:67;;-1:-1:-1;26044:16:0;;;;26043:17;25994:67;:114;;;;-1:-1:-1;26080:27:0;;;;26079:28;25994:114;25976:170;;;26120:26;26139:6;26120:18;:26::i;:::-;26307:11;;26200:21;;26224:106;;26252:6;;26273:3;;26291:27;;26307:11;;;;;;;26291:13;;;;:27;:::i;:::-;26224:13;:106::i;:::-;26200:130;-1:-1:-1;26385:19:0;26407:24;26200:130;26407:6;:24;:::i;:::-;26385:46;;26442:28;26455:6;26463;26442:12;:28::i;:::-;26499:4;26481:24;;;;:9;:24;;;;;:41;;26509:13;;26481:24;:41;;26509:13;;26481:41;:::i;:::-;;;;-1:-1:-1;26533:33:0;;-1:-1:-1;26543:9:0;26554:11;26533:9;:33::i;:::-;26639:9;-1:-1:-1;;;;;26622:40:0;26631:6;-1:-1:-1;;;;;26622:40:0;;26650:11;26622:40;;;;689:25:1;;677:2;662:18;;543:177;26622:40:0;;;;;;;;24233:2437;;;;24072:2598;;;;;:::o;29841:511::-;29988:14;;29956:56;;29973:4;;-1:-1:-1;;;;;29988:14:0;30005:6;29956:8;:56::i;:::-;30049:16;;;30063:1;30049:16;;;;;;;;30025:21;;30049:16;;;;;;;;;;-1:-1:-1;30049:16:0;30025:40;;30094:4;30076;30081:1;30076:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30076:23:0;;;:7;;;;;;;;;;:23;;;;30120:14;;:21;;;-1:-1:-1;;;30120:21:0;;;;:14;;;;;:19;;:21;;;;;30076:7;;30120:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30110:4;30115:1;30110:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30110:31:0;;;:7;;;;;;;;;:31;30154:14;;:190;;-1:-1:-1;;;30154:190:0;;:14;;;:65;;:190;;30234:6;;30154:14;;30271:4;;30298;;30318:15;;30154:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30456:418;30621:14;;30589:61;;30606:4;;-1:-1:-1;;;;;30621:14:0;30638:11;30589:8;:61::i;:::-;30663:14;;:203;;-1:-1:-1;;;30663:203:0;;30734:4;30663:203;;;20406:34:1;;;20456:18;;;20449:34;;;30663:14:0;20499:18:1;;;20492:34;;;20542:18;;;20535:34;20585:19;;;20578:44;30840:15:0;20638:19:1;;;20631:35;-1:-1:-1;;;;;30663:14:0;;;;:30;;30701:9;;20340:19:1;;30663:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30456:418;;:::o;27558:161::-;-1:-1:-1;;;;;27649:15:0;;27629:17;27649:15;;;:9;:15;;;;;;:24;;27667:6;;27649:24;:::i;:::-;-1:-1:-1;;;;;27684:15:0;;;;;;;:9;:15;;;;;:27;;;;-1:-1:-1;;27558:161:0:o;27392:158::-;-1:-1:-1;;;;;27480:15:0;;27460:17;27480:15;;;:9;:15;;;;;;:24;;27498:6;;27480:24;:::i;27190:194::-;27314:7;27371:5;27357:10;27342:25;;27351:3;27342:12;;:6;:12;;;;:::i;:::-;:25;;;;:::i;:::-;27341:35;;;;:::i;:::-;27334:42;27190:194;-1:-1:-1;;;;27190:194:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:388;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;-1:-1:-1;460:2:1;445:18;;432:32;473:33;432:32;473:33;:::i;:::-;525:7;515:17;;;150:388;;;;;:::o;725:118::-;811:5;804:13;797:21;790:5;787:32;777:60;;833:1;830;823:12;848:241;904:6;957:2;945:9;936:7;932:23;928:32;925:52;;;973:1;970;963:12;925:52;1012:9;999:23;1031:28;1053:5;1031:28;:::i;1094:548::-;1206:4;1235:2;1264;1253:9;1246:21;1296:6;1290:13;1339:6;1334:2;1323:9;1319:18;1312:34;1364:1;1374:140;1388:6;1385:1;1382:13;1374:140;;;1483:14;;;1479:23;;1473:30;1449:17;;;1468:2;1445:26;1438:66;1403:10;;1374:140;;;1378:3;1563:1;1558:2;1549:6;1538:9;1534:22;1530:31;1523:42;1633:2;1626;1622:7;1617:2;1609:6;1605:15;1601:29;1590:9;1586:45;1582:54;1574:62;;;;1094:548;;;;:::o;1647:315::-;1715:6;1723;1776:2;1764:9;1755:7;1751:23;1747:32;1744:52;;;1792:1;1789;1782:12;1744:52;1831:9;1818:23;1850:31;1875:5;1850:31;:::i;:::-;1900:5;1952:2;1937:18;;;;1924:32;;-1:-1:-1;;;1647:315:1:o;2352:247::-;2411:6;2464:2;2452:9;2443:7;2439:23;2435:32;2432:52;;;2480:1;2477;2470:12;2432:52;2519:9;2506:23;2538:31;2563:5;2538:31;:::i;2604:127::-;2665:10;2660:3;2656:20;2653:1;2646:31;2696:4;2693:1;2686:15;2720:4;2717:1;2710:15;2736:922;2805:6;2858:2;2846:9;2837:7;2833:23;2829:32;2826:52;;;2874:1;2871;2864:12;2826:52;2914:9;2901:23;2943:18;2984:2;2976:6;2973:14;2970:34;;;3000:1;2997;2990:12;2970:34;3038:6;3027:9;3023:22;3013:32;;3083:7;3076:4;3072:2;3068:13;3064:27;3054:55;;3105:1;3102;3095:12;3054:55;3141:2;3128:16;3163:2;3159;3156:10;3153:36;;;3169:18;;:::i;:::-;3244:2;3238:9;3212:2;3298:13;;-1:-1:-1;;3294:22:1;;;3318:2;3290:31;3286:40;3274:53;;;3342:18;;;3362:22;;;3339:46;3336:72;;;3388:18;;:::i;:::-;3428:10;3424:2;3417:22;3463:2;3455:6;3448:18;3503:7;3498:2;3493;3489;3485:11;3481:20;3478:33;3475:53;;;3524:1;3521;3514:12;3475:53;3580:2;3575;3571;3567:11;3562:2;3554:6;3550:15;3537:46;3625:1;3603:15;;;3620:2;3599:24;3592:35;;;;-1:-1:-1;3607:6:1;2736:922;-1:-1:-1;;;;;2736:922:1:o;3852:382::-;3917:6;3925;3978:2;3966:9;3957:7;3953:23;3949:32;3946:52;;;3994:1;3991;3984:12;3946:52;4033:9;4020:23;4052:31;4077:5;4052:31;:::i;:::-;4102:5;-1:-1:-1;4159:2:1;4144:18;;4131:32;4172:30;4131:32;4172:30;:::i;4239:456::-;4316:6;4324;4332;4385:2;4373:9;4364:7;4360:23;4356:32;4353:52;;;4401:1;4398;4391:12;4353:52;4440:9;4427:23;4459:31;4484:5;4459:31;:::i;:::-;4509:5;-1:-1:-1;4566:2:1;4551:18;;4538:32;4579:33;4538:32;4579:33;:::i;:::-;4239:456;;4631:7;;-1:-1:-1;;;4685:2:1;4670:18;;;;4657:32;;4239:456::o;5376:180::-;5435:6;5488:2;5476:9;5467:7;5463:23;5459:32;5456:52;;;5504:1;5501;5494:12;5456:52;-1:-1:-1;5527:23:1;;5376:180;-1:-1:-1;5376:180:1:o;5561:156::-;5627:20;;5687:4;5676:16;;5666:27;;5656:55;;5707:1;5704;5697:12;5656:55;5561:156;;;:::o;5722:464::-;5807:6;5815;5823;5831;5839;5892:3;5880:9;5871:7;5867:23;5863:33;5860:53;;;5909:1;5906;5899:12;5860:53;5932:27;5949:9;5932:27;:::i;:::-;5922:37;;5978:36;6010:2;5999:9;5995:18;5978:36;:::i;:::-;5968:46;;6033:36;6065:2;6054:9;6050:18;6033:36;:::i;:::-;6023:46;;6088:36;6120:2;6109:9;6105:18;6088:36;:::i;:::-;6078:46;;6143:37;6175:3;6164:9;6160:19;6143:37;:::i;:::-;6133:47;;5722:464;;;;;;;;:::o;6676:248::-;6744:6;6752;6805:2;6793:9;6784:7;6780:23;6776:32;6773:52;;;6821:1;6818;6811:12;6773:52;-1:-1:-1;;6844:23:1;;;6914:2;6899:18;;;6886:32;;-1:-1:-1;6676:248:1:o;6929:332::-;7131:2;7113:21;;;7170:1;7150:18;;;7143:29;-1:-1:-1;;;7203:2:1;7188:18;;7181:39;7252:2;7237:18;;6929:332::o;7266:127::-;7327:10;7322:3;7318:20;7315:1;7308:31;7358:4;7355:1;7348:15;7382:4;7379:1;7372:15;7398:422;7487:1;7530:5;7487:1;7544:270;7565:7;7555:8;7552:21;7544:270;;;7624:4;7620:1;7616:6;7612:17;7606:4;7603:27;7600:53;;;7633:18;;:::i;:::-;7683:7;7673:8;7669:22;7666:55;;;7703:16;;;;7666:55;7782:22;;;;7742:15;;;;7544:270;;;7548:3;7398:422;;;;;:::o;7825:806::-;7874:5;7904:8;7894:80;;-1:-1:-1;7945:1:1;7959:5;;7894:80;7993:4;7983:76;;-1:-1:-1;8030:1:1;8044:5;;7983:76;8075:4;8093:1;8088:59;;;;8161:1;8156:130;;;;8068:218;;8088:59;8118:1;8109:10;;8132:5;;;8156:130;8193:3;8183:8;8180:17;8177:43;;;8200:18;;:::i;:::-;-1:-1:-1;;8256:1:1;8242:16;;8271:5;;8068:218;;8370:2;8360:8;8357:16;8351:3;8345:4;8342:13;8338:36;8332:2;8322:8;8319:16;8314:2;8308:4;8305:12;8301:35;8298:77;8295:159;;;-1:-1:-1;8407:19:1;;;8439:5;;8295:159;8486:34;8511:8;8505:4;8486:34;:::i;:::-;8556:6;8552:1;8548:6;8544:19;8535:7;8532:32;8529:58;;;8567:18;;:::i;:::-;8605:20;;7825:806;-1:-1:-1;;;7825:806:1:o;8636:140::-;8694:5;8723:47;8764:4;8754:8;8750:19;8744:4;8723:47;:::i;8781:168::-;8854:9;;;8885;;8902:15;;;8896:22;;8882:37;8872:71;;8923:18;;:::i;9303:128::-;9370:9;;;9391:11;;;9388:37;;;9405:18;;:::i;9436:125::-;9501:9;;;9522:10;;;9519:36;;;9535:18;;:::i;9566:148::-;9654:4;9633:12;;;9647;;;9629:31;;9672:13;;9669:39;;;9688:18;;:::i;10133:184::-;10203:6;10256:2;10244:9;10235:7;10231:23;10227:32;10224:52;;;10272:1;10269;10262:12;10224:52;-1:-1:-1;10295:16:1;;10133:184;-1:-1:-1;10133:184:1:o;10954:245::-;11021:6;11074:2;11062:9;11053:7;11049:23;11045:32;11042:52;;;11090:1;11087;11080:12;11042:52;11122:9;11116:16;11141:28;11163:5;11141:28;:::i;12099:380::-;12178:1;12174:12;;;;12221;;;12242:61;;12296:4;12288:6;12284:17;12274:27;;12242:61;12349:2;12341:6;12338:14;12318:18;12315:38;12312:161;;12395:10;12390:3;12386:20;12383:1;12376:31;12430:4;12427:1;12420:15;12458:4;12455:1;12448:15;12312:161;;12099:380;;;:::o;14402:217::-;14442:1;14468;14458:132;;14512:10;14507:3;14503:20;14500:1;14493:31;14547:4;14544:1;14537:15;14575:4;14572:1;14565:15;14458:132;-1:-1:-1;14604:9:1;;14402:217::o;14750:545::-;14852:2;14847:3;14844:11;14841:448;;;14888:1;14913:5;14909:2;14902:17;14958:4;14954:2;14944:19;15028:2;15016:10;15012:19;15009:1;15005:27;14999:4;14995:38;15064:4;15052:10;15049:20;15046:47;;;-1:-1:-1;15087:4:1;15046:47;15142:2;15137:3;15133:12;15130:1;15126:20;15120:4;15116:31;15106:41;;15197:82;15215:2;15208:5;15205:13;15197:82;;;15260:17;;;15241:1;15230:13;15197:82;;15471:1352;15597:3;15591:10;15624:18;15616:6;15613:30;15610:56;;;15646:18;;:::i;:::-;15675:97;15765:6;15725:38;15757:4;15751:11;15725:38;:::i;:::-;15719:4;15675:97;:::i;:::-;15827:4;;15891:2;15880:14;;15908:1;15903:663;;;;16610:1;16627:6;16624:89;;;-1:-1:-1;16679:19:1;;;16673:26;16624:89;-1:-1:-1;;15428:1:1;15424:11;;;15420:24;15416:29;15406:40;15452:1;15448:11;;;15403:57;16726:81;;15873:944;;15903:663;14697:1;14690:14;;;14734:4;14721:18;;-1:-1:-1;;15939:20:1;;;16057:236;16071:7;16068:1;16065:14;16057:236;;;16160:19;;;16154:26;16139:42;;16252:27;;;;16220:1;16208:14;;;;16087:19;;16057:236;;;16061:3;16321:6;16312:7;16309:19;16306:201;;;16382:19;;;16376:26;-1:-1:-1;;16465:1:1;16461:14;;;16477:3;16457:24;16453:37;16449:42;16434:58;16419:74;;16306:201;-1:-1:-1;;;;;16553:1:1;16537:14;;;16533:22;16520:36;;-1:-1:-1;15471:1352:1:o;16828:127::-;16889:10;16884:3;16880:20;16877:1;16870:31;16920:4;16917:1;16910:15;16944:4;16941:1;16934:15;16960:127;17021:10;17016:3;17012:20;17009:1;17002:31;17052:4;17049:1;17042:15;17076:4;17073:1;17066:15;18136:340;18338:2;18320:21;;;18377:2;18357:18;;;18350:30;-1:-1:-1;;;18411:2:1;18396:18;;18389:46;18467:2;18452:18;;18136:340::o;18824:251::-;18894:6;18947:2;18935:9;18926:7;18922:23;18918:32;18915:52;;;18963:1;18960;18953:12;18915:52;18995:9;18989:16;19014:31;19039:5;19014:31;:::i;19080:980::-;19342:4;19390:3;19379:9;19375:19;19421:6;19410:9;19403:25;19447:2;19485:6;19480:2;19469:9;19465:18;19458:34;19528:3;19523:2;19512:9;19508:18;19501:31;19552:6;19587;19581:13;19618:6;19610;19603:22;19656:3;19645:9;19641:19;19634:26;;19695:2;19687:6;19683:15;19669:29;;19716:1;19726:195;19740:6;19737:1;19734:13;19726:195;;;19805:13;;-1:-1:-1;;;;;19801:39:1;19789:52;;19896:15;;;;19861:12;;;;19837:1;19755:9;19726:195;;;-1:-1:-1;;;;;;;19977:32:1;;;;19972:2;19957:18;;19950:60;-1:-1:-1;;;20041:3:1;20026:19;20019:35;19938:3;19080:980;-1:-1:-1;;;19080:980:1:o;20677:306::-;20765:6;20773;20781;20834:2;20822:9;20813:7;20809:23;20805:32;20802:52;;;20850:1;20847;20840:12;20802:52;20879:9;20873:16;20863:26;;20929:2;20918:9;20914:18;20908:25;20898:35;;20973:2;20962:9;20958:18;20952:25;20942:35;;20677:306;;;;;:::o

Swarm Source

ipfs://a28c4389ed2b376b9d963f25777635c9d8d58b2992756a1ad33a0425cdb1bd3b
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.