MATIC Price: $0.731421 (-2.23%)
Gas: 30 GWei
 

Overview

Max Total Supply

588,000,000 AIMX

Holders

8,001 ( 0.025%)

Total Transfers

-

Market

Price

$0.00 @ 0.005816 MATIC (-14.51%)

Onchain Market Cap

$2,501,404.92

Circulating Supply Market Cap

$1,678,581.00

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Aimedis has to offer healthcare metaverse - an NFT-based medical data marketplace and a digital health ecosystem.

Market

Volume (24H):$101,326.00
Market Capitalization:$1,678,581.00
Circulating Supply:394,666,667.00 AIMX
Market Data Source: Coinmarketcap

Contract Source Code Verified (Exact Match)

Contract Name:
Aimedis

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 50 runs

Other Settings:
default evmVersion, MIT license, Audited

Contract Source Code (Solidity)Audit Report

/**
 *Submitted for verification at polygonscan.com on 2023-02-21
*/

// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity 0.8.17;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        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) {

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if(currentAllowance != type(uint256).max){
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

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

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, 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);
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @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");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // 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
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

interface ILosslessController {
    function beforeTransfer(address sender, address recipient, uint256 amount) external;

    function beforeTransferFrom(address msgSender, address sender, address recipient, uint256 amount) external;

    function beforeApprove(address sender, address spender, uint256 amount) external;

    function beforeIncreaseAllowance(address msgSender, address spender, uint256 addedValue) external;

    function beforeDecreaseAllowance(address msgSender, address spender, uint256 subtractedValue) external;

    function afterApprove(address sender, address spender, uint256 amount) external;

    function afterTransfer(address sender, address recipient, uint256 amount) external;

    function afterTransferFrom(address msgSender, address sender, address recipient, uint256 amount) external;

    function afterIncreaseAllowance(address sender, address spender, uint256 addedValue) external;

    function afterDecreaseAllowance(address sender, address spender, uint256 subtractedValue) external;
}

