MATIC Price: $1.01 (-2.10%)
Gas: 138 GWei
 

Overview

MATIC Balance

Polygon PoS Chain LogoPolygon PoS Chain LogoPolygon PoS Chain Logo2,107.622395840655134742 MATIC

MATIC Value

$2,121.44 (@ $1.01/MATIC)

Token Holdings

More Info

Private Name Tags

TokenTracker

Aimedis (AIMX) (@$0.0085)
Transaction Hash
Method
Block
From
To
Value
Approve551749362024-03-28 11:48:244 hrs ago1711626504IN
Aimedis: AIMX Token
0 MATIC0.00972089157.60721387
Approve551697462024-03-28 8:24:128 hrs ago1711614252IN
Aimedis: AIMX Token
0 MATIC0.0096696156.80608607
Approve551696962024-03-28 8:22:268 hrs ago1711614146IN
Aimedis: AIMX Token
0 MATIC0.01238576200.8524932
Approve551695952024-03-28 8:17:468 hrs ago1711613866IN
Aimedis: AIMX Token
0 MATIC0.01360065219.57079928
Transfer551621892024-03-28 3:32:0513 hrs ago1711596725IN
Aimedis: AIMX Token
0 MATIC0.01079716127.72568963
Transfer551580122024-03-28 1:03:3115 hrs ago1711587811IN
Aimedis: AIMX Token
0 MATIC0.01241808108.97070882
Transfer551550672024-03-27 23:17:2917 hrs ago1711581449IN
Aimedis: AIMX Token
0 MATIC0.0106835793.75007575
Approve551532622024-03-27 22:10:1518 hrs ago1711577415IN
Aimedis: AIMX Token
0 MATIC0.00624033101.17604382
Approve551506652024-03-27 20:31:5220 hrs ago1711571512IN
Aimedis: AIMX Token
0 MATIC0.00707275114.18352007
Approve551484932024-03-27 19:09:4421 hrs ago1711566584IN
Aimedis: AIMX Token
0 MATIC0.00624024100.74340167
Transfer551317752024-03-27 8:33:1332 hrs ago1711528393IN
Aimedis: AIMX Token
0 MATIC0.01927241.60593306
Approve551277642024-03-27 6:02:3534 hrs ago1711519355IN
Aimedis: AIMX Token
0 MATIC0.03154157511.59011825
Transfer551266032024-03-27 5:18:1535 hrs ago1711516695IN
Aimedis: AIMX Token
0 MATIC0.01543542130
Approve551242172024-03-27 3:47:1536 hrs ago1711511235IN
Aimedis: AIMX Token
0 MATIC0.00996671160.90405611
Approve551230912024-03-27 3:04:4337 hrs ago1711508683IN
Aimedis: AIMX Token
0 MATIC0.0089077143.80712762
Approve551202892024-03-27 1:19:1439 hrs ago1711502354IN
Aimedis: AIMX Token
0 MATIC0.0047102976.45831465
Approve551202642024-03-27 1:18:1639 hrs ago1711502296IN
Aimedis: AIMX Token
0 MATIC0.0050112581.26447199
Approve551188872024-03-27 0:26:5040 hrs ago1711499210IN
Aimedis: AIMX Token
0 MATIC0.004737776.48609737
Transfer551161602024-03-26 22:42:4241 hrs ago1711492962IN
Aimedis: AIMX Token
0 MATIC0.0059258152
Approve551150642024-03-26 22:01:0842 hrs ago1711490468IN
Aimedis: AIMX Token
0 MATIC0.0019014930.69793425
Approve551117042024-03-26 19:53:2144 hrs ago1711482801IN
Aimedis: AIMX Token
0 MATIC0.002693243.52168162
Transfer551083552024-03-26 17:43:0046 hrs ago1711474980IN
Aimedis: AIMX Token
0 MATIC0.0053779284.51732032
Transfer551083332024-03-26 17:42:1246 hrs ago1711474932IN
Aimedis: AIMX Token
0 MATIC0.0060675488.69769661
Approve551017142024-03-26 13:29:352 days ago1711459775IN
Aimedis: AIMX Token
0 MATIC0.00625026101.3370523
Transfer551001762024-03-26 12:31:192 days ago1711456279IN
Aimedis: AIMX Token
0 MATIC0.00993436117.50246218
View all transactions

Latest 2 internal transactions

Parent Txn Hash Block From To Value
478400762023-09-22 7:03:40188 days ago1695366220
Aimedis: AIMX Token
285.13718291 MATIC
395515172023-02-21 14:21:04401 days ago1676989264
Aimedis: AIMX Token
 Contract Creation0 MATIC
Loading...
Loading

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

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

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

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.