ETH Price: $3,336.19 (-1.22%)
Gas: 5.83 Gwei

Token

mona.finance (MOLI)
 

Overview

Max Total Supply

46,321.855476348740354931 MOLI

Holders

66

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
477.380777703373071008 MOLI

Value
$0.00
0xb9086a3e7ebb0233d5a3e325821a1f0b3fd1828e
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:
Mona__Token

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity Multiple files format)

File 3 of 5: MONA__Token.sol
//SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.7.0;

import "./SafeMath.sol";
import "./IERC20.sol";
import "./Address.sol";
import "./Ownable.sol";

contract Mona__Token is IERC20, Context, Ownable {
    
    using SafeMath for uint;
    using Address for address;
 
    string public _symbol;
    string public _name;
    uint8 public _decimals;
    
    uint public _totalSupply             = 70000 ether;
    uint256 public presaleTokens         = 27500 ether;
    uint256 public poolMoliMoliTokens    = 10000 ether;
    uint256 public poolMoliEthTokens     = 22000 ether;
    uint256 public poolWBTCTokens         = 1500 ether;
    uint256 public poolWETHTokens         = 1500 ether;
    uint256 public devMaxSuply            = 7500 ether;
    uint256 public devDailyFund             = 25 ether;
    
    uint256 public TokenListedTime;
    uint256 public lastDevGetFounds         = 0;
    uint256 public devGetFundsTimelock      = 1 days;
    
    address public presaleAccount;
    address public poolAccountMoliMoli;
    address public poolAccountMoliEth;
    address public poolAccountWBTC;
    address public poolAccountWETH;
    
    address public _uniswapAddress;
    
    bool public txispaused = true;

    mapping(address => uint) _balances;
    mapping (address => bool) public _whitelistedAddress;
    mapping (address => bool) public _farmingAddress;
    
    mapping(address => mapping(address => uint)) _allowances;
    
    constructor() {
        _symbol = "MOLI";
        _name = "mona.finance";
        _decimals = 18;
        
        _whitelistedAddress[ address(0) ] = true;
        _whitelistedAddress[ address(this) ] = true;
        _whitelistedAddress[ _owner ] = true;
        
        TokenListedTime = block.timestamp;
        
        lastDevGetFounds = block.timestamp.add( devGetFundsTimelock );
        devMaxSuply = devMaxSuply.sub( devDailyFund ); 
        _balances[_owner] = devDailyFund;
        
        emit Transfer(address(0), _owner, devDailyFund);
    }

    receive() external payable {
        revert();
    }
    
   
    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }
    
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
    
    function burn(uint amount) public {
        require(amount > 0);
        require(balanceOf(msg.sender) >= amount);
        _burn(msg.sender, amount);
    }
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, txBurn( amount, _msgSender(), recipient ) );
        return true;
    }

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

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

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


    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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 _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _approve(address _owner, address spender, uint256 amount) internal virtual {
        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 _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
    
    
    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }
    
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }
    
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
    function recoverERC20(address tokenAddress, uint256 tokenAmount) public  onlyOwner{
        IERC20(tokenAddress).transfer(_owner, tokenAmount);
    }

    function registerPresale( address _presaleAccount ) public onlyOwner returns (bool) {
        require( presaleAccount == address(0), "registerPresale: has already been done");
        
        presaleAccount = _presaleAccount; 
        _balances[presaleAccount] = presaleTokens;
        
        emit Transfer(address(0), presaleAccount, presaleTokens);
        
        return true;
    }
    
    function registerPoolMoliMoli( address _poolAccount ) public onlyOwner returns (bool) {
        require( poolAccountMoliMoli == address(0), "registerPoolMoliMoli: has already been done");

        poolAccountMoliMoli = _poolAccount; 
        _balances[ _poolAccount ] = poolMoliMoliTokens;
        _farmingAddress[ _poolAccount ] = true;
        
        emit Transfer(address(0), _poolAccount, poolMoliMoliTokens);
        
        return true;
    }
    function registerPoolMoliEth( address _poolAccount ) public onlyOwner returns (bool) {
        require( poolAccountMoliEth == address(0), "registerPoolMoliEth: has already been done");
        
        poolAccountMoliEth = _poolAccount; 
        _balances[ _poolAccount ] = poolMoliEthTokens;
        _farmingAddress[ _poolAccount ] = true;
        
        emit Transfer(address(0), _poolAccount, poolMoliEthTokens);
        
        return true;
    }
    function registerPoolWBTC( address _poolAccount ) public onlyOwner returns (bool) {
        require( poolAccountWBTC == address(0), "registerPoolWBTC: has already been done");
        
        poolAccountWBTC = _poolAccount; 
        _balances[ _poolAccount ] = poolWBTCTokens;
        _farmingAddress[ _poolAccount ] = true;
        
        emit Transfer(address(0), _poolAccount, poolWBTCTokens);
        
        return true;
    }
    function registerPoolWETH( address _poolAccount ) public onlyOwner returns (bool) {
        require( poolAccountWETH == address(0), "registerPoolMoliEth: has already been done");
        
        poolAccountWETH = _poolAccount; 
        _balances[ _poolAccount ] = poolWETHTokens;
        _farmingAddress[ _poolAccount ] = true;
        
        emit Transfer(address(0), _poolAccount, poolWETHTokens);
        
        return true;
    }
    function registerUniswapPairAddress( address _account ) public onlyOwner returns (bool) { 
        _uniswapAddress = _account; 
        return true;
    }
    
    // FEATURE #1
    function getDevFunds() public onlyOwner returns (bool) {
        
        require(devMaxSuply > 0, 'dev funds is empty');
 
        uint256 sinceLastGetFunds = block.timestamp.add( 1 ).sub( lastDevGetFounds.add( 1 ) );
        uint256 daysCount = sinceLastGetFunds.div( devGetFundsTimelock );
        if(daysCount > 0){
            
            uint256 devAmount = devDailyFund.mul( daysCount );
            
            lastDevGetFounds = lastDevGetFounds.add( daysCount.mul( devGetFundsTimelock ) );
            devMaxSuply = devMaxSuply.sub( devAmount ); 
            
            _balances[ _owner ] = _balances[_owner].add( devAmount );
            
            emit Transfer(address(0), _owner, devAmount);
            
            return true;
        
        }
        
        return false;
        
    }
    
    // FEATURE #9
    function addToWhitelist(address account) public onlyOwner returns (bool) { 
        _whitelistedAddress[ account ] = true;
        return true;
    }
    
    // FEATURE #9
    function removeFromWhitelist(address account) public onlyOwner returns (bool) { 
        _whitelistedAddress[ account ] = false;
        return true;
    }

    // FEATURE #5
    function pauseToken() public onlyOwner returns (bool) { 
        txispaused = true;
    }
    
    // FEATURE #5
    function unPauseToken() public onlyOwner returns (bool) { 
        txispaused = false;
    }
    
    // FEATURE #7, #8
    function txBurn( uint256 _amount, address _from, address _to ) internal returns (uint256) {
        
        if ( _whitelistedAddress[ _from ] ){
            return _amount;
        }
        if ( _whitelistedAddress[ _to ] ){
            return _amount;
        }
        if( presaleAccount == _from ){
            return _amount;
        }
        if( _farmingAddress[ _to ] ){
            return _amount;
        }
        if ( txispaused ) {
            revert("token is paused");
        }
        
        uint256 burnAmount = 0;
        if( _farmingAddress[ _from ] ){
            
            uint256 sinceLaunch = block.timestamp.add( 1 ).sub( TokenListedTime.add( 1 ) );
            uint256 burnPercentage = 10;
            
                 if(sinceLaunch > 12 days){ burnPercentage = 10; }
            else if(sinceLaunch > 11 days){ burnPercentage = 11; }
            else if(sinceLaunch > 10 days){ burnPercentage = 12; }
            else if(sinceLaunch >  9 days){ burnPercentage = 13; }
            else if(sinceLaunch >  8 days){ burnPercentage = 14; }
            else if(sinceLaunch >  7 days){ burnPercentage = 15; }
            else if(sinceLaunch >  6 days){ burnPercentage = 16; }
            else if(sinceLaunch >  5 days){ burnPercentage = 17; }
            else if(sinceLaunch >  4 days){ burnPercentage = 18; }
            else if(sinceLaunch >  3 days){ burnPercentage = 19; }
            else {                          burnPercentage = 20; }
            
            
            burnAmount = _amount.mul( burnPercentage ).div( 100 );
            
        }else if( _to == _uniswapAddress ){ 
            
            uint256 sinceLaunch = block.timestamp.add( 1 ).sub( TokenListedTime.add( 1 ) );
            uint256 burnPercentage = 3;
            
                 if(sinceLaunch > 9 days){ burnPercentage =  3; }
            else if(sinceLaunch > 8 days){ burnPercentage =  4; }
            else if(sinceLaunch > 7 days){ burnPercentage =  5; }
            else if(sinceLaunch > 6 days){ burnPercentage =  6; }
            else if(sinceLaunch > 5 days){ burnPercentage =  7; }
            else if(sinceLaunch > 4 days){ burnPercentage =  8; }
            else if(sinceLaunch > 3 days){ burnPercentage =  9; }
            else {                         burnPercentage = 10; }
             
             
            burnAmount = _amount.mul( burnPercentage ).div( 100 );
            
        }else{
            return _amount;
        }
        
        if( burnAmount > 0){
            _burn( _from, burnAmount);
        }
        
        return _amount.sub( burnAmount );
        
    }
}