contract LERC20 is Context, IERC20 {
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    address public recoveryAdmin;
    address private recoveryAdminCanditate;
    bytes32 private recoveryAdminKeyHash;
    address public admin;
    uint256 public timelockPeriod;
    uint256 public losslessTurnOffTimestamp;
    bool public isLosslessTurnOffProposed;
    bool public isLosslessOn = true;
    ILosslessController private lossless;

    event AdminChanged(address indexed previousAdmin, address indexed newAdmin);
    event RecoveryAdminChangeProposed(address indexed candidate);
    event RecoveryAdminChanged(address indexed previousAdmin, address indexed newAdmin);
    event LosslessTurnOffProposed(uint256 turnOffDate);
    event LosslessTurnedOff();
    event LosslessTurnedOn();

    constructor(uint256 totalSupply_, string memory name_, string memory symbol_, address admin_, address recoveryAdmin_, uint256 timelockPeriod_, address lossless_) {
        _mint(_msgSender(), totalSupply_);
        _name = name_;
        _symbol = symbol_;
        admin = admin_;
        recoveryAdmin = recoveryAdmin_;
        timelockPeriod = timelockPeriod_;
        lossless = ILosslessController(lossless_);
    }

    // --- LOSSLESS modifiers ---

    modifier lssAprove(address spender, uint256 amount) {
        if (isLosslessOn) {
            lossless.beforeApprove(_msgSender(), spender, amount);
            _;
            lossless.afterApprove(_msgSender(), spender, amount);
        } else {
            _;
        }
    }

    modifier lssTransfer(address recipient, uint256 amount) {
        if (isLosslessOn) {
            lossless.beforeTransfer(_msgSender(), recipient, amount);
            _;
            lossless.afterTransfer(_msgSender(), recipient, amount);
        } else {
            _;
        }
    }

    modifier lssTransferFrom(address sender, address recipient, uint256 amount) {
        if (isLosslessOn) {
            lossless.beforeTransferFrom(_msgSender(),sender, recipient, amount);
            _;
            lossless.afterTransferFrom(_msgSender(), sender, recipient, amount);
        } else {
            _;
        }
    }

    modifier lssIncreaseAllowance(address spender, uint256 addedValue) {
        if (isLosslessOn) {
            lossless.beforeIncreaseAllowance(_msgSender(), spender, addedValue);
            _;
            lossless.afterIncreaseAllowance(_msgSender(), spender, addedValue);
        } else {
            _;
        }
    }

    modifier lssDecreaseAllowance(address spender, uint256 subtractedValue) {
        if (isLosslessOn) {
            lossless.beforeDecreaseAllowance(_msgSender(), spender, subtractedValue);
            _;
            lossless.afterDecreaseAllowance(_msgSender(), spender, subtractedValue);
        } else {
            _;
        }
    }

    modifier onlyRecoveryAdmin() {
        require(_msgSender() == recoveryAdmin, "LERC20: Must be recovery admin");
        _;
    }

    // --- LOSSLESS management ---

    function getAdmin() external view returns (address) {
        return admin;
    }

    function transferOutBlacklistedFunds(address[] calldata from) external {
        require(_msgSender() == address(lossless), "LERC20: Only lossless contract");
        for (uint i = 0; i < from.length; i++) {
            _transfer(from[i], address(lossless), balanceOf(from[i]));
        }
    }

    function setLosslessAdmin(address newAdmin) public onlyRecoveryAdmin {
        emit AdminChanged(admin, newAdmin);
        admin = newAdmin;
    }

    function transferRecoveryAdminOwnership(address candidate, bytes32 keyHash) public onlyRecoveryAdmin {
        recoveryAdminCanditate = candidate;
        recoveryAdminKeyHash = keyHash;
        emit RecoveryAdminChangeProposed(candidate);
    }

    function acceptRecoveryAdminOwnership(bytes memory key) external {
        require(_msgSender() == recoveryAdminCanditate, "LERC20: Must be canditate");
        require(keccak256(key) == recoveryAdminKeyHash, "LERC20: Invalid key");
        emit RecoveryAdminChanged(recoveryAdmin, recoveryAdminCanditate);
        recoveryAdmin = recoveryAdminCanditate;
    }

    function proposeLosslessTurnOff() public onlyRecoveryAdmin {
        losslessTurnOffTimestamp = block.timestamp + timelockPeriod;
        isLosslessTurnOffProposed = true;
        emit LosslessTurnOffProposed(losslessTurnOffTimestamp);
    }

    function executeLosslessTurnOff() public onlyRecoveryAdmin {
        require(isLosslessTurnOffProposed, "LERC20: TurnOff not proposed");
        require(losslessTurnOffTimestamp <= block.timestamp, "LERC20: Time lock in progress");
        isLosslessOn = false;
        isLosslessTurnOffProposed = false;
        emit LosslessTurnedOff();
    }

    function executeLosslessTurnOn() public onlyRecoveryAdmin {
        isLosslessTurnOffProposed = false;
        isLosslessOn = true;
        emit LosslessTurnedOn();
    }

    // --- ERC20 methods ---

    function name() public view virtual returns (string memory) {
        return _name;
    }

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

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

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

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override lssTransfer(recipient, amount) returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        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 lssAprove(spender, amount) returns (bool) {
        require((amount == 0) || (_allowances[_msgSender()][spender] == 0), "LERC20: Cannot change non zero allowance");
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override lssTransferFrom(sender, recipient, amount) returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "LERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual lssDecreaseAllowance(spender, subtractedValue) returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "LERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "LERC20: transfer from the zero address");
        require(recipient != address(0), "LERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "LERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "LERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "LERC20: mint to the zero address");
        _totalSupply -= amount;
        _balances[account] -= amount;
        emit Transfer(account, address(0), amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "LERC20: approve from the zero address");
        require(spender != address(0), "LERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

contract TokenHandler is Ownable {
    function sendTokenToOwner(address token) external onlyOwner {
        if(IERC20(token).balanceOf(address(this)) > 0){
            SafeERC20.safeTransfer(IERC20(token),owner(), IERC20(token).balanceOf(address(this)));
        }
    }
}

interface ILpPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function addLiquidity(address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB, uint liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IDexFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

contract Aimedis is LERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;

    IDexRouter public immutable dexRouter;
    address public immutable lpPair;

    IERC20 public immutable STABLECOIN;
    TokenHandler private immutable tokenHandler;   

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public operationsAddress;
    address public devAddress;
    address public liquidityAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    mapping (address => bool) public blacklisted;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public constant FEE_DIVISOR = 10000;

    mapping (address => uint256) public lastReceipt;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event UpdatedDevAddress(address indexed newWallet);

    event UpdatedTreasuryAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TransferForeignToken(address token, uint256 amount);

    constructor(uint256 totalSupply_, string memory name_, string memory symbol_, address admin_, address recoveryAdmin_, uint256 timelockPeriod_, address lossless_) LERC20(totalSupply_, name_, symbol_, admin_, recoveryAdmin_, timelockPeriod_, lossless_) {
        
        address newOwner = msg.sender; // can leave alone if owner is deployer.

        address stablecoinAddress;
        address _dexRouter;

        // automatically detect router/desired stablecoin
        if(block.chainid == 1){
            stablecoinAddress = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; // USDC
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 5){
            stablecoinAddress  = 0x07865c6E87B9F70255377e024ace6630C1Eaa37F; // Görli Testnet USDC
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 56){
            stablecoinAddress  = 0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56; // BUSD
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
        } else if(block.chainid == 97){
            stablecoinAddress  = 0xae13d989daC2f0dEbFf460aC112a837C89BAa7cd; // BSC Testnet WBNB
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain: PCS V2
        } else if(block.chainid == 137){
            stablecoinAddress  = 0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619; // WETH
            _dexRouter = 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff; // Polygon: Quickswap 
        } else if(block.chainid == 80001){
            stablecoinAddress  = 0x0FA8781a83E46826621b3BC094Ea2A0212e71B23; // Mumbai USDC
            _dexRouter = 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff; // Mumbai Polygon: Quickswap 
        } else {
            revert("Chain not configured");
        }

        STABLECOIN = IERC20(stablecoinAddress);
        require(IERC20Metadata(address(STABLECOIN)).decimals()  > 0 , "Incorrect liquidity token");

        tokenHandler = new TokenHandler();

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), address(STABLECOIN));
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = totalSupply_;
        
        maxBuyAmount = totalSupply * 5 / 10000;
        maxSellAmount = totalSupply * 1 / 6000;
        swapTokensAtAmount = totalSupply * 5 / 200000;


        buyOperationsFee = 0;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee;

        sellOperationsFee = 250;
        sellLiquidityFee = 250;
        sellDevFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee;

        operationsAddress = address(0xC473E4e5Dca9B00103318e236032c5aA339B0fAC); // update
        devAddress = address(0x0635840aeA37d28Eddf41Eb43FA2564Eff0887C0); // update 
        liquidityAddress = address(0x0635840aeA37d28Eddf41Eb43FA2564Eff0887C0); // update

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);   
        _excludeFromMaxTransaction(address(liquidityAddress), true);
        _excludeFromMaxTransaction(address(operationsAddress), true);
        _excludeFromMaxTransaction(address(devAddress), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(liquidityAddress), true);
        excludeFromFees(address(operationsAddress), true);
        excludeFromFees(address(devAddress), true);

        transferOwnership(newOwner);

        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(address(newOwner), address(dexRouter), totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Trading is already started");
        //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        emit EnabledTrading();
    }

    function massManageRestrictedWallets(address[] calldata accounts, bool restricted) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            blacklisted[accounts[i]] = restricted;
        }
    }
    
    function updateMaxSellAmount(uint256 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 12000)/1e18, "Cannot set max sell amount lower than 50.000 Token");
        maxSellAmount = newNumInTokens * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 10000, "Swap amount cannot be higher than 0.1% total supply.");
  	    swapTokensAtAmount = newAmount;
  	}
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 400, "Can only airdrop 400 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _excludeFromMaxTransaction(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 1500, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 2000, "Must keep fees at 20% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");

        require((!blacklisted[from] && !blacklisted[to]) || to == owner() || to == address(0xdead), "Bots cannot transfer tokens.");

        lastReceipt[to] = block.number;

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping){
            super._transfer(from, to, amount);
            return;
        }
        
        require(tradingActive, "Trading is not active.");

        if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
            require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
        } 
        
        if(balanceOf(address(this)) >= swapTokensAtAmount && 
            swapEnabled && 
            !swapping && 
            !automatedMarketMakerPairs[from] && 
            !_isExcludedFromFees[from] && 
            !_isExcludedFromFees[to]) {
                swapping = true;
                swapBack();
                swapping = false;
        }
        
        uint256 fees = 0;
        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ // on sell
                require(lastReceipt[from] + 2 < block.number, "Sell too soon");
                fees = amount * sellTotalFees / FEE_DIVISOR;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
            } else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { // on buy
        	    fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function getCurrentBlock() external view returns (uint256) {
        return block.number;
    }

    function getCurrentTimestamp() external view returns (uint256) {
        return block.timestamp;
    }

    // if LP pair in use is STABLECOIN, this function will be used to handle fee distribution.

    function swapTokensForSTABLECOIN(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = address(STABLECOIN);

        dexRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(tokenHandler), block.timestamp);
    }

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForDev;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 40){
            contractBalance = swapTokensAtAmount * 40;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap;

        if(liquidityTokens > 0){
            super._transfer(address(this), lpPair, liquidityTokens);
            try ILpPair(lpPair).sync(){} catch {}
            contractBalance -= liquidityTokens;
            totalTokensToSwap -= tokensForLiquidity;
        }
        
        if(contractBalance == 0){return;}
        swapTokensForSTABLECOIN(contractBalance);
        
        tokenHandler.sendTokenToOwner(address(STABLECOIN));

        uint256 stablecoinBalance = STABLECOIN.balanceOf(address(this));

        uint256 scForOperations = stablecoinBalance * tokensForOperations / totalTokensToSwap;
            
        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForDev = 0;

        if(scForOperations > 0){
            SafeERC20.safeTransfer(STABLECOIN, operationsAddress, scForOperations);
        }

        if(STABLECOIN.balanceOf(address(this)) > 0){
            SafeERC20.safeTransfer(STABLECOIN, devAddress, STABLECOIN.balanceOf(address(this)));
        }
    }

    function transferForeignToken(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this) || !tradingActive, "Can't withdraw native tokens while trading is active");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_token),_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "address cannot be 0");
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }
    
    function setDevAddress(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "address cannot be 0");
        devAddress = payable(_devAddress);
        emit UpdatedDevAddress(_devAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

    function burnTokens(uint256 amount) external {
        require(balanceOf(msg.sender) >= amount, "not enough tokens");
        _burn(msg.sender, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"totalSupply_","type":"uint256"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address","name":"admin_","type":"address"},{"internalType":"address","name":"recoveryAdmin_","type":"address"},{"internalType":"uint256","name":"timelockPeriod_","type":"uint256"},{"internalType":"address","name":"lossless_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"turnOffDate","type":"uint256"}],"name":"LosslessTurnOffProposed","type":"event"},{"anonymous":false,"inputs":[],"name":"LosslessTurnedOff","type":"event"},{"anonymous":false,"inputs":[],"name":"LosslessTurnedOn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":"candidate","type":"address"}],"name":"RecoveryAdminChangeProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"RecoveryAdminChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STABLECOIN","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"key","type":"bytes"}],"name":"acceptRecoveryAdminOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","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":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executeLosslessTurnOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executeLosslessTurnOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isLosslessOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLosslessTurnOffProposed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastReceipt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"losslessTurnOffTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"restricted","type":"bool"}],"name":"massManageRestrictedWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","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":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposeLosslessTurnOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoveryAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"setLosslessAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelockPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[],"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":"from","type":"address[]"}],"name":"transferOutBlacklistedFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"candidate","type":"address"},{"internalType":"bytes32","name":"keyHash","type":"bytes32"}],"name":"transferRecoveryAdminOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInTokens","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101006040819052600b805461ff001916909117905560006014556016805462ffffff191660011790553480156200003657600080fd5b5060405162005bb138038062005bb1833981016040819052620000599162000ca3565b868686868686866200006c33886200072d565b60036200007a878262000de8565b50600462000089868262000de8565b50600880546001600160a01b039586166001600160a01b031991821617909155600580549486169490911693909317909255600955600b805491909216620100000262010000600160b01b03199091161790555060009150620000eb90503390565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062005b91833981519152908290a350336000804660010362000168575073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489050737a250d5630b4cf539739df2c5dacb4c659f2488d620002e3565b46600503620001a457507307865c6e87b9f70255377e024ace6630c1eaa37f9050737a250d5630b4cf539739df2c5dacb4c659f2488d620002e3565b46603803620001e0575073e9e7cea3dedca5984780bafc599bd69add087d5690507310ed43c718714eb63d5aa57b78b54704e256024e620002e3565b466061036200021c575073ae13d989dac2f0debff460ac112a837c89baa7cd905073d99d1c33f9fc3444f8101754abc46c52416550d1620002e3565b46608903620002585750737ceb23fd6bc0add59e62ac25578270cff1b9f619905073a5e0829caced8ffdd4de3c43696c57f7d7a678ff620002e3565b466201388103620002965750730fa8781a83e46826621b3bc094ea2a0212e71b23905073a5e0829caced8ffdd4de3c43696c57f7d7a678ff620002e3565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b03821660c08190526040805163313ce56760e01b815290516000929163313ce5679160048083019260209291908290030181865afa15801562000331573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000357919062000eb4565b60ff1611620003a95760405162461bcd60e51b815260206004820152601960248201527f496e636f7272656374206c697175696469747920746f6b656e000000000000006044820152606401620002da565b604051620003b79062000bb3565b604051809103906000f080158015620003d4573d6000803e3d6000fd5b506001600160a01b0390811660e052811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000426573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044c919062000ee0565b60c0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af11580156200049e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c4919062000ee0565b6001600160a01b031660a0819052620004df90600162000812565b60a051620004ef90600162000875565b896127106200050082600562000f14565b6200050c919062000f34565b600d556117706200051f82600162000f14565b6200052b919062000f34565b600e5562030d406200053f82600562000f14565b6200054b919062000f34565b601055600060188190556019819055601a8190556200056b818062000f57565b62000577919062000f57565b60175560fa601c819055601d8190556000601e819055906200059a908062000f57565b620005a6919062000f57565b601b55601180546001600160a01b031990811673c473e4e5dca9b00103318e236032c5aa339b0fac17909155601280548216730635840aea37d28eddf41eb43fa2564eff0887c0908117909155601380549092161790556200060a84600162000812565b6200061730600162000812565b6200062661dead600162000812565b6013546200063f906001600160a01b0316600162000812565b60115462000658906001600160a01b0316600162000812565b60125462000671906001600160a01b0316600162000812565b6200067e846001620008e1565b6200068b306001620008e1565b6200069a61dead6001620008e1565b601354620006b3906001600160a01b03166001620008e1565b601154620006cc906001600160a01b03166001620008e1565b601254620006e5906001600160a01b03166001620008e1565b620006f0846200098b565b620007073060805160001962000a8860201b60201c565b6200071c846080518362000a8860201b60201c565b505050505050505050505062000f6d565b6001600160a01b038216620007855760405162461bcd60e51b815260206004820181905260248201527f4c45524332303a206d696e7420746f20746865207a65726f20616464726573736044820152606401620002da565b806002600082825462000799919062000f57565b90915550506001600160a01b03821660009081526020819052604081208054839290620007c890849062000f57565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602560205260409020805460ff1916821515179055620008a5828262000812565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b600c546001600160a01b031633146200092c5760405162461bcd60e51b8152602060048201819052602482015260008051602062005b718339815191526044820152606401620002da565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b600c546001600160a01b03163314620009d65760405162461bcd60e51b8152602060048201819052602482015260008051602062005b718339815191526044820152606401620002da565b6001600160a01b03811662000a3d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620002da565b600c546040516001600160a01b0380841692169060008051602062005b9183398151915290600090a3600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831662000aee5760405162461bcd60e51b815260206004820152602560248201527f4c45524332303a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401620002da565b6001600160a01b03821662000b525760405162461bcd60e51b815260206004820152602360248201527f4c45524332303a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b6064820152608401620002da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6107ac80620053c583390190565b634e487b7160e01b600052604160045260246000fd5b600082601f83011262000be957600080fd5b81516001600160401b038082111562000c065762000c0662000bc1565b604051601f8301601f19908116603f0116810190828211818310171562000c315762000c3162000bc1565b8160405283815260209250868385880101111562000c4e57600080fd5b600091505b8382101562000c72578582018301518183018401529082019062000c53565b600093810190920192909252949350505050565b80516001600160a01b038116811462000c9e57600080fd5b919050565b600080600080600080600060e0888a03121562000cbf57600080fd5b875160208901519097506001600160401b038082111562000cdf57600080fd5b62000ced8b838c0162000bd7565b975060408a015191508082111562000d0457600080fd5b5062000d138a828b0162000bd7565b95505062000d246060890162000c86565b935062000d346080890162000c86565b925060a0880151915062000d4b60c0890162000c86565b905092959891949750929550565b600181811c9082168062000d6e57607f821691505b60208210810362000d8f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000de357600081815260208120601f850160051c8101602086101562000dbe5750805b601f850160051c820191505b8181101562000ddf5782815560010162000dca565b5050505b505050565b81516001600160401b0381111562000e045762000e0462000bc1565b62000e1c8162000e15845462000d59565b8462000d95565b602080601f83116001811462000e54576000841562000e3b5750858301515b600019600386901b1c1916600185901b17855562000ddf565b600085815260208120601f198616915b8281101562000e855788860151825594840194600190910190840162000e64565b508582101562000ea45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000ec757600080fd5b815160ff8116811462000ed957600080fd5b9392505050565b60006020828403121562000ef357600080fd5b62000ed98262000c86565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000f2e5762000f2e62000efe565b92915050565b60008262000f5257634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000f2e5762000f2e62000efe565b60805160a05160c05160e0516143ca62000ffb6000396000818161331c01526138220152600081816108bb01528181613349015281816133bc01528181613470015281816134b90152818161354b01526137950152600081816105d30152818161173701528181611cc401528181613240015261326701526000818161040901526137ec01526143ca6000f3fe6080604052600436106103c05760003560e01c80638a8c523c116101f4578063ccfa214f1161010e578063e2f45605116100a6578063e2f4560514610b95578063ea4cfe1214610bab578063ee40166e14610bcb578063efab831c14610be1578063f11a24d314610bfb578063f2fde38b14610c11578063f5648a4f14610c31578063f637434214610c46578063f851a44014610c5c578063fb002c9714610c7c57600080fd5b8063ccfa214f14610a6e578063cd560eb014610a8d578063d0d41fe114610aba578063d257b34f14610ada578063d6e242b814610afa578063d85ba06314610b0f578063dbac26e914610b25578063dc3f0d0f14610b55578063dd62ed3e14610b7557600080fd5b80639fccce321161018c5780639fccce321461093e578063a0d82dc514610954578063a457c2d71461096a578063a9059cbb1461098a578063b38fe957146109aa578063b5c22877146109bf578063b62496f5146109df578063bbc0c74214610a0f578063c024666814610a2e578063c17b5b8c14610a4e57600080fd5b80638a8c523c146108365780638da5cb5b1461084b57806393310ffe14610869578063936af9111461088957806393a39776146108a957806395d89b41146108dd5780639a7a23d6146108f25780639c3b4fdc146109125780639e93ad8e1461092857600080fd5b806351f205e4116102e55780636c9230db1161027d5780636c9230db1461071a5780636d1b229d1461072d5780636ddd17131461074d5780636e9960c31461076d57806370a082311461078b578063715018a6146107ab5780637571336a146107c05780638095d564146107e05780638366e79a1461080057806388e765ff1461082057600080fd5b806351f205e414610645578063552fd1481461065a5780635a139dd41461067a5780635b8a194a146106905780635f6529a3146106a557806361086b00146106c557806366d602ae146106db578063672d5d3b146106f15780636a486a8e1461070457600080fd5b80632ecaf675116103585780632ecaf6751461052f578063313ce567146105455780633221c93f1461056157806339509351146105815780633ad10ef6146105a1578063452ed4f1146105c1578063499b8394146105f55780634a62bb65146106155780634f77f6c01461062f57600080fd5b806306fdde03146103cc5780630758d924146103f7578063095ea7b31461043857806310d5de531461046857806318160ddd146104985780631a8145bb146104b75780632307b441146104cd57806323b872dd146104ef5780632baa3c9e1461050f57600080fd5b366103c757005b600080fd5b3480156103d857600080fd5b506103e1610c92565b6040516103ee9190613b6b565b60405180910390f35b34801561040357600080fd5b5061042b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516103ee9190613b9e565b34801561044457600080fd5b50610458610453366004613bce565b610d24565b60405190151581526020016103ee565b34801561047457600080fd5b50610458610483366004613bf8565b60246020526000908152604090205460ff1681565b3480156104a457600080fd5b506002545b6040519081526020016103ee565b3480156104c357600080fd5b506104a960215481565b3480156104d957600080fd5b506104ed6104e8366004613cee565b610edc565b005b3480156104fb57600080fd5b5061045861050a366004613dad565b611035565b34801561051b57600080fd5b506104ed61052a366004613bf8565b6111fe565b34801561053b57600080fd5b506104a960095481565b34801561055157600080fd5b50604051601281526020016103ee565b34801561056d57600080fd5b5060135461042b906001600160a01b031681565b34801561058d57600080fd5b5061045861059c366004613bce565b61128d565b3480156105ad57600080fd5b5060125461042b906001600160a01b031681565b3480156105cd57600080fd5b5061042b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561060157600080fd5b506104ed610610366004613bf8565b611375565b34801561062157600080fd5b506016546104589060ff1681565b34801561063b57600080fd5b506104a9601c5481565b34801561065157600080fd5b506104ed61140f565b34801561066657600080fd5b506104ed610675366004613e42565b611510565b34801561068657600080fd5b506104a960185481565b34801561069c57600080fd5b506104ed6115b1565b3480156106b157600080fd5b5060055461042b906001600160a01b031681565b3480156106d157600080fd5b506104a9600a5481565b3480156106e757600080fd5b506104a9600e5481565b3480156106fd57600080fd5b50436104a9565b34801561071057600080fd5b506104a9601b5481565b34801561072657600080fd5b50426104a9565b34801561073957600080fd5b506104ed610748366004613e98565b61161e565b34801561075957600080fd5b506016546104589062010000900460ff1681565b34801561077957600080fd5b506008546001600160a01b031661042b565b34801561079757600080fd5b506104a96107a6366004613bf8565b611677565b3480156107b757600080fd5b506104ed611692565b3480156107cc57600080fd5b506104ed6107db366004613eb1565b611706565b3480156107ec57600080fd5b506104ed6107fb366004613ee8565b6117f1565b34801561080c57600080fd5b506104ed61081b366004613f14565b611895565b34801561082c57600080fd5b506104a9600d5481565b34801561084257600080fd5b506104ed611a56565b34801561085757600080fd5b50600c546001600160a01b031661042b565b34801561087557600080fd5b506104ed610884366004613bce565b611b15565b34801561089557600080fd5b506104ed6108a4366004613f47565b611b98565b3480156108b557600080fd5b5061042b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156108e957600080fd5b506103e1611c89565b3480156108fe57600080fd5b506104ed61090d366004613eb1565b611c98565b34801561091e57600080fd5b506104a9601a5481565b34801561093457600080fd5b506104a961271081565b34801561094a57600080fd5b506104a960225481565b34801561096057600080fd5b506104a9601e5481565b34801561097657600080fd5b50610458610985366004613bce565b611dab565b34801561099657600080fd5b506104586109a5366004613bce565b611f12565b3480156109b657600080fd5b506104ed611fd0565b3480156109cb57600080fd5b506104ed6109da366004613f88565b6120dd565b3480156109eb57600080fd5b506104586109fa366004613bf8565b60256020526000908152604090205460ff1681565b348015610a1b57600080fd5b5060165461045890610100900460ff1681565b348015610a3a57600080fd5b506104ed610a49366004613eb1565b6121ed565b348015610a5a57600080fd5b506104ed610a69366004613ee8565b612276565b348015610a7a57600080fd5b50600b5461045890610100900460ff1681565b348015610a9957600080fd5b506104a9610aa8366004613bf8565b601f6020526000908152604090205481565b348015610ac657600080fd5b506104ed610ad5366004613bf8565b61231a565b348015610ae657600080fd5b506104ed610af5366004613e98565b6123b4565b348015610b0657600080fd5b506104ed6124ff565b348015610b1b57600080fd5b506104a960175481565b348015610b3157600080fd5b50610458610b40366004613bf8565b60156020526000908152604090205460ff1681565b348015610b6157600080fd5b506104ed610b70366004613e98565b612583565b348015610b8157600080fd5b506104a9610b90366004613f14565b612698565b348015610ba157600080fd5b506104a960105481565b348015610bb757600080fd5b5060115461042b906001600160a01b031681565b348015610bd757600080fd5b506104a960145481565b348015610bed57600080fd5b50600b546104589060ff1681565b348015610c0757600080fd5b506104a960195481565b348015610c1d57600080fd5b506104ed610c2c366004613bf8565b6126c5565b348015610c3d57600080fd5b506104ed6127b0565b348015610c5257600080fd5b506104a9601d5481565b348015610c6857600080fd5b5060085461042b906001600160a01b031681565b348015610c8857600080fd5b506104a960205481565b606060038054610ca19061401c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccd9061401c565b8015610d1a5780601f10610cef57610100808354040283529160200191610d1a565b820191906000526020600020905b815481529060010190602001808311610cfd57829003601f168201915b5050505050905090565b60008282600b60019054906101000a900460ff1615610e7c57600b546201000090046001600160a01b03166347abf3be3384846040518463ffffffff1660e01b8152600401610d7593929190614056565b600060405180830381600087803b158015610d8f57600080fd5b505af1158015610da3573d6000803e3d6000fd5b505050508360001480610dd757503360009081526001602090815260408083206001600160a01b0389168452909152902054155b610dfc5760405162461bcd60e51b8152600401610df39061407a565b60405180910390fd5b610e08335b868661281c565b600b54600193506201000090046001600160a01b031663900f66ef335b84846040518463ffffffff1660e01b8152600401610e4593929190614056565b600060405180830381600087803b158015610e5f57600080fd5b505af1158015610e73573d6000803e3d6000fd5b50505050610ed4565b831580610eaa57503360009081526001602090815260408083206001600160a01b0389168452909152902054155b610ec65760405162461bcd60e51b8152600401610df39061407a565b610ecf33610e01565b600192505b505092915050565b600c546001600160a01b03163314610f065760405162461bcd60e51b8152600401610df3906140c2565b8051825114610f575760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610df3565b610190825110610fc85760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203430302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610df3565b60005b8251811015611030576000838281518110610fe857610fe86140f7565b602002602001015190506000838381518110611006576110066140f7565b6020026020010151905061101b338383612943565b5050808061102890614123565b915050610fcb565b505050565b6000838383600b60019054906101000a900460ff161561119557600b546201000090046001600160a01b031663379f5c69338585856040518563ffffffff1660e01b8152600401611089949392919061413c565b600060405180830381600087803b1580156110a357600080fd5b505af11580156110b7573d6000803e3d6000fd5b505050506110c6878787612b1d565b6001600160a01b03871660009081526001602090815260408083203384529091529020548581101561110a5760405162461bcd60e51b8152600401610df390614166565b61111f88335b61111a89856141af565b61281c565b50600b54600194506201000090046001600160a01b031663a56e8adf338585856040518563ffffffff1660e01b815260040161115e949392919061413c565b600060405180830381600087803b15801561117857600080fd5b505af115801561118c573d6000803e3d6000fd5b505050506111f4565b6111a0878787612b1d565b6001600160a01b0387166000908152600160209081526040808320338452909152902054858110156111e45760405162461bcd60e51b8152600401610df390614166565b6111ee8833611110565b60019450505b5050509392505050565b6005546001600160a01b0316336001600160a01b0316146112315760405162461bcd60e51b8152600401610df3906141c2565b6008546040516001600160a01b038084169216907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f90600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b60008282600b60019054906101000a900460ff161561136c57600b546201000090046001600160a01b031663cf5961bb3384846040518463ffffffff1660e01b81526004016112de93929190614056565b600060405180830381600087803b1580156112f857600080fd5b505af115801561130c573d6000803e3d6000fd5b5050505061134b61131a3390565b3360009081526001602090815260408083206001600160a01b038b168452909152902054879061111a9088906141f9565b600b54600193506201000090046001600160a01b03166334d01aa833610e25565b610ecf3361131a565b600c546001600160a01b0316331461139f5760405162461bcd60e51b8152600401610df3906140c2565b6001600160a01b0381166113c55760405162461bcd60e51b8152600401610df39061420c565b601180546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b600c546001600160a01b031633146114395760405162461bcd60e51b8152600401610df3906140c2565b60105461144530611677565b10156114bb576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610df3565b600f805460ff191660011790556114d06131af565b600f805460ff191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32906020015b60405180910390a1565b600c546001600160a01b0316331461153a5760405162461bcd60e51b8152600401610df3906140c2565b60005b828110156115ab57816015600086868581811061155c5761155c6140f7565b90506020020160208101906115719190613bf8565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806115a381614123565b91505061153d565b50505050565b6005546001600160a01b0316336001600160a01b0316146115e45760405162461bcd60e51b8152600401610df3906141c2565b600b805461ffff19166101001790556040517fa4a40bdd0a809720a61b44f1b3497ce7dad87741a0ba3b961c2e65e645060e7090600090a1565b8061162833611677565b101561166a5760405162461bcd60e51b81526020600482015260116024820152706e6f7420656e6f75676820746f6b656e7360781b6044820152606401610df3565b61167433826135db565b50565b6001600160a01b031660009081526020819052604090205490565b600c546001600160a01b031633146116bc5760405162461bcd60e51b8152600401610df3906140c2565b600c546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600c80546001600160a01b0319169055565b600c546001600160a01b031633146117305760405162461bcd60e51b8152600401610df3906140c2565b806117c6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036117c65760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610df3565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b600c546001600160a01b0316331461181b5760405162461bcd60e51b8152600401610df3906140c2565b60188390556019829055601a8190558061183583856141f9565b61183f91906141f9565b60178190556105dc10156110305760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610df3565b600c546001600160a01b031633146118bf5760405162461bcd60e51b8152600401610df3906140c2565b6001600160a01b0382166119125760405162461bcd60e51b815260206004820152601a60248201527905f746f6b656e20616464726573732063616e6e6f7420626520360341b6044820152606401610df3565b6001600160a01b038216301415806119325750601654610100900460ff16155b61199b5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610df3565b6040516370a0823160e01b81526000906001600160a01b038416906370a08231906119ca903090600401613b9e565b602060405180830381865afa1580156119e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0b9190614239565b9050611a188383836136ba565b7fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e4388382604051611a49929190614252565b60405180910390a1505050565b600c546001600160a01b03163314611a805760405162461bcd60e51b8152600401610df3906140c2565b601654610100900460ff1615611ad55760405162461bcd60e51b815260206004820152601a602482015279151c98591a5b99c81a5cc8185b1c9958591e481cdd185c9d195960321b6044820152606401610df3565b6016805462ffff00191662010100179055436014556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b0316336001600160a01b031614611b485760405162461bcd60e51b8152600401610df3906141c2565b600680546001600160a01b0319166001600160a01b03841690811790915560078290556040517fc5666bfdfb79a4b0b4abdbc565d6e9937a263233b2b378c55132d34dc5784a3690600090a25050565b600b546201000090046001600160a01b0316336001600160a01b031614611c015760405162461bcd60e51b815260206004820152601e60248201527f4c45524332303a204f6e6c79206c6f73736c65737320636f6e747261637400006044820152606401610df3565b60005b8181101561103057611c77838383818110611c2157611c216140f7565b9050602002016020810190611c369190613bf8565b600b546201000090046001600160a01b0316611c72868686818110611c5d57611c5d6140f7565b90506020020160208101906107a69190613bf8565b612b1d565b80611c8181614123565b915050611c04565b606060048054610ca19061401c565b600c546001600160a01b03163314611cc25760405162461bcd60e51b8152600401610df3906140c2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611d655760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d206044820152786175746f6d617465644d61726b65744d616b6572506169727360381b6064820152608401610df3565b611d6f8282613710565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60008282600b60019054906101000a900460ff1615611eb957600b546201000090046001600160a01b031663568c75a93384846040518463ffffffff1660e01b8152600401611dfc93929190614056565b600060405180830381600087803b158015611e1657600080fd5b505af1158015611e2a573d6000803e3d6000fd5b50505050600060016000611e3b3390565b6001600160a01b03908116825260208083019390935260409182016000908120918a1681529252902054905084811015611e875760405162461bcd60e51b8152600401610df39061426b565b611e97335b8761111a88856141af565b50600b54600193506201000090046001600160a01b031663ded1f4d033610e25565b3360009081526001602090815260408083206001600160a01b038916845290915290205484811015611efd5760405162461bcd60e51b8152600401610df39061426b565b611f0633611e8c565b50600195945050505050565b60008282600b60019054906101000a900460ff1615611fc757600b546201000090046001600160a01b0316631ffb811f3384846040518463ffffffff1660e01b8152600401611f6393929190614056565b600060405180830381600087803b158015611f7d57600080fd5b505af1158015611f91573d6000803e3d6000fd5b50505050611fa6611f9f3390565b8686612b1d565b600b54600193506201000090046001600160a01b031663f49062ca33610e25565b610ecf33611f9f565b6005546001600160a01b0316336001600160a01b0316146120035760405162461bcd60e51b8152600401610df3906141c2565b600b5460ff166120555760405162461bcd60e51b815260206004820152601c60248201527f4c45524332303a205475726e4f6666206e6f742070726f706f736564000000006044820152606401610df3565b42600a5411156120a75760405162461bcd60e51b815260206004820152601d60248201527f4c45524332303a2054696d65206c6f636b20696e2070726f67726573730000006044820152606401610df3565b600b805461ffff191690556040517f5b534e2716e5ad68b9f67521378f8199a7ceb9d3f6f354275dad33fe42cf710a90600090a1565b6006546001600160a01b0316336001600160a01b03161461213c5760405162461bcd60e51b81526020600482015260196024820152784c45524332303a204d7573742062652063616e64697461746560381b6044820152606401610df3565b60075481516020830120146121895760405162461bcd60e51b81526020600482015260136024820152724c45524332303a20496e76616c6964206b657960681b6044820152606401610df3565b6006546005546040516001600160a01b0392831692909116907f1c7f382531621f02aefb4212478bba8871ffad078202bdbba87f3e21d639aebb90600090a350600654600580546001600160a01b0319166001600160a01b03909216919091179055565b600c546001600160a01b031633146122175760405162461bcd60e51b8152600401610df3906140c2565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b600c546001600160a01b031633146122a05760405162461bcd60e51b8152600401610df3906140c2565b601c839055601d829055601e819055806122ba83856141f9565b6122c491906141f9565b601b8190556107d010156110305760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610df3565b600c546001600160a01b031633146123445760405162461bcd60e51b8152600401610df3906140c2565b6001600160a01b03811661236a5760405162461bcd60e51b8152600401610df39061420c565b601280546001600160a01b0319166001600160a01b0383169081179091556040517f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad5490600090a250565b600c546001600160a01b031633146123de5760405162461bcd60e51b8152600401610df3906140c2565b620186a06123eb60025490565b6123f69060016142b1565b61240091906142c8565b81101561246d5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610df3565b61271061247960025490565b6124849060016142b1565b61248e91906142c8565b8111156124fa5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610df3565b601055565b6005546001600160a01b0316336001600160a01b0316146125325760405162461bcd60e51b8152600401610df3906141c2565b60095461253f90426141f9565b600a819055600b805460ff191660011790556040517f88e0be0448355c71674462d3cb36342f0d085f7b43a1deab03052c95eb158709916115069190815260200190565b600c546001600160a01b031633146125ad5760405162461bcd60e51b8152600401610df3906140c2565b670de0b6b3a7640000612ee06125c260025490565b6125cd9060016142b1565b6125d791906142c8565b6125e191906142c8565b81101561264b5760405162461bcd60e51b815260206004820152603260248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015271103a3430b7101a9817181818102a37b5b2b760711b6064820152608401610df3565b61265d81670de0b6b3a76400006142b1565b600e8190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e9060200160405180910390a150565b6001600160a01b038083166000908152600160209081526040808320938516835292905220545b92915050565b600c546001600160a01b031633146126ef5760405162461bcd60e51b8152600401610df3906140c2565b6001600160a01b0381166127545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610df3565b600c546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031633146127da5760405162461bcd60e51b8152600401610df3906140c2565b604051600090339047908381818185875af1925050503d80600081146115ab576040519150601f19603f3d011682016040523d82523d6000602084013e6115ab565b6001600160a01b0383166128805760405162461bcd60e51b815260206004820152602560248201527f4c45524332303a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610df3565b6001600160a01b0382166128e25760405162461bcd60e51b815260206004820152602360248201527f4c45524332303a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610df3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166129a85760405162461bcd60e51b815260206004820152602660248201527f4c45524332303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b6064820152608401610df3565b6001600160a01b038216612a0a5760405162461bcd60e51b8152602060048201526024808201527f4c45524332303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610df3565b6001600160a01b03831660009081526020819052604090205481811015612a835760405162461bcd60e51b815260206004820152602760248201527f4c45524332303a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b6064820152608401610df3565b612a8d82826141af565b6001600160a01b038086166000908152602081905260408082209390935590851681529081208054849290612ac39084906141f9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b0f91815260200190565b60405180910390a350505050565b6001600160a01b038316612b815760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610df3565b6001600160a01b038216612be35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610df3565b60008111612c335760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610df3565b6001600160a01b03831660009081526015602052604090205460ff16158015612c7557506001600160a01b03821660009081526015602052604090205460ff16155b80612c8d5750600c546001600160a01b038381169116145b80612ca257506001600160a01b03821661dead145b612cee5760405162461bcd60e51b815260206004820152601c60248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e732e000000006044820152606401610df3565b6001600160a01b038083166000908152601f60209081526040808320439055928616825260239052205460ff1680612d3e57506001600160a01b03821660009081526023602052604090205460ff165b80612d4b5750600f5460ff165b15612d5b57611030838383612943565b601654610100900460ff16612dab5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610df3565b6001600160a01b03821660009081526025602052604090205460ff168015612dec57506001600160a01b03831660009081526024602052604090205460ff16155b15612e5657600e54811115612e565760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610df3565b601054612e6230611677565b10158015612e78575060165462010000900460ff165b8015612e875750600f5460ff16155b8015612eac57506001600160a01b03831660009081526025602052604090205460ff16155b8015612ed157506001600160a01b03831660009081526023602052604090205460ff16155b8015612ef657506001600160a01b03821660009081526023602052604090205460ff16155b15612f1b57600f805460ff19166001179055612f106131af565b600f805460ff191690555b6001600160a01b03831660009081526023602052604081205460ff16158015612f5d57506001600160a01b03831660009081526023602052604090205460ff16155b156131a4576001600160a01b03831660009081526025602052604090205460ff168015612f8c57506000601b54115b156130a8576001600160a01b0384166000908152601f60205260409020544390612fb79060026141f9565b10612ff45760405162461bcd60e51b815260206004820152600d60248201526c29b2b636103a37b79039b7b7b760991b6044820152606401610df3565b612710601b548361300591906142b1565b61300f91906142c8565b9050601b54601d548261302291906142b1565b61302c91906142c8565b6021600082825461303d91906141f9565b9091555050601b54601c5461305290836142b1565b61305c91906142c8565b6020600082825461306d91906141f9565b9091555050601b54601e5461308290836142b1565b61308c91906142c8565b6022600082825461309d91906141f9565b909155506131869050565b6001600160a01b03841660009081526025602052604090205460ff1680156130d257506000601754115b1561318657612710601754836130e891906142b1565b6130f291906142c8565b90506017546019548261310591906142b1565b61310f91906142c8565b6021600082825461312091906141f9565b909155505060175460185461313590836142b1565b61313f91906142c8565b6020600082825461315091906141f9565b9091555050601754601a5461316590836142b1565b61316f91906142c8565b6022600082825461318091906141f9565b90915550505b801561319757613197843083612943565b6131a181836141af565b91505b6115ab848484612943565b60006131ba30611677565b905060006022546020546021546131d191906141f9565b6131db91906141f9565b90508115806131e8575080155b156131f1575050565b6010546131ff9060286142b1565b821115613217576010546132149060286142b1565b91505b6000816021548461322891906142b1565b61323291906142c8565b905080156132ef57613265307f000000000000000000000000000000000000000000000000000000000000000083612943565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132c057600080fd5b505af19250505080156132d1575060015b506132dc81846141af565b9250602154826132ec91906141af565b91505b826000036132fc57505050565b6133058361373e565b6040516304fa881160e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906313ea204490613371907f000000000000000000000000000000000000000000000000000000000000000090600401613b9e565b600060405180830381600087803b15801561338b57600080fd5b505af115801561339f573d6000803e3d6000fd5b50506040516370a0823160e01b8152600092506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691506370a08231906133f2903090600401613b9e565b602060405180830381865afa15801561340f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134339190614239565b90506000836020548361344691906142b1565b61345091906142c8565b6000602181905560208190556022559050801561349f5760115461349f907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b0316836136ba565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906134ee903090600401613b9e565b602060405180830381865afa15801561350b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061352f9190614239565b11156135d4576012546040516370a0823160e01b81526135d4917f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b03918216918316906370a082319061358e903090600401613b9e565b602060405180830381865afa1580156135ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135cf9190614239565b6136ba565b5050505050565b6001600160a01b0382166136315760405162461bcd60e51b815260206004820181905260248201527f4c45524332303a206d696e7420746f20746865207a65726f20616464726573736044820152606401610df3565b806002600082825461364391906141af565b90915550506001600160a01b038216600090815260208190526040812080548392906136709084906141af565b90915550506040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6110308363a9059cbb60e01b84846040516024016136d9929190614252565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613882565b6001600160a01b0382166000908152602560205260409020805460ff1916821515179055611d6f8282613954565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613773576137736140f7565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816001815181106137c7576137c76140f7565b6001600160a01b039283166020918202929092010152604051635c11d79560e01b81527f000000000000000000000000000000000000000000000000000000000000000090911690635c11d7959061384c90859060009086907f00000000000000000000000000000000000000000000000000000000000000009042906004016142ea565b600060405180830381600087803b15801561386657600080fd5b505af115801561387a573d6000803e3d6000fd5b505050505050565b60006138d7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166139b79092919063ffffffff16565b80519091501561103057808060200190518101906138f5919061435b565b6110305760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610df3565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b60606139c684846000856139ce565b949350505050565b606082471015613a2f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610df3565b600080866001600160a01b03168587604051613a4b9190614378565b60006040518083038185875af1925050503d8060008114613a88576040519150601f19603f3d011682016040523d82523d6000602084013e613a8d565b606091505b5091509150613a9e87838387613aa9565b979650505050505050565b60608315613b18578251600003613b11576001600160a01b0385163b613b115760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610df3565b50816139c6565b6139c68383815115613b2d5781518083602001fd5b8060405162461bcd60e51b8152600401610df39190613b6b565b60005b83811015613b62578181015183820152602001613b4a565b50506000910152565b6020815260008251806020840152613b8a816040850160208701613b47565b601f01601f19169190910160400192915050565b6001600160a01b0391909116815260200190565b80356001600160a01b0381168114613bc957600080fd5b919050565b60008060408385031215613be157600080fd5b613bea83613bb2565b946020939093013593505050565b600060208284031215613c0a57600080fd5b613c1382613bb2565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613c5857613c58613c1a565b604052919050565b60006001600160401b03821115613c7957613c79613c1a565b5060051b60200190565b600082601f830112613c9457600080fd5b81356020613ca9613ca483613c60565b613c30565b82815260059290921b84018101918181019086841115613cc857600080fd5b8286015b84811015613ce35780358352918301918301613ccc565b509695505050505050565b60008060408385031215613d0157600080fd5b82356001600160401b0380821115613d1857600080fd5b818501915085601f830112613d2c57600080fd5b81356020613d3c613ca483613c60565b82815260059290921b84018101918181019089841115613d5b57600080fd5b948201945b83861015613d8057613d7186613bb2565b82529482019490820190613d60565b96505086013592505080821115613d9657600080fd5b50613da385828601613c83565b9150509250929050565b600080600060608486031215613dc257600080fd5b613dcb84613bb2565b9250613dd960208501613bb2565b9150604084013590509250925092565b60008083601f840112613dfb57600080fd5b5081356001600160401b03811115613e1257600080fd5b6020830191508360208260051b8501011115613e2d57600080fd5b9250929050565b801515811461167457600080fd5b600080600060408486031215613e5757600080fd5b83356001600160401b03811115613e6d57600080fd5b613e7986828701613de9565b9094509250506020840135613e8d81613e34565b809150509250925092565b600060208284031215613eaa57600080fd5b5035919050565b60008060408385031215613ec457600080fd5b613ecd83613bb2565b91506020830135613edd81613e34565b809150509250929050565b600080600060608486031215613efd57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215613f2757600080fd5b613f3083613bb2565b9150613f3e60208401613bb2565b90509250929050565b60008060208385031215613f5a57600080fd5b82356001600160401b03811115613f7057600080fd5b613f7c85828601613de9565b90969095509350505050565b60006020808385031215613f9b57600080fd5b82356001600160401b0380821115613fb257600080fd5b818501915085601f830112613fc657600080fd5b813581811115613fd857613fd8613c1a565b613fea601f8201601f19168501613c30565b9150808252868482850101111561400057600080fd5b8084840185840137600090820190930192909252509392505050565b600181811c9082168061403057607f821691505b60208210810361405057634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526028908201527f4c45524332303a2043616e6e6f74206368616e6765206e6f6e207a65726f20616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016141355761413561410d565b5060010190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b60208082526029908201527f4c45524332303a207472616e7366657220616d6f756e74206578636565647320604082015268616c6c6f77616e636560b81b606082015260800190565b818103818111156126bf576126bf61410d565b6020808252601e908201527f4c45524332303a204d757374206265207265636f766572792061646d696e0000604082015260600190565b808201808211156126bf576126bf61410d565b6020808252601390820152720616464726573732063616e6e6f74206265203606c1b604082015260600190565b60006020828403121561424b57600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b60208082526026908201527f4c45524332303a2064656372656173656420616c6c6f77616e63652062656c6f60408201526577207a65726f60d01b606082015260800190565b80820281158282048414176126bf576126bf61410d565b6000826142e557634e487b7160e01b600052601260045260246000fd5b500490565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561433a5784516001600160a01b031683529383019391830191600101614315565b50506001600160a01b03969096166060850152505050608001529392505050565b60006020828403121561436d57600080fd5b8151613c1381613e34565b6000825161438a818460208701613b47565b919091019291505056fea2646970667358221220630ef44363d759d9758c4adfc2e9c11ee9300bf2bb69da70613de9371490289064736f6c63430008110033608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061074b806100616000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806313ea204414610051578063715018a6146100665780638da5cb5b1461006e578063f2fde38b14610090575b600080fd5b61006461005f3660046105ee565b6100a3565b005b6100646101d7565b6000546001600160a01b0316604051610087919061061e565b60405180910390f35b61006461009e3660046105ee565b61024b565b6000546001600160a01b031633146100d65760405162461bcd60e51b81526004016100cd90610632565b60405180910390fd5b6040516370a0823160e01b81526000906001600160a01b038316906370a082319061010590309060040161061e565b602060405180830381865afa158015610122573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101469190610667565b11156101d4576101d4816101626000546001600160a01b031690565b6040516370a0823160e01b81526001600160a01b038516906370a082319061018e90309060040161061e565b602060405180830381865afa1580156101ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101cf9190610667565b610335565b50565b6000546001600160a01b031633146102015760405162461bcd60e51b81526004016100cd90610632565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146102755760405162461bcd60e51b81526004016100cd90610632565b6001600160a01b0381166102da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016100cd565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261038790849061038c565b505050565b60006103e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661045e9092919063ffffffff16565b80519091501561038757808060200190518101906103ff9190610680565b6103875760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016100cd565b606061046d8484600085610475565b949350505050565b6060824710156104d65760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016100cd565b600080866001600160a01b031685876040516104f291906106c6565b60006040518083038185875af1925050503d806000811461052f576040519150601f19603f3d011682016040523d82523d6000602084013e610534565b606091505b509150915061054587838387610550565b979650505050505050565b606083156105bf5782516000036105b8576001600160a01b0385163b6105b85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016100cd565b508161046d565b61046d83838151156105d45781518083602001fd5b8060405162461bcd60e51b81526004016100cd91906106e2565b60006020828403121561060057600080fd5b81356001600160a01b038116811461061757600080fd5b9392505050565b6001600160a01b0391909116815260200190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561067957600080fd5b5051919050565b60006020828403121561069257600080fd5b8151801515811461061757600080fd5b60005b838110156106bd5781810151838201526020016106a5565b50506000910152565b600082516106d88184602087016106a2565b9190910192915050565b60208152600082518060208401526107018160408501602087016106a2565b601f01601f1916919091016040019291505056fea2646970667358221220260f704e001f7753d9ddb75e2c6f642ede0c43dbf78f2b393d67100a8f1c50e264736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0000000000000000000000000000000000000000001f04ef12cb04cf15800000000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000b197fe735b35d6c1458212887ae5d14dd0cb192200000000000000000000000023156f2d1fe89a14c742df1c3483e333dbbfa259000000000000000000000000000000000000000000000000000000000001518000000000000000000000000066622e2c1b991983e88132da19b2c31f71009035000000000000000000000000000000000000000000000000000000000000000741696d6564697300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000441494d5800000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106103c05760003560e01c80638a8c523c116101f4578063ccfa214f1161010e578063e2f45605116100a6578063e2f4560514610b95578063ea4cfe1214610bab578063ee40166e14610bcb578063efab831c14610be1578063f11a24d314610bfb578063f2fde38b14610c11578063f5648a4f14610c31578063f637434214610c46578063f851a44014610c5c578063fb002c9714610c7c57600080fd5b8063ccfa214f14610a6e578063cd560eb014610a8d578063d0d41fe114610aba578063d257b34f14610ada578063d6e242b814610afa578063d85ba06314610b0f578063dbac26e914610b25578063dc3f0d0f14610b55578063dd62ed3e14610b7557600080fd5b80639fccce321161018c5780639fccce321461093e578063a0d82dc514610954578063a457c2d71461096a578063a9059cbb1461098a578063b38fe957146109aa578063b5c22877146109bf578063b62496f5146109df578063bbc0c74214610a0f578063c024666814610a2e578063c17b5b8c14610a4e57600080fd5b80638a8c523c146108365780638da5cb5b1461084b57806393310ffe14610869578063936af9111461088957806393a39776146108a957806395d89b41146108dd5780639a7a23d6146108f25780639c3b4fdc146109125780639e93ad8e1461092857600080fd5b806351f205e4116102e55780636c9230db1161027d5780636c9230db1461071a5780636d1b229d1461072d5780636ddd17131461074d5780636e9960c31461076d57806370a082311461078b578063715018a6146107ab5780637571336a146107c05780638095d564146107e05780638366e79a1461080057806388e765ff1461082057600080fd5b806351f205e414610645578063552fd1481461065a5780635a139dd41461067a5780635b8a194a146106905780635f6529a3146106a557806361086b00146106c557806366d602ae146106db578063672d5d3b146106f15780636a486a8e1461070457600080fd5b80632ecaf675116103585780632ecaf6751461052f578063313ce567146105455780633221c93f1461056157806339509351146105815780633ad10ef6146105a1578063452ed4f1146105c1578063499b8394146105f55780634a62bb65146106155780634f77f6c01461062f57600080fd5b806306fdde03146103cc5780630758d924146103f7578063095ea7b31461043857806310d5de531461046857806318160ddd146104985780631a8145bb146104b75780632307b441146104cd57806323b872dd146104ef5780632baa3c9e1461050f57600080fd5b366103c757005b600080fd5b3480156103d857600080fd5b506103e1610c92565b6040516103ee9190613b6b565b60405180910390f35b34801561040357600080fd5b5061042b7f000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff81565b6040516103ee9190613b9e565b34801561044457600080fd5b50610458610453366004613bce565b610d24565b60405190151581526020016103ee565b34801561047457600080fd5b50610458610483366004613bf8565b60246020526000908152604090205460ff1681565b3480156104a457600080fd5b506002545b6040519081526020016103ee565b3480156104c357600080fd5b506104a960215481565b3480156104d957600080fd5b506104ed6104e8366004613cee565b610edc565b005b3480156104fb57600080fd5b5061045861050a366004613dad565b611035565b34801561051b57600080fd5b506104ed61052a366004613bf8565b6111fe565b34801561053b57600080fd5b506104a960095481565b34801561055157600080fd5b50604051601281526020016103ee565b34801561056d57600080fd5b5060135461042b906001600160a01b031681565b34801561058d57600080fd5b5061045861059c366004613bce565b61128d565b3480156105ad57600080fd5b5060125461042b906001600160a01b031681565b3480156105cd57600080fd5b5061042b7f000000000000000000000000f115bdba888d0f54aa48b4593123c3f8800cc92e81565b34801561060157600080fd5b506104ed610610366004613bf8565b611375565b34801561062157600080fd5b506016546104589060ff1681565b34801561063b57600080fd5b506104a9601c5481565b34801561065157600080fd5b506104ed61140f565b34801561066657600080fd5b506104ed610675366004613e42565b611510565b34801561068657600080fd5b506104a960185481565b34801561069c57600080fd5b506104ed6115b1565b3480156106b157600080fd5b5060055461042b906001600160a01b031681565b3480156106d157600080fd5b506104a9600a5481565b3480156106e757600080fd5b506104a9600e5481565b3480156106fd57600080fd5b50436104a9565b34801561071057600080fd5b506104a9601b5481565b34801561072657600080fd5b50426104a9565b34801561073957600080fd5b506104ed610748366004613e98565b61161e565b34801561075957600080fd5b506016546104589062010000900460ff1681565b34801561077957600080fd5b506008546001600160a01b031661042b565b34801561079757600080fd5b506104a96107a6366004613bf8565b611677565b3480156107b757600080fd5b506104ed611692565b3480156107cc57600080fd5b506104ed6107db366004613eb1565b611706565b3480156107ec57600080fd5b506104ed6107fb366004613ee8565b6117f1565b34801561080c57600080fd5b506104ed61081b366004613f14565b611895565b34801561082c57600080fd5b506104a9600d5481565b34801561084257600080fd5b506104ed611a56565b34801561085757600080fd5b50600c546001600160a01b031661042b565b34801561087557600080fd5b506104ed610884366004613bce565b611b15565b34801561089557600080fd5b506104ed6108a4366004613f47565b611b98565b3480156108b557600080fd5b5061042b7f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f61981565b3480156108e957600080fd5b506103e1611c89565b3480156108fe57600080fd5b506104ed61090d366004613eb1565b611c98565b34801561091e57600080fd5b506104a9601a5481565b34801561093457600080fd5b506104a961271081565b34801561094a57600080fd5b506104a960225481565b34801561096057600080fd5b506104a9601e5481565b34801561097657600080fd5b50610458610985366004613bce565b611dab565b34801561099657600080fd5b506104586109a5366004613bce565b611f12565b3480156109b657600080fd5b506104ed611fd0565b3480156109cb57600080fd5b506104ed6109da366004613f88565b6120dd565b3480156109eb57600080fd5b506104586109fa366004613bf8565b60256020526000908152604090205460ff1681565b348015610a1b57600080fd5b5060165461045890610100900460ff1681565b348015610a3a57600080fd5b506104ed610a49366004613eb1565b6121ed565b348015610a5a57600080fd5b506104ed610a69366004613ee8565b612276565b348015610a7a57600080fd5b50600b5461045890610100900460ff1681565b348015610a9957600080fd5b506104a9610aa8366004613bf8565b601f6020526000908152604090205481565b348015610ac657600080fd5b506104ed610ad5366004613bf8565b61231a565b348015610ae657600080fd5b506104ed610af5366004613e98565b6123b4565b348015610b0657600080fd5b506104ed6124ff565b348015610b1b57600080fd5b506104a960175481565b348015610b3157600080fd5b50610458610b40366004613bf8565b60156020526000908152604090205460ff1681565b348015610b6157600080fd5b506104ed610b70366004613e98565b612583565b348015610b8157600080fd5b506104a9610b90366004613f14565b612698565b348015610ba157600080fd5b506104a960105481565b348015610bb757600080fd5b5060115461042b906001600160a01b031681565b348015610bd757600080fd5b506104a960145481565b348015610bed57600080fd5b50600b546104589060ff1681565b348015610c0757600080fd5b506104a960195481565b348015610c1d57600080fd5b506104ed610c2c366004613bf8565b6126c5565b348015610c3d57600080fd5b506104ed6127b0565b348015610c5257600080fd5b506104a9601d5481565b348015610c6857600080fd5b5060085461042b906001600160a01b031681565b348015610c8857600080fd5b506104a960205481565b606060038054610ca19061401c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccd9061401c565b8015610d1a5780601f10610cef57610100808354040283529160200191610d1a565b820191906000526020600020905b815481529060010190602001808311610cfd57829003601f168201915b5050505050905090565b60008282600b60019054906101000a900460ff1615610e7c57600b546201000090046001600160a01b03166347abf3be3384846040518463ffffffff1660e01b8152600401610d7593929190614056565b600060405180830381600087803b158015610d8f57600080fd5b505af1158015610da3573d6000803e3d6000fd5b505050508360001480610dd757503360009081526001602090815260408083206001600160a01b0389168452909152902054155b610dfc5760405162461bcd60e51b8152600401610df39061407a565b60405180910390fd5b610e08335b868661281c565b600b54600193506201000090046001600160a01b031663900f66ef335b84846040518463ffffffff1660e01b8152600401610e4593929190614056565b600060405180830381600087803b158015610e5f57600080fd5b505af1158015610e73573d6000803e3d6000fd5b50505050610ed4565b831580610eaa57503360009081526001602090815260408083206001600160a01b0389168452909152902054155b610ec65760405162461bcd60e51b8152600401610df39061407a565b610ecf33610e01565b600192505b505092915050565b600c546001600160a01b03163314610f065760405162461bcd60e51b8152600401610df3906140c2565b8051825114610f575760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610df3565b610190825110610fc85760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203430302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610df3565b60005b8251811015611030576000838281518110610fe857610fe86140f7565b602002602001015190506000838381518110611006576110066140f7565b6020026020010151905061101b338383612943565b5050808061102890614123565b915050610fcb565b505050565b6000838383600b60019054906101000a900460ff161561119557600b546201000090046001600160a01b031663379f5c69338585856040518563ffffffff1660e01b8152600401611089949392919061413c565b600060405180830381600087803b1580156110a357600080fd5b505af11580156110b7573d6000803e3d6000fd5b505050506110c6878787612b1d565b6001600160a01b03871660009081526001602090815260408083203384529091529020548581101561110a5760405162461bcd60e51b8152600401610df390614166565b61111f88335b61111a89856141af565b61281c565b50600b54600194506201000090046001600160a01b031663a56e8adf338585856040518563ffffffff1660e01b815260040161115e949392919061413c565b600060405180830381600087803b15801561117857600080fd5b505af115801561118c573d6000803e3d6000fd5b505050506111f4565b6111a0878787612b1d565b6001600160a01b0387166000908152600160209081526040808320338452909152902054858110156111e45760405162461bcd60e51b8152600401610df390614166565b6111ee8833611110565b60019450505b5050509392505050565b6005546001600160a01b0316336001600160a01b0316146112315760405162461bcd60e51b8152600401610df3906141c2565b6008546040516001600160a01b038084169216907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f90600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b60008282600b60019054906101000a900460ff161561136c57600b546201000090046001600160a01b031663cf5961bb3384846040518463ffffffff1660e01b81526004016112de93929190614056565b600060405180830381600087803b1580156112f857600080fd5b505af115801561130c573d6000803e3d6000fd5b5050505061134b61131a3390565b3360009081526001602090815260408083206001600160a01b038b168452909152902054879061111a9088906141f9565b600b54600193506201000090046001600160a01b03166334d01aa833610e25565b610ecf3361131a565b600c546001600160a01b0316331461139f5760405162461bcd60e51b8152600401610df3906140c2565b6001600160a01b0381166113c55760405162461bcd60e51b8152600401610df39061420c565b601180546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b600c546001600160a01b031633146114395760405162461bcd60e51b8152600401610df3906140c2565b60105461144530611677565b10156114bb576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610df3565b600f805460ff191660011790556114d06131af565b600f805460ff191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32906020015b60405180910390a1565b600c546001600160a01b0316331461153a5760405162461bcd60e51b8152600401610df3906140c2565b60005b828110156115ab57816015600086868581811061155c5761155c6140f7565b90506020020160208101906115719190613bf8565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806115a381614123565b91505061153d565b50505050565b6005546001600160a01b0316336001600160a01b0316146115e45760405162461bcd60e51b8152600401610df3906141c2565b600b805461ffff19166101001790556040517fa4a40bdd0a809720a61b44f1b3497ce7dad87741a0ba3b961c2e65e645060e7090600090a1565b8061162833611677565b101561166a5760405162461bcd60e51b81526020600482015260116024820152706e6f7420656e6f75676820746f6b656e7360781b6044820152606401610df3565b61167433826135db565b50565b6001600160a01b031660009081526020819052604090205490565b600c546001600160a01b031633146116bc5760405162461bcd60e51b8152600401610df3906140c2565b600c546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600c80546001600160a01b0319169055565b600c546001600160a01b031633146117305760405162461bcd60e51b8152600401610df3906140c2565b806117c6577f000000000000000000000000f115bdba888d0f54aa48b4593123c3f8800cc92e6001600160a01b0316826001600160a01b0316036117c65760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610df3565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b600c546001600160a01b0316331461181b5760405162461bcd60e51b8152600401610df3906140c2565b60188390556019829055601a8190558061183583856141f9565b61183f91906141f9565b60178190556105dc10156110305760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610df3565b600c546001600160a01b031633146118bf5760405162461bcd60e51b8152600401610df3906140c2565b6001600160a01b0382166119125760405162461bcd60e51b815260206004820152601a60248201527905f746f6b656e20616464726573732063616e6e6f7420626520360341b6044820152606401610df3565b6001600160a01b038216301415806119325750601654610100900460ff16155b61199b5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610df3565b6040516370a0823160e01b81526000906001600160a01b038416906370a08231906119ca903090600401613b9e565b602060405180830381865afa1580156119e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0b9190614239565b9050611a188383836136ba565b7fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e4388382604051611a49929190614252565b60405180910390a1505050565b600c546001600160a01b03163314611a805760405162461bcd60e51b8152600401610df3906140c2565b601654610100900460ff1615611ad55760405162461bcd60e51b815260206004820152601a602482015279151c98591a5b99c81a5cc8185b1c9958591e481cdd185c9d195960321b6044820152606401610df3565b6016805462ffff00191662010100179055436014556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b0316336001600160a01b031614611b485760405162461bcd60e51b8152600401610df3906141c2565b600680546001600160a01b0319166001600160a01b03841690811790915560078290556040517fc5666bfdfb79a4b0b4abdbc565d6e9937a263233b2b378c55132d34dc5784a3690600090a25050565b600b546201000090046001600160a01b0316336001600160a01b031614611c015760405162461bcd60e51b815260206004820152601e60248201527f4c45524332303a204f6e6c79206c6f73736c65737320636f6e747261637400006044820152606401610df3565b60005b8181101561103057611c77838383818110611c2157611c216140f7565b9050602002016020810190611c369190613bf8565b600b546201000090046001600160a01b0316611c72868686818110611c5d57611c5d6140f7565b90506020020160208101906107a69190613bf8565b612b1d565b80611c8181614123565b915050611c04565b606060048054610ca19061401c565b600c546001600160a01b03163314611cc25760405162461bcd60e51b8152600401610df3906140c2565b7f000000000000000000000000f115bdba888d0f54aa48b4593123c3f8800cc92e6001600160a01b0316826001600160a01b031603611d655760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d206044820152786175746f6d617465644d61726b65744d616b6572506169727360381b6064820152608401610df3565b611d6f8282613710565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60008282600b60019054906101000a900460ff1615611eb957600b546201000090046001600160a01b031663568c75a93384846040518463ffffffff1660e01b8152600401611dfc93929190614056565b600060405180830381600087803b158015611e1657600080fd5b505af1158015611e2a573d6000803e3d6000fd5b50505050600060016000611e3b3390565b6001600160a01b03908116825260208083019390935260409182016000908120918a1681529252902054905084811015611e875760405162461bcd60e51b8152600401610df39061426b565b611e97335b8761111a88856141af565b50600b54600193506201000090046001600160a01b031663ded1f4d033610e25565b3360009081526001602090815260408083206001600160a01b038916845290915290205484811015611efd5760405162461bcd60e51b8152600401610df39061426b565b611f0633611e8c565b50600195945050505050565b60008282600b60019054906101000a900460ff1615611fc757600b546201000090046001600160a01b0316631ffb811f3384846040518463ffffffff1660e01b8152600401611f6393929190614056565b600060405180830381600087803b158015611f7d57600080fd5b505af1158015611f91573d6000803e3d6000fd5b50505050611fa6611f9f3390565b8686612b1d565b600b54600193506201000090046001600160a01b031663f49062ca33610e25565b610ecf33611f9f565b6005546001600160a01b0316336001600160a01b0316146120035760405162461bcd60e51b8152600401610df3906141c2565b600b5460ff166120555760405162461bcd60e51b815260206004820152601c60248201527f4c45524332303a205475726e4f6666206e6f742070726f706f736564000000006044820152606401610df3565b42600a5411156120a75760405162461bcd60e51b815260206004820152601d60248201527f4c45524332303a2054696d65206c6f636b20696e2070726f67726573730000006044820152606401610df3565b600b805461ffff191690556040517f5b534e2716e5ad68b9f67521378f8199a7ceb9d3f6f354275dad33fe42cf710a90600090a1565b6006546001600160a01b0316336001600160a01b03161461213c5760405162461bcd60e51b81526020600482015260196024820152784c45524332303a204d7573742062652063616e64697461746560381b6044820152606401610df3565b60075481516020830120146121895760405162461bcd60e51b81526020600482015260136024820152724c45524332303a20496e76616c6964206b657960681b6044820152606401610df3565b6006546005546040516001600160a01b0392831692909116907f1c7f382531621f02aefb4212478bba8871ffad078202bdbba87f3e21d639aebb90600090a350600654600580546001600160a01b0319166001600160a01b03909216919091179055565b600c546001600160a01b031633146122175760405162461bcd60e51b8152600401610df3906140c2565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b600c546001600160a01b031633146122a05760405162461bcd60e51b8152600401610df3906140c2565b601c839055601d829055601e819055806122ba83856141f9565b6122c491906141f9565b601b8190556107d010156110305760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610df3565b600c546001600160a01b031633146123445760405162461bcd60e51b8152600401610df3906140c2565b6001600160a01b03811661236a5760405162461bcd60e51b8152600401610df39061420c565b601280546001600160a01b0319166001600160a01b0383169081179091556040517f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad5490600090a250565b600c546001600160a01b031633146123de5760405162461bcd60e51b8152600401610df3906140c2565b620186a06123eb60025490565b6123f69060016142b1565b61240091906142c8565b81101561246d5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610df3565b61271061247960025490565b6124849060016142b1565b61248e91906142c8565b8111156124fa5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610df3565b601055565b6005546001600160a01b0316336001600160a01b0316146125325760405162461bcd60e51b8152600401610df3906141c2565b60095461253f90426141f9565b600a819055600b805460ff191660011790556040517f88e0be0448355c71674462d3cb36342f0d085f7b43a1deab03052c95eb158709916115069190815260200190565b600c546001600160a01b031633146125ad5760405162461bcd60e51b8152600401610df3906140c2565b670de0b6b3a7640000612ee06125c260025490565b6125cd9060016142b1565b6125d791906142c8565b6125e191906142c8565b81101561264b5760405162461bcd60e51b815260206004820152603260248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015271103a3430b7101a9817181818102a37b5b2b760711b6064820152608401610df3565b61265d81670de0b6b3a76400006142b1565b600e8190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e9060200160405180910390a150565b6001600160a01b038083166000908152600160209081526040808320938516835292905220545b92915050565b600c546001600160a01b031633146126ef5760405162461bcd60e51b8152600401610df3906140c2565b6001600160a01b0381166127545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610df3565b600c546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031633146127da5760405162461bcd60e51b8152600401610df3906140c2565b604051600090339047908381818185875af1925050503d80600081146115ab576040519150601f19603f3d011682016040523d82523d6000602084013e6115ab565b6001600160a01b0383166128805760405162461bcd60e51b815260206004820152602560248201527f4c45524332303a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610df3565b6001600160a01b0382166128e25760405162461bcd60e51b815260206004820152602360248201527f4c45524332303a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610df3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166129a85760405162461bcd60e51b815260206004820152602660248201527f4c45524332303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b6064820152608401610df3565b6001600160a01b038216612a0a5760405162461bcd60e51b8152602060048201526024808201527f4c45524332303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610df3565b6001600160a01b03831660009081526020819052604090205481811015612a835760405162461bcd60e51b815260206004820152602760248201527f4c45524332303a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b6064820152608401610df3565b612a8d82826141af565b6001600160a01b038086166000908152602081905260408082209390935590851681529081208054849290612ac39084906141f9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b0f91815260200190565b60405180910390a350505050565b6001600160a01b038316612b815760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610df3565b6001600160a01b038216612be35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610df3565b60008111612c335760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610df3565b6001600160a01b03831660009081526015602052604090205460ff16158015612c7557506001600160a01b03821660009081526015602052604090205460ff16155b80612c8d5750600c546001600160a01b038381169116145b80612ca257506001600160a01b03821661dead145b612cee5760405162461bcd60e51b815260206004820152601c60248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e732e000000006044820152606401610df3565b6001600160a01b038083166000908152601f60209081526040808320439055928616825260239052205460ff1680612d3e57506001600160a01b03821660009081526023602052604090205460ff165b80612d4b5750600f5460ff165b15612d5b57611030838383612943565b601654610100900460ff16612dab5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610df3565b6001600160a01b03821660009081526025602052604090205460ff168015612dec57506001600160a01b03831660009081526024602052604090205460ff16155b15612e5657600e54811115612e565760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610df3565b601054612e6230611677565b10158015612e78575060165462010000900460ff165b8015612e875750600f5460ff16155b8015612eac57506001600160a01b03831660009081526025602052604090205460ff16155b8015612ed157506001600160a01b03831660009081526023602052604090205460ff16155b8015612ef657506001600160a01b03821660009081526023602052604090205460ff16155b15612f1b57600f805460ff19166001179055612f106131af565b600f805460ff191690555b6001600160a01b03831660009081526023602052604081205460ff16158015612f5d57506001600160a01b03831660009081526023602052604090205460ff16155b156131a4576001600160a01b03831660009081526025602052604090205460ff168015612f8c57506000601b54115b156130a8576001600160a01b0384166000908152601f60205260409020544390612fb79060026141f9565b10612ff45760405162461bcd60e51b815260206004820152600d60248201526c29b2b636103a37b79039b7b7b760991b6044820152606401610df3565b612710601b548361300591906142b1565b61300f91906142c8565b9050601b54601d548261302291906142b1565b61302c91906142c8565b6021600082825461303d91906141f9565b9091555050601b54601c5461305290836142b1565b61305c91906142c8565b6020600082825461306d91906141f9565b9091555050601b54601e5461308290836142b1565b61308c91906142c8565b6022600082825461309d91906141f9565b909155506131869050565b6001600160a01b03841660009081526025602052604090205460ff1680156130d257506000601754115b1561318657612710601754836130e891906142b1565b6130f291906142c8565b90506017546019548261310591906142b1565b61310f91906142c8565b6021600082825461312091906141f9565b909155505060175460185461313590836142b1565b61313f91906142c8565b6020600082825461315091906141f9565b9091555050601754601a5461316590836142b1565b61316f91906142c8565b6022600082825461318091906141f9565b90915550505b801561319757613197843083612943565b6131a181836141af565b91505b6115ab848484612943565b60006131ba30611677565b905060006022546020546021546131d191906141f9565b6131db91906141f9565b90508115806131e8575080155b156131f1575050565b6010546131ff9060286142b1565b821115613217576010546132149060286142b1565b91505b6000816021548461322891906142b1565b61323291906142c8565b905080156132ef57613265307f000000000000000000000000f115bdba888d0f54aa48b4593123c3f8800cc92e83612943565b7f000000000000000000000000f115bdba888d0f54aa48b4593123c3f8800cc92e6001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132c057600080fd5b505af19250505080156132d1575060015b506132dc81846141af565b9250602154826132ec91906141af565b91505b826000036132fc57505050565b6133058361373e565b6040516304fa881160e21b81526001600160a01b037f000000000000000000000000e4d99ac55064a61f59d7f6629648bd88d1a122e116906313ea204490613371907f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f61990600401613b9e565b600060405180830381600087803b15801561338b57600080fd5b505af115801561339f573d6000803e3d6000fd5b50506040516370a0823160e01b8152600092506001600160a01b037f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f6191691506370a08231906133f2903090600401613b9e565b602060405180830381865afa15801561340f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134339190614239565b90506000836020548361344691906142b1565b61345091906142c8565b6000602181905560208190556022559050801561349f5760115461349f907f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619906001600160a01b0316836136ba565b6040516370a0823160e01b81526000906001600160a01b037f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f61916906370a08231906134ee903090600401613b9e565b602060405180830381865afa15801561350b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061352f9190614239565b11156135d4576012546040516370a0823160e01b81526135d4917f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619916001600160a01b03918216918316906370a082319061358e903090600401613b9e565b602060405180830381865afa1580156135ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135cf9190614239565b6136ba565b5050505050565b6001600160a01b0382166136315760405162461bcd60e51b815260206004820181905260248201527f4c45524332303a206d696e7420746f20746865207a65726f20616464726573736044820152606401610df3565b806002600082825461364391906141af565b90915550506001600160a01b038216600090815260208190526040812080548392906136709084906141af565b90915550506040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6110308363a9059cbb60e01b84846040516024016136d9929190614252565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613882565b6001600160a01b0382166000908152602560205260409020805460ff1916821515179055611d6f8282613954565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613773576137736140f7565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619816001815181106137c7576137c76140f7565b6001600160a01b039283166020918202929092010152604051635c11d79560e01b81527f000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff90911690635c11d7959061384c90859060009086907f000000000000000000000000e4d99ac55064a61f59d7f6629648bd88d1a122e19042906004016142ea565b600060405180830381600087803b15801561386657600080fd5b505af115801561387a573d6000803e3d6000fd5b505050505050565b60006138d7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166139b79092919063ffffffff16565b80519091501561103057808060200190518101906138f5919061435b565b6110305760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610df3565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b60606139c684846000856139ce565b949350505050565b606082471015613a2f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610df3565b600080866001600160a01b03168587604051613a4b9190614378565b60006040518083038185875af1925050503d8060008114613a88576040519150601f19603f3d011682016040523d82523d6000602084013e613a8d565b606091505b5091509150613a9e87838387613aa9565b979650505050505050565b60608315613b18578251600003613b11576001600160a01b0385163b613b115760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610df3565b50816139c6565b6139c68383815115613b2d5781518083602001fd5b8060405162461bcd60e51b8152600401610df39190613b6b565b60005b83811015613b62578181015183820152602001613b4a565b50506000910152565b6020815260008251806020840152613b8a816040850160208701613b47565b601f01601f19169190910160400192915050565b6001600160a01b0391909116815260200190565b80356001600160a01b0381168114613bc957600080fd5b919050565b60008060408385031215613be157600080fd5b613bea83613bb2565b946020939093013593505050565b600060208284031215613c0a57600080fd5b613c1382613bb2565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613c5857613c58613c1a565b604052919050565b60006001600160401b03821115613c7957613c79613c1a565b5060051b60200190565b600082601f830112613c9457600080fd5b81356020613ca9613ca483613c60565b613c30565b82815260059290921b84018101918181019086841115613cc857600080fd5b8286015b84811015613ce35780358352918301918301613ccc565b509695505050505050565b60008060408385031215613d0157600080fd5b82356001600160401b0380821115613d1857600080fd5b818501915085601f830112613d2c57600080fd5b81356020613d3c613ca483613c60565b82815260059290921b84018101918181019089841115613d5b57600080fd5b948201945b83861015613d8057613d7186613bb2565b82529482019490820190613d60565b96505086013592505080821115613d9657600080fd5b50613da385828601613c83565b9150509250929050565b600080600060608486031215613dc257600080fd5b613dcb84613bb2565b9250613dd960208501613bb2565b9150604084013590509250925092565b60008083601f840112613dfb57600080fd5b5081356001600160401b03811115613e1257600080fd5b6020830191508360208260051b8501011115613e2d57600080fd5b9250929050565b801515811461167457600080fd5b600080600060408486031215613e5757600080fd5b83356001600160401b03811115613e6d57600080fd5b613e7986828701613de9565b9094509250506020840135613e8d81613e34565b809150509250925092565b600060208284031215613eaa57600080fd5b5035919050565b60008060408385031215613ec457600080fd5b613ecd83613bb2565b91506020830135613edd81613e34565b809150509250929050565b600080600060608486031215613efd57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215613f2757600080fd5b613f3083613bb2565b9150613f3e60208401613bb2565b90509250929050565b60008060208385031215613f5a57600080fd5b82356001600160401b03811115613f7057600080fd5b613f7c85828601613de9565b90969095509350505050565b60006020808385031215613f9b57600080fd5b82356001600160401b0380821115613fb257600080fd5b818501915085601f830112613fc657600080fd5b813581811115613fd857613fd8613c1a565b613fea601f8201601f19168501613c30565b9150808252868482850101111561400057600080fd5b8084840185840137600090820190930192909252509392505050565b600181811c9082168061403057607f821691505b60208210810361405057634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526028908201527f4c45524332303a2043616e6e6f74206368616e6765206e6f6e207a65726f20616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016141355761413561410d565b5060010190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b60208082526029908201527f4c45524332303a207472616e7366657220616d6f756e74206578636565647320604082015268616c6c6f77616e636560b81b606082015260800190565b818103818111156126bf576126bf61410d565b6020808252601e908201527f4c45524332303a204d757374206265207265636f766572792061646d696e0000604082015260600190565b808201808211156126bf576126bf61410d565b6020808252601390820152720616464726573732063616e6e6f74206265203606c1b604082015260600190565b60006020828403121561424b57600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b60208082526026908201527f4c45524332303a2064656372656173656420616c6c6f77616e63652062656c6f60408201526577207a65726f60d01b606082015260800190565b80820281158282048414176126bf576126bf61410d565b6000826142e557634e487b7160e01b600052601260045260246000fd5b500490565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561433a5784516001600160a01b031683529383019391830191600101614315565b50506001600160a01b03969096166060850152505050608001529392505050565b60006020828403121561436d57600080fd5b8151613c1381613e34565b6000825161438a818460208701613b47565b919091019291505056fea2646970667358221220630ef44363d759d9758c4adfc2e9c11ee9300bf2bb69da70613de9371490289064736f6c63430008110033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000001f04ef12cb04cf15800000000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000b197fe735b35d6c1458212887ae5d14dd0cb192200000000000000000000000023156f2d1fe89a14c742df1c3483e333dbbfa259000000000000000000000000000000000000000000000000000000000001518000000000000000000000000066622e2c1b991983e88132da19b2c31f71009035000000000000000000000000000000000000000000000000000000000000000741696d6564697300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000441494d5800000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : totalSupply_ (uint256): 600000000000000000000000000
