ETH Price: $3,213.96 (+1.61%)

Token

alfa.society (ALFA)
 

Overview

Max Total Supply

100,000,000 ALFA

Holders

299 ( 0.333%)

Market

Price

$0.95 @ 0.000295 ETH (+9.17%)

Onchain Market Cap

$94,956,300.00

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.133350000000102172 ALFA

Value
$0.13 ( ~4.04485740544091E-05 Eth) [0.0000%]
0x16F819e7aa312cb9823fc323b87c1A74AABbC4c8
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Decrypting DeFi

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
alfav3

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-17
*/

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

/* alfa.society:

- https://www.alfasociety.io/
- https://twitter.com/alfasocietyERC
- https://t.me/AlfaSociety

*/

pragma solidity ^0.8.17;

// ANCHOR alfa.society methods
abstract contract alfaSpecials {
    // alfa.society Innovations

    string internal _website = "https://www.alfasociety.io/";
    event Message (string message);
    event answerThePhone (string message);

    // NOTE Communications from the the society 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 alfav3 is IERC20, safetyFirst, alfaSpecials {
    using Listables for Listables.ActorSet;

    string public constant _name = "alfa.society";
    string public constant _symbol = "ALFA";
    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 = 10;
    uint8 public _sellTax = 20; // INITIAL amount decreasing after 1 day to avoid dumpers
    uint8 public _transferTax = 10;

    // Shares
    uint8 public _liquidityTax = 10;
    uint8 public _projectTax = 90;

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

    // alfa.society 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"}]

60c0604052601b60809081527f68747470733a2f2f7777772e616c6661736f63696574792e696f2f000000000060a0526002906200003e90826200057a565b50600b805460ff1916600117905560c86200005c6012600a62000759565b6200006c906305f5e1006200076a565b62000078919062000784565b600c55600d80546001600160401b031916660a007d190032011790556002600e55620000a76012600a62000759565b620000b7906305f5e1006200076a565b6010819055601181905560128190556013556014805464ffffffffff1916645a0a0a140a179055348015620000eb57600080fd5b50600180546001600160a01b031916339081178255600081815260208181526040808320805460ff1916909517909455601054600382528483208190559351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3601580546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e79190620007a7565b6001600160a01b031663c9c6539630601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002709190620007a7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e49190620007a7565b601480546001600160a01b03929092166801000000000000000002600160401b600160e01b0319909216919091179055600d5460ff630100000090910416620003306012600a62000759565b62000340906305f5e1006200076a565b6200034c919062000784565b601155600d54640100000000900461ffff166200036c6012600a62000759565b6200037c906305f5e1006200076a565b62000388919062000784565b6012908155600d54610100900461ffff1690620003a790600a62000759565b620003b7906305f5e1006200076a565b620003c3919062000784565b601355620003df60063362000463602090811b62001c8917901c565b506200040f737a250d5630b4cf539739df2c5dacb4c659f2488d60086200046360201b62001c891790919060201c565b5062000440601460089054906101000a90046001600160a01b031660086200046360201b62001c891790919060201c565b506200045c3060086200046360201b62001c891790919060201c565b50620007d9565b60006200047a836001600160a01b03841662000483565b90505b92915050565b6000818152600183016020526040812054620004cc575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200047d565b5060006200047d565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200050057607f821691505b6020821081036200052157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200057557600081815260208120601f850160051c81016020861015620005505750805b601f850160051c820191505b8181101562000571578281556001016200055c565b5050505b505050565b81516001600160401b03811115620005965762000596620004d5565b620005ae81620005a78454620004eb565b8462000527565b602080601f831160018114620005e65760008415620005cd5750858301515b600019600386901b1c1916600185901b17855562000571565b600085815260208120601f198616915b828110156200061757888601518255948401946001909101908401620005f6565b5085821015620006365787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200069d57816000190482111562000681576200068162000646565b808516156200068f57918102915b93841c939080029062000661565b509250929050565b600082620006b6575060016200047d565b81620006c5575060006200047d565b8160018114620006de5760028114620006e95762000709565b60019150506200047d565b60ff841115620006fd57620006fd62000646565b50506001821b6200047d565b5060208310610133831016604e8410600b84101617156200072e575081810a6200047d565b6200073a83836200065c565b806000190482111562000751576200075162000646565b029392505050565b60006200047a60ff841683620006a5565b80820281158282048414176200047d576200047d62000646565b600082620007a257634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620007ba57600080fd5b81516001600160a01b0381168114620007d257600080fd5b9392505050565b6132f680620007e96000396000f3fe6080604052600436106104055760003560e01c80636ebcf60711610211578063a6c4c88911610122578063c7639d80116100b0578063d840fd0611610077578063d840fd0614610d8c578063d9012d4a14610da2578063dd62ed3e14610dc2578063de65936814610e08578063fe48183c14610e2857005b8063c7639d8014610cd7578063ca9ec19914610cff578063d28d885214610d1e578063d2ce0db214610d56578063d45c484114610d6c57005b8063b90291c3116100f4578063b90291c314610c1d578063b918161114610c3d578063c20c87b814610c76578063c2bcf5ea14610c96578063c41ba81014610cb657005b8063a6c4c88914610ba3578063a9059cbb14610bb8578063ada4c3e514610bd8578063b09f126614610bed57005b8063893d20e81161019f57806397832bc71161017157806397832bc714610b18578063a1337b4014610b38578063a253c06e14610b58578063a457c2d714610b6e578063a4993e7b14610b8e57005b8063893d20e814610a8d57806394ceecef14610aab578063954ea66514610acb57806395d89b4114610aeb57005b8063762bb282116101e3578063762bb282146109f65780637a1ada2f14610a0c57806382c4767b14610a3c57806385e1898614610a5257806386d0ada814610a7357005b80636ebcf607146109495780636f89e4091461097657806370a082311461099e5780637373646c146109d457005b80632a24e06411610316578063400f346c116102a45780634f91e48c1161026b5780634f91e48c146108bb578063589210d9146108d15780635d159b7b146108e757806367d479a0146109075780636e0f46821461092957005b8063400f346c1461082b578063409d96ae1461084057806342a110951461086057806349a760421461087a5780634ada218b1461089a57005b806331f1b2db116102e857806331f1b2db1461079557806332424aa3146107b5578063382e329a146107ca57806339509351146107eb5780633eca0abe1461080b57005b80632a24e064146107015780632bfe874214610740578063311a869714610760578063313ce5671461078157005b80631be094751161039357806323b872dd1161036557806323b872dd1461062657806325167dc814610646578063253c8bd4146106665780632973ef2d146106865780632a12055c146106e157005b80631be09475146105b15780631eb25d13146105d15780631f8b845e146105e6578063224f7e5a1461060657005b80630fd99e16116103d75780630fd99e16146104e7578063101c157b1461051d57806315cacef11461054a57806317391e491461056a57806318160ddd1461059c57005b8063024c2ddd1461040e57806302a89e021461045957806306fdde0314610479578063095ea7b3146104b757005b3661040c57005b005b34801561041a57600080fd5b50610446610429366004612bad565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561046557600080fd5b5061040c610474366004612bf4565b610e48565b34801561048557600080fd5b5060408051808201909152600c81526b616c66612e736f636965747960a01b60208201525b6040516104509190612c11565b3480156104c357600080fd5b506104d76104d2366004612c5f565b610eb7565b6040519015158152602001610450565b3480156104f357600080fd5b50600d5461050a90640100000000900461ffff1681565b60405161ffff9091168152602001610450565b34801561052957600080fd5b50610446610538366004612c8b565b60056020526000908152604090205481565b34801561055657600080fd5b5061040c610565366004612cbe565b610ece565b34801561057657600080fd5b5060145461058a9062010000900460ff1681565b60405160ff9091168152602001610450565b3480156105a857600080fd5b50601054610446565b3480156105bd57600080fd5b5061040c6105cc366004612d6f565b610f1e565b3480156105dd57600080fd5b50610446610f8d565b3480156105f257600080fd5b50600d5461050a90610100900461ffff1681565b34801561061257600080fd5b5061040c610621366004612c8b565b610faa565b34801561063257600080fd5b506104d7610641366004612d9d565b610ffd565b34801561065257600080fd5b5061040c610661366004612bf4565b611094565b34801561067257600080fd5b5061040c610681366004612c8b565b6110fb565b34801561069257600080fd5b506014546040805160ff6401000000008404811682526301000000840481166020830152808416928201929092526101008304821660608201526201000090920416608082015260a001610450565b3480156106ed57600080fd5b5061040c6106fc366004612bf4565b611161565b34801561070d57600080fd5b5060145461072890600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610450565b34801561074c57600080fd5b5061040c61075b366004612d6f565b6111b8565b34801561076c57600080fd5b50600d5461058a906301000000900460ff1681565b34801561078d57600080fd5b50601261058a565b3480156107a157600080fd5b5061040c6107b0366004612dde565b611227565b3480156107c157600080fd5b5061058a601281565b3480156107d657600080fd5b5060145461058a906301000000900460ff1681565b3480156107f757600080fd5b506104d7610806366004612c5f565b611281565b34801561081757600080fd5b5061040c610826366004612e0d565b6112b8565b34801561083757600080fd5b50600e54610446565b34801561084c57600080fd5b5061040c61085b366004612c8b565b6113dd565b34801561086c57600080fd5b5060145461058a9060ff1681565b34801561088657600080fd5b5061040c610895366004612c8b565b611557565b3480156108a657600080fd5b506014546104d790600160381b900460ff1681565b3480156108c757600080fd5b5061044660125481565b3480156108dd57600080fd5b5061044660135481565b3480156108f357600080fd5b5061040c610902366004612bf4565b6115a6565b34801561091357600080fd5b5060145461058a90640100000000900460ff1681565b34801561093557600080fd5b5061040c610944366004612dde565b6115fd565b34801561095557600080fd5b50610446610964366004612c8b565b60036020526000908152604090205481565b34801561098257600080fd5b5060115460125460408051928352602083019190915201610450565b3480156109aa57600080fd5b506104466109b9366004612c8b565b6001600160a01b031660009081526003602052604090205490565b3480156109e057600080fd5b50600d5461050a90600160301b900461ffff1681565b348015610a0257600080fd5b5061044660115481565b348015610a1857600080fd5b506104d7610a27366004612c8b565b600a6020526000908152604090205460ff1681565b348015610a4857600080fd5b5061072861dead81565b348015610a5e57600080fd5b50600d546104d790600160401b900460ff1681565b348015610a7f57600080fd5b50600f546104d79060ff1681565b348015610a9957600080fd5b506001546001600160a01b0316610728565b348015610ab757600080fd5b5061040c610ac6366004612bf4565b611646565b348015610ad757600080fd5b50601554610728906001600160a01b031681565b348015610af757600080fd5b50604080518082019091526004815263414c464160e01b60208201526104aa565b348015610b2457600080fd5b5061040c610b33366004612bf4565b6116ac565b348015610b4457600080fd5b5061040c610b53366004612c8b565b611703565b348015610b6457600080fd5b5061044660105481565b348015610b7a57600080fd5b506104d7610b89366004612c5f565b61176b565b348015610b9a57600080fd5b5061040c6117e7565b348015610baf57600080fd5b5061040c611880565b348015610bc457600080fd5b506104d7610bd3366004612c5f565b61195e565b348015610be457600080fd5b506104aa61196b565b348015610bf957600080fd5b506104aa60405180604001604052806004815260200163414c464160e01b81525081565b348015610c2957600080fd5b5061040c610c38366004612cbe565b6119fd565b348015610c4957600080fd5b506104d7610c58366004612c8b565b6001600160a01b031660009081526020819052604090205460ff1690565b348015610c8257600080fd5b5061040c610c91366004612c8b565b611a4a565b348015610ca257600080fd5b5061040c610cb1366004612e72565b611a99565b348015610cc257600080fd5b506014546104d790600160301b900460ff1681565b348015610ce357600080fd5b50610728737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610d0b57600080fd5b5060145461058a90610100900460ff1681565b348015610d2a57600080fd5b506104aa6040518060400160405280600c81526020016b616c66612e736f636965747960a01b81525081565b348015610d6257600080fd5b50610446600e5481565b348015610d7857600080fd5b5061040c610d87366004612c8b565b611b17565b348015610d9857600080fd5b5061044660165481565b348015610dae57600080fd5b5061040c610dbd366004612c8b565b611b66565b348015610dce57600080fd5b50610446610ddd366004612bad565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610e1457600080fd5b5061040c610e23366004612dde565b611bcb565b348015610e3457600080fd5b5061040c610e43366004612c8b565b611c14565b3360009081526020819052604090205460ff1680610e7057506001546001600160a01b031633145b610e955760405162461bcd60e51b8152600401610e8c90612e94565b60405180910390fd5b60148054911515650100000000000265ff000000000019909216919091179055565b6000610ec4338484611ca5565b5060015b92915050565b3360009081526020819052604090205460ff1680610ef657506001546001600160a01b031633145b610f125760405162461bcd60e51b8152600401610e8c90612e94565b610f1b81611d99565b50565b3360009081526020819052604090205460ff1680610f4657506001546001600160a01b031633145b610f625760405162461bcd60e51b8152600401610e8c90612e94565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b610f996012600a612fb1565b610fa7906305f5e100612fc0565b81565b3360009081526020819052604090205460ff1680610fd257506001546001600160a01b031633145b610fee5760405162461bcd60e51b8152600401610e8c90612e94565b610ff9600682611e0a565b5050565b600061100a848484611e1f565b6001600160a01b0384166000908152600460209081526040808320338452909152902054828110156110755760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610e8c565b61108985336110848685612fd7565b611ca5565b506001949350505050565b3360009081526020819052604090205460ff16806110bc57506001546001600160a01b031633145b6110d85760405162461bcd60e51b8152600401610e8c90612e94565b600d8054911515600160401b0268ff000000000000000019909216919091179055565b3360009081526020819052604090205460ff168061112357506001546001600160a01b031633145b61113f5760405162461bcd60e51b8152600401610e8c90612e94565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526020819052604090205460ff168061118957506001546001600160a01b031633145b6111a55760405162461bcd60e51b8152600401610e8c90612e94565b600b805460ff1916911515919091179055565b3360009081526020819052604090205460ff16806111e057506001546001600160a01b031633145b6111fc5760405162461bcd60e51b8152600401610e8c90612e94565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061124f57506001546001600160a01b031633145b61126b5760405162461bcd60e51b8152600401610e8c90612e94565b610f1b61127c82633b9aca00612fc0565b6121cf565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610ec4918590611084908690612fea565b3360009081526020819052604090205460ff16806112e057506001546001600160a01b031633145b6112fc5760405162461bcd60e51b8152600401610e8c90612e94565b60006113088587612ffd565b90508060ff166064146113735760405162461bcd60e51b815260206004820152602d60248201527f50726f6a656374202b204c6971756964697479207461786573206e656564732060448201526c746f20657175616c203130302560981b6064820152608401610e8c565b506014805460ff928316620100000262ff0000199484166101000261ffff1997851663010000000263ff00000019998616640100000000029990991664ffff0000001990931692909217979097179590951693909116929092179290921791909116919091179055565b3360009081526020819052604090205460ff168061140557506001546001600160a01b031633145b6114215760405162461bcd60e51b8152600401610e8c90612e94565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561146a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148e9190613016565b9050600081116114e05760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610e8c565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561152d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611551919061302f565b50505050565b3360009081526020819052604090205460ff168061157f57506001546001600160a01b031633145b61159b5760405162461bcd60e51b8152600401610e8c90612e94565b610ff9600682611c89565b3360009081526020819052604090205460ff16806115ce57506001546001600160a01b031633145b6115ea5760405162461bcd60e51b8152600401610e8c90612e94565b600d805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061162557506001546001600160a01b031633145b6116415760405162461bcd60e51b8152600401610e8c90612e94565b600e55565b3360009081526020819052604090205460ff168061166e57506001546001600160a01b031633145b61168a5760405162461bcd60e51b8152600401610e8c90612e94565b60148054911515600160381b0267ff0000000000000019909216919091179055565b3360009081526020819052604090205460ff16806116d457506001546001600160a01b031633145b6116f05760405162461bcd60e51b8152600401610e8c90612e94565b600f805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061172b57506001546001600160a01b031633145b6117475760405162461bcd60e51b8152600401610e8c90612e94565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156117ce5760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610e8c565b6117dd33856110848685612fd7565b5060019392505050565b3360009081526020819052604090205460ff168061180f57506001546001600160a01b031633145b61182b5760405162461bcd60e51b8152600401610e8c90612e94565b604051600090339047908381818185875af1925050503d806000811461186d576040519150601f19603f3d011682016040523d82523d6000602084013e611872565b606091505b5050905080610f1b57600080fd5b3360009081526020819052604090205460ff16806118a857506001546001600160a01b031633145b6118c45760405162461bcd60e51b8152600401610e8c90612e94565b6016805460009182905560405190913391829084908381818185875af1925050503d8060008114611911576040519150601f19603f3d011682016040523d82523d6000602084013e611916565b606091505b50509050806119595760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610e8c565b505050565b6000610ec4338484611e1f565b60606002805461197a9061304c565b80601f01602080910402602001604051908101604052809291908181526020018280546119a69061304c565b80156119f35780601f106119c8576101008083540402835291602001916119f3565b820191906000526020600020905b8154815290600101906020018083116119d657829003601f168201915b5050505050905090565b3360009081526020819052604090205460ff1680611a2557506001546001600160a01b031633145b611a415760405162461bcd60e51b8152600401610e8c90612e94565b610f1b81612337565b3360009081526020819052604090205460ff1680611a7257506001546001600160a01b031633145b611a8e5760405162461bcd60e51b8152600401610e8c90612e94565b610ff9600882611c89565b3360009081526020819052604090205460ff1680611ac157506001546001600160a01b031633145b611add5760405162461bcd60e51b8152600401610e8c90612e94565b611ae96012600a612fb1565b611af39083612fc0565b9150611b016012600a612fb1565b611b0b9082612fc0565b60119290925550601255565b3360009081526020819052604090205460ff1680611b3f57506001546001600160a01b031633145b611b5b5760405162461bcd60e51b8152600401610e8c90612e94565b610ff9600882611e0a565b3360009081526020819052604090205460ff1680611b8e57506001546001600160a01b031633145b611baa5760405162461bcd60e51b8152600401610e8c90612e94565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b3360009081526020819052604090205460ff1680611bf357506001546001600160a01b031633145b611c0f5760405162461bcd60e51b8152600401610e8c90612e94565b600c55565b3360009081526020819052604090205460ff1680611c3c57506001546001600160a01b031633145b611c585760405162461bcd60e51b8152600401610e8c90612e94565b601480546001600160a01b03909216600160401b0268010000000000000000600160e01b0319909216919091179055565b6000611c9e836001600160a01b038416612343565b9392505050565b6001600160a01b038316611cef5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610e8c565b6001600160a01b038216611d375760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610e8c565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b7f51a7f65c6325882f237d4aeb43228179cfad48b868511d508e24b4437a81913781604051611dc89190612c11565b60405180910390a17f0de55d0848e0c543ad20a42b124b12dd2342cee1587aa104f17c948967a542ef81604051611dff9190612c11565b60405180910390a150565b6000611c9e836001600160a01b038416612392565b6001600160a01b038316611e6a5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610e8c565b600b5460ff1615611ef0576001600160a01b0383166000908152600a602052604090205460ff16158015611eb757506001600160a01b0382166000908152600a602052604090205460ff16155b611ef05760405162461bcd60e51b815260206004820152600a602482015269426f746c69737465642160b01b6044820152606401610e8c565b6000611efd60068561247f565b80611f0e5750611f0e60068461247f565b80611f3157506001600160a01b03841660009081526020819052604090205460ff165b80611f5457506001600160a01b03831660009081526020819052604090205460ff165b905060006001600160a01b038516301480611f7757506001600160a01b03841630145b6014549091506000906001600160a01b03878116600160401b90920416148015611fbd57506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b8061200357506014546001600160a01b03868116600160401b9092041614801561200357506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b9050818061200e5750805b806120165750825b1561202b576120268686866124a1565b6121c7565b601454600160381b900460ff1661212e576001546001600160a01b0387811691161480159061206857506001546001600160a01b03868116911614155b1561212e57601454600160301b900460ff16156120d557846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040516120c591815260200190565b60405180910390a3505050505050565b601454600160381b900460ff1661212e5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610e8c565b6014546000906001600160a01b03888116600160401b90920416148061217057506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6014549091506000906001600160a01b03888116600160401b9092041614806121b557506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b90506121c4888888858561255d565b50505b505050505050565b6017805460ff1916600117905530600090815260036020526040902054600c548110156121fc575061232a565b601454600c54630100000090910460ff16908381111561222457600d5460ff16156122245750825b8161ffff166000036122385750505061232a565b60145460009061ffff841690612258906301000000900460ff1684612fc0565b6122629190613086565b60145490915060009061ffff85169061228690640100000000900460ff1685612fc0565b6122909190613086565b9050600061229f600284613086565b905060006122ad8285612fd7565b905060006122bb8483612fea565b9050476122c7826128f9565b60006122d38247612fd7565b90506000836122e28684612fc0565b6122ec9190613086565b90506122f88682612a4a565b60006123048447612fd7565b905080601660008282546123189190612fea565b90915550505050505050505050505050505b506017805460ff19169055565b6002610ff982826130ee565b600081815260018301602052604081205461238a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ec8565b506000610ec8565b600081815260018301602052604081205480156124755760006123b6600183612fd7565b85549091506000906123ca90600190612fd7565b905060008660000182815481106123e3576123e36131ae565b9060005260206000200154905080876000018481548110612406576124066131ae565b600091825260208083209091019290925582815260018901909152604090208490558654879080612439576124396131c4565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610ec8565b6000915050610ec8565b6001600160a01b03811660009081526001830160205260408120541515611c9e565b6001600160a01b0383166000908152600360205260409020548111156125045760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e8c565b61250e8382612afb565b6125188282612b40565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d8c91815260200190565b6001600160a01b038085166000908152600360205260408082205492881682529020548411156125ca5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e8c565b600082156126ce576125dd60088861247f565b612679576001600160a01b038716600090815260056020526040902054421015806126115750600d54600160401b900460ff165b6126525760405162461bcd60e51b815260206004820152601260248201527129b2b63632b91034b71031b7b7b62237bbb760711b6044820152606401610e8c565b600e5461265f9042612fea565b6001600160a01b0388166000908152600560205260409020555b6012548511156126bd5760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610e8c565b50601454610100900460ff166127e2565b831561272d576011546126e18684612fea565b11156126ff5760405162461bcd60e51b8152600401610e8c906131da565b6013548511156127215760405162461bcd60e51b8152600401610e8c906131da565b5060145460ff166127e2565b60115461273a8684612fea565b11156127585760405162461bcd60e51b8152600401610e8c906131da565b61276360088861247f565b6127d4576001600160a01b038716600090815260056020526040902054421015806127975750600d54600160401b900460ff165b6127d45760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610e8c565b5060145462010000900460ff165b6014546001600160a01b03888116600160401b909204161480159061280a5750600f5460ff16155b8015612819575060175460ff16155b1561282757612827856121cf565b60145460009061285890879084906128539060ff64010000000082048116916301000000900416612ffd565b612b64565b905060006128668288612fd7565b90506128728988612afb565b3060009081526003602052604081208054849290612891908490612fea565b909155506128a190508882612b40565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516128e691815260200190565b60405180910390a3505050505050505050565b6015546129119030906001600160a01b031683611ca5565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612946576129466131ae565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561299f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c39190613204565b816001815181106129d6576129d66131ae565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b815291169063791ac94790612a1c908590600090869030904290600401613221565b600060405180830381600087803b158015612a3657600080fd5b505af11580156121c7573d6000803e3d6000fd5b601554612a629030906001600160a01b031684611ca5565b60155460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612acf573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612af49190613292565b5050505050565b6001600160a01b038216600090815260036020526040812054612b1f908390612fd7565b6001600160a01b039093166000908152600360205260409020929092555050565b6001600160a01b038216600090815260036020526040812054612b1f908390612fea565b60006127108260ff168460ff1686612b7c9190612fc0565b612b869190612fc0565b612b909190613086565b949350505050565b6001600160a01b0381168114610f1b57600080fd5b60008060408385031215612bc057600080fd5b8235612bcb81612b98565b91506020830135612bdb81612b98565b809150509250929050565b8015158114610f1b57600080fd5b600060208284031215612c0657600080fd5b8135611c9e81612be6565b600060208083528351808285015260005b81811015612c3e57858101830151858201604001528201612c22565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612c7257600080fd5b8235612c7d81612b98565b946020939093013593505050565b600060208284031215612c9d57600080fd5b8135611c9e81612b98565b634e487b7160e01b600052604160045260246000fd5b600060208284031215612cd057600080fd5b813567ffffffffffffffff80821115612ce857600080fd5b818401915084601f830112612cfc57600080fd5b813581811115612d0e57612d0e612ca8565b604051601f8201601f19908116603f01168101908382118183101715612d3657612d36612ca8565b81604052828152876020848701011115612d4f57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060408385031215612d8257600080fd5b8235612d8d81612b98565b91506020830135612bdb81612be6565b600080600060608486031215612db257600080fd5b8335612dbd81612b98565b92506020840135612dcd81612b98565b929592945050506040919091013590565b600060208284031215612df057600080fd5b5035919050565b803560ff81168114612e0857600080fd5b919050565b600080600080600060a08688031215612e2557600080fd5b612e2e86612df7565b9450612e3c60208701612df7565b9350612e4a60408701612df7565b9250612e5860608701612df7565b9150612e6660808701612df7565b90509295509295909350565b60008060408385031215612e8557600080fd5b50508035926020909101359150565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612f08578160001904821115612eee57612eee612eb7565b80851615612efb57918102915b93841c9390800290612ed2565b509250929050565b600082612f1f57506001610ec8565b81612f2c57506000610ec8565b8160018114612f425760028114612f4c57612f68565b6001915050610ec8565b60ff841115612f5d57612f5d612eb7565b50506001821b610ec8565b5060208310610133831016604e8410600b8410161715612f8b575081810a610ec8565b612f958383612ecd565b8060001904821115612fa957612fa9612eb7565b029392505050565b6000611c9e60ff841683612f10565b8082028115828204841417610ec857610ec8612eb7565b81810381811115610ec857610ec8612eb7565b80820180821115610ec857610ec8612eb7565b60ff8181168382160190811115610ec857610ec8612eb7565b60006020828403121561302857600080fd5b5051919050565b60006020828403121561304157600080fd5b8151611c9e81612be6565b600181811c9082168061306057607f821691505b60208210810361308057634e487b7160e01b600052602260045260246000fd5b50919050565b6000826130a357634e487b7160e01b600052601260045260246000fd5b500490565b601f82111561195957600081815260208120601f850160051c810160208610156130cf5750805b601f850160051c820191505b818110156121c7578281556001016130db565b815167ffffffffffffffff81111561310857613108612ca8565b61311c81613116845461304c565b846130a8565b602080601f83116001811461315157600084156131395750858301515b600019600386901b1c1916600185901b1785556121c7565b600085815260208120601f198616915b8281101561318057888601518255948401946001909101908401613161565b508582101561319e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b60006020828403121561321657600080fd5b8151611c9e81612b98565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132715784516001600160a01b03168352938301939183019160010161324c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132a757600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220894da8608dfe613b485f230e44e7c1ba9057a454ddacea98a57fe370c38ad0f464736f6c63430008110033

Deployed Bytecode

0x6080604052600436106104055760003560e01c80636ebcf60711610211578063a6c4c88911610122578063c7639d80116100b0578063d840fd0611610077578063d840fd0614610d8c578063d9012d4a14610da2578063dd62ed3e14610dc2578063de65936814610e08578063fe48183c14610e2857005b8063c7639d8014610cd7578063ca9ec19914610cff578063d28d885214610d1e578063d2ce0db214610d56578063d45c484114610d6c57005b8063b90291c3116100f4578063b90291c314610c1d578063b918161114610c3d578063c20c87b814610c76578063c2bcf5ea14610c96578063c41ba81014610cb657005b8063a6c4c88914610ba3578063a9059cbb14610bb8578063ada4c3e514610bd8578063b09f126614610bed57005b8063893d20e81161019f57806397832bc71161017157806397832bc714610b18578063a1337b4014610b38578063a253c06e14610b58578063a457c2d714610b6e578063a4993e7b14610b8e57005b8063893d20e814610a8d57806394ceecef14610aab578063954ea66514610acb57806395d89b4114610aeb57005b8063762bb282116101e3578063762bb282146109f65780637a1ada2f14610a0c57806382c4767b14610a3c57806385e1898614610a5257806386d0ada814610a7357005b80636ebcf607146109495780636f89e4091461097657806370a082311461099e5780637373646c146109d457005b80632a24e06411610316578063400f346c116102a45780634f91e48c1161026b5780634f91e48c146108bb578063589210d9146108d15780635d159b7b146108e757806367d479a0146109075780636e0f46821461092957005b8063400f346c1461082b578063409d96ae1461084057806342a110951461086057806349a760421461087a5780634ada218b1461089a57005b806331f1b2db116102e857806331f1b2db1461079557806332424aa3146107b5578063382e329a146107ca57806339509351146107eb5780633eca0abe1461080b57005b80632a24e064146107015780632bfe874214610740578063311a869714610760578063313ce5671461078157005b80631be094751161039357806323b872dd1161036557806323b872dd1461062657806325167dc814610646578063253c8bd4146106665780632973ef2d146106865780632a12055c146106e157005b80631be09475146105b15780631eb25d13146105d15780631f8b845e146105e6578063224f7e5a1461060657005b80630fd99e16116103d75780630fd99e16146104e7578063101c157b1461051d57806315cacef11461054a57806317391e491461056a57806318160ddd1461059c57005b8063024c2ddd1461040e57806302a89e021461045957806306fdde0314610479578063095ea7b3146104b757005b3661040c57005b005b34801561041a57600080fd5b50610446610429366004612bad565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561046557600080fd5b5061040c610474366004612bf4565b610e48565b34801561048557600080fd5b5060408051808201909152600c81526b616c66612e736f636965747960a01b60208201525b6040516104509190612c11565b3480156104c357600080fd5b506104d76104d2366004612c5f565b610eb7565b6040519015158152602001610450565b3480156104f357600080fd5b50600d5461050a90640100000000900461ffff1681565b60405161ffff9091168152602001610450565b34801561052957600080fd5b50610446610538366004612c8b565b60056020526000908152604090205481565b34801561055657600080fd5b5061040c610565366004612cbe565b610ece565b34801561057657600080fd5b5060145461058a9062010000900460ff1681565b60405160ff9091168152602001610450565b3480156105a857600080fd5b50601054610446565b3480156105bd57600080fd5b5061040c6105cc366004612d6f565b610f1e565b3480156105dd57600080fd5b50610446610f8d565b3480156105f257600080fd5b50600d5461050a90610100900461ffff1681565b34801561061257600080fd5b5061040c610621366004612c8b565b610faa565b34801561063257600080fd5b506104d7610641366004612d9d565b610ffd565b34801561065257600080fd5b5061040c610661366004612bf4565b611094565b34801561067257600080fd5b5061040c610681366004612c8b565b6110fb565b34801561069257600080fd5b506014546040805160ff6401000000008404811682526301000000840481166020830152808416928201929092526101008304821660608201526201000090920416608082015260a001610450565b3480156106ed57600080fd5b5061040c6106fc366004612bf4565b611161565b34801561070d57600080fd5b5060145461072890600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610450565b34801561074c57600080fd5b5061040c61075b366004612d6f565b6111b8565b34801561076c57600080fd5b50600d5461058a906301000000900460ff1681565b34801561078d57600080fd5b50601261058a565b3480156107a157600080fd5b5061040c6107b0366004612dde565b611227565b3480156107c157600080fd5b5061058a601281565b3480156107d657600080fd5b5060145461058a906301000000900460ff1681565b3480156107f757600080fd5b506104d7610806366004612c5f565b611281565b34801561081757600080fd5b5061040c610826366004612e0d565b6112b8565b34801561083757600080fd5b50600e54610446565b34801561084c57600080fd5b5061040c61085b366004612c8b565b6113dd565b34801561086c57600080fd5b5060145461058a9060ff1681565b34801561088657600080fd5b5061040c610895366004612c8b565b611557565b3480156108a657600080fd5b506014546104d790600160381b900460ff1681565b3480156108c757600080fd5b5061044660125481565b3480156108dd57600080fd5b5061044660135481565b3480156108f357600080fd5b5061040c610902366004612bf4565b6115a6565b34801561091357600080fd5b5060145461058a90640100000000900460ff1681565b34801561093557600080fd5b5061040c610944366004612dde565b6115fd565b34801561095557600080fd5b50610446610964366004612c8b565b60036020526000908152604090205481565b34801561098257600080fd5b5060115460125460408051928352602083019190915201610450565b3480156109aa57600080fd5b506104466109b9366004612c8b565b6001600160a01b031660009081526003602052604090205490565b3480156109e057600080fd5b50600d5461050a90600160301b900461ffff1681565b348015610a0257600080fd5b5061044660115481565b348015610a1857600080fd5b506104d7610a27366004612c8b565b600a6020526000908152604090205460ff1681565b348015610a4857600080fd5b5061072861dead81565b348015610a5e57600080fd5b50600d546104d790600160401b900460ff1681565b348015610a7f57600080fd5b50600f546104d79060ff1681565b348015610a9957600080fd5b506001546001600160a01b0316610728565b348015610ab757600080fd5b5061040c610ac6366004612bf4565b611646565b348015610ad757600080fd5b50601554610728906001600160a01b031681565b348015610af757600080fd5b50604080518082019091526004815263414c464160e01b60208201526104aa565b348015610b2457600080fd5b5061040c610b33366004612bf4565b6116ac565b348015610b4457600080fd5b5061040c610b53366004612c8b565b611703565b348015610b6457600080fd5b5061044660105481565b348015610b7a57600080fd5b506104d7610b89366004612c5f565b61176b565b348015610b9a57600080fd5b5061040c6117e7565b348015610baf57600080fd5b5061040c611880565b348015610bc457600080fd5b506104d7610bd3366004612c5f565b61195e565b348015610be457600080fd5b506104aa61196b565b348015610bf957600080fd5b506104aa60405180604001604052806004815260200163414c464160e01b81525081565b348015610c2957600080fd5b5061040c610c38366004612cbe565b6119fd565b348015610c4957600080fd5b506104d7610c58366004612c8b565b6001600160a01b031660009081526020819052604090205460ff1690565b348015610c8257600080fd5b5061040c610c91366004612c8b565b611a4a565b348015610ca257600080fd5b5061040c610cb1366004612e72565b611a99565b348015610cc257600080fd5b506014546104d790600160301b900460ff1681565b348015610ce357600080fd5b50610728737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610d0b57600080fd5b5060145461058a90610100900460ff1681565b348015610d2a57600080fd5b506104aa6040518060400160405280600c81526020016b616c66612e736f636965747960a01b81525081565b348015610d6257600080fd5b50610446600e5481565b348015610d7857600080fd5b5061040c610d87366004612c8b565b611b17565b348015610d9857600080fd5b5061044660165481565b348015610dae57600080fd5b5061040c610dbd366004612c8b565b611b66565b348015610dce57600080fd5b50610446610ddd366004612bad565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610e1457600080fd5b5061040c610e23366004612dde565b611bcb565b348015610e3457600080fd5b5061040c610e43366004612c8b565b611c14565b3360009081526020819052604090205460ff1680610e7057506001546001600160a01b031633145b610e955760405162461bcd60e51b8152600401610e8c90612e94565b60405180910390fd5b60148054911515650100000000000265ff000000000019909216919091179055565b6000610ec4338484611ca5565b5060015b92915050565b3360009081526020819052604090205460ff1680610ef657506001546001600160a01b031633145b610f125760405162461bcd60e51b8152600401610e8c90612e94565b610f1b81611d99565b50565b3360009081526020819052604090205460ff1680610f4657506001546001600160a01b031633145b610f625760405162461bcd60e51b8152600401610e8c90612e94565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b610f996012600a612fb1565b610fa7906305f5e100612fc0565b81565b3360009081526020819052604090205460ff1680610fd257506001546001600160a01b031633145b610fee5760405162461bcd60e51b8152600401610e8c90612e94565b610ff9600682611e0a565b5050565b600061100a848484611e1f565b6001600160a01b0384166000908152600460209081526040808320338452909152902054828110156110755760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610e8c565b61108985336110848685612fd7565b611ca5565b506001949350505050565b3360009081526020819052604090205460ff16806110bc57506001546001600160a01b031633145b6110d85760405162461bcd60e51b8152600401610e8c90612e94565b600d8054911515600160401b0268ff000000000000000019909216919091179055565b3360009081526020819052604090205460ff168061112357506001546001600160a01b031633145b61113f5760405162461bcd60e51b8152600401610e8c90612e94565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526020819052604090205460ff168061118957506001546001600160a01b031633145b6111a55760405162461bcd60e51b8152600401610e8c90612e94565b600b805460ff1916911515919091179055565b3360009081526020819052604090205460ff16806111e057506001546001600160a01b031633145b6111fc5760405162461bcd60e51b8152600401610e8c90612e94565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061124f57506001546001600160a01b031633145b61126b5760405162461bcd60e51b8152600401610e8c90612e94565b610f1b61127c82633b9aca00612fc0565b6121cf565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610ec4918590611084908690612fea565b3360009081526020819052604090205460ff16806112e057506001546001600160a01b031633145b6112fc5760405162461bcd60e51b8152600401610e8c90612e94565b60006113088587612ffd565b90508060ff166064146113735760405162461bcd60e51b815260206004820152602d60248201527f50726f6a656374202b204c6971756964697479207461786573206e656564732060448201526c746f20657175616c203130302560981b6064820152608401610e8c565b506014805460ff928316620100000262ff0000199484166101000261ffff1997851663010000000263ff00000019998616640100000000029990991664ffff0000001990931692909217979097179590951693909116929092179290921791909116919091179055565b3360009081526020819052604090205460ff168061140557506001546001600160a01b031633145b6114215760405162461bcd60e51b8152600401610e8c90612e94565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561146a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148e9190613016565b9050600081116114e05760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610e8c565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561152d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611551919061302f565b50505050565b3360009081526020819052604090205460ff168061157f57506001546001600160a01b031633145b61159b5760405162461bcd60e51b8152600401610e8c90612e94565b610ff9600682611c89565b3360009081526020819052604090205460ff16806115ce57506001546001600160a01b031633145b6115ea5760405162461bcd60e51b8152600401610e8c90612e94565b600d805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061162557506001546001600160a01b031633145b6116415760405162461bcd60e51b8152600401610e8c90612e94565b600e55565b3360009081526020819052604090205460ff168061166e57506001546001600160a01b031633145b61168a5760405162461bcd60e51b8152600401610e8c90612e94565b60148054911515600160381b0267ff0000000000000019909216919091179055565b3360009081526020819052604090205460ff16806116d457506001546001600160a01b031633145b6116f05760405162461bcd60e51b8152600401610e8c90612e94565b600f805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061172b57506001546001600160a01b031633145b6117475760405162461bcd60e51b8152600401610e8c90612e94565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156117ce5760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610e8c565b6117dd33856110848685612fd7565b5060019392505050565b3360009081526020819052604090205460ff168061180f57506001546001600160a01b031633145b61182b5760405162461bcd60e51b8152600401610e8c90612e94565b604051600090339047908381818185875af1925050503d806000811461186d576040519150601f19603f3d011682016040523d82523d6000602084013e611872565b606091505b5050905080610f1b57600080fd5b3360009081526020819052604090205460ff16806118a857506001546001600160a01b031633145b6118c45760405162461bcd60e51b8152600401610e8c90612e94565b6016805460009182905560405190913391829084908381818185875af1925050503d8060008114611911576040519150601f19603f3d011682016040523d82523d6000602084013e611916565b606091505b50509050806119595760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610e8c565b505050565b6000610ec4338484611e1f565b60606002805461197a9061304c565b80601f01602080910402602001604051908101604052809291908181526020018280546119a69061304c565b80156119f35780601f106119c8576101008083540402835291602001916119f3565b820191906000526020600020905b8154815290600101906020018083116119d657829003601f168201915b5050505050905090565b3360009081526020819052604090205460ff1680611a2557506001546001600160a01b031633145b611a415760405162461bcd60e51b8152600401610e8c90612e94565b610f1b81612337565b3360009081526020819052604090205460ff1680611a7257506001546001600160a01b031633145b611a8e5760405162461bcd60e51b8152600401610e8c90612e94565b610ff9600882611c89565b3360009081526020819052604090205460ff1680611ac157506001546001600160a01b031633145b611add5760405162461bcd60e51b8152600401610e8c90612e94565b611ae96012600a612fb1565b611af39083612fc0565b9150611b016012600a612fb1565b611b0b9082612fc0565b60119290925550601255565b3360009081526020819052604090205460ff1680611b3f57506001546001600160a01b031633145b611b5b5760405162461bcd60e51b8152600401610e8c90612e94565b610ff9600882611e0a565b3360009081526020819052604090205460ff1680611b8e57506001546001600160a01b031633145b611baa5760405162461bcd60e51b8152600401610e8c90612e94565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b3360009081526020819052604090205460ff1680611bf357506001546001600160a01b031633145b611c0f5760405162461bcd60e51b8152600401610e8c90612e94565b600c55565b3360009081526020819052604090205460ff1680611c3c57506001546001600160a01b031633145b611c585760405162461bcd60e51b8152600401610e8c90612e94565b601480546001600160a01b03909216600160401b0268010000000000000000600160e01b0319909216919091179055565b6000611c9e836001600160a01b038416612343565b9392505050565b6001600160a01b038316611cef5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610e8c565b6001600160a01b038216611d375760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610e8c565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b7f51a7f65c6325882f237d4aeb43228179cfad48b868511d508e24b4437a81913781604051611dc89190612c11565b60405180910390a17f0de55d0848e0c543ad20a42b124b12dd2342cee1587aa104f17c948967a542ef81604051611dff9190612c11565b60405180910390a150565b6000611c9e836001600160a01b038416612392565b6001600160a01b038316611e6a5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610e8c565b600b5460ff1615611ef0576001600160a01b0383166000908152600a602052604090205460ff16158015611eb757506001600160a01b0382166000908152600a602052604090205460ff16155b611ef05760405162461bcd60e51b815260206004820152600a602482015269426f746c69737465642160b01b6044820152606401610e8c565b6000611efd60068561247f565b80611f0e5750611f0e60068461247f565b80611f3157506001600160a01b03841660009081526020819052604090205460ff165b80611f5457506001600160a01b03831660009081526020819052604090205460ff165b905060006001600160a01b038516301480611f7757506001600160a01b03841630145b6014549091506000906001600160a01b03878116600160401b90920416148015611fbd57506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b8061200357506014546001600160a01b03868116600160401b9092041614801561200357506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b9050818061200e5750805b806120165750825b1561202b576120268686866124a1565b6121c7565b601454600160381b900460ff1661212e576001546001600160a01b0387811691161480159061206857506001546001600160a01b03868116911614155b1561212e57601454600160301b900460ff16156120d557846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040516120c591815260200190565b60405180910390a3505050505050565b601454600160381b900460ff1661212e5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610e8c565b6014546000906001600160a01b03888116600160401b90920416148061217057506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6014549091506000906001600160a01b03888116600160401b9092041614806121b557506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b90506121c4888888858561255d565b50505b505050505050565b6017805460ff1916600117905530600090815260036020526040902054600c548110156121fc575061232a565b601454600c54630100000090910460ff16908381111561222457600d5460ff16156122245750825b8161ffff166000036122385750505061232a565b60145460009061ffff841690612258906301000000900460ff1684612fc0565b6122629190613086565b60145490915060009061ffff85169061228690640100000000900460ff1685612fc0565b6122909190613086565b9050600061229f600284613086565b905060006122ad8285612fd7565b905060006122bb8483612fea565b9050476122c7826128f9565b60006122d38247612fd7565b90506000836122e28684612fc0565b6122ec9190613086565b90506122f88682612a4a565b60006123048447612fd7565b905080601660008282546123189190612fea565b90915550505050505050505050505050505b506017805460ff19169055565b6002610ff982826130ee565b600081815260018301602052604081205461238a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ec8565b506000610ec8565b600081815260018301602052604081205480156124755760006123b6600183612fd7565b85549091506000906123ca90600190612fd7565b905060008660000182815481106123e3576123e36131ae565b9060005260206000200154905080876000018481548110612406576124066131ae565b600091825260208083209091019290925582815260018901909152604090208490558654879080612439576124396131c4565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610ec8565b6000915050610ec8565b6001600160a01b03811660009081526001830160205260408120541515611c9e565b6001600160a01b0383166000908152600360205260409020548111156125045760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e8c565b61250e8382612afb565b6125188282612b40565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d8c91815260200190565b6001600160a01b038085166000908152600360205260408082205492881682529020548411156125ca5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e8c565b600082156126ce576125dd60088861247f565b612679576001600160a01b038716600090815260056020526040902054421015806126115750600d54600160401b900460ff165b6126525760405162461bcd60e51b815260206004820152601260248201527129b2b63632b91034b71031b7b7b62237bbb760711b6044820152606401610e8c565b600e5461265f9042612fea565b6001600160a01b0388166000908152600560205260409020555b6012548511156126bd5760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610e8c565b50601454610100900460ff166127e2565b831561272d576011546126e18684612fea565b11156126ff5760405162461bcd60e51b8152600401610e8c906131da565b6013548511156127215760405162461bcd60e51b8152600401610e8c906131da565b5060145460ff166127e2565b60115461273a8684612fea565b11156127585760405162461bcd60e51b8152600401610e8c906131da565b61276360088861247f565b6127d4576001600160a01b038716600090815260056020526040902054421015806127975750600d54600160401b900460ff165b6127d45760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610e8c565b5060145462010000900460ff165b6014546001600160a01b03888116600160401b909204161480159061280a5750600f5460ff16155b8015612819575060175460ff16155b1561282757612827856121cf565b60145460009061285890879084906128539060ff64010000000082048116916301000000900416612ffd565b612b64565b905060006128668288612fd7565b90506128728988612afb565b3060009081526003602052604081208054849290612891908490612fea565b909155506128a190508882612b40565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516128e691815260200190565b60405180910390a3505050505050505050565b6015546129119030906001600160a01b031683611ca5565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612946576129466131ae565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561299f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c39190613204565b816001815181106129d6576129d66131ae565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b815291169063791ac94790612a1c908590600090869030904290600401613221565b600060405180830381600087803b158015612a3657600080fd5b505af11580156121c7573d6000803e3d6000fd5b601554612a629030906001600160a01b031684611ca5565b60155460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612acf573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612af49190613292565b5050505050565b6001600160a01b038216600090815260036020526040812054612b1f908390612fd7565b6001600160a01b039093166000908152600360205260409020929092555050565b6001600160a01b038216600090815260036020526040812054612b1f908390612fea565b60006127108260ff168460ff1686612b7c9190612fc0565b612b869190612fc0565b612b909190613086565b949350505050565b6001600160a01b0381168114610f1b57600080fd5b60008060408385031215612bc057600080fd5b8235612bcb81612b98565b91506020830135612bdb81612b98565b809150509250929050565b8015158114610f1b57600080fd5b600060208284031215612c0657600080fd5b8135611c9e81612be6565b600060208083528351808285015260005b81811015612c3e57858101830151858201604001528201612c22565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612c7257600080fd5b8235612c7d81612b98565b946020939093013593505050565b600060208284031215612c9d57600080fd5b8135611c9e81612b98565b634e487b7160e01b600052604160045260246000fd5b600060208284031215612cd057600080fd5b813567ffffffffffffffff80821115612ce857600080fd5b818401915084601f830112612cfc57600080fd5b813581811115612d0e57612d0e612ca8565b604051601f8201601f19908116603f01168101908382118183101715612d3657612d36612ca8565b81604052828152876020848701011115612d4f57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060408385031215612d8257600080fd5b8235612d8d81612b98565b91506020830135612bdb81612be6565b600080600060608486031215612db257600080fd5b8335612dbd81612b98565b92506020840135612dcd81612b98565b929592945050506040919091013590565b600060208284031215612df057600080fd5b5035919050565b803560ff81168114612e0857600080fd5b919050565b600080600080600060a08688031215612e2557600080fd5b612e2e86612df7565b9450612e3c60208701612df7565b9350612e4a60408701612df7565b9250612e5860608701612df7565b9150612e6660808701612df7565b90509295509295909350565b60008060408385031215612e8557600080fd5b50508035926020909101359150565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612f08578160001904821115612eee57612eee612eb7565b80851615612efb57918102915b93841c9390800290612ed2565b509250929050565b600082612f1f57506001610ec8565b81612f2c57506000610ec8565b8160018114612f425760028114612f4c57612f68565b6001915050610ec8565b60ff841115612f5d57612f5d612eb7565b50506001821b610ec8565b5060208310610133831016604e8410600b8410161715612f8b575081810a610ec8565b612f958383612ecd565b8060001904821115612fa957612fa9612eb7565b029392505050565b6000611c9e60ff841683612f10565b8082028115828204841417610ec857610ec8612eb7565b81810381811115610ec857610ec8612eb7565b80820180821115610ec857610ec8612eb7565b60ff8181168382160190811115610ec857610ec8612eb7565b60006020828403121561302857600080fd5b5051919050565b60006020828403121561304157600080fd5b8151611c9e81612be6565b600181811c9082168061306057607f821691505b60208210810361308057634e487b7160e01b600052602260045260246000fd5b50919050565b6000826130a357634e487b7160e01b600052601260045260246000fd5b500490565b601f82111561195957600081815260208120601f850160051c810160208610156130cf5750805b601f850160051c820191505b818110156121c7578281556001016130db565b815167ffffffffffffffff81111561310857613108612ca8565b61311c81613116845461304c565b846130a8565b602080601f83116001811461315157600084156131395750858301515b600019600386901b1c1916600185901b1785556121c7565b600085815260208120601f198616915b8281101561318057888601518255948401946001909101908401613161565b508582101561319e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b60006020828403121561321657600080fd5b8151611c9e81612b98565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132715784516001600160a01b03168352938301939183019160010161324c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132a757600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220894da8608dfe613b485f230e44e7c1ba9057a454ddacea98a57fe370c38ad0f464736f6c63430008110033

Deployed Bytecode Sourcemap

16482:19906:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16857:66;;;;;;;;;;-1:-1:-1;16857:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;689:25:1;;;677:2;662:18;16857:66:0;;;;;;;;32829:110;;;;;;;;;;-1:-1:-1;32829:110:0;;;;;:::i;:::-;;:::i;33485:94::-;;;;;;;;;;-1:-1:-1;33566:5:0;;;;;;;;;;;;-1:-1:-1;;;33566:5:0;;;;33485:94;;;;;;;:::i;34484:193::-;;;;;;;;;;-1:-1:-1;34484:193:0;;;;;:::i;:::-;;:::i;:::-;;;2132:14:1;;2125:22;2107:41;;2095:2;2080:18;34484:193:0;1967:187:1;17351:36:0;;;;;;;;;;-1:-1:-1;17351:36:0;;;;;;;;;;;;;;2333:6:1;2321:19;;;2303:38;;2291:2;2276:18;17351:36:0;2159:188:1;16930:44:0;;;;;;;;;;-1:-1:-1;16930:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;36158:107;;;;;;;;;;-1:-1:-1;36158:107:0;;;;;:::i;:::-;;:::i;18091:30::-;;;;;;;;;;-1:-1:-1;18091:30:0;;;;;;;;;;;;;;3835:4:1;3823:17;;;3805:36;;3793:2;3778:18;18091:30:0;3663:184:1;33795:108:0;;;;;;;;;;-1:-1:-1;33877:18:0;;33795:108;;29898:107;;;;;;;;;;-1:-1:-1;29898:107:0;;;;;:::i;:::-;;:::i;16730:67::-;;;;;;;;;;;;;:::i;17250:34::-;;;;;;;;;;-1:-1:-1;17250:34:0;;;;;;;;;;;30127:107;;;;;;;;;;-1:-1:-1;30127:107:0;;;;;:::i;:::-;;:::i;35030:426::-;;;;;;;;;;-1:-1:-1;35030:426:0;;;;;:::i;:::-;;:::i;30892:102::-;;;;;;;;;;-1:-1:-1;30892:102:0;;;;;:::i;:::-;;:::i;1694:93::-;;;;;;;;;;-1:-1:-1;1694:93:0;;;;;:::i;:::-;;:::i;28938:412::-;;;;;;;;;;-1:-1:-1;29220:11:0;;28938:412;;;29220:11;;;;;;4959:25:1;;29246:13:0;;;;;5015:2:1;5000:18;;4993:34;29274:7:0;;;5043:18:1;;;5036:34;;;;29220:11:0;29296:8;;;;5101:2:1;5086:18;;5079:34;29319:12:0;;;;;5144:3:1;5129:19;;5122:35;4946:3;4931:19;28938:412:0;4700:463:1;32685:136:0;;;;;;;;;;-1:-1:-1;32685:136:0;;;;;:::i;:::-;;:::i;18313:34::-;;;;;;;;;;-1:-1:-1;18313:34:0;;;;-1:-1:-1;;;18313:34:0;;-1:-1:-1;;;;;18313:34:0;;;;;;-1:-1:-1;;;;;5332:32:1;;;5314:51;;5302:2;5287:18;18313:34:0;5168:203:1;1189:106:0;;;;;;;;;;-1:-1:-1;1189:106:0;;;;;:::i;:::-;;:::i;17299:37::-;;;;;;;;;;-1:-1:-1;17299:37:0;;;;;;;;;;;33693:94;;;;;;;;;;-1:-1:-1;16721:2:0;33693:94;;31657:144;;;;;;;;;;-1:-1:-1;31657:144:0;;;;;:::i;:::-;;:::i;16687:36::-;;;;;;;;;;;;16721:2;16687:36;;18145:31;;;;;;;;;;-1:-1:-1;18145:31:0;;;;;;;;;;;35464:278;;;;;;;;;;-1:-1:-1;35464:278:0;;;;;:::i;:::-;;:::i;31125:524::-;;;;;;;;;;-1:-1:-1;31125:524:0;;;;;:::i;:::-;;:::i;29396:104::-;;;;;;;;;;-1:-1:-1;29480:12:0;;29396:104;;32394:283;;;;;;;;;;-1:-1:-1;32394:283:0;;;;;:::i;:::-;;:::i;17968:25::-;;;;;;;;;;-1:-1:-1;17968:25:0;;;;;;;;30013:106;;;;;;;;;;-1:-1:-1;30013:106:0;;;;;:::i;:::-;;:::i;18278:26::-;;;;;;;;;;-1:-1:-1;18278:26:0;;;;-1:-1:-1;;;18278:26:0;;;;;;17863:45;;;;;;;;;;;;;;;;17915:44;;;;;;;;;;;;;;;;29602:96;;;;;;;;;;-1:-1:-1;29602:96:0;;;;;:::i;:::-;;:::i;18183:29::-;;;;;;;;;;-1:-1:-1;18183:29:0;;;;;;;;;;;31002:115;;;;;;;;;;-1:-1:-1;31002:115:0;;;;;:::i;:::-;;:::i;16806:44::-;;;;;;;;;;-1:-1:-1;16806:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;28774:156;;;;;;;;;;-1:-1:-1;28898:12:0;;28912:9;;28774:156;;;6365:25:1;;;6421:2;6406:18;;6399:34;;;;6338:18;28774:156:0;6191:248:1;33911:162:0;;;;;;;;;;-1:-1:-1;33911:162:0;;;;;:::i;:::-;-1:-1:-1;;;;;34047:18:0;34015:7;34047:18;;;:9;:18;;;;;;;33911:162;17405:42;;;;;;;;;;-1:-1:-1;17405:42:0;;;;-1:-1:-1;;;17405:42:0;;;;;;17808:48;;;;;;;;;;;;;;;;17081:40;;;;;;;;;;-1:-1:-1;17081:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17670:73;;;;;;;;;;;;17701:42;17670:73;;17454:28;;;;;;;;;;-1:-1:-1;17454:28:0;;;;-1:-1:-1;;;17454:28:0;;;;;;17535;;;;;;;;;;-1:-1:-1;17535:28:0;;;;;;;;33385:92;;;;;;;;;;-1:-1:-1;33464:5:0;;-1:-1:-1;;;;;33464:5:0;33385:92;;32123;;;;;;;;;;-1:-1:-1;32123:92:0;;;;;:::i;:::-;;:::i;18356:38::-;;;;;;;;;;-1:-1:-1;18356:38:0;;;;-1:-1:-1;;;;;18356:38:0;;;33587:98;;;;;;;;;;-1:-1:-1;33670:7:0;;;;;;;;;;;;-1:-1:-1;;;33670:7:0;;;;33587:98;;30776:108;;;;;;;;;;-1:-1:-1;30776:108:0;;;;;:::i;:::-;;:::i;32947:132::-;;;;;;;;;;-1:-1:-1;32947:132:0;;;;;:::i;:::-;;:::i;17752:49::-;;;;;;;;;;;;;;;;35750:365;;;;;;;;;;-1:-1:-1;35750:365:0;;;;;:::i;:::-;;:::i;33229:148::-;;;;;;;;;;;;;:::i;30503:265::-;;;;;;;;;;;;;:::i;34081:199::-;;;;;;;;;;-1:-1:-1;34081:199:0;;;;;:::i;:::-;;:::i;790:99::-;;;;;;;;;;;;;:::i;16641:39::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16641:39:0;;;;;36273:110;;;;;;;;;;-1:-1:-1;36273:110:0;;;;;:::i;:::-;;:::i;1081:100::-;;;;;;;;;;-1:-1:-1;1081:100:0;;;;;:::i;:::-;-1:-1:-1;;;;;1160:13:0;1136:4;1160:13;;;;;;;;;;;;;;1081:100;30242:122;;;;;;;;;;-1:-1:-1;30242:122:0;;;;;:::i;:::-;;:::i;31809:306::-;;;;;;;;;;-1:-1:-1;31809:306:0;;;;;:::i;:::-;;:::i;18250:21::-;;;;;;;;;;-1:-1:-1;18250:21:0;;;;-1:-1:-1;;;18250:21:0;;;;;;17572:91;;;;;;;;;;;;17621:42;17572:91;;18000:26;;;;;;;;;;-1:-1:-1;18000:26:0;;;;;;;;;;;16589:45;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16589:45:0;;;;;17489:39;;;;;;;;;;;;;;;;30372:123;;;;;;;;;;-1:-1:-1;30372:123:0;;;;;:::i;:::-;;:::i;18403:29::-;;;;;;;;;;;;;;;;33087:134;;;;;;;;;;-1:-1:-1;33087:134:0;;;;;:::i;:::-;;:::i;34288:188::-;;;;;;;;;;-1:-1:-1;34288:188:0;;;;;:::i;:::-;-1:-1:-1;;;;;34440:19:0;;;34408:7;34440:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;34288:188;29764:91;;;;;;;;;;-1:-1:-1;29764:91:0;;;;;:::i;:::-;;:::i;32223:163::-;;;;;;;;;;-1:-1:-1;32223:163:0;;;;;:::i;:::-;;:::i;32829:110::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;;;;;;;;;32905:17:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;32905:26:0;;::::1;::::0;;;::::1;::::0;;32829:110::o;34484:193::-;34588:4;34610:37;34619:10;34631:7;34640:6;34610:8;:37::i;:::-;-1:-1:-1;34665:4:0;34484:193;;;;;:::o;36158:107::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;36233:24:::1;36249:7;36233:15;:24::i;:::-;36158:107:::0;:::o;29898:::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29975:14:0;;;::::1;;::::0;;;:8:::1;:14;::::0;;;;:22;;-1:-1:-1;;29975:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29898:107::o;16730:67::-;16784:13;16721:2;16784;:13;:::i;:::-;16770:27;;:11;:27;:::i;:::-;16730:67;:::o;30127:107::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;30201:25:::1;:9;30218:7:::0;30201:16:::1;:25::i;:::-;;30127:107:::0;:::o;35030:426::-;35164:4;35181:36;35191:6;35199:9;35210:6;35181:9;:36::i;:::-;-1:-1:-1;;;;;35257:19:0;;35230:24;35257:19;;;:11;:19;;;;;;;;35277:10;35257:31;;;;;;;;35307:26;;;;35299:59;;;;-1:-1:-1;;;35299:59:0;;9156:2:1;35299:59:0;;;9138:21:1;9195:2;9175:18;;;9168:30;-1:-1:-1;;;9214:18:1;;;9207:50;9274:18;;35299:59:0;8954:344:1;35299:59:0;35371:55;35380:6;35388:10;35400:25;35419:6;35400:16;:25;:::i;:::-;35371:8;:55::i;:::-;-1:-1:-1;35444:4:0;;35030:426;-1:-1:-1;;;;35030:426:0:o;30892:102::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;30959:16:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;30959:27:0::1;-1:-1:-1::0;;30959:27:0;;::::1;::::0;;;::::1;::::0;;30892:102::o;1694:93::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;1762:5:::1;:17:::0;;-1:-1:-1;;;;;;1762:17:0::1;-1:-1:-1::0;;;;;1762:17:0;;;::::1;::::0;;;::::1;::::0;;1694:93::o;32685:136::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;32785:9:::1;:28:::0;;-1:-1:-1;;32785:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32685:136::o;1189:106::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1266:13:0;;;::::1;:7;:13:::0;;;::::1;::::0;;;;;;:21;;-1:-1:-1;;1266:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;1189:106::o;31657:144::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;31761:32:::1;31780:12;:4:::0;31787:5:::1;31780:12;:::i;:::-;31761:18;:32::i;35464:278::-:0;35609:10;35564:4;35656:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;35656:32:0;;;;;;;;;;35564:4;;35586:126;;35634:7;;35656:45;;35691:10;;35656:45;:::i;31125:524::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;31312:14:::1;31342:42;31370:14:::0;31342:12;:42:::1;:::i;:::-;31312:72;;31403:8;:15;;31415:3;31403:15;31395:73;;;::::0;-1:-1:-1;;;31395:73:0;;9921:2:1;31395: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;;31395:73:0::1;9719:409:1::0;31395:73:0::1;-1:-1:-1::0;31479:11:0::1;:26:::0;;::::1;31615::::0;;::::1;::::0;::::1;-1:-1:-1::0;;31586:18:0;;::::1;31479:26;31586:18;-1:-1:-1::0;;31516:30:0;;::::1;::::0;::::1;-1:-1:-1::0;;31479:26:0;;::::1;::::0;::::1;31516:30:::0;;;;-1:-1:-1;;31516:30:0;;;;;;;;;;::::1;31586:18:::0;;;;31559:16;;;::::1;31586:18:::0;;;;;;;::::1;31615:26:::0;;;::::1;::::0;;;::::1;::::0;;31125:524::o;32394:283::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;32528:30:::1;::::0;-1:-1:-1;;;32528:30:0;;32552:4:::1;32528:30;::::0;::::1;5314:51:1::0;32485:10:0;;32463:12:::1;::::0;-1:-1:-1;;;;;32528:15:0;::::1;::::0;::::1;::::0;5287:18:1;;32528:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32507:51;;32590:1;32577:10;:14;32569:51;;;::::0;-1:-1:-1;;;32569:51:0;;10524:2:1;32569:51:0::1;::::0;::::1;10506:21:1::0;10563:2;10543:18;;;10536:30;10602:26;10582:18;;;10575:54;10646:18;;32569:51:0::1;10322:348:1::0;32569:51:0::1;32631:38;::::0;-1:-1:-1;;;32631:38:0;;32646:10:::1;32631:38;::::0;::::1;10849:51:1::0;10916:18;;;10909:34;;;-1:-1:-1;;;;;32631:14:0;::::1;::::0;::::1;::::0;10822:18:1;;32631:38:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32452:225;;32394:283:::0;:::o;30013:106::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;30089:22:::1;:9;30103:7:::0;30089:13:::1;:22::i;29602:96::-:0;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;29667:12:::1;:23:::0;;-1:-1:-1;;29667:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29602:96::o;31002:115::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;31079:12:::1;:30:::0;31002:115::o;32123:92::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;32185:14:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;32185:22:0::1;-1:-1:-1::0;;32185:22:0;;::::1;::::0;;;::::1;::::0;;32123:92::o;30776:108::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;30851:16:::1;:25:::0;;-1:-1:-1;;30851:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30776:108::o;32947:132::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33045:19:0::1;;::::0;;;:8:::1;:19;::::0;;;;:26;;-1:-1:-1;;33045:26:0::1;33067:4;33045:26;::::0;;32947:132::o;35750:365::-;35916:10;35855:4;35904:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;35904:32:0;;;;;;;;;;35955:35;;;;35947:60;;;;-1:-1:-1;;;35947:60:0;;11406:2:1;35947:60:0;;;11388:21:1;11445:2;11425:18;;;11418:30;-1:-1:-1;;;11464:18:1;;;11457:42;11516:18;;35947:60:0;11204:336:1;35947:60:0;36020:65;36029:10;36041:7;36050:34;36069:15;36050:16;:34;:::i;36020:65::-;-1:-1:-1;36103:4:0;;35750:365;-1:-1:-1;;;35750:365:0:o;33229:148::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;33294:51:::1;::::0;33279:9:::1;::::0;33294:10:::1;::::0;33318:21:::1;::::0;33279:9;33294:51;33279:9;33294:51;33318:21;33294:10;:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33278:67;;;33364:4;33356:13;;;::::0;::::1;30503:265:::0;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;30577:14:::1;::::0;;30560::::1;30602:18:::0;;;;30685:32:::1;::::0;30577:14;;30648:10:::1;::::0;;;30577:14;;30560;30685:32;30560:14;30685:32;30577:14;30648:10;30685:32:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30669:48;;;30736:4;30728:32;;;::::0;-1:-1:-1;;;30728:32:0;;11957:2:1;30728: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;;30728:32:0::1;11755:339:1::0;30728:32:0::1;30549:219;;;30503:265::o:0;34081:199::-;34188:4;34210:40;34220:10;34232:9;34243:6;34210:9;:40::i;790:99::-;840:13;873:8;866:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;790:99;:::o;36273:110::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;36349:26:::1;36364:10;36349:14;:26::i;30242:122::-:0;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;30322:34:::1;:21;30348:7:::0;30322:25:::1;:34::i;31809:306::-:0;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;31964:13:::1;16721:2;31964;:13;:::i;:::-;31946:31;::::0;:15;:31:::1;:::i;:::-;31928:49:::0;-1:-1:-1;32018:13:0::1;16721:2;32018;:13;:::i;:::-;32003:28;::::0;:12;:28:::1;:::i;:::-;32042:12;:30:::0;;;;-1:-1:-1;32083:9:0::1;:24:::0;31809:306::o;30372:123::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;30450:37:::1;:21;30479:7:::0;30450:28:::1;:37::i;33087:134::-:0;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33187:18:0::1;33208:5;33187:18:::0;;;:8:::1;:18;::::0;;;;:26;;-1:-1:-1;;33187:26:0::1;::::0;;33087:134::o;29764:91::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;29829:12:::1;:18:::0;29764:91::o;32223:163::-;1350:10;1342:7;:19;;;;;;;;;;;;;;:42;;-1:-1:-1;1379:5:0;;-1:-1:-1;;;;;1379:5:0;1365:10;:19;1342:42;1334:64;;;;-1:-1:-1;;;1334:64:0;;;;;;;:::i;:::-;32335:19:::1;:43:::0;;-1:-1:-1;;;;;32335:43:0;;::::1;-1:-1:-1::0;;;32335:43:0::1;-1:-1:-1::0;;;;;;32335:43:0;;::::1;::::0;;;::::1;::::0;;32223:163::o;14747:173::-;14833:4;14862:50;14867:3;-1:-1:-1;;;;;14887:23:0;;14862:4;:50::i;:::-;14855:57;14747:173;-1:-1:-1;;;14747:173:0:o;34685:337::-;-1:-1:-1;;;;;34813:20:0;;34805:50;;;;-1:-1:-1;;;34805:50:0;;12686:2:1;34805:50:0;;;12668:21:1;12725:2;12705:18;;;12698:30;-1:-1:-1;;;12744:18:1;;;12737:47;12801:18;;34805:50:0;12484:341:1;34805:50:0;-1:-1:-1;;;;;34874:21:0;;34866:49;;;;-1:-1:-1;;;34866:49:0;;13032:2:1;34866:49:0;;;13014:21:1;13071:2;13051:18;;;13044:30;-1:-1:-1;;;13090:18:1;;;13083:45;13145:18;;34866:49:0;12830:339:1;34866:49:0;-1:-1:-1;;;;;34928:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;34981:33;;689:25:1;;;34981:33:0;;662:18:1;34981:33:0;;;;;;;;34685:337;;;:::o;510:136::-;583:16;591:7;583:16;;;;;;:::i;:::-;;;;;;;;615:23;630:7;615:23;;;;;;:::i;:::-;;;;;;;;510:136;:::o;14928:179::-;15017:4;15046:53;15054:3;-1:-1:-1;;;;;15074:23:0;;15046:7;:53::i;19707:2117::-;-1:-1:-1;;;;;19838:20:0;;19830:51;;;;-1:-1:-1;;;19830:51:0;;13376:2:1;19830:51:0;;;13358:21:1;13415:2;13395:18;;;13388:30;-1:-1:-1;;;13434:18:1;;;13427:48;13492:18;;19830:51:0;13174:342:1;19830:51:0;19924:9;;;;19920:155;;;-1:-1:-1;;;;;19977:16:0;;;;;;:8;:16;;;;;;;;19976:17;:41;;;;-1:-1:-1;;;;;;19998:19:0;;;;;;:8;:19;;;;;;;;19997:20;19976:41;19950:113;;;;-1:-1:-1;;;19950:113:0;;13723:2:1;19950:113:0;;;13705:21:1;13762:2;13742:18;;;13735:30;-1:-1:-1;;;13781:18:1;;;13774:40;13831:18;;19950:113:0;13521:334:1;19950:113:0;20163:15;20182:26;:9;20201:6;20182:18;:26::i;:::-;:72;;;-1:-1:-1;20225:29:0;:9;20244;20225:18;:29::i;:::-;20182:104;;;-1:-1:-1;;;;;;20271:15:0;;:7;:15;;;;;;;;;;;;;20182:104;:139;;;-1:-1:-1;;;;;;20303:18:0;;:7;:18;;;;;;;;;;;;;20182:139;20163:159;-1:-1:-1;20335:23:0;-1:-1:-1;;;;;20362:23:0;;20380:4;20362:23;;:66;;-1:-1:-1;;;;;;20402:26:0;;20423:4;20402:26;20362:66;20481:19;;20335:94;;-1:-1:-1;20442:24:0;;-1:-1:-1;;;;;20471:29:0;;;-1:-1:-1;;;20481:19:0;;;;20471:29;:72;;;;-1:-1:-1;;;;;;20517:26:0;;17621:42;20517:26;20471:72;20470:152;;;-1:-1:-1;20575:19:0;;-1:-1:-1;;;;;20562:32:0;;;-1:-1:-1;;;20575:19:0;;;;20562:32;:59;;;;-1:-1:-1;;;;;;20598:23:0;;17621:42;20598:23;20562:59;20442:181;;20652:18;:41;;;;20674:19;20652:41;:55;;;;20697:10;20652:55;20634:1183;;;20734:45;20753:6;20761:9;20772:6;20734:18;:45::i;:::-;20634:1183;;;20869:14;;-1:-1:-1;;;20869:14:0;;;;20864:523;;20959:5;;-1:-1:-1;;;;;20949:15:0;;;20959:5;;20949:15;;;;:37;;-1:-1:-1;20981:5:0;;-1:-1:-1;;;;;20968:18:0;;;20981:5;;20968:18;;20949:37;20945:427;;;21071:9;;-1:-1:-1;;;21071:9:0;;;;21067:286;;;21131:9;-1:-1:-1;;;;;21114:30:0;21123:6;-1:-1:-1;;;;;21114:30:0;;21142:1;21114:30;;;;689:25:1;;677:2;662:18;;543:177;21114:30:0;;;;;;;;21171:7;;;19707:2117;;;:::o;21067:286::-;21287:14;;-1:-1:-1;;;21287:14:0;;;;21279:50;;;;-1:-1:-1;;;21279:50:0;;14252:2:1;21279:50:0;;;14234:21:1;14291:2;14271:18;;;14264:30;14330:25;14310:18;;;14303:53;14373:18;;21279:50:0;14050:347:1;21279:50:0;21506:19;;21483:10;;-1:-1:-1;;;;;21496:29:0;;;-1:-1:-1;;;21506:19:0;;;;21496:29;;:73;;-1:-1:-1;;;;;;21546:23:0;;17621:42;21546:23;21496:73;21611:19;;21483:86;;-1:-1:-1;21584:11:0;;-1:-1:-1;;;;;21598:32:0;;;-1:-1:-1;;;21611:19:0;;;;21598:32;;:79;;-1:-1:-1;;;;;;21651:26:0;;17621:42;21651:26;21598:79;21584:93;;21746:57;21762:6;21770:9;21781:6;21789:5;21796:6;21746:15;:57::i;:::-;20797:1020;;20634:1183;19819:2005;;;19707:2117;;;:::o;25637:1912::-;18528:27;:34;;-1:-1:-1;;18528:34:0;18558:4;18528:34;;;25758:4:::1;18528:27:::0;25740:24;;;:9:::1;:24;::::0;;;;;25877:12:::1;::::0;25859:30;::::1;25855:69;;;25906:7;;;25855:69;26005:13;::::0;26051:12:::1;::::0;26005:13;;;::::1;;;::::0;26148:23;;::::1;26144:130;;;26192:12;::::0;::::1;;26188:75;;;-1:-1:-1::0;26239:8:0;26188:75:::1;26358:8;:13;;26370:1;26358:13:::0;26354:52:::1;;26388:7;;;;;26354:52;26541:13;::::0;26498:25:::1;::::0;26526:40:::1;::::0;::::1;::::0;26527:27:::1;::::0;26541:13;;::::1;;;26527:11:::0;:27:::1;:::i;:::-;26526:40;;;;:::i;:::-;26618:11;::::0;26498:68;;-1:-1:-1;26577:23:0::1;::::0;26603:38:::1;::::0;::::1;::::0;26604:25:::1;::::0;26618:11;;::::1;;;26604::::0;:25:::1;:::i;:::-;26603:38;;;;:::i;:::-;26577:64:::0;-1:-1:-1;26717:16:0::1;26736:21;26756:1;26736:17:::0;:21:::1;:::i;:::-;26717:40:::0;-1:-1:-1;26768:19:0::1;26790:28;26717:40:::0;26790:17;:28:::1;:::i;:::-;26768:50:::0;-1:-1:-1;26877:17:0::1;26897:42;26924:15:::0;26768:50;26897:42:::1;:::i;:::-;26877:62:::0;-1:-1:-1;27014:21:0::1;27046:27;26877:62:::0;27046:16:::1;:27::i;:::-;27178:14;27196:41;27220:17:::0;27196:21:::1;:41;:::i;:::-;27178:60:::0;-1:-1:-1;27249:14:0::1;27291:9:::0;27267:20:::1;27276:11:::0;27178:60;27267:20:::1;:::i;:::-;27266:34;;;;:::i;:::-;27249:51;;27337:31;27351:8;27361:6;27337:13;:31::i;:::-;27434:20;27458:41;27482:17:::0;27458:21:::1;:41;:::i;:::-;27434:66;;27529:12;27511:14;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;;;;;;;;18573:1:0::1;-1:-1:-1::0;18585:27:0;:35;;-1:-1:-1;;18585:35:0;;;25637:1912::o;897:99::-;967:8;:21;978:10;967:8;:21;:::i;12374:291::-;12437:4;13411:19;;;:12;;;:19;;;;;;12454:204;;-1:-1:-1;12497:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;12557:18;;12535:19;;;:12;;;:19;;;;;;:40;;;;12590:11;;12454:204;-1:-1:-1;12641:5:0;12634:12;;12673:601;12739:4;12777:19;;;:12;;;:19;;;;;;12813:15;;12809:458;;12845:21;12869:14;12882:1;12869:10;:14;:::i;:::-;12918:18;;12845:38;;-1:-1:-1;12898:17:0;;12918:22;;12939:1;;12918:22;:::i;:::-;12898:42;;12957:17;12977:3;:11;;12989:9;12977:22;;;;;;;;:::i;:::-;;;;;;;;;12957:42;;13045:9;13016:3;:11;;13028:13;13016:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;13069:23;;;:12;;;:23;;;;;;:36;;;13122:17;;13069:3;;13122:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;13163:3;:12;;:19;13176:5;13163:19;;;;;;;;;;;13156:26;;;13206:4;13199:11;;;;;;;;12809:458;13250:5;13243:12;;;;;15115:197;-1:-1:-1;;;;;15279:23:0;;15220:4;13411:19;;;:12;;;:19;;;;;;:24;;15249:55;13282:161;24480:425;-1:-1:-1;;;;;24645:17:0;;;;;;:9;:17;;;;;;:27;-1:-1:-1;24645:27:0;24637:64;;;;-1:-1:-1;;;24637:64:0;;17294:2:1;24637:64:0;;;17276:21:1;17333:2;17313:18;;;17306:30;-1:-1:-1;;;17352:18:1;;;17345:54;17416:18;;24637:64:0;17092:348:1;24637:64:0;24739:28;24752:6;24760;24739:12;:28::i;:::-;24778;24788:9;24799:6;24778:9;:28::i;:::-;24879:9;-1:-1:-1;;;;;24862:35:0;24871:6;-1:-1:-1;;;;;24862:35:0;;24890:6;24862:35;;;;689:25:1;;677:2;662:18;;543:177;21874:2598:0;-1:-1:-1;;;;;22157:20:0;;;22130:24;22157:20;;;:9;:20;;;;;;;22231:17;;;;;;;;:27;-1:-1:-1;22231:27:0;22223:64;;;;-1:-1:-1;;;22223:64:0;;17294:2:1;22223:64:0;;;17276:21:1;17333:2;17313:18;;;17306:30;-1:-1:-1;;;17352:18:1;;;17345:54;17416:18;;22223:64:0;17092:348:1;22223:64:0;22335:9;22400:6;22396:1307;;;22428:38;:21;22459:6;22428:30;:38::i;:::-;22423:297;;-1:-1:-1;;;;;22517:17:0;;;;;;:9;:17;;;;;;22538:15;-1:-1:-1;22517:36:0;;:56;;-1:-1:-1;22557:16:0;;-1:-1:-1;;;22557:16:0;;;;22517:56;22487:148;;;;-1:-1:-1;;;22487:148:0;;17647:2:1;22487:148:0;;;17629:21:1;17686:2;17666:18;;;17659:30;-1:-1:-1;;;17705:18:1;;;17698:48;17763:18;;22487:148:0;17445:342:1;22487:148:0;22692:12;;22674:30;;:15;:30;:::i;:::-;-1:-1:-1;;;;;22654:17:0;;;;;;:9;:17;;;;;:50;22423:297;22785:9;;22775:6;:19;;22767:47;;;;-1:-1:-1;;;22767:47:0;;17994:2:1;22767:47:0;;;17976:21:1;18033:2;18013:18;;;18006:30;-1:-1:-1;;;18052:18:1;;;18045:45;18107:18;;22767:47:0;17792:339:1;22767:47:0;-1:-1:-1;22835:8:0;;;;;;;22396:1307;;;22865:5;22861:842;;;22978:12;;22949:25;22968:6;22949:16;:25;:::i;:::-;:41;;22923:119;;;;-1:-1:-1;;;22923:119:0;;;;;;;:::i;:::-;23107:8;;23097:6;:18;;23089:47;;;;-1:-1:-1;;;23089:47:0;;;;;;;:::i;:::-;-1:-1:-1;23157:7:0;;;;22861:842;;;23306:12;;23277:25;23296:6;23277:16;:25;:::i;:::-;:41;;23197:173;;;;-1:-1:-1;;;23197:173:0;;;;;;;:::i;:::-;23457:38;:21;23488:6;23457:30;:38::i;:::-;23452:206;;-1:-1:-1;;;;;23544:17:0;;;;;;:9;:17;;;;;;23565:15;-1:-1:-1;23544:36:0;;:56;;-1:-1:-1;23584:16:0;;-1:-1:-1;;;23584:16:0;;;;23544:56;23514:144;;;;-1:-1:-1;;;23514:144:0;;18683:2:1;23514:144:0;;;18665:21:1;18722:2;18702:18;;;18695:30;-1:-1:-1;;;18741:18:1;;;18734:44;18795:18;;23514:144:0;18481:338:1;23514:144:0;-1:-1:-1;23679:12:0;;;;;;;22861:842;23807:19;;-1:-1:-1;;;;;23797:29:0;;;-1:-1:-1;;;23807:19:0;;;;23797:29;;;;23796:67;;-1:-1:-1;23846:16:0;;;;23845:17;23796:67;:114;;;;-1:-1:-1;23882:27:0;;;;23881:28;23796:114;23778:170;;;23922:26;23941:6;23922:18;:26::i;:::-;24109:11;;24002:21;;24026:106;;24054:6;;24075:3;;24093:27;;24109:11;;;;;;;24093:13;;;;:27;:::i;:::-;24026:13;:106::i;:::-;24002:130;-1:-1:-1;24187:19:0;24209:24;24002:130;24209:6;:24;:::i;:::-;24187:46;;24244:28;24257:6;24265;24244:12;:28::i;:::-;24301:4;24283:24;;;;:9;:24;;;;;:41;;24311:13;;24283:24;:41;;24311:13;;24283:41;:::i;:::-;;;;-1:-1:-1;24335:33:0;;-1:-1:-1;24345:9:0;24356:11;24335:9;:33::i;:::-;24441:9;-1:-1:-1;;;;;24424:40:0;24433:6;-1:-1:-1;;;;;24424:40:0;;24452:11;24424:40;;;;689:25:1;;677:2;662:18;;543:177;24424:40:0;;;;;;;;22035:2437;;;;21874:2598;;;;;:::o;27643:511::-;27790:14;;27758:56;;27775:4;;-1:-1:-1;;;;;27790:14:0;27807:6;27758:8;:56::i;:::-;27851:16;;;27865:1;27851:16;;;;;;;;27827:21;;27851:16;;;;;;;;;;-1:-1:-1;27851:16:0;27827:40;;27896:4;27878;27883:1;27878:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27878:23:0;;;:7;;;;;;;;;;:23;;;;27922:14;;:21;;;-1:-1:-1;;;27922:21:0;;;;:14;;;;;:19;;:21;;;;;27878:7;;27922:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27912:4;27917:1;27912:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27912:31:0;;;:7;;;;;;;;;:31;27956:14;;:190;;-1:-1:-1;;;27956:190:0;;:14;;;:65;;:190;;28036:6;;27956:14;;28073:4;;28100;;28120:15;;27956:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28258:418;28423:14;;28391:61;;28408:4;;-1:-1:-1;;;;;28423:14:0;28440:11;28391:8;:61::i;:::-;28465:14;;:203;;-1:-1:-1;;;28465:203:0;;28536:4;28465:203;;;20406:34:1;;;20456:18;;;20449:34;;;28465:14:0;20499:18:1;;;20492:34;;;20542:18;;;20535:34;20585:19;;;20578:44;28642:15:0;20638:19:1;;;20631:35;-1:-1:-1;;;;;28465:14:0;;;;:30;;28503:9;;20340:19:1;;28465:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28258:418;;:::o;25360:161::-;-1:-1:-1;;;;;25451:15:0;;25431:17;25451:15;;;:9;:15;;;;;;:24;;25469:6;;25451:24;:::i;:::-;-1:-1:-1;;;;;25486:15:0;;;;;;;:9;:15;;;;;:27;;;;-1:-1:-1;;25360:161:0:o;25194:158::-;-1:-1:-1;;;;;25282:15:0;;25262:17;25282:15;;;:9;:15;;;;;;:24;;25300:6;;25282:24;:::i;24992:194::-;25116:7;25173:5;25159:10;25144:25;;25153:3;25144:12;;:6;:12;;;;:::i;:::-;:25;;;;:::i;:::-;25143:35;;;;:::i;:::-;25136:42;24992:194;-1:-1:-1;;;;24992: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://894da8608dfe613b485f230e44e7c1ba9057a454ddacea98a57fe370c38ad0f4
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.