File 1 of 5: Address.sol
// SPDX-License-Identifier: MIT
 

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 2 of 5: IERC20.sol
//SPDX-License-Identifier: UNLICENSED


interface IERC20 {
    function totalSupply() external view returns (uint);
    function balanceOf(address who) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function transfer(address to, uint value) external returns (bool);
    function approve(address spender, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
}

File 4 of 5: Ownable.sol
//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.7.0;

 contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 contract Ownable is Context {
    address _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current 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;
    }
}

File 5 of 5: SafeMath.sol
// SPDX-License-Identifier: MIT


library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"TokenListedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_farmingAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_whitelistedAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devDailyFund","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devGetFundsTimelock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devMaxSuply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDevFunds","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"lastDevGetFounds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"poolAccountMoliEth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolAccountMoliMoli","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolAccountWBTC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolAccountWETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolMoliEthTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolMoliMoliTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolWBTCTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolWETHTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_poolAccount","type":"address"}],"name":"registerPoolMoliEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_poolAccount","type":"address"}],"name":"registerPoolMoliMoli","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_poolAccount","type":"address"}],"name":"registerPoolWBTC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_poolAccount","type":"address"}],"name":"registerPoolWETH","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_presaleAccount","type":"address"}],"name":"registerPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"registerUniswapPairAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"txispaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unPauseToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052690ed2b525841adfc000006004556905d2c72a2ac16a30000060055569021e19e0c9bab24000006006556904a89f54ef0121c00000600755685150ae84a8cdf00000600855685150ae84a8cdf000006009556901969368974c05b00000600a5568015af1d78b58c40000600b556000600d5562015180600e5560016014806101000a81548160ff021916908315150217905550348015620000a457600080fd5b506000620000b76200047860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040518060400160405280600481526020017f4d4f4c490000000000000000000000000000000000000000000000000000000081525060019080519060200190620001a29291906200061f565b506040518060400160405280600c81526020017f6d6f6e612e66696e616e6365000000000000000000000000000000000000000081525060029080519060200190620001f09291906200061f565b506012600360006101000a81548160ff021916908360ff1602179055506001601660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555042600c8190555062000359600e54426200048060201b620035c91790919060201c565b600d819055506200037d600b54600a546200050960201b620036511790919060201c565b600a81905550600b54601560008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040518082815260200191505060405180910390a3620006d5565b600033905090565b600080828401905083811015620004ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006200055383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200055b60201b60201c565b905092915050565b60008383111582906200060c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620005d0578082015181840152602081019050620005b3565b50505050905090810190601f168015620005fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620006575760008555620006a3565b82601f106200067257805160ff1916838001178555620006a3565b82800160010185558215620006a3579182015b82811115620006a257825182559160200191906001019062000685565b5b509050620006b29190620006b6565b5090565b5b80821115620006d1576000816000905550600101620006b7565b5090565b61470d80620006e56000396000f3fe6080604052600436106102cd5760003560e01c806370a0823111610175578063adf6e486116100dc578063d28d885211610095578063ef598e081161006f578063ef598e081461112c578063f26e522214611193578063f2fde38b146111be578063feec600d1461120f576102d7565b8063d28d885214610fb0578063dd62ed3e14611040578063e43252d7146110c5576102d7565b8063adf6e48614610df3578063b09f126614610e20578063ca02289814610eb0578063cc6dfdd714610ef1578063d185687614610f58578063d19b6d0b14610f85576102d7565b80638da5cb5b1161012e5780638da5cb5b14610bae5780639426741214610bef57806395d89b4114610c56578063a0937dc214610ce6578063a457c2d714610d11578063a9059cbb14610d82576102d7565b806370a0823114610a1a578063715018a614610a7f57806377ed762a14610a9657806384b5a04614610ac15780638980f11f14610aec5780638ab1d68114610b47576102d7565b8063313ce5671161023457806342966c68116101ed5780635ae50512116101c75780635ae50512146109165780636064d52714610957578063662f29cb146109985780636e869b69146109d9576102d7565b806342966c68146108855780634a0b7f32146108c057806358207ae7146108eb576102d7565b8063313ce5671461071f57806332424aa31461074d578063345dc7b21461077b57806339509351146107bc5780633eaaf86b1461082d578063416f528614610858576102d7565b806318160ddd1161028657806318160ddd1461050157806323b872dd1461052c578063291085db146105bd5780632c349627146106245780632d5d63be146106515780632ee9636e146106b8576102d7565b806302509c65146102dc57806305e7cf3e1461034357806306fdde031461036e578063095ea7b3146103fe5780630a09815c1461046f57806311c065b71461049a576102d7565b366102d757600080fd5b600080fd5b3480156102e857600080fd5b5061032b600480360360208110156102ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061123a565b60405180821515815260200191505060405180910390f35b34801561034f57600080fd5b5061035861125a565b6040518082815260200191505060405180910390f35b34801561037a57600080fd5b50610383611260565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103c35780820151818401526020810190506103a8565b50505050905090810190601f1680156103f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561040a57600080fd5b506104576004803603604081101561042157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611302565b60405180821515815260200191505060405180910390f35b34801561047b57600080fd5b50610484611320565b6040518082815260200191505060405180910390f35b3480156104a657600080fd5b506104e9600480360360208110156104bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611326565b60405180821515815260200191505060405180910390f35b34801561050d57600080fd5b506105166115d3565b6040518082815260200191505060405180910390f35b34801561053857600080fd5b506105a56004803603606081101561054f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115dd565b60405180821515815260200191505060405180910390f35b3480156105c957600080fd5b5061060c600480360360208110156105e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116c0565b60405180821515815260200191505060405180910390f35b34801561063057600080fd5b506106396116e0565b60405180821515815260200191505060405180910390f35b34801561065d57600080fd5b506106a06004803603602081101561067457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117c7565b60405180821515815260200191505060405180910390f35b3480156106c457600080fd5b50610707600480360360208110156106db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a88565b60405180821515815260200191505060405180910390f35b34801561072b57600080fd5b50610734611d49565b604051808260ff16815260200191505060405180910390f35b34801561075957600080fd5b50610762611d60565b604051808260ff16815260200191505060405180910390f35b34801561078757600080fd5b50610790611d73565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107c857600080fd5b50610815600480360360408110156107df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d99565b60405180821515815260200191505060405180910390f35b34801561083957600080fd5b50610842611e4c565b6040518082815260200191505060405180910390f35b34801561086457600080fd5b5061086d611e52565b60405180821515815260200191505060405180910390f35b34801561089157600080fd5b506108be600480360360208110156108a857600080fd5b8101908080359060200190929190505050611e63565b005b3480156108cc57600080fd5b506108d5611e92565b6040518082815260200191505060405180910390f35b3480156108f757600080fd5b50610900611e98565b6040518082815260200191505060405180910390f35b34801561092257600080fd5b5061092b611e9e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561096357600080fd5b5061096c611ec4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109a457600080fd5b506109ad611eea565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109e557600080fd5b506109ee611f10565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a2657600080fd5b50610a6960048036036020811015610a3d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f36565b6040518082815260200191505060405180910390f35b348015610a8b57600080fd5b50610a94611f7f565b005b348015610aa257600080fd5b50610aab612105565b6040518082815260200191505060405180910390f35b348015610acd57600080fd5b50610ad661210b565b6040518082815260200191505060405180910390f35b348015610af857600080fd5b50610b4560048036036040811015610b0f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612111565b005b348015610b5357600080fd5b50610b9660048036036020811015610b6a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122aa565b60405180821515815260200191505060405180910390f35b348015610bba57600080fd5b50610bc36123d5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bfb57600080fd5b50610c3e60048036036020811015610c1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123fe565b60405180821515815260200191505060405180910390f35b348015610c6257600080fd5b50610c6b6126bf565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610cab578082015181840152602081019050610c90565b50505050905090810190601f168015610cd85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610cf257600080fd5b50610cfb612761565b6040518082815260200191505060405180910390f35b348015610d1d57600080fd5b50610d6a60048036036040811015610d3457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612767565b60405180821515815260200191505060405180910390f35b348015610d8e57600080fd5b50610ddb60048036036040811015610da557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612834565b60405180821515815260200191505060405180910390f35b348015610dff57600080fd5b50610e08612863565b60405180821515815260200191505060405180910390f35b348015610e2c57600080fd5b50610e3561294a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e75578082015181840152602081019050610e5a565b50505050905090810190601f168015610ea25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ebc57600080fd5b50610ec56129e8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610efd57600080fd5b50610f4060048036036020811015610f1457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a0e565b60405180821515815260200191505060405180910390f35b348015610f6457600080fd5b50610f6d612b22565b60405180821515815260200191505060405180910390f35b348015610f9157600080fd5b50610f9a612e9b565b6040518082815260200191505060405180910390f35b348015610fbc57600080fd5b50610fc5612ea1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611005578082015181840152602081019050610fea565b50505050905090810190601f1680156110325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561104c57600080fd5b506110af6004803603604081101561106357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f3f565b6040518082815260200191505060405180910390f35b3480156110d157600080fd5b50611114600480360360208110156110e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fc6565b60405180821515815260200191505060405180910390f35b34801561113857600080fd5b5061117b6004803603602081101561114f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130f1565b60405180821515815260200191505060405180910390f35b34801561119f57600080fd5b506111a86133b2565b6040518082815260200191505060405180910390f35b3480156111ca57600080fd5b5061120d600480360360208110156111e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506133b8565b005b34801561121b57600080fd5b506112246135c3565b6040518082815260200191505060405180910390f35b60166020528060005260406000206000915054906101000a900460ff1681565b600e5481565b606060028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112f85780601f106112cd576101008083540402835291602001916112f8565b820191906000526020600020905b8154815290600101906020018083116112db57829003601f168201915b5050505050905090565b600061131661130f61369b565b84846136a3565b6001905092915050565b60055481565b600061133061369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806144ab6026913960400191505060405180910390fd5b81600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060055460156000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6005546040518082815260200191505060405180910390a360019050919050565b6000600454905090565b60006115f484846115ef85888861389a565b613dc4565b6116b58461160061369b565b6116b0856040518060600160405280602881526020016145f660289139601860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061166661369b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140899092919063ffffffff16565b6136a3565b600190509392505050565b60176020528060005260406000206000915054906101000a900460ff1681565b60006116ea61369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60016014806101000a81548160ff02191690831515021790555090565b60006117d161369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611891576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806145ab602a913960400191505060405180910390fd5b81601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600954601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a360019050919050565b6000611a9261369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806145ab602a913960400191505060405180910390fd5b81601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600754601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040518082815260200191505060405180910390a360019050919050565b6000600360009054906101000a900460ff16905090565b600360009054906101000a900460ff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611e42611da661369b565b84611e3d8560186000611db761369b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c990919063ffffffff16565b6136a3565b6001905092915050565b60045481565b60148054906101000a900460ff1681565b60008111611e7057600080fd5b80611e7a33611f36565b1015611e8557600080fd5b611e8f3382614149565b50565b600c5481565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611f8761369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612047576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60085481565b600d5481565b61211961369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561226a57600080fd5b505af115801561227e573d6000803e3d6000fd5b505050506040513d602081101561229457600080fd5b8101908080519060200190929190505050505050565b60006122b461369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612374576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061240861369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461256f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806145166027913960400191505060405180910390fd5b81601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600854601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040518082815260200191505060405180910390a360019050919050565b606060018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127575780601f1061272c57610100808354040283529160200191612757565b820191906000526020600020905b81548152906001019060200180831161273a57829003601f168201915b5050505050905090565b60095481565b600061282a61277461369b565b84612825856040518060600160405280602581526020016146b3602591396018600061279e61369b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140899092919063ffffffff16565b6136a3565b6001905092915050565b600061285961284161369b565b846128548561284e61369b565b8861389a565b613dc4565b6001905092915050565b600061286d61369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461292d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006014806101000a81548160ff02191690831515021790555090565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129e05780601f106129b5576101008083540402835291602001916129e0565b820191906000526020600020905b8154815290600101906020018083116129c357829003601f168201915b505050505081565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612a1861369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ad8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000612b2c61369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600a5411612c64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6465762066756e647320697320656d707479000000000000000000000000000081525060200191505060405180910390fd5b6000612ca1612c7f6001600d546135c990919063ffffffff16565b612c936001426135c990919063ffffffff16565b61365190919063ffffffff16565b90506000612cba600e548361430f90919063ffffffff16565b90506000811115612e91576000612cdc82600b5461435990919063ffffffff16565b9050612d07612cf6600e548461435990919063ffffffff16565b600d546135c990919063ffffffff16565b600d81905550612d2281600a5461365190919063ffffffff16565b600a81905550612d9b81601560008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c990919063ffffffff16565b601560008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019350505050612e98565b6000925050505b90565b600a5481565b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612f375780601f10612f0c57610100808354040283529160200191612f37565b820191906000526020600020905b815481529060010190602001808311612f1a57829003601f168201915b505050505081565b6000601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000612fd061369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613090576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60006130fb61369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061461e602b913960400191505060405180910390fd5b81601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600654601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040518082815260200191505060405180910390a360019050919050565b60065481565b6133c061369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613480576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613506576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061453d6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b600080828401905083811015613647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061369383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614089565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613729576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061468f6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806145636022913960400191505060405180910390fd5b80601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138f657839050613dbd565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561395057839050613dbd565b8273ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156139ae57839050613dbd565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a0857839050613dbd565b60148054906101000a900460ff1615613a89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f746f6b656e20697320706175736564000000000000000000000000000000000081525060200191505060405180910390fd5b6000601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613c27576000613b1a613af86001600c546135c990919063ffffffff16565b613b0c6001426135c990919063ffffffff16565b61365190919063ffffffff16565b90506000600a9050620fd200821115613b3657600a9050613bf8565b620e8080821115613b4a57600b9050613bf7565b620d2f00821115613b5e57600c9050613bf6565b620bdd80821115613b7257600d9050613bf5565b620a8c00821115613b8657600e9050613bf4565b62093a80821115613b9a57600f9050613bf3565b6207e900821115613bae5760109050613bf2565b62069780821115613bc25760119050613bf1565b62054600821115613bd65760129050613bf0565b6203f480821115613bea5760139050613bef565b601490505b5b5b5b5b5b5b5b5b5b613c1e6064613c10838a61435990919063ffffffff16565b61430f90919063ffffffff16565b92505050613d92565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613d88576000613cba613c986001600c546135c990919063ffffffff16565b613cac6001426135c990919063ffffffff16565b61365190919063ffffffff16565b9050600060039050620bdd80821115613cd65760039050613d59565b620a8c00821115613cea5760049050613d58565b62093a80821115613cfe5760059050613d57565b6207e900821115613d125760069050613d56565b62069780821115613d265760079050613d55565b62054600821115613d3a5760089050613d54565b6203f480821115613d4e5760099050613d53565b600a90505b5b5b5b5b5b5b613d7f6064613d71838a61435990919063ffffffff16565b61430f90919063ffffffff16565b92505050613d91565b84915050613dbd565b5b6000811115613da657613da58482614149565b5b613db9818661365190919063ffffffff16565b9150505b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613e4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061466a6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ed0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806144d16023913960400191505060405180910390fd5b613edb8383836143df565b613f478160405180606001604052806026815260200161458560269139601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140899092919063ffffffff16565b601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fdc81601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c990919063ffffffff16565b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290614136576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156140fb5780820151818401526020810190506140e0565b50505050905090810190601f1680156141285780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156141cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806146496021913960400191505060405180910390fd5b6141db826000836143df565b614247816040518060600160405280602281526020016144f460229139601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140899092919063ffffffff16565b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061429f8160045461365190919063ffffffff16565b600481905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600061435183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143e4565b905092915050565b60008083141561436c57600090506143d9565b600082840290508284828161437d57fe5b04146143d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806145d56021913960400191505060405180910390fd5b809150505b92915050565b505050565b60008083118290614490576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561445557808201518184015260208101905061443a565b50505050905090810190601f1680156144825780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161449c57fe5b04905080915050939250505056fe726567697374657250726573616c653a2068617320616c7265616479206265656e20646f6e6545524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63657265676973746572506f6f6c574254433a2068617320616c7265616479206265656e20646f6e654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63657265676973746572506f6f6c4d6f6c694574683a2068617320616c7265616479206265656e20646f6e65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63657265676973746572506f6f6c4d6f6c694d6f6c693a2068617320616c7265616479206265656e20646f6e6545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200a4a12a538e141a5d1a092c703de58c9af31e665a3113fe28262e1a230a4dd0c64736f6c63430007060033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c806370a0823111610175578063adf6e486116100dc578063d28d885211610095578063ef598e081161006f578063ef598e081461112c578063f26e522214611193578063f2fde38b146111be578063feec600d1461120f576102d7565b8063d28d885214610fb0578063dd62ed3e14611040578063e43252d7146110c5576102d7565b8063adf6e48614610df3578063b09f126614610e20578063ca02289814610eb0578063cc6dfdd714610ef1578063d185687614610f58578063d19b6d0b14610f85576102d7565b80638da5cb5b1161012e5780638da5cb5b14610bae5780639426741214610bef57806395d89b4114610c56578063a0937dc214610ce6578063a457c2d714610d11578063a9059cbb14610d82576102d7565b806370a0823114610a1a578063715018a614610a7f57806377ed762a14610a9657806384b5a04614610ac15780638980f11f14610aec5780638ab1d68114610b47576102d7565b8063313ce5671161023457806342966c68116101ed5780635ae50512116101c75780635ae50512146109165780636064d52714610957578063662f29cb146109985780636e869b69146109d9576102d7565b806342966c68146108855780634a0b7f32146108c057806358207ae7146108eb576102d7565b8063313ce5671461071f57806332424aa31461074d578063345dc7b21461077b57806339509351146107bc5780633eaaf86b1461082d578063416f528614610858576102d7565b806318160ddd1161028657806318160ddd1461050157806323b872dd1461052c578063291085db146105bd5780632c349627146106245780632d5d63be146106515780632ee9636e146106b8576102d7565b806302509c65146102dc57806305e7cf3e1461034357806306fdde031461036e578063095ea7b3146103fe5780630a09815c1461046f57806311c065b71461049a576102d7565b366102d757600080fd5b600080fd5b3480156102e857600080fd5b5061032b600480360360208110156102ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061123a565b60405180821515815260200191505060405180910390f35b34801561034f57600080fd5b5061035861125a565b6040518082815260200191505060405180910390f35b34801561037a57600080fd5b50610383611260565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103c35780820151818401526020810190506103a8565b50505050905090810190601f1680156103f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561040a57600080fd5b506104576004803603604081101561042157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611302565b60405180821515815260200191505060405180910390f35b34801561047b57600080fd5b50610484611320565b6040518082815260200191505060405180910390f35b3480156104a657600080fd5b506104e9600480360360208110156104bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611326565b60405180821515815260200191505060405180910390f35b34801561050d57600080fd5b506105166115d3565b6040518082815260200191505060405180910390f35b34801561053857600080fd5b506105a56004803603606081101561054f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115dd565b60405180821515815260200191505060405180910390f35b3480156105c957600080fd5b5061060c600480360360208110156105e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116c0565b60405180821515815260200191505060405180910390f35b34801561063057600080fd5b506106396116e0565b60405180821515815260200191505060405180910390f35b34801561065d57600080fd5b506106a06004803603602081101561067457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117c7565b60405180821515815260200191505060405180910390f35b3480156106c457600080fd5b50610707600480360360208110156106db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a88565b60405180821515815260200191505060405180910390f35b34801561072b57600080fd5b50610734611d49565b604051808260ff16815260200191505060405180910390f35b34801561075957600080fd5b50610762611d60565b604051808260ff16815260200191505060405180910390f35b34801561078757600080fd5b50610790611d73565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107c857600080fd5b50610815600480360360408110156107df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d99565b60405180821515815260200191505060405180910390f35b34801561083957600080fd5b50610842611e4c565b6040518082815260200191505060405180910390f35b34801561086457600080fd5b5061086d611e52565b60405180821515815260200191505060405180910390f35b34801561089157600080fd5b506108be600480360360208110156108a857600080fd5b8101908080359060200190929190505050611e63565b005b3480156108cc57600080fd5b506108d5611e92565b6040518082815260200191505060405180910390f35b3480156108f757600080fd5b50610900611e98565b6040518082815260200191505060405180910390f35b34801561092257600080fd5b5061092b611e9e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561096357600080fd5b5061096c611ec4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109a457600080fd5b506109ad611eea565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109e557600080fd5b506109ee611f10565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a2657600080fd5b50610a6960048036036020811015610a3d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f36565b6040518082815260200191505060405180910390f35b348015610a8b57600080fd5b50610a94611f7f565b005b348015610aa257600080fd5b50610aab612105565b6040518082815260200191505060405180910390f35b348015610acd57600080fd5b50610ad661210b565b6040518082815260200191505060405180910390f35b348015610af857600080fd5b50610b4560048036036040811015610b0f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612111565b005b348015610b5357600080fd5b50610b9660048036036020811015610b6a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122aa565b60405180821515815260200191505060405180910390f35b348015610bba57600080fd5b50610bc36123d5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bfb57600080fd5b50610c3e60048036036020811015610c1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123fe565b60405180821515815260200191505060405180910390f35b348015610c6257600080fd5b50610c6b6126bf565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610cab578082015181840152602081019050610c90565b50505050905090810190601f168015610cd85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610cf257600080fd5b50610cfb612761565b6040518082815260200191505060405180910390f35b348015610d1d57600080fd5b50610d6a60048036036040811015610d3457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612767565b60405180821515815260200191505060405180910390f35b348015610d8e57600080fd5b50610ddb60048036036040811015610da557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612834565b60405180821515815260200191505060405180910390f35b348015610dff57600080fd5b50610e08612863565b60405180821515815260200191505060405180910390f35b348015610e2c57600080fd5b50610e3561294a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e75578082015181840152602081019050610e5a565b50505050905090810190601f168015610ea25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ebc57600080fd5b50610ec56129e8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610efd57600080fd5b50610f4060048036036020811015610f1457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a0e565b60405180821515815260200191505060405180910390f35b348015610f6457600080fd5b50610f6d612b22565b60405180821515815260200191505060405180910390f35b348015610f9157600080fd5b50610f9a612e9b565b6040518082815260200191505060405180910390f35b348015610fbc57600080fd5b50610fc5612ea1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611005578082015181840152602081019050610fea565b50505050905090810190601f1680156110325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561104c57600080fd5b506110af6004803603604081101561106357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f3f565b6040518082815260200191505060405180910390f35b3480156110d157600080fd5b50611114600480360360208110156110e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fc6565b60405180821515815260200191505060405180910390f35b34801561113857600080fd5b5061117b6004803603602081101561114f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130f1565b60405180821515815260200191505060405180910390f35b34801561119f57600080fd5b506111a86133b2565b6040518082815260200191505060405180910390f35b3480156111ca57600080fd5b5061120d600480360360208110156111e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506133b8565b005b34801561121b57600080fd5b506112246135c3565b6040518082815260200191505060405180910390f35b60166020528060005260406000206000915054906101000a900460ff1681565b600e5481565b606060028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112f85780601f106112cd576101008083540402835291602001916112f8565b820191906000526020600020905b8154815290600101906020018083116112db57829003601f168201915b5050505050905090565b600061131661130f61369b565b84846136a3565b6001905092915050565b60055481565b600061133061369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806144ab6026913960400191505060405180910390fd5b81600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060055460156000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6005546040518082815260200191505060405180910390a360019050919050565b6000600454905090565b60006115f484846115ef85888861389a565b613dc4565b6116b58461160061369b565b6116b0856040518060600160405280602881526020016145f660289139601860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061166661369b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140899092919063ffffffff16565b6136a3565b600190509392505050565b60176020528060005260406000206000915054906101000a900460ff1681565b60006116ea61369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60016014806101000a81548160ff02191690831515021790555090565b60006117d161369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611891576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806145ab602a913960400191505060405180910390fd5b81601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600954601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a360019050919050565b6000611a9261369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806145ab602a913960400191505060405180910390fd5b81601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600754601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040518082815260200191505060405180910390a360019050919050565b6000600360009054906101000a900460ff16905090565b600360009054906101000a900460ff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611e42611da661369b565b84611e3d8560186000611db761369b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c990919063ffffffff16565b6136a3565b6001905092915050565b60045481565b60148054906101000a900460ff1681565b60008111611e7057600080fd5b80611e7a33611f36565b1015611e8557600080fd5b611e8f3382614149565b50565b600c5481565b60075481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611f8761369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612047576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60085481565b600d5481565b61211961369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561226a57600080fd5b505af115801561227e573d6000803e3d6000fd5b505050506040513d602081101561229457600080fd5b8101908080519060200190929190505050505050565b60006122b461369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612374576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061240861369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461256f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806145166027913960400191505060405180910390fd5b81601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600854601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040518082815260200191505060405180910390a360019050919050565b606060018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127575780601f1061272c57610100808354040283529160200191612757565b820191906000526020600020905b81548152906001019060200180831161273a57829003601f168201915b5050505050905090565b60095481565b600061282a61277461369b565b84612825856040518060600160405280602581526020016146b3602591396018600061279e61369b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140899092919063ffffffff16565b6136a3565b6001905092915050565b600061285961284161369b565b846128548561284e61369b565b8861389a565b613dc4565b6001905092915050565b600061286d61369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461292d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006014806101000a81548160ff02191690831515021790555090565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129e05780601f106129b5576101008083540402835291602001916129e0565b820191906000526020600020905b8154815290600101906020018083116129c357829003601f168201915b505050505081565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612a1861369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ad8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000612b2c61369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600a5411612c64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6465762066756e647320697320656d707479000000000000000000000000000081525060200191505060405180910390fd5b6000612ca1612c7f6001600d546135c990919063ffffffff16565b612c936001426135c990919063ffffffff16565b61365190919063ffffffff16565b90506000612cba600e548361430f90919063ffffffff16565b90506000811115612e91576000612cdc82600b5461435990919063ffffffff16565b9050612d07612cf6600e548461435990919063ffffffff16565b600d546135c990919063ffffffff16565b600d81905550612d2281600a5461365190919063ffffffff16565b600a81905550612d9b81601560008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c990919063ffffffff16565b601560008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019350505050612e98565b6000925050505b90565b600a5481565b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612f375780601f10612f0c57610100808354040283529160200191612f37565b820191906000526020600020905b815481529060010190602001808311612f1a57829003601f168201915b505050505081565b6000601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000612fd061369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613090576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60006130fb61369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061461e602b913960400191505060405180910390fd5b81601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600654601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040518082815260200191505060405180910390a360019050919050565b60065481565b6133c061369b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613480576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613506576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061453d6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b600080828401905083811015613647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061369383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614089565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613729576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061468f6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806145636022913960400191505060405180910390fd5b80601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138f657839050613dbd565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561395057839050613dbd565b8273ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156139ae57839050613dbd565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a0857839050613dbd565b60148054906101000a900460ff1615613a89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f746f6b656e20697320706175736564000000000000000000000000000000000081525060200191505060405180910390fd5b6000601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613c27576000613b1a613af86001600c546135c990919063ffffffff16565b613b0c6001426135c990919063ffffffff16565b61365190919063ffffffff16565b90506000600a9050620fd200821115613b3657600a9050613bf8565b620e8080821115613b4a57600b9050613bf7565b620d2f00821115613b5e57600c9050613bf6565b620bdd80821115613b7257600d9050613bf5565b620a8c00821115613b8657600e9050613bf4565b62093a80821115613b9a57600f9050613bf3565b6207e900821115613bae5760109050613bf2565b62069780821115613bc25760119050613bf1565b62054600821115613bd65760129050613bf0565b6203f480821115613bea5760139050613bef565b601490505b5b5b5b5b5b5b5b5b5b613c1e6064613c10838a61435990919063ffffffff16565b61430f90919063ffffffff16565b92505050613d92565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613d88576000613cba613c986001600c546135c990919063ffffffff16565b613cac6001426135c990919063ffffffff16565b61365190919063ffffffff16565b9050600060039050620bdd80821115613cd65760039050613d59565b620a8c00821115613cea5760049050613d58565b62093a80821115613cfe5760059050613d57565b6207e900821115613d125760069050613d56565b62069780821115613d265760079050613d55565b62054600821115613d3a5760089050613d54565b6203f480821115613d4e5760099050613d53565b600a90505b5b5b5b5b5b5b613d7f6064613d71838a61435990919063ffffffff16565b61430f90919063ffffffff16565b92505050613d91565b84915050613dbd565b5b6000811115613da657613da58482614149565b5b613db9818661365190919063ffffffff16565b9150505b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613e4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061466a6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ed0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806144d16023913960400191505060405180910390fd5b613edb8383836143df565b613f478160405180606001604052806026815260200161458560269139601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140899092919063ffffffff16565b601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fdc81601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c990919063ffffffff16565b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290614136576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156140fb5780820151818401526020810190506140e0565b50505050905090810190601f1680156141285780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156141cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806146496021913960400191505060405180910390fd5b6141db826000836143df565b614247816040518060600160405280602281526020016144f460229139601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140899092919063ffffffff16565b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061429f8160045461365190919063ffffffff16565b600481905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600061435183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143e4565b905092915050565b60008083141561436c57600090506143d9565b600082840290508284828161437d57fe5b04146143d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806145d56021913960400191505060405180910390fd5b809150505b92915050565b505050565b60008083118290614490576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561445557808201518184015260208101905061443a565b50505050905090810190601f1680156144825780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161449c57fe5b04905080915050939250505056fe726567697374657250726573616c653a2068617320616c7265616479206265656e20646f6e6545524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63657265676973746572506f6f6c574254433a2068617320616c7265616479206265656e20646f6e654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63657265676973746572506f6f6c4d6f6c694574683a2068617320616c7265616479206265656e20646f6e65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63657265676973746572506f6f6c4d6f6c694d6f6c693a2068617320616c7265616479206265656e20646f6e6545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200a4a12a538e141a5d1a092c703de58c9af31e665a3113fe28262e1a230a4dd0c64736f6c63430007060033