Arg [1] : name_ (string): Aimedis
Arg [2] : symbol_ (string): AIMX
Arg [3] : admin_ (address): 0xb197fE735B35D6C1458212887Ae5D14DD0cb1922
Arg [4] : recoveryAdmin_ (address): 0x23156F2d1Fe89A14C742dF1c3483E333dbBFa259
Arg [5] : timelockPeriod_ (uint256): 86400
Arg [6] : lossless_ (address): 0x66622e2C1b991983e88132da19b2C31f71009035

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000001f04ef12cb04cf158000000
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 000000000000000000000000b197fe735b35d6c1458212887ae5d14dd0cb1922
Arg [4] : 00000000000000000000000023156f2d1fe89a14c742df1c3483e333dbbfa259
Arg [5] : 0000000000000000000000000000000000000000000000000000000000015180
Arg [6] : 00000000000000000000000066622e2c1b991983e88132da19b2c31f71009035
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [8] : 41696d6564697300000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [10] : 41494d5800000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

27242:17553:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20747:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27358:37;;;;;;;;;;;;;;;;;;;;;;:::i;21665:318::-;;;;;;;;;;-1:-1:-1;21665:318:0;;;;;:::i;:::-;;:::i;:::-;;;1499:14:1;;1492:22;1474:41;;1462:2;1447:18;21665:318:0;1334:187:1;28595:64:0;;;;;;;;;;-1:-1:-1;28595:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21041:108;;;;;;;;;;-1:-1:-1;21129:12:0;;21041:108;;;1863:25:1;;;1851:2;1836:18;21041:108:0;1717:177:1;28406:33:0;;;;;;;;;;;;;;;;35410:618;;;;;;;;;;-1:-1:-1;35410:618:0;;;;;:::i;:::-;;:::i;:::-;;21991:466;;;;;;;;;;-1:-1:-1;21991:466:0;;;;;:::i;:::-;;:::i;19135:149::-;;;;;;;;;;-1:-1:-1;19135:149:0;;;;;:::i;:::-;;:::i;15888:29::-;;;;;;;;;;;;;;;;20949:84;;;;;;;;;;-1:-1:-1;20949:84:0;;21023:2;4792:36:1;;4780:2;4765:18;20949:84:0;4650:184:1;27679:31:0;;;;;;;;;;-1:-1:-1;27679:31:0;;;;-1:-1:-1;;;;;27679:31:0;;;22465:257;;;;;;;;;;-1:-1:-1;22465:257:0;;;;;:::i;:::-;;:::i;27647:25::-;;;;;;;;;;-1:-1:-1;27647:25:0;;;;-1:-1:-1;;;;;27647:25:0;;;27402:31;;;;;;;;;;;;;;;43740:278;;;;;;;;;;-1:-1:-1;43740:278:0;;;;;:::i;:::-;;:::i;27849:33::-;;;;;;;;;;-1:-1:-1;27849:33:0;;;;;;;;28146:32;;;;;;;;;;;;;;;;44311:312;;;;;;;;;;;;;:::i;34219:228::-;;;;;;;;;;-1:-1:-1;34219:228:0;;;;;:::i;:::-;;:::i;28003:31::-;;;;;;;;;;;;;;;;20533:174;;;;;;;;;;;;;:::i;15738:28::-;;;;;;;;;;-1:-1:-1;15738:28:0;;;;-1:-1:-1;;;;;15738:28:0;;;15924:39;;;;;;;;;;;;;;;;27321:28;;;;;;;;;;;;;;;;40778:97;;;;;;;;;;-1:-1:-1;40855:12:0;40778:97;;28111:28;;;;;;;;;;;;;;;;40883:104;;;;;;;;;;-1:-1:-1;40964:15:0;40883:104;;44631:161;;;;;;;;;;-1:-1:-1;44631:161:0;;;;;:::i;:::-;;:::i;27929:31::-;;;;;;;;;;-1:-1:-1;27929:31:0;;;;;;;;;;;18737:83;;;;;;;;;;-1:-1:-1;18807:5:0;;-1:-1:-1;;;;;18807:5:0;18737:83;;21157:127;;;;;;;;;;-1:-1:-1;21157:127:0;;;;;:::i;:::-;;:::i;25179:150::-;;;;;;;;;;;;;:::i;36040:260::-;;;;;;;;;;-1:-1:-1;36040:260:0;;;;;:::i;:::-;;:::i;36853:375::-;;;;;;;;;;-1:-1:-1;36853:375:0;;;;;:::i;:::-;;:::i;43019:483::-;;;;;;;;;;-1:-1:-1;43019:483:0;;;;;:::i;:::-;;:::i;27287:27::-;;;;;;;;;;;;;;;;33924:287;;;;;;;;;;;;;:::i;24965:79::-;;;;;;;;;;-1:-1:-1;25030:6:0;;-1:-1:-1;;;;;25030:6:0;24965:79;;19292:249;;;;;;;;;;-1:-1:-1;19292:249:0;;;;;:::i;:::-;;:::i;18828:299::-;;;;;;;;;;-1:-1:-1;18828:299:0;;;;;:::i;:::-;;:::i;27442:34::-;;;;;;;;;;;;;;;20846:95;;;;;;;;;;;;;:::i;36308:293::-;;;;;;;;;;-1:-1:-1;36308:293:0;;;;;:::i;:::-;;:::i;28078:24::-;;;;;;;;;;;;;;;;28257:43;;;;;;;;;;;;28295:5;28257:43;;28446:27;;;;;;;;;;;;;;;;28223:25;;;;;;;;;;;;;;;;22730:425;;;;;;;;;;-1:-1:-1;22730:425:0;;;;;:::i;:::-;;:::i;21292:206::-;;;;;;;;;;-1:-1:-1;21292:206:0;;;;;:::i;:::-;;:::i;20175:350::-;;;;;;;;;;;;;:::i;19549:365::-;;;;;;;;;;-1:-1:-1;19549:365:0;;;;;:::i;:::-;;:::i;28817:58::-;;;;;;;;;;-1:-1:-1;28817:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27889:33;;;;;;;;;;-1:-1:-1;27889:33:0;;;;;;;;;;;37628:182;;;;;;;;;;-1:-1:-1;37628:182:0;;;;;:::i;:::-;;:::i;37236:384::-;;;;;;;;;;-1:-1:-1;37236:384:0;;;;;:::i;:::-;;:::i;16014:31::-;;;;;;;;;;-1:-1:-1;16014:31:0;;;;;;;;;;;28309:47;;;;;;;;;;-1:-1:-1;28309:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;44030:229;;;;;;;;;;-1:-1:-1;44030:229:0;;;;;:::i;:::-;;:::i;34836:347::-;;;;;;;;;;-1:-1:-1;34836:347:0;;;;;:::i;:::-;;:::i;19922:245::-;;;;;;;;;;;;;:::i;27969:27::-;;;;;;;;;;;;;;;;27796:44;;;;;;;;;;-1:-1:-1;27796:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34459:307;;;;;;;;;;-1:-1:-1;34459:307:0;;;;;:::i;:::-;;:::i;21506:151::-;;;;;;;;;;-1:-1:-1;21506:151:0;;;;;:::i;:::-;;:::i;27566:33::-;;;;;;;;;;;;;;;;27608:32;;;;;;;;;;-1:-1:-1;27608:32:0;;;;-1:-1:-1;;;;;27608:32:0;;;27719:37;;;;;;;;;;;;;;;;15970;;;;;;;;;;-1:-1:-1;15970:37:0;;;;;;;;28041:30;;;;;;;;;;;;;;;;25337:244;;;;;;;;;;-1:-1:-1;25337:244:0;;;;;:::i;:::-;;:::i;43572:160::-;;;;;;;;;;;;;:::i;28185:31::-;;;;;;;;;;;;;;;;15861:20;;;;;;;;;;-1:-1:-1;15861:20:0;;;;-1:-1:-1;;;;;15861:20:0;;;28365:34;;;;;;;;;;;;;;;;20747:91;20792:13;20825:5;20818:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20747:91;:::o;21665:318::-;21775:4;21749:7;21758:6;16997:12;;;;;;;;;;;16993:215;;;17026:8;;;;;-1:-1:-1;;;;;17026:8:0;:22;306:10;17063:7;17072:6;17026:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21801:6:::1;21811:1;21801:11;21800:58;;;-1:-1:-1::0;306:10:0;21818:25:::1;::::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;21818:34:0;::::1;::::0;;;;;;;;:39;21800:58:::1;21792:111;;;;-1:-1:-1::0;;;21792:111:0::1;;;;;;;:::i;:::-;;;;;;;;;21914:39;306:10:::0;21923:12:::1;21937:7;21946:6;21914:8;:39::i;:::-;17110:8:::0;;21971:4:::1;::::0;-1:-1:-1;17110:8:0;;;-1:-1:-1;;;;;17110:8:0;:21;306:10;17132:12;17146:7;17155:6;17110:52;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16993:215;;;21801:11;;;21800:58:::1;;-1:-1:-1::0;306:10:0;21818:25:::1;::::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;21818:34:0;::::1;::::0;;;;;;;;:39;21800:58:::1;21792:111;;;;-1:-1:-1::0;;;21792:111:0::1;;;;;;;:::i;:::-;21914:39;306:10:::0;21923:12:::1;226:98:::0;21914:39:::1;21971:4;21964:11;;17195:1;21665:318:::0;;;;;;:::o;35410:618::-;25092:6;;-1:-1:-1;;;;;25092:6:0;306:10;25092:22;25084:67;;;;-1:-1:-1;;;25084:67:0;;;;;;;:::i;:::-;35552:15:::1;:22;35534:7;:14;:40;35526:83;;;::::0;-1:-1:-1;;;35526:83:0;;10631:2:1;35526:83:0::1;::::0;::::1;10613:21:1::0;10670:2;10650:18;;;10643:30;10709:32;10689:18;;;10682:60;10759:18;;35526:83:0::1;10429:354:1::0;35526:83:0::1;35645:3;35628:7;:14;:20;35620:87;;;::::0;-1:-1:-1;;;35620:87:0;;10990:2:1;35620:87:0::1;::::0;::::1;10972:21:1::0;11029:2;11009:18;;;11002:30;11068:34;11048:18;;;11041:62;-1:-1:-1;;;11119:18:1;;;11112:52;11181:19;;35620:87:0::1;10788:418:1::0;35620:87:0::1;35820:9;35816:205;35839:7;:14;35835:1;:18;35816:205;;;35874:14;35891:7;35899:1;35891:10;;;;;;;;:::i;:::-;;;;;;;35874:27;;35916:14;35933:15;35949:1;35933:18;;;;;;;;:::i;:::-;;;;;;;35916:35;;35966:43;35982:10;35994:6;36002;35966:15;:43::i;:::-;35859:162;;35855:3;;;;;:::i;:::-;;;;35816:205;;;;35410:618:::0;;:::o;21991:466::-;22140:4;22104:6;22112:9;22123:6;17617:12;;;;;;;;;;;17613:244;;;17646:8;;;;;-1:-1:-1;;;;;17646:8:0;:27;306:10;17687:6;17695:9;17706:6;17646:67;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22157:36:::1;22167:6;22175:9;22186:6;22157:9;:36::i;:::-;-1:-1:-1::0;;;;;22233:19:0;::::1;22206:24;22233:19:::0;;;:11:::1;:19;::::0;;;;;;;306:10;22233:33;;;;;;;;22285:26;;::::1;;22277:80;;;;-1:-1:-1::0;;;22277:80:0::1;;;;;;;:::i;:::-;22368:57;22377:6:::0;306:10;22385:12:::1;22399:25;22418:6:::0;22399:16;:25:::1;:::i;:::-;22368:8;:57::i;:::-;-1:-1:-1::0;17744:8:0;;22445:4:::1;::::0;-1:-1:-1;17744:8:0;;;-1:-1:-1;;;;;17744:8:0;:26;306:10;17785:6;17793:9;17804:6;17744:67;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17613:244;;;22157:36:::1;22167:6;22175:9;22186:6;22157:9;:36::i;:::-;-1:-1:-1::0;;;;;22233:19:0;::::1;22206:24;22233:19:::0;;;:11:::1;:19;::::0;;;;;;;306:10;22233:33;;;;;;;;22285:26;;::::1;;22277:80;;;;-1:-1:-1::0;;;22277:80:0::1;;;;;;;:::i;:::-;22368:57;22377:6:::0;306:10;22385:12:::1;226:98:::0;22368:57:::1;22445:4;22438:11;;;17844:1;21991:466:::0;;;;;;;;:::o;19135:149::-;18623:13;;-1:-1:-1;;;;;18623:13:0;306:10;-1:-1:-1;;;;;18607:29:0;;18599:72;;;;-1:-1:-1;;;18599:72:0;;;;;;;:::i;:::-;19233:5:::1;::::0;19220:29:::1;::::0;-1:-1:-1;;;;;19220:29:0;;::::1;::::0;19233:5:::1;::::0;19220:29:::1;::::0;19233:5:::1;::::0;19220:29:::1;19260:5;:16:::0;;-1:-1:-1;;;;;;19260:16:0::1;-1:-1:-1::0;;;;;19260:16:0;;;::::1;::::0;;;::::1;::::0;;19135:149::o;22465:257::-;22595:4;22565:7;22574:10;17954:12;;;;;;;;;;;17950:243;;;17983:8;;;;;-1:-1:-1;;;;;17983:8:0;:32;306:10;18030:7;18039:10;17983:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22612:80:::1;22621:12;306:10:::0;;226:98;22621:12:::1;306:10:::0;22644:25:::1;::::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;22644:34:0;::::1;::::0;;;;;;;;22635:7;;22644:47:::1;::::0;22681:10;;22644:47:::1;:::i;22612:80::-;18081:8:::0;;22710:4:::1;::::0;-1:-1:-1;18081:8:0;;;-1:-1:-1;;;;;18081:8:0;:31;306:10;18113:12;226:98;17950:243;22612:80:::1;306:10:::0;22621:12:::1;226:98:::0;43740:278;25092:6;;-1:-1:-1;;;;;25092:6:0;306:10;25092:22;25084:67;;;;-1:-1:-1;;;25084:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43836:32:0;::::1;43828:64;;;;-1:-1:-1::0;;;43828:64:0::1;;;;;;;:::i;:::-;43903:17;:47:::0;;-1:-1:-1;;;;;;43903:47:0::1;-1:-1:-1::0;;;;;43903:47:0;::::1;::::0;;::::1;::::0;;;43966:44:::1;::::0;::::1;::::0;-1:-1:-1;;43966:44:0::1;43740:278:::0;:::o;44311:312::-;25092:6;;-1:-1:-1;;;;;25092:6:0;306:10;25092:22;25084:67;;;;-1:-1:-1;;;25084:67:0;;;;;;;:::i;:::-;44402:18:::1;;44374:24;44392:4;44374:9;:24::i;:::-;:46;;44366:123;;;::::0;;-1:-1:-1;;;44366:123:0;;13658:2:1;44366:123:0::1;::::0;::::1;13640:21:1::0;13677:18;;;13670:30;;;;13736:34;13716:18;;;13709:62;13807:34;13787:18;;;13780:62;13859:19;;44366:123:0::1;13456:428:1::0;44366:123:0::1;44500:8;:15:::0;;-1:-1:-1;;44500:15:0::1;44511:4;44500:15;::::0;;44526:10:::1;:8;:10::i;:::-;44547:8;:16:::0;;-1:-1:-1;;44547:16:0::1;::::0;;44579:36:::1;::::0;44599:15:::1;1863:25:1::0;;44579:36:0::1;::::0;1851:2:1;1836:18;44579:36:0::1;;;;;;;;44311:312::o:0;34219:228::-;25092:6;;-1:-1:-1;;;;;25092:6:0;306:10;25092:22;25084:67;;;;-1:-1:-1;;;25084:67:0;;;;;;;:::i;:::-;34336:9:::1;34332:108;34351:19:::0;;::::1;34332:108;;;34418:10;34391:11;:24;34403:8;;34412:1;34403:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34391:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34391:24:0;:37;;-1:-1:-1;;34391:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34372:3;::::1;::::0;::::1;:::i;:::-;;;;34332:108;;;;34219:228:::0;;;:::o;20533:174::-;18623:13;;-1:-1:-1;;;;;18623:13:0;306:10;-1:-1:-1;;;;;18607:29:0;;18599:72;;;;-1:-1:-1;;;18599:72:0;;;;;;;:::i;:::-;20602:25:::1;:33:::0;;-1:-1:-1;;20646:19:0;20602:33:::1;20646:19;::::0;;20681:18:::1;::::0;::::1;::::0;20630:5:::1;::::0;20681:18:::1;20533:174::o:0;44631:161::-;44720:6;44695:21;44705:10;44695:9;:21::i;:::-;:31;;44687:61;;;;-1:-1:-1;;;44687:61:0;;14091:2:1;44687:61:0;;;14073:21:1;14130:2;14110:18;;;14103:30;-1:-1:-1;;;14149:18:1;;;14142:47;14206:18;;44687:61:0;13889:341:1;44687:61:0;44759:25;44765:10;44777:6;44759:5;:25::i;:::-;44631:161;:::o;21157:127::-;-1:-1:-1;;;;;21258:18:0;21231:7;21258:18;;;;;;;;;;;;21157:127::o;25179:150::-;25092:6;;-1:-1:-1;;;;;25092:6:0;306:10;25092:22;25084:67;;;;-1:-1:-1;;;25084:67:0;;;;;;;:::i;:::-;25272:6:::1;::::0;25251:40:::1;::::0;25288:1:::1;::::0;-1:-1:-1;;;;;25272:6:0::1;::::0;25251:40:::1;::::0;25288:1;;25251:40:::1;25302:6;:19:::0;;-1:-1:-1;;;;;;25302:19:0::1;::::0;;25179:150::o;36040:260::-;25092:6;;-1:-1:-1;;;;;25092:6:0;306:10;25092:22;25084:67;;;;-1:-1:-1;;;25084:67:0;;;;;;;:::i;:::-;36136:4:::1;36132:104;;36174:6;-1:-1:-1::0;;;;;36164:16:0::1;:6;-1:-1:-1::0;;;;;36164:16:0::1;::::0;36156:68:::1;;;::::0;-1:-1:-1;;;36156:68:0;;14437:2:1;36156:68:0::1;::::0;::::1;14419:21:1::0;14476:2;14456:18;;;14449:30;14515:34;14495:18;;;14488:62;-1:-1:-1;;;14566:18:1;;;14559:37;14613:19;;36156:68:0::1;14235:403:1::0;36156:68:0::1;-1:-1:-1::0;;;;;36246:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;36246:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36040:260::o;36853:375::-;25092:6;;-1:-1:-1;;;;;25092:6:0;306:10;25092:22;25084:67;;;;-1:-1:-1;;;25084:67:0;;;;;;;:::i;:::-;36970:16:::1;:33:::0;;;37014:15:::1;:31:::0;;;37056:9:::1;:19:::0;;;37068:7;37101:34:::1;37032:13:::0;36989:14;37101:34:::1;:::i;:::-;:46;;;;:::i;:::-;37086:12;:61:::0;;;37182:4:::1;-1:-1:-1::0;37166:20:0::1;37158:62;;;::::0;-1:-1:-1;;;37158:62:0;;14845:2:1;37158:62:0::1;::::0;::::1;14827:21:1::0;14884:2;14864:18;;;14857:30;14923:31;14903:18;;;14896:59;14972:18;;37158:62:0::1;14643:353:1::0;43019:483:0;25092:6;;-1:-1:-1;;;;;25092:6:0;306:10;25092:22;25084:67;;;;-1:-1:-1;;;25084:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43116:20:0;::::1;43108:59;;;::::0;-1:-1:-1;;;43108:59:0;;15203:2:1;43108:59:0::1;::::0;::::1;15185:21:1::0;15242:2;15222:18;;;15215:30;-1:-1:-1;;;15261:18:1;;;15254:56;15327:18;;43108:59:0::1;15001:350:1::0;43108:59:0::1;-1:-1:-1::0;;;;;43186:23:0;::::1;43204:4;43186:23;;::::0;:41:::1;;-1:-1:-1::0;43214:13:0::1;::::0;::::1;::::0;::::1;;;43213:14;43186:41;43178:106;;;::::0;-1:-1:-1;;;43178:106:0;;15558:2:1;43178:106:0::1;::::0;::::1;15540:21:1::0;15597:2;15577:18;;;15570:30;15636:34;15616:18;;;15609:62;-1:-1:-1;;;15687:18:1;;;15680:50;15747:19;;43178:106:0::1;15356:416:1::0;43178:106:0::1;43322:39;::::0;-1:-1:-1;;;43322:39:0;;43295:24:::1;::::0;-1:-1:-1;;;;;43322:24:0;::::1;::::0;::::1;::::0;:39:::1;::::0;43355:4:::1;::::0;43322:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43295:66;;43372:60;43402:6;43410:3;43415:16;43372:22;:60::i;:::-;43448:46;43469:6;43477:16;43448:46;;;;;;;:::i;:::-;;;;;;;;43097:405;43019:483:::0;;:::o;33924:287::-;25092:6;;-1:-1:-1;;;;;25092:6:0;306:10;25092:22;25084:67;;;;-1:-1:-1;;;25084:67:0;;;;;;;:::i;:::-;33988:13:::1;::::0;::::1;::::0;::::1;;;33987:14;33979:53;;;::::0;-1:-1:-1;;;33979:53:0;;16447:2:1;33979:53:0::1;::::0;::::1;16429:21:1::0;16486:2;16466:18;;;16459:30;-1:-1:-1;;;16505:18:1;;;16498:56;16571:18;;33979:53:0::1;16245:350:1::0;33979:53:0::1;34078:13;:20:::0;;-1:-1:-1;;34109:18:0;;;;;34159:12:::1;34138:18;:33:::0;34187:16:::1;::::0;::::1;::::0;-1:-1:-1;;34187:16:0::1;33924:287::o:0;19292:249::-;18623:13;;-1:-1:-1;;;;;18623:13:0;306:10;-1:-1:-1;;;;;18607:29:0;;18599:72;;;;-1:-1:-1;;;18599:72:0;;;;;;;:::i;:::-;19404:22:::1;:34:::0;;-1:-1:-1;;;;;;19404:34:0::1;-1:-1:-1::0;;;;;19404:34:0;::::1;::::0;;::::1;::::0;;;19449:20:::1;:30:::0;;;19495:38:::1;::::0;::::1;::::0;-1:-1:-1;;19495:38:0::1;19292:249:::0;;:::o;18828:299::-;18942:8;;;;;-1:-1:-1;;;;;18942:8:0;306:10;-1:-1:-1;;;;;18918:33:0;;18910:76;;;;-1:-1:-1;;;18910:76:0;;16802:2:1;18910:76:0;;;16784:21:1;16841:2;16821:18;;;16814:30;16880:32;16860:18;;;16853:60;16930:18;;18910:76:0;16600:354:1;18910:76:0;19002:6;18997:123;19014:15;;;18997:123;;;19051:57;19061:4;;19066:1;19061:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19078:8;;;;;-1:-1:-1;;;;;19078:8:0;19089:18;19099:4;;19104:1;19099:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;19089:18::-;19051:9;:57::i;:::-;19031:3;;;;:::i;:::-;;;;18997:123;;20846:95;20893:13;20926:7;20919:14;;;;;:::i;36308:293::-;25092:6;;-1:-1:-1;;;;;25092:6:0;306:10;25092:22;25084:67;;;;-1:-1:-1;;;25084:67:0;;;;;;;:::i;:::-;36417:6:::1;-1:-1:-1::0;;;;;36409:14:0::1;:4;-1:-1:-1::0;;;;;36409:14:0::1;::::0;36401:84:::1;;;::::0;-1:-1:-1;;;36401:84:0;;17161:2:1;36401:84:0::1;::::0;::::1;17143:21:1::0;17200:2;17180:18;;;17173:30;17239:34;17219:18;;;17212:62;-1:-1:-1;;;17290:18:1;;;17283:55;17355:19;;36401:84:0::1;16959:421:1::0;36401:84:0::1;36496:41;36525:4;36531:5;36496:28;:41::i;:::-;36553:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;36553:40:0;::::1;::::0;::::1;::::0;;;::::1;36308:293:::0;;:::o;22730:425::-;22870:4;22835:7;22844:15;18295:12;;;;;;;;;;;18291:253;;;18324:8;;;;;-1:-1:-1;;;;;18324:8:0;:32;306:10;18371:7;18380:15;18324:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22887:24:::1;22914:11;:25;22926:12;306:10:::0;;226:98;22926:12:::1;-1:-1:-1::0;;;;;22914:25:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;22914:25:0;;;:34;;::::1;::::0;;;;;;;;-1:-1:-1;22967:35:0;;::::1;;22959:86;;;;-1:-1:-1::0;;;22959:86:0::1;;;;;;;:::i;:::-;23056:67;306:10:::0;23065:12:::1;23079:7:::0;23088:34:::1;23107:15:::0;23088:16;:34:::1;:::i;23056:67::-;-1:-1:-1::0;18427:8:0;;23143:4:::1;::::0;-1:-1:-1;18427:8:0;;;-1:-1:-1;;;;;18427:8:0;:31;306:10;18459:12;226:98;18291:253;306:10;22887:24:::1;22914:25:::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;22914:34:0;::::1;::::0;;;;;;;;22967:35;;::::1;;22959:86;;;;-1:-1:-1::0;;;22959:86:0::1;;;;;;;:::i;:::-;23056:67;306:10:::0;23065:12:::1;226:98:::0;23056:67:::1;-1:-1:-1::0;23143:4:0::1;::::0;22730:425;-1:-1:-1;;;;;22730:425:0:o;21292:206::-;21409:4;21381:9;21392:6;17294:12;;;;;;;;;;;17290:221;;;17323:8;;;;;-1:-1:-1;;;;;17323:8:0;:23;306:10;17361:9;17372:6;17323:56;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21426:42:::1;21436:12;306:10:::0;;226:98;21436:12:::1;21450:9;21461:6;21426:9;:42::i;:::-;17410:8:::0;;21486:4:::1;::::0;-1:-1:-1;17410:8:0;;;-1:-1:-1;;;;;17410:8:0;:22;306:10;17433:12;226:98;17290:221;21426:42:::1;306:10:::0;21436:12:::1;226:98:::0;20175:350;18623:13;;-1:-1:-1;;;;;18623:13:0;306:10;-1:-1:-1;;;;;18607:29:0;;18599:72;;;;-1:-1:-1;;;18599:72:0;;;;;;;:::i;:::-;20253:25:::1;::::0;::::1;;20245:66;;;::::0;-1:-1:-1;;;20245:66:0;;17994:2:1;20245:66:0::1;::::0;::::1;17976:21:1::0;18033:2;18013:18;;;18006:30;18072;18052:18;;;18045:58;18120:18;;20245:66:0::1;17792:352:1::0;20245:66:0::1;20358:15;20330:24;;:43;;20322:85;;;::::0;-1:-1:-1;;;20322:85:0;;18351:2:1;20322:85:0::1;::::0;::::1;18333:21:1::0;18390:2;18370:18;;;18363:30;18429:31;18409:18;;;18402:59;18478:18;;20322:85:0::1;18149:353:1::0;20322:85:0::1;20418:12;:20:::0;;-1:-1:-1;;20449:33:0;;;20498:19:::1;::::0;::::1;::::0;20433:5:::1;::::0;20498:19:::1;20175:350::o:0;19549:365::-;19649:22;;-1:-1:-1;;;;;19649:22:0;306:10;-1:-1:-1;;;;;19633:38:0;;19625:76;;;;-1:-1:-1;;;19625:76:0;;18709:2:1;19625:76:0;;;18691:21:1;18748:2;18728:18;;;18721:30;-1:-1:-1;;;18767:18:1;;;18760:55;18832:18;;19625:76:0;18507:349:1;19625:76:0;19738:20;;19720:14;;;;;;:38;19712:70;;;;-1:-1:-1;;;19712:70:0;;19063:2:1;19712:70:0;;;19045:21:1;19102:2;19082:18;;;19075:30;-1:-1:-1;;;19121:18:1;;;19114:49;19180:18;;19712:70:0;18861:343:1;19712:70:0;19834:22;;19819:13;;19798:59;;-1:-1:-1;;;;;19834:22:0;;;;19819:13;;;;19798:59;;19834:22;;19798:59;-1:-1:-1;19884:22:0;;19868:13;:38;;-1:-1:-1;;;;;;19868:38:0;-1:-1:-1;;;;;19884:22:0;;;19868:38;;;;;;19549:365::o;37628:182::-;25092:6;;-1:-1:-1;;;;;25092:6:0;306:10;25092:22;25084:67;;;;-1:-1:-1;;;25084:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37713:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;37713:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;37768:34;;1474:41:1;;;37768:34:0::1;::::0;1447:18:1;37768:34:0::1;;;;;;;37628:182:::0;;:::o;37236:384::-;25092:6;;-1:-1:-1;;;;;25092:6:0;306:10;25092:22;25084:67;;;;-1:-1:-1;;;25084:67:0;;;;;;;:::i;:::-;37354:17:::1;:34:::0;;;37399:16:::1;:32:::0;;;37442:10:::1;:20:::0;;;37455:7;37489:36:::1;37418:13:::0;37374:14;37489:36:::1;:::i;:::-;:49;;;;:::i;:::-;37473:13;:65:::0;;;37574:4:::1;-1:-1:-1::0;37557:21:0::1;37549:63;;;::::0;-1:-1:-1;;;37549:63:0;;19411:2:1;37549:63:0::1;::::0;::::1;19393:21:1::0;19450:2;19430:18;;;19423:30;19489:31;19469:18;;;19462:59;19538:18;;37549:63:0::1;19209:353:1::0;44030:229:0;25092:6;;-1:-1:-1;;;;;25092:6:0;306:10;25092:22;25084:67;;;;-1:-1:-1;;;25084:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44112:25:0;::::1;44104:57;;;;-1:-1:-1::0;;;44104:57:0::1;;;;;;;:::i;:::-;44172:10;:33:::0;;-1:-1:-1;;;;;;44172:33:0::1;-1:-1:-1::0;;;;;44172:33:0;::::1;::::0;;::::1;::::0;;;44221:30:::1;::::0;::::1;::::0;-1:-1:-1;;44221:30:0::1;44030:229:::0;:::o;34836:347::-;25092:6;;-1:-1:-1;;;;;25092:6:0;306:10;25092:22;25084:67;;;;-1:-1:-1;;;25084:67:0;;;;;;;:::i;:::-;34959:6:::1;34939:13;21129:12:::0;;;21041:108;34939:13:::1;:17;::::0;34955:1:::1;34939:17;:::i;:::-;:26;;;;:::i;:::-;34926:9;:39;;34918:105;;;::::0;-1:-1:-1;;;34918:105:0;;20164:2:1;34918:105:0::1;::::0;::::1;20146:21:1::0;20203:2;20183:18;;;20176:30;20242:34;20222:18;;;20215:62;-1:-1:-1;;;20293:18:1;;;20286:51;20354:19;;34918:105:0::1;19962:417:1::0;34918:105:0::1;35074:5;35054:13;21129:12:::0;;;21041:108;35054:13:::1;:17;::::0;35070:1:::1;35054:17;:::i;:::-;:25;;;;:::i;:::-;35041:9;:38;;35033:103;;;::::0;-1:-1:-1;;;35033:103:0;;20586:2:1;35033:103:0::1;::::0;::::1;20568:21:1::0;20625:2;20605:18;;;20598:30;20664:34;20644:18;;;20637:62;-1:-1:-1;;;20715:18:1;;;20708:50;20775:19;;35033:103:0::1;20384:416:1::0;35033:103:0::1;35146:18;:30:::0;34836:347::o;19922:245::-;18623:13;;-1:-1:-1;;;;;18623:13:0;306:10;-1:-1:-1;;;;;18607:29:0;;18599:72;;;;-1:-1:-1;;;18599:72:0;;;;;;;:::i;:::-;20037:14:::1;::::0;20019:32:::1;::::0;:15:::1;:32;:::i;:::-;19992:24;:59:::0;;;20062:25:::1;:32:::0;;-1:-1:-1;;20062:32:0::1;20090:4;20062:32;::::0;;20110:49:::1;::::0;::::1;::::0;::::1;::::0;1863:25:1;;;1851:2;1836:18;;1717:177;34459:307:0;25092:6;;-1:-1:-1;;;;;25092:6:0;306:10;25092:22;25084:67;;;;-1:-1:-1;;;25084:67:0;;;;;;;:::i;:::-;34596:4:::1;34589:5;34569:13;21129:12:::0;;;21041:108;34569:13:::1;:17;::::0;34585:1:::1;34569:17;:::i;:::-;:25;;;;:::i;:::-;34568:32;;;;:::i;:::-;34550:14;:50;;34542:113;;;::::0;-1:-1:-1;;;34542:113:0;;21007:2:1;34542:113:0::1;::::0;::::1;20989:21:1::0;21046:2;21026:18;;;21019:30;21085:34;21065:18;;;21058:62;-1:-1:-1;;;21136:18:1;;;21129:48;21194:19;;34542:113:0::1;20805:414:1::0;34542:113:0::1;34682:25;:14:::0;34700:6:::1;34682:25;:::i;:::-;34666:13;:41:::0;;;34723:35:::1;::::0;1863:25:1;;;34723:35:0::1;::::0;1851:2:1;1836:18;34723:35:0::1;;;;;;;34459:307:::0;:::o;21506:151::-;-1:-1:-1;;;;;21622:18:0;;;21595:7;21622:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;21506:151;;;;;:::o;25337:244::-;25092:6;;-1:-1:-1;;;;;25092:6:0;306:10;25092:22;25084:67;;;;-1:-1:-1;;;25084:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25426:22:0;::::1;25418:73;;;::::0;-1:-1:-1;;;25418:73:0;;21426:2:1;25418:73:0::1;::::0;::::1;21408:21:1::0;21465:2;21445:18;;;21438:30;21504:34;21484:18;;;21477:62;-1:-1:-1;;;21555:18:1;;;21548:36;21601:19;;25418:73:0::1;21224:402:1::0;25418:73:0::1;25528:6;::::0;25507:38:::1;::::0;-1:-1:-1;;;;;25507:38:0;;::::1;::::0;25528:6:::1;::::0;25507:38:::1;::::0;25528:6:::1;::::0;25507:38:::1;25556:6;:17:::0;;-1:-1:-1;;;;;;25556:17:0::1;-1:-1:-1::0;;;;;25556:17:0;;;::::1;::::0;;;::::1;::::0;;25337:244::o;43572:160::-;25092:6;;-1:-1:-1;;;;;25092:6:0;306:10;25092:22;25084:67;;;;-1:-1:-1;;;25084:67:0;;;;;;;:::i;:::-;43666:58:::1;::::0;43630:12:::1;::::0;43674:10:::1;::::0;43698:21:::1;::::0;43630:12;43666:58;43630:12;43666:58;43698:21;43674:10;43666:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24286:348:::0;-1:-1:-1;;;;;24388:19:0;;24380:69;;;;-1:-1:-1;;;24380:69:0;;22043:2:1;24380:69:0;;;22025:21:1;22082:2;22062:18;;;22055:30;22121:34;22101:18;;;22094:62;-1:-1:-1;;;22172:18:1;;;22165:35;22217:19;;24380:69:0;21841:401:1;24380:69:0;-1:-1:-1;;;;;24468:21:0;;24460:69;;;;-1:-1:-1;;;24460:69:0;;22449:2:1;24460:69:0;;;22431:21:1;22488:2;22468:18;;;22461:30;22527:34;22507:18;;;22500:62;-1:-1:-1;;;22578:18:1;;;22571:33;22621:19;;24460:69:0;22247:399:1;24460:69:0;-1:-1:-1;;;;;24542:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24594:32;;1863:25:1;;;24594:32:0;;1836:18:1;24594:32:0;;;;;;;24286:348;;;:::o;23163:547::-;-1:-1:-1;;;;;23269:20:0;;23261:71;;;;-1:-1:-1;;;23261:71:0;;22853:2:1;23261:71:0;;;22835:21:1;22892:2;22872:18;;;22865:30;22931:34;22911:18;;;22904:62;-1:-1:-1;;;22982:18:1;;;22975:36;23028:19;;23261:71:0;22651:402:1;23261:71:0;-1:-1:-1;;;;;23351:23:0;;23343:72;;;;-1:-1:-1;;;23343:72:0;;23260:2:1;23343:72:0;;;23242:21:1;23299:2;23279:18;;;23272:30;23338:34;23318:18;;;23311:62;-1:-1:-1;;;23389:18:1;;;23382:34;23433:19;;23343:72:0;23058:400:1;23343:72:0;-1:-1:-1;;;;;23452:17:0;;23428:21;23452:17;;;;;;;;;;;23488:23;;;;23480:75;;;;-1:-1:-1;;;23480:75:0;;23665:2:1;23480:75:0;;;23647:21:1;23704:2;23684:18;;;23677:30;23743:34;23723:18;;;23716:62;-1:-1:-1;;;23794:18:1;;;23787:37;23841:19;;23480:75:0;23463:403:1;23480:75:0;23586:22;23602:6;23586:13;:22;:::i;:::-;-1:-1:-1;;;;;23566:17:0;;;:9;:17;;;;;;;;;;;:42;;;;23619:20;;;;;;;;:30;;23643:6;;23566:9;23619:30;;23643:6;;23619:30;:::i;:::-;;;;;;;;23684:9;-1:-1:-1;;;;;23667:35:0;23676:6;-1:-1:-1;;;;;23667:35:0;;23695:6;23667:35;;;;1863:25:1;;1851:2;1836:18;;1717:177;23667:35:0;;;;;;;;23250:460;23163:547;;;:::o;37818:2440::-;-1:-1:-1;;;;;37918:18:0;;37910:68;;;;-1:-1:-1;;;37910:68:0;;24073:2:1;37910:68:0;;;24055:21:1;24112:2;24092:18;;;24085:30;24151:34;24131:18;;;24124:62;-1:-1:-1;;;24202:18:1;;;24195:35;24247:19;;37910:68:0;23871:401:1;37910:68:0;-1:-1:-1;;;;;37997:16:0;;37989:64;;;;-1:-1:-1;;;37989:64:0;;24479:2:1;37989:64:0;;;24461:21:1;24518:2;24498:18;;;24491:30;24557:34;24537:18;;;24530:62;-1:-1:-1;;;24608:18:1;;;24601:33;24651:19;;37989:64:0;24277:399:1;37989:64:0;38081:1;38072:6;:10;38064:52;;;;-1:-1:-1;;;38064:52:0;;24883:2:1;38064:52:0;;;24865:21:1;24922:2;24902:18;;;24895:30;24961:31;24941:18;;;24934:59;25010:18;;38064:52:0;24681:353:1;38064:52:0;-1:-1:-1;;;;;38139:17:0;;;;;;:11;:17;;;;;;;;38138:18;:38;;;;-1:-1:-1;;;;;;38161:15:0;;;;;;:11;:15;;;;;;;;38160:16;38138:38;38137:57;;;-1:-1:-1;25030:6:0;;-1:-1:-1;;;;;38181:13:0;;;25030:6;;38181:13;38137:57;:82;;;-1:-1:-1;;;;;;38198:21:0;;38212:6;38198:21;38137:82;38129:123;;;;-1:-1:-1;;;38129:123:0;;25241:2:1;38129:123:0;;;25223:21:1;25280:2;25260:18;;;25253:30;25319;25299:18;;;25292:58;25367:18;;38129:123:0;25039:352:1;38129:123:0;-1:-1:-1;;;;;38265:15:0;;;;;;;:11;:15;;;;;;;;38283:12;38265:30;;38311:25;;;;;:19;:25;;;;;;;:52;;-1:-1:-1;;;;;;38340:23:0;;;;;;:19;:23;;;;;;;;38311:52;:64;;;-1:-1:-1;38367:8:0;;;;38311:64;38308:149;;;38391:33;38407:4;38413:2;38417:6;38391:15;:33::i;38308:149::-;38485:13;;;;;;;38477:48;;;;-1:-1:-1;;;38477:48:0;;25598:2:1;38477:48:0;;;25580:21:1;25637:2;25617:18;;;25610:30;-1:-1:-1;;;25656:18:1;;;25649:52;25718:18;;38477:48:0;25396:346:1;38477:48:0;-1:-1:-1;;;;;38542:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;38576:37:0;;;;;;:31;:37;;;;;;;;38575:38;38542:71;38538:182;;;38648:13;;38638:6;:23;;38630:78;;;;-1:-1:-1;;;38630:78:0;;25949:2:1;38630:78:0;;;25931:21:1;25988:2;25968:18;;;25961:30;26027:34;26007:18;;;26000:62;-1:-1:-1;;;26078:18:1;;;26071:40;26128:19;;38630:78:0;25747:406:1;38630:78:0;38772:18;;38744:24;38762:4;38744:9;:24::i;:::-;:46;;:75;;;;-1:-1:-1;38808:11:0;;;;;;;38744:75;:102;;;;-1:-1:-1;38838:8:0;;;;38837:9;38744:102;:152;;;;-1:-1:-1;;;;;;38865:31:0;;;;;;:25;:31;;;;;;;;38864:32;38744:152;:196;;;;-1:-1:-1;;;;;;38915:25:0;;;;;;:19;:25;;;;;;;;38914:26;38744:196;:238;;;;-1:-1:-1;;;;;;38959:23:0;;;;;;:19;:23;;;;;;;;38958:24;38744:238;38741:353;;;39003:8;:15;;-1:-1:-1;;39003:15:0;39014:4;39003:15;;;39037:10;:8;:10::i;:::-;39066:8;:16;;-1:-1:-1;;39066:16:0;;;38741:353;-1:-1:-1;;;;;39145:25:0;;39114:12;39145:25;;;:19;:25;;;;;;;;39144:26;:54;;;;-1:-1:-1;;;;;;39175:23:0;;;;;;:19;:23;;;;;;;;39174:24;39144:54;39141:1064;;;-1:-1:-1;;;;;39218:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;39267:1;39251:13;;:17;39218:50;39214:822;;;-1:-1:-1;;;;;39307:17:0;;;;;;:11;:17;;;;;;39331:12;;39307:21;;39327:1;39307:21;:::i;:::-;:36;39299:62;;;;-1:-1:-1;;;39299:62:0;;26360:2:1;39299:62:0;;;26342:21:1;26399:2;26379:18;;;26372:30;-1:-1:-1;;;26418:18:1;;;26411:43;26471:18;;39299:62:0;26158:337:1;39299:62:0;28295:5;39396:13;;39387:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;39380:43;;39490:13;;39471:16;;39464:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39442:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;39572:13:0;;39552:17;;39545:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;39522:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;39640:13:0;;39627:10;;39620:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;39604:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;39214:822:0;;-1:-1:-1;39214:822:0;;-1:-1:-1;;;;;39678:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;39728:1;39713:12;;:16;39678:51;39675:361;;;28295:5;39773:12;;39764:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;39757:42;;39862:12;;39844:15;;39837:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;39815:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;39942:12:0;;39923:16;;39916:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;39893:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;40008:12:0;;39996:9;;39989:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;39973:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;39675:361:0;40067:8;;40064:93;;40099:42;40115:4;40129;40136;40099:15;:42::i;:::-;40179:14;40189:4;40179:14;;:::i;:::-;;;39141:1064;40217:33;40233:4;40239:2;40243:6;40217:15;:33::i;41436:1575::-;41477:23;41503:24;41521:4;41503:9;:24::i;:::-;41477:50;;41538:25;41609:12;;41587:19;;41566:18;;:40;;;;:::i;:::-;:55;;;;:::i;:::-;41538:83;-1:-1:-1;41645:20:0;;;:46;;-1:-1:-1;41669:22:0;;41645:46;41642:60;;;41694:7;;41436:1575::o;41642:60::-;41735:18;;:23;;41756:2;41735:23;:::i;:::-;41717:15;:41;41714:113;;;41792:18;;:23;;41813:2;41792:23;:::i;:::-;41774:41;;41714:113;41896:23;41961:17;41940:18;;41922:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;41896:82;-1:-1:-1;41994:19:0;;41991:259;;42029:55;42053:4;42060:6;42068:15;42029;:55::i;:::-;42111:6;-1:-1:-1;;;;;42103:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42099:37;42150:34;42169:15;42150:34;;:::i;:::-;;;42220:18;;42199:39;;;;;:::i;:::-;;;41991:259;42273:15;42292:1;42273:20;42270:33;;42295:7;;;41436:1575::o;42270:33::-;42313:40;42337:15;42313:23;:40::i;:::-;42374:50;;-1:-1:-1;;;42374:50:0;;-1:-1:-1;;;;;42374:12:0;:29;;;;:50;;42412:10;;42374:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42465:35:0;;-1:-1:-1;;;42465:35:0;;42437:25;;-1:-1:-1;;;;;;42465:10:0;:20;;-1:-1:-1;42465:20:0;;:35;;42494:4;;42465:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42437:63;;42513:23;42581:17;42559:19;;42539:17;:39;;;;:::i;:::-;:59;;;;:::i;:::-;42644:1;42623:18;:22;;;42656:19;:23;;;42690:12;:16;42513:85;-1:-1:-1;42722:19:0;;42719:120;;42792:17;;42757:70;;42780:10;;-1:-1:-1;;;;;42792:17:0;42811:15;42757:22;:70::i;:::-;42854:35;;-1:-1:-1;;;42854:35:0;;42892:1;;-1:-1:-1;;;;;42854:10:0;:20;;;;:35;;42883:4;;42854:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;42851:153;;;42944:10;;42956:35;;-1:-1:-1;;;42956:35:0;;42909:83;;42932:10;;-1:-1:-1;;;;;42944:10:0;;;;42956:20;;;;;:35;;42985:4;;42956:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42909:22;:83::i;:::-;41464:1547;;;;;41436:1575::o;24003:275::-;-1:-1:-1;;;;;24087:21:0;;24079:66;;;;-1:-1:-1;;;24079:66:0;;26702:2:1;24079:66:0;;;26684:21:1;;;26721:18;;;26714:30;26780:34;26760:18;;;26753:62;26832:18;;24079:66:0;26500:356:1;24079:66:0;24172:6;24156:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;24189:18:0;;:9;:18;;;;;;;;;;:28;;24211:6;;24189:9;:28;;24211:6;;24189:28;:::i;:::-;;;;-1:-1:-1;;24233:37:0;;1863:25:1;;;24259:1:0;;-1:-1:-1;;;;;24233:37:0;;;;;1851:2:1;1836:18;24233:37:0;;;;;;;24003:275;;:::o;13864:211::-;13981:86;14001:5;14031:23;;;14056:2;14060:5;14008:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;14008:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;14008:58:0;-1:-1:-1;;;;;;14008:58:0;;;;;;;;;;13981:19;:86::i;36609:236::-;-1:-1:-1;;;;;36692:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;36692:39:0;;;;;;;36742;36692:31;:39;36742:26;:39::i;41093:335::-;41192:16;;;41206:1;41192:16;;;;;;;;41168:21;;41192:16;;;;;;;;;;-1:-1:-1;41192:16:0;41168:40;;41237:4;41219;41224:1;41219:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;41219:23:0;;;-1:-1:-1;;;;;41219:23:0;;;;;41271:10;41253:4;41258:1;41253:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41253:29:0;;;:7;;;;;;;;;:29;41295:125;;-1:-1:-1;;;41295:125:0;;:9;:63;;;;;;:125;;41359:11;;41372:1;;41375:4;;41389:12;;41404:15;;41295:125;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41155:273;41093:335;:::o;14083:333::-;14164:23;14190:69;14218:4;14190:69;;;;;;;;;;;;;;;;;14198:5;-1:-1:-1;;;;;14190:27:0;;;:69;;;;;:::i;:::-;14274:17;;14164:95;;-1:-1:-1;14274:21:0;14270:139;;14331:10;14320:30;;;;;;;;;;;;:::i;:::-;14312:85;;;;-1:-1:-1;;;14312:85:0;;28298:2:1;14312:85:0;;;28280:21:1;28337:2;28317:18;;;28310:30;28376:34;28356:18;;;28349:62;-1:-1:-1;;;28427:18:1;;;28420:40;28477:19;;14312:85:0;28096:406:1;35195:207:0;-1:-1:-1;;;;;35283:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;35283:52:0;;;;;;;;;;35351:43;;28675:51:1;;;28742:18;;;28735:50;35351:43:0;;28648:18:1;35351:43:0;;;;;;;35195:207;;:::o;8367:229::-;8504:12;8536:52;8558:6;8566:4;8572:1;8575:12;8536:21;:52::i;:::-;8529:59;8367:229;-1:-1:-1;;;;8367:229:0:o;9487:455::-;9657:12;9715:5;9690:21;:30;;9682:81;;;;-1:-1:-1;;;9682:81:0;;28998:2:1;9682:81:0;;;28980:21:1;29037:2;29017:18;;;29010:30;29076:34;29056:18;;;29049:62;-1:-1:-1;;;29127:18:1;;;29120:36;29173:19;;9682:81:0;28796:402:1;9682:81:0;9775:12;9789:23;9816:6;-1:-1:-1;;;;;9816:11:0;9835:5;9842:4;9816:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9774:73;;;;9865:69;9892:6;9900:7;9909:10;9921:12;9865:26;:69::i;:::-;9858:76;9487:455;-1:-1:-1;;;;;;;9487:455:0:o;12060:644::-;12245:12;12274:7;12270:427;;;12302:10;:17;12323:1;12302:22;12298:290;;-1:-1:-1;;;;;7808:19:0;;;12512:60;;;;-1:-1:-1;;;12512:60:0;;29697:2:1;12512:60:0;;;29679:21:1;29736:2;29716:18;;;29709:30;29775:31;29755:18;;;29748:59;29824:18;;12512:60:0;29495:353:1;12512:60:0;-1:-1:-1;12609:10:0;12602:17;;12270:427;12652:33;12660:10;12672:12;13407:17;;:21;13403:388;;13639:10;13633:17;13696:15;13683:10;13679:2;13675:19;13668:44;13403:388;13766:12;13759:20;;-1:-1:-1;;;13759:20:0;;;;;;;;:::i;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:1;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:1:o;670:222::-;-1:-1:-1;;;;;853:32:1;;;;835:51;;823:2;808:18;;670:222::o;897:173::-;965:20;;-1:-1:-1;;;;;1014:31:1;;1004:42;;994:70;;1060:1;1057;1050:12;994:70;897:173;;;:::o;1075:254::-;1143:6;1151;1204:2;1192:9;1183:7;1179:23;1175:32;1172:52;;;1220:1;1217;1210:12;1172:52;1243:29;1262:9;1243:29;:::i;:::-;1233:39;1319:2;1304:18;;;;1291:32;;-1:-1:-1;;;1075:254:1:o;1526:186::-;1585:6;1638:2;1626:9;1617:7;1613:23;1609:32;1606:52;;;1654:1;1651;1644:12;1606:52;1677:29;1696:9;1677:29;:::i;:::-;1667:39;1526:186;-1:-1:-1;;;1526:186:1:o;1899:127::-;1960:10;1955:3;1951:20;1948:1;1941:31;1991:4;1988:1;1981:15;2015:4;2012:1;2005:15;2031:275;2102:2;2096:9;2167:2;2148:13;;-1:-1:-1;;2144:27:1;2132:40;;-1:-1:-1;;;;;2187:34:1;;2223:22;;;2184:62;2181:88;;;2249:18;;:::i;:::-;2285:2;2278:22;2031:275;;-1:-1:-1;2031:275:1:o;2311:183::-;2371:4;-1:-1:-1;;;;;2396:6:1;2393:30;2390:56;;;2426:18;;:::i;:::-;-1:-1:-1;2471:1:1;2467:14;2483:4;2463:25;;2311:183::o;2499:662::-;2553:5;2606:3;2599:4;2591:6;2587:17;2583:27;2573:55;;2624:1;2621;2614:12;2573:55;2660:6;2647:20;2686:4;2710:60;2726:43;2766:2;2726:43;:::i;:::-;2710:60;:::i;:::-;2804:15;;;2890:1;2886:10;;;;2874:23;;2870:32;;;2835:12;;;;2914:15;;;2911:35;;;2942:1;2939;2932:12;2911:35;2978:2;2970:6;2966:15;2990:142;3006:6;3001:3;2998:15;2990:142;;;3072:17;;3060:30;;3110:12;;;;3023;;2990:142;;;-1:-1:-1;3150:5:1;2499:662;-1:-1:-1;;;;;;2499:662:1:o;3166:1146::-;3284:6;3292;3345:2;3333:9;3324:7;3320:23;3316:32;3313:52;;;3361:1;3358;3351:12;3313:52;3401:9;3388:23;-1:-1:-1;;;;;3471:2:1;3463:6;3460:14;3457:34;;;3487:1;3484;3477:12;3457:34;3525:6;3514:9;3510:22;3500:32;;3570:7;3563:4;3559:2;3555:13;3551:27;3541:55;;3592:1;3589;3582:12;3541:55;3628:2;3615:16;3650:4;3674:60;3690:43;3730:2;3690:43;:::i;3674:60::-;3768:15;;;3850:1;3846:10;;;;3838:19;;3834:28;;;3799:12;;;;3874:19;;;3871:39;;;3906:1;3903;3896:12;3871:39;3930:11;;;;3950:148;3966:6;3961:3;3958:15;3950:148;;;4032:23;4051:3;4032:23;:::i;:::-;4020:36;;3983:12;;;;4076;;;;3950:148;;;4117:5;-1:-1:-1;;4160:18:1;;4147:32;;-1:-1:-1;;4191:16:1;;;4188:36;;;4220:1;4217;4210:12;4188:36;;4243:63;4298:7;4287:8;4276:9;4272:24;4243:63;:::i;:::-;4233:73;;;3166:1146;;;;;:::o;4317:328::-;4394:6;4402;4410;4463:2;4451:9;4442:7;4438:23;4434:32;4431:52;;;4479:1;4476;4469:12;4431:52;4502:29;4521:9;4502:29;:::i;:::-;4492:39;;4550:38;4584:2;4573:9;4569:18;4550:38;:::i;:::-;4540:48;;4635:2;4624:9;4620:18;4607:32;4597:42;;4317:328;;;;;:::o;5047:367::-;5110:8;5120:6;5174:3;5167:4;5159:6;5155:17;5151:27;5141:55;;5192:1;5189;5182:12;5141:55;-1:-1:-1;5215:20:1;;-1:-1:-1;;;;;5247:30:1;;5244:50;;;5290:1;5287;5280:12;5244:50;5327:4;5319:6;5315:17;5303:29;;5387:3;5380:4;5370:6;5367:1;5363:14;5355:6;5351:27;5347:38;5344:47;5341:67;;;5404:1;5401;5394:12;5341:67;5047:367;;;;;:::o;5419:118::-;5505:5;5498:13;5491:21;5484:5;5481:32;5471:60;;5527:1;5524;5517:12;5542:566;5634:6;5642;5650;5703:2;5691:9;5682:7;5678:23;5674:32;5671:52;;;5719:1;5716;5709:12;5671:52;5759:9;5746:23;-1:-1:-1;;;;;5784:6:1;5781:30;5778:50;;;5824:1;5821;5814:12;5778:50;5863:70;5925:7;5916:6;5905:9;5901:22;5863:70;:::i;:::-;5952:8;;-1:-1:-1;5837:96:1;-1:-1:-1;;6037:2:1;6022:18;;6009:32;6050:28;6009:32;6050:28;:::i;:::-;6097:5;6087:15;;;5542:566;;;;;:::o;6113:180::-;6172:6;6225:2;6213:9;6204:7;6200:23;6196:32;6193:52;;;6241:1;6238;6231:12;6193:52;-1:-1:-1;6264:23:1;;6113:180;-1:-1:-1;6113:180:1:o;6298:315::-;6363:6;6371;6424:2;6412:9;6403:7;6399:23;6395:32;6392:52;;;6440:1;6437;6430:12;6392:52;6463:29;6482:9;6463:29;:::i;:::-;6453:39;;6542:2;6531:9;6527:18;6514:32;6555:28;6577:5;6555:28;:::i;:::-;6602:5;6592:15;;;6298:315;;;;;:::o;6618:316::-;6695:6;6703;6711;6764:2;6752:9;6743:7;6739:23;6735:32;6732:52;;;6780:1;6777;6770:12;6732:52;-1:-1:-1;;6803:23:1;;;6873:2;6858:18;;6845:32;;-1:-1:-1;6924:2:1;6909:18;;;6896:32;;6618:316;-1:-1:-1;6618:316:1:o;6939:260::-;7007:6;7015;7068:2;7056:9;7047:7;7043:23;7039:32;7036:52;;;7084:1;7081;7074:12;7036:52;7107:29;7126:9;7107:29;:::i;:::-;7097:39;;7155:38;7189:2;7178:9;7174:18;7155:38;:::i;:::-;7145:48;;6939:260;;;;;:::o;7463:437::-;7549:6;7557;7610:2;7598:9;7589:7;7585:23;7581:32;7578:52;;;7626:1;7623;7616:12;7578:52;7666:9;7653:23;-1:-1:-1;;;;;7691:6:1;7688:30;7685:50;;;7731:1;7728;7721:12;7685:50;7770:70;7832:7;7823:6;7812:9;7808:22;7770:70;:::i;:::-;7859:8;;7744:96;;-1:-1:-1;7463:437:1;-1:-1:-1;;;;7463:437:1:o;8126:763::-;8194:6;8225:2;8268;8256:9;8247:7;8243:23;8239:32;8236:52;;;8284:1;8281;8274:12;8236:52;8324:9;8311:23;-1:-1:-1;;;;;8394:2:1;8386:6;8383:14;8380:34;;;8410:1;8407;8400:12;8380:34;8448:6;8437:9;8433:22;8423:32;;8493:7;8486:4;8482:2;8478:13;8474:27;8464:55;;8515:1;8512;8505:12;8464:55;8551:2;8538:16;8573:2;8569;8566:10;8563:36;;;8579:18;;:::i;:::-;8621:53;8664:2;8645:13;;-1:-1:-1;;8641:27:1;8637:36;;8621:53;:::i;:::-;8608:66;;8697:2;8690:5;8683:17;8737:7;8732:2;8727;8723;8719:11;8715:20;8712:33;8709:53;;;8758:1;8755;8748:12;8709:53;8813:2;8808;8804;8800:11;8795:2;8788:5;8784:14;8771:45;8857:1;8836:14;;;8832:23;;;8825:34;;;;-1:-1:-1;8840:5:1;8126:763;-1:-1:-1;;;8126:763:1:o;8894:380::-;8973:1;8969:12;;;;9016;;;9037:61;;9091:4;9083:6;9079:17;9069:27;;9037:61;9144:2;9136:6;9133:14;9113:18;9110:38;9107:161;;9190:10;9185:3;9181:20;9178:1;9171:31;9225:4;9222:1;9215:15;9253:4;9250:1;9243:15;9107:161;;8894:380;;;:::o;9279:375::-;-1:-1:-1;;;;;9537:15:1;;;9519:34;;9589:15;;;;9584:2;9569:18;;9562:43;9636:2;9621:18;;9614:34;;;;9469:2;9454:18;;9279:375::o;9659:404::-;9861:2;9843:21;;;9900:2;9880:18;;;9873:30;9939:34;9934:2;9919:18;;9912:62;-1:-1:-1;;;10005:2:1;9990:18;;9983:38;10053:3;10038:19;;9659:404::o;10068:356::-;10270:2;10252:21;;;10289:18;;;10282:30;10348:34;10343:2;10328:18;;10321:62;10415:2;10400:18;;10068:356::o;11211:127::-;11272:10;11267:3;11263:20;11260:1;11253:31;11303:4;11300:1;11293:15;11327:4;11324:1;11317:15;11343:127;11404:10;11399:3;11395:20;11392:1;11385:31;11435:4;11432:1;11425:15;11459:4;11456:1;11449:15;11475:135;11514:3;11535:17;;;11532:43;;11555:18;;:::i;:::-;-1:-1:-1;11602:1:1;11591:13;;11475:135::o;11615:456::-;-1:-1:-1;;;;;11902:15:1;;;11884:34;;11954:15;;;11949:2;11934:18;;11927:43;12006:15;;12001:2;11986:18;;11979:43;12053:2;12038:18;;12031:34;;;;11833:3;11818:19;;11615:456::o;12076:405::-;12278:2;12260:21;;;12317:2;12297:18;;;12290:30;12356:34;12351:2;12336:18;;12329:62;-1:-1:-1;;;12422:2:1;12407:18;;12400:39;12471:3;12456:19;;12076:405::o;12486:128::-;12553:9;;;12574:11;;;12571:37;;;12588:18;;:::i;12619:354::-;12821:2;12803:21;;;12860:2;12840:18;;;12833:30;12899:32;12894:2;12879:18;;12872:60;12964:2;12949:18;;12619:354::o;12978:125::-;13043:9;;;13064:10;;;13061:36;;;13077:18;;:::i;13108:343::-;13310:2;13292:21;;;13349:2;13329:18;;;13322:30;-1:-1:-1;;;13383:2:1;13368:18;;13361:49;13442:2;13427:18;;13108:343::o;15777:184::-;15847:6;15900:2;15888:9;15879:7;15875:23;15871:32;15868:52;;;15916:1;15913;15906:12;15868:52;-1:-1:-1;15939:16:1;;15777:184;-1:-1:-1;15777:184:1:o;15966:274::-;-1:-1:-1;;;;;16158:32:1;;;;16140:51;;16222:2;16207:18;;16200:34;16128:2;16113:18;;15966:274::o;17385:402::-;17587:2;17569:21;;;17626:2;17606:18;;;17599:30;17665:34;17660:2;17645:18;;17638:62;-1:-1:-1;;;17731:2:1;17716:18;;17709:36;17777:3;17762:19;;17385:402::o;19567:168::-;19640:9;;;19671;;19688:15;;;19682:22;;19668:37;19658:71;;19709:18;;:::i;19740:217::-;19780:1;19806;19796:132;;19850:10;19845:3;19841:20;19838:1;19831:31;19885:4;19882:1;19875:15;19913:4;19910:1;19903:15;19796:132;-1:-1:-1;19942:9:1;;19740:217::o;26861:980::-;27123:4;27171:3;27160:9;27156:19;27202:6;27191:9;27184:25;27228:2;27266:6;27261:2;27250:9;27246:18;27239:34;27309:3;27304:2;27293:9;27289:18;27282:31;27333:6;27368;27362:13;27399:6;27391;27384:22;27437:3;27426:9;27422:19;27415:26;;27476:2;27468:6;27464:15;27450:29;;27497:1;27507:195;27521:6;27518:1;27515:13;27507:195;;;27586:13;;-1:-1:-1;;;;;27582:39:1;27570:52;;27677:15;;;;27642:12;;;;27618:1;27536:9;27507:195;;;-1:-1:-1;;;;;;;27758:32:1;;;;27753:2;27738:18;;27731:60;-1:-1:-1;;;27822:3:1;27807:19;27800:35;27719:3;26861:980;-1:-1:-1;;;26861:980:1:o;27846:245::-;27913:6;27966:2;27954:9;27945:7;27941:23;27937:32;27934:52;;;27982:1;27979;27972:12;27934:52;28014:9;28008:16;28033:28;28055:5;28033:28;:::i;29203:287::-;29332:3;29370:6;29364:13;29386:66;29445:6;29440:3;29433:4;29425:6;29421:17;29386:66;:::i;:::-;29468:16;;;;;29203:287;-1:-1:-1;;29203:287:1:o

Swarm Source

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