ETH Price: $3,398.44 (+1.60%)

Contract

0x006bEec5C06c6Fe60f66043a554fe5F5c9371700
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve214722702024-12-24 12:16:351 mins ago1735042595IN
0x006bEec5...5c9371700
0 ETH0.000405178.69394257
Approve214721432024-12-24 11:50:5926 mins ago1735041059IN
0x006bEec5...5c9371700
0 ETH0.000433729.30668292
Approve214718352024-12-24 10:49:111 hr ago1735037351IN
0x006bEec5...5c9371700
0 ETH0.000422949.07519701
Approve214717102024-12-24 10:23:471 hr ago1735035827IN
0x006bEec5...5c9371700
0 ETH0.000305386.56111169
Approve214716852024-12-24 10:18:231 hr ago1735035503IN
0x006bEec5...5c9371700
0 ETH0.00021798.16017275
Approve214716842024-12-24 10:18:111 hr ago1735035491IN
0x006bEec5...5c9371700
0 ETH0.000369657.93187995
Transfer214712042024-12-24 8:41:353 hrs ago1735029695IN
0x006bEec5...5c9371700
0 ETH0.000422595.70259498
Transfer214710042024-12-24 8:01:114 hrs ago1735027271IN
0x006bEec5...5c9371700
0 ETH0.000433795.85476761
Approve214707662024-12-24 7:13:115 hrs ago1735024391IN
0x006bEec5...5c9371700
0 ETH0.000336727.22514663
Approve214707662024-12-24 7:13:115 hrs ago1735024391IN
0x006bEec5...5c9371700
0 ETH0.000336727.22514663
Approve214707662024-12-24 7:13:115 hrs ago1735024391IN
0x006bEec5...5c9371700
0 ETH0.000336727.22514663
Approve214707252024-12-24 7:04:595 hrs ago1735023899IN
0x006bEec5...5c9371700
0 ETH0.000311336.68207989
Transfer214706482024-12-24 6:49:235 hrs ago1735022963IN
0x006bEec5...5c9371700
0 ETH0.000370456.5
Transfer214706452024-12-24 6:48:475 hrs ago1735022927IN
0x006bEec5...5c9371700
0 ETH0.000384196.22108409
Transfer214704712024-12-24 6:13:596 hrs ago1735020839IN
0x006bEec5...5c9371700
0 ETH0.000261164.58344606
Transfer214704682024-12-24 6:13:236 hrs ago1735020803IN
0x006bEec5...5c9371700
0 ETH0.000255234.47936611
Transfer214704612024-12-24 6:11:596 hrs ago1735020719IN
0x006bEec5...5c9371700
0 ETH0.00024854.36125499
Transfer214704592024-12-24 6:11:356 hrs ago1735020695IN
0x006bEec5...5c9371700
0 ETH0.000269014.72116433
Transfer214704572024-12-24 6:11:116 hrs ago1735020671IN
0x006bEec5...5c9371700
0 ETH0.000274524.81777253
Transfer214704542024-12-24 6:10:356 hrs ago1735020635IN
0x006bEec5...5c9371700
0 ETH0.00028555.01052711
Transfer214704512024-12-24 6:09:596 hrs ago1735020599IN
0x006bEec5...5c9371700
0 ETH0.000280874.92924765
Approve214703012024-12-24 5:39:596 hrs ago1735018799IN
0x006bEec5...5c9371700
0 ETH0.000311746.69787815
Approve214702932024-12-24 5:38:116 hrs ago1735018691IN
0x006bEec5...5c9371700
0 ETH0.000235575.08750825
Transfer214702902024-12-24 5:37:356 hrs ago1735018655IN
0x006bEec5...5c9371700
0 ETH0.000357444.82502378
Approve214702752024-12-24 5:34:356 hrs ago1735018475IN
0x006bEec5...5c9371700
0 ETH0.000258175.58422751
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
214721382024-12-24 11:49:5927 mins ago1735040999
0x006bEec5...5c9371700
0.03154272 ETH
214721382024-12-24 11:49:5927 mins ago1735040999
0x006bEec5...5c9371700
0.01051424 ETH
214721382024-12-24 11:49:5927 mins ago1735040999
0x006bEec5...5c9371700
0.04205696 ETH
214721382024-12-24 11:49:5927 mins ago1735040999
0x006bEec5...5c9371700
0.00237852 ETH
214721382024-12-24 11:49:5927 mins ago1735040999
0x006bEec5...5c9371700
0.00237852 ETH
214712392024-12-24 8:48:353 hrs ago1735030115
0x006bEec5...5c9371700
0.03990828 ETH
214712392024-12-24 8:48:353 hrs ago1735030115
0x006bEec5...5c9371700
0.01330276 ETH
214712392024-12-24 8:48:353 hrs ago1735030115
0x006bEec5...5c9371700
0.05321105 ETH
214712392024-12-24 8:48:353 hrs ago1735030115
0x006bEec5...5c9371700
0.00301158 ETH
214712392024-12-24 8:48:353 hrs ago1735030115
0x006bEec5...5c9371700
0.00301158 ETH
214707672024-12-24 7:13:235 hrs ago1735024403
0x006bEec5...5c9371700
0.07244817 ETH
214707672024-12-24 7:13:235 hrs ago1735024403
0x006bEec5...5c9371700
0.02414939 ETH
214707672024-12-24 7:13:235 hrs ago1735024403
0x006bEec5...5c9371700
0.09659756 ETH
214707672024-12-24 7:13:235 hrs ago1735024403
0x006bEec5...5c9371700
0.00549848 ETH
214707672024-12-24 7:13:235 hrs ago1735024403
0x006bEec5...5c9371700
0.00549848 ETH
214702372024-12-24 5:26:476 hrs ago1735018007
0x006bEec5...5c9371700
0.03490048 ETH
214702372024-12-24 5:26:476 hrs ago1735018007
0x006bEec5...5c9371700
0.01163349 ETH
214702372024-12-24 5:26:476 hrs ago1735018007
0x006bEec5...5c9371700
0.04653397 ETH
214702372024-12-24 5:26:476 hrs ago1735018007
0x006bEec5...5c9371700
0.00263365 ETH
214702372024-12-24 5:26:476 hrs ago1735018007
0x006bEec5...5c9371700
0.00263365 ETH
214698832024-12-24 4:15:358 hrs ago1735013735
0x006bEec5...5c9371700
0.04173646 ETH
214698832024-12-24 4:15:358 hrs ago1735013735
0x006bEec5...5c9371700
0.01391215 ETH
214698832024-12-24 4:15:358 hrs ago1735013735
0x006bEec5...5c9371700
0.05564861 ETH
214698832024-12-24 4:15:358 hrs ago1735013735
0x006bEec5...5c9371700
0.00315153 ETH
214698832024-12-24 4:15:358 hrs ago1735013735
0x006bEec5...5c9371700
0.00315153 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ORN

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-12-23
*/

// SPDX-License-Identifier: MIT
/**
 * https://t.me/projectorioneth
 * https://x.com/ProjectOrionETH
 * https://www.projectorion.online/
 */
pragma solidity 0.8.19;

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface INodeManager {
    struct NodeEntity {
        string name;
        uint256 creationTime;
        uint256 lastClaimTime;
        uint256 amount;
        uint256 tier;
        uint256 totalClaimed;
    }

    function getNodePrice(uint256 _tierIndex) external view returns (uint256);

    function createNode(
        address account,
        string memory nodeName,
        uint256 tier
    ) external;

    function getNodeReward(
        address account,
        uint256 _creationTime
    ) external view returns (uint256);

    function getAllNodesRewards(
        address account
    ) external view returns (uint256[2] memory);

    function cashoutNodeReward(address account, uint256 _creationTime) external;

    function cashoutAllNodesRewards(address account) external;

    function getAllNodes(
        address account
    ) external view returns (NodeEntity[] memory);

    function getNodeFee(
        address account,
        uint256 _creationTime,
        uint256 _rewardAmount
    ) external returns (uint256);

    function getAllNodesFee(
        address account,
        uint256 _rewardAmount
    ) external returns (uint256);

    function borrowRewards(
        address account,
        uint256 blocktime,
        uint256 amount
    ) external;

    function getNodeTier(
        address account,
        uint256 blocktime
    ) external view returns (uint256);

    function upgradeNode(
        address account,
        uint256 blocktime
    ) external;

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

    function isNodeOwner(address account) external view returns (bool);

    function updateTiersRewards(uint256[] memory newVal) external;

    function getNodesNames(
        address account
    ) external view returns (string memory);

    function getNodesCreationTime(
        address account
    ) external view returns (string memory);

    function getNodesRewards(
        address account
    ) external view returns (string memory);

    function getNodesLastClaimTime(
        address account
    ) external view returns (string memory);

    function totalStaked() external view returns (uint256);

    function totalNodesCreated() external view returns (uint256);
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    )
        external
        payable
        returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);

    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);

    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);

    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);

    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(
        address target,
        bytes memory data
    ) internal view returns (bytes memory) {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

library SafeERC20 {
    using Address for address;

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

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

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

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(
                oldAllowance >= value,
                "SafeERC20: decreased allowance below zero"
            );
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(
                    token.approve.selector,
                    spender,
                    newAllowance
                )
            );
        }
    }

    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 IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

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

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

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) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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");

        _beforeTokenTransfer(sender, recipient, amount);

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

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IAliens {
    function mint(uint256 numberOfToken) external payable;

    function setPriceForSale(
        uint256 _tokenId,
        uint256 _newPrice,
        bool isForSale
    ) external;

    function buyToken(uint256 _tokenId) external payable;

    function tokenOfOwnerByIndex(
        address nodeOwner,
        uint256 index
    ) external view returns (uint256);

    function totalSupply() external view returns (uint256);

    function setAlienKind(
        uint256[] memory _tokens,
        uint256[] memory _kinds
    ) external;

    function getAllSaleTokens() external view returns (uint256[] memory);

    function supportsInterface(bytes4 interfaceId) external view returns (bool);

    function changeUrl(string memory url) external;

    function getAlienLevel(uint256 _tokenId) external view returns (uint256);

    function getAlienKind(uint256 _tokenId) external view returns (uint256);

    function growAlien(uint256 _tokenId) external;

}

contract ORN is ERC20, Ownable {
    using SafeMath for uint256;

    INodeManager public nodeManager;
    IAliens public aliens;

    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    address public marketingWallet;
    address public distributionPool;
    address public devPool;

    address public deadWallet = 0x000000000000000000000000000000000000dEaD;

    uint256 public rewardsFee;
    uint256 public liquidityPoolFee;
    uint256 public futurFee;

    uint256 public buyTax = 35;
    uint256 public sellTax = 55;

    uint256 private devShare = 25;
    bool private swapping = false;
    bool private swapLiquify = true;
    uint256 public swapTokensAmount;
    uint256 public growMultiplier = 10e18;

    bool private tradingOpen = false;
    uint256 private maxTx = 375;

    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

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

    event LiquidityWalletUpdated(
        address indexed newLiquidityWallet,
        address indexed oldLiquidityWallet
    );

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

    constructor() ERC20("Project Orion", "ORN")  {
        marketingWallet = 0x2AF5DFf2Ff0b71816E9E552a4e8EBE807016C2C0;
        distributionPool = 0x5A45348CBDde5D073Dab1A2D30f695f21FAadfFC;
        devPool = msg.sender;

        address uniV2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

        require(uniV2Router != address(0), "ROUTER CANNOT BE ZERO");
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(uniV2Router);

        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        futurFee = 89;
        rewardsFee = 1;
        liquidityPoolFee = 10;


        _mint(_msgSender(), 300000e18);

        require(
            totalSupply() == 300000e18,
            "CONSTR: totalSupply must equal 300,000"
        );
        swapTokensAmount = 100 * (10 ** 18);
    }

    receive() external payable virtual {}

    function setNodeManagement(address nodeManagement) external onlyOwner {
        nodeManager = INodeManager(nodeManagement);
    }

    function setAliens(address aliensAddress) external onlyOwner {
        aliens = IAliens(aliensAddress);
    }

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(
            newAddress != address(uniswapV2Router),
            "ELEMENTS: The router already has that address"
        );
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
        address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Pair = _uniswapV2Pair;
    }

    function updateSwapTokensAmount(uint256 newVal) external onlyOwner {
        swapTokensAmount = newVal;
    }

    function updateFuturWall(address payable wall) external onlyOwner {
        marketingWallet = wall;
    }

    function updateDevWall(address payable wall) external onlyOwner {
        devPool = wall;
    }

    function updateRewardsWall(address payable wall) external onlyOwner {
        distributionPool = wall;
    }

    function updateFeeSplit(uint256 _rewardsFee, uint256 _liquidityPoolFee, uint256 _futurFee) external onlyOwner {
        require(_rewardsFee.add(_liquidityPoolFee).add(_futurFee) == 100, "Fees must add up to 100");
        rewardsFee = _rewardsFee;
        liquidityPoolFee = _liquidityPoolFee;
        futurFee = _futurFee;
    }
    
    function updateSellTax(uint256 value) external onlyOwner {
        require(value <= 6, "TAX: sell tax cannot exceed 6%");
        sellTax = value;
    }

    function updateBuyTax(uint256 value) external onlyOwner {
        require(value <= 6, "TAX: buy tax cannot exceed 6%");
        buyTax = value;
    }

    function lowerFeesOnLaunch(uint256 newBuy, uint256 newSell) external onlyOwner {
        require (newBuy <= buyTax, "Taxes only go down");
        require (newSell <= sellTax, "Taxes only go down");
        buyTax = newBuy;
        sellTax = newSell;
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != uniswapV2Pair,
            "ELEMENTS: The DEX pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "ELEMENTS: Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    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");
        if (
            automatedMarketMakerPairs[to] &&
            (from != address(this) && from != owner())
        ) {
            uint256 sellTaxAmount = amount.mul(sellTax).div(100);
            super._transfer(from, address(this), sellTaxAmount);
            amount = amount.sub(sellTaxAmount);
        } else if (
            automatedMarketMakerPairs[from] &&
            (to != address(this) && to != owner())
        ) {
            uint256 buyTaxAmount = amount.mul(buyTax).div(100);
            super._transfer(from, address(this), buyTaxAmount);
            amount = amount.sub(buyTaxAmount);
        }
        uint256 amount2 = amount;
        uint256 contractTokenBalance = balanceOf(address(this));
        bool swapAmountOk = contractTokenBalance >= swapTokensAmount;

        if (
            swapAmountOk &&
            swapLiquify &&
            !swapping &&
            from != owner() &&
            !automatedMarketMakerPairs[from]
        ) {
            swapContractTokens();
        }

        if (
            from != owner() &&
            to != uniswapV2Pair &&
            to != address(uniswapV2Router) &&
            to != address(this) &&
            from != address(this)
        ) {
            require(tradingOpen, "Trading not yet enabled.");

            if (
                to != marketingWallet &&
                to != distributionPool &&
                to != devPool &&
                from != marketingWallet &&
                from != distributionPool &&
                from != devPool
            ) {
                uint256 walletBalance = balanceOf(address(to));
                require(
                    amount2.add(walletBalance) <= maxTx.mul(1e18),
                    "wallet limit."
                );
            }
        }
        super._transfer(from, to, amount2);
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);

        uint256 initialBalance = address(this).balance;

        swapTokensForEth(half);

        uint256 newBalance = address(this).balance.sub(initialBalance);

        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            distributionPool,
            block.timestamp
        );
    }

    function swapContractTokens() private {
        swapping = true;
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 fdTokens = contractTokenBalance.mul(futurFee).div(100);
        uint256 devTokens = fdTokens.mul(devShare).div(100);
        uint256 mktTokens = fdTokens.sub(devTokens);

        uint256 rewardsPoolTokens = contractTokenBalance.mul(rewardsFee).div(
            100
        );

        super._transfer(
            address(this),
            distributionPool,
            rewardsPoolTokens
        );

        uint256 swapTokens = contractTokenBalance.mul(liquidityPoolFee).div(
            100
        );

        swapAndLiquify(swapTokens);

        swapTokensForEth(balanceOf(address(this)));
        uint256 totalTaxTokens = devTokens
            .add(mktTokens);

        uint256 ETHBalance = address(this).balance;

        bool success;

        (success, ) =  devPool.call{value: ETHBalance.mul(devTokens).div(totalTaxTokens)}("");
        
        (success, ) =  marketingWallet.call{value: (address(this)).balance}("");


        swapping = false;
    }

    function createNodeWithTokens(string memory _name, uint256 tier) public {
        require(
            bytes(_name).length > 3 && bytes(_name).length < 32,
            "NODE CREATION: NAME SIZE INVALID"
        );
        address sender = _msgSender();
        require(
            sender != address(0),
            "NODE CREATION:  creation from the zero address"
        );
        require(
            sender != distributionPool,
            "NODE CREATION: futur, dev and rewardsPool cannot create node"
        );

        uint256 nodePrice = nodeManager.getNodePrice(tier);
        require(
            balanceOf(sender) >= nodePrice.mul(1e18),
            "NODE CREATION: Balance too low for creation. Try lower tier."
        );

        super._transfer(sender, distributionPool, nodePrice.mul(1e18));
        nodeManager.createNode(sender, _name, tier);
    }

    function createNodeWithRewards(
        uint256 blocktime,
        string memory _name,
        uint256 tier
    ) public {
        require(
            bytes(_name).length > 3 && bytes(_name).length < 32,
            "NODE CREATION: NAME SIZE INVALID"
        );
        address sender = _msgSender();
        require(
            sender != address(0),
            "NODE CREATION:  creation from the zero address"
        );
        require(
            sender != distributionPool,
            "NODE CREATION: rewardsPool cannot create node"
        );
        uint256 nodePrice = nodeManager.getNodePrice(tier);
        uint256 rewardOf = nodeManager.getNodeReward(sender, blocktime);
        require(
            rewardOf >= nodePrice.mul(1e18),
            "NODE CREATION: Reward Balance too low for creation."
        );
        nodeManager.borrowRewards(
            sender,
            blocktime,
            nodeManager.getNodePrice(tier).mul(1e18)
        );
        nodeManager.createNode(sender, _name, tier);
    }

    function upgradeNode(uint256 blocktime) public {
        address sender = _msgSender();
        require(sender != address(0), "Zero address not permitted");
        require(sender != distributionPool, "Cannot upgrade nodes");
        uint256 currentTier = nodeManager.getNodeTier(sender, blocktime);
        require(currentTier < 4, "Your Node is already at max level");
        uint256 nextTier = currentTier.add(1);
        uint256 currentPrice = nodeManager.getNodePrice(currentTier);
        uint256 newPrice = nodeManager.getNodePrice(nextTier);
        uint256 priceDiff = (newPrice.sub(currentPrice)).mul(1e18);
        uint256 rewardOf = nodeManager.getNodeReward(sender, blocktime);
        if (rewardOf > priceDiff) {
            upgradeNodeCashout(sender, blocktime, rewardOf.sub(priceDiff));
            nodeManager.cashoutNodeReward(sender, blocktime);
        } else if (rewardOf < priceDiff) {
            upgradeNodeAddOn(sender, blocktime, priceDiff.sub(rewardOf));
            nodeManager.cashoutNodeReward(sender, blocktime);
        }
    }

    function upgradeNodeCashout(
        address account,
        uint256 blocktime,
        uint256 cashOutAmount
    ) internal {
        uint256 taxAmount = nodeManager.getNodeFee(
            account,
            blocktime,
            cashOutAmount
        );
        super._transfer(
            distributionPool,
            account,
            cashOutAmount.sub(taxAmount)
        );
        nodeManager.upgradeNode(account, blocktime);
    }

    function upgradeNodeAddOn(
        address account,
        uint256 blocktime,
        uint256 AddAmount
    ) internal {
        super._transfer(account, distributionPool, AddAmount);
        nodeManager.upgradeNode(account, blocktime);
    }

    function setGrowMultiplier(uint256 newVal) external onlyOwner {
        growMultiplier = newVal;
    }

    function growAlien(uint256 _tokenId) external {
        address sender = _msgSender();
        uint256 artifLevel = aliens.getAlienLevel(_tokenId);
        uint256 growPrice = artifLevel.mul(growMultiplier);
        require(
            balanceOf(sender) > growPrice,
            "Not enough ELEMENTS to grow your Alien"
        );
        super._transfer(sender, distributionPool, growPrice);
        aliens.growAlien(_tokenId);
    }

    function cashoutReward(uint256 blocktime) public {
        address sender = _msgSender();
        require(sender != address(0), "CSHT:  can't from the zero address");
        require(
            sender != marketingWallet && sender != distributionPool,
            "CSHT: futur and rewardsPool cannot cashout rewards"
        );
        uint256 rewardAmount = nodeManager.getNodeReward(sender, blocktime);
        require(
            rewardAmount > 0,
            "CSHT: You don't have enough reward to cash out"
        );

        uint256 taxAmount = nodeManager.getNodeFee(
            sender,
            blocktime,
            rewardAmount
        );
        super._transfer(distributionPool, sender, rewardAmount.sub(taxAmount));
        nodeManager.cashoutNodeReward(sender, blocktime);
    }

    function cashoutAll() public {
        address sender = _msgSender();
        require(sender != address(0), "ELEMENTS:  creation from the zero address");
        require(
            sender != marketingWallet && sender != distributionPool,
            "ELEMENTS: futur and rewardsPool cannot cashout rewards"
        );
        uint256[2] memory rewardTax = nodeManager.getAllNodesRewards(sender);
        uint256 rewardAmount = rewardTax[0];
        require(
            rewardAmount > 0,
            "ELEMENTS: You don't have enough reward to cash out"
        );
        super._transfer(distributionPool, sender, rewardAmount);
        nodeManager.cashoutAllNodesRewards(sender);
    }

    function rescueFunds(uint amount) public onlyOwner {
        if (amount > address(this).balance) amount = address(this).balance;
        payable(owner()).transfer(amount);
    }

    function changeSwapLiquify(bool newVal) public onlyOwner {
        swapLiquify = newVal;
    }

    function getNodeNumberOf(address account) public view returns (uint256) {
        return nodeManager.getNodeNumberOf(account);
    }

    function getRewardAmountOf(
        address account
    ) public view onlyOwner returns (uint256[2] memory) {
        return nodeManager.getAllNodesRewards(account);
    }

    function getRewardAmount() public view returns (uint256[2] memory) {
        require(_msgSender() != address(0), "SENDER CAN'T BE ZERO");
        require(nodeManager.isNodeOwner(_msgSender()), "NO NODE OWNER");
        return nodeManager.getAllNodesRewards(_msgSender());
    }

    function updateTiersRewards(uint256[] memory newVal) external onlyOwner {
        require(newVal.length == 5, "Wrong length");
        nodeManager.updateTiersRewards(newVal);
    }

    function getNodesNames() public view returns (string memory) {
        require(_msgSender() != address(0), "SENDER CAN'T BE ZERO");
        require(nodeManager.isNodeOwner(_msgSender()), "NO NODE OWNER");
        return nodeManager.getNodesNames(_msgSender());
    }

    function getNodesCreatime() public view returns (string memory) {
        require(_msgSender() != address(0), "SENDER CAN'T BE ZERO");
        require(nodeManager.isNodeOwner(_msgSender()), "NO NODE OWNER");
        return nodeManager.getNodesCreationTime(_msgSender());
    }

    function getNodesRewards() public view returns (string memory) {
        require(_msgSender() != address(0), "SENDER CAN'T BE ZERO");
        require(nodeManager.isNodeOwner(_msgSender()), "NO NODE OWNER");
        return nodeManager.getNodesRewards(_msgSender());
    }

    function getNodesLastClaims() public view returns (string memory) {
        require(_msgSender() != address(0), "SENDER CAN'T BE ZERO");
        require(nodeManager.isNodeOwner(_msgSender()), "NO NODE OWNER");
        return nodeManager.getNodesLastClaimTime(_msgSender());
    }

    function getTotalStakedReward() public view returns (uint256) {
        return nodeManager.totalStaked();
    }

    function getTotalCreatedNodes() public view returns (uint256) {
        return nodeManager.totalNodesCreated();
    }

    function openTrading() external onlyOwner {
        require(!tradingOpen, "trading is already open");
        tradingOpen = true;
    }

    function updateMaxTxAmount(uint256 newVal) public onlyOwner {
        maxTx = newVal;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","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":"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":"tokensIntoLiqudity","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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"aliens","outputs":[{"internalType":"contract IAliens","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cashoutAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocktime","type":"uint256"}],"name":"cashoutReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newVal","type":"bool"}],"name":"changeSwapLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocktime","type":"uint256"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"createNodeWithRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"createNodeWithTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"devPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributionPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"futurFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getNodeNumberOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesCreatime","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesLastClaims","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesNames","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesRewards","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardAmount","outputs":[{"internalType":"uint256[2]","name":"","type":"uint256[2]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getRewardAmountOf","outputs":[{"internalType":"uint256[2]","name":"","type":"uint256[2]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalCreatedNodes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalStakedReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"growAlien","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"growMultiplier","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":"liquidityPoolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuy","type":"uint256"},{"internalType":"uint256","name":"newSell","type":"uint256"}],"name":"lowerFeesOnLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nodeManager","outputs":[{"internalType":"contract INodeManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"aliensAddress","type":"address"}],"name":"setAliens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"setGrowMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nodeManagement","type":"address"}],"name":"setNodeManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAmount","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wall","type":"address"}],"name":"updateDevWall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityPoolFee","type":"uint256"},{"internalType":"uint256","name":"_futurFee","type":"uint256"}],"name":"updateFeeSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wall","type":"address"}],"name":"updateFuturWall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wall","type":"address"}],"name":"updateRewardsWall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateSwapTokensAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"newVal","type":"uint256[]"}],"name":"updateTiersRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocktime","type":"uint256"}],"name":"upgradeNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600d80546001600160a01b03191661dead1790556023601155603760125560196013556014805461ffff1916610100179055678ac7230489e800006016556017805460ff191690556101776018553480156200005f57600080fd5b506040518060400160405280600d81526020016c283937b532b1ba1027b934b7b760991b8152506040518060400160405280600381526020016227a92760e91b8152508160039081620000b391906200066a565b506004620000c282826200066a565b505050620000df620000d96200038f60201b60201c565b62000393565b600a80546001600160a01b0319908116732af5dff2ff0b71816e9e552a4e8ebe807016c2c017909155600b80548216735a45348cbdde5d073dab1a2d30f695f21faadffc179055600c805490911633179055737a250d5630b4cf539739df2c5dacb4c659f2488d62000155565b60405180910390fd5b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c1919062000736565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000235919062000736565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000283573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a9919062000736565b600880546001600160a01b038086166001600160a01b03199283161790925560098054928416929091169190911790559050620002e8816001620003e5565b60596010556001600e55600a600f556200030d33693f870857a3e0e3800000620004dc565b600254693f870857a3e0e380000014620003795760405162461bcd60e51b815260206004820152602660248201527f434f4e5354523a20746f74616c537570706c79206d75737420657175616c2033604482015265030302c3030360d41b60648201526084016200014c565b505068056bc75e2d631000006015555062000790565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526019602052604090205481151560ff909116151503620004885760405162461bcd60e51b815260206004820152604260248201527f454c454d454e54533a204175746f6d61746564206d61726b6574206d616b657260448201527f207061697220697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a4016200014c565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038216620005345760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200014c565b806002600082825462000548919062000768565b90915550506001600160a01b038216600090815260208190526040812080548392906200057790849062000768565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005f157607f821691505b6020821081036200061257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005c157600081815260208120601f850160051c81016020861015620006415750805b601f850160051c820191505b8181101562000662578281556001016200064d565b505050505050565b81516001600160401b03811115620006865762000686620005c6565b6200069e81620006978454620005dc565b8462000618565b602080601f831160018114620006d65760008415620006bd5750858301515b600019600386901b1c1916600185901b17855562000662565b600085815260208120601f198616915b828110156200070757888601518255948401946001909101908401620006e6565b5085821015620007265787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200074957600080fd5b81516001600160a01b03811681146200076157600080fd5b9392505050565b808201808211156200078a57634e487b7160e01b600052601160045260246000fd5b92915050565b61458680620007a06000396000f3fe6080604052600436106103bc5760003560e01c806365bfe430116101f2578063a9059cbb1161010d578063c5ca7d6d116100a0578063ee1afdbf1161006f578063ee1afdbf14610ae1578063f2fde38b14610af6578063f74c993414610b16578063fb0a749414610b3657600080fd5b8063c5ca7d6d14610a50578063c9567bf914610a70578063cc1776d314610a85578063dd62ed3e14610a9b57600080fd5b8063b62496f5116100dc578063b62496f5146109cb578063b96392c1146109fb578063bbc6799814610a1b578063bdf24a5314610a3b57600080fd5b8063a9059cbb14610955578063ab57476114610975578063af1531821461098b578063b5838a27146109ab57600080fd5b80638da5cb5b116101855780639a7a23d6116101545780639a7a23d6146108e05780639bb5cd3f14610900578063a0a8fe6514610920578063a457c2d71461093557600080fd5b80638da5cb5b146108775780639349c47d1461089557806395d89b41146108b557806399b08a3c146108ca57600080fd5b8063719803b4116101c1578063719803b4146107f757806375f0a874146108175780637d69f2f41461083757806385141a771461085757600080fd5b806365bfe430146107825780636770474b146107a257806370a08231146107c2578063715018a6146107e257600080fd5b806339509351116102e257806354f12f1f116102755780635b0d4674116102445780635b0d4674146107175780635f1c31821461072c5780636256d1811461074257806365b8dbc01461076257600080fd5b806354f12f1f146106a15780635770fa8f146106b7578063581f95a0146106d7578063583bd7a6146106f757600080fd5b806348e5642b116102b157806348e5642b1461064157806349bd5a5e146106565780634f7041a514610676578063545579731461068c57600080fd5b806339509351146105c15780633dadb1bd146105e15780633f84568914610601578063436d33401461062157600080fd5b8063138a634a1161035a57806323b872dd1161032957806323b872dd1461054f5780632594531d1461056f5780632bb14e1d1461058f578063313ce567146105a557600080fd5b8063138a634a146104db5780631694505e146104f057806318160ddd14610510578063217ff5d81461052f57600080fd5b8063095ea7b311610396578063095ea7b31461044957806309a69f57146104795780630c08f3001461049b57806312185a39146104bb57600080fd5b806301360e02146103c85780630605c4791461040557806306fdde031461042757600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506007546103e8906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041157600080fd5b50610425610420366004613c9e565b610b56565b005b34801561043357600080fd5b5061043c610b8e565b6040516103fc9190613d07565b34801561045557600080fd5b50610469610464366004613d2f565b610c20565b60405190151581526020016103fc565b34801561048557600080fd5b5061048e610c37565b6040516103fc9190613d5b565b3480156104a757600080fd5b506104256104b6366004613d8c565b610d70565b3480156104c757600080fd5b506104256104d6366004613c9e565b610dbc565b3480156104e757600080fd5b5061043c610e3c565b3480156104fc57600080fd5b506008546103e8906001600160a01b031681565b34801561051c57600080fd5b506002545b6040519081526020016103fc565b34801561053b57600080fd5b5061042561054a366004613d8c565b610f70565b34801561055b57600080fd5b5061046961056a366004613da9565b610fbc565b34801561057b57600080fd5b5061042561058a366004613c9e565b611066565b34801561059b57600080fd5b50610521600e5481565b3480156105b157600080fd5b50604051601281526020016103fc565b3480156105cd57600080fd5b506104696105dc366004613d2f565b6110d9565b3480156105ed57600080fd5b506104256105fc366004613eaf565b611115565b34801561060d57600080fd5b5061042561061c366004613eff565b6114ce565b34801561062d57600080fd5b5061042561063c366004613c9e565b611569565b34801561064d57600080fd5b506105216115e9565b34801561066257600080fd5b506009546103e8906001600160a01b031681565b34801561068257600080fd5b5061052160115481565b34801561069857600080fd5b50610425611657565b3480156106ad57600080fd5b50610521600f5481565b3480156106c357600080fd5b506104256106d2366004613f2b565b6118a5565b3480156106e357600080fd5b506104256106f2366004613fd1565b611974565b34801561070357600080fd5b50610425610712366004614001565b611a37565b34801561072357600080fd5b5061043c611a7b565b34801561073857600080fd5b5061052160155481565b34801561074e57600080fd5b5061042561075d366004613c9e565b611b47565b34801561076e57600080fd5b5061042561077d366004613d8c565b611b76565b34801561078e57600080fd5b5061042561079d366004613c9e565b611dea565b3480156107ae57600080fd5b506104256107bd366004613c9e565b6120c4565b3480156107ce57600080fd5b506105216107dd366004613d8c565b6120f3565b3480156107ee57600080fd5b5061042561210e565b34801561080357600080fd5b50610425610812366004613c9e565b612144565b34801561082357600080fd5b50600a546103e8906001600160a01b031681565b34801561084357600080fd5b50610425610852366004613c9e565b612556565b34801561086357600080fd5b50600d546103e8906001600160a01b031681565b34801561088357600080fd5b506005546001600160a01b03166103e8565b3480156108a157600080fd5b506104256108b0366004613d8c565b612696565b3480156108c157600080fd5b5061043c6126e2565b3480156108d657600080fd5b5061052160165481565b3480156108ec57600080fd5b506104256108fb36600461401e565b6126f1565b34801561090c57600080fd5b506006546103e8906001600160a01b031681565b34801561092c57600080fd5b506105216127b9565b34801561094157600080fd5b50610469610950366004613d2f565b612803565b34801561096157600080fd5b50610469610970366004613d2f565b61289c565b34801561098157600080fd5b5061052160105481565b34801561099757600080fd5b506104256109a6366004613d8c565b6128a9565b3480156109b757600080fd5b50600c546103e8906001600160a01b031681565b3480156109d757600080fd5b506104696109e6366004613d8c565b60196020526000908152604090205460ff1681565b348015610a0757600080fd5b5061048e610a16366004613d8c565b6128f5565b348015610a2757600080fd5b50610425610a36366004614057565b612994565b348015610a4757600080fd5b5061043c612beb565b348015610a5c57600080fd5b50600b546103e8906001600160a01b031681565b348015610a7c57600080fd5b50610425612cb7565b348015610a9157600080fd5b5061052160125481565b348015610aa757600080fd5b50610521610ab636600461409c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aed57600080fd5b5061043c612d43565b348015610b0257600080fd5b50610425610b11366004613d8c565b612e0f565b348015610b2257600080fd5b50610521610b31366004613d8c565b612eaa565b348015610b4257600080fd5b50610425610b51366004613d8c565b612f19565b6005546001600160a01b03163314610b895760405162461bcd60e51b8152600401610b80906140ca565b60405180910390fd5b601655565b606060038054610b9d906140ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc9906140ff565b8015610c165780601f10610beb57610100808354040283529160200191610c16565b820191906000526020600020905b815481529060010190602001808311610bf957829003601f168201915b5050505050905090565b6000610c2d338484612f65565b5060015b92915050565b610c3f613c80565b33610c5c5760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd69190614167565b610cf25760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b031663956de887336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016040805180830381865afa158015610d47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6b91906141ab565b905090565b6005546001600160a01b03163314610d9a5760405162461bcd60e51b8152600401610b80906140ca565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610de65760405162461bcd60e51b8152600401610b80906140ca565b6006811115610e375760405162461bcd60e51b815260206004820152601e60248201527f5441583a2073656c6c207461782063616e6e6f742065786365656420362500006044820152606401610b80565b601255565b606033610e5b5760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed59190614167565b610ef15760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b031663ebb3c67a335b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381865afa158015610f48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d6b919081019061422b565b6005546001600160a01b03163314610f9a5760405162461bcd60e51b8152600401610b80906140ca565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000610fc9848484613089565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561104e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b80565b61105b8533858403612f65565b506001949350505050565b6005546001600160a01b031633146110905760405162461bcd60e51b8152600401610b80906140ca565b4781111561109b5750475b6005546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156110d5573d6000803e3d6000fd5b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c2d9185906111109086906142b8565b612f65565b60038251118015611127575060208251105b6111735760405162461bcd60e51b815260206004820181905260248201527f4e4f4445204352454154494f4e3a204e414d452053495a4520494e56414c49446044820152606401610b80565b33806111915760405162461bcd60e51b8152600401610b80906142cb565b600b546001600160a01b03908116908216036112055760405162461bcd60e51b815260206004820152602d60248201527f4e4f4445204352454154494f4e3a2072657761726473506f6f6c2063616e6e6f60448201526c7420637265617465206e6f646560981b6064820152608401610b80565b600654604051630c2b9f1760e31b8152600481018490526000916001600160a01b03169063615cf8b890602401602060405180830381865afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190614319565b60065460405163939c6bfb60e01b81526001600160a01b038581166004830152602482018990529293506000929091169063939c6bfb90604401602060405180830381865afa1580156112ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ee9190614319565b905061130282670de0b6b3a7640000613450565b81101561136d5760405162461bcd60e51b815260206004820152603360248201527f4e4f4445204352454154494f4e3a205265776172642042616c616e636520746f60448201527237903637bb903337b91031b932b0ba34b7b71760691b6064820152608401610b80565b600654604051630c2b9f1760e31b8152600481018690526001600160a01b039091169063d40614a990859089906113fa90670de0b6b3a764000090869063615cf8b890602401602060405180830381865afa1580156113d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f49190614319565b90613450565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091526044820152606401600060405180830381600087803b15801561144857600080fd5b505af115801561145c573d6000803e3d6000fd5b5050600654604051634810cb9960e11b81526001600160a01b0390911692506390219732915061149490869089908990600401614332565b600060405180830381600087803b1580156114ae57600080fd5b505af11580156114c2573d6000803e3d6000fd5b50505050505050505050565b6005546001600160a01b031633146114f85760405162461bcd60e51b8152600401610b80906140ca565b61150c816115068585613463565b90613463565b60641461155b5760405162461bcd60e51b815260206004820152601760248201527f46656573206d7573742061646420757020746f203130300000000000000000006044820152606401610b80565b600e92909255600f55601055565b6005546001600160a01b031633146115935760405162461bcd60e51b8152600401610b80906140ca565b60068111156115e45760405162461bcd60e51b815260206004820152601d60248201527f5441583a20627579207461782063616e6e6f74206578636565642036250000006044820152606401610b80565b601155565b600654604080516340bd8e6960e11b815290516000926001600160a01b03169163817b1cd29160048083019260209291908290030181865afa158015611633573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6b9190614319565b33806116b75760405162461bcd60e51b815260206004820152602960248201527f454c454d454e54533a20206372656174696f6e2066726f6d20746865207a65726044820152686f206164647265737360b81b6064820152608401610b80565b600a546001600160a01b038281169116148015906116e35750600b546001600160a01b03828116911614155b61174e5760405162461bcd60e51b815260206004820152603660248201527f454c454d454e54533a20667574757220616e642072657761726473506f6f6c2060448201527563616e6e6f7420636173686f7574207265776172647360501b6064820152608401610b80565b60065460405163956de88760e01b81526001600160a01b038381166004830152600092169063956de887906024016040805180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc91906141ab565b8051909150806118295760405162461bcd60e51b815260206004820152603260248201527f454c454d454e54533a20596f7520646f6e2774206861766520656e6f756768206044820152711c995dd85c99081d1bc818d85cda081bdd5d60721b6064820152608401610b80565b600b54611840906001600160a01b0316848361346f565b60065460405163d3b0dba960e01b81526001600160a01b0385811660048301529091169063d3b0dba9906024015b600060405180830381600087803b15801561188857600080fd5b505af115801561189c573d6000803e3d6000fd5b50505050505050565b6005546001600160a01b031633146118cf5760405162461bcd60e51b8152600401610b80906140ca565b805160051461190f5760405162461bcd60e51b815260206004820152600c60248201526b0aee4dedcce40d8cadccee8d60a31b6044820152606401610b80565b600654604051635770fa8f60e01b81526001600160a01b0390911690635770fa8f9061193f90849060040161437c565b600060405180830381600087803b15801561195957600080fd5b505af115801561196d573d6000803e3d6000fd5b5050505050565b6005546001600160a01b0316331461199e5760405162461bcd60e51b8152600401610b80906140ca565b6011548211156119e55760405162461bcd60e51b81526020600482015260126024820152712a30bc32b99037b7363c9033b7903237bbb760711b6044820152606401610b80565b601254811115611a2c5760405162461bcd60e51b81526020600482015260126024820152712a30bc32b99037b7363c9033b7903237bbb760711b6044820152606401610b80565b601191909155601255565b6005546001600160a01b03163314611a615760405162461bcd60e51b8152600401610b80906140ca565b601480549115156101000261ff0019909216919091179055565b606033611a9a5760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b149190614167565b611b305760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b031663cc66ccea33610f04565b6005546001600160a01b03163314611b715760405162461bcd60e51b8152600401610b80906140ca565b601855565b6005546001600160a01b03163314611ba05760405162461bcd60e51b8152600401610b80906140ca565b6008546001600160a01b0390811690821603611c145760405162461bcd60e51b815260206004820152602d60248201527f454c454d454e54533a2054686520726f7574657220616c72656164792068617360448201526c2074686174206164647265737360981b6064820152608401610b80565b6008546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600880546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa158015611cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccf91906143c0565b6001600160a01b031663c9c6539630600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5591906143c0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611da2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc691906143c0565b600980546001600160a01b0319166001600160a01b03929092169190911790555050565b3380611e435760405162461bcd60e51b815260206004820152602260248201527f435348543a202063616e27742066726f6d20746865207a65726f206164647265604482015261737360f01b6064820152608401610b80565b600a546001600160a01b03828116911614801590611e6f5750600b546001600160a01b03828116911614155b611ed65760405162461bcd60e51b815260206004820152603260248201527f435348543a20667574757220616e642072657761726473506f6f6c2063616e6e6044820152716f7420636173686f7574207265776172647360701b6064820152608401610b80565b60065460405163939c6bfb60e01b81526001600160a01b03838116600483015260248201859052600092169063939c6bfb90604401602060405180830381865afa158015611f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4c9190614319565b905060008111611fb55760405162461bcd60e51b815260206004820152602e60248201527f435348543a20596f7520646f6e2774206861766520656e6f756768207265776160448201526d1c99081d1bc818d85cda081bdd5d60921b6064820152608401610b80565b60065460405163b769ec5560e01b81526001600160a01b0384811660048301526024820186905260448201849052600092169063b769ec55906064016020604051808303816000875af1158015612010573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120349190614319565b600b54909150612057906001600160a01b03168461205285856135c4565b61346f565b600654604051633bcf707b60e01b81526001600160a01b0385811660048301526024820187905290911690633bcf707b906044015b600060405180830381600087803b1580156120a657600080fd5b505af11580156120ba573d6000803e3d6000fd5b5050505050505050565b6005546001600160a01b031633146120ee5760405162461bcd60e51b8152600401610b80906140ca565b601555565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146121385760405162461bcd60e51b8152600401610b80906140ca565b61214260006135d0565b565b33806121925760405162461bcd60e51b815260206004820152601a60248201527f5a65726f2061646472657373206e6f74207065726d69747465640000000000006044820152606401610b80565b600b546001600160a01b03908116908216036121e75760405162461bcd60e51b815260206004820152601460248201527343616e6e6f742075706772616465206e6f64657360601b6044820152606401610b80565b60065460405163a3078e6b60e01b81526001600160a01b03838116600483015260248201859052600092169063a3078e6b90604401602060405180830381865afa158015612239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225d9190614319565b9050600481106122b95760405162461bcd60e51b815260206004820152602160248201527f596f7572204e6f646520697320616c7265616479206174206d6178206c6576656044820152601b60fa1b6064820152608401610b80565b60006122c6826001613463565b600654604051630c2b9f1760e31b8152600481018590529192506000916001600160a01b039091169063615cf8b890602401602060405180830381865afa158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190614319565b600654604051630c2b9f1760e31b8152600481018590529192506000916001600160a01b039091169063615cf8b890602401602060405180830381865afa158015612388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ac9190614319565b905060006123c6670de0b6b3a76400006113f484866135c4565b60065460405163939c6bfb60e01b81526001600160a01b038981166004830152602482018b90529293506000929091169063939c6bfb90604401602060405180830381865afa15801561241d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124419190614319565b9050818111156124ca5761245f878961245a84866135c4565b613622565b600654604051633bcf707b60e01b81526001600160a01b038981166004830152602482018b905290911690633bcf707b90604401600060405180830381600087803b1580156124ad57600080fd5b505af11580156124c1573d6000803e3d6000fd5b505050506120ba565b818110156120ba576124e687896124e185856135c4565b6136f8565b600654604051633bcf707b60e01b81526001600160a01b038981166004830152602482018b905290911690633bcf707b90604401600060405180830381600087803b15801561253457600080fd5b505af1158015612548573d6000803e3d6000fd5b505050505050505050505050565b60003360075460405163e51862dd60e01b8152600481018590529192506000916001600160a01b039091169063e51862dd90602401602060405180830381865afa1580156125a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cc9190614319565b905060006125e56016548361345090919063ffffffff16565b9050806125f1846120f3565b1161264d5760405162461bcd60e51b815260206004820152602660248201527f4e6f7420656e6f75676820454c454d454e545320746f2067726f7720796f75726044820152651020b634b2b760d11b6064820152608401610b80565b600b546126659084906001600160a01b03168361346f565b600754604051631f5a7cbd60e21b8152600481018690526001600160a01b0390911690637d69f2f49060240161208c565b6005546001600160a01b031633146126c05760405162461bcd60e51b8152600401610b80906140ca565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610b9d906140ff565b6005546001600160a01b0316331461271b5760405162461bcd60e51b8152600401610b80906140ca565b6009546001600160a01b03908116908316036127af5760405162461bcd60e51b815260206004820152604760248201527f454c454d454e54533a205468652044455820706169722063616e6e6f7420626560448201527f2072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6064820152666572506169727360c81b608482015260a401610b80565b6110d58282613749565b6006546040805163b8527aef60e01b815290516000926001600160a01b03169163b8527aef9160048083019260209291908290030181865afa158015611633573d6000803e3d6000fd5b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156128855760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b80565b6128923385858403612f65565b5060019392505050565b6000610c2d338484613089565b6005546001600160a01b031633146128d35760405162461bcd60e51b8152600401610b80906140ca565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6128fd613c80565b6005546001600160a01b031633146129275760405162461bcd60e51b8152600401610b80906140ca565b60065460405163956de88760e01b81526001600160a01b0384811660048301529091169063956de887906024016040805180830381865afa158015612970573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3191906141ab565b600382511180156129a6575060208251105b6129f25760405162461bcd60e51b815260206004820181905260248201527f4e4f4445204352454154494f4e3a204e414d452053495a4520494e56414c49446044820152606401610b80565b3380612a105760405162461bcd60e51b8152600401610b80906142cb565b600b546001600160a01b0390811690821603612a945760405162461bcd60e51b815260206004820152603c60248201527f4e4f4445204352454154494f4e3a2066757475722c2064657620616e6420726560448201527f7761726473506f6f6c2063616e6e6f7420637265617465206e6f6465000000006064820152608401610b80565b600654604051630c2b9f1760e31b8152600481018490526000916001600160a01b03169063615cf8b890602401602060405180830381865afa158015612ade573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b029190614319565b9050612b1681670de0b6b3a7640000613450565b612b1f836120f3565b1015612b935760405162461bcd60e51b815260206004820152603c60248201527f4e4f4445204352454154494f4e3a2042616c616e636520746f6f206c6f77206660448201527f6f72206372656174696f6e2e20547279206c6f77657220746965722e000000006064820152608401610b80565b600b54612bb79083906001600160a01b031661205284670de0b6b3a7640000613450565b600654604051634810cb9960e11b81526001600160a01b039091169063902197329061208c90859088908890600401614332565b606033612c0a5760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c849190614167565b612ca05760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b0316639dab00f733610f04565b6005546001600160a01b03163314612ce15760405162461bcd60e51b8152600401610b80906140ca565b60175460ff1615612d345760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610b80565b6017805460ff19166001179055565b606033612d625760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddc9190614167565b612df85760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b031663b19197f733610f04565b6005546001600160a01b03163314612e395760405162461bcd60e51b8152600401610b80906140ca565b6001600160a01b038116612e9e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b80565b612ea7816135d0565b50565b600654604051633dd3264d60e21b81526001600160a01b038381166004830152600092169063f74c993490602401602060405180830381865afa158015612ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190614319565b6005546001600160a01b03163314612f435760405162461bcd60e51b8152600401610b80906140ca565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316612fc75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b80565b6001600160a01b0382166130285760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b80565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166130af5760405162461bcd60e51b8152600401610b80906143dd565b6001600160a01b0382166130d55760405162461bcd60e51b8152600401610b8090614422565b6001600160a01b03821660009081526019602052604090205460ff16801561311f57506001600160a01b038316301480159061311f57506005546001600160a01b03848116911614155b1561316557600061314660646131406012548561345090919063ffffffff16565b9061383e565b905061315384308361346f565b61315d82826135c4565b9150506131eb565b6001600160a01b03831660009081526019602052604090205460ff1680156131af57506001600160a01b03821630148015906131af57506005546001600160a01b03838116911614155b156131eb5760006131d060646131406011548561345090919063ffffffff16565b90506131dd84308361346f565b6131e782826135c4565b9150505b8060006131f7306120f3565b601554909150811080159081906132155750601454610100900460ff165b8015613224575060145460ff16155b801561323e57506005546001600160a01b03878116911614155b801561326357506001600160a01b03861660009081526019602052604090205460ff16155b156132705761327061384a565b6005546001600160a01b0387811691161480159061329c57506009546001600160a01b03868116911614155b80156132b657506008546001600160a01b03868116911614155b80156132cb57506001600160a01b0385163014155b80156132e057506001600160a01b0386163014155b1561343d5760175460ff166133375760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b80565b600a546001600160a01b038681169116148015906133635750600b546001600160a01b03868116911614155b801561337d5750600c546001600160a01b03868116911614155b80156133975750600a546001600160a01b03878116911614155b80156133b15750600b546001600160a01b03878116911614155b80156133cb5750600c546001600160a01b03878116911614155b1561343d5760006133db866120f3565b6018549091506133f390670de0b6b3a7640000613450565b6133fd8583613463565b111561343b5760405162461bcd60e51b815260206004820152600d60248201526c3bb0b63632ba103634b6b4ba1760991b6044820152606401610b80565b505b61344886868561346f565b505050505050565b600061345c8284614465565b9392505050565b600061345c82846142b8565b6001600160a01b0383166134955760405162461bcd60e51b8152600401610b80906143dd565b6001600160a01b0382166134bb5760405162461bcd60e51b8152600401610b8090614422565b6001600160a01b038316600090815260208190526040902054818110156135335760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b80565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061356a9084906142b8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135b691815260200190565b60405180910390a350505050565b600061345c828461447c565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60065460405163b769ec5560e01b81526001600160a01b0385811660048301526024820185905260448201849052600092169063b769ec55906064016020604051808303816000875af115801561367d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a19190614319565b600b549091506136bf906001600160a01b03168561205285856135c4565b60065460405163dd12698f60e01b81526001600160a01b038681166004830152602482018690529091169063dd12698f9060440161208c565b600b546137109084906001600160a01b03168361346f565b60065460405163dd12698f60e01b81526001600160a01b038581166004830152602482018590529091169063dd12698f9060440161186e565b6001600160a01b03821660009081526019602052604090205481151560ff9091161515036137ea5760405162461bcd60e51b815260206004820152604260248201527f454c454d454e54533a204175746f6d61746564206d61726b6574206d616b657260448201527f207061697220697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a401610b80565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600061345c828461448f565b6014805460ff191660011790556000613862306120f3565b9050600061388060646131406010548561345090919063ffffffff16565b9050600061389e60646131406013548561345090919063ffffffff16565b905060006138ac83836135c4565b905060006138ca6064613140600e548861345090919063ffffffff16565b600b549091506138e59030906001600160a01b03168361346f565b60006139016064613140600f548961345090919063ffffffff16565b905061390c816139fa565b61391d613918306120f3565b613a81565b60006139298585613463565b600c5490915047906000906001600160a01b031661394b84613140858b613450565b604051600081818185875af1925050503d8060008114613987576040519150601f19603f3d011682016040523d82523d6000602084013e61398c565b606091505b5050600a546040519192506001600160a01b031690303190600081818185875af1925050503d80600081146139dd576040519150601f19603f3d011682016040523d82523d6000602084013e6139e2565b606091505b50506014805460ff1916905550505050505050505050565b6000613a0782600261383e565b90506000613a1583836135c4565b905047613a2183613a81565b6000613a2d47836135c4565b9050613a398382613bd3565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613ab657613ab6614366565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b3391906143c0565b81600181518110613b4657613b46614366565b6001600160a01b039283166020918202929092010152600854613b6c9130911684612f65565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac94790613ba59085906000908690309042906004016144b1565b600060405180830381600087803b158015613bbf57600080fd5b505af1158015613448573d6000803e3d6000fd5b600854613beb9030906001600160a01b031684612f65565b600854600b5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613c5b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061196d9190614522565b60405180604001604052806002906020820280368337509192915050565b600060208284031215613cb057600080fd5b5035919050565b60005b83811015613cd2578181015183820152602001613cba565b50506000910152565b60008151808452613cf3816020860160208601613cb7565b601f01601f19169290920160200192915050565b60208152600061345c6020830184613cdb565b6001600160a01b0381168114612ea757600080fd5b60008060408385031215613d4257600080fd5b8235613d4d81613d1a565b946020939093013593505050565b60408101818360005b6002811015613d83578151835260209283019290910190600101613d64565b50505092915050565b600060208284031215613d9e57600080fd5b813561345c81613d1a565b600080600060608486031215613dbe57600080fd5b8335613dc981613d1a565b92506020840135613dd981613d1a565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613e2957613e29613dea565b604052919050565b600067ffffffffffffffff821115613e4b57613e4b613dea565b50601f01601f191660200190565b600082601f830112613e6a57600080fd5b8135613e7d613e7882613e31565b613e00565b818152846020838601011115613e9257600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215613ec457600080fd5b83359250602084013567ffffffffffffffff811115613ee257600080fd5b613eee86828701613e59565b925050604084013590509250925092565b600080600060608486031215613f1457600080fd5b505081359360208301359350604090920135919050565b60006020808385031215613f3e57600080fd5b823567ffffffffffffffff80821115613f5657600080fd5b818501915085601f830112613f6a57600080fd5b813581811115613f7c57613f7c613dea565b8060051b9150613f8d848301613e00565b8181529183018401918481019088841115613fa757600080fd5b938501935b83851015613fc557843582529385019390850190613fac565b98975050505050505050565b60008060408385031215613fe457600080fd5b50508035926020909101359150565b8015158114612ea757600080fd5b60006020828403121561401357600080fd5b813561345c81613ff3565b6000806040838503121561403157600080fd5b823561403c81613d1a565b9150602083013561404c81613ff3565b809150509250929050565b6000806040838503121561406a57600080fd5b823567ffffffffffffffff81111561408157600080fd5b61408d85828601613e59565b95602094909401359450505050565b600080604083850312156140af57600080fd5b82356140ba81613d1a565b9150602083013561404c81613d1a565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061411357607f821691505b60208210810361413357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526014908201527353454e4445522043414e2754204245205a45524f60601b604082015260600190565b60006020828403121561417957600080fd5b815161345c81613ff3565b6020808252600d908201526c2727902727a2229027aba722a960991b604082015260600190565b6000604082840312156141bd57600080fd5b82601f8301126141cc57600080fd5b6040516040810181811067ffffffffffffffff821117156141ef576141ef613dea565b806040525080604084018581111561420657600080fd5b845b81811015614220578051835260209283019201614208565b509195945050505050565b60006020828403121561423d57600080fd5b815167ffffffffffffffff81111561425457600080fd5b8201601f8101841361426557600080fd5b8051614273613e7882613e31565b81815285602083850101111561428857600080fd5b614299826020830160208601613cb7565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c3157610c316142a2565b6020808252602e908201527f4e4f4445204352454154494f4e3a20206372656174696f6e2066726f6d20746860408201526d65207a65726f206164647265737360901b606082015260800190565b60006020828403121561432b57600080fd5b5051919050565b6001600160a01b038416815260606020820181905260009061435690830185613cdb565b9050826040830152949350505050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156143b457835183529284019291840191600101614398565b50909695505050505050565b6000602082840312156143d257600080fd5b815161345c81613d1a565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610c3157610c316142a2565b81810381811115610c3157610c316142a2565b6000826144ac57634e487b7160e01b600052601260045260246000fd5b500490565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156145015784516001600160a01b0316835293830193918301916001016144dc565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561453757600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220196c9aa2616d071f00062df5ce807c0f16e48d53d178082192525385c4f41f1964736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c806365bfe430116101f2578063a9059cbb1161010d578063c5ca7d6d116100a0578063ee1afdbf1161006f578063ee1afdbf14610ae1578063f2fde38b14610af6578063f74c993414610b16578063fb0a749414610b3657600080fd5b8063c5ca7d6d14610a50578063c9567bf914610a70578063cc1776d314610a85578063dd62ed3e14610a9b57600080fd5b8063b62496f5116100dc578063b62496f5146109cb578063b96392c1146109fb578063bbc6799814610a1b578063bdf24a5314610a3b57600080fd5b8063a9059cbb14610955578063ab57476114610975578063af1531821461098b578063b5838a27146109ab57600080fd5b80638da5cb5b116101855780639a7a23d6116101545780639a7a23d6146108e05780639bb5cd3f14610900578063a0a8fe6514610920578063a457c2d71461093557600080fd5b80638da5cb5b146108775780639349c47d1461089557806395d89b41146108b557806399b08a3c146108ca57600080fd5b8063719803b4116101c1578063719803b4146107f757806375f0a874146108175780637d69f2f41461083757806385141a771461085757600080fd5b806365bfe430146107825780636770474b146107a257806370a08231146107c2578063715018a6146107e257600080fd5b806339509351116102e257806354f12f1f116102755780635b0d4674116102445780635b0d4674146107175780635f1c31821461072c5780636256d1811461074257806365b8dbc01461076257600080fd5b806354f12f1f146106a15780635770fa8f146106b7578063581f95a0146106d7578063583bd7a6146106f757600080fd5b806348e5642b116102b157806348e5642b1461064157806349bd5a5e146106565780634f7041a514610676578063545579731461068c57600080fd5b806339509351146105c15780633dadb1bd146105e15780633f84568914610601578063436d33401461062157600080fd5b8063138a634a1161035a57806323b872dd1161032957806323b872dd1461054f5780632594531d1461056f5780632bb14e1d1461058f578063313ce567146105a557600080fd5b8063138a634a146104db5780631694505e146104f057806318160ddd14610510578063217ff5d81461052f57600080fd5b8063095ea7b311610396578063095ea7b31461044957806309a69f57146104795780630c08f3001461049b57806312185a39146104bb57600080fd5b806301360e02146103c85780630605c4791461040557806306fdde031461042757600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506007546103e8906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041157600080fd5b50610425610420366004613c9e565b610b56565b005b34801561043357600080fd5b5061043c610b8e565b6040516103fc9190613d07565b34801561045557600080fd5b50610469610464366004613d2f565b610c20565b60405190151581526020016103fc565b34801561048557600080fd5b5061048e610c37565b6040516103fc9190613d5b565b3480156104a757600080fd5b506104256104b6366004613d8c565b610d70565b3480156104c757600080fd5b506104256104d6366004613c9e565b610dbc565b3480156104e757600080fd5b5061043c610e3c565b3480156104fc57600080fd5b506008546103e8906001600160a01b031681565b34801561051c57600080fd5b506002545b6040519081526020016103fc565b34801561053b57600080fd5b5061042561054a366004613d8c565b610f70565b34801561055b57600080fd5b5061046961056a366004613da9565b610fbc565b34801561057b57600080fd5b5061042561058a366004613c9e565b611066565b34801561059b57600080fd5b50610521600e5481565b3480156105b157600080fd5b50604051601281526020016103fc565b3480156105cd57600080fd5b506104696105dc366004613d2f565b6110d9565b3480156105ed57600080fd5b506104256105fc366004613eaf565b611115565b34801561060d57600080fd5b5061042561061c366004613eff565b6114ce565b34801561062d57600080fd5b5061042561063c366004613c9e565b611569565b34801561064d57600080fd5b506105216115e9565b34801561066257600080fd5b506009546103e8906001600160a01b031681565b34801561068257600080fd5b5061052160115481565b34801561069857600080fd5b50610425611657565b3480156106ad57600080fd5b50610521600f5481565b3480156106c357600080fd5b506104256106d2366004613f2b565b6118a5565b3480156106e357600080fd5b506104256106f2366004613fd1565b611974565b34801561070357600080fd5b50610425610712366004614001565b611a37565b34801561072357600080fd5b5061043c611a7b565b34801561073857600080fd5b5061052160155481565b34801561074e57600080fd5b5061042561075d366004613c9e565b611b47565b34801561076e57600080fd5b5061042561077d366004613d8c565b611b76565b34801561078e57600080fd5b5061042561079d366004613c9e565b611dea565b3480156107ae57600080fd5b506104256107bd366004613c9e565b6120c4565b3480156107ce57600080fd5b506105216107dd366004613d8c565b6120f3565b3480156107ee57600080fd5b5061042561210e565b34801561080357600080fd5b50610425610812366004613c9e565b612144565b34801561082357600080fd5b50600a546103e8906001600160a01b031681565b34801561084357600080fd5b50610425610852366004613c9e565b612556565b34801561086357600080fd5b50600d546103e8906001600160a01b031681565b34801561088357600080fd5b506005546001600160a01b03166103e8565b3480156108a157600080fd5b506104256108b0366004613d8c565b612696565b3480156108c157600080fd5b5061043c6126e2565b3480156108d657600080fd5b5061052160165481565b3480156108ec57600080fd5b506104256108fb36600461401e565b6126f1565b34801561090c57600080fd5b506006546103e8906001600160a01b031681565b34801561092c57600080fd5b506105216127b9565b34801561094157600080fd5b50610469610950366004613d2f565b612803565b34801561096157600080fd5b50610469610970366004613d2f565b61289c565b34801561098157600080fd5b5061052160105481565b34801561099757600080fd5b506104256109a6366004613d8c565b6128a9565b3480156109b757600080fd5b50600c546103e8906001600160a01b031681565b3480156109d757600080fd5b506104696109e6366004613d8c565b60196020526000908152604090205460ff1681565b348015610a0757600080fd5b5061048e610a16366004613d8c565b6128f5565b348015610a2757600080fd5b50610425610a36366004614057565b612994565b348015610a4757600080fd5b5061043c612beb565b348015610a5c57600080fd5b50600b546103e8906001600160a01b031681565b348015610a7c57600080fd5b50610425612cb7565b348015610a9157600080fd5b5061052160125481565b348015610aa757600080fd5b50610521610ab636600461409c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aed57600080fd5b5061043c612d43565b348015610b0257600080fd5b50610425610b11366004613d8c565b612e0f565b348015610b2257600080fd5b50610521610b31366004613d8c565b612eaa565b348015610b4257600080fd5b50610425610b51366004613d8c565b612f19565b6005546001600160a01b03163314610b895760405162461bcd60e51b8152600401610b80906140ca565b60405180910390fd5b601655565b606060038054610b9d906140ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc9906140ff565b8015610c165780601f10610beb57610100808354040283529160200191610c16565b820191906000526020600020905b815481529060010190602001808311610bf957829003601f168201915b5050505050905090565b6000610c2d338484612f65565b5060015b92915050565b610c3f613c80565b33610c5c5760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd69190614167565b610cf25760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b031663956de887336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016040805180830381865afa158015610d47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6b91906141ab565b905090565b6005546001600160a01b03163314610d9a5760405162461bcd60e51b8152600401610b80906140ca565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610de65760405162461bcd60e51b8152600401610b80906140ca565b6006811115610e375760405162461bcd60e51b815260206004820152601e60248201527f5441583a2073656c6c207461782063616e6e6f742065786365656420362500006044820152606401610b80565b601255565b606033610e5b5760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed59190614167565b610ef15760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b031663ebb3c67a335b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381865afa158015610f48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d6b919081019061422b565b6005546001600160a01b03163314610f9a5760405162461bcd60e51b8152600401610b80906140ca565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000610fc9848484613089565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561104e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b80565b61105b8533858403612f65565b506001949350505050565b6005546001600160a01b031633146110905760405162461bcd60e51b8152600401610b80906140ca565b4781111561109b5750475b6005546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156110d5573d6000803e3d6000fd5b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c2d9185906111109086906142b8565b612f65565b60038251118015611127575060208251105b6111735760405162461bcd60e51b815260206004820181905260248201527f4e4f4445204352454154494f4e3a204e414d452053495a4520494e56414c49446044820152606401610b80565b33806111915760405162461bcd60e51b8152600401610b80906142cb565b600b546001600160a01b03908116908216036112055760405162461bcd60e51b815260206004820152602d60248201527f4e4f4445204352454154494f4e3a2072657761726473506f6f6c2063616e6e6f60448201526c7420637265617465206e6f646560981b6064820152608401610b80565b600654604051630c2b9f1760e31b8152600481018490526000916001600160a01b03169063615cf8b890602401602060405180830381865afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190614319565b60065460405163939c6bfb60e01b81526001600160a01b038581166004830152602482018990529293506000929091169063939c6bfb90604401602060405180830381865afa1580156112ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ee9190614319565b905061130282670de0b6b3a7640000613450565b81101561136d5760405162461bcd60e51b815260206004820152603360248201527f4e4f4445204352454154494f4e3a205265776172642042616c616e636520746f60448201527237903637bb903337b91031b932b0ba34b7b71760691b6064820152608401610b80565b600654604051630c2b9f1760e31b8152600481018690526001600160a01b039091169063d40614a990859089906113fa90670de0b6b3a764000090869063615cf8b890602401602060405180830381865afa1580156113d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f49190614319565b90613450565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091526044820152606401600060405180830381600087803b15801561144857600080fd5b505af115801561145c573d6000803e3d6000fd5b5050600654604051634810cb9960e11b81526001600160a01b0390911692506390219732915061149490869089908990600401614332565b600060405180830381600087803b1580156114ae57600080fd5b505af11580156114c2573d6000803e3d6000fd5b50505050505050505050565b6005546001600160a01b031633146114f85760405162461bcd60e51b8152600401610b80906140ca565b61150c816115068585613463565b90613463565b60641461155b5760405162461bcd60e51b815260206004820152601760248201527f46656573206d7573742061646420757020746f203130300000000000000000006044820152606401610b80565b600e92909255600f55601055565b6005546001600160a01b031633146115935760405162461bcd60e51b8152600401610b80906140ca565b60068111156115e45760405162461bcd60e51b815260206004820152601d60248201527f5441583a20627579207461782063616e6e6f74206578636565642036250000006044820152606401610b80565b601155565b600654604080516340bd8e6960e11b815290516000926001600160a01b03169163817b1cd29160048083019260209291908290030181865afa158015611633573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6b9190614319565b33806116b75760405162461bcd60e51b815260206004820152602960248201527f454c454d454e54533a20206372656174696f6e2066726f6d20746865207a65726044820152686f206164647265737360b81b6064820152608401610b80565b600a546001600160a01b038281169116148015906116e35750600b546001600160a01b03828116911614155b61174e5760405162461bcd60e51b815260206004820152603660248201527f454c454d454e54533a20667574757220616e642072657761726473506f6f6c2060448201527563616e6e6f7420636173686f7574207265776172647360501b6064820152608401610b80565b60065460405163956de88760e01b81526001600160a01b038381166004830152600092169063956de887906024016040805180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc91906141ab565b8051909150806118295760405162461bcd60e51b815260206004820152603260248201527f454c454d454e54533a20596f7520646f6e2774206861766520656e6f756768206044820152711c995dd85c99081d1bc818d85cda081bdd5d60721b6064820152608401610b80565b600b54611840906001600160a01b0316848361346f565b60065460405163d3b0dba960e01b81526001600160a01b0385811660048301529091169063d3b0dba9906024015b600060405180830381600087803b15801561188857600080fd5b505af115801561189c573d6000803e3d6000fd5b50505050505050565b6005546001600160a01b031633146118cf5760405162461bcd60e51b8152600401610b80906140ca565b805160051461190f5760405162461bcd60e51b815260206004820152600c60248201526b0aee4dedcce40d8cadccee8d60a31b6044820152606401610b80565b600654604051635770fa8f60e01b81526001600160a01b0390911690635770fa8f9061193f90849060040161437c565b600060405180830381600087803b15801561195957600080fd5b505af115801561196d573d6000803e3d6000fd5b5050505050565b6005546001600160a01b0316331461199e5760405162461bcd60e51b8152600401610b80906140ca565b6011548211156119e55760405162461bcd60e51b81526020600482015260126024820152712a30bc32b99037b7363c9033b7903237bbb760711b6044820152606401610b80565b601254811115611a2c5760405162461bcd60e51b81526020600482015260126024820152712a30bc32b99037b7363c9033b7903237bbb760711b6044820152606401610b80565b601191909155601255565b6005546001600160a01b03163314611a615760405162461bcd60e51b8152600401610b80906140ca565b601480549115156101000261ff0019909216919091179055565b606033611a9a5760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b149190614167565b611b305760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b031663cc66ccea33610f04565b6005546001600160a01b03163314611b715760405162461bcd60e51b8152600401610b80906140ca565b601855565b6005546001600160a01b03163314611ba05760405162461bcd60e51b8152600401610b80906140ca565b6008546001600160a01b0390811690821603611c145760405162461bcd60e51b815260206004820152602d60248201527f454c454d454e54533a2054686520726f7574657220616c72656164792068617360448201526c2074686174206164647265737360981b6064820152608401610b80565b6008546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600880546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa158015611cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccf91906143c0565b6001600160a01b031663c9c6539630600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5591906143c0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611da2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc691906143c0565b600980546001600160a01b0319166001600160a01b03929092169190911790555050565b3380611e435760405162461bcd60e51b815260206004820152602260248201527f435348543a202063616e27742066726f6d20746865207a65726f206164647265604482015261737360f01b6064820152608401610b80565b600a546001600160a01b03828116911614801590611e6f5750600b546001600160a01b03828116911614155b611ed65760405162461bcd60e51b815260206004820152603260248201527f435348543a20667574757220616e642072657761726473506f6f6c2063616e6e6044820152716f7420636173686f7574207265776172647360701b6064820152608401610b80565b60065460405163939c6bfb60e01b81526001600160a01b03838116600483015260248201859052600092169063939c6bfb90604401602060405180830381865afa158015611f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4c9190614319565b905060008111611fb55760405162461bcd60e51b815260206004820152602e60248201527f435348543a20596f7520646f6e2774206861766520656e6f756768207265776160448201526d1c99081d1bc818d85cda081bdd5d60921b6064820152608401610b80565b60065460405163b769ec5560e01b81526001600160a01b0384811660048301526024820186905260448201849052600092169063b769ec55906064016020604051808303816000875af1158015612010573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120349190614319565b600b54909150612057906001600160a01b03168461205285856135c4565b61346f565b600654604051633bcf707b60e01b81526001600160a01b0385811660048301526024820187905290911690633bcf707b906044015b600060405180830381600087803b1580156120a657600080fd5b505af11580156120ba573d6000803e3d6000fd5b5050505050505050565b6005546001600160a01b031633146120ee5760405162461bcd60e51b8152600401610b80906140ca565b601555565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146121385760405162461bcd60e51b8152600401610b80906140ca565b61214260006135d0565b565b33806121925760405162461bcd60e51b815260206004820152601a60248201527f5a65726f2061646472657373206e6f74207065726d69747465640000000000006044820152606401610b80565b600b546001600160a01b03908116908216036121e75760405162461bcd60e51b815260206004820152601460248201527343616e6e6f742075706772616465206e6f64657360601b6044820152606401610b80565b60065460405163a3078e6b60e01b81526001600160a01b03838116600483015260248201859052600092169063a3078e6b90604401602060405180830381865afa158015612239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225d9190614319565b9050600481106122b95760405162461bcd60e51b815260206004820152602160248201527f596f7572204e6f646520697320616c7265616479206174206d6178206c6576656044820152601b60fa1b6064820152608401610b80565b60006122c6826001613463565b600654604051630c2b9f1760e31b8152600481018590529192506000916001600160a01b039091169063615cf8b890602401602060405180830381865afa158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190614319565b600654604051630c2b9f1760e31b8152600481018590529192506000916001600160a01b039091169063615cf8b890602401602060405180830381865afa158015612388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ac9190614319565b905060006123c6670de0b6b3a76400006113f484866135c4565b60065460405163939c6bfb60e01b81526001600160a01b038981166004830152602482018b90529293506000929091169063939c6bfb90604401602060405180830381865afa15801561241d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124419190614319565b9050818111156124ca5761245f878961245a84866135c4565b613622565b600654604051633bcf707b60e01b81526001600160a01b038981166004830152602482018b905290911690633bcf707b90604401600060405180830381600087803b1580156124ad57600080fd5b505af11580156124c1573d6000803e3d6000fd5b505050506120ba565b818110156120ba576124e687896124e185856135c4565b6136f8565b600654604051633bcf707b60e01b81526001600160a01b038981166004830152602482018b905290911690633bcf707b90604401600060405180830381600087803b15801561253457600080fd5b505af1158015612548573d6000803e3d6000fd5b505050505050505050505050565b60003360075460405163e51862dd60e01b8152600481018590529192506000916001600160a01b039091169063e51862dd90602401602060405180830381865afa1580156125a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cc9190614319565b905060006125e56016548361345090919063ffffffff16565b9050806125f1846120f3565b1161264d5760405162461bcd60e51b815260206004820152602660248201527f4e6f7420656e6f75676820454c454d454e545320746f2067726f7720796f75726044820152651020b634b2b760d11b6064820152608401610b80565b600b546126659084906001600160a01b03168361346f565b600754604051631f5a7cbd60e21b8152600481018690526001600160a01b0390911690637d69f2f49060240161208c565b6005546001600160a01b031633146126c05760405162461bcd60e51b8152600401610b80906140ca565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610b9d906140ff565b6005546001600160a01b0316331461271b5760405162461bcd60e51b8152600401610b80906140ca565b6009546001600160a01b03908116908316036127af5760405162461bcd60e51b815260206004820152604760248201527f454c454d454e54533a205468652044455820706169722063616e6e6f7420626560448201527f2072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6064820152666572506169727360c81b608482015260a401610b80565b6110d58282613749565b6006546040805163b8527aef60e01b815290516000926001600160a01b03169163b8527aef9160048083019260209291908290030181865afa158015611633573d6000803e3d6000fd5b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156128855760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b80565b6128923385858403612f65565b5060019392505050565b6000610c2d338484613089565b6005546001600160a01b031633146128d35760405162461bcd60e51b8152600401610b80906140ca565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6128fd613c80565b6005546001600160a01b031633146129275760405162461bcd60e51b8152600401610b80906140ca565b60065460405163956de88760e01b81526001600160a01b0384811660048301529091169063956de887906024016040805180830381865afa158015612970573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3191906141ab565b600382511180156129a6575060208251105b6129f25760405162461bcd60e51b815260206004820181905260248201527f4e4f4445204352454154494f4e3a204e414d452053495a4520494e56414c49446044820152606401610b80565b3380612a105760405162461bcd60e51b8152600401610b80906142cb565b600b546001600160a01b0390811690821603612a945760405162461bcd60e51b815260206004820152603c60248201527f4e4f4445204352454154494f4e3a2066757475722c2064657620616e6420726560448201527f7761726473506f6f6c2063616e6e6f7420637265617465206e6f6465000000006064820152608401610b80565b600654604051630c2b9f1760e31b8152600481018490526000916001600160a01b03169063615cf8b890602401602060405180830381865afa158015612ade573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b029190614319565b9050612b1681670de0b6b3a7640000613450565b612b1f836120f3565b1015612b935760405162461bcd60e51b815260206004820152603c60248201527f4e4f4445204352454154494f4e3a2042616c616e636520746f6f206c6f77206660448201527f6f72206372656174696f6e2e20547279206c6f77657220746965722e000000006064820152608401610b80565b600b54612bb79083906001600160a01b031661205284670de0b6b3a7640000613450565b600654604051634810cb9960e11b81526001600160a01b039091169063902197329061208c90859088908890600401614332565b606033612c0a5760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c849190614167565b612ca05760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b0316639dab00f733610f04565b6005546001600160a01b03163314612ce15760405162461bcd60e51b8152600401610b80906140ca565b60175460ff1615612d345760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610b80565b6017805460ff19166001179055565b606033612d625760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddc9190614167565b612df85760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b031663b19197f733610f04565b6005546001600160a01b03163314612e395760405162461bcd60e51b8152600401610b80906140ca565b6001600160a01b038116612e9e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b80565b612ea7816135d0565b50565b600654604051633dd3264d60e21b81526001600160a01b038381166004830152600092169063f74c993490602401602060405180830381865afa158015612ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190614319565b6005546001600160a01b03163314612f435760405162461bcd60e51b8152600401610b80906140ca565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316612fc75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b80565b6001600160a01b0382166130285760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b80565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166130af5760405162461bcd60e51b8152600401610b80906143dd565b6001600160a01b0382166130d55760405162461bcd60e51b8152600401610b8090614422565b6001600160a01b03821660009081526019602052604090205460ff16801561311f57506001600160a01b038316301480159061311f57506005546001600160a01b03848116911614155b1561316557600061314660646131406012548561345090919063ffffffff16565b9061383e565b905061315384308361346f565b61315d82826135c4565b9150506131eb565b6001600160a01b03831660009081526019602052604090205460ff1680156131af57506001600160a01b03821630148015906131af57506005546001600160a01b03838116911614155b156131eb5760006131d060646131406011548561345090919063ffffffff16565b90506131dd84308361346f565b6131e782826135c4565b9150505b8060006131f7306120f3565b601554909150811080159081906132155750601454610100900460ff165b8015613224575060145460ff16155b801561323e57506005546001600160a01b03878116911614155b801561326357506001600160a01b03861660009081526019602052604090205460ff16155b156132705761327061384a565b6005546001600160a01b0387811691161480159061329c57506009546001600160a01b03868116911614155b80156132b657506008546001600160a01b03868116911614155b80156132cb57506001600160a01b0385163014155b80156132e057506001600160a01b0386163014155b1561343d5760175460ff166133375760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b80565b600a546001600160a01b038681169116148015906133635750600b546001600160a01b03868116911614155b801561337d5750600c546001600160a01b03868116911614155b80156133975750600a546001600160a01b03878116911614155b80156133b15750600b546001600160a01b03878116911614155b80156133cb5750600c546001600160a01b03878116911614155b1561343d5760006133db866120f3565b6018549091506133f390670de0b6b3a7640000613450565b6133fd8583613463565b111561343b5760405162461bcd60e51b815260206004820152600d60248201526c3bb0b63632ba103634b6b4ba1760991b6044820152606401610b80565b505b61344886868561346f565b505050505050565b600061345c8284614465565b9392505050565b600061345c82846142b8565b6001600160a01b0383166134955760405162461bcd60e51b8152600401610b80906143dd565b6001600160a01b0382166134bb5760405162461bcd60e51b8152600401610b8090614422565b6001600160a01b038316600090815260208190526040902054818110156135335760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b80565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061356a9084906142b8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135b691815260200190565b60405180910390a350505050565b600061345c828461447c565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60065460405163b769ec5560e01b81526001600160a01b0385811660048301526024820185905260448201849052600092169063b769ec55906064016020604051808303816000875af115801561367d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a19190614319565b600b549091506136bf906001600160a01b03168561205285856135c4565b60065460405163dd12698f60e01b81526001600160a01b038681166004830152602482018690529091169063dd12698f9060440161208c565b600b546137109084906001600160a01b03168361346f565b60065460405163dd12698f60e01b81526001600160a01b038581166004830152602482018590529091169063dd12698f9060440161186e565b6001600160a01b03821660009081526019602052604090205481151560ff9091161515036137ea5760405162461bcd60e51b815260206004820152604260248201527f454c454d454e54533a204175746f6d61746564206d61726b6574206d616b657260448201527f207061697220697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a401610b80565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600061345c828461448f565b6014805460ff191660011790556000613862306120f3565b9050600061388060646131406010548561345090919063ffffffff16565b9050600061389e60646131406013548561345090919063ffffffff16565b905060006138ac83836135c4565b905060006138ca6064613140600e548861345090919063ffffffff16565b600b549091506138e59030906001600160a01b03168361346f565b60006139016064613140600f548961345090919063ffffffff16565b905061390c816139fa565b61391d613918306120f3565b613a81565b60006139298585613463565b600c5490915047906000906001600160a01b031661394b84613140858b613450565b604051600081818185875af1925050503d8060008114613987576040519150601f19603f3d011682016040523d82523d6000602084013e61398c565b606091505b5050600a546040519192506001600160a01b031690303190600081818185875af1925050503d80600081146139dd576040519150601f19603f3d011682016040523d82523d6000602084013e6139e2565b606091505b50506014805460ff1916905550505050505050505050565b6000613a0782600261383e565b90506000613a1583836135c4565b905047613a2183613a81565b6000613a2d47836135c4565b9050613a398382613bd3565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613ab657613ab6614366565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b3391906143c0565b81600181518110613b4657613b46614366565b6001600160a01b039283166020918202929092010152600854613b6c9130911684612f65565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac94790613ba59085906000908690309042906004016144b1565b600060405180830381600087803b158015613bbf57600080fd5b505af1158015613448573d6000803e3d6000fd5b600854613beb9030906001600160a01b031684612f65565b600854600b5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613c5b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061196d9190614522565b60405180604001604052806002906020820280368337509192915050565b600060208284031215613cb057600080fd5b5035919050565b60005b83811015613cd2578181015183820152602001613cba565b50506000910152565b60008151808452613cf3816020860160208601613cb7565b601f01601f19169290920160200192915050565b60208152600061345c6020830184613cdb565b6001600160a01b0381168114612ea757600080fd5b60008060408385031215613d4257600080fd5b8235613d4d81613d1a565b946020939093013593505050565b60408101818360005b6002811015613d83578151835260209283019290910190600101613d64565b50505092915050565b600060208284031215613d9e57600080fd5b813561345c81613d1a565b600080600060608486031215613dbe57600080fd5b8335613dc981613d1a565b92506020840135613dd981613d1a565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613e2957613e29613dea565b604052919050565b600067ffffffffffffffff821115613e4b57613e4b613dea565b50601f01601f191660200190565b600082601f830112613e6a57600080fd5b8135613e7d613e7882613e31565b613e00565b818152846020838601011115613e9257600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215613ec457600080fd5b83359250602084013567ffffffffffffffff811115613ee257600080fd5b613eee86828701613e59565b925050604084013590509250925092565b600080600060608486031215613f1457600080fd5b505081359360208301359350604090920135919050565b60006020808385031215613f3e57600080fd5b823567ffffffffffffffff80821115613f5657600080fd5b818501915085601f830112613f6a57600080fd5b813581811115613f7c57613f7c613dea565b8060051b9150613f8d848301613e00565b8181529183018401918481019088841115613fa757600080fd5b938501935b83851015613fc557843582529385019390850190613fac565b98975050505050505050565b60008060408385031215613fe457600080fd5b50508035926020909101359150565b8015158114612ea757600080fd5b60006020828403121561401357600080fd5b813561345c81613ff3565b6000806040838503121561403157600080fd5b823561403c81613d1a565b9150602083013561404c81613ff3565b809150509250929050565b6000806040838503121561406a57600080fd5b823567ffffffffffffffff81111561408157600080fd5b61408d85828601613e59565b95602094909401359450505050565b600080604083850312156140af57600080fd5b82356140ba81613d1a565b9150602083013561404c81613d1a565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061411357607f821691505b60208210810361413357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526014908201527353454e4445522043414e2754204245205a45524f60601b604082015260600190565b60006020828403121561417957600080fd5b815161345c81613ff3565b6020808252600d908201526c2727902727a2229027aba722a960991b604082015260600190565b6000604082840312156141bd57600080fd5b82601f8301126141cc57600080fd5b6040516040810181811067ffffffffffffffff821117156141ef576141ef613dea565b806040525080604084018581111561420657600080fd5b845b81811015614220578051835260209283019201614208565b509195945050505050565b60006020828403121561423d57600080fd5b815167ffffffffffffffff81111561425457600080fd5b8201601f8101841361426557600080fd5b8051614273613e7882613e31565b81815285602083850101111561428857600080fd5b614299826020830160208601613cb7565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c3157610c316142a2565b6020808252602e908201527f4e4f4445204352454154494f4e3a20206372656174696f6e2066726f6d20746860408201526d65207a65726f206164647265737360901b606082015260800190565b60006020828403121561432b57600080fd5b5051919050565b6001600160a01b038416815260606020820181905260009061435690830185613cdb565b9050826040830152949350505050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156143b457835183529284019291840191600101614398565b50909695505050505050565b6000602082840312156143d257600080fd5b815161345c81613d1a565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610c3157610c316142a2565b81810381811115610c3157610c316142a2565b6000826144ac57634e487b7160e01b600052601260045260246000fd5b500490565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156145015784516001600160a01b0316835293830193918301916001016144dc565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561453757600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220196c9aa2616d071f00062df5ce807c0f16e48d53d178082192525385c4f41f1964736f6c63430008130033

Deployed Bytecode Sourcemap

26295:18708:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26406:21;;;;;;;;;;-1:-1:-1;26406:21:0;;;;-1:-1:-1;;;;;26406:21:0;;;;;;-1:-1:-1;;;;;194:32:1;;;176:51;;164:2;149:18;26406:21:0;;;;;;;;40173:104;;;;;;;;;;-1:-1:-1;40173:104:0;;;;;:::i;:::-;;:::i;:::-;;16765:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17745:194::-;;;;;;;;;;-1:-1:-1;17745:194:0;;;;;:::i;:::-;;:::i;:::-;;;1800:14:1;;1793:22;1775:41;;1763:2;1748:18;17745:194:0;1635:187:1;42894:281:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;29735:107::-;;;;;;;;;;-1:-1:-1;29735:107:0;;;;;:::i;:::-;;:::i;30419:155::-;;;;;;;;;;-1:-1:-1;30419:155:0;;;;;:::i;:::-;;:::i;43374:270::-;;;;;;;;;;;;;:::i;26436:41::-;;;;;;;;;;-1:-1:-1;26436:41:0;;;;-1:-1:-1;;;;;26436:41:0;;;17086:108;;;;;;;;;;-1:-1:-1;17174:12:0;;17086:108;;;2966:25:1;;;2954:2;2939:18;17086:108:0;2820:177:1;28950:111:0;;;;;;;;;;-1:-1:-1;28950:111:0;;;;;:::i;:::-;;:::i;17947:529::-;;;;;;;;;;-1:-1:-1;17947:529:0;;;;;:::i;:::-;;:::i;42277:180::-;;;;;;;;;;-1:-1:-1;42277:180:0;;;;;:::i;:::-;;:::i;26706:25::-;;;;;;;;;;;;;;;;16985:93;;;;;;;;;;-1:-1:-1;16985:93:0;;17068:2;3857:36:1;;3845:2;3830:18;16985:93:0;3715:184:1;18484:290:0;;;;;;;;;;-1:-1:-1;18484:290:0;;;;;:::i;:::-;;:::i;37294:1056::-;;;;;;;;;;-1:-1:-1;37294:1056:0;;;;;:::i;:::-;;:::i;30073:334::-;;;;;;;;;;-1:-1:-1;30073:334:0;;;;;:::i;:::-;;:::i;30582:152::-;;;;;;;;;;-1:-1:-1;30582:152:0;;;;;:::i;:::-;;:::i;44513:113::-;;;;;;;;;;;;;:::i;26486:28::-;;;;;;;;;;-1:-1:-1;26486:28:0;;;;-1:-1:-1;;;;;26486:28:0;;;26808:26;;;;;;;;;;;;;;;;41566:703;;;;;;;;;;;;;:::i;26738:31::-;;;;;;;;;;;;;;;;43183:183;;;;;;;;;;-1:-1:-1;43183:183:0;;;;;:::i;:::-;;:::i;30742:261::-;;;;;;;;;;-1:-1:-1;30742:261:0;;;;;:::i;:::-;;:::i;42465:96::-;;;;;;;;;;-1:-1:-1;42465:96:0;;;;;:::i;:::-;;:::i;43940:274::-;;;;;;;;;;;;;:::i;26987:31::-;;;;;;;;;;;;;;;;44907:93;;;;;;;;;;-1:-1:-1;44907:93:0;;;;;:::i;:::-;;:::i;29069:539::-;;;;;;;;;;-1:-1:-1;29069:539:0;;;;;:::i;:::-;;:::i;40738:820::-;;;;;;;;;;-1:-1:-1;40738:820:0;;;;;:::i;:::-;;:::i;29616:111::-;;;;;;;;;;-1:-1:-1;29616:111:0;;;;;:::i;:::-;;:::i;17202:143::-;;;;;;;;;;-1:-1:-1;17202:143:0;;;;;:::i;:::-;;:::i;22189:103::-;;;;;;;;;;;;;:::i;38358:1078::-;;;;;;;;;;-1:-1:-1;38358:1078:0;;;;;:::i;:::-;;:::i;26521:30::-;;;;;;;;;;-1:-1:-1;26521:30:0;;;;-1:-1:-1;;;;;26521:30:0;;;40285:445;;;;;;;;;;-1:-1:-1;40285:445:0;;;;;:::i;:::-;;:::i;26627:70::-;;;;;;;;;;-1:-1:-1;26627:70:0;;;;-1:-1:-1;;;;;26627:70:0;;;21966:87;;;;;;;;;;-1:-1:-1;22039:6:0;;-1:-1:-1;;;;;22039:6:0;21966:87;;29955:110;;;;;;;;;;-1:-1:-1;29955:110:0;;;;;:::i;:::-;;:::i;16873:104::-;;;;;;;;;;;;;:::i;27025:37::-;;;;;;;;;;;;;;;;31011:320;;;;;;;;;;-1:-1:-1;31011:320:0;;;;;:::i;:::-;;:::i;26368:31::-;;;;;;;;;;-1:-1:-1;26368:31:0;;;;-1:-1:-1;;;;;26368:31:0;;;44634:119;;;;;;;;;;;;;:::i;18782:475::-;;;;;;;;;;-1:-1:-1;18782:475:0;;;;;:::i;:::-;;:::i;17353:200::-;;;;;;;;;;-1:-1:-1;17353:200:0;;;;;:::i;:::-;;:::i;26776:23::-;;;;;;;;;;;;;;;;29850:97;;;;;;;;;;-1:-1:-1;29850:97:0;;;;;:::i;:::-;;:::i;26596:22::-;;;;;;;;;;-1:-1:-1;26596:22:0;;;;-1:-1:-1;;;;;26596:22:0;;;27146:57;;;;;;;;;;-1:-1:-1;27146:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42711:175;;;;;;;;;;-1:-1:-1;42711:175:0;;;;;:::i;:::-;;:::i;36395:891::-;;;;;;;;;;-1:-1:-1;36395:891:0;;;;;:::i;:::-;;:::i;43652:280::-;;;;;;;;;;;;;:::i;26558:31::-;;;;;;;;;;-1:-1:-1;26558:31:0;;;;-1:-1:-1;;;;;26558:31:0;;;44761:138;;;;;;;;;;;;;:::i;26841:27::-;;;;;;;;;;;;;;;;17561:176;;;;;;;;;;-1:-1:-1;17561:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;17702:18:0;;;17675:7;17702:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17561:176;44222:283;;;;;;;;;;;;;:::i;22300:238::-;;;;;;;;;;-1:-1:-1;22300:238:0;;;;;:::i;:::-;;:::i;42569:134::-;;;;;;;;;;-1:-1:-1;42569:134:0;;;;;:::i;:::-;;:::i;28811:131::-;;;;;;;;;;-1:-1:-1;28811:131:0;;;;;:::i;:::-;;:::i;40173:104::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;;;;;;;;;40246:14:::1;:23:::0;40173:104::o;16765:100::-;16819:13;16852:5;16845:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16765:100;:::o;17745:194::-;17853:4;17870:39;16225:10;17893:7;17902:6;17870:8;:39::i;:::-;-1:-1:-1;17927:4:0;17745:194;;;;;:::o;42894:281::-;42942:17;;:::i;:::-;16225:10;42972:59;;;;-1:-1:-1;;;42972:59:0;;;;;;;:::i;:::-;43050:11;;-1:-1:-1;;;;;43050:11:0;:23;16225:10;43050:37;;-1:-1:-1;;;;;;43050:37:0;;;;;;;-1:-1:-1;;;;;194:32:1;;;43050:37:0;;;176:51:1;149:18;;43050:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43042:63;;;;-1:-1:-1;;;43042:63:0;;;;;;;:::i;:::-;43123:11;;-1:-1:-1;;;;;43123:11:0;:30;16225:10;43123:44;;-1:-1:-1;;;;;;43123:44:0;;;;;;;-1:-1:-1;;;;;194:32:1;;;43123:44:0;;;176:51:1;149:18;;43123:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43116:51;;42894:281;:::o;29735:107::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;29812:15:::1;:22:::0;;-1:-1:-1;;;;;;29812:22:0::1;-1:-1:-1::0;;;;;29812:22:0;;;::::1;::::0;;;::::1;::::0;;29735:107::o;30419:155::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;30504:1:::1;30495:5;:10;;30487:53;;;::::0;-1:-1:-1;;;30487:53:0;;11601:2:1;30487:53:0::1;::::0;::::1;11583:21:1::0;11640:2;11620:18;;;11613:30;11679:32;11659:18;;;11652:60;11729:18;;30487:53:0::1;11399:354:1::0;30487:53:0::1;30551:7;:15:::0;30419:155::o;43374:270::-;43420:13;16225:10;43446:59;;;;-1:-1:-1;;;43446:59:0;;;;;;;:::i;:::-;43524:11;;-1:-1:-1;;;;;43524:11:0;:23;16225:10;43524:37;;-1:-1:-1;;;;;;43524:37:0;;;;;;;-1:-1:-1;;;;;194:32:1;;;43524:37:0;;;176:51:1;149:18;;43524:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43516:63;;;;-1:-1:-1;;;43516:63:0;;;;;;;:::i;:::-;43597:11;;-1:-1:-1;;;;;43597:11:0;:25;16225:10;43623:12;43597:39;;-1:-1:-1;;;;;;43597:39:0;;;;;;;-1:-1:-1;;;;;194:32:1;;;43597:39:0;;;176:51:1;149:18;;43597:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43597:39:0;;;;;;;;;;;;:::i;28950:111::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;29022:6:::1;:31:::0;;-1:-1:-1;;;;;;29022:31:0::1;-1:-1:-1::0;;;;;29022:31:0;;;::::1;::::0;;;::::1;::::0;;28950:111::o;17947:529::-;18087:4;18104:36;18114:6;18122:9;18133:6;18104:9;:36::i;:::-;-1:-1:-1;;;;;18180:19:0;;18153:24;18180:19;;;:11;:19;;;;;;;;16225:10;18180:33;;;;;;;;18246:26;;;;18224:116;;;;-1:-1:-1;;;18224:116:0;;12614:2:1;18224:116:0;;;12596:21:1;12653:2;12633:18;;;12626:30;12692:34;12672:18;;;12665:62;-1:-1:-1;;;12743:18:1;;;12736:38;12791:19;;18224:116:0;12412:404:1;18224:116:0;18376:57;18385:6;16225:10;18426:6;18407:16;:25;18376:8;:57::i;:::-;-1:-1:-1;18464:4:0;;17947:529;-1:-1:-1;;;;17947:529:0:o;42277:180::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;42352:21:::1;42343:6;:30;42339:66;;;-1:-1:-1::0;42384:21:0::1;42339:66;22039:6:::0;;42416:33:::1;::::0;-1:-1:-1;;;;;22039:6:0;;;;42416:33;::::1;;;::::0;42442:6;;42416:33:::1;::::0;;;42442:6;22039;42416:33;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;42277:180:::0;:::o;18484:290::-;16225:10;18597:4;18686:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18686:34:0;;;;;;;;;;18597:4;;18614:130;;18664:7;;18686:47;;18723:10;;18686:47;:::i;:::-;18614:8;:130::i;37294:1056::-;37475:1;37459:5;37453:19;:23;:51;;;;;37502:2;37486:5;37480:19;:24;37453:51;37431:133;;;;-1:-1:-1;;;37431:133:0;;13285:2:1;37431:133:0;;;13267:21:1;;;13304:18;;;13297:30;13363:34;13343:18;;;13336:62;13415:18;;37431:133:0;13083:356:1;37431:133:0;16225:10;;37615:116;;;;-1:-1:-1;;;37615:116:0;;;;;;;:::i;:::-;37774:16;;-1:-1:-1;;;;;37774:16:0;;;37764:26;;;;37742:121;;;;-1:-1:-1;;;37742:121:0;;14061:2:1;37742:121:0;;;14043:21:1;14100:2;14080:18;;;14073:30;14139:34;14119:18;;;14112:62;-1:-1:-1;;;14190:18:1;;;14183:43;14243:19;;37742:121:0;13859:409:1;37742:121:0;37894:11;;:30;;-1:-1:-1;;;37894:30:0;;;;;2966:25:1;;;37874:17:0;;-1:-1:-1;;;;;37894:11:0;;:24;;2939:18:1;;37894:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37954:11;;:44;;-1:-1:-1;;;37954:44:0;;-1:-1:-1;;;;;14654:32:1;;;37954:44:0;;;14636:51:1;14703:18;;;14696:34;;;37874:50:0;;-1:-1:-1;37935:16:0;;37954:11;;;;:25;;14609:18:1;;37954:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37935:63;-1:-1:-1;38043:19:0;:9;38057:4;38043:13;:19::i;:::-;38031:8;:31;;38009:132;;;;-1:-1:-1;;;38009:132:0;;14943:2:1;38009:132:0;;;14925:21:1;14982:2;14962:18;;;14955:30;15021:34;15001:18;;;14994:62;-1:-1:-1;;;15072:18:1;;;15065:49;15131:19;;38009:132:0;14741:415:1;38009:132:0;38152:11;;38237:30;;-1:-1:-1;;;38237:30:0;;;;;2966:25:1;;;-1:-1:-1;;;;;38152:11:0;;;;:25;;38192:6;;38213:9;;38237:40;;38272:4;;38152:11;;38237:24;;2939:18:1;;38237:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;:40::i;:::-;38152:136;;-1:-1:-1;;;;;;38152:136:0;;;;;;;-1:-1:-1;;;;;15381:32:1;;;38152:136:0;;;15363:51:1;15430:18;;;15423:34;;;;15473:18;;;15466:34;15336:18;;38152:136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38299:11:0;;:43;;-1:-1:-1;;;38299:43:0;;-1:-1:-1;;;;;38299:11:0;;;;-1:-1:-1;38299:22:0;;-1:-1:-1;38299:43:0;;38322:6;;38330:5;;38337:4;;38299:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37420:930;;;37294:1056;;;:::o;30073:334::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;30202:49:::1;30241:9:::0;30202:34:::1;:11:::0;30218:17;30202:15:::1;:34::i;:::-;:38:::0;::::1;:49::i;:::-;30255:3;30202:56;30194:92;;;::::0;-1:-1:-1;;;30194:92:0;;16106:2:1;30194:92:0::1;::::0;::::1;16088:21:1::0;16145:2;16125:18;;;16118:30;16184:25;16164:18;;;16157:53;16227:18;;30194:92:0::1;15904:347:1::0;30194:92:0::1;30297:10;:24:::0;;;;30332:16:::1;:36:::0;30379:8:::1;:20:::0;30073:334::o;30582:152::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;30666:1:::1;30657:5;:10;;30649:52;;;::::0;-1:-1:-1;;;30649:52:0;;16458:2:1;30649:52:0::1;::::0;::::1;16440:21:1::0;16497:2;16477:18;;;16470:30;16536:31;16516:18;;;16509:59;16585:18;;30649:52:0::1;16256:353:1::0;30649:52:0::1;30712:6;:14:::0;30582:152::o;44513:113::-;44593:11;;:25;;;-1:-1:-1;;;44593:25:0;;;;44566:7;;-1:-1:-1;;;;;44593:11:0;;:23;;:25;;;;;;;;;;;;;;:11;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;41566:703::-;16225:10;;41646:74;;;;-1:-1:-1;;;41646:74:0;;16816:2:1;41646:74:0;;;16798:21:1;16855:2;16835:18;;;16828:30;16894:34;16874:18;;;16867:62;-1:-1:-1;;;16945:18:1;;;16938:39;16994:19;;41646:74:0;16614:405:1;41646:74:0;41763:15;;-1:-1:-1;;;;;41753:25:0;;;41763:15;;41753:25;;;;:55;;-1:-1:-1;41792:16:0;;-1:-1:-1;;;;;41782:26:0;;;41792:16;;41782:26;;41753:55;41731:159;;;;-1:-1:-1;;;41731:159:0;;17226:2:1;41731:159:0;;;17208:21:1;17265:2;17245:18;;;17238:30;17304:34;17284:18;;;17277:62;-1:-1:-1;;;17355:18:1;;;17348:52;17417:19;;41731:159:0;17024:418:1;41731:159:0;41931:11;;:38;;-1:-1:-1;;;41931:38:0;;-1:-1:-1;;;;;194:32:1;;;41931:38:0;;;176:51:1;41901:27:0;;41931:11;;:30;;149:18:1;;41931:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42003:12;;41901:68;;-1:-1:-1;42048:16:0;42026:116;;;;-1:-1:-1;;;42026:116:0;;17781:2:1;42026:116:0;;;17763:21:1;17820:2;17800:18;;;17793:30;17859:34;17839:18;;;17832:62;-1:-1:-1;;;17910:18:1;;;17903:48;17968:19;;42026:116:0;17579:414:1;42026:116:0;42169:16;;42153:55;;-1:-1:-1;;;;;42169:16:0;42187:6;42195:12;42153:15;:55::i;:::-;42219:11;;:42;;-1:-1:-1;;;42219:42:0;;-1:-1:-1;;;;;194:32:1;;;42219:42:0;;;176:51:1;42219:11:0;;;;:34;;149:18:1;;42219:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41595:674;;;41566:703::o;43183:183::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;43274:6:::1;:13;43291:1;43274:18;43266:43;;;::::0;-1:-1:-1;;;43266:43:0;;18200:2:1;43266:43:0::1;::::0;::::1;18182:21:1::0;18239:2;18219:18;;;18212:30;-1:-1:-1;;;18258:18:1;;;18251:42;18310:18;;43266:43:0::1;17998:336:1::0;43266:43:0::1;43320:11;::::0;:38:::1;::::0;-1:-1:-1;;;43320:38:0;;-1:-1:-1;;;;;43320:11:0;;::::1;::::0;:30:::1;::::0;:38:::1;::::0;43351:6;;43320:38:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;43183:183:::0;:::o;30742:261::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;30851:6:::1;;30841;:16;;30832:48;;;::::0;-1:-1:-1;;;30832:48:0;;19178:2:1;30832:48:0::1;::::0;::::1;19160:21:1::0;19217:2;19197:18;;;19190:30;-1:-1:-1;;;19236:18:1;;;19229:48;19294:18;;30832:48:0::1;18976:342:1::0;30832:48:0::1;30911:7;;30900;:18;;30891:50;;;::::0;-1:-1:-1;;;30891:50:0;;19178:2:1;30891:50:0::1;::::0;::::1;19160:21:1::0;19217:2;19197:18;;;19190:30;-1:-1:-1;;;19236:18:1;;;19229:48;19294:18;;30891:50:0::1;18976:342:1::0;30891:50:0::1;30952:6;:15:::0;;;;30978:7:::1;:17:::0;30742:261::o;42465:96::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;42533:11:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;42533:20:0;;::::1;::::0;;;::::1;::::0;;42465:96::o;43940:274::-;43988:13;16225:10;44014:59;;;;-1:-1:-1;;;44014:59:0;;;;;;;:::i;:::-;44092:11;;-1:-1:-1;;;;;44092:11:0;:23;16225:10;44092:37;;-1:-1:-1;;;;;;44092:37:0;;;;;;;-1:-1:-1;;;;;194:32:1;;;44092:37:0;;;176:51:1;149:18;;44092:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44084:63;;;;-1:-1:-1;;;44084:63:0;;;;;;;:::i;:::-;44165:11;;-1:-1:-1;;;;;44165:11:0;:27;16225:10;44193:12;16145:98;44907:93;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;44978:5:::1;:14:::0;44907:93::o;29069:539::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;29192:15:::1;::::0;-1:-1:-1;;;;;29192:15:0;;::::1;29170:38:::0;;::::1;::::0;29148:133:::1;;;::::0;-1:-1:-1;;;29148:133:0;;19525:2:1;29148:133:0::1;::::0;::::1;19507:21:1::0;19564:2;19544:18;;;19537:30;19603:34;19583:18;;;19576:62;-1:-1:-1;;;19654:18:1;;;19647:43;19707:19;;29148:133:0::1;19323:409:1::0;29148:133:0::1;29339:15;::::0;29297:59:::1;::::0;-1:-1:-1;;;;;29339:15:0;;::::1;::::0;29297:59;::::1;::::0;::::1;::::0;29339:15:::1;::::0;29297:59:::1;29367:15;:48:::0;;-1:-1:-1;;;;;;29367:48:0::1;-1:-1:-1::0;;;;;29367:48:0;::::1;::::0;;::::1;::::0;;;29469:25:::1;::::0;;-1:-1:-1;;;29469:25:0;;;;-1:-1:-1;;29367:48:0;29469:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;29367:48;29469:25:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29451:69:0::1;;29529:4;29536:15;;;;;;;;;-1:-1:-1::0;;;;;29536:15:0::1;-1:-1:-1::0;;;;;29536:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29451:108;::::0;-1:-1:-1;;;;;;29451:108:0::1;::::0;;;;;;-1:-1:-1;;;;;20223:15:1;;;29451:108:0::1;::::0;::::1;20205:34:1::0;20275:15;;20255:18;;;20248:43;20140:18;;29451:108:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29570:13;:30:::0;;-1:-1:-1;;;;;;29570:30:0::1;-1:-1:-1::0;;;;;29570:30:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;29069:539:0:o;40738:820::-;16225:10;;40838:67;;;;-1:-1:-1;;;40838:67:0;;20504:2:1;40838:67:0;;;20486:21:1;20543:2;20523:18;;;20516:30;20582:34;20562:18;;;20555:62;-1:-1:-1;;;20633:18:1;;;20626:32;20675:19;;40838:67:0;20302:398:1;40838:67:0;40948:15;;-1:-1:-1;;;;;40938:25:0;;;40948:15;;40938:25;;;;:55;;-1:-1:-1;40977:16:0;;-1:-1:-1;;;;;40967:26:0;;;40977:16;;40967:26;;40938:55;40916:155;;;;-1:-1:-1;;;40916:155:0;;20907:2:1;40916:155:0;;;20889:21:1;20946:2;20926:18;;;20919:30;20985:34;20965:18;;;20958:62;-1:-1:-1;;;21036:18:1;;;21029:48;21094:19;;40916:155:0;20705:414:1;40916:155:0;41105:11;;:44;;-1:-1:-1;;;41105:44:0;;-1:-1:-1;;;;;14654:32:1;;;41105:44:0;;;14636:51:1;14703:18;;;14696:34;;;41082:20:0;;41105:11;;:25;;14609:18:1;;41105:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41082:67;;41197:1;41182:12;:16;41160:112;;;;-1:-1:-1;;;41160:112:0;;21326:2:1;41160:112:0;;;21308:21:1;21365:2;21345:18;;;21338:30;21404:34;21384:18;;;21377:62;-1:-1:-1;;;21455:18:1;;;21448:44;21509:19;;41160:112:0;21124:410:1;41160:112:0;41305:11;;:105;;-1:-1:-1;;;41305:105:0;;-1:-1:-1;;;;;15381:32:1;;;41305:105:0;;;15363:51:1;15430:18;;;15423:34;;;15473:18;;;15466:34;;;41285:17:0;;41305:11;;:22;;15336:18:1;;41305:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41437:16;;41285:125;;-1:-1:-1;41421:70:0;;-1:-1:-1;;;;;41437:16:0;41455:6;41463:27;:12;41285:125;41463:16;:27::i;:::-;41421:15;:70::i;:::-;41502:11;;:48;;-1:-1:-1;;;41502:48:0;;-1:-1:-1;;;;;14654:32:1;;;41502:48:0;;;14636:51:1;14703:18;;;14696:34;;;41502:11:0;;;;:29;;14609:18:1;;41502:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40787:771;;;40738:820;:::o;29616:111::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;29694:16:::1;:25:::0;29616:111::o;17202:143::-;-1:-1:-1;;;;;17319:18:0;17292:7;17319:18;;;;;;;;;;;;17202:143::o;22189:103::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;22254:30:::1;22281:1;22254:18;:30::i;:::-;22189:103::o:0;38358:1078::-;16225:10;;38456:59;;;;-1:-1:-1;;;38456:59:0;;21741:2:1;38456:59:0;;;21723:21:1;21780:2;21760:18;;;21753:30;21819:28;21799:18;;;21792:56;21865:18;;38456:59:0;21539:350:1;38456:59:0;38544:16;;-1:-1:-1;;;;;38544:16:0;;;38534:26;;;;38526:59;;;;-1:-1:-1;;;38526:59:0;;22096:2:1;38526:59:0;;;22078:21:1;22135:2;22115:18;;;22108:30;-1:-1:-1;;;22154:18:1;;;22147:50;22214:18;;38526:59:0;21894:344:1;38526:59:0;38618:11;;:42;;-1:-1:-1;;;38618:42:0;;-1:-1:-1;;;;;14654:32:1;;;38618:42:0;;;14636:51:1;14703:18;;;14696:34;;;38596:19:0;;38618:11;;:23;;14609:18:1;;38618:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38596:64;;38693:1;38679:11;:15;38671:61;;;;-1:-1:-1;;;38671:61:0;;22445:2:1;38671:61:0;;;22427:21:1;22484:2;22464:18;;;22457:30;22523:34;22503:18;;;22496:62;-1:-1:-1;;;22574:18:1;;;22567:31;22615:19;;38671:61:0;22243:397:1;38671:61:0;38743:16;38762:18;:11;38778:1;38762:15;:18::i;:::-;38814:11;;:37;;-1:-1:-1;;;38814:37:0;;;;;2966:25:1;;;38743:37:0;;-1:-1:-1;38791:20:0;;-1:-1:-1;;;;;38814:11:0;;;;:24;;2939:18:1;;38814:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38881:11;;:34;;-1:-1:-1;;;38881:34:0;;;;;2966:25:1;;;38791:60:0;;-1:-1:-1;38862:16:0;;-1:-1:-1;;;;;38881:11:0;;;;:24;;2939:18:1;;38881:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38862:53;-1:-1:-1;38926:17:0;38946:38;38979:4;38947:26;38862:53;38960:12;38947;:26::i;38946:38::-;39014:11;;:44;;-1:-1:-1;;;39014:44:0;;-1:-1:-1;;;;;14654:32:1;;;39014:44:0;;;14636:51:1;14703:18;;;14696:34;;;38926:58:0;;-1:-1:-1;38995:16:0;;39014:11;;;;:25;;14609:18:1;;39014:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38995:63;;39084:9;39073:8;:20;39069:360;;;39110:62;39129:6;39137:9;39148:23;:8;39161:9;39148:12;:23::i;:::-;39110:18;:62::i;:::-;39187:11;;:48;;-1:-1:-1;;;39187:48:0;;-1:-1:-1;;;;;14654:32:1;;;39187:48:0;;;14636:51:1;14703:18;;;14696:34;;;39187:11:0;;;;:29;;14609:18:1;;39187:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39069:360;;;39268:9;39257:8;:20;39253:176;;;39294:60;39311:6;39319:9;39330:23;:9;39344:8;39330:13;:23::i;:::-;39294:16;:60::i;:::-;39369:11;;:48;;-1:-1:-1;;;39369:48:0;;-1:-1:-1;;;;;14654:32:1;;;39369:48:0;;;14636:51:1;14703:18;;;14696:34;;;39369:11:0;;;;:29;;14609:18:1;;39369:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38405:1031;;;;;;;38358:1078;:::o;40285:445::-;40342:14;16225:10;40403:6;;:30;;-1:-1:-1;;;40403:30:0;;;;;2966:25:1;;;40342:29:0;;-1:-1:-1;40382:18:0;;-1:-1:-1;;;;;40403:6:0;;;;:20;;2939:18:1;;40403:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40382:51;;40444:17;40464:30;40479:14;;40464:10;:14;;:30;;;;:::i;:::-;40444:50;;40547:9;40527:17;40537:6;40527:9;:17::i;:::-;:29;40505:117;;;;-1:-1:-1;;;40505:117:0;;22847:2:1;40505:117:0;;;22829:21:1;22886:2;22866:18;;;22859:30;22925:34;22905:18;;;22898:62;-1:-1:-1;;;22976:18:1;;;22969:36;23022:19;;40505:117:0;22645:402:1;40505:117:0;40657:16;;40633:52;;40649:6;;-1:-1:-1;;;;;40657:16:0;40675:9;40633:15;:52::i;:::-;40696:6;;:26;;-1:-1:-1;;;40696:26:0;;;;;2966:25:1;;;-1:-1:-1;;;;;40696:6:0;;;;:16;;2939:18:1;;40696:26:0;2820:177:1;29955:110:0;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;30034:16:::1;:23:::0;;-1:-1:-1;;;;;;30034:23:0::1;-1:-1:-1::0;;;;;30034:23:0;;;::::1;::::0;;;::::1;::::0;;29955:110::o;16873:104::-;16929:13;16962:7;16955:14;;;;;:::i;31011:320::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;31157:13:::1;::::0;-1:-1:-1;;;;;31157:13:0;;::::1;31149:21:::0;;::::1;::::0;31127:142:::1;;;::::0;-1:-1:-1;;;31127:142:0;;23254:2:1;31127:142:0::1;::::0;::::1;23236:21:1::0;23293:2;23273:18;;;23266:30;23332:34;23312:18;;;23305:62;23403:34;23383:18;;;23376:62;-1:-1:-1;;;23454:19:1;;;23447:38;23502:19;;31127:142:0::1;23052:475:1::0;31127:142:0::1;31282:41;31311:4;31317:5;31282:28;:41::i;44634:119::-:0;44714:11;;:31;;;-1:-1:-1;;;44714:31:0;;;;44687:7;;-1:-1:-1;;;;;44714:11:0;;:29;;:31;;;;;;;;;;;;;;:11;:31;;;;;;;;;;;;;;18782:475;16225:10;18900:4;18944:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18944:34:0;;;;;;;;;;19011:35;;;;18989:122;;;;-1:-1:-1;;;18989:122:0;;23734:2:1;18989:122:0;;;23716:21:1;23773:2;23753:18;;;23746:30;23812:34;23792:18;;;23785:62;-1:-1:-1;;;23863:18:1;;;23856:35;23908:19;;18989:122:0;23532:401:1;18989:122:0;19147:67;16225:10;19170:7;19198:15;19179:16;:34;19147:8;:67::i;:::-;-1:-1:-1;19245:4:0;;18782:475;-1:-1:-1;;;18782:475:0:o;17353:200::-;17464:4;17481:42;16225:10;17505:9;17516:6;17481:9;:42::i;29850:97::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;29925:7:::1;:14:::0;;-1:-1:-1;;;;;;29925:14:0::1;-1:-1:-1::0;;;;;29925:14:0;;;::::1;::::0;;;::::1;::::0;;29850:97::o;42711:175::-;42802:17;;:::i;:::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;42839:11:::1;::::0;:39:::1;::::0;-1:-1:-1;;;42839:39:0;;-1:-1:-1;;;;;194:32:1;;;42839:39:0::1;::::0;::::1;176:51:1::0;42839:11:0;;::::1;::::0;:30:::1;::::0;149:18:1;;42839:39:0::1;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;36395:891::-:0;36522:1;36506:5;36500:19;:23;:51;;;;;36549:2;36533:5;36527:19;:24;36500:51;36478:133;;;;-1:-1:-1;;;36478:133:0;;13285:2:1;36478:133:0;;;13267:21:1;;;13304:18;;;13297:30;13363:34;13343:18;;;13336:62;13415:18;;36478:133:0;13083:356:1;36478:133:0;16225:10;;36662:116;;;;-1:-1:-1;;;36662:116:0;;;;;;;:::i;:::-;36821:16;;-1:-1:-1;;;;;36821:16:0;;;36811:26;;;;36789:136;;;;-1:-1:-1;;;36789:136:0;;24140:2:1;36789:136:0;;;24122:21:1;24179:2;24159:18;;;24152:30;24218:34;24198:18;;;24191:62;24289:30;24269:18;;;24262:58;24337:19;;36789:136:0;23938:424:1;36789:136:0;36958:11;;:30;;-1:-1:-1;;;36958:30:0;;;;;2966:25:1;;;36938:17:0;;-1:-1:-1;;;;;36958:11:0;;:24;;2939:18:1;;36958:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36938:50;-1:-1:-1;37042:19:0;36938:50;37056:4;37042:13;:19::i;:::-;37021:17;37031:6;37021:9;:17::i;:::-;:40;;36999:150;;;;-1:-1:-1;;;36999:150:0;;24569:2:1;36999:150:0;;;24551:21:1;24608:2;24588:18;;;24581:30;24647:34;24627:18;;;24620:62;24718:30;24698:18;;;24691:58;24766:19;;36999:150:0;24367:424:1;36999:150:0;37186:16;;37162:62;;37178:6;;-1:-1:-1;;;;;37186:16:0;37204:19;:9;37218:4;37204:13;:19::i;37162:62::-;37235:11;;:43;;-1:-1:-1;;;37235:43:0;;-1:-1:-1;;;;;37235:11:0;;;;:22;;:43;;37258:6;;37266:5;;37273:4;;37235:43;;;:::i;43652:280::-;43701:13;16225:10;43727:59;;;;-1:-1:-1;;;43727:59:0;;;;;;;:::i;:::-;43805:11;;-1:-1:-1;;;;;43805:11:0;:23;16225:10;43805:37;;-1:-1:-1;;;;;;43805:37:0;;;;;;;-1:-1:-1;;;;;194:32:1;;;43805:37:0;;;176:51:1;149:18;;43805:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43797:63;;;;-1:-1:-1;;;43797:63:0;;;;;;;:::i;:::-;43878:11;;-1:-1:-1;;;;;43878:11:0;:32;16225:10;43911:12;16145:98;44761:138;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;44823:11:::1;::::0;::::1;;44822:12;44814:48;;;::::0;-1:-1:-1;;;44814:48:0;;24998:2:1;44814:48:0::1;::::0;::::1;24980:21:1::0;25037:2;25017:18;;;25010:30;25076:25;25056:18;;;25049:53;25119:18;;44814:48:0::1;24796:347:1::0;44814:48:0::1;44873:11;:18:::0;;-1:-1:-1;;44873:18:0::1;44887:4;44873:18;::::0;;44761:138::o;44222:283::-;44273:13;16225:10;44299:59;;;;-1:-1:-1;;;44299:59:0;;;;;;;:::i;:::-;44377:11;;-1:-1:-1;;;;;44377:11:0;:23;16225:10;44377:37;;-1:-1:-1;;;;;;44377:37:0;;;;;;;-1:-1:-1;;;;;194:32:1;;;44377:37:0;;;176:51:1;149:18;;44377:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44369:63;;;;-1:-1:-1;;;44369:63:0;;;;;;;:::i;:::-;44450:11;;-1:-1:-1;;;;;44450:11:0;:33;16225:10;44484:12;16145:98;22300:238;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22403:22:0;::::1;22381:110;;;::::0;-1:-1:-1;;;22381:110:0;;25350:2:1;22381:110:0::1;::::0;::::1;25332:21:1::0;25389:2;25369:18;;;25362:30;25428:34;25408:18;;;25401:62;-1:-1:-1;;;25479:18:1;;;25472:36;25525:19;;22381:110:0::1;25148:402:1::0;22381:110:0::1;22502:28;22521:8;22502:18;:28::i;:::-;22300:238:::0;:::o;42569:134::-;42659:11;;:36;;-1:-1:-1;;;42659:36:0;;-1:-1:-1;;;;;194:32:1;;;42659:36:0;;;176:51:1;42632:7:0;;42659:11;;:27;;149:18:1;;42659:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28811:131::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;28892:11:::1;:42:::0;;-1:-1:-1;;;;;;28892:42:0::1;-1:-1:-1::0;;;;;28892:42:0;;;::::1;::::0;;;::::1;::::0;;28811:131::o;21049:380::-;-1:-1:-1;;;;;21185:19:0;;21177:68;;;;-1:-1:-1;;;21177:68:0;;25757:2:1;21177:68:0;;;25739:21:1;25796:2;25776:18;;;25769:30;25835:34;25815:18;;;25808:62;-1:-1:-1;;;25886:18:1;;;25879:34;25930:19;;21177:68:0;25555:400:1;21177:68:0;-1:-1:-1;;;;;21264:21:0;;21256:68;;;;-1:-1:-1;;;21256:68:0;;26162:2:1;21256:68:0;;;26144:21:1;26201:2;26181:18;;;26174:30;26240:34;26220:18;;;26213:62;-1:-1:-1;;;26291:18:1;;;26284:32;26333:19;;21256:68:0;25960:398:1;21256:68:0;-1:-1:-1;;;;;21337:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21389:32;;2966:25:1;;;21389:32:0;;2939:18:1;21389:32:0;;;;;;;21049:380;;;:::o;31702:2160::-;-1:-1:-1;;;;;31834:18:0;;31826:68;;;;-1:-1:-1;;;31826:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31913:16:0;;31905:64;;;;-1:-1:-1;;;31905:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31998:29:0;;;;;;:25;:29;;;;;;;;:88;;;;-1:-1:-1;;;;;;32045:21:0;;32061:4;32045:21;;;;:40;;-1:-1:-1;22039:6:0;;-1:-1:-1;;;;;32070:15:0;;;22039:6;;32070:15;;32045:40;31980:624;;;32113:21;32137:28;32161:3;32137:19;32148:7;;32137:6;:10;;:19;;;;:::i;:::-;:23;;:28::i;:::-;32113:52;;32180:51;32196:4;32210;32217:13;32180:15;:51::i;:::-;32255:25;:6;32266:13;32255:10;:25::i;:::-;32246:34;;32098:194;31980:624;;;-1:-1:-1;;;;;32316:31:0;;;;;;:25;:31;;;;;;;;:86;;;;-1:-1:-1;;;;;;32365:19:0;;32379:4;32365:19;;;;:36;;-1:-1:-1;22039:6:0;;-1:-1:-1;;;;;32388:13:0;;;22039:6;;32388:13;;32365:36;32298:306;;;32429:20;32452:27;32475:3;32452:18;32463:6;;32452;:10;;:18;;;;:::i;:27::-;32429:50;;32494;32510:4;32524;32531:12;32494:15;:50::i;:::-;32568:24;:6;32579:12;32568:10;:24::i;:::-;32559:33;;32414:190;32298:306;32632:6;32614:15;32680:24;32698:4;32680:9;:24::i;:::-;32759:16;;32649:55;;-1:-1:-1;32735:40:0;;;;;;;32806;;-1:-1:-1;32835:11:0;;;;;;;32806:40;:66;;;;-1:-1:-1;32864:8:0;;;;32863:9;32806:66;:98;;;;-1:-1:-1;22039:6:0;;-1:-1:-1;;;;;32889:15:0;;;22039:6;;32889:15;;32806:98;:147;;;;-1:-1:-1;;;;;;32922:31:0;;;;;;:25;:31;;;;;;;;32921:32;32806:147;32788:224;;;32980:20;:18;:20::i;:::-;22039:6;;-1:-1:-1;;;;;33042:15:0;;;22039:6;;33042:15;;;;:51;;-1:-1:-1;33080:13:0;;-1:-1:-1;;;;;33074:19:0;;;33080:13;;33074:19;;33042:51;:98;;;;-1:-1:-1;33124:15:0;;-1:-1:-1;;;;;33110:30:0;;;33124:15;;33110:30;;33042:98;:134;;;;-1:-1:-1;;;;;;33157:19:0;;33171:4;33157:19;;33042:134;:172;;;;-1:-1:-1;;;;;;33193:21:0;;33209:4;33193:21;;33042:172;33024:786;;;33249:11;;;;33241:48;;;;-1:-1:-1;;;33241:48:0;;27375:2:1;33241:48:0;;;27357:21:1;27414:2;27394:18;;;27387:30;27453:26;27433:18;;;27426:54;27497:18;;33241:48:0;27173:348:1;33241:48:0;33334:15;;-1:-1:-1;;;;;33328:21:0;;;33334:15;;33328:21;;;;:64;;-1:-1:-1;33376:16:0;;-1:-1:-1;;;;;33370:22:0;;;33376:16;;33370:22;;33328:64;:98;;;;-1:-1:-1;33419:7:0;;-1:-1:-1;;;;;33413:13:0;;;33419:7;;33413:13;;33328:98;:142;;;;-1:-1:-1;33455:15:0;;-1:-1:-1;;;;;33447:23:0;;;33455:15;;33447:23;;33328:142;:187;;;;-1:-1:-1;33499:16:0;;-1:-1:-1;;;;;33491:24:0;;;33499:16;;33491:24;;33328:187;:223;;;;-1:-1:-1;33544:7:0;;-1:-1:-1;;;;;33536:15:0;;;33544:7;;33536:15;;33328:223;33306:493;;;33586:21;33610:22;33628:2;33610:9;:22::i;:::-;33711:5;;33586:46;;-1:-1:-1;33711:15:0;;33721:4;33711:9;:15::i;:::-;33681:26;:7;33693:13;33681:11;:26::i;:::-;:45;;33651:132;;;;-1:-1:-1;;;33651:132:0;;27728:2:1;33651:132:0;;;27710:21:1;27767:2;27747:18;;;27740:30;-1:-1:-1;;;27786:18:1;;;27779:43;27839:18;;33651:132:0;27526:337:1;33651:132:0;33567:232;33306:493;33820:34;33836:4;33842:2;33846:7;33820:15;:34::i;:::-;31815:2047;;;31702:2160;;;:::o;24221:98::-;24279:7;24306:5;24310:1;24306;:5;:::i;:::-;24299:12;24221:98;-1:-1:-1;;;24221:98:0:o;24009:::-;24067:7;24094:5;24098:1;24094;:5;:::i;19265:770::-;-1:-1:-1;;;;;19405:20:0;;19397:70;;;;-1:-1:-1;;;19397:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19486:23:0;;19478:71;;;;-1:-1:-1;;;19478:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19646:17:0;;19622:21;19646:17;;;;;;;;;;;19696:23;;;;19674:111;;;;-1:-1:-1;;;19674:111:0;;28243:2:1;19674:111:0;;;28225:21:1;28282:2;28262:18;;;28255:30;28321:34;28301:18;;;28294:62;-1:-1:-1;;;28372:18:1;;;28365:36;28418:19;;19674:111:0;28041:402:1;19674:111:0;-1:-1:-1;;;;;19821:17:0;;;:9;:17;;;;;;;;;;;19841:22;;;19821:42;;19885:20;;;;;;;;:30;;19857:6;;19821:9;19885:30;;19857:6;;19885:30;:::i;:::-;;;;;;;;19950:9;-1:-1:-1;;;;;19933:35:0;19942:6;-1:-1:-1;;;;;19933:35:0;;19961:6;19933:35;;;;2966:25:1;;2954:2;2939:18;;2820:177;19933:35:0;;;;;;;;19386:649;19265:770;;;:::o;24115:98::-;24173:7;24200:5;24204:1;24200;:5;:::i;22546:191::-;22639:6;;;-1:-1:-1;;;;;22656:17:0;;;-1:-1:-1;;;;;;22656:17:0;;;;;;;22689:40;;22639:6;;;22656:17;22639:6;;22689:40;;22620:16;;22689:40;22609:128;22546:191;:::o;39444:463::-;39605:11;;:107;;-1:-1:-1;;;39605:107:0;;-1:-1:-1;;;;;15381:32:1;;;39605:107:0;;;15363:51:1;15430:18;;;15423:34;;;15473:18;;;15466:34;;;39585:17:0;;39605:11;;:22;;15336:18:1;;39605:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39753:16;;39585:127;;-1:-1:-1;39723:122:0;;-1:-1:-1;;;;;39753:16:0;39784:7;39806:28;:13;39585:127;39806:17;:28::i;39723:122::-;39856:11;;:43;;-1:-1:-1;;;39856:43:0;;-1:-1:-1;;;;;14654:32:1;;;39856:43:0;;;14636:51:1;14703:18;;;14696:34;;;39856:11:0;;;;:23;;14609:18:1;;39856:43:0;14462:274:1;39915:250:0;40075:16;;40050:53;;40066:7;;-1:-1:-1;;;;;40075:16:0;40093:9;40050:15;:53::i;:::-;40114:11;;:43;;-1:-1:-1;;;40114:43:0;;-1:-1:-1;;;;;14654:32:1;;;40114:43:0;;;14636:51:1;14703:18;;;14696:34;;;40114:11:0;;;;:23;;14609:18:1;;40114:43:0;14462:274:1;31339:355:0;-1:-1:-1;;;;;31444:31:0;;;;;;:25;:31;;;;;;:40;;;:31;;;;:40;;;31422:156;;;;-1:-1:-1;;;31422:156:0;;28783:2:1;31422:156:0;;;28765:21:1;28822:2;28802:18;;;28795:30;28861:34;28841:18;;;28834:62;28932:34;28912:18;;;28905:62;-1:-1:-1;;;28983:19:1;;;28976:33;29026:19;;31422:156:0;28581:470:1;31422:156:0;-1:-1:-1;;;;;31589:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;31589:39:0;;;;;;;;;;31646:40;;31589:39;;:31;31646:40;;;31339:355;;:::o;24327:98::-;24385:7;24412:5;24416:1;24412;:5;:::i;35242:1145::-;35291:8;:15;;-1:-1:-1;;35291:15:0;35302:4;35291:15;;;:8;35348:24;35366:4;35348:9;:24::i;:::-;35317:55;;35383:16;35402:43;35441:3;35402:34;35427:8;;35402:20;:24;;:34;;;;:::i;:43::-;35383:62;;35456:17;35476:31;35503:3;35476:22;35489:8;;35476;:12;;:22;;;;:::i;:31::-;35456:51;-1:-1:-1;35518:17:0;35538:23;:8;35456:51;35538:12;:23::i;:::-;35518:43;;35574:25;35602:69;35657:3;35602:36;35627:10;;35602:20;:24;;:36;;;;:::i;:69::-;35742:16;;35574:97;;-1:-1:-1;35684:117:0;;35722:4;;-1:-1:-1;;;;;35742:16:0;35574:97;35684:15;:117::i;:::-;35814:18;35835:75;35896:3;35835:42;35860:16;;35835:20;:24;;:42;;;;:::i;:75::-;35814:96;;35923:26;35938:10;35923:14;:26::i;:::-;35962:42;35979:24;35997:4;35979:9;:24::i;:::-;35962:16;:42::i;:::-;36015:22;36040:38;:9;36068;36040:27;:38::i;:::-;36186:7;;36015:63;;-1:-1:-1;36112:21:0;;36091:18;;-1:-1:-1;;;;;36186:7:0;36206:45;36015:63;36206:25;36112:21;36221:9;36206:14;:25::i;:45::-;36186:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36292:15:0;;:56;;36171:85;;-1:-1:-1;;;;;;36292:15:0;;36329:4;36320:23;;36292:56;;;;36320:23;36292:15;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36363:8:0;:16;;-1:-1:-1;;36363:16:0;;;-1:-1:-1;;;;;;;;;;35242:1145:0:o;33870:420::-;33929:12;33944:13;:6;33955:1;33944:10;:13::i;:::-;33929:28;-1:-1:-1;33968:17:0;33988:16;:6;33929:28;33988:10;:16::i;:::-;33968:36;-1:-1:-1;34042:21:0;34076:22;34093:4;34076:16;:22::i;:::-;34111:18;34132:41;:21;34158:14;34132:25;:41::i;:::-;34111:62;;34186:35;34199:9;34210:10;34186:12;:35::i;:::-;34239:43;;;29690:25:1;;;29746:2;29731:18;;29724:34;;;29774:18;;;29767:34;;;34239:43:0;;29678:2:1;29663:18;34239:43:0;;;;;;;33918:372;;;;33870:420;:::o;34298:503::-;34388:16;;;34402:1;34388:16;;;;;;;;34364:21;;34388:16;;;;;;;;;;-1:-1:-1;34388:16:0;34364:40;;34433:4;34415;34420:1;34415:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34415:23:0;;;:7;;;;;;;;;;:23;;;;34459:15;;:22;;;-1:-1:-1;;;34459:22:0;;;;:15;;;;;:20;;:22;;;;;34415:7;;34459:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34449:4;34454:1;34449:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34449:32:0;;;:7;;;;;;;;;:32;34526:15;;34494:62;;34511:4;;34526:15;34544:11;34494:8;:62::i;:::-;34569:15;;:224;;-1:-1:-1;;;34569:224:0;;-1:-1:-1;;;;;34569:15:0;;;;:66;;:224;;34650:11;;34569:15;;34720:4;;34747;;34767:15;;34569:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34809:425;34922:15;;34890:62;;34907:4;;-1:-1:-1;;;;;34922:15:0;34940:11;34890:8;:62::i;:::-;34965:15;;35169:16;;34965:261;;-1:-1:-1;;;34965:261:0;;35037:4;34965:261;;;31138:34:1;31188:18;;;31181:34;;;34965:15:0;31231:18:1;;;31224:34;;;31274:18;;;31267:34;-1:-1:-1;;;;;35169:16:0;;;31317:19:1;;;31310:44;35200:15:0;31370:19:1;;;31363:35;34965:15:0;;;:31;;35004:9;;31072:19:1;;34965:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;238:180:1:-;297:6;350:2;338:9;329:7;325:23;321:32;318:52;;;366:1;363;356:12;318:52;-1:-1:-1;389:23:1;;238:180;-1:-1:-1;238:180:1:o;423:250::-;508:1;518:113;532:6;529:1;526:13;518:113;;;608:11;;;602:18;589:11;;;582:39;554:2;547:10;518:113;;;-1:-1:-1;;665:1:1;647:16;;640:27;423:250::o;678:271::-;720:3;758:5;752:12;785:6;780:3;773:19;801:76;870:6;863:4;858:3;854:14;847:4;840:5;836:16;801:76;:::i;:::-;931:2;910:15;-1:-1:-1;;906:29:1;897:39;;;;938:4;893:50;;678:271;-1:-1:-1;;678:271:1:o;954:220::-;1103:2;1092:9;1085:21;1066:4;1123:45;1164:2;1153:9;1149:18;1141:6;1123:45;:::i;1179:131::-;-1:-1:-1;;;;;1254:31:1;;1244:42;;1234:70;;1300:1;1297;1290:12;1315:315;1383:6;1391;1444:2;1432:9;1423:7;1419:23;1415:32;1412:52;;;1460:1;1457;1450:12;1412:52;1499:9;1486:23;1518:31;1543:5;1518:31;:::i;:::-;1568:5;1620:2;1605:18;;;;1592:32;;-1:-1:-1;;;1315:315:1:o;1827:494::-;2007:2;1992:18;;1996:9;2087:6;1965:4;2121:194;2135:4;2132:1;2129:11;2121:194;;;2194:13;;2182:26;;2231:4;2255:12;;;;2290:15;;;;2155:1;2148:9;2121:194;;;2125:3;;;1827:494;;;;:::o;2326:255::-;2393:6;2446:2;2434:9;2425:7;2421:23;2417:32;2414:52;;;2462:1;2459;2452:12;2414:52;2501:9;2488:23;2520:31;2545:5;2520:31;:::i;3254:456::-;3331:6;3339;3347;3400:2;3388:9;3379:7;3375:23;3371:32;3368:52;;;3416:1;3413;3406:12;3368:52;3455:9;3442:23;3474:31;3499:5;3474:31;:::i;:::-;3524:5;-1:-1:-1;3581:2:1;3566:18;;3553:32;3594:33;3553:32;3594:33;:::i;:::-;3254:456;;3646:7;;-1:-1:-1;;;3700:2:1;3685:18;;;;3672:32;;3254:456::o;3904:127::-;3965:10;3960:3;3956:20;3953:1;3946:31;3996:4;3993:1;3986:15;4020:4;4017:1;4010:15;4036:275;4107:2;4101:9;4172:2;4153:13;;-1:-1:-1;;4149:27:1;4137:40;;4207:18;4192:34;;4228:22;;;4189:62;4186:88;;;4254:18;;:::i;:::-;4290:2;4283:22;4036:275;;-1:-1:-1;4036:275:1:o;4316:187::-;4365:4;4398:18;4390:6;4387:30;4384:56;;;4420:18;;:::i;:::-;-1:-1:-1;4486:2:1;4465:15;-1:-1:-1;;4461:29:1;4492:4;4457:40;;4316:187::o;4508:464::-;4551:5;4604:3;4597:4;4589:6;4585:17;4581:27;4571:55;;4622:1;4619;4612:12;4571:55;4658:6;4645:20;4689:49;4705:32;4734:2;4705:32;:::i;:::-;4689:49;:::i;:::-;4763:2;4754:7;4747:19;4809:3;4802:4;4797:2;4789:6;4785:15;4781:26;4778:35;4775:55;;;4826:1;4823;4816:12;4775:55;4891:2;4884:4;4876:6;4872:17;4865:4;4856:7;4852:18;4839:55;4939:1;4914:16;;;4932:4;4910:27;4903:38;;;;4918:7;4508:464;-1:-1:-1;;;4508:464:1:o;4977:458::-;5064:6;5072;5080;5133:2;5121:9;5112:7;5108:23;5104:32;5101:52;;;5149:1;5146;5139:12;5101:52;5185:9;5172:23;5162:33;;5246:2;5235:9;5231:18;5218:32;5273:18;5265:6;5262:30;5259:50;;;5305:1;5302;5295:12;5259:50;5328;5370:7;5361:6;5350:9;5346:22;5328:50;:::i;:::-;5318:60;;;5425:2;5414:9;5410:18;5397:32;5387:42;;4977:458;;;;;:::o;5440:316::-;5517:6;5525;5533;5586:2;5574:9;5565:7;5561:23;5557:32;5554:52;;;5602:1;5599;5592:12;5554:52;-1:-1:-1;;5625:23:1;;;5695:2;5680:18;;5667:32;;-1:-1:-1;5746:2:1;5731:18;;;5718:32;;5440:316;-1:-1:-1;5440:316:1:o;5969:946::-;6053:6;6084:2;6127;6115:9;6106:7;6102:23;6098:32;6095:52;;;6143:1;6140;6133:12;6095:52;6183:9;6170:23;6212:18;6253:2;6245:6;6242:14;6239:34;;;6269:1;6266;6259:12;6239:34;6307:6;6296:9;6292:22;6282:32;;6352:7;6345:4;6341:2;6337:13;6333:27;6323:55;;6374:1;6371;6364:12;6323:55;6410:2;6397:16;6432:2;6428;6425:10;6422:36;;;6438:18;;:::i;:::-;6484:2;6481:1;6477:10;6467:20;;6507:28;6531:2;6527;6523:11;6507:28;:::i;:::-;6569:15;;;6639:11;;;6635:20;;;6600:12;;;;6667:19;;;6664:39;;;6699:1;6696;6689:12;6664:39;6723:11;;;;6743:142;6759:6;6754:3;6751:15;6743:142;;;6825:17;;6813:30;;6776:12;;;;6863;;;;6743:142;;;6904:5;5969:946;-1:-1:-1;;;;;;;;5969:946:1:o;6920:248::-;6988:6;6996;7049:2;7037:9;7028:7;7024:23;7020:32;7017:52;;;7065:1;7062;7055:12;7017:52;-1:-1:-1;;7088:23:1;;;7158:2;7143:18;;;7130:32;;-1:-1:-1;6920:248:1:o;7173:118::-;7259:5;7252:13;7245:21;7238:5;7235:32;7225:60;;7281:1;7278;7271:12;7296:241;7352:6;7405:2;7393:9;7384:7;7380:23;7376:32;7373:52;;;7421:1;7418;7411:12;7373:52;7460:9;7447:23;7479:28;7501:5;7479:28;:::i;7542:382::-;7607:6;7615;7668:2;7656:9;7647:7;7643:23;7639:32;7636:52;;;7684:1;7681;7674:12;7636:52;7723:9;7710:23;7742:31;7767:5;7742:31;:::i;:::-;7792:5;-1:-1:-1;7849:2:1;7834:18;;7821:32;7862:30;7821:32;7862:30;:::i;:::-;7911:7;7901:17;;;7542:382;;;;;:::o;8157:390::-;8235:6;8243;8296:2;8284:9;8275:7;8271:23;8267:32;8264:52;;;8312:1;8309;8302:12;8264:52;8352:9;8339:23;8385:18;8377:6;8374:30;8371:50;;;8417:1;8414;8407:12;8371:50;8440;8482:7;8473:6;8462:9;8458:22;8440:50;:::i;:::-;8430:60;8537:2;8522:18;;;;8509:32;;-1:-1:-1;;;;8157:390:1:o;8552:388::-;8620:6;8628;8681:2;8669:9;8660:7;8656:23;8652:32;8649:52;;;8697:1;8694;8687:12;8649:52;8736:9;8723:23;8755:31;8780:5;8755:31;:::i;:::-;8805:5;-1:-1:-1;8862:2:1;8847:18;;8834:32;8875:33;8834:32;8875:33;:::i;8945:356::-;9147:2;9129:21;;;9166:18;;;9159:30;9225:34;9220:2;9205:18;;9198:62;9292:2;9277:18;;8945:356::o;9306:380::-;9385:1;9381:12;;;;9428;;;9449:61;;9503:4;9495:6;9491:17;9481:27;;9449:61;9556:2;9548:6;9545:14;9525:18;9522:38;9519:161;;9602:10;9597:3;9593:20;9590:1;9583:31;9637:4;9634:1;9627:15;9665:4;9662:1;9655:15;9519:161;;9306:380;;;:::o;9691:344::-;9893:2;9875:21;;;9932:2;9912:18;;;9905:30;-1:-1:-1;;;9966:2:1;9951:18;;9944:50;10026:2;10011:18;;9691:344::o;10040:245::-;10107:6;10160:2;10148:9;10139:7;10135:23;10131:32;10128:52;;;10176:1;10173;10166:12;10128:52;10208:9;10202:16;10227:28;10249:5;10227:28;:::i;10290:337::-;10492:2;10474:21;;;10531:2;10511:18;;;10504:30;-1:-1:-1;;;10565:2:1;10550:18;;10543:43;10618:2;10603:18;;10290:337::o;10632:762::-;10725:6;10778:2;10766:9;10757:7;10753:23;10749:32;10746:52;;;10794:1;10791;10784:12;10746:52;10843:7;10836:4;10825:9;10821:20;10817:34;10807:62;;10865:1;10862;10855:12;10807:62;10898:2;10892:9;10940:2;10932:6;10928:15;11009:6;10997:10;10994:22;10973:18;10961:10;10958:34;10955:62;10952:88;;;11020:18;;:::i;:::-;11060:10;11056:2;11049:22;;11091:6;11135:2;11124:9;11120:18;11161:7;11153:6;11150:19;11147:39;;;11182:1;11179;11172:12;11147:39;11206:9;11224:139;11240:6;11235:3;11232:15;11224:139;;;11308:10;;11296:23;;11348:4;11339:14;;;;11257;11224:139;;;-1:-1:-1;11382:6:1;;10632:762;-1:-1:-1;;;;;10632:762:1:o;11758:649::-;11838:6;11891:2;11879:9;11870:7;11866:23;11862:32;11859:52;;;11907:1;11904;11897:12;11859:52;11940:9;11934:16;11973:18;11965:6;11962:30;11959:50;;;12005:1;12002;11995:12;11959:50;12028:22;;12081:4;12073:13;;12069:27;-1:-1:-1;12059:55:1;;12110:1;12107;12100:12;12059:55;12139:2;12133:9;12164:49;12180:32;12209:2;12180:32;:::i;12164:49::-;12236:2;12229:5;12222:17;12276:7;12271:2;12266;12262;12258:11;12254:20;12251:33;12248:53;;;12297:1;12294;12287:12;12248:53;12310:67;12374:2;12369;12362:5;12358:14;12353:2;12349;12345:11;12310:67;:::i;:::-;12396:5;11758:649;-1:-1:-1;;;;;11758:649:1:o;12821:127::-;12882:10;12877:3;12873:20;12870:1;12863:31;12913:4;12910:1;12903:15;12937:4;12934:1;12927:15;12953:125;13018:9;;;13039:10;;;13036:36;;;13052:18;;:::i;13444:410::-;13646:2;13628:21;;;13685:2;13665:18;;;13658:30;13724:34;13719:2;13704:18;;13697:62;-1:-1:-1;;;13790:2:1;13775:18;;13768:44;13844:3;13829:19;;13444:410::o;14273:184::-;14343:6;14396:2;14384:9;14375:7;14371:23;14367:32;14364:52;;;14412:1;14409;14402:12;14364:52;-1:-1:-1;14435:16:1;;14273:184;-1:-1:-1;14273:184:1:o;15511:388::-;-1:-1:-1;;;;;15716:32:1;;15698:51;;15785:2;15780;15765:18;;15758:30;;;-1:-1:-1;;15805:45:1;;15831:18;;15823:6;15805:45;:::i;:::-;15797:53;;15886:6;15881:2;15870:9;15866:18;15859:34;15511:388;;;;;;:::o;17447:127::-;17508:10;17503:3;17499:20;17496:1;17489:31;17539:4;17536:1;17529:15;17563:4;17560:1;17553:15;18339:632;18510:2;18562:21;;;18632:13;;18535:18;;;18654:22;;;18481:4;;18510:2;18733:15;;;;18707:2;18692:18;;;18481:4;18776:169;18790:6;18787:1;18784:13;18776:169;;;18851:13;;18839:26;;18920:15;;;;18885:12;;;;18812:1;18805:9;18776:169;;;-1:-1:-1;18962:3:1;;18339:632;-1:-1:-1;;;;;;18339:632:1:o;19737:251::-;19807:6;19860:2;19848:9;19839:7;19835:23;19831:32;19828:52;;;19876:1;19873;19866:12;19828:52;19908:9;19902:16;19927:31;19952:5;19927:31;:::i;26363:401::-;26565:2;26547:21;;;26604:2;26584:18;;;26577:30;26643:34;26638:2;26623:18;;26616:62;-1:-1:-1;;;26709:2:1;26694:18;;26687:35;26754:3;26739:19;;26363:401::o;26769:399::-;26971:2;26953:21;;;27010:2;26990:18;;;26983:30;27049:34;27044:2;27029:18;;27022:62;-1:-1:-1;;;27115:2:1;27100:18;;27093:33;27158:3;27143:19;;26769:399::o;27868:168::-;27941:9;;;27972;;27989:15;;;27983:22;;27969:37;27959:71;;28010:18;;:::i;28448:128::-;28515:9;;;28536:11;;;28533:37;;;28550:18;;:::i;29056:217::-;29096:1;29122;29112:132;;29166:10;29161:3;29157:20;29154:1;29147:31;29201:4;29198:1;29191:15;29229:4;29226:1;29219:15;29112:132;-1:-1:-1;29258:9:1;;29056:217::o;29812:980::-;30074:4;30122:3;30111:9;30107:19;30153:6;30142:9;30135:25;30179:2;30217:6;30212:2;30201:9;30197:18;30190:34;30260:3;30255:2;30244:9;30240:18;30233:31;30284:6;30319;30313:13;30350:6;30342;30335:22;30388:3;30377:9;30373:19;30366:26;;30427:2;30419:6;30415:15;30401:29;;30448:1;30458:195;30472:6;30469:1;30466:13;30458:195;;;30537:13;;-1:-1:-1;;;;;30533:39:1;30521:52;;30628:15;;;;30593:12;;;;30569:1;30487:9;30458:195;;;-1:-1:-1;;;;;;;30709:32:1;;;;30704:2;30689:18;;30682:60;-1:-1:-1;;;30773:3:1;30758:19;30751:35;30670:3;29812:980;-1:-1:-1;;;29812:980:1:o;31409:306::-;31497:6;31505;31513;31566:2;31554:9;31545:7;31541:23;31537:32;31534:52;;;31582:1;31579;31572:12;31534:52;31611:9;31605:16;31595:26;;31661:2;31650:9;31646:18;31640:25;31630:35;;31705:2;31694:9;31690:18;31684:25;31674:35;;31409:306;;;;;:::o

Swarm Source

ipfs://196c9aa2616d071f00062df5ce807c0f16e48d53d178082192525385c4f41f19

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.