Deployed Bytecode Sourcemap

161:14378:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2057:8;;;161:14378;;;;1273:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;906:48;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2086:81;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3533:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;424:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8097:389;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2351:98;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3705:346;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1331:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11674:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9850:438;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8952:453;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2264:81;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;335:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1000:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4058:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;368:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1197:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3002:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;821:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;536:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1040:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1079:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1156;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1115;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2455:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1528:145:3;;;;;;;;;;;;;:::i;:::-;;592:50:2;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;857:43;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7942:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11495:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;903:77:3;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9410:435:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2173:85;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;648:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4280:266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3162:208;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11791:92;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;283:21;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;965:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10293:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10475:815;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;704:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;310:19;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3376:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11318:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8496:451;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;480:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1823:240:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;760:50:2;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1273:52;;;;;;;;;;;;;;;;;;;;;;:::o;906:48::-;;;;:::o;2086:81::-;2123:13;2155:5;2148:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2086:81;:::o;3533:166::-;3616:4;3632:39;3641:12;:10;:12::i;:::-;3655:7;3664:6;3632:8;:39::i;:::-;3688:4;3681:11;;3533:166;;;;:::o;424:50::-;;;;:::o;8097:389::-;8175:4;1118:12:3;:10;:12::i;:::-;1108:22;;:6;;;;;;;;;;:22;;;1100:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8226:1:2::1;8200:28;;:14;;;;;;;;;;;:28;;;8191:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8307:15;8290:14;;:32;;;;;;;;;;;;;;;;;;8361:13;;8333:9;:25;8343:14;;;;;;;;;;;8333:25;;;;;;;;;;;;;;;:41;;;;8419:14;;;;;;;;;;;8398:51;;8415:1;8398:51;;;8435:13;;8398:51;;;;;;;;;;;;;;;;;;8475:4;8468:11;;8097:389:::0;;;:::o;2351:98::-;2404:7;2430:12;;2423:19;;2351:98;:::o;3705:346::-;3811:4;3827:65;3837:6;3845:9;3856:35;3864:6;3872;3880:9;3856:6;:35::i;:::-;3827:9;:65::i;:::-;3902:121;3911:6;3919:12;:10;:12::i;:::-;3933:89;3971:6;3933:89;;;;;;;;;;;;;;;;;:11;:19;3945:6;3933:19;;;;;;;;;;;;;;;:33;3953:12;:10;:12::i;:::-;3933:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;3902:8;:121::i;:::-;4040:4;4033:11;;3705:346;;;;;:::o;1331:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;11674:89::-;11722:4;1118:12:3;:10;:12::i;:::-;1108:22;;:6;;;;;;;;;;:22;;;1100:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11752:4:2::1;11739:10;::::0;:17:::1;;;;;;;;;;;;;;;;;;11674:89:::0;:::o;9850:438::-;9926:4;1118:12:3;:10;:12::i;:::-;1108:22;;:6;;;;;;;;;;:22;;;1100:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9978:1:2::1;9951:29;;:15;;;;;;;;;;;:29;;;9942:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10064:12;10046:15;;:30;;;;;;;;;;;;;;;;;;10115:14;;10087:9;:25;10098:12;10087:25;;;;;;;;;;;;;;;:42;;;;10173:4;10139:15;:31;10156:12;10139:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;10222:12;10201:50;;10218:1;10201:50;;;10236:14;;10201:50;;;;;;;;;;;;;;;;;;10277:4;10270:11;;9850:438:::0;;;:::o;8952:453::-;9031:4;1118:12:3;:10;:12::i;:::-;1108:22;;:6;;;;;;;;;;:22;;;1100:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9086:1:2::1;9056:32;;:18;;;;;;;;;;;:32;;;9047:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9175:12;9154:18;;:33;;;;;;;;;;;;;;;;;;9226:17;;9198:9;:25;9209:12;9198:25;;;;;;;;;;;;;;;:45;;;;9287:4;9253:15;:31;9270:12;9253:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;9336:12;9315:53;;9332:1;9315:53;;;9350:17;;9315:53;;;;;;;;;;;;;;;;;;9394:4;9387:11;;8952:453:::0;;;:::o;2264:81::-;2305:5;2329:9;;;;;;;;;;;2322:16;;2264:81;:::o;335:22::-;;;;;;;;;;;;;:::o;1000:34::-;;;;;;;;;;;;;:::o;4058:215::-;4146:4;4162:83;4171:12;:10;:12::i;:::-;4185:7;4194:50;4233:10;4194:11;:25;4206:12;:10;:12::i;:::-;4194:25;;;;;;;;;;;;;;;:34;4220:7;4194:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;4162:8;:83::i;:::-;4262:4;4255:11;;4058:215;;;;:::o;368:50::-;;;;:::o;1197:29::-;;;;;;;;;;;;:::o;3002:155::-;3063:1;3054:6;:10;3046:19;;;;;;3108:6;3083:21;3093:10;3083:9;:21::i;:::-;:31;;3075:40;;;;;;3125:25;3131:10;3143:6;3125:5;:25::i;:::-;3002:155;:::o;821:30::-;;;;:::o;536:50::-;;;;:::o;1040:33::-;;;;;;;;;;;;;:::o;1079:30::-;;;;;;;;;;;;;:::o;1156:::-;;;;;;;;;;;;;:::o;1115:::-;;;;;;;;;;;;;:::o;2455:117::-;2521:7;2547:9;:18;2557:7;2547:18;;;;;;;;;;;;;;;;2540:25;;2455:117;;;:::o;1528:145:3:-;1118:12;:10;:12::i;:::-;1108:22;;:6;;;;;;;;;;:22;;;1100:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1634:1:::1;1597:40;;1618:6;::::0;::::1;;;;;;;;1597:40;;;;;;;;;;;;1664:1;1647:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1528:145::o:0;592:50:2:-;;;;:::o;857:43::-;;;;:::o;7942:149::-;1118:12:3;:10;:12::i;:::-;1108:22;;:6;;;;;;;;;;:22;;;1100:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8041:12:2::1;8034:29;;;8064:6;::::0;::::1;;;;;;;;8072:11;8034:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;7942:149:::0;;:::o;11495:155::-;11567:4;1118:12:3;:10;:12::i;:::-;1108:22;;:6;;;;;;;;;;:22;;;1100:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11617:5:2::1;11584:19;:30;11605:7;11584:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;11639:4;11632:11;;11495:155:::0;;;:::o;903:77:3:-;941:7;967:6;;;;;;;;;;;960:13;;903:77;:::o;9410:435:2:-;9486:4;1118:12:3;:10;:12::i;:::-;1108:22;;:6;;;;;;;;;;:22;;;1100:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9538:1:2::1;9511:29;;:15;;;;;;;;;;;:29;;;9502:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9621:12;9603:15;;:30;;;;;;;;;;;;;;;;;;9672:14;;9644:9;:25;9655:12;9644:25;;;;;;;;;;;;;;;:42;;;;9730:4;9696:15;:31;9713:12;9696:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;9779:12;9758:50;;9775:1;9758:50;;;9793:14;;9758:50;;;;;;;;;;;;;;;;;;9834:4;9827:11;;9410:435:::0;;;:::o;2173:85::-;2212:13;2244:7;2237:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2173:85;:::o;648:50::-;;;;:::o;4280:266::-;4373:4;4389:129;4398:12;:10;:12::i;:::-;4412:7;4421:96;4460:15;4421:96;;;;;;;;;;;;;;;;;:11;:25;4433:12;:10;:12::i;:::-;4421:25;;;;;;;;;;;;;;;:34;4447:7;4421:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;4389:8;:129::i;:::-;4535:4;4528:11;;4280:266;;;;:::o;3162:208::-;3248:4;3264:78;3274:12;:10;:12::i;:::-;3288:9;3299:41;3307:6;3315:12;:10;:12::i;:::-;3329:9;3299:6;:41::i;:::-;3264:9;:78::i;:::-;3359:4;3352:11;;3162:208;;;;:::o;11791:92::-;11841:4;1118:12:3;:10;:12::i;:::-;1108:22;;:6;;;;;;;;;;:22;;;1100:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11871:5:2::1;11858:10;::::0;:18:::1;;;;;;;;;;;;;;;;;;11791:92:::0;:::o;283:21::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;965:29::-;;;;;;;;;;;;;:::o;10293:154::-;10375:4;1118:12:3;:10;:12::i;:::-;1108:22;;:6;;;;;;;;;;:22;;;1100:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10410:8:2::1;10392:15;;:26;;;;;;;;;;;;;;;;;;10436:4;10429:11;;10293:154:::0;;;:::o;10475:815::-;10524:4;1118:12:3;:10;:12::i;:::-;1108:22;;:6;;;;;;;;;;:22;;;1100:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10571:1:2::1;10557:11;;:15;10549:46;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;10607:25;10635:57;10665:25;10687:1;10665:16;;:20;;:25;;;;:::i;:::-;10635:24;10656:1;10635:15;:19;;:24;;;;:::i;:::-;:28;;:57;;;;:::i;:::-;10607:85;;10702:17;10722:44;10745:19;;10722:17;:21;;:44;;;;:::i;:::-;10702:64;;10791:1;10779:9;:13;10776:468;;;10820:17;10840:29;10858:9;10840:12;;:16;;:29;;;;:::i;:::-;10820:49;;10915:60;10937:36;10952:19;;10937:9;:13;;:36;;;;:::i;:::-;10915:16;;:20;;:60;;;;:::i;:::-;10896:16;:79;;;;11003:28;11020:9;11003:11;;:15;;:28;;;;:::i;:::-;10989:11;:42;;;;11081:34;11104:9;11081;:17;11091:6:::0;::::1;;;;;;;;;;11081:17;;;;;;;;;;;;;;;;:21;;:34;;;;:::i;:::-;11059:9;:19;11070:6:::0;::::1;;;;;;;;;;11059:19;;;;;;;;;;;;;;;:56;;;;11168:6;::::0;::::1;;;;;;;;11147:39;;11164:1;11147:39;;;11176:9;11147:39;;;;;;;;;;;;;;;;;;11220:4;11213:11;;;;;;;10776:468;11269:5;11262:12;;;;1177:1:3;10475:815:2::0;:::o;704:50::-;;;;:::o;310:19::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3376:151::-;3466:7;3492:11;:19;3504:6;3492:19;;;;;;;;;;;;;;;:28;3512:7;3492:28;;;;;;;;;;;;;;;;3485:35;;3376:151;;;;:::o;11318:149::-;11385:4;1118:12:3;:10;:12::i;:::-;1108:22;;:6;;;;;;;;;;:22;;;1100:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11435:4:2::1;11402:19;:30;11423:7;11402:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;11456:4;11449:11;;11318:149:::0;;;:::o;8496:451::-;8576:4;1118:12:3;:10;:12::i;:::-;1108:22;;:6;;;;;;;;;;:22;;;1100:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8632:1:2::1;8601:33;;:19;;;;;;;;;;;:33;;;8592:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8715:12;8693:19;;:34;;;;;;;;;;;;;;;;;;8766:18;;8738:9;:25;8749:12;8738:25;;;;;;;;;;;;;;;:46;;;;8828:4;8794:15;:31;8811:12;8794:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;8877:12;8856:54;;8873:1;8856:54;;;8891:18;;8856:54;;;;;;;;;;;;;;;;;;8936:4;8929:11;;8496:451:::0;;;:::o;480:50::-;;;;:::o;1823:240:3:-;1118:12;:10;:12::i;:::-;1108:22;;:6;;;;;;;;;;:22;;;1100:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1931:1:::1;1911:22;;:8;:22;;;;1903:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2020:8;1991:38;;2012:6;::::0;::::1;;;;;;;;1991:38;;;;;;;;;;;;2048:8;2039:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1823:240:::0;:::o;760:50:2:-;;;;:::o;286:176:4:-;344:7;363:9;379:1;375;:5;363:17;;403:1;398;:6;;390:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;454:1;447:8;;;286:176;;;;:::o;733:134::-;791:7;817:43;821:1;824;817:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;810:50;;733:134;;;;:::o;88:104:3:-;141:15;175:10;168:17;;88:104;:::o;5088:344:2:-;5208:1;5190:20;;:6;:20;;;;5182:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5288:1;5269:21;;:7;:21;;;;5261:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5371:6;5340:11;:19;5352:6;5340:19;;;;;;;;;;;;;;;:28;5360:7;5340:28;;;;;;;;;;;;;;;:37;;;;5409:7;5392:33;;5401:6;5392:33;;;5418:6;5392:33;;;;;;;;;;;;;;;;;;5088:344;;;:::o;11915:2622::-;11996:7;12029:19;:28;12050:5;12029:28;;;;;;;;;;;;;;;;;;;;;;;;;12024:74;;;12080:7;12073:14;;;;12024:74;12112:19;:26;12133:3;12112:26;;;;;;;;;;;;;;;;;;;;;;;;;12107:72;;;12161:7;12154:14;;;;12107:72;12210:5;12192:23;;:14;;;;;;;;;;;:23;;;12188:68;;;12238:7;12231:14;;;;12188:68;12269:15;:22;12286:3;12269:22;;;;;;;;;;;;;;;;;;;;;;;;;12265:67;;;12314:7;12307:14;;;;12265:67;12346:10;;;;;;;;;;12341:68;;;12373:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12341:68;12427:18;12463:15;:24;12480:5;12463:24;;;;;;;;;;;;;;;;;;;;;;;;;12459:1925;;;12516:19;12538:56;12568:24;12589:1;12568:15;;:19;;:24;;;;:::i;:::-;12538;12559:1;12538:15;:19;;:24;;;;:::i;:::-;:28;;:56;;;;:::i;:::-;12516:78;;12608:22;12633:2;12608:27;;12684:7;12670:11;:21;12667:719;;;12711:2;12694:19;;12667:719;;;12751:7;12737:11;:21;12734:652;;;12778:2;12761:19;;12734:652;;;12818:7;12804:11;:21;12801:585;;;12845:2;12828:19;;12801:585;;;12886:6;12871:11;:21;12868:518;;;12912:2;12895:19;;12868:518;;;12953:6;12938:11;:21;12935:451;;;12979:2;12962:19;;12935:451;;;13020:6;13005:11;:21;13002:384;;;13046:2;13029:19;;13002:384;;;13087:6;13072:11;:21;13069:317;;;13113:2;13096:19;;13069:317;;;13154:6;13139:11;:21;13136:250;;;13180:2;13163:19;;13136:250;;;13221:6;13206:11;:21;13203:183;;;13247:2;13230:19;;13203:183;;;13288:6;13273:11;:21;13270:116;;;13314:2;13297:19;;13270:116;;;13381:2;13364:19;;13270:116;13203:183;13136:250;13069:317;13002:384;12935:451;12868:518;12801:585;12734:652;12667:719;13438:40;13473:3;13438:29;13451:14;13438:7;:11;;:29;;;;:::i;:::-;:33;;:40;;;;:::i;:::-;13425:53;;12459:1925;;;;;13518:15;;;;;;;;;;;13511:22;;:3;:22;;;13507:877;;;13563:19;13585:56;13615:24;13636:1;13615:15;;:19;;:24;;;;:::i;:::-;13585;13606:1;13585:15;:19;;:24;;;;:::i;:::-;:28;;:56;;;;:::i;:::-;13563:78;;13655:22;13680:1;13655:26;;13730:6;13716:11;:20;13713:510;;;13757:1;13739:19;;13713:510;;;13796:6;13782:11;:20;13779:444;;;13823:1;13805:19;;13779:444;;;13862:6;13848:11;:20;13845:378;;;13889:1;13871:19;;13845:378;;;13928:6;13914:11;:20;13911:312;;;13955:1;13937:19;;13911:312;;;13994:6;13980:11;:20;13977:246;;;14021:1;14003:19;;13977:246;;;14060:6;14046:11;:20;14043:180;;;14087:1;14069:19;;14043:180;;;14126:6;14112:11;:20;14109:114;;;14153:1;14135:19;;14109:114;;;14218:2;14201:19;;14109:114;14043:180;13977:246;13911:312;13845:378;13779:444;13713:510;14277:40;14312:3;14277:29;14290:14;14277:7;:11;;:29;;;;:::i;:::-;:33;;:40;;;;:::i;:::-;14264:53;;13507:877;;;;;14366:7;14359:14;;;;;13507:877;12459:1925;14419:1;14406:10;:14;14402:69;;;14435:25;14442:5;14449:10;14435:5;:25::i;:::-;14402:69;14496:25;14509:10;14496:7;:11;;:25;;;;:::i;:::-;14489:32;;;11915:2622;;;;;;:::o;4552:530::-;4675:1;4657:20;;:6;:20;;;;4649:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4758:1;4737:23;;:9;:23;;;;4729:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4811:47;4832:6;4840:9;4851:6;4811:20;:47::i;:::-;4889:71;4911:6;4889:71;;;;;;;;;;;;;;;;;:9;:17;4899:6;4889:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;4869:9;:17;4879:6;4869:17;;;;;;;;;;;;;;;:91;;;;4993:32;5018:6;4993:9;:20;5003:9;4993:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;4970:9;:20;4980:9;4970:20;;;;;;;;;;;;;;;:55;;;;5057:9;5040:35;;5049:6;5040:35;;;5068:6;5040:35;;;;;;;;;;;;;;;;;;4552:530;;;:::o;1158:187:4:-;1244:7;1276:1;1271;:6;;1279:12;1263:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1302:9;1318:1;1314;:5;1302:17;;1337:1;1330:8;;;1158:187;;;;;:::o;2582:410:2:-;2684:1;2665:21;;:7;:21;;;;2657:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2735:49;2756:7;2773:1;2777:6;2735:20;:49::i;:::-;2816:68;2839:6;2816:68;;;;;;;;;;;;;;;;;:9;:18;2826:7;2816:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;2795:9;:18;2805:7;2795:18;;;;;;;;;;;;;;;:89;;;;2909:24;2926:6;2909:12;;:16;;:24;;;;:::i;:::-;2894:12;:39;;;;2974:1;2948:37;;2957:7;2948:37;;;2978:6;2948:37;;;;;;;;;;;;;;;;;;2582:410;;:::o;2513:130:4:-;2571:7;2597:39;2601:1;2604;2597:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2590:46;;2513:130;;;;:::o;1592:459::-;1650:7;1896:1;1891;:6;1887:45;;;1920:1;1913:8;;;;1887:45;1942:9;1958:1;1954;:5;1942:17;;1986:1;1981;1977;:5;;;;;;:10;1969:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2043:1;2036:8;;;1592:459;;;;;:::o;5439:92:2:-;;;;:::o;3125:272:4:-;3211:7;3242:1;3238;:5;3245:12;3230:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3268:9;3284:1;3280;:5;;;;;;3268:17;;3389:1;3382:8;;;3125:272;;;;;:::o

Swarm Source

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