ETH Price: $2,525.23 (+0.26%)
Gas: 0.81 Gwei

Token

Oscar The Grouch (OSCAR)
 

Overview

Max Total Supply

962,117,156,501.805021189197999144 OSCAR

Holders

95 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,037,603,422.219756311614537304 OSCAR

Value
$0.00
0x8bef9cd274fd542a70a0b62890782d22d9abe84e
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

OSCAR Charity Token donates to Water Wells For Africa in help of funding fresh water wells for rural villages of Africa.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
OSCAR

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-16
*/

// SPDX-License-Identifier: No-License

pragma solidity ^0.8.4;

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

interface IUniswapERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
}

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

    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(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    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,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getamountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getamountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getamountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getamountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapRouter02 is IUniswapRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
abstract contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
      constructor () {
        address msgSender = msg.sender;
        _owner = 0x6Ace0a30e039c181eDd30301b399E2b86b052f5C;
        emit OwnershipTransferred(address(0), msgSender);
    }
   
    function owner() public view returns (address) {
        return _owner;
    }
 
    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }
 
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
library Address {
    
    function isContract(address account) internal view returns (bool) {
            uint256 size;
           assembly { size := extcodesize(account) }
        return size > 0;
    }
    
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

           (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }
    
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

           (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

           (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

           (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
                   if (returndata.length > 0) {
                                 assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library EnumerableSet {
    
    struct Set {
           bytes32[] _values;

              mapping (bytes32 => uint256) _indexes;
    }

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

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

                     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, "EnumerableSet: 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 AddressSet {
        Set _inner;
    }
    
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }
    
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }
    
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }
    
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }
    
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    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 OSCAR is IERC20, Ownable
{
    using Address for address;
    using EnumerableSet for EnumerableSet.AddressSet;

    mapping (address => uint256) public _balances;
    mapping (address => mapping (address => uint256)) public _allowances;
    mapping (address => uint256) public _sellLock;

    EnumerableSet.AddressSet private _excluded;
    EnumerableSet.AddressSet private _excludedFromSellLock;
    
    string public constant _name = 'Oscar The Grouch';
    string public constant _symbol = 'OSCAR';
    uint8 public constant _decimals = 18;
    uint256 public constant InitialSupply= 1000 * 10**9 * 10**_decimals;

    uint256 swapLimit = 1000 * 10**6 * 10**_decimals; 
    bool isSwapPegged = true;
    
    uint16 public  BuyLimitDivider=100; // 1%
    
    uint8 public   BalanceLimitDivider=50; // 2%
    
    uint16 public  SellLimitDivider=100; // 1%
    
    uint16 public  MaxSellLockTime= 10 seconds;
    
    mapping (address => bool) isTeam;
        
    address public constant UniswapRouter=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address public constant Dead = 0x000000000000000000000000000000000000dEaD;
    address public devAddress;
    
    uint256 public _circulatingSupply =InitialSupply;
    uint256 public  balanceLimit = _circulatingSupply;
    uint256 public  sellLimit = _circulatingSupply;
    uint256 public  buyLimit = _circulatingSupply;

    uint8 public _buyTax;
    uint8 public _sellTax;
    uint8 public _transferTax;
    uint8 public _liquidityTax;
    uint8 public _marketingTax;
    uint8 public _burnTax;
    uint8 public _devTax;

    bool isTokenSwapManual = false;
    bool public antisniper = true;

    address public _UniswapPairAddress;
    IUniswapRouter02 public  _UniswapRouter;
    
    modifier onlyTeam() {
        require(_isTeam(msg.sender), "Caller not in Team");
        _;
    }

    modifier onlyDev() {
        require(devAddress==msg.sender, "Caller not dev");
        _;
    }  
    
    function _isTeam(address addr) private view returns (bool){
        return addr==owner()||isTeam[addr];
    }
    
    constructor () {
        uint256 deployerBalance=_circulatingSupply*9/10;
        devAddress = 0x6D07b49D611C5C94C6dE4714F60d6a11948EED07;
        _balances[msg.sender] = deployerBalance;
        emit Transfer(address(0), msg.sender, deployerBalance);
        uint256 injectBalance=_circulatingSupply-deployerBalance;
        _balances[address(this)]=injectBalance;
        emit Transfer(address(0), address(this),injectBalance);
        _UniswapRouter = IUniswapRouter02(UniswapRouter);

        _UniswapPairAddress = IUniswapFactory(_UniswapRouter.factory()).createPair(address(this), _UniswapRouter.WETH());

        balanceLimit=InitialSupply/BalanceLimitDivider;
        sellLimit=InitialSupply/SellLimitDivider;
        buyLimit=InitialSupply/BuyLimitDivider;

        isTeam[0x6Ace0a30e039c181eDd30301b399E2b86b052f5C] = true;

        sellLockTime=2 seconds;

        _buyTax=14;
        _sellTax=14;
        _transferTax=14;
        _liquidityTax=40;
        _marketingTax=40;
        _burnTax=10;
        _devTax=10;
        _excluded.add(msg.sender);
        _excluded.add(0x6Ace0a30e039c181eDd30301b399E2b86b052f5C);
        _excludedFromSellLock.add(0x6Ace0a30e039c181eDd30301b399E2b86b052f5C);
        _excludedFromSellLock.add(UniswapRouter);
        _excludedFromSellLock.add(_UniswapPairAddress);
        _excludedFromSellLock.add(address(this));
    } 
    
    function _transfer(address sender, address recipient, uint256 amount) private{
        require(sender != address(0), "Transfer from zero");
        require(recipient != address(0), "Transfer to zero");

        bool isExcluded = (_excluded.contains(sender) || _excluded.contains(recipient) || isTeam[sender] || isTeam[recipient]);

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

        bool isLiquidityTransfer = ((sender == _UniswapPairAddress && recipient == UniswapRouter)
        || (recipient == _UniswapPairAddress && sender == UniswapRouter));

        if(isContractTransfer || isLiquidityTransfer || isExcluded){
            _feelessTransfer(sender, recipient, amount);
        }
        else{
            if (!tradingEnabled) {
                if (sender != owner() && recipient != owner()) {
                    if (antisniper) {
                        emit Transfer(sender,recipient,0);
                        return;
                    }
                    else {
                        require(tradingEnabled,"trading not yet enabled");
                    }
                }
            }
                
            bool isBuy=sender==_UniswapPairAddress|| sender == UniswapRouter;
            bool isSell=recipient==_UniswapPairAddress|| recipient == UniswapRouter;
            _taxedTransfer(sender,recipient,amount,isBuy,isSell);
        }
    }
        
    function _taxedTransfer(address sender, address recipient, uint256 amount,bool isBuy,bool isSell) private{
        uint256 recipientBalance = _balances[recipient];
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");

        swapLimit = sellLimit/2;

        uint8 tax;
        if(isSell){
            if(!_excludedFromSellLock.contains(sender)){
                           require(_sellLock[sender]<=block.timestamp||sellLockDisabled,"Seller in sellLock");
                           _sellLock[sender]=block.timestamp+sellLockTime;
            }
            
            require(amount<=sellLimit,"Dump protection");
            tax=_sellTax;

        } else if(isBuy){
                   require(recipientBalance+amount<=balanceLimit,"whale protection");
            require(amount<=buyLimit, "whale protection");
            tax=_buyTax;

        } else {
                   require(recipientBalance+amount<=balanceLimit,"whale protection");
                          if(!_excludedFromSellLock.contains(sender))
                require(_sellLock[sender]<=block.timestamp||sellLockDisabled,"Sender in Lock");
            tax=_transferTax;
        }

                if((sender!=_UniswapPairAddress)&&(!manualConversion)&&(!_isSwappingContractModifier))
            _swapContractToken(amount);
           uint256 contractToken=_calculateFee(amount, tax, _marketingTax+_liquidityTax+_burnTax+_devTax);
           uint256 taxedAmount=amount-(contractToken);

           _removeToken(sender,amount);

           _balances[address(this)] += contractToken;

           _addToken(recipient, taxedAmount);

        emit Transfer(sender,recipient,taxedAmount);
    }
    
    function _feelessTransfer(address sender, address recipient, uint256 amount) private{
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");
           _removeToken(sender,amount);
           _addToken(recipient, amount);

        emit Transfer(sender,recipient,amount);
    }
    
    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;
    }

    bool private _isTokenSwaping;
    
    uint256 public totalTokenSwapGenerated;
    
    uint256 public totalPayouts;
    
    uint8 public marketingShare=70;
    uint8 public burnShare=15;
    uint8 public devShare=15;
    
    uint256 public marketingBalance;
    uint256 public burnBalance;
    uint256 public devBalance;
    
    function _distributeFeesETH(uint256 ETHamount) private {
        uint256 marketingSplit = (ETHamount * marketingShare)/100;
        uint256 devSplit = (ETHamount * devShare)/100;

        marketingBalance+=marketingSplit;
        devBalance+=devSplit;
    }

    uint256 public totalLPETH;
    
    bool private _isSwappingContractModifier;
    modifier lockTheSwap {
        _isSwappingContractModifier = true;
        _;
        _isSwappingContractModifier = false;
    }
    
    function _swapContractToken(uint256 totalMax) private lockTheSwap{
        uint256 contractBalance=_balances[address(this)];
        uint16 totalTax=_liquidityTax+_marketingTax;
        uint256 tokenToSwap=swapLimit;
        if(tokenToSwap > totalMax) {
            if(isSwapPegged) {
                tokenToSwap = totalMax;
            }
        }
           if(contractBalance<tokenToSwap||totalTax==0){
            return;
        }
        uint256 tokenForLiquidity=(tokenToSwap*_liquidityTax)/totalTax;
        uint256 tokenForMarketing= (tokenToSwap*_marketingTax)/totalTax;
        uint256 tokenFordev= (tokenToSwap*_devTax)/totalTax;
        uint256 tokenForburn= (tokenToSwap*_burnTax)/totalTax;
        burnBalance+=tokenForburn;
        destroy(tokenForburn);

        uint256 liqToken=tokenForLiquidity/2;
        uint256 liqETHToken=tokenForLiquidity-liqToken;

        uint256 swapToken=liqETHToken+tokenForMarketing+tokenFordev;
        uint256 initialETHBalance = address(this).balance;
        _swapTokenForETH(swapToken);
        uint256 newETH=(address(this).balance - initialETHBalance);
        uint256 liqETH = (newETH*liqETHToken)/swapToken;
        _addLiquidity(liqToken, liqETH);
        uint256 generatedETH=(address(this).balance - initialETHBalance);
        _distributeFeesETH(generatedETH);
    }
    
    function _swapTokenForETH(uint256 amount) private {
        _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
        );
    }
    
    function _addLiquidity(uint256 tokenamount, uint256 ETHamount) private {
        totalLPETH+=ETHamount;
        _approve(address(this), address(_UniswapRouter), tokenamount);
        _UniswapRouter.addLiquidityETH{value: ETHamount}(
            address(this),
            tokenamount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }

    /// @notice Utilities

    function destroy(uint256 amount) private {
        require(_balances[address(this)] >= amount);
        _balances[address(this)] -= amount;
        _circulatingSupply -= amount;
        emit Transfer(address(this), Dead, amount);
    }    

    function Control_getLimits() public view returns(uint256 balance, uint256 sell){
        return(balanceLimit/10**_decimals, sellLimit/10**_decimals);
    }

    function Control_getTaxes() public view returns(uint256 devTax, uint256 burnTax,uint256 liquidityTax,uint256 marketingTax, uint256 buyTax, uint256 sellTax, uint256 transferTax){
        return (_devTax, _burnTax,_liquidityTax,_marketingTax,_buyTax,_sellTax,_transferTax);
    }
    
    function Control_getAddressSellLockTimeInSeconds(address AddressToCheck) public view returns (uint256){
        uint256 lockTime=_sellLock[AddressToCheck];
        if(lockTime<=block.timestamp)
        {
            return 0;
        }
        return lockTime-block.timestamp;
    }
 
    function Control_getSellLockTimeInSeconds() public view returns(uint256){
        return sellLockTime;
    }

    bool public sellLockDisabled;
    uint256 public sellLockTime;
    bool public manualConversion;

    function Control_SetPeggedSwap(bool isPegged) public onlyTeam {
        isSwapPegged = isPegged;
    }

    function Control_SetMaxSwap(uint256 max) public onlyTeam {
        swapLimit = max;
    }

    /// @notice ACL Functions

    function Access_SetTeam(address addy, bool booly) public onlyTeam {
        isTeam[addy] = booly;
    }

    function Access_ExcludeAccountFromFees(address account) public onlyTeam {
        _excluded.add(account);
    }
    function Access_IncludeAccountToFees(address account) public onlyTeam {
        _excluded.remove(account);
    }
    
    function Access_ExcludeAccountFromSellLock(address account) public onlyTeam {
        _excludedFromSellLock.add(account);
    }

    function Access_IncludeAccountToSellLock(address account) public onlyTeam {
        _excludedFromSellLock.remove(account);
    }

    function Team_WithdrawMarketingETH() public onlyTeam{
        uint256 amount=marketingBalance;
        marketingBalance=0;
        address sender = 0xC9B52452dA3cDe4919F79cA524307121EEd8b06d;
        (bool sent,) =sender.call{value: (amount)}("");
        require(sent,"withdraw failed");
    }

    function Team_WithdrawdevETH() public onlyDev{
        uint256 amount=devBalance;
        devBalance=0;
        address sender = msg.sender;
        (bool sent,) =sender.call{value: (amount)}("");
        require(sent,"withdraw failed");
    }
    
    function Control_SwitchManualETHConversion(bool manual) public onlyTeam{
        manualConversion=manual;
    }
    
    function Control_DisableSellLock(bool disabled) public onlyTeam{
        sellLockDisabled=disabled;
    }
    
    function UTILIY_SetSellLockTime(uint256 sellLockSeconds)public onlyTeam{
        sellLockTime=sellLockSeconds;
    }
    
    function Control_SetTaxes(uint8 devTaxes, uint8 burnTaxes, uint8 liquidityTaxes, uint8 marketingTaxes,uint8 buyTax, uint8 sellTax, uint8 transferTax) public onlyTeam{
        require(buyTax <= 15, "Taxes are too high");
        require(sellTax <= 15, "Taxes are too high");
        require(transferTax <= 15, "Taxes are too high");
        uint8 totalTax=devTaxes + burnTaxes +liquidityTaxes+marketingTaxes;
        require(totalTax==100, "burn+liq+marketing needs to equal 100%");
        _devTax = devTaxes;
        _burnTax = burnTaxes;
        _liquidityTax=liquidityTaxes;
        _marketingTax=marketingTaxes;

        _buyTax=buyTax;
        _sellTax=sellTax;
        _transferTax=transferTax;
    }
    
    function Control_ChangeMarketingShare(uint8 newShare) public onlyTeam{
        marketingShare=newShare;
    }
    
    function Control_ChangeburnShare(uint8 newShare) public onlyTeam{
        burnShare=newShare;
    }

    function Control_ChangedevShare(uint8 newShare) public onlyTeam{
        devShare=newShare;
    }

    function Control_ManualGenerateTokenSwapBalance(uint256 _qty) public onlyTeam{
        _swapContractToken(_qty * 10**9);
    }
    
    function Control_UpdateLimits(uint256 newBuyLimit ,uint256 newBalanceLimit, uint256 newSellLimit) public onlyTeam{
        newBuyLimit = newBuyLimit *10**_decimals;
        newBalanceLimit=newBalanceLimit*10**_decimals;
        newSellLimit=newSellLimit*10**_decimals;
        require(newSellLimit >= InitialSupply/200, "Blocked by antirug functions");
        require(newBalanceLimit >= InitialSupply/200, "Blocked by antirug functions");
        require(newBuyLimit >= InitialSupply/200, "Blocked by antirug functions");
        buyLimit = newBuyLimit;
        balanceLimit = newBalanceLimit;
        sellLimit = newSellLimit;
    }

    bool public tradingEnabled;
    address private _liquidityTokenAddress;
    
    function Settings_EnableTrading() public onlyTeam{
        tradingEnabled = true;
    }
    
    function Settings_LiquidityTokenAddress(address liquidityTokenAddress) public onlyTeam{
        _liquidityTokenAddress=liquidityTokenAddress;
    }
    
    function Control_setContractTokenSwapManual(bool manual) public onlyTeam {
        isTokenSwapManual = manual;
    }

    receive() external payable {}
    fallback() external payable {}
    
    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;
    }
}

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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"Access_ExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"Access_ExcludeAccountFromSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"Access_IncludeAccountToFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"Access_IncludeAccountToSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"Access_SetTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BalanceLimitDivider","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BuyLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"newShare","type":"uint8"}],"name":"Control_ChangeMarketingShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newShare","type":"uint8"}],"name":"Control_ChangeburnShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newShare","type":"uint8"}],"name":"Control_ChangedevShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"disabled","type":"bool"}],"name":"Control_DisableSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"Control_ManualGenerateTokenSwapBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"Control_SetMaxSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isPegged","type":"bool"}],"name":"Control_SetPeggedSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"devTaxes","type":"uint8"},{"internalType":"uint8","name":"burnTaxes","type":"uint8"},{"internalType":"uint8","name":"liquidityTaxes","type":"uint8"},{"internalType":"uint8","name":"marketingTaxes","type":"uint8"},{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"Control_SetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"Control_SwitchManualETHConversion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyLimit","type":"uint256"},{"internalType":"uint256","name":"newBalanceLimit","type":"uint256"},{"internalType":"uint256","name":"newSellLimit","type":"uint256"}],"name":"Control_UpdateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"AddressToCheck","type":"address"}],"name":"Control_getAddressSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Control_getLimits","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Control_getSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Control_getTaxes","outputs":[{"internalType":"uint256","name":"devTax","type":"uint256"},{"internalType":"uint256","name":"burnTax","type":"uint256"},{"internalType":"uint256","name":"liquidityTax","type":"uint256"},{"internalType":"uint256","name":"marketingTax","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":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"Control_setContractTokenSwapManual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Dead","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxSellLockTime","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Settings_EnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityTokenAddress","type":"address"}],"name":"Settings_LiquidityTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Team_WithdrawMarketingETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Team_WithdrawdevETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellLockSeconds","type":"uint256"}],"name":"UTILIY_SetSellLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UniswapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"_burnTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devTax","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":"_marketingTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_sellLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"antisniper","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":[],"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":"burnBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnShare","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLimit","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":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devShare","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualConversion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingShare","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalLPETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokenSwapGenerated","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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126012600a62000730565b6200002290633b9aca0062000741565b600855600980546001600160401b031916660a0064320064011790556200004c6012600a62000730565b6200005d9064e8d4a5100062000741565b600c819055600d819055600e819055600f556010805461ffff60381b19166801000000000000000017905560148054620f0f4662ffffff19909116179055348015620000a857600080fd5b50600080546001600160a01b031916736ace0a30e039c181edd30301b399e2b86b052f5c178155604051339182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000600a600c54600962000111919062000741565b6200011d919062000763565b600b80546001600160a01b031916736d07b49d611c5c94c6de4714f60d6a11948eed07179055336000818152600160205260408082208490555192935090916000805160206200394c833981519152906200017b9085815260200190565b60405180910390a3600081600c5462000195919062000786565b306000818152600160205260408082208490555192935090916000805160206200394c83398151915290620001cd9085815260200190565b60405180910390a3601180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200023a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002609190620007a0565b6001600160a01b031663c9c6539630601160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e99190620007a0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000337573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035d9190620007a0565b601080546001600160a01b0392909216690100000000000000000002600160481b600160e81b031990921691909117905560095460ff630100000090910416620003aa6012600a62000730565b620003bb9064e8d4a5100062000741565b620003c7919062000763565b600d55600954640100000000900461ffff16620003e76012600a62000730565b620003f89064e8d4a5100062000741565b62000404919062000763565b600e55600954610100900461ffff16620004216012600a62000730565b620004329064e8d4a5100062000741565b6200043e919062000763565b600f55736ace0a30e039c181edd30301b399e2b86b052f5c600052600a60209081527fdcb0998b7e99930217c236e3ddf9db2f8e3bfad555a2b7434073ba152ebbdd63805460ff191660011790556002601a5560108054660a0a28280e0e0e66ffffffffffffff19909116179055620004c590600490339062001b0d620005ab821b17901c565b50620004f5736ace0a30e039c181edd30301b399e2b86b052f5c6004620005ab60201b62001b0d1790919060201c565b5062000525736ace0a30e039c181edd30301b399e2b86b052f5c6006620005ab60201b62001b0d1790919060201c565b5062000555737a250d5630b4cf539739df2c5dacb4c659f2488d6006620005ab60201b62001b0d1790919060201c565b5062000586601060099054906101000a90046001600160a01b03166006620005ab60201b62001b0d1790919060201c565b50620005a2306006620005ab60201b62001b0d1790919060201c565b505050620007d2565b6000620005c2836001600160a01b038416620005cb565b90505b92915050565b60008181526001830160205260408120546200061457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005c5565b506000620005c5565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006745781600019048211156200065857620006586200061d565b808516156200066657918102915b93841c939080029062000638565b509250929050565b6000826200068d57506001620005c5565b816200069c57506000620005c5565b8160018114620006b55760028114620006c057620006e0565b6001915050620005c5565b60ff841115620006d457620006d46200061d565b50506001821b620005c5565b5060208310610133831016604e8410600b841016171562000705575081810a620005c5565b62000711838362000633565b80600019048211156200072857620007286200061d565b029392505050565b6000620005c260ff8416836200067c565b60008160001904831182151516156200075e576200075e6200061d565b500290565b6000826200078157634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156200079b576200079b6200061d565b500390565b600060208284031215620007b357600080fd5b81516001600160a01b0381168114620007cb57600080fd5b9392505050565b61316a80620007e26000396000f3fe6080604052600436106104525760003560e01c8063715018a61161023d578063b35513f711610138578063d7edb930116100bb578063f1c43f5f11610082578063f1c43f5f14610dfd578063f2fde38b14610e12578063f8766f2014610e32578063f88b0e4614610e52578063faf11fe914610e68578063fb27298714610ede57005b8063d7edb93014610d42578063d924499714610d62578063dd62ed3e14610d82578063e5a1ffe114610dc8578063e798c01214610de857005b8063c7639d80116100ff578063c7639d8014610c7f578063ca9ec19914610ca7578063cd9a1b6314610cc6578063d255fd7414610cdc578063d28d885214610d0657005b8063b35513f714610be8578063b411e99614610c09578063b51ec13e14610c29578063bc68fad914610c49578063c59718ca14610c5f57005b806395d89b41116101c0578063a9059cbb11610187578063a9059cbb14610b37578063a9aab6b914610b57578063aed04fae14610b77578063b09f126614610b97578063b2e8a7d214610bc857005b806395d89b4114610a9357806398b1f16414610ac15780639d65536914610ae1578063a253c06e14610b01578063a457c2d714610b1757005b8063887c60fb11610204578063887c60fb14610a15578063893d20e814610a345780638a98245814610a525780638da5cb5b14610a34578063954ea66514610a7357005b8063715018a61461099a578063762bb282146109af57806376a767ae146109c557806382c4767b146109e557806386d0ada8146109fb57005b8063382e329a1161034d5780634cc40028116102d05780635c0494bb116102975780635c0494bb146108d75780636789f2dc146108f75780636a911f4f146109175780636ebcf6071461093757806370a082311461096457005b80634cc40028146108545780634f91e48c1461087557806354d6b96e1461088b578063589210d9146108ab57806358e55365146108c157005b80634089b170116103145780634089b170146107cf57806342a11095146107e557806348e907b7146107ff5780634953554d146108155780634ada218b1461083557005b8063382e329a1461074357806339509351146107645780633ad10ef6146107845780633b343ac0146107a45780633cc39b7a146107b957005b806318160ddd116103d55780632d8828631161039c5780632d882863146106b6578063311a8697146106d7578063313ce567146106f857806332424aa31461070c5780633478154b1461072157005b806318160ddd1461060d5780631eb25d13146106225780631f8b845e1461063757806323b872dd146106575780632a24e0641461067757005b8063095ea7b311610419578063095ea7b3146105535780630ce0636c146105835780630fd99e16146105a3578063156b2c5d146105d857806317391e49146105ed57005b8063024c2ddd1461045b57806305bf0a54146104a657806306fdde03146104d757806307a25f3c1461051957806309218ee71461053957005b3661045957005b005b34801561046757600080fd5b50610493610476366004612b61565b600260209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b3480156104b257600080fd5b506014546104c590610100900460ff1681565b60405160ff909116815260200161049d565b3480156104e357600080fd5b5060408051808201909152601081526f09ee6c6c2e440a8d0ca408ee4deeac6d60831b60208201525b60405161049d9190612b9a565b34801561052557600080fd5b50610459610534366004612bef565b610f0b565b34801561054557600080fd5b506014546104c59060ff1681565b34801561055f57600080fd5b5061057361056e366004612c0c565b610f63565b604051901515815260200161049d565b34801561058f57600080fd5b5061045961059e366004612c4d565b610f7a565b3480156105af57600080fd5b506009546105c590600160201b900461ffff1681565b60405161ffff909116815260200161049d565b3480156105e457600080fd5b50610459610fb2565b3480156105f957600080fd5b506010546104c59062010000900460ff1681565b34801561061957600080fd5b50600c54610493565b34801561062e57600080fd5b5061049361109d565b34801561064357600080fd5b506009546105c590610100900461ffff1681565b34801561066357600080fd5b50610573610672366004612c68565b6110bb565b34801561068357600080fd5b5060105461069e90600160481b90046001600160a01b031681565b6040516001600160a01b03909116815260200161049d565b3480156106c257600080fd5b506010546104c590600160201b900460ff1681565b3480156106e357600080fd5b506009546104c5906301000000900460ff1681565b34801561070457600080fd5b5060126104c5565b34801561071857600080fd5b506104c5601281565b34801561072d57600080fd5b506009546105c590600160301b900461ffff1681565b34801561074f57600080fd5b506010546104c5906301000000900460ff1681565b34801561077057600080fd5b5061057361077f366004612c0c565b611152565b34801561079057600080fd5b50600b5461069e906001600160a01b031681565b3480156107b057600080fd5b50610459611189565b3480156107c557600080fd5b5061049360185481565b3480156107db57600080fd5b5061049360135481565b3480156107f157600080fd5b506010546104c59060ff1681565b34801561080b57600080fd5b5061049360125481565b34801561082157600080fd5b50610459610830366004612c4d565b6111dc565b34801561084157600080fd5b50601b5461057390610100900460ff1681565b34801561086057600080fd5b506010546104c590600160281b900460ff1681565b34801561088157600080fd5b50610493600e5481565b34801561089757600080fd5b506104596108a6366004612bef565b611227565b3480156108b757600080fd5b50610493600f5481565b3480156108cd57600080fd5b5061049360155481565b3480156108e357600080fd5b506104936108f2366004612bef565b61125b565b34801561090357600080fd5b50610459610912366004612ca9565b611295565b34801561092357600080fd5b50610459610932366004612ce6565b6113e2565b34801561094357600080fd5b50610493610952366004612bef565b60016020526000908152604090205481565b34801561097057600080fd5b5061049361097f366004612bef565b6001600160a01b031660009081526001602052604090205490565b3480156109a657600080fd5b5061045961141d565b3480156109bb57600080fd5b50610493600d5481565b3480156109d157600080fd5b506104596109e0366004612d01565b6114d0565b3480156109f157600080fd5b5061069e61dead81565b348015610a0757600080fd5b50601b546105739060ff1681565b348015610a2157600080fd5b5060195461057390610100900460ff1681565b348015610a4057600080fd5b506000546001600160a01b031661069e565b348015610a5e57600080fd5b5060105461057390600160401b900460ff1681565b348015610a7f57600080fd5b5060115461069e906001600160a01b031681565b348015610a9f57600080fd5b5060408051808201909152600581526427a9a1a0a960d91b602082015261050c565b348015610acd57600080fd5b50610459610adc366004612bef565b61167b565b348015610aed57600080fd5b50610459610afc366004612ce6565b6116ab565b348015610b0d57600080fd5b50610493600c5481565b348015610b2357600080fd5b50610573610b32366004612c0c565b6116ec565b348015610b4357600080fd5b50610573610b52366004612c0c565b611768565b348015610b6357600080fd5b50610459610b72366004612d87565b611775565b348015610b8357600080fd5b506014546104c59062010000900460ff1681565b348015610ba357600080fd5b5061050c6040518060400160405280600581526020016427a9a1a0a960d91b81525081565b348015610bd457600080fd5b50610459610be3366004612c4d565b61179f565b348015610bf457600080fd5b506010546104c590600160301b900460ff1681565b348015610c1557600080fd5b50610459610c24366004612c4d565b6117de565b348015610c3557600080fd5b50610459610c44366004612d87565b611816565b348015610c5557600080fd5b5061049360165481565b348015610c6b57600080fd5b50610459610c7a366004612bef565b611840565b348015610c8b57600080fd5b5061069e737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610cb357600080fd5b506010546104c590610100900460ff1681565b348015610cd257600080fd5b5061049360175481565b348015610ce857600080fd5b50610cf1611870565b6040805192835260208301919091520161049d565b348015610d1257600080fd5b5061050c6040518060400160405280601081526020016f09ee6c6c2e440a8d0ca408ee4deeac6d60831b81525081565b348015610d4e57600080fd5b50610459610d5d366004612d87565b6118ad565b348015610d6e57600080fd5b50610459610d7d366004612bef565b6118eb565b348015610d8e57600080fd5b50610493610d9d366004612b61565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610dd457600080fd5b50610459610de3366004612ce6565b61191b565b348015610df457600080fd5b5061045961195e565b348015610e0957600080fd5b50601a54610493565b348015610e1e57600080fd5b50610459610e2d366004612bef565b611994565b348015610e3e57600080fd5b50610459610e4d366004612da0565b611abd565b348015610e5e57600080fd5b50610493601a5481565b348015610e7457600080fd5b506010546040805160ff600160301b840481168252600160281b84048116602083015263010000008404811692820192909252600160201b83048216606082015281831660808201526101008304821660a0820152620100009092041660c082015260e00161049d565b348015610eea57600080fd5b50610493610ef9366004612bef565b60036020526000908152604090205481565b610f1433611b22565b610f395760405162461bcd60e51b8152600401610f3090612dd5565b60405180910390fd5b601b80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000610f70338484611b59565b5060015b92915050565b610f8333611b22565b610f9f5760405162461bcd60e51b8152600401610f3090612dd5565b6009805460ff1916911515919091179055565b600b546001600160a01b03163314610ffd5760405162461bcd60e51b815260206004820152600e60248201526d21b0b63632b9103737ba103232bb60911b6044820152606401610f30565b6017805460009182905560405190913391829084905b60006040518083038185875af1925050503d8060008114611050576040519150601f19603f3d011682016040523d82523d6000602084013e611055565b606091505b50509050806110985760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610f30565b505050565b6110a96012600a612efb565b6110b89064e8d4a51000612f0a565b81565b60006110c8848484611c4c565b6001600160a01b0384166000908152600260209081526040808320338452909152902054828110156111335760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610f30565b61114785336111428685612f29565b611b59565b506001949350505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610f70918590611142908690612f40565b61119233611b22565b6111ae5760405162461bcd60e51b8152600401610f3090612dd5565b60158054600091829055604051909173c9b52452da3cde4919f79ca524307121eed8b06d9182908490611013565b6111e533611b22565b6112015760405162461bcd60e51b8152600401610f3090612dd5565b601080549115156701000000000000000267ff0000000000000019909216919091179055565b61123033611b22565b61124c5760405162461bcd60e51b8152600401610f3090612dd5565b611257600682611b0d565b5050565b6001600160a01b0381166000908152600360205260408120544281116112845750600092915050565b61128e4282612f29565b9392505050565b61129e33611b22565b6112ba5760405162461bcd60e51b8152600401610f3090612dd5565b6112c66012600a612efb565b6112d09084612f0a565b92506112de6012600a612efb565b6112e89083612f0a565b91506112f66012600a612efb565b6113009082612f0a565b905060c86113106012600a612efb565b61131f9064e8d4a51000612f0a565b6113299190612f58565b8110156113485760405162461bcd60e51b8152600401610f3090612f7a565b60c86113566012600a612efb565b6113659064e8d4a51000612f0a565b61136f9190612f58565b82101561138e5760405162461bcd60e51b8152600401610f3090612f7a565b60c861139c6012600a612efb565b6113ab9064e8d4a51000612f0a565b6113b59190612f58565b8310156113d45760405162461bcd60e51b8152600401610f3090612f7a565b600f92909255600d55600e55565b6113eb33611b22565b6114075760405162461bcd60e51b8152600401610f3090612dd5565b6014805460ff191660ff92909216919091179055565b336114306000546001600160a01b031690565b6001600160a01b0316146114865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f30565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6114d933611b22565b6114f55760405162461bcd60e51b8152600401610f3090612dd5565b600f8360ff1611156115195760405162461bcd60e51b8152600401610f3090612fb1565b600f8260ff16111561153d5760405162461bcd60e51b8152600401610f3090612fb1565b600f8160ff1611156115615760405162461bcd60e51b8152600401610f3090612fb1565b6000848661156f898b612fdd565b6115799190612fdd565b6115839190612fdd565b90508060ff166064146115e75760405162461bcd60e51b815260206004820152602660248201527f6275726e2b6c69712b6d61726b6574696e67206e6565647320746f20657175616044820152656c203130302560d01b6064820152608401610f30565b506010805460ff928316620100000262ff0000199484166101000261ffff19978516600160201b0264ff00000000199986166301000000029990991664ffff000000199a8616600160281b0265ff0000000000199c8716600160301b029c909c1666ffff000000000019909416939093179a909a179890981617959095179390931691909216179390931792909216179055565b61168433611b22565b6116a05760405162461bcd60e51b8152600401610f3090612dd5565b611257600482611fa9565b6116b433611b22565b6116d05760405162461bcd60e51b8152600401610f3090612dd5565b6014805460ff9092166101000261ff0019909216919091179055565b3360009081526002602090815260408083206001600160a01b03861684529091528120548281101561174f5760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610f30565b61175e33856111428685612f29565b5060019392505050565b6000610f70338484611c4c565b61177e33611b22565b61179a5760405162461bcd60e51b8152600401610f3090612dd5565b601a55565b6117a833611b22565b6117c45760405162461bcd60e51b8152600401610f3090612dd5565b601980549115156101000261ff0019909216919091179055565b6117e733611b22565b6118035760405162461bcd60e51b8152600401610f3090612dd5565b601b805460ff1916911515919091179055565b61181f33611b22565b61183b5760405162461bcd60e51b8152600401610f3090612dd5565b600855565b61184933611b22565b6118655760405162461bcd60e51b8152600401610f3090612dd5565b611257600482611b0d565b60008061187f6012600a612efb565b600d5461188c9190612f58565b6118986012600a612efb565b600e546118a59190612f58565b915091509091565b6118b633611b22565b6118d25760405162461bcd60e51b8152600401610f3090612dd5565b6118e86118e382633b9aca00612f0a565b611fbe565b50565b6118f433611b22565b6119105760405162461bcd60e51b8152600401610f3090612dd5565b611257600682611fa9565b61192433611b22565b6119405760405162461bcd60e51b8152600401610f3090612dd5565b6014805460ff909216620100000262ff000019909216919091179055565b61196733611b22565b6119835760405162461bcd60e51b8152600401610f3090612dd5565b601b805461ff001916610100179055565b336119a76000546001600160a01b031690565b6001600160a01b0316146119fd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f30565b6001600160a01b038116611a625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f30565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611ac633611b22565b611ae25760405162461bcd60e51b8152600401610f3090612dd5565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b600061128e836001600160a01b0384166121ba565b600080546001600160a01b0383811691161480610f745750506001600160a01b03166000908152600a602052604090205460ff1690565b6001600160a01b038316611ba35760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610f30565b6001600160a01b038216611beb5760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610f30565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c975760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610f30565b6001600160a01b038216611ce05760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610f30565b6000611ced600485612209565b80611cfe5750611cfe600484612209565b80611d2157506001600160a01b0384166000908152600a602052604090205460ff165b80611d4457506001600160a01b0383166000908152600a602052604090205460ff165b905060006001600160a01b038516301480611d6757506001600160a01b03841630145b6010549091506000906001600160a01b03878116600160481b90920416148015611dad57506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b80611df357506010546001600160a01b03868116600160481b90920416148015611df357506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b90508180611dfe5750805b80611e065750825b15611e1b57611e1686868661222b565b611fa1565b601b54610100900460ff16611f08576000546001600160a01b03878116911614801590611e5657506000546001600160a01b03868116911614155b15611f0857601054600160401b900460ff1615611eb157846001600160a01b0316866001600160a01b03166000805160206131158339815191526000604051611ea191815260200190565b60405180910390a3505050505050565b601b54610100900460ff16611f085760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610f30565b6010546000906001600160a01b03888116600160481b909204161480611f4a57506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6010549091506000906001600160a01b03888116600160481b909204161480611f8f57506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b9050611f9e88888885856122e4565b50505b505050505050565b600061128e836001600160a01b0384166126a6565b6019805460ff19166001908117909155306000908152602091909152604081205460105490919061200390600160201b810460ff908116916301000000900416612fdd565b60ff16905060006008549050838111156120255760095460ff16156120255750825b80831080612035575061ffff8216155b15612042575050506121ad565b60105460009061ffff841690612062906301000000900460ff1684612f0a565b61206c9190612f58565b60105490915060009061ffff85169061208f90600160201b900460ff1685612f0a565b6120999190612f58565b60105490915060009061ffff8616906120bc90600160301b900460ff1686612f0a565b6120c69190612f58565b60105490915060009061ffff8716906120e990600160281b900460ff1687612f0a565b6120f39190612f58565b905080601660008282546121079190612f40565b90915550612116905081612793565b6000612123600286612f58565b905060006121318287612f29565b90506000846121408784612f40565b61214a9190612f40565b90504761215682612816565b60006121628247612f29565b90506000836121718684612f0a565b61217b9190612f58565b90506121878682612967565b60006121938447612f29565b905061219e81612a2f565b50505050505050505050505050505b506019805460ff19169055565b600081815260018301602052604081205461220157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f74565b506000610f74565b6001600160a01b0381166000908152600183016020526040812054151561128e565b6001600160a01b0383166000908152600160205260409020548181101561228f5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610f30565b6122998483612aaf565b6122a38383612af4565b826001600160a01b0316846001600160a01b0316600080516020613115833981519152846040516122d691815260200190565b60405180910390a350505050565b6001600160a01b03808516600090815260016020526040808220549288168252902054848110156123525760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610f30565b6002600e546123619190612f58565b6008556000831561246657612377600689612209565b612411576001600160a01b038816600090815260036020526040902054421015806123a95750601954610100900460ff165b6123ea5760405162461bcd60e51b815260206004820152601260248201527153656c6c657220696e2073656c6c4c6f636b60701b6044820152606401610f30565b601a546123f79042612f40565b6001600160a01b0389166000908152600360205260409020555b600e548611156124555760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610f30565b50601054610100900460ff16612578565b84156124c557600d546124798785612f40565b11156124975760405162461bcd60e51b8152600401610f3090613002565b600f548611156124b95760405162461bcd60e51b8152600401610f3090613002565b5060105460ff16612578565b600d546124d28785612f40565b11156124f05760405162461bcd60e51b8152600401610f3090613002565b6124fb600689612209565b61256a576001600160a01b0388166000908152600360205260409020544210158061252d5750601954610100900460ff165b61256a5760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610f30565b5060105462010000900460ff165b6010546001600160a01b03898116600160481b90920416148015906125a05750601b5460ff16155b80156125af575060195460ff16155b156125bd576125bd86611fbe565b601054600090612616908890849060ff600160301b8204811691600160281b81048216916125fd9163010000008104821691600160201b90910416612fdd565b6126079190612fdd565b6126119190612fdd565b612b18565b905060006126248289612f29565b90506126308a89612aaf565b306000908152600160205260408120805484929061264f908490612f40565b9091555061265f90508982612af4565b886001600160a01b03168a6001600160a01b03166000805160206131158339815191528360405161269291815260200190565b60405180910390a350505050505050505050565b600081815260018301602052604081205480156127895760006126ca600183612f29565b85549091506000906126de90600190612f29565b905060008660000182815481106126f7576126f761302c565b906000526020600020015490508087600001848154811061271a5761271a61302c565b60009182526020808320909101929092558281526001890190915260409020849055865487908061274d5761274d613042565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610f74565b6000915050610f74565b306000908152600160205260409020548111156127af57600080fd5b30600090815260016020526040812080548392906127ce908490612f29565b9250508190555080600c60008282546127e79190612f29565b909155505060405181815261dead9030906000805160206131158339815191529060200160405180910390a350565b60115461282e9030906001600160a01b031683611b59565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106128635761286361302c565b6001600160a01b03928316602091820292909201810191909152601154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e09190613058565b816001815181106128f3576128f361302c565b6001600160a01b03928316602091820292909201015260115460405163791ac94760e01b815291169063791ac94790612939908590600090869030904290600401613075565b600060405180830381600087803b15801561295357600080fd5b505af1158015611fa1573d6000803e3d6000fd5b80601860008282546129799190612f40565b90915550506011546129969030906001600160a01b031684611b59565b60115460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612a03573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a2891906130e6565b5050505050565b601454600090606490612a459060ff1684612f0a565b612a4f9190612f58565b601454909150600090606490612a6e9062010000900460ff1685612f0a565b612a789190612f58565b90508160156000828254612a8c9190612f40565b925050819055508060176000828254612aa59190612f40565b9091555050505050565b6001600160a01b038216600090815260016020526040812054612ad3908390612f29565b6001600160a01b039093166000908152600160205260409020929092555050565b6001600160a01b038216600090815260016020526040812054612ad3908390612f40565b60006127108260ff168460ff1686612b309190612f0a565b612b3a9190612f0a565b612b449190612f58565b949350505050565b6001600160a01b03811681146118e857600080fd5b60008060408385031215612b7457600080fd5b8235612b7f81612b4c565b91506020830135612b8f81612b4c565b809150509250929050565b600060208083528351808285015260005b81811015612bc757858101830151858201604001528201612bab565b81811115612bd9576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215612c0157600080fd5b813561128e81612b4c565b60008060408385031215612c1f57600080fd5b8235612c2a81612b4c565b946020939093013593505050565b80358015158114612c4857600080fd5b919050565b600060208284031215612c5f57600080fd5b61128e82612c38565b600080600060608486031215612c7d57600080fd5b8335612c8881612b4c565b92506020840135612c9881612b4c565b929592945050506040919091013590565b600080600060608486031215612cbe57600080fd5b505081359360208301359350604090920135919050565b803560ff81168114612c4857600080fd5b600060208284031215612cf857600080fd5b61128e82612cd5565b600080600080600080600060e0888a031215612d1c57600080fd5b612d2588612cd5565b9650612d3360208901612cd5565b9550612d4160408901612cd5565b9450612d4f60608901612cd5565b9350612d5d60808901612cd5565b9250612d6b60a08901612cd5565b9150612d7960c08901612cd5565b905092959891949750929550565b600060208284031215612d9957600080fd5b5035919050565b60008060408385031215612db357600080fd5b8235612dbe81612b4c565b9150612dcc60208401612c38565b90509250929050565b60208082526012908201527143616c6c6572206e6f7420696e205465616d60701b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612e52578160001904821115612e3857612e38612e01565b80851615612e4557918102915b93841c9390800290612e1c565b509250929050565b600082612e6957506001610f74565b81612e7657506000610f74565b8160018114612e8c5760028114612e9657612eb2565b6001915050610f74565b60ff841115612ea757612ea7612e01565b50506001821b610f74565b5060208310610133831016604e8410600b8410161715612ed5575081810a610f74565b612edf8383612e17565b8060001904821115612ef357612ef3612e01565b029392505050565b600061128e60ff841683612e5a565b6000816000190483118215151615612f2457612f24612e01565b500290565b600082821015612f3b57612f3b612e01565b500390565b60008219821115612f5357612f53612e01565b500190565b600082612f7557634e487b7160e01b600052601260045260246000fd5b500490565b6020808252601c908201527f426c6f636b656420627920616e74697275672066756e6374696f6e7300000000604082015260600190565b6020808252601290820152710a8c2f0cae640c2e4ca40e8dede40d0d2ced60731b604082015260600190565b600060ff821660ff84168060ff03821115612ffa57612ffa612e01565b019392505050565b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006020828403121561306a57600080fd5b815161128e81612b4c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130c55784516001600160a01b0316835293830193918301916001016130a0565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156130fb57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220d757bfd4c4124c6428883a2809377307fd8493c86c7009f52b2546ad7b180cba64736f6c634300080c0033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x6080604052600436106104525760003560e01c8063715018a61161023d578063b35513f711610138578063d7edb930116100bb578063f1c43f5f11610082578063f1c43f5f14610dfd578063f2fde38b14610e12578063f8766f2014610e32578063f88b0e4614610e52578063faf11fe914610e68578063fb27298714610ede57005b8063d7edb93014610d42578063d924499714610d62578063dd62ed3e14610d82578063e5a1ffe114610dc8578063e798c01214610de857005b8063c7639d80116100ff578063c7639d8014610c7f578063ca9ec19914610ca7578063cd9a1b6314610cc6578063d255fd7414610cdc578063d28d885214610d0657005b8063b35513f714610be8578063b411e99614610c09578063b51ec13e14610c29578063bc68fad914610c49578063c59718ca14610c5f57005b806395d89b41116101c0578063a9059cbb11610187578063a9059cbb14610b37578063a9aab6b914610b57578063aed04fae14610b77578063b09f126614610b97578063b2e8a7d214610bc857005b806395d89b4114610a9357806398b1f16414610ac15780639d65536914610ae1578063a253c06e14610b01578063a457c2d714610b1757005b8063887c60fb11610204578063887c60fb14610a15578063893d20e814610a345780638a98245814610a525780638da5cb5b14610a34578063954ea66514610a7357005b8063715018a61461099a578063762bb282146109af57806376a767ae146109c557806382c4767b146109e557806386d0ada8146109fb57005b8063382e329a1161034d5780634cc40028116102d05780635c0494bb116102975780635c0494bb146108d75780636789f2dc146108f75780636a911f4f146109175780636ebcf6071461093757806370a082311461096457005b80634cc40028146108545780634f91e48c1461087557806354d6b96e1461088b578063589210d9146108ab57806358e55365146108c157005b80634089b170116103145780634089b170146107cf57806342a11095146107e557806348e907b7146107ff5780634953554d146108155780634ada218b1461083557005b8063382e329a1461074357806339509351146107645780633ad10ef6146107845780633b343ac0146107a45780633cc39b7a146107b957005b806318160ddd116103d55780632d8828631161039c5780632d882863146106b6578063311a8697146106d7578063313ce567146106f857806332424aa31461070c5780633478154b1461072157005b806318160ddd1461060d5780631eb25d13146106225780631f8b845e1461063757806323b872dd146106575780632a24e0641461067757005b8063095ea7b311610419578063095ea7b3146105535780630ce0636c146105835780630fd99e16146105a3578063156b2c5d146105d857806317391e49146105ed57005b8063024c2ddd1461045b57806305bf0a54146104a657806306fdde03146104d757806307a25f3c1461051957806309218ee71461053957005b3661045957005b005b34801561046757600080fd5b50610493610476366004612b61565b600260209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b3480156104b257600080fd5b506014546104c590610100900460ff1681565b60405160ff909116815260200161049d565b3480156104e357600080fd5b5060408051808201909152601081526f09ee6c6c2e440a8d0ca408ee4deeac6d60831b60208201525b60405161049d9190612b9a565b34801561052557600080fd5b50610459610534366004612bef565b610f0b565b34801561054557600080fd5b506014546104c59060ff1681565b34801561055f57600080fd5b5061057361056e366004612c0c565b610f63565b604051901515815260200161049d565b34801561058f57600080fd5b5061045961059e366004612c4d565b610f7a565b3480156105af57600080fd5b506009546105c590600160201b900461ffff1681565b60405161ffff909116815260200161049d565b3480156105e457600080fd5b50610459610fb2565b3480156105f957600080fd5b506010546104c59062010000900460ff1681565b34801561061957600080fd5b50600c54610493565b34801561062e57600080fd5b5061049361109d565b34801561064357600080fd5b506009546105c590610100900461ffff1681565b34801561066357600080fd5b50610573610672366004612c68565b6110bb565b34801561068357600080fd5b5060105461069e90600160481b90046001600160a01b031681565b6040516001600160a01b03909116815260200161049d565b3480156106c257600080fd5b506010546104c590600160201b900460ff1681565b3480156106e357600080fd5b506009546104c5906301000000900460ff1681565b34801561070457600080fd5b5060126104c5565b34801561071857600080fd5b506104c5601281565b34801561072d57600080fd5b506009546105c590600160301b900461ffff1681565b34801561074f57600080fd5b506010546104c5906301000000900460ff1681565b34801561077057600080fd5b5061057361077f366004612c0c565b611152565b34801561079057600080fd5b50600b5461069e906001600160a01b031681565b3480156107b057600080fd5b50610459611189565b3480156107c557600080fd5b5061049360185481565b3480156107db57600080fd5b5061049360135481565b3480156107f157600080fd5b506010546104c59060ff1681565b34801561080b57600080fd5b5061049360125481565b34801561082157600080fd5b50610459610830366004612c4d565b6111dc565b34801561084157600080fd5b50601b5461057390610100900460ff1681565b34801561086057600080fd5b506010546104c590600160281b900460ff1681565b34801561088157600080fd5b50610493600e5481565b34801561089757600080fd5b506104596108a6366004612bef565b611227565b3480156108b757600080fd5b50610493600f5481565b3480156108cd57600080fd5b5061049360155481565b3480156108e357600080fd5b506104936108f2366004612bef565b61125b565b34801561090357600080fd5b50610459610912366004612ca9565b611295565b34801561092357600080fd5b50610459610932366004612ce6565b6113e2565b34801561094357600080fd5b50610493610952366004612bef565b60016020526000908152604090205481565b34801561097057600080fd5b5061049361097f366004612bef565b6001600160a01b031660009081526001602052604090205490565b3480156109a657600080fd5b5061045961141d565b3480156109bb57600080fd5b50610493600d5481565b3480156109d157600080fd5b506104596109e0366004612d01565b6114d0565b3480156109f157600080fd5b5061069e61dead81565b348015610a0757600080fd5b50601b546105739060ff1681565b348015610a2157600080fd5b5060195461057390610100900460ff1681565b348015610a4057600080fd5b506000546001600160a01b031661069e565b348015610a5e57600080fd5b5060105461057390600160401b900460ff1681565b348015610a7f57600080fd5b5060115461069e906001600160a01b031681565b348015610a9f57600080fd5b5060408051808201909152600581526427a9a1a0a960d91b602082015261050c565b348015610acd57600080fd5b50610459610adc366004612bef565b61167b565b348015610aed57600080fd5b50610459610afc366004612ce6565b6116ab565b348015610b0d57600080fd5b50610493600c5481565b348015610b2357600080fd5b50610573610b32366004612c0c565b6116ec565b348015610b4357600080fd5b50610573610b52366004612c0c565b611768565b348015610b6357600080fd5b50610459610b72366004612d87565b611775565b348015610b8357600080fd5b506014546104c59062010000900460ff1681565b348015610ba357600080fd5b5061050c6040518060400160405280600581526020016427a9a1a0a960d91b81525081565b348015610bd457600080fd5b50610459610be3366004612c4d565b61179f565b348015610bf457600080fd5b506010546104c590600160301b900460ff1681565b348015610c1557600080fd5b50610459610c24366004612c4d565b6117de565b348015610c3557600080fd5b50610459610c44366004612d87565b611816565b348015610c5557600080fd5b5061049360165481565b348015610c6b57600080fd5b50610459610c7a366004612bef565b611840565b348015610c8b57600080fd5b5061069e737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610cb357600080fd5b506010546104c590610100900460ff1681565b348015610cd257600080fd5b5061049360175481565b348015610ce857600080fd5b50610cf1611870565b6040805192835260208301919091520161049d565b348015610d1257600080fd5b5061050c6040518060400160405280601081526020016f09ee6c6c2e440a8d0ca408ee4deeac6d60831b81525081565b348015610d4e57600080fd5b50610459610d5d366004612d87565b6118ad565b348015610d6e57600080fd5b50610459610d7d366004612bef565b6118eb565b348015610d8e57600080fd5b50610493610d9d366004612b61565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610dd457600080fd5b50610459610de3366004612ce6565b61191b565b348015610df457600080fd5b5061045961195e565b348015610e0957600080fd5b50601a54610493565b348015610e1e57600080fd5b50610459610e2d366004612bef565b611994565b348015610e3e57600080fd5b50610459610e4d366004612da0565b611abd565b348015610e5e57600080fd5b50610493601a5481565b348015610e7457600080fd5b506010546040805160ff600160301b840481168252600160281b84048116602083015263010000008404811692820192909252600160201b83048216606082015281831660808201526101008304821660a0820152620100009092041660c082015260e00161049d565b348015610eea57600080fd5b50610493610ef9366004612bef565b60036020526000908152604090205481565b610f1433611b22565b610f395760405162461bcd60e51b8152600401610f3090612dd5565b60405180910390fd5b601b80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000610f70338484611b59565b5060015b92915050565b610f8333611b22565b610f9f5760405162461bcd60e51b8152600401610f3090612dd5565b6009805460ff1916911515919091179055565b600b546001600160a01b03163314610ffd5760405162461bcd60e51b815260206004820152600e60248201526d21b0b63632b9103737ba103232bb60911b6044820152606401610f30565b6017805460009182905560405190913391829084905b60006040518083038185875af1925050503d8060008114611050576040519150601f19603f3d011682016040523d82523d6000602084013e611055565b606091505b50509050806110985760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610f30565b505050565b6110a96012600a612efb565b6110b89064e8d4a51000612f0a565b81565b60006110c8848484611c4c565b6001600160a01b0384166000908152600260209081526040808320338452909152902054828110156111335760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610f30565b61114785336111428685612f29565b611b59565b506001949350505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610f70918590611142908690612f40565b61119233611b22565b6111ae5760405162461bcd60e51b8152600401610f3090612dd5565b60158054600091829055604051909173c9b52452da3cde4919f79ca524307121eed8b06d9182908490611013565b6111e533611b22565b6112015760405162461bcd60e51b8152600401610f3090612dd5565b601080549115156701000000000000000267ff0000000000000019909216919091179055565b61123033611b22565b61124c5760405162461bcd60e51b8152600401610f3090612dd5565b611257600682611b0d565b5050565b6001600160a01b0381166000908152600360205260408120544281116112845750600092915050565b61128e4282612f29565b9392505050565b61129e33611b22565b6112ba5760405162461bcd60e51b8152600401610f3090612dd5565b6112c66012600a612efb565b6112d09084612f0a565b92506112de6012600a612efb565b6112e89083612f0a565b91506112f66012600a612efb565b6113009082612f0a565b905060c86113106012600a612efb565b61131f9064e8d4a51000612f0a565b6113299190612f58565b8110156113485760405162461bcd60e51b8152600401610f3090612f7a565b60c86113566012600a612efb565b6113659064e8d4a51000612f0a565b61136f9190612f58565b82101561138e5760405162461bcd60e51b8152600401610f3090612f7a565b60c861139c6012600a612efb565b6113ab9064e8d4a51000612f0a565b6113b59190612f58565b8310156113d45760405162461bcd60e51b8152600401610f3090612f7a565b600f92909255600d55600e55565b6113eb33611b22565b6114075760405162461bcd60e51b8152600401610f3090612dd5565b6014805460ff191660ff92909216919091179055565b336114306000546001600160a01b031690565b6001600160a01b0316146114865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f30565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6114d933611b22565b6114f55760405162461bcd60e51b8152600401610f3090612dd5565b600f8360ff1611156115195760405162461bcd60e51b8152600401610f3090612fb1565b600f8260ff16111561153d5760405162461bcd60e51b8152600401610f3090612fb1565b600f8160ff1611156115615760405162461bcd60e51b8152600401610f3090612fb1565b6000848661156f898b612fdd565b6115799190612fdd565b6115839190612fdd565b90508060ff166064146115e75760405162461bcd60e51b815260206004820152602660248201527f6275726e2b6c69712b6d61726b6574696e67206e6565647320746f20657175616044820152656c203130302560d01b6064820152608401610f30565b506010805460ff928316620100000262ff0000199484166101000261ffff19978516600160201b0264ff00000000199986166301000000029990991664ffff000000199a8616600160281b0265ff0000000000199c8716600160301b029c909c1666ffff000000000019909416939093179a909a179890981617959095179390931691909216179390931792909216179055565b61168433611b22565b6116a05760405162461bcd60e51b8152600401610f3090612dd5565b611257600482611fa9565b6116b433611b22565b6116d05760405162461bcd60e51b8152600401610f3090612dd5565b6014805460ff9092166101000261ff0019909216919091179055565b3360009081526002602090815260408083206001600160a01b03861684529091528120548281101561174f5760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610f30565b61175e33856111428685612f29565b5060019392505050565b6000610f70338484611c4c565b61177e33611b22565b61179a5760405162461bcd60e51b8152600401610f3090612dd5565b601a55565b6117a833611b22565b6117c45760405162461bcd60e51b8152600401610f3090612dd5565b601980549115156101000261ff0019909216919091179055565b6117e733611b22565b6118035760405162461bcd60e51b8152600401610f3090612dd5565b601b805460ff1916911515919091179055565b61181f33611b22565b61183b5760405162461bcd60e51b8152600401610f3090612dd5565b600855565b61184933611b22565b6118655760405162461bcd60e51b8152600401610f3090612dd5565b611257600482611b0d565b60008061187f6012600a612efb565b600d5461188c9190612f58565b6118986012600a612efb565b600e546118a59190612f58565b915091509091565b6118b633611b22565b6118d25760405162461bcd60e51b8152600401610f3090612dd5565b6118e86118e382633b9aca00612f0a565b611fbe565b50565b6118f433611b22565b6119105760405162461bcd60e51b8152600401610f3090612dd5565b611257600682611fa9565b61192433611b22565b6119405760405162461bcd60e51b8152600401610f3090612dd5565b6014805460ff909216620100000262ff000019909216919091179055565b61196733611b22565b6119835760405162461bcd60e51b8152600401610f3090612dd5565b601b805461ff001916610100179055565b336119a76000546001600160a01b031690565b6001600160a01b0316146119fd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f30565b6001600160a01b038116611a625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f30565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611ac633611b22565b611ae25760405162461bcd60e51b8152600401610f3090612dd5565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b600061128e836001600160a01b0384166121ba565b600080546001600160a01b0383811691161480610f745750506001600160a01b03166000908152600a602052604090205460ff1690565b6001600160a01b038316611ba35760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610f30565b6001600160a01b038216611beb5760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610f30565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c975760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610f30565b6001600160a01b038216611ce05760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610f30565b6000611ced600485612209565b80611cfe5750611cfe600484612209565b80611d2157506001600160a01b0384166000908152600a602052604090205460ff165b80611d4457506001600160a01b0383166000908152600a602052604090205460ff165b905060006001600160a01b038516301480611d6757506001600160a01b03841630145b6010549091506000906001600160a01b03878116600160481b90920416148015611dad57506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b80611df357506010546001600160a01b03868116600160481b90920416148015611df357506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b90508180611dfe5750805b80611e065750825b15611e1b57611e1686868661222b565b611fa1565b601b54610100900460ff16611f08576000546001600160a01b03878116911614801590611e5657506000546001600160a01b03868116911614155b15611f0857601054600160401b900460ff1615611eb157846001600160a01b0316866001600160a01b03166000805160206131158339815191526000604051611ea191815260200190565b60405180910390a3505050505050565b601b54610100900460ff16611f085760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610f30565b6010546000906001600160a01b03888116600160481b909204161480611f4a57506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6010549091506000906001600160a01b03888116600160481b909204161480611f8f57506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b9050611f9e88888885856122e4565b50505b505050505050565b600061128e836001600160a01b0384166126a6565b6019805460ff19166001908117909155306000908152602091909152604081205460105490919061200390600160201b810460ff908116916301000000900416612fdd565b60ff16905060006008549050838111156120255760095460ff16156120255750825b80831080612035575061ffff8216155b15612042575050506121ad565b60105460009061ffff841690612062906301000000900460ff1684612f0a565b61206c9190612f58565b60105490915060009061ffff85169061208f90600160201b900460ff1685612f0a565b6120999190612f58565b60105490915060009061ffff8616906120bc90600160301b900460ff1686612f0a565b6120c69190612f58565b60105490915060009061ffff8716906120e990600160281b900460ff1687612f0a565b6120f39190612f58565b905080601660008282546121079190612f40565b90915550612116905081612793565b6000612123600286612f58565b905060006121318287612f29565b90506000846121408784612f40565b61214a9190612f40565b90504761215682612816565b60006121628247612f29565b90506000836121718684612f0a565b61217b9190612f58565b90506121878682612967565b60006121938447612f29565b905061219e81612a2f565b50505050505050505050505050505b506019805460ff19169055565b600081815260018301602052604081205461220157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f74565b506000610f74565b6001600160a01b0381166000908152600183016020526040812054151561128e565b6001600160a01b0383166000908152600160205260409020548181101561228f5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610f30565b6122998483612aaf565b6122a38383612af4565b826001600160a01b0316846001600160a01b0316600080516020613115833981519152846040516122d691815260200190565b60405180910390a350505050565b6001600160a01b03808516600090815260016020526040808220549288168252902054848110156123525760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610f30565b6002600e546123619190612f58565b6008556000831561246657612377600689612209565b612411576001600160a01b038816600090815260036020526040902054421015806123a95750601954610100900460ff165b6123ea5760405162461bcd60e51b815260206004820152601260248201527153656c6c657220696e2073656c6c4c6f636b60701b6044820152606401610f30565b601a546123f79042612f40565b6001600160a01b0389166000908152600360205260409020555b600e548611156124555760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610f30565b50601054610100900460ff16612578565b84156124c557600d546124798785612f40565b11156124975760405162461bcd60e51b8152600401610f3090613002565b600f548611156124b95760405162461bcd60e51b8152600401610f3090613002565b5060105460ff16612578565b600d546124d28785612f40565b11156124f05760405162461bcd60e51b8152600401610f3090613002565b6124fb600689612209565b61256a576001600160a01b0388166000908152600360205260409020544210158061252d5750601954610100900460ff165b61256a5760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610f30565b5060105462010000900460ff165b6010546001600160a01b03898116600160481b90920416148015906125a05750601b5460ff16155b80156125af575060195460ff16155b156125bd576125bd86611fbe565b601054600090612616908890849060ff600160301b8204811691600160281b81048216916125fd9163010000008104821691600160201b90910416612fdd565b6126079190612fdd565b6126119190612fdd565b612b18565b905060006126248289612f29565b90506126308a89612aaf565b306000908152600160205260408120805484929061264f908490612f40565b9091555061265f90508982612af4565b886001600160a01b03168a6001600160a01b03166000805160206131158339815191528360405161269291815260200190565b60405180910390a350505050505050505050565b600081815260018301602052604081205480156127895760006126ca600183612f29565b85549091506000906126de90600190612f29565b905060008660000182815481106126f7576126f761302c565b906000526020600020015490508087600001848154811061271a5761271a61302c565b60009182526020808320909101929092558281526001890190915260409020849055865487908061274d5761274d613042565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610f74565b6000915050610f74565b306000908152600160205260409020548111156127af57600080fd5b30600090815260016020526040812080548392906127ce908490612f29565b9250508190555080600c60008282546127e79190612f29565b909155505060405181815261dead9030906000805160206131158339815191529060200160405180910390a350565b60115461282e9030906001600160a01b031683611b59565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106128635761286361302c565b6001600160a01b03928316602091820292909201810191909152601154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e09190613058565b816001815181106128f3576128f361302c565b6001600160a01b03928316602091820292909201015260115460405163791ac94760e01b815291169063791ac94790612939908590600090869030904290600401613075565b600060405180830381600087803b15801561295357600080fd5b505af1158015611fa1573d6000803e3d6000fd5b80601860008282546129799190612f40565b90915550506011546129969030906001600160a01b031684611b59565b60115460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612a03573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a2891906130e6565b5050505050565b601454600090606490612a459060ff1684612f0a565b612a4f9190612f58565b601454909150600090606490612a6e9062010000900460ff1685612f0a565b612a789190612f58565b90508160156000828254612a8c9190612f40565b925050819055508060176000828254612aa59190612f40565b9091555050505050565b6001600160a01b038216600090815260016020526040812054612ad3908390612f29565b6001600160a01b039093166000908152600160205260409020929092555050565b6001600160a01b038216600090815260016020526040812054612ad3908390612f40565b60006127108260ff168460ff1686612b309190612f0a565b612b3a9190612f0a565b612b449190612f58565b949350505050565b6001600160a01b03811681146118e857600080fd5b60008060408385031215612b7457600080fd5b8235612b7f81612b4c565b91506020830135612b8f81612b4c565b809150509250929050565b600060208083528351808285015260005b81811015612bc757858101830151858201604001528201612bab565b81811115612bd9576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215612c0157600080fd5b813561128e81612b4c565b60008060408385031215612c1f57600080fd5b8235612c2a81612b4c565b946020939093013593505050565b80358015158114612c4857600080fd5b919050565b600060208284031215612c5f57600080fd5b61128e82612c38565b600080600060608486031215612c7d57600080fd5b8335612c8881612b4c565b92506020840135612c9881612b4c565b929592945050506040919091013590565b600080600060608486031215612cbe57600080fd5b505081359360208301359350604090920135919050565b803560ff81168114612c4857600080fd5b600060208284031215612cf857600080fd5b61128e82612cd5565b600080600080600080600060e0888a031215612d1c57600080fd5b612d2588612cd5565b9650612d3360208901612cd5565b9550612d4160408901612cd5565b9450612d4f60608901612cd5565b9350612d5d60808901612cd5565b9250612d6b60a08901612cd5565b9150612d7960c08901612cd5565b905092959891949750929550565b600060208284031215612d9957600080fd5b5035919050565b60008060408385031215612db357600080fd5b8235612dbe81612b4c565b9150612dcc60208401612c38565b90509250929050565b60208082526012908201527143616c6c6572206e6f7420696e205465616d60701b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612e52578160001904821115612e3857612e38612e01565b80851615612e4557918102915b93841c9390800290612e1c565b509250929050565b600082612e6957506001610f74565b81612e7657506000610f74565b8160018114612e8c5760028114612e9657612eb2565b6001915050610f74565b60ff841115612ea757612ea7612e01565b50506001821b610f74565b5060208310610133831016604e8410600b8410161715612ed5575081810a610f74565b612edf8383612e17565b8060001904821115612ef357612ef3612e01565b029392505050565b600061128e60ff841683612e5a565b6000816000190483118215151615612f2457612f24612e01565b500290565b600082821015612f3b57612f3b612e01565b500390565b60008219821115612f5357612f53612e01565b500190565b600082612f7557634e487b7160e01b600052601260045260246000fd5b500490565b6020808252601c908201527f426c6f636b656420627920616e74697275672066756e6374696f6e7300000000604082015260600190565b6020808252601290820152710a8c2f0cae640c2e4ca40e8dede40d0d2ced60731b604082015260600190565b600060ff821660ff84168060ff03821115612ffa57612ffa612e01565b019392505050565b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006020828403121561306a57600080fd5b815161128e81612b4c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130c55784516001600160a01b0316835293830193918301916001016130a0565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156130fb57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220d757bfd4c4124c6428883a2809377307fd8493c86c7009f52b2546ad7b180cba64736f6c634300080c0033

Deployed Bytecode Sourcemap

15937:18675:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16120:68;;;;;;;;;;-1:-1:-1;16120:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;689:25:1;;;677:2;662:18;16120:68:0;;;;;;;;23777:25;;;;;;;;;;-1:-1:-1;23777:25:0;;;;;;;;;;;;;;897:4:1;885:17;;;867:36;;855:2;840:18;23777:25:0;725:184:1;32289:94:0;;;;;;;;;;-1:-1:-1;32370:5:0;;;;;;;;;;;;-1:-1:-1;;;32370:5:0;;;;32289:94;;;;;;;:::i;31823:149::-;;;;;;;;;;-1:-1:-1;31823:149:0;;;;;:::i;:::-;;:::i;23740:30::-;;;;;;;;;;-1:-1:-1;23740:30:0;;;;;;;;33174:161;;;;;;;;;;-1:-1:-1;33174:161:0;;;;;:::i;:::-;;:::i;:::-;;;2253:14:1;;2246:22;2228:41;;2216:2;2201:18;33174:161:0;2088:187:1;27955:104:0;;;;;;;;;;-1:-1:-1;27955:104:0;;;;;:::i;:::-;;:::i;16789:35::-;;;;;;;;;;-1:-1:-1;16789:35:0;;;;-1:-1:-1;;;16789:35:0;;;;;;;;;2804:6:1;2792:19;;;2774:38;;2762:2;2747:18;16789:35:0;2630:188:1;29140:249:0;;;;;;;;;;;;;:::i;17425:25::-;;;;;;;;;;-1:-1:-1;17425:25:0;;;;;;;;;;;32599:108;;;;;;;;;;-1:-1:-1;32681:18:0;;32599:108;;16511:67;;;;;;;;;;;;;:::i;16680:34::-;;;;;;;;;;-1:-1:-1;16680:34:0;;;;;;;;;;;33654:392;;;;;;;;;;-1:-1:-1;33654:392:0;;;;;:::i;:::-;;:::i;17655:34::-;;;;;;;;;;-1:-1:-1;17655:34:0;;;;-1:-1:-1;;;17655:34:0;;-1:-1:-1;;;;;17655:34:0;;;;;;-1:-1:-1;;;;;3448:32:1;;;3430:51;;3418:2;3403:18;17655:34:0;3284:203:1;17490:26:0;;;;;;;;;;-1:-1:-1;17490:26:0;;;;-1:-1:-1;;;17490:26:0;;;;;;16733:37;;;;;;;;;;-1:-1:-1;16733:37:0;;;;;;;;;;;32497:94;;;;;;;;;;-1:-1:-1;16502:2:0;32497:94;;16468:36;;;;;;;;;;;;16502:2;16468:36;;16843:42;;;;;;;;;;-1:-1:-1;16843:42:0;;;;-1:-1:-1;;;16843:42:0;;;;;;17457:26;;;;;;;;;;-1:-1:-1;17457:26:0;;;;;;;;;;;34054:205;;;;;;;;;;-1:-1:-1;34054:205:0;;;;;:::i;:::-;;:::i;17114:25::-;;;;;;;;;;-1:-1:-1;17114:25:0;;;;-1:-1:-1;;;;;17114:25:0;;;28832:300;;;;;;;;;;;;;:::i;24226:25::-;;;;;;;;;;;;;;;;23700:27;;;;;;;;;;;;;;;;17370:20;;;;;;;;;;-1:-1:-1;17370:20:0;;;;;;;;23649:38;;;;;;;;;;;;;;;;31984:118;;;;;;;;;;-1:-1:-1;31984:118:0;;;;;:::i;:::-;;:::i;31638:26::-;;;;;;;;;;-1:-1:-1;31638:26:0;;;;;;;;;;;17523:21;;;;;;;;;;-1:-1:-1;17523:21:0;;;;-1:-1:-1;;;17523:21:0;;;;;;17263:46;;;;;;;;;;;;;;;;28557:129;;;;;;;;;;-1:-1:-1;28557:129:0;;;;;:::i;:::-;;:::i;17316:45::-;;;;;;;;;;;;;;;;23846:31;;;;;;;;;;;;;;;;27433:289;;;;;;;;;;-1:-1:-1;27433:289:0;;;;;:::i;:::-;;:::i;30986:644::-;;;;;;;;;;-1:-1:-1;30986:644:0;;;;;:::i;:::-;;:::i;30507:111::-;;;;;;;;;;-1:-1:-1;30507:111:0;;;;;:::i;:::-;;:::i;16068:45::-;;;;;;;;;;-1:-1:-1;16068:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;32715:121;;;;;;;;;;-1:-1:-1;32715:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;32810:18:0;32783:7;32810:18;;;:9;:18;;;;;;;32715:121;8149:140;;;;;;;;;;;;;:::i;17207:49::-;;;;;;;;;;;;;;;;29775:720;;;;;;;;;;-1:-1:-1;29775:720:0;;;;;:::i;:::-;;:::i;17034:73::-;;;;;;;;;;;;17065:42;17034:73;;27918:28;;;;;;;;;;-1:-1:-1;27918:28:0;;;;;;;;27849;;;;;;;;;;-1:-1:-1;27849:28:0;;;;;;;;;;;32187:94;;;;;;;;;;-1:-1:-1;32239:7:0;7999:6;-1:-1:-1;;;;;7999:6:0;32187:94;;17617:29;;;;;;;;;;-1:-1:-1;17617:29:0;;;;-1:-1:-1;;;17617:29:0;;;;;;17696:39;;;;;;;;;;-1:-1:-1;17696:39:0;;;;-1:-1:-1;;;;;17696:39:0;;;32391:98;;;;;;;;;;-1:-1:-1;32474:7:0;;;;;;;;;;;;-1:-1:-1;;;32474:7:0;;;;32391:98;;28431:114;;;;;;;;;;-1:-1:-1;28431:114:0;;;;;:::i;:::-;;:::i;30630:101::-;;;;;;;;;;-1:-1:-1;30630:101:0;;;;;:::i;:::-;;:::i;17152:48::-;;;;;;;;;;;;;;;;34267:342;;;;;;;;;;-1:-1:-1;34267:342:0;;;;;:::i;:::-;;:::i;32844:167::-;;;;;;;;;;-1:-1:-1;32844:167:0;;;;;:::i;:::-;;:::i;29645:118::-;;;;;;;;;;-1:-1:-1;29645:118:0;;;;;:::i;:::-;;:::i;23809:24::-;;;;;;;;;;-1:-1:-1;23809:24:0;;;;;;;;;;;16421:40;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16421:40:0;;;;;29526:107;;;;;;;;;;-1:-1:-1;29526:107:0;;;;;:::i;:::-;;:::i;17551:20::-;;;;;;;;;;-1:-1:-1;17551:20:0;;;;-1:-1:-1;;;17551:20:0;;;;;;29401:113;;;;;;;;;;-1:-1:-1;29401:113:0;;;;;:::i;:::-;;:::i;28067:91::-;;;;;;;;;;-1:-1:-1;28067:91:0;;;;;:::i;:::-;;:::i;23884:26::-;;;;;;;;;;;;;;;;28312:113;;;;;;;;;;-1:-1:-1;28312:113:0;;;;;:::i;:::-;;:::i;16947:80::-;;;;;;;;;;;;16985:42;16947:80;;17397:21;;;;;;;;;;-1:-1:-1;17397:21:0;;;;;;;;;;;23917:25;;;;;;;;;;;;;;;;26977:157;;;;;;;;;;;;;:::i;:::-;;;;5363:25:1;;;5419:2;5404:18;;5397:34;;;;5336:18;26977:157:0;5189:248:1;16365:49:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16365:49:0;;;;;30846:128;;;;;;;;;;-1:-1:-1;30846:128:0;;;;;:::i;:::-;;:::i;28694:130::-;;;;;;;;;;-1:-1:-1;28694:130:0;;;;;:::i;:::-;;:::i;33019:147::-;;;;;;;;;;-1:-1:-1;33019:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;33130:19:0;;;33103:7;33130:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;33019:147;30739:99;;;;;;;;;;-1:-1:-1;30739:99:0;;;;;:::i;:::-;;:::i;31722:89::-;;;;;;;;;;;;;:::i;27731:110::-;;;;;;;;;;-1:-1:-1;27821:12:0;;27731:110;;8301:236;;;;;;;;;;-1:-1:-1;8301:236:0;;;;;:::i;:::-;;:::i;28199:105::-;;;;;;;;;;-1:-1:-1;28199:105:0;;;;;:::i;:::-;;:::i;27884:27::-;;;;;;;;;;;;;;;;27142:279;;;;;;;;;;-1:-1:-1;27337:7:0;;27142:279;;;27337:7;-1:-1:-1;;;27337:7:0;;;;6077:25:1;;-1:-1:-1;;;27346:8:0;;;;6133:2:1;6118:18;;6111:34;27355:13:0;;;;;6161:18:1;;;6154:34;;;;-1:-1:-1;;;27369:13:0;;;;6219:2:1;6204:18;;6197:34;27383:7:0;;;6262:3:1;6247:19;;6240:35;27337:7:0;27391:8;;;;6306:3:1;6291:19;;6284:35;27400:12:0;;;;;6350:3:1;6335:19;;6328:35;6064:3;6049:19;27142:279:0;5762:607:1;16195:45:0;;;;;;;;;;-1:-1:-1;16195:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;31823:149;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;;;;;;;;;31920:22:::1;:44:::0;;-1:-1:-1;;;;;31920:44:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;31920:44:0;;::::1;::::0;;;::::1;::::0;;31823:149::o;33174:161::-;33251:4;33268:37;33277:10;33289:7;33298:6;33268:8;:37::i;:::-;-1:-1:-1;33323:4:0;33174:161;;;;;:::o;27955:104::-;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;28028:12:::1;:23:::0;;-1:-1:-1;;28028:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27955:104::o;29140:249::-;17895:10;;-1:-1:-1;;;;;17895:10:0;17907;17895:22;17887:49;;;;-1:-1:-1;;;17887:49:0;;6923:2:1;17887:49:0;;;6905:21:1;6962:2;6942:18;;;6935:30;-1:-1:-1;;;6981:18:1;;;6974:44;7035:18;;17887:49:0;6721:338:1;17887:49:0;29211:10:::1;::::0;;29196:14:::1;29232:12:::0;;;;29307:32:::1;::::0;29211:10;;29272::::1;::::0;;;29211;;29307:32:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29293:46;;;29358:4;29350:31;;;::::0;-1:-1:-1;;;29350:31:0;;7476:2:1;29350:31:0::1;::::0;::::1;7458:21:1::0;7515:2;7495:18;;;7488:30;-1:-1:-1;;;7534:18:1;;;7527:45;7589:18;;29350:31:0::1;7274:339:1::0;29350:31:0::1;29185:204;;;29140:249::o:0;16511:67::-;16565:13;16502:2;16565;:13;:::i;:::-;16550:28;;:12;:28;:::i;:::-;16511:67;:::o;33654:392::-;33754:4;33771:36;33781:6;33789:9;33800:6;33771:9;:36::i;:::-;-1:-1:-1;;;;;33847:19:0;;33820:24;33847:19;;;:11;:19;;;;;;;;33867:10;33847:31;;;;;;;;33897:26;;;;33889:59;;;;-1:-1:-1;;;33889:59:0;;9508:2:1;33889:59:0;;;9490:21:1;9547:2;9527:18;;;9520:30;-1:-1:-1;;;9566:18:1;;;9559:50;9626:18;;33889:59:0;9306:344:1;33889:59:0;33961:55;33970:6;33978:10;33990:25;34009:6;33990:16;:25;:::i;:::-;33961:8;:55::i;:::-;-1:-1:-1;34034:4:0;;33654:392;-1:-1:-1;;;;33654:392:0:o;34054:205::-;34162:10;34136:4;34183:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;34183:32:0;;;;;;;;;;34136:4;;34153:76;;34174:7;;34183:45;;34218:10;;34183:45;:::i;28832:300::-;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;28910:16:::1;::::0;;28895:14:::1;28937:18:::0;;;;29050:32:::1;::::0;28910:16;;28983:42:::1;::::0;;;28910:16;;29050:32:::1;7064:205:1::0;31984:118:0;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;32068:17:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;32068:26:0;;::::1;::::0;;;::::1;::::0;;31984:118::o;28557:129::-;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;28644:34:::1;:21;28670:7:::0;28644:25:::1;:34::i;:::-;;28557:129:::0;:::o;27433:289::-;-1:-1:-1;;;;;27563:25:0;;27527:7;27563:25;;;:9;:25;;;;;;27612:15;27602:25;;27599:74;;-1:-1:-1;27660:1:0;;27433:289;-1:-1:-1;;27433:289:0:o;27599:74::-;27690:24;27699:15;27690:8;:24;:::i;:::-;27683:31;27433:289;-1:-1:-1;;;27433:289:0:o;30986:644::-;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;31137:13:::1;16502:2;31137;:13;:::i;:::-;31124:26;::::0;:11;:26:::1;:::i;:::-;31110:40:::0;-1:-1:-1;31193:13:0::1;16502:2;31193;:13;:::i;:::-;31177:29;::::0;:15;:29:::1;:::i;:::-;31161:45:::0;-1:-1:-1;31243:13:0::1;16502:2;31243;:13;:::i;:::-;31230:26;::::0;:12;:26:::1;:::i;:::-;31217:39:::0;-1:-1:-1;31305:3:0::1;16565:13;16502:2;16565;:13;:::i;:::-;16550:28;::::0;:12:::1;:28;:::i;:::-;31291:17;;;;:::i;:::-;31275:12;:33;;31267:74;;;;-1:-1:-1::0;;;31267:74:0::1;;;;;;;:::i;:::-;31393:3;16565:13;16502:2;16565;:13;:::i;:::-;16550:28;::::0;:12:::1;:28;:::i;:::-;31379:17;;;;:::i;:::-;31360:15;:36;;31352:77;;;;-1:-1:-1::0;;;31352:77:0::1;;;;;;;:::i;:::-;31477:3;16565:13;16502:2;16565;:13;:::i;:::-;16550:28;::::0;:12:::1;:28;:::i;:::-;31463:17;;;;:::i;:::-;31448:11;:32;;31440:73;;;;-1:-1:-1::0;;;31440:73:0::1;;;;;;;:::i;:::-;31524:8;:22:::0;;;;31557:12:::1;:30:::0;31598:9:::1;:24:::0;30986:644::o;30507:111::-;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;30587:14:::1;:23:::0;;-1:-1:-1;;30587:23:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;30507:111::o;8149:140::-;8073:10;8062:7;7972;7999:6;-1:-1:-1;;;;;7999:6:0;;7934:79;8062:7;-1:-1:-1;;;;;8062:21:0;;8054:66;;;;-1:-1:-1;;;8054:66:0;;10699:2:1;8054:66:0;;;10681:21:1;;;10718:18;;;10711:30;10777:34;10757:18;;;10750:62;10829:18;;8054:66:0;10497:356:1;8054:66:0;8248:1:::1;8232:6:::0;;8211:40:::1;::::0;-1:-1:-1;;;;;8232:6:0;;::::1;::::0;8211:40:::1;::::0;8248:1;;8211:40:::1;8279:1;8262:19:::0;;-1:-1:-1;;;;;;8262:19:0::1;::::0;;8149:140::o;29775:720::-;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;29969:2:::1;29959:6;:12;;;;29951:43;;;;-1:-1:-1::0;;;29951:43:0::1;;;;;;;:::i;:::-;30024:2;30013:7;:13;;;;30005:44;;;;-1:-1:-1::0;;;30005:44:0::1;;;;;;;:::i;:::-;30083:2;30068:11;:17;;;;30060:48;;;;-1:-1:-1::0;;;30060:48:0::1;;;;;;;:::i;:::-;30119:14;30171::::0;30156;30134:20:::1;30145:9:::0;30134:8;:20:::1;:::i;:::-;:36;;;;:::i;:::-;:51;;;;:::i;:::-;30119:66;;30204:8;:13;;30214:3;30204:13;30196:64;;;::::0;-1:-1:-1;;;30196:64:0;;11616:2:1;30196:64:0::1;::::0;::::1;11598:21:1::0;11655:2;11635:18;;;11628:30;11694:34;11674:18;;;11667:62;-1:-1:-1;;;11745:18:1;;;11738:36;11791:19;;30196:64:0::1;11414:402:1::0;30196:64:0::1;-1:-1:-1::0;30271:7:0::1;:18:::0;;::::1;30463:24:::0;;::::1;::::0;::::1;-1:-1:-1::0;;30436:16:0;;::::1;30271:18;30436:16;-1:-1:-1::0;;30370:28:0;;::::1;-1:-1:-1::0;;;30370:28:0::1;-1:-1:-1::0;;30331:28:0;;::::1;::::0;::::1;30370::::0;;;;-1:-1:-1;;30300:20:0;;::::1;-1:-1:-1::0;;;30300:20:0::1;-1:-1:-1::0;;30271:18:0;;::::1;-1:-1:-1::0;;;30271:18:0::1;30300:20:::0;;;;-1:-1:-1;;30300:20:0;;;;;;;;;;::::1;30370:28:::0;;;;;;;;::::1;30436:16:::0;;;;30411:14;;;::::1;30436:16:::0;;;;::::1;30463:24:::0;;;::::1;;::::0;;29775:720::o;28431:114::-;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;28512:25:::1;:9;28529:7:::0;28512:16:::1;:25::i;30630:101::-:0;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;30705:9:::1;:18:::0;;::::1;::::0;;::::1;;;-1:-1:-1::0;;30705:18:0;;::::1;::::0;;;::::1;::::0;;30630:101::o;34267:342::-;34410:10;34354:4;34398:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;34398:32:0;;;;;;;;;;34449:35;;;;34441:60;;;;-1:-1:-1;;;34441:60:0;;12023:2:1;34441:60:0;;;12005:21:1;12062:2;12042:18;;;12035:30;-1:-1:-1;;;12081:18:1;;;12074:42;12133:18;;34441:60:0;11821:336:1;34441:60:0;34514:65;34523:10;34535:7;34544:34;34563:15;34544:16;:34;:::i;34514:65::-;-1:-1:-1;34597:4:0;;34267:342;-1:-1:-1;;;34267:342:0:o;32844:167::-;32924:4;32941:40;32951:10;32963:9;32974:6;32941:9;:40::i;29645:118::-;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;29727:12:::1;:28:::0;29645:118::o;29526:107::-;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;29600:16:::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;29600:25:0;;::::1;::::0;;;::::1;::::0;;29526:107::o;29401:113::-;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;29483:16:::1;:23:::0;;-1:-1:-1;;29483:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29401:113::o;28067:91::-;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;28135:9:::1;:15:::0;28067:91::o;28312:113::-;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;28395:22:::1;:9;28409:7:::0;28395:13:::1;:22::i;26977:157::-:0;27026:15;;27087:13;16502:2;27087;:13;:::i;:::-;27074:12;;:26;;;;:::i;:::-;27112:13;16502:2;27112;:13;:::i;:::-;27102:9;;:23;;;;:::i;:::-;27067:59;;;;26977:157;;:::o;30846:128::-;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;30934:32:::1;30953:12;:4:::0;30960:5:::1;30953:12;:::i;:::-;30934:18;:32::i;:::-;30846:128:::0;:::o;28694:130::-;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;28779:37:::1;:21;28808:7:::0;28779:28:::1;:37::i;30739:99::-:0;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;30813:8:::1;:17:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;30813:17:0;;::::1;::::0;;;::::1;::::0;;30739:99::o;31722:89::-;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;31782:14:::1;:21:::0;;-1:-1:-1;;31782:21:0::1;;;::::0;;31722:89::o;8301:236::-;8073:10;8062:7;7972;7999:6;-1:-1:-1;;;;;7999:6:0;;7934:79;8062:7;-1:-1:-1;;;;;8062:21:0;;8054:66;;;;-1:-1:-1;;;8054:66:0;;10699:2:1;8054:66:0;;;10681:21:1;;;10718:18;;;10711:30;10777:34;10757:18;;;10750:62;10829:18;;8054:66:0;10497:356:1;8054:66:0;-1:-1:-1;;;;;8382:22:0;::::1;8374:73;;;::::0;-1:-1:-1;;;8374:73:0;;12364:2:1;8374:73:0::1;::::0;::::1;12346:21:1::0;12403:2;12383:18;;;12376:30;12442:34;12422:18;;;12415:62;-1:-1:-1;;;12493:18:1;;;12486:36;12539:19;;8374:73:0::1;12162:402:1::0;8374:73:0::1;8484:6;::::0;;8463:38:::1;::::0;-1:-1:-1;;;;;8463:38:0;;::::1;::::0;8484:6;::::1;::::0;8463:38:::1;::::0;::::1;8512:6;:17:::0;;-1:-1:-1;;;;;;8512:17:0::1;-1:-1:-1::0;;;;;8512:17:0;;;::::1;::::0;;;::::1;::::0;;8301:236::o;28199:105::-;17787:19;17795:10;17787:7;:19::i;:::-;17779:50;;;;-1:-1:-1;;;17779:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28276:12:0;;;::::1;;::::0;;;:6:::1;:12;::::0;;;;:20;;-1:-1:-1;;28276:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28199:105::o;14353:152::-;14423:4;14447:50;14452:3;-1:-1:-1;;;;;14472:23:0;;14447:4;:50::i;17970:111::-;18023:4;7999:6;;-1:-1:-1;;;;;18046:13:0;;;7999:6;;18046:13;;:27;;-1:-1:-1;;;;;;;18061:12:0;;;;;:6;:12;;;;;;;;;17970:111::o;33347:299::-;-1:-1:-1;;;;;33440:19:0;;33432:49;;;;-1:-1:-1;;;33432:49:0;;12771:2:1;33432:49:0;;;12753:21:1;12810:2;12790:18;;;12783:30;-1:-1:-1;;;12829:18:1;;;12822:47;12886:18;;33432:49:0;12569:341:1;33432:49:0;-1:-1:-1;;;;;33500:21:0;;33492:49;;;;-1:-1:-1;;;33492:49:0;;13117:2:1;33492:49:0;;;13099:21:1;13156:2;13136:18;;;13129:30;-1:-1:-1;;;13175:18:1;;;13168:45;13230:18;;33492:49:0;12915:339:1;33492:49:0;-1:-1:-1;;;;;33554:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33606:32;;689:25:1;;;33606:32:0;;662:18:1;33606:32:0;;;;;;;33347:299;;;:::o;19508:1441::-;-1:-1:-1;;;;;19604:20:0;;19596:51;;;;-1:-1:-1;;;19596:51:0;;13461:2:1;19596:51:0;;;13443:21:1;13500:2;13480:18;;;13473:30;-1:-1:-1;;;13519:18:1;;;13512:48;13577:18;;19596:51:0;13259:342:1;19596:51:0;-1:-1:-1;;;;;19666:23:0;;19658:52;;;;-1:-1:-1;;;19658:52:0;;13808:2:1;19658:52:0;;;13790:21:1;13847:2;13827:18;;;13820:30;-1:-1:-1;;;13866:18:1;;;13859:46;13922:18;;19658:52:0;13606:340:1;19658:52:0;19723:15;19742:26;:9;19761:6;19742:18;:26::i;:::-;:59;;;-1:-1:-1;19772:29:0;:9;19791;19772:18;:29::i;:::-;19742:77;;;-1:-1:-1;;;;;;19805:14:0;;;;;;:6;:14;;;;;;;;19742:77;:98;;;-1:-1:-1;;;;;;19823:17:0;;;;;;:6;:17;;;;;;;;19742:98;19723:118;-1:-1:-1;19854:23:0;-1:-1:-1;;;;;19879:21:0;;19895:4;19879:21;;:49;;-1:-1:-1;;;;;;19904:24:0;;19923:4;19904:24;19879:49;19981:19;;19854:75;;-1:-1:-1;19942:24:0;;-1:-1:-1;;;;;19971:29:0;;;-1:-1:-1;;;19981:19:0;;;;19971:29;:59;;;;-1:-1:-1;;;;;;20004:26:0;;16985:42;20004:26;19971:59;19970:135;;;-1:-1:-1;20058:19:0;;-1:-1:-1;;;;;20045:32:0;;;-1:-1:-1;;;20058:19:0;;;;20045:32;:59;;;;-1:-1:-1;;;;;;20081:23:0;;16985:42;20081:23;20045:59;19942:164;;20122:18;:41;;;;20144:19;20122:41;:55;;;;20167:10;20122:55;20119:823;;;20193:43;20210:6;20218:9;20229:6;20193:16;:43::i;:::-;20119:823;;;20282:14;;;;;;;20277:404;;7972:7;7999:6;-1:-1:-1;;;;;20321:17:0;;;7999:6;;20321:17;;;;:41;;-1:-1:-1;7972:7:0;7999:6;-1:-1:-1;;;;;20342:20:0;;;7999:6;;20342:20;;20321:41;20317:349;;;20391:10;;-1:-1:-1;;;20391:10:0;;;;20387:260;;;20451:9;-1:-1:-1;;;;;20435:28:0;20444:6;-1:-1:-1;;;;;20435:28:0;-1:-1:-1;;;;;;;;;;;20461:1:0;20435:28;;;;689:25:1;;677:2;662:18;;543:177;20435:28:0;;;;;;;;20490:7;;;19508:1441;;;:::o;20387:260::-;20582:14;;;;;;;20574:49;;;;-1:-1:-1;;;20574:49:0;;14343:2:1;20574:49:0;;;14325:21:1;14382:2;14362:18;;;14355:30;14421:25;14401:18;;;14394:53;14464:18;;20574:49:0;14141:347:1;20574:49:0;20732:19;;20713:10;;-1:-1:-1;;;;;20724:27:0;;;-1:-1:-1;;;20732:19:0;;;;20724:27;;:53;;-1:-1:-1;;;;;;20754:23:0;;16985:42;20754:23;20724:53;20815:19;;20713:64;;-1:-1:-1;20792:11:0;;-1:-1:-1;;;;;20804:30:0;;;-1:-1:-1;;;20815:19:0;;;;20804:30;;:59;;-1:-1:-1;;;;;;20837:26:0;;16985:42;20837:26;20804:59;20792:71;;20878:52;20893:6;20900:9;20910:6;20917:5;20923:6;20878:14;:52::i;:::-;20262:680;;20119:823;19585:1364;;;19508:1441;;;:::o;14517:158::-;14590:4;14614:53;14622:3;-1:-1:-1;;;;;14642:23:0;;14614:7;:53::i;24455:1357::-;24343:27;:34;;-1:-1:-1;;24343:34:0;24373:4;24343:34;;;;;;24573:4:::1;24343:27:::0;24555:24;;;::::1;::::0;;;;;;;;24620:13:::1;::::0;24555:24;;24343:27;24606::::1;::::0;-1:-1:-1;;;24620:13:0;::::1;24343:34:::0;24620:13;;::::1;::::0;24606;;::::1;;:27;:::i;:::-;24590:43;;;;24644:19;24664:9;;24644:29;;24701:8;24687:11;:22;24684:127;;;24729:12;::::0;::::1;;24726:74;;;-1:-1:-1::0;24776:8:0;24726:74:::1;24843:11;24827:15;:27;:40;;;-1:-1:-1::0;24856:11:0::1;::::0;::::1;::::0;24827:40:::1;24824:77;;;24883:7;;;;;24824:77;24950:13;::::0;24911:25:::1;::::0;24937:36:::1;::::0;::::1;::::0;24938:25:::1;::::0;24950:13;;::::1;;;24938:11:::0;:25:::1;:::i;:::-;24937:36;;;;:::i;:::-;25024:13;::::0;24911:62;;-1:-1:-1;24984:25:0::1;::::0;25011:36:::1;::::0;::::1;::::0;25012:25:::1;::::0;-1:-1:-1;;;25024:13:0;::::1;;;25012:11:::0;:25:::1;:::i;:::-;25011:36;;;;:::i;:::-;25092:7;::::0;24984:63;;-1:-1:-1;25058:19:0::1;::::0;25079:30:::1;::::0;::::1;::::0;25080:19:::1;::::0;-1:-1:-1;;;25092:7:0;::::1;;;25080:11:::0;:19:::1;:::i;:::-;25079:30;;;;:::i;:::-;25155:8;::::0;25058:51;;-1:-1:-1;25120:20:0::1;::::0;25142:31:::1;::::0;::::1;::::0;25143:20:::1;::::0;-1:-1:-1;;;25155:8:0;::::1;;;25143:11:::0;:20:::1;:::i;:::-;25142:31;;;;:::i;:::-;25120:53;;25197:12;25184:11;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;25220:21:0::1;::::0;-1:-1:-1;25228:12:0;25220:7:::1;:21::i;:::-;25254:16;25271:19;25289:1;25271:17:::0;:19:::1;:::i;:::-;25254:36:::0;-1:-1:-1;25301:19:0::1;25321:26;25254:36:::0;25321:17;:26:::1;:::i;:::-;25301:46:::0;-1:-1:-1;25360:17:0::1;25408:11:::0;25378:29:::1;25390:17:::0;25301:46;25378:29:::1;:::i;:::-;:41;;;;:::i;:::-;25360:59:::0;-1:-1:-1;25458:21:0::1;25490:27;25360:59:::0;25490:16:::1;:27::i;:::-;25528:14;25544:41;25568:17:::0;25544:21:::1;:41;:::i;:::-;25528:58:::0;-1:-1:-1;25597:14:0::1;25635:9:::0;25615:18:::1;25622:11:::0;25528:58;25615:18:::1;:::i;:::-;25614:30;;;;:::i;:::-;25597:47;;25655:31;25669:8;25679:6;25655:13;:31::i;:::-;25697:20;25719:41;25743:17:::0;25719:21:::1;:41;:::i;:::-;25697:64;;25772:32;25791:12;25772:18;:32::i;:::-;24520:1292;;;;;;;;;;;;;;24388:1;-1:-1:-1::0;24400:27:0;:35;;-1:-1:-1;;24400:35:0;;;24455:1357::o;12083:305::-;12146:4;13166:19;;;:12;;;:19;;;;;;12163:218;;-1:-1:-1;12206:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;12280:18;;12258:19;;;:12;;;:19;;;;;;:40;;;;12313:11;;12163:218;-1:-1:-1;12364:5:0;12357:12;;14687:167;-1:-1:-1;;;;;14821:23:0;;14767:4;13166:19;;;:12;;;:19;;;;;;:24;;14791:55;13069:129;22746:349;-1:-1:-1;;;;;22865:17:0;;22841:21;22865:17;;;:9;:17;;;;;;22901:23;;;;22893:60;;;;-1:-1:-1;;;22893:60:0;;14695:2:1;22893:60:0;;;14677:21:1;14734:2;14714:18;;;14707:30;-1:-1:-1;;;14753:18:1;;;14746:54;14817:18;;22893:60:0;14493:348:1;22893:60:0;22967:27;22980:6;22987;22967:12;:27::i;:::-;23008:28;23018:9;23029:6;23008:9;:28::i;:::-;23070:9;-1:-1:-1;;;;;23054:33:0;23063:6;-1:-1:-1;;;;;23054:33:0;-1:-1:-1;;;;;;;;;;;23080:6:0;23054:33;;;;689:25:1;;677:2;662:18;;543:177;23054:33:0;;;;;;;;22830:265;22746:349;;;:::o;20965:1769::-;-1:-1:-1;;;;;21108:20:0;;;21081:24;21108:20;;;:9;:20;;;;;;;21163:17;;;;;;;;21199:23;;;;21191:60;;;;-1:-1:-1;;;21191:60:0;;14695:2:1;21191:60:0;;;14677:21:1;14734:2;14714:18;;;14707:30;-1:-1:-1;;;14753:18:1;;;14746:54;14817:18;;21191:60:0;14493:348:1;21191:60:0;21286:1;21276:9;;:11;;;;:::i;:::-;21264:9;:23;21300:9;21320:891;;;;21349:38;:21;21380:6;21349:30;:38::i;:::-;21345:247;;-1:-1:-1;;;;;21426:17:0;;;;;;:9;:17;;;;;;21445:15;-1:-1:-1;21426:34:0;;:52;;-1:-1:-1;21462:16:0;;;;;;;21426:52;21418:82;;;;-1:-1:-1;;;21418:82:0;;15048:2:1;21418:82:0;;;15030:21:1;15087:2;15067:18;;;15060:30;-1:-1:-1;;;15106:18:1;;;15099:48;15164:18;;21418:82:0;14846:342:1;21418:82:0;21564:12;;21548:28;;:15;:28;:::i;:::-;-1:-1:-1;;;;;21530:17:0;;;;;;:9;:17;;;;;:46;21345:247;21636:9;;21628:6;:17;;21620:44;;;;-1:-1:-1;;;21620:44:0;;15395:2:1;21620:44:0;;;15377:21:1;15434:2;15414:18;;;15407:30;-1:-1:-1;;;15453:18:1;;;15446:45;15508:18;;21620:44:0;15193:339:1;21620:44:0;-1:-1:-1;21683:8:0;;;;;;;21320:891;;;21714:5;21711:500;;;21775:12;;21750:23;21767:6;21750:16;:23;:::i;:::-;:37;;21742:65;;;;-1:-1:-1;;;21742:65:0;;;;;;;:::i;:::-;21838:8;;21830:6;:16;;21822:45;;;;-1:-1:-1;;;21822:45:0;;;;;;;:::i;:::-;-1:-1:-1;21886:7:0;;;;21711:500;;;21968:12;;21943:23;21960:6;21943:16;:23;:::i;:::-;:37;;21935:65;;;;-1:-1:-1;;;21935:65:0;;;;;;;:::i;:::-;22033:38;:21;22064:6;22033:30;:38::i;:::-;22029:139;;-1:-1:-1;;;;;22098:17:0;;;;;;:9;:17;;;;;;22117:15;-1:-1:-1;22098:34:0;;:52;;-1:-1:-1;22134:16:0;;;;;;;22098:52;22090:78;;;;-1:-1:-1;;;22090:78:0;;16084:2:1;22090:78:0;;;16066:21:1;16123:2;16103:18;;;16096:30;-1:-1:-1;;;16142:18:1;;;16135:44;16196:18;;22090:78:0;15882:338:1;22090:78:0;-1:-1:-1;22187:12:0;;;;;;;21711:500;22243:19;;-1:-1:-1;;;;;22235:27:0;;;-1:-1:-1;;;22243:19:0;;;;22235:27;;;;22234:50;;-1:-1:-1;22267:16:0;;;;22266:17;22234:50;:82;;;;-1:-1:-1;22288:27:0;;;;22287:28;22234:82;22231:126;;;22331:26;22350:6;22331:18;:26::i;:::-;22457:7;;22371:21;;22393:72;;22407:6;;22415:3;;22457:7;-1:-1:-1;;;22457:7:0;;;;;-1:-1:-1;;;22448:8:0;;;;;22420:27;;22434:13;;;;;;-1:-1:-1;;;22420:13:0;;;;:27;:::i;:::-;:36;;;;:::i;:::-;:44;;;;:::i;:::-;22393:13;:72::i;:::-;22371:94;-1:-1:-1;22479:19:0;22499:22;22371:94;22499:6;:22;:::i;:::-;22479:42;;22537:27;22550:6;22557;22537:12;:27::i;:::-;22598:4;22580:24;;;;:9;:24;;;;;:41;;22608:13;;22580:24;:41;;22608:13;;22580:41;:::i;:::-;;;;-1:-1:-1;22637:33:0;;-1:-1:-1;22647:9:0;22658:11;22637:9;:33::i;:::-;22704:9;-1:-1:-1;;;;;22688:38:0;22697:6;-1:-1:-1;;;;;22688:38:0;-1:-1:-1;;;;;;;;;;;22714:11:0;22688:38;;;;689:25:1;;677:2;662:18;;543:177;22688:38:0;;;;;;;;21070:1664;;;;;20965:1769;;;;;:::o;12398:659::-;12464:4;12505:19;;;:12;;;:19;;;;;;12541:15;;12537:513;;12590:21;12614:14;12627:1;12614:10;:14;:::i;:::-;12663:18;;12590:38;;-1:-1:-1;12643:17:0;;12663:22;;12684:1;;12663:22;:::i;:::-;12643:42;;12711:17;12731:3;:11;;12743:9;12731:22;;;;;;;;:::i;:::-;;;;;;;;;12711:42;;12806:9;12777:3;:11;;12789:13;12777:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;12837:23;;;:12;;;:23;;;;;;:36;;;12898:17;;12837:3;;12898:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;12946:3;:12;;:19;12959:5;12946:19;;;;;;;;;;;12939:26;;;12989:4;12982:11;;;;;;;;12537:513;13033:5;13026:12;;;;;26725:240;26803:4;26785:24;;;;:9;:24;;;;;;:34;-1:-1:-1;26785:34:0;26777:43;;;;;;26849:4;26831:24;;;;:9;:24;;;;;:34;;26859:6;;26831:24;:34;;26859:6;;26831:34;:::i;:::-;;;;;;;;26898:6;26876:18;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;26920:37:0;;689:25:1;;;17065:42:0;;26937:4;;-1:-1:-1;;;;;;;;;;;26920:37:0;677:2:1;662:18;26920:37:0;;;;;;;26725:240;:::o;25824:455::-;25917:14;;25885:56;;25902:4;;-1:-1:-1;;;;;25917:14:0;25934:6;25885:8;:56::i;:::-;25976:16;;;25990:1;25976:16;;;;;;;;25952:21;;25976:16;;;;;;;;;;-1:-1:-1;25976:16:0;25952:40;;26021:4;26003;26008:1;26003:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26003:23:0;;;:7;;;;;;;;;;:23;;;;26047:14;;:21;;;-1:-1:-1;;;26047:21:0;;;;:14;;;;;:19;;:21;;;;;26003:7;;26047:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26037:4;26042:1;26037:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26037:31:0;;;:7;;;;;;;;;:31;26081:14;;:190;;-1:-1:-1;;;26081:190:0;;:14;;;:65;;:190;;26161:6;;26081:14;;26198:4;;26225;;26245:15;;26081:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26291:397;26385:9;26373:10;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;26437:14:0;;26405:61;;26422:4;;-1:-1:-1;;;;;26437:14:0;26454:11;26405:8;:61::i;:::-;26477:14;;:203;;-1:-1:-1;;;26477:203:0;;26548:4;26477:203;;;18203:34:1;;;18253:18;;;18246:34;;;26477:14:0;18296:18:1;;;18289:34;;;18339:18;;;18332:34;18382:19;;;18375:44;26654:15:0;18435:19:1;;;18428:35;-1:-1:-1;;;;;26477:14:0;;;;:30;;26515:9;;18137:19:1;;26477:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26291:397;;:::o;23955:263::-;24059:14;;24021:22;;24075:3;;24047:26;;24059:14;;24047:9;:26;:::i;:::-;24046:32;;;;:::i;:::-;24121:8;;24021:57;;-1:-1:-1;24089:16:0;;24131:3;;24109:20;;24121:8;;;;;24109:9;:20;:::i;:::-;24108:26;;;;:::i;:::-;24089:45;;24165:14;24147:16;;:32;;;;;;;:::i;:::-;;;;;;;;24202:8;24190:10;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;23955:263:0:o;23442:158::-;-1:-1:-1;;;;;23534:15:0;;23516:17;23534:15;;;:9;:15;;;;;;:22;;23550:6;;23534:22;:::i;:::-;-1:-1:-1;;;;;23567:15:0;;;;;;;:9;:15;;;;;:25;;;;-1:-1:-1;;23442:158:0:o;23279:155::-;-1:-1:-1;;;;;23368:15:0;;23350:17;23368:15;;;:9;:15;;;;;;:22;;23384:6;;23368:22;:::i;23107:156::-;23197:7;23250:5;23236:10;23225:21;;23232:3;23225:10;;:6;:10;;;;:::i;:::-;:21;;;;:::i;:::-;23224:31;;;;:::i;:::-;23217:38;23107:156;-1:-1:-1;;;;23107:156: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;914:597::-;1026:4;1055:2;1084;1073:9;1066:21;1116:6;1110:13;1159:6;1154:2;1143:9;1139:18;1132:34;1184:1;1194:140;1208:6;1205:1;1202:13;1194:140;;;1303:14;;;1299:23;;1293:30;1269:17;;;1288:2;1265:26;1258:66;1223:10;;1194:140;;;1352:6;1349:1;1346:13;1343:91;;;1422:1;1417:2;1408:6;1397:9;1393:22;1389:31;1382:42;1343:91;-1:-1:-1;1495:2:1;1474:15;-1:-1:-1;;1470:29:1;1455:45;;;;1502:2;1451:54;;914:597;-1:-1:-1;;;914:597:1:o;1516:247::-;1575:6;1628:2;1616:9;1607:7;1603:23;1599:32;1596:52;;;1644:1;1641;1634:12;1596:52;1683:9;1670:23;1702:31;1727:5;1702:31;:::i;1768:315::-;1836:6;1844;1897:2;1885:9;1876:7;1872:23;1868:32;1865:52;;;1913:1;1910;1903:12;1865:52;1952:9;1939:23;1971:31;1996:5;1971:31;:::i;:::-;2021:5;2073:2;2058:18;;;;2045:32;;-1:-1:-1;;;1768:315:1:o;2280:160::-;2345:20;;2401:13;;2394:21;2384:32;;2374:60;;2430:1;2427;2420:12;2374:60;2280:160;;;:::o;2445:180::-;2501:6;2554:2;2542:9;2533:7;2529:23;2525:32;2522:52;;;2570:1;2567;2560:12;2522:52;2593:26;2609:9;2593:26;:::i;2823:456::-;2900:6;2908;2916;2969:2;2957:9;2948:7;2944:23;2940:32;2937:52;;;2985:1;2982;2975:12;2937:52;3024:9;3011:23;3043:31;3068:5;3043:31;:::i;:::-;3093:5;-1:-1:-1;3150:2:1;3135:18;;3122:32;3163:33;3122:32;3163:33;:::i;:::-;2823:456;;3215:7;;-1:-1:-1;;;3269:2:1;3254:18;;;;3241:32;;2823:456::o;3492:316::-;3569:6;3577;3585;3638:2;3626:9;3617:7;3613:23;3609:32;3606:52;;;3654:1;3651;3644:12;3606:52;-1:-1:-1;;3677:23:1;;;3747:2;3732:18;;3719:32;;-1:-1:-1;3798:2:1;3783:18;;;3770:32;;3492:316;-1:-1:-1;3492:316:1:o;3813:156::-;3879:20;;3939:4;3928:16;;3918:27;;3908:55;;3959:1;3956;3949:12;3974:182;4031:6;4084:2;4072:9;4063:7;4059:23;4055:32;4052:52;;;4100:1;4097;4090:12;4052:52;4123:27;4140:9;4123:27;:::i;4161:606::-;4260:6;4268;4276;4284;4292;4300;4308;4361:3;4349:9;4340:7;4336:23;4332:33;4329:53;;;4378:1;4375;4368:12;4329:53;4401:27;4418:9;4401:27;:::i;:::-;4391:37;;4447:36;4479:2;4468:9;4464:18;4447:36;:::i;:::-;4437:46;;4502:36;4534:2;4523:9;4519:18;4502:36;:::i;:::-;4492:46;;4557:36;4589:2;4578:9;4574:18;4557:36;:::i;:::-;4547:46;;4612:37;4644:3;4633:9;4629:19;4612:37;:::i;:::-;4602:47;;4668:37;4700:3;4689:9;4685:19;4668:37;:::i;:::-;4658:47;;4724:37;4756:3;4745:9;4741:19;4724:37;:::i;:::-;4714:47;;4161:606;;;;;;;;;;:::o;5004:180::-;5063:6;5116:2;5104:9;5095:7;5091:23;5087:32;5084:52;;;5132:1;5129;5122:12;5084:52;-1:-1:-1;5155:23:1;;5004:180;-1:-1:-1;5004:180:1:o;5442:315::-;5507:6;5515;5568:2;5556:9;5547:7;5543:23;5539:32;5536:52;;;5584:1;5581;5574:12;5536:52;5623:9;5610:23;5642:31;5667:5;5642:31;:::i;:::-;5692:5;-1:-1:-1;5716:35:1;5747:2;5732:18;;5716:35;:::i;:::-;5706:45;;5442:315;;;;;:::o;6374:342::-;6576:2;6558:21;;;6615:2;6595:18;;;6588:30;-1:-1:-1;;;6649:2:1;6634:18;;6627:48;6707:2;6692:18;;6374:342::o;7618:127::-;7679:10;7674:3;7670:20;7667:1;7660:31;7710:4;7707:1;7700:15;7734:4;7731:1;7724:15;7750:422;7839:1;7882:5;7839:1;7896:270;7917:7;7907:8;7904:21;7896:270;;;7976:4;7972:1;7968:6;7964:17;7958:4;7955:27;7952:53;;;7985:18;;:::i;:::-;8035:7;8025:8;8021:22;8018:55;;;8055:16;;;;8018:55;8134:22;;;;8094:15;;;;7896:270;;;7900:3;7750:422;;;;;:::o;8177:806::-;8226:5;8256:8;8246:80;;-1:-1:-1;8297:1:1;8311:5;;8246:80;8345:4;8335:76;;-1:-1:-1;8382:1:1;8396:5;;8335:76;8427:4;8445:1;8440:59;;;;8513:1;8508:130;;;;8420:218;;8440:59;8470:1;8461:10;;8484:5;;;8508:130;8545:3;8535:8;8532:17;8529:43;;;8552:18;;:::i;:::-;-1:-1:-1;;8608:1:1;8594:16;;8623:5;;8420:218;;8722:2;8712:8;8709:16;8703:3;8697:4;8694:13;8690:36;8684:2;8674:8;8671:16;8666:2;8660:4;8657:12;8653:35;8650:77;8647:159;;;-1:-1:-1;8759:19:1;;;8791:5;;8647:159;8838:34;8863:8;8857:4;8838:34;:::i;:::-;8908:6;8904:1;8900:6;8896:19;8887:7;8884:32;8881:58;;;8919:18;;:::i;:::-;8957:20;;8177:806;-1:-1:-1;;;8177:806:1:o;8988:140::-;9046:5;9075:47;9116:4;9106:8;9102:19;9096:4;9075:47;:::i;9133:168::-;9173:7;9239:1;9235;9231:6;9227:14;9224:1;9221:21;9216:1;9209:9;9202:17;9198:45;9195:71;;;9246:18;;:::i;:::-;-1:-1:-1;9286:9:1;;9133:168::o;9655:125::-;9695:4;9723:1;9720;9717:8;9714:34;;;9728:18;;:::i;:::-;-1:-1:-1;9765:9:1;;9655:125::o;9785:128::-;9825:3;9856:1;9852:6;9849:1;9846:13;9843:39;;;9862:18;;:::i;:::-;-1:-1:-1;9898:9:1;;9785:128::o;9918:217::-;9958:1;9984;9974:132;;10028:10;10023:3;10019:20;10016:1;10009:31;10063:4;10060:1;10053:15;10091:4;10088:1;10081:15;9974:132;-1:-1:-1;10120:9:1;;9918:217::o;10140:352::-;10342:2;10324:21;;;10381:2;10361:18;;;10354:30;10420;10415:2;10400:18;;10393:58;10483:2;10468:18;;10140:352::o;10858:342::-;11060:2;11042:21;;;11099:2;11079:18;;;11072:30;-1:-1:-1;;;11133:2:1;11118:18;;11111:48;11191:2;11176:18;;10858:342::o;11205:204::-;11243:3;11279:4;11276:1;11272:12;11311:4;11308:1;11304:12;11346:3;11340:4;11336:14;11331:3;11328:23;11325:49;;;11354:18;;:::i;:::-;11390:13;;11205:204;-1:-1:-1;;;11205:204:1:o;15537:340::-;15739:2;15721:21;;;15778:2;15758:18;;;15751:30;-1:-1:-1;;;15812:2:1;15797:18;;15790:46;15868:2;15853:18;;15537:340::o;16225:127::-;16286:10;16281:3;16277:20;16274:1;16267:31;16317:4;16314:1;16307:15;16341:4;16338:1;16331:15;16357:127;16418:10;16413:3;16409:20;16406:1;16399:31;16449:4;16446:1;16439:15;16473:4;16470:1;16463:15;16621:251;16691:6;16744:2;16732:9;16723:7;16719:23;16715:32;16712:52;;;16760:1;16757;16750:12;16712:52;16792:9;16786:16;16811:31;16836:5;16811:31;:::i;16877:980::-;17139:4;17187:3;17176:9;17172:19;17218:6;17207:9;17200:25;17244:2;17282:6;17277:2;17266:9;17262:18;17255:34;17325:3;17320:2;17309:9;17305:18;17298:31;17349:6;17384;17378:13;17415:6;17407;17400:22;17453:3;17442:9;17438:19;17431:26;;17492:2;17484:6;17480:15;17466:29;;17513:1;17523:195;17537:6;17534:1;17531:13;17523:195;;;17602:13;;-1:-1:-1;;;;;17598:39:1;17586:52;;17693:15;;;;17658:12;;;;17634:1;17552:9;17523:195;;;-1:-1:-1;;;;;;;17774:32:1;;;;17769:2;17754:18;;17747:60;-1:-1:-1;;;17838:3:1;17823:19;17816:35;17735:3;16877:980;-1:-1:-1;;;16877:980:1:o;18474:306::-;18562:6;18570;18578;18631:2;18619:9;18610:7;18606:23;18602:32;18599:52;;;18647:1;18644;18637:12;18599:52;18676:9;18670:16;18660:26;;18726:2;18715:9;18711:18;18705:25;18695:35;;18770:2;18759:9;18755:18;18749:25;18739:35;;18474:306;;;;;:::o

Swarm Source

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