ETH Price: $3,086.14 (-0.55%)
Gas: 2 Gwei

Token

Autist Wealth Management (AWM)
 

Overview

Max Total Supply

31,986,523.105820349640275579 AWM

Holders

305

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
yasnakeoil.eth
Balance
60.948244985238019463 AWM

Value
$0.00
0x1D4C3b9F8F49D6Ac44e398F766F520a3CDB0f3D5
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
AWM

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-08
*/

/*

REWARDS SO SIMPLELE AN AUTIST CAN HANDLELE IT! 

Twitter: https://twitter.com/AutistWealthMgt
TG: https://t.me/AWM_Portal
Website: http://www.autistwealthmanagement.com/

*/

// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.17;

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

}

interface InterfaceLP {
    function sync() external;
}

abstract contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(
        string memory _tokenName,
        string memory _tokenSymbol,
        uint8 _tokenDecimals
    ) {
        _name = _tokenName;
        _symbol = _tokenSymbol;
        _decimals = _tokenDecimals;
    }

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

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

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

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    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);
}

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

contract Ownable {
    address private _owner;

    event OwnershipRenounced(address indexed previousOwner);

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

    constructor() {
        _owner = msg.sender;
    }

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

    modifier onlyOwner() {
        require(msg.sender == _owner, "Not owner");
        _;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipRenounced(_owner);
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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

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

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

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

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

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

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

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

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

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

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

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

contract AWM is ERC20Detailed, Ownable {

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

    uint256 public rewardYield = 315920639267394;
    uint256 public rewardYieldDenominator = 100000000000000000;

    uint256 public rebaseFrequency = 1 days / 12; // 7200 seconds - every 2 hours
    uint256 public nextRebase;
    bool public autoRebase = true;

    uint256 public timeBetweenRebaseReduction = 15 days;
    uint256 public rebaseReductionAmount = 3; // 30% reduction
    uint256 public lastReduction;

    uint256 public maxTxnAmount;
    uint256 public maxWallet;

    mapping(address => bool) _isFeeExempt;
    address[] public _makerPairs;
    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 public constant MAX_FEE_RATE = 5;
    uint256 public constant MAX_REBASE_FREQUENCY = 7200;
    uint256 public constant MIN_REBASE_FREQUENCY = 7200;
    uint256 private constant DECIMALS = 18;
    uint256 private constant MAX_UINT256 = type(uint256).max;
    uint256 private constant INITIAL_FRAGMENTS_SUPPLY = 6_942_000 * 10**DECIMALS;
    uint256 private constant TOTAL_GONS = type(uint256).max - (type(uint256).max % INITIAL_FRAGMENTS_SUPPLY);
    uint256 private constant MAX_SUPPLY = 69_420_000 * 10**DECIMALS; 

    event LogRebase(uint256 indexed epoch, uint256 totalSupply);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event RemovedLimits();

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    address public marketingAddress;
    address public treasuryAddress;
    address public PAIREDTOKEN;

    IDEXRouter public immutable router;
    address public pair;

    TokenHandler public tokenHandler;

     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferBlock; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public liquidityFee = 0;
    uint256 public marketingFee = 3;
    uint256 public treasuryFee = 2;
    uint256 public totalFee = liquidityFee + marketingFee + treasuryFee;
    uint256 public feeDenominator = 100;
    
    bool public limitsInEffect = true;

    bool inSwap;

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }
    
    uint256 private _totalSupply;
    uint256 private _gonsPerFragment;
    uint256 private gonSwapThreshold = (TOTAL_GONS / 100000 * 25);

    mapping(address => uint256) private _gonBalances;
    mapping(address => mapping(address => uint256)) private _allowedFragments;

    modifier validRecipient(address to) {
        require(to != address(0x0));
        _;
    }

    constructor() ERC20Detailed(block.chainid==1 ? "Autist Wealth Management" : "AWM", block.chainid==1 ? "AWM" : "AWM", 18) {
    //constructor() ERC20Detailed(block.chainid==1 ? "Autist Wealth Management" : "AWM", block.chainid==1 ? "AWM" : "AWM", 18) {
        address dexAddress;
        address pairedTokenAddress;
        if(block.chainid == 1){
            dexAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
            pairedTokenAddress = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; //WETH
        } else {
            revert("Chain not configured");
        }

        marketingAddress = address(0xa773aC8751AE7F4b9B5D4393Ce3204fDA32346ef); //Marketing
        treasuryAddress = address(0x40bF1fd3578Bc4F8BadD3cbCbD419027E8614073); //Treasury

        nextRebase = block.timestamp + rebaseFrequency;
        
        PAIREDTOKEN = pairedTokenAddress;

        router = IDEXRouter(dexAddress);

        tokenHandler = new TokenHandler();

        _allowedFragments[address(this)][address(router)] = ~uint256(0);
        _allowedFragments[address(msg.sender)][address(router)] = ~uint256(0);
        _allowedFragments[address(this)][address(this)] = ~uint256(0);

        _totalSupply = INITIAL_FRAGMENTS_SUPPLY;
        _gonBalances[msg.sender] = TOTAL_GONS / 100 * 95;
        _gonBalances[treasuryAddress] += TOTAL_GONS - _gonBalances[msg.sender];
        _gonsPerFragment = TOTAL_GONS/(_totalSupply);

        maxTxnAmount = _totalSupply * 1 / 100; // 1% max txn
        maxWallet = _totalSupply * 1 / 100; // 1% max wallet
        
        _isFeeExempt[address(this)] = true;
        _isFeeExempt[address(msg.sender)] = true;
        _isFeeExempt[address(dexAddress)] = true;
        _isFeeExempt[address(0xdead)] = true;

        emit Transfer(address(0x0), msg.sender, balanceOf(msg.sender));
        emit Transfer(address(0x0), treasuryAddress, balanceOf(treasuryAddress));  
    }

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

    function allowance(address owner_, address spender) external view override returns (uint256){
        return _allowedFragments[owner_][spender];
    }

    function balanceOf(address who) public view override returns (uint256) {
        return _gonBalances[who]/(_gonsPerFragment);
    }

    function checkFeeExempt(address _addr) external view returns (bool) {
        return _isFeeExempt[_addr];
    }

    function checkSwapThreshold() external view returns (uint256) {
        return gonSwapThreshold/(_gonsPerFragment);
    }

    function shouldRebase() public view returns (bool) {
        return nextRebase <= block.timestamp;
    }

    function shouldTakeFee(address from, address to) internal view returns (bool) {
        if(_isFeeExempt[from] || _isFeeExempt[to]){
            return false;
        } else {
            return (automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to]);
        }
    }

    function shouldSwapBack() internal view returns (bool) {
        return
        !inSwap &&
        swapEnabled &&
        totalFee > 0 &&
        _gonBalances[address(this)] >= gonSwapThreshold;
    }

    function manualSync() public {
        for(uint i = 0; i < _makerPairs.length; i++){
            try InterfaceLP(_makerPairs[i]).sync(){} catch {}
        }
    }

    function transfer(address to, uint256 value) external override validRecipient(to) returns (bool){
        _transferFrom(msg.sender, to, value);
        return true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        emit RemovedLimits();
    }

    // alter the paired token so bots can't prep for new path (hypothetically)
    function alterToken(address newToken) external onlyOwner {
        require(newToken != address(0), "Zero address");
        require(!tradingActive, "trading already active");
        pair = IDEXFactory(router.factory()).createPair(address(this), newToken);
        _allowedFragments[address(this)][pair] = ~uint256(0);
        setAutomatedMarketMakerPair(pair, true);
        PAIREDTOKEN = newToken;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {

        if(!tradingActive){
            require(_isFeeExempt[sender] || _isFeeExempt[recipient], "Trading is paused");
        }

        if(limitsInEffect){
            if (!_isFeeExempt[sender] && !_isFeeExempt[recipient]){

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (recipient != address(router) && !automatedMarketMakerPairs[recipient]){
                        require(_holderLastTransferBlock[tx.origin] + 2 < block.number && _holderLastTransferBlock[recipient] + 2 < block.number, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferBlock[tx.origin] = block.number;
                        _holderLastTransferBlock[recipient] = block.number;
                    }
                }
                //when buy
                if (automatedMarketMakerPairs[sender]) {
                    require(amount <= maxTxnAmount, "Buy transfer amount exceeds the max buy.");
                }
                if (!automatedMarketMakerPairs[recipient]){
                    require(balanceOf(recipient) + amount <= maxWallet, "Max Wallet Exceeded");
                }
            }
        }

        if(!_isFeeExempt[sender] && !_isFeeExempt[recipient] && shouldSwapBack() && !automatedMarketMakerPairs[sender]){
            inSwap = true;
            swapBack();
            inSwap = false;
        }

        if(autoRebase && !automatedMarketMakerPairs[sender] && !inSwap && shouldRebase() && !_isFeeExempt[recipient] && !_isFeeExempt[sender]){
            rebase();
        }

        uint256 gonAmount = amount*(_gonsPerFragment);

        _gonBalances[sender] = _gonBalances[sender]-(gonAmount);

        uint256 gonAmountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, gonAmount) : gonAmount;
        _gonBalances[recipient] = _gonBalances[recipient]+(gonAmountReceived);

        emit Transfer(sender, recipient, gonAmountReceived/(_gonsPerFragment));

        return true;
    }

    function transferFrom(address from, address to,  uint256 value) external override validRecipient(to) returns (bool) {
        if (_allowedFragments[from][msg.sender] != MAX_UINT256) {
            require(_allowedFragments[from][msg.sender] >= value,"Insufficient Allowance");
            _allowedFragments[from][msg.sender] = _allowedFragments[from][msg.sender]-(value);
        }
        _transferFrom(from, to, value);
        return true;
    }

    
    function swapBack() public {

        uint256 contractBalance = balanceOf(address(this));

        if(contractBalance > gonSwapThreshold/(_gonsPerFragment) * 20){
            contractBalance = gonSwapThreshold/(_gonsPerFragment) * 20;
        }

        uint256 tokensForLiquidity = contractBalance * liquidityFee / totalFee;

        if(tokensForLiquidity > 0 && contractBalance >= tokensForLiquidity){
            _transferFrom(address(this), pair, tokensForLiquidity);
            manualSync();
            contractBalance -= tokensForLiquidity;
            tokensForLiquidity = 0;
        }
        
        swapTokensForPAIREDTOKEN(contractBalance);

        tokenHandler.sendTokenToOwner(address(PAIREDTOKEN));
        
        uint256 pairedTokenBalance = IERC20(PAIREDTOKEN).balanceOf(address(this));

        uint256 pairedTokenForTreasury = pairedTokenBalance * treasuryFee / (treasuryFee + marketingFee);

        if(pairedTokenForTreasury > 0){
            IERC20(PAIREDTOKEN).transfer(treasuryAddress, pairedTokenForTreasury);
        }

        if(IERC20(PAIREDTOKEN).balanceOf(address(this)) > 0){
            IERC20(PAIREDTOKEN).transfer(marketingAddress, IERC20(PAIREDTOKEN).balanceOf(address(this)));
        }
    }

    function swapTokensForPAIREDTOKEN(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = address(PAIREDTOKEN);

        // make the swap
        router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount
            path,
            address(tokenHandler),
            block.timestamp
        );
    }

    function takeFee(address sender, uint256 gonAmount) internal returns (uint256){

        uint256 feeAmount = gonAmount*(totalFee)/(feeDenominator);

        _gonBalances[address(this)] = _gonBalances[address(this)]+(feeAmount);
        emit Transfer(sender, address(this), feeAmount/(_gonsPerFragment));

        return gonAmount-(feeAmount);
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool){
        uint256 oldValue = _allowedFragments[msg.sender][spender];
        if (subtractedValue >= oldValue) {
            _allowedFragments[msg.sender][spender] = 0;
        } else {
            _allowedFragments[msg.sender][spender] = oldValue-(
                subtractedValue
            );
        }
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool){
        _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][
        spender
        ]+(addedValue);
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

    function approve(address spender, uint256 value) public override returns (bool){
        _allowedFragments[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function getSupplyDeltaOnNextRebase() external view returns (uint256){
        return (_totalSupply*rewardYield)/rewardYieldDenominator;
    }

    function rebase() private returns (uint256) {
        uint256 epoch = block.timestamp;

        if(lastReduction + timeBetweenRebaseReduction <= block.timestamp){
            rewardYield -= rewardYield * rebaseReductionAmount / 10;
            lastReduction = block.timestamp;
        }

        uint256 supplyDelta = (_totalSupply*rewardYield)/rewardYieldDenominator;
        
        nextRebase = nextRebase + rebaseFrequency;

        if (supplyDelta == 0) {
            emit LogRebase(epoch, _totalSupply);
            return _totalSupply;
        }

        _totalSupply = _totalSupply+supplyDelta;

        if (_totalSupply > MAX_SUPPLY) {
            _totalSupply = MAX_SUPPLY;
        }

        _gonsPerFragment = TOTAL_GONS/(_totalSupply);

        manualSync();

        emit LogRebase(epoch, _totalSupply);
        return _totalSupply;
    }

    function manualRebase() external {
        require(!inSwap, "Try again");
        require(shouldRebase(), "Not in time");
        rebase();
    }
    
    function setAutomatedMarketMakerPair(address _pair, bool _value) public onlyOwner {
        require(automatedMarketMakerPairs[_pair] != _value, "Value already set");

        automatedMarketMakerPairs[_pair] = _value;

        if(_value){
            _makerPairs.push(_pair);
        } else {
            require(_makerPairs.length > 1, "Required 1 pair");
            for (uint256 i = 0; i < _makerPairs.length; i++) {
                if (_makerPairs[i] == _pair) {
                    _makerPairs[i] = _makerPairs[_makerPairs.length - 1];
                    _makerPairs.pop();
                    break;
                }
            }
        }

        emit SetAutomatedMarketMakerPair(_pair, _value);
    }

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Trading already active");
        tradingActive = true;
        nextRebase = block.timestamp + rebaseFrequency;
        lastReduction = block.timestamp;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function setFeeExempt(address _addr, bool _value) external onlyOwner {
        require(_isFeeExempt[_addr] != _value, "Not changed");
        _isFeeExempt[_addr] = _value;
    }

    function setFeeReceivers(address _marketingReceiver, address _treasuryReceiver) external onlyOwner {
        require(_marketingReceiver != address(0) && _treasuryReceiver != address(0), "zero address");
        treasuryAddress = _treasuryReceiver;
        marketingAddress = _marketingReceiver;
    }

    function setFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _treasuryFee) external onlyOwner {
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        treasuryFee = _treasuryFee;
        totalFee = liquidityFee + marketingFee + treasuryFee;
        require(totalFee <= MAX_FEE_RATE, "Fees set too high");
    }

    function rescueToken(address tokenAddress, uint256 tokens, address destination) external onlyOwner returns (bool success){
        require(tokenAddress != address(this), "Cannot take native tokens");
        return ERC20Detailed(tokenAddress).transfer(destination, tokens);
    }

    function setNextRebase(uint256 _nextRebase) external onlyOwner {
        require(_nextRebase > block.timestamp, "Must set rebase in the future");
        nextRebase = _nextRebase;
    }
}

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":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_FEE_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_REBASE_FREQUENCY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_REBASE_FREQUENCY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAIREDTOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_makerPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newToken","type":"address"}],"name":"alterToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSupplyDeltaOnNextRebase","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":"lastReduction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseReductionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"address","name":"destination","type":"address"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardYieldDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingReceiver","type":"address"},{"internalType":"address","name":"_treasuryReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nextRebase","type":"uint256"}],"name":"setNextRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeBetweenRebaseReduction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenHandler","outputs":[{"internalType":"contract TokenHandler","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60a06040526002805461ffff60a81b1916600160b01b17815566011f54017b1242600390815567016345785d8a0000600455611c206005556007805460ff1990811660019081179092556213c6806008556009839055601080546001600160a01b031990811661dead1790915560118054909116905560188054909116909117905560006019819055601a829055601b8390556200009e91906200066e565b620000aa91906200066e565b601c556064601d55601e805460ff19166001179055620186a0620000d16012600a62000781565b620000e0906269ed3062000796565b620000ee90600019620007c6565b620000fc90600019620007dd565b620001089190620007f3565b6200011590601962000796565b6021553480156200012557600080fd5b504660011462000151576040518060400160405280600381526020016241574d60e81b81525062000188565b6040518060400160405280601881526020017f417574697374205765616c7468204d616e6167656d656e7400000000000000008152505b46600114620001b3576040518060400160405280600381526020016241574d60e81b815250620001d0565b6040518060400160405280600381526020016241574d60e81b8152505b60126000620001e08482620008af565b506001620001ef8382620008af565b506002805460ff929092166001600160a81b031990921691909117610100330217905550600090508046600103620002545750737a250d5630b4cf539739df2c5dacb4c659f2488d905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2620002a0565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e66696775726564000000000000000000000000604482015260640160405180910390fd5b601280546001600160a01b031990811673a773ac8751ae7f4b9b5d4393ce3204fda32346ef17909155601380549091167340bf1fd3578bc4f8badd3cbcbd419027e8614073179055600554620002f790426200066e565b600655601480546001600160a01b0319166001600160a01b038381169190911790915582166080526040516200032d906200064a565b604051809103906000f0801580156200034a573d6000803e3d6000fd5b50601680546001600160a01b0319166001600160a01b03928316179055306000818152602360208181526040808420608051909616808552868352818520600019908190553386529383528185209085528252808420839055938352939093522055620003ba6012600a62000781565b620003c9906269ed3062000796565b601f556064620003dc6012600a62000781565b620003eb906269ed3062000796565b620003f990600019620007c6565b6200040790600019620007dd565b620004139190620007f3565b6200042090605f62000796565b336000908152602260205260409020819055620004406012600a62000781565b6200044f906269ed3062000796565b6200045d90600019620007c6565b6200046b90600019620007dd565b620004779190620007dd565b6013546001600160a01b031660009081526022602052604081208054909190620004a39084906200066e565b9091555050601f54620004b96012600a62000781565b620004c8906269ed3062000796565b620004d690600019620007c6565b620004e490600019620007dd565b620004f09190620007f3565b602055601f546064906200050690600162000796565b620005129190620007f3565b600b55601f546064906200052890600162000796565b620005349190620007f3565b600c55306000908152600d60205260408082208054600160ff1991821681179092553380855283852080548316841790556001600160a01b0387168552928420805482168317905561dead84527fdc7fafdc41998a74ecacb8f8bd877011aba1f1d03a3a0d37a2e7879a393b1d6a805490911690911790559060008051602062003826833981519152620005c8836200061b565b60405190815260200160405180910390a36013546001600160a01b031660006000805160206200382683398151915262000602836200061b565b60405190815260200160405180910390a350506200097b565b602080546001600160a01b038316600090815260229092526040822054620006449190620007f3565b92915050565b61044580620033e183390190565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000644576200064462000658565b600181815b80851115620006c5578160001904821115620006a957620006a962000658565b80851615620006b757918102915b93841c939080029062000689565b509250929050565b600082620006de5750600162000644565b81620006ed5750600062000644565b8160018114620007065760028114620007115762000731565b600191505062000644565b60ff84111562000725576200072562000658565b50506001821b62000644565b5060208310610133831016604e8410600b841016171562000756575081810a62000644565b62000762838362000684565b806000190482111562000779576200077962000658565b029392505050565b60006200078f8383620006cd565b9392505050565b808202811582820484141762000644576200064462000658565b634e487b7160e01b600052601260045260246000fd5b600082620007d857620007d8620007b0565b500690565b8181038181111562000644576200064462000658565b600082620008055762000805620007b0565b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200083557607f821691505b6020821081036200085657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008aa57600081815260208120601f850160051c81016020861015620008855750805b601f850160051c820191505b81811015620008a65782815560010162000891565b5050505b505050565b81516001600160401b03811115620008cb57620008cb6200080a565b620008e381620008dc845462000820565b846200085c565b602080601f8311600181146200091b5760008415620009025750858301515b600019600386901b1c1916600185901b178555620008a6565b600085815260208120601f198616915b828110156200094c578886015182559484019460019091019084016200092b565b50858210156200096b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051612a35620009ac6000396000818161076301528181610b0d01528181611bf801526122ae0152612a356000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c806392f6576e116101f4578063c4d59f6a1161011a578063d6737a6e116100ad578063f2fde38b1161007c578063f2fde38b1461074b578063f887ea401461075e578063f8a67a6214610785578063f8b45b051461079857600080fd5b8063d6737a6e146106ee578063d7832b1114610701578063dd62ed3e1461070a578063e884f2601461074357600080fd5b8063cec10c11116100e9578063cec10c111461069d578063cf46f24c146106b0578063cf909970146106b9578063d4399790146106c257600080fd5b8063c4d59f6a146105c3578063c5f956af14610674578063c876d0b914610687578063cc32d1761461069457600080fd5b8063a4b45c0011610192578063aa77022311610161578063aa7702231461062b578063b62496f514610634578063bbc0c74214610657578063bc7e68a31461066b57600080fd5b8063a4b45c00146105df578063a5ece941146105f2578063a8aa1b3114610605578063a9059cbb1461061857600080fd5b80639a7a23d6116101ce5780639a7a23d61461059d5780639ae7372d146105b05780639cd84e88146105c3578063a457c2d7146105cc57600080fd5b806392f6576e1461058457806395d89b411461058c57806398118cb41461059457600080fd5b806361a9d1b1116102d9578063715018a6116102775780638a8c523c116102465780638a8c523c146105465780638da5cb5b1461054e5780638ebfc796146105645780639079f9321461057757600080fd5b8063715018a614610525578063751039fc1461052d578063753d02a11461053557806389375abf1461053d57600080fd5b80636b67c4df116102b35780636b67c4df146104ed5780636d351d1a146104f65780636ddd1713146104fe57806370a082311461051257600080fd5b806361a9d1b1146104d257806363eab10a146104da5780636ac5eeee146104e557600080fd5b806323b872dd116103515780633970124c116103205780633970124c14610495578063444c74fe146104a85780634a62bb65146104bd5780635f7468f3146104ca57600080fd5b806323b872dd146104515780632f75695c14610464578063313ce5671461046d578063395093511461048257600080fd5b8063180b0d7e1161038d578063180b0d7e1461040c57806318160ddd146104155780631b3d6e871461041d5780631df4ccfc1461044857600080fd5b806306fdde03146103b4578063095ea7b3146103d25780630af08314146103f5575b600080fd5b6103bc6107a1565b6040516103c99190612528565b60405180910390f35b6103e56103e036600461258b565b610833565b60405190151581526020016103c9565b6103fe60035481565b6040519081526020016103c9565b6103fe601d5481565b601f546103fe565b601654610430906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b6103fe601c5481565b6103e561045f3660046125b7565b6108a0565b6103fe60095481565b60025460405160ff90911681526020016103c9565b6103e561049036600461258b565b6109be565b601454610430906001600160a01b031681565b6104bb6104b63660046125f8565b610a44565b005b601e546103e59060ff1681565b6103fe610c6c565b6104bb610c90565b6006544210156103e5565b6104bb610d1f565b6103fe601a5481565b6103fe6110bc565b6002546103e590600160b01b900460ff1681565b6103fe6105203660046125f8565b6110ce565b6104bb6110f5565b6104bb611173565b6104bb6111d7565b6103fe60055481565b6104bb611266565b60025461010090046001600160a01b0316610430565b6104bb61057236600461262a565b611311565b6007546103e59060ff1681565b6103fe600581565b6103bc6113c9565b6103fe60195481565b6104bb6105ab36600461262a565b6113d8565b6104bb6105be366004612663565b611672565b6103fe611c2081565b6103e56105da36600461258b565b6116f5565b6104bb6105ed36600461267c565b6117dc565b601254610430906001600160a01b031681565b601554610430906001600160a01b031681565b6103e561062636600461258b565b611897565b6103fe600a5481565b6103e56106423660046125f8565b600f6020526000908152604090205460ff1681565b6002546103e590600160a81b900460ff1681565b6103fe60065481565b601354610430906001600160a01b031681565b6018546103e59060ff1681565b6103fe601b5481565b6104bb6106ab3660046126aa565b6118c3565b6103fe600b5481565b6103fe60085481565b6103e56106d03660046125f8565b6001600160a01b03166000908152600d602052604090205460ff1690565b6104306106fc366004612663565b611964565b6103fe60045481565b6103fe61071836600461267c565b6001600160a01b03918216600090815260236020908152604080832093909416825291909152205490565b6104bb61198e565b6104bb6107593660046125f8565b6119c9565b6104307f000000000000000000000000000000000000000000000000000000000000000081565b6103e56107933660046126d6565b611a01565b6103fe600c5481565b6060600080546107b090612718565b80601f01602080910402602001604051908101604052809291908181526020018280546107dc90612718565b80156108295780601f106107fe57610100808354040283529160200191610829565b820191906000526020600020905b81548152906001019060200180831161080c57829003601f168201915b5050505050905090565b3360008181526023602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061088e9086815260200190565b60405180910390a35060015b92915050565b6000826001600160a01b0381166108b657600080fd5b6001600160a01b0385166000908152602360209081526040808320338452909152902054600019146109a7576001600160a01b03851660009081526023602090815260408083203384529091529020548311156109535760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b60448201526064015b60405180910390fd5b6001600160a01b0385166000908152602360209081526040808320338452909152902054610982908490612768565b6001600160a01b03861660009081526023602090815260408083203384529091529020555b6109b2858585611b06565b50600195945050505050565b3360009081526023602090815260408083206001600160a01b03861684529091528120546109ed90839061277b565b3360008181526023602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161088e565b60025461010090046001600160a01b03163314610a735760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b038116610ab85760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640161094a565b600254600160a81b900460ff1615610b0b5760405162461bcd60e51b815260206004820152601660248201527574726164696e6720616c72656164792061637469766560501b604482015260640161094a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8d91906127b1565b6040516364e329cb60e11b81523060048201526001600160a01b038381166024830152919091169063c9c65396906044016020604051808303816000875af1158015610bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0191906127b1565b601580546001600160a01b0319166001600160a01b03928316908117825530600090815260236020908152604080832093835292905220600019905554610c4a911660016113d8565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6000600454600354601f54610c8191906127ce565b610c8b91906127fb565b905090565b601e54610100900460ff1615610cd45760405162461bcd60e51b81526020600482015260096024820152682a393c9030b3b0b4b760b91b604482015260640161094a565b600654421015610d145760405162461bcd60e51b815260206004820152600b60248201526a4e6f7420696e2074696d6560a81b604482015260640161094a565b610d1c61207c565b50565b6000610d2a306110ce565b9050602054602154610d3c91906127fb565b610d479060146127ce565b811115610d6c57602054602154610d5e91906127fb565b610d699060146127ce565b90505b6000601c5460195483610d7f91906127ce565b610d8991906127fb565b9050600081118015610d9b5750808210155b15610dd257601554610db89030906001600160a01b031683611b06565b50610dc16111d7565b610dcb8183612768565b9150600090505b610ddb82612220565b6016546014546040516304fa881160e21b81526001600160a01b0391821660048201529116906313ea204490602401600060405180830381600087803b158015610e2457600080fd5b505af1158015610e38573d6000803e3d6000fd5b50506014546040516370a0823160e01b8152306004820152600093506001600160a01b0390911691506370a0823190602401602060405180830381865afa158015610e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eab919061280f565b90506000601a54601b54610ebf919061277b565b601b54610ecc90846127ce565b610ed691906127fb565b90508015610f595760145460135460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303816000875af1158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190612828565b505b6014546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc6919061280f565b11156110b6576014546012546040516370a0823160e01b81523060048201526001600160a01b039283169263a9059cbb92169083906370a0823190602401602060405180830381865afa158015611021573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611045919061280f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b49190612828565b505b50505050565b6000602054602154610c8b91906127fb565b602080546001600160a01b03831660009081526022909252604082205461089a91906127fb565b60025461010090046001600160a01b031633146111245760405162461bcd60e51b815260040161094a9061278e565b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b60025461010090046001600160a01b031633146111a25760405162461bcd60e51b815260040161094a9061278e565b601e805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b60005b600e54811015610d1c57600e81815481106111f7576111f7612845565b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae99260048084019382900301818387803b15801561124257600080fd5b505af1925050508015611253575060015b508061125e8161285b565b9150506111da565b60025461010090046001600160a01b031633146112955760405162461bcd60e51b815260040161094a9061278e565b600254600160a81b900460ff16156112e85760405162461bcd60e51b815260206004820152601660248201527554726164696e6720616c72656164792061637469766560501b604482015260640161094a565b6002805460ff60a81b1916600160a81b179055600554611308904261277b565b60065542600a55565b60025461010090046001600160a01b031633146113405760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b0382166000908152600d602052604090205481151560ff90911615150361139e5760405162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015260640161094a565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6060600180546107b090612718565b60025461010090046001600160a01b031633146114075760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b0382166000908152600f602052604090205481151560ff90911615150361146b5760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015260640161094a565b6001600160a01b0382166000908152600f60205260409020805460ff191682158015919091179091556114e857600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b038416179055611636565b600e5460011061152c5760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b604482015260640161094a565b60005b600e5481101561163457826001600160a01b0316600e828154811061155657611556612845565b6000918252602090912001546001600160a01b03160361162257600e805461158090600190612768565b8154811061159057611590612845565b600091825260209091200154600e80546001600160a01b0390921691839081106115bc576115bc612845565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600e8054806115fb576115fb612874565b600082815260209020810160001990810180546001600160a01b0319169055019055611634565b8061162c8161285b565b91505061152f565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60025461010090046001600160a01b031633146116a15760405162461bcd60e51b815260040161094a9061278e565b4281116116f05760405162461bcd60e51b815260206004820152601d60248201527f4d757374207365742072656261736520696e2074686520667574757265000000604482015260640161094a565b600655565b3360009081526023602090815260408083206001600160a01b0386168452909152812054808310611749573360009081526023602090815260408083206001600160a01b0388168452909152812055611778565b6117538382612768565b3360009081526023602090815260408083206001600160a01b03891684529091529020555b3360008181526023602090815260408083206001600160a01b038916808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b60025461010090046001600160a01b0316331461180b5760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b0382161580159061182b57506001600160a01b03811615155b6118665760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b604482015260640161094a565b601380546001600160a01b039283166001600160a01b03199182161790915560128054939092169216919091179055565b6000826001600160a01b0381166118ad57600080fd5b6118b8338585611b06565b506001949350505050565b60025461010090046001600160a01b031633146118f25760405162461bcd60e51b815260040161094a9061278e565b6019839055601a829055601b8190558061190c838561277b565b611916919061277b565b601c8190556005101561195f5760405162461bcd60e51b815260206004820152601160248201527008ccacae640e6cae840e8dede40d0d2ced607b1b604482015260640161094a565b505050565b600e818154811061197457600080fd5b6000918252602090912001546001600160a01b0316905081565b60025461010090046001600160a01b031633146119bd5760405162461bcd60e51b815260040161094a9061278e565b6018805460ff19169055565b60025461010090046001600160a01b031633146119f85760405162461bcd60e51b815260040161094a9061278e565b610d1c81612324565b60025460009061010090046001600160a01b03163314611a335760405162461bcd60e51b815260040161094a9061278e565b306001600160a01b03851603611a8b5760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f742074616b65206e617469766520746f6b656e7300000000000000604482015260640161094a565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820185905285169063a9059cbb906044016020604051808303816000875af1158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe9190612828565b949350505050565b600254600090600160a81b900460ff16611b99576001600160a01b0384166000908152600d602052604090205460ff1680611b5957506001600160a01b0383166000908152600d602052604090205460ff165b611b995760405162461bcd60e51b8152602060048201526011602482015270151c98591a5b99c81a5cc81c185d5cd959607a1b604482015260640161094a565b601e5460ff1615611e31576001600160a01b0384166000908152600d602052604090205460ff16158015611be657506001600160a01b0383166000908152600d602052604090205460ff16155b15611e315760185460ff1615611d32577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614158015611c5157506001600160a01b0383166000908152600f602052604090205460ff16155b15611d3257326000908152601760205260409020544390611c7390600261277b565b108015611ca357506001600160a01b0383166000908152601760205260409020544390611ca190600261277b565b105b611d0d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b606482015260840161094a565b3260009081526017602052604080822043908190556001600160a01b03861683529120555b6001600160a01b0384166000908152600f602052604090205460ff1615611db657600b54821115611db65760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b606482015260840161094a565b6001600160a01b0383166000908152600f602052604090205460ff16611e3157600c5482611de3856110ce565b611ded919061277b565b1115611e315760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b604482015260640161094a565b6001600160a01b0384166000908152600d602052604090205460ff16158015611e7357506001600160a01b0383166000908152600d602052604090205460ff16155b8015611e825750611e8261239e565b8015611ea757506001600160a01b0384166000908152600f602052604090205460ff16155b15611ecf57601e805461ff001916610100179055611ec3610d1f565b601e805461ff00191690555b60075460ff168015611efa57506001600160a01b0384166000908152600f602052604090205460ff16155b8015611f0e5750601e54610100900460ff16155b8015611f1c57506006544210155b8015611f4157506001600160a01b0383166000908152600d602052604090205460ff16155b8015611f6657506001600160a01b0384166000908152600d602052604090205460ff16155b15611f7557611f7361207c565b505b600060205483611f8591906127ce565b6001600160a01b038616600090815260226020526040902054909150611fac908290612768565b6001600160a01b038616600090815260226020526040812091909155611fd286866123f0565b611fdc5781611fe6565b611fe68683612482565b6001600160a01b03861660009081526022602052604090205490915061200d90829061277b565b6001600160a01b038087166000818152602260209081526040909120939093559154908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061205f90856127fb565b60405190815260200160405180910390a350600195945050505050565b600854600a54600091429182916120929161277b565b116120ce57600a6009546003546120a991906127ce565b6120b391906127fb565b600360008282546120c49190612768565b909155505042600a555b6000600454600354601f546120e391906127ce565b6120ed91906127fb565b90506005546006546120ff919061277b565b600655600081900361215157817f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2601f5460405161213f91815260200190565b60405180910390a2601f549250505090565b80601f5461215f919061277b565b601f5561216e6012600a61296e565b61217c9063042343e06127ce565b601f5411156121a3576121916012600a61296e565b61219f9063042343e06127ce565b601f555b601f546121b26012600a61296e565b6121bf906269ed306127ce565b6121cb9060001961297a565b6121d790600019612768565b6121e191906127fb565b6020556121ec6111d7565b817f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2601f5460405161213f91815260200190565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061225557612255612845565b6001600160a01b03928316602091820292909201015260145482519116908290600190811061228657612286612845565b6001600160a01b039283166020918202929092010152601654604051635c11d79560e01b81527f0000000000000000000000000000000000000000000000000000000000000000831692635c11d795926122ee9287926000928892911690429060040161298e565b600060405180830381600087803b15801561230857600080fd5b505af115801561231c573d6000803e3d6000fd5b505050505050565b6001600160a01b03811661233757600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b601e54600090610100900460ff161580156123c25750600254600160b01b900460ff165b80156123d057506000601c54115b8015610c8b57505060215430600090815260226020526040902054101590565b6001600160a01b0382166000908152600d602052604081205460ff168061242f57506001600160a01b0382166000908152600d602052604090205460ff165b1561243c5750600061089a565b6001600160a01b0383166000908152600f602052604090205460ff168061247b57506001600160a01b0382166000908152600f602052604090205460ff165b905061089a565b600080601d54601c548461249691906127ce565b6124a091906127fb565b306000908152602260205260409020549091506124be90829061277b565b3060008181526022602090815260409091209290925590546001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061250d90856127fb565b60405190815260200160405180910390a3611afe8184612768565b600060208083528351808285015260005b8181101561255557858101830151858201604001528201612539565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d1c57600080fd5b6000806040838503121561259e57600080fd5b82356125a981612576565b946020939093013593505050565b6000806000606084860312156125cc57600080fd5b83356125d781612576565b925060208401356125e781612576565b929592945050506040919091013590565b60006020828403121561260a57600080fd5b813561261581612576565b9392505050565b8015158114610d1c57600080fd5b6000806040838503121561263d57600080fd5b823561264881612576565b915060208301356126588161261c565b809150509250929050565b60006020828403121561267557600080fd5b5035919050565b6000806040838503121561268f57600080fd5b823561269a81612576565b9150602083013561265881612576565b6000806000606084860312156126bf57600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156126eb57600080fd5b83356126f681612576565b925060208401359150604084013561270d81612576565b809150509250925092565b600181811c9082168061272c57607f821691505b60208210810361274c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561089a5761089a612752565b8082018082111561089a5761089a612752565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b6000602082840312156127c357600080fd5b815161261581612576565b808202811582820484141761089a5761089a612752565b634e487b7160e01b600052601260045260246000fd5b60008261280a5761280a6127e5565b500490565b60006020828403121561282157600080fd5b5051919050565b60006020828403121561283a57600080fd5b81516126158161261c565b634e487b7160e01b600052603260045260246000fd5b60006001820161286d5761286d612752565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600181815b808511156128c55781600019048211156128ab576128ab612752565b808516156128b857918102915b93841c939080029061288f565b509250929050565b6000826128dc5750600161089a565b816128e95750600061089a565b81600181146128ff576002811461290957612925565b600191505061089a565b60ff84111561291a5761291a612752565b50506001821b61089a565b5060208310610133831016604e8410600b8410161715612948575081810a61089a565b612952838361288a565b806000190482111561296657612966612752565b029392505050565b600061261583836128cd565b600082612989576129896127e5565b500690565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129de5784516001600160a01b0316835293830193918301916001016129b9565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122095b2fac2c11fbbff7d8758932cfc56adfb9b6480f22e0bbf047a595ed8f8c98564736f6c63430008110033608060405234801561001057600080fd5b50600080546001600160a01b03191633179055610413806100326000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806313ea204414610051578063715018a6146100665780638da5cb5b1461006e578063f2fde38b1461008d575b600080fd5b61006461005f36600461034f565b6100a0565b005b610064610241565b600054604080516001600160a01b039092168252519081900360200190f35b61006461009b36600461034f565b6102b3565b6000546001600160a01b031633146100d35760405162461bcd60e51b81526004016100ca9061037f565b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561011a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061013e91906103a2565b111561023e57806001600160a01b031663a9059cbb6101656000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa1580156101a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101cd91906103a2565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023c91906103bb565b505b50565b6000546001600160a01b0316331461026b5760405162461bcd60e51b81526004016100ca9061037f565b600080546040516001600160a01b03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080546001600160a01b0319169055565b6000546001600160a01b031633146102dd5760405162461bcd60e51b81526004016100ca9061037f565b61023e816001600160a01b0381166102f457600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006020828403121561036157600080fd5b81356001600160a01b038116811461037857600080fd5b9392505050565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b6000602082840312156103b457600080fd5b5051919050565b6000602082840312156103cd57600080fd5b8151801515811461037857600080fdfea2646970667358221220399a7f69f0f71e3b311e1fbc4547db673f957a702e0d21ebd7ee9b22de0f665c64736f6c63430008110033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103af5760003560e01c806392f6576e116101f4578063c4d59f6a1161011a578063d6737a6e116100ad578063f2fde38b1161007c578063f2fde38b1461074b578063f887ea401461075e578063f8a67a6214610785578063f8b45b051461079857600080fd5b8063d6737a6e146106ee578063d7832b1114610701578063dd62ed3e1461070a578063e884f2601461074357600080fd5b8063cec10c11116100e9578063cec10c111461069d578063cf46f24c146106b0578063cf909970146106b9578063d4399790146106c257600080fd5b8063c4d59f6a146105c3578063c5f956af14610674578063c876d0b914610687578063cc32d1761461069457600080fd5b8063a4b45c0011610192578063aa77022311610161578063aa7702231461062b578063b62496f514610634578063bbc0c74214610657578063bc7e68a31461066b57600080fd5b8063a4b45c00146105df578063a5ece941146105f2578063a8aa1b3114610605578063a9059cbb1461061857600080fd5b80639a7a23d6116101ce5780639a7a23d61461059d5780639ae7372d146105b05780639cd84e88146105c3578063a457c2d7146105cc57600080fd5b806392f6576e1461058457806395d89b411461058c57806398118cb41461059457600080fd5b806361a9d1b1116102d9578063715018a6116102775780638a8c523c116102465780638a8c523c146105465780638da5cb5b1461054e5780638ebfc796146105645780639079f9321461057757600080fd5b8063715018a614610525578063751039fc1461052d578063753d02a11461053557806389375abf1461053d57600080fd5b80636b67c4df116102b35780636b67c4df146104ed5780636d351d1a146104f65780636ddd1713146104fe57806370a082311461051257600080fd5b806361a9d1b1146104d257806363eab10a146104da5780636ac5eeee146104e557600080fd5b806323b872dd116103515780633970124c116103205780633970124c14610495578063444c74fe146104a85780634a62bb65146104bd5780635f7468f3146104ca57600080fd5b806323b872dd146104515780632f75695c14610464578063313ce5671461046d578063395093511461048257600080fd5b8063180b0d7e1161038d578063180b0d7e1461040c57806318160ddd146104155780631b3d6e871461041d5780631df4ccfc1461044857600080fd5b806306fdde03146103b4578063095ea7b3146103d25780630af08314146103f5575b600080fd5b6103bc6107a1565b6040516103c99190612528565b60405180910390f35b6103e56103e036600461258b565b610833565b60405190151581526020016103c9565b6103fe60035481565b6040519081526020016103c9565b6103fe601d5481565b601f546103fe565b601654610430906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b6103fe601c5481565b6103e561045f3660046125b7565b6108a0565b6103fe60095481565b60025460405160ff90911681526020016103c9565b6103e561049036600461258b565b6109be565b601454610430906001600160a01b031681565b6104bb6104b63660046125f8565b610a44565b005b601e546103e59060ff1681565b6103fe610c6c565b6104bb610c90565b6006544210156103e5565b6104bb610d1f565b6103fe601a5481565b6103fe6110bc565b6002546103e590600160b01b900460ff1681565b6103fe6105203660046125f8565b6110ce565b6104bb6110f5565b6104bb611173565b6104bb6111d7565b6103fe60055481565b6104bb611266565b60025461010090046001600160a01b0316610430565b6104bb61057236600461262a565b611311565b6007546103e59060ff1681565b6103fe600581565b6103bc6113c9565b6103fe60195481565b6104bb6105ab36600461262a565b6113d8565b6104bb6105be366004612663565b611672565b6103fe611c2081565b6103e56105da36600461258b565b6116f5565b6104bb6105ed36600461267c565b6117dc565b601254610430906001600160a01b031681565b601554610430906001600160a01b031681565b6103e561062636600461258b565b611897565b6103fe600a5481565b6103e56106423660046125f8565b600f6020526000908152604090205460ff1681565b6002546103e590600160a81b900460ff1681565b6103fe60065481565b601354610430906001600160a01b031681565b6018546103e59060ff1681565b6103fe601b5481565b6104bb6106ab3660046126aa565b6118c3565b6103fe600b5481565b6103fe60085481565b6103e56106d03660046125f8565b6001600160a01b03166000908152600d602052604090205460ff1690565b6104306106fc366004612663565b611964565b6103fe60045481565b6103fe61071836600461267c565b6001600160a01b03918216600090815260236020908152604080832093909416825291909152205490565b6104bb61198e565b6104bb6107593660046125f8565b6119c9565b6104307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6103e56107933660046126d6565b611a01565b6103fe600c5481565b6060600080546107b090612718565b80601f01602080910402602001604051908101604052809291908181526020018280546107dc90612718565b80156108295780601f106107fe57610100808354040283529160200191610829565b820191906000526020600020905b81548152906001019060200180831161080c57829003601f168201915b5050505050905090565b3360008181526023602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061088e9086815260200190565b60405180910390a35060015b92915050565b6000826001600160a01b0381166108b657600080fd5b6001600160a01b0385166000908152602360209081526040808320338452909152902054600019146109a7576001600160a01b03851660009081526023602090815260408083203384529091529020548311156109535760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b60448201526064015b60405180910390fd5b6001600160a01b0385166000908152602360209081526040808320338452909152902054610982908490612768565b6001600160a01b03861660009081526023602090815260408083203384529091529020555b6109b2858585611b06565b50600195945050505050565b3360009081526023602090815260408083206001600160a01b03861684529091528120546109ed90839061277b565b3360008181526023602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161088e565b60025461010090046001600160a01b03163314610a735760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b038116610ab85760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640161094a565b600254600160a81b900460ff1615610b0b5760405162461bcd60e51b815260206004820152601660248201527574726164696e6720616c72656164792061637469766560501b604482015260640161094a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8d91906127b1565b6040516364e329cb60e11b81523060048201526001600160a01b038381166024830152919091169063c9c65396906044016020604051808303816000875af1158015610bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0191906127b1565b601580546001600160a01b0319166001600160a01b03928316908117825530600090815260236020908152604080832093835292905220600019905554610c4a911660016113d8565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6000600454600354601f54610c8191906127ce565b610c8b91906127fb565b905090565b601e54610100900460ff1615610cd45760405162461bcd60e51b81526020600482015260096024820152682a393c9030b3b0b4b760b91b604482015260640161094a565b600654421015610d145760405162461bcd60e51b815260206004820152600b60248201526a4e6f7420696e2074696d6560a81b604482015260640161094a565b610d1c61207c565b50565b6000610d2a306110ce565b9050602054602154610d3c91906127fb565b610d479060146127ce565b811115610d6c57602054602154610d5e91906127fb565b610d699060146127ce565b90505b6000601c5460195483610d7f91906127ce565b610d8991906127fb565b9050600081118015610d9b5750808210155b15610dd257601554610db89030906001600160a01b031683611b06565b50610dc16111d7565b610dcb8183612768565b9150600090505b610ddb82612220565b6016546014546040516304fa881160e21b81526001600160a01b0391821660048201529116906313ea204490602401600060405180830381600087803b158015610e2457600080fd5b505af1158015610e38573d6000803e3d6000fd5b50506014546040516370a0823160e01b8152306004820152600093506001600160a01b0390911691506370a0823190602401602060405180830381865afa158015610e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eab919061280f565b90506000601a54601b54610ebf919061277b565b601b54610ecc90846127ce565b610ed691906127fb565b90508015610f595760145460135460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303816000875af1158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190612828565b505b6014546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc6919061280f565b11156110b6576014546012546040516370a0823160e01b81523060048201526001600160a01b039283169263a9059cbb92169083906370a0823190602401602060405180830381865afa158015611021573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611045919061280f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b49190612828565b505b50505050565b6000602054602154610c8b91906127fb565b602080546001600160a01b03831660009081526022909252604082205461089a91906127fb565b60025461010090046001600160a01b031633146111245760405162461bcd60e51b815260040161094a9061278e565b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b60025461010090046001600160a01b031633146111a25760405162461bcd60e51b815260040161094a9061278e565b601e805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b60005b600e54811015610d1c57600e81815481106111f7576111f7612845565b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae99260048084019382900301818387803b15801561124257600080fd5b505af1925050508015611253575060015b508061125e8161285b565b9150506111da565b60025461010090046001600160a01b031633146112955760405162461bcd60e51b815260040161094a9061278e565b600254600160a81b900460ff16156112e85760405162461bcd60e51b815260206004820152601660248201527554726164696e6720616c72656164792061637469766560501b604482015260640161094a565b6002805460ff60a81b1916600160a81b179055600554611308904261277b565b60065542600a55565b60025461010090046001600160a01b031633146113405760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b0382166000908152600d602052604090205481151560ff90911615150361139e5760405162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015260640161094a565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6060600180546107b090612718565b60025461010090046001600160a01b031633146114075760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b0382166000908152600f602052604090205481151560ff90911615150361146b5760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015260640161094a565b6001600160a01b0382166000908152600f60205260409020805460ff191682158015919091179091556114e857600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b038416179055611636565b600e5460011061152c5760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b604482015260640161094a565b60005b600e5481101561163457826001600160a01b0316600e828154811061155657611556612845565b6000918252602090912001546001600160a01b03160361162257600e805461158090600190612768565b8154811061159057611590612845565b600091825260209091200154600e80546001600160a01b0390921691839081106115bc576115bc612845565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600e8054806115fb576115fb612874565b600082815260209020810160001990810180546001600160a01b0319169055019055611634565b8061162c8161285b565b91505061152f565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60025461010090046001600160a01b031633146116a15760405162461bcd60e51b815260040161094a9061278e565b4281116116f05760405162461bcd60e51b815260206004820152601d60248201527f4d757374207365742072656261736520696e2074686520667574757265000000604482015260640161094a565b600655565b3360009081526023602090815260408083206001600160a01b0386168452909152812054808310611749573360009081526023602090815260408083206001600160a01b0388168452909152812055611778565b6117538382612768565b3360009081526023602090815260408083206001600160a01b03891684529091529020555b3360008181526023602090815260408083206001600160a01b038916808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b60025461010090046001600160a01b0316331461180b5760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b0382161580159061182b57506001600160a01b03811615155b6118665760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b604482015260640161094a565b601380546001600160a01b039283166001600160a01b03199182161790915560128054939092169216919091179055565b6000826001600160a01b0381166118ad57600080fd5b6118b8338585611b06565b506001949350505050565b60025461010090046001600160a01b031633146118f25760405162461bcd60e51b815260040161094a9061278e565b6019839055601a829055601b8190558061190c838561277b565b611916919061277b565b601c8190556005101561195f5760405162461bcd60e51b815260206004820152601160248201527008ccacae640e6cae840e8dede40d0d2ced607b1b604482015260640161094a565b505050565b600e818154811061197457600080fd5b6000918252602090912001546001600160a01b0316905081565b60025461010090046001600160a01b031633146119bd5760405162461bcd60e51b815260040161094a9061278e565b6018805460ff19169055565b60025461010090046001600160a01b031633146119f85760405162461bcd60e51b815260040161094a9061278e565b610d1c81612324565b60025460009061010090046001600160a01b03163314611a335760405162461bcd60e51b815260040161094a9061278e565b306001600160a01b03851603611a8b5760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f742074616b65206e617469766520746f6b656e7300000000000000604482015260640161094a565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820185905285169063a9059cbb906044016020604051808303816000875af1158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe9190612828565b949350505050565b600254600090600160a81b900460ff16611b99576001600160a01b0384166000908152600d602052604090205460ff1680611b5957506001600160a01b0383166000908152600d602052604090205460ff165b611b995760405162461bcd60e51b8152602060048201526011602482015270151c98591a5b99c81a5cc81c185d5cd959607a1b604482015260640161094a565b601e5460ff1615611e31576001600160a01b0384166000908152600d602052604090205460ff16158015611be657506001600160a01b0383166000908152600d602052604090205460ff16155b15611e315760185460ff1615611d32577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316836001600160a01b031614158015611c5157506001600160a01b0383166000908152600f602052604090205460ff16155b15611d3257326000908152601760205260409020544390611c7390600261277b565b108015611ca357506001600160a01b0383166000908152601760205260409020544390611ca190600261277b565b105b611d0d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b606482015260840161094a565b3260009081526017602052604080822043908190556001600160a01b03861683529120555b6001600160a01b0384166000908152600f602052604090205460ff1615611db657600b54821115611db65760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b606482015260840161094a565b6001600160a01b0383166000908152600f602052604090205460ff16611e3157600c5482611de3856110ce565b611ded919061277b565b1115611e315760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b604482015260640161094a565b6001600160a01b0384166000908152600d602052604090205460ff16158015611e7357506001600160a01b0383166000908152600d602052604090205460ff16155b8015611e825750611e8261239e565b8015611ea757506001600160a01b0384166000908152600f602052604090205460ff16155b15611ecf57601e805461ff001916610100179055611ec3610d1f565b601e805461ff00191690555b60075460ff168015611efa57506001600160a01b0384166000908152600f602052604090205460ff16155b8015611f0e5750601e54610100900460ff16155b8015611f1c57506006544210155b8015611f4157506001600160a01b0383166000908152600d602052604090205460ff16155b8015611f6657506001600160a01b0384166000908152600d602052604090205460ff16155b15611f7557611f7361207c565b505b600060205483611f8591906127ce565b6001600160a01b038616600090815260226020526040902054909150611fac908290612768565b6001600160a01b038616600090815260226020526040812091909155611fd286866123f0565b611fdc5781611fe6565b611fe68683612482565b6001600160a01b03861660009081526022602052604090205490915061200d90829061277b565b6001600160a01b038087166000818152602260209081526040909120939093559154908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061205f90856127fb565b60405190815260200160405180910390a350600195945050505050565b600854600a54600091429182916120929161277b565b116120ce57600a6009546003546120a991906127ce565b6120b391906127fb565b600360008282546120c49190612768565b909155505042600a555b6000600454600354601f546120e391906127ce565b6120ed91906127fb565b90506005546006546120ff919061277b565b600655600081900361215157817f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2601f5460405161213f91815260200190565b60405180910390a2601f549250505090565b80601f5461215f919061277b565b601f5561216e6012600a61296e565b61217c9063042343e06127ce565b601f5411156121a3576121916012600a61296e565b61219f9063042343e06127ce565b601f555b601f546121b26012600a61296e565b6121bf906269ed306127ce565b6121cb9060001961297a565b6121d790600019612768565b6121e191906127fb565b6020556121ec6111d7565b817f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2601f5460405161213f91815260200190565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061225557612255612845565b6001600160a01b03928316602091820292909201015260145482519116908290600190811061228657612286612845565b6001600160a01b039283166020918202929092010152601654604051635c11d79560e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d831692635c11d795926122ee9287926000928892911690429060040161298e565b600060405180830381600087803b15801561230857600080fd5b505af115801561231c573d6000803e3d6000fd5b505050505050565b6001600160a01b03811661233757600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b601e54600090610100900460ff161580156123c25750600254600160b01b900460ff165b80156123d057506000601c54115b8015610c8b57505060215430600090815260226020526040902054101590565b6001600160a01b0382166000908152600d602052604081205460ff168061242f57506001600160a01b0382166000908152600d602052604090205460ff165b1561243c5750600061089a565b6001600160a01b0383166000908152600f602052604090205460ff168061247b57506001600160a01b0382166000908152600f602052604090205460ff165b905061089a565b600080601d54601c548461249691906127ce565b6124a091906127fb565b306000908152602260205260409020549091506124be90829061277b565b3060008181526022602090815260409091209290925590546001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061250d90856127fb565b60405190815260200160405180910390a3611afe8184612768565b600060208083528351808285015260005b8181101561255557858101830151858201604001528201612539565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d1c57600080fd5b6000806040838503121561259e57600080fd5b82356125a981612576565b946020939093013593505050565b6000806000606084860312156125cc57600080fd5b83356125d781612576565b925060208401356125e781612576565b929592945050506040919091013590565b60006020828403121561260a57600080fd5b813561261581612576565b9392505050565b8015158114610d1c57600080fd5b6000806040838503121561263d57600080fd5b823561264881612576565b915060208301356126588161261c565b809150509250929050565b60006020828403121561267557600080fd5b5035919050565b6000806040838503121561268f57600080fd5b823561269a81612576565b9150602083013561265881612576565b6000806000606084860312156126bf57600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156126eb57600080fd5b83356126f681612576565b925060208401359150604084013561270d81612576565b809150509250925092565b600181811c9082168061272c57607f821691505b60208210810361274c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561089a5761089a612752565b8082018082111561089a5761089a612752565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b6000602082840312156127c357600080fd5b815161261581612576565b808202811582820484141761089a5761089a612752565b634e487b7160e01b600052601260045260246000fd5b60008261280a5761280a6127e5565b500490565b60006020828403121561282157600080fd5b5051919050565b60006020828403121561283a57600080fd5b81516126158161261c565b634e487b7160e01b600052603260045260246000fd5b60006001820161286d5761286d612752565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600181815b808511156128c55781600019048211156128ab576128ab612752565b808516156128b857918102915b93841c939080029061288f565b509250929050565b6000826128dc5750600161089a565b816128e95750600061089a565b81600181146128ff576002811461290957612925565b600191505061089a565b60ff84111561291a5761291a612752565b50506001821b61089a565b5060208310610133831016604e8410600b8410161715612948575081810a61089a565b612952838361288a565b806000190482111561296657612966612752565b029392505050565b600061261583836128cd565b600082612989576129896127e5565b500690565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129de5784516001600160a01b0316835293830193918301916001016129b9565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122095b2fac2c11fbbff7d8758932cfc56adfb9b6480f22e0bbf047a595ed8f8c98564736f6c63430008110033

Deployed Bytecode Sourcemap

10366:16799:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1349:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23244:218;;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;23244:218:0;1023:187:1;10493:44:0;;;;;;;;;1361:25:1;;;1349:2;1334:18;10493:44:0;1215:177:1;12612:35:0;;;;;;15154:102;15236:12;;15154:102;;12161:32;;;;;-1:-1:-1;;;;;12161:32:0;;;;;;-1:-1:-1;;;;;1581:32:1;;;1563:51;;1551:2;1536:18;12161:32:0;1397:223:1;12538:67:0;;;;;;19715:454;;;;;;:::i;:::-;;:::i;10822:40::-;;;;;;1535:83;1601:9;;1535:83;;1601:9;;;;2228:36:1;;2216:2;2201:18;1535:83:0;2086:184:1;22861:375:0;;;;;;:::i;:::-;;:::i;12057:26::-;;;;;-1:-1:-1;;;;;12057:26:0;;;17038:412;;;;;;:::i;:::-;;:::i;:::-;;12660:33;;;;;;;;;23470:144;;;:::i;24512:149::-;;;:::i;15817:106::-;15886:10;;15900:15;-1:-1:-1;15886:29:0;15817:106;;20183:1266;;;:::i;12463:31::-;;;;;;15686:123;;;:::i;10454:30::-;;;;;-1:-1:-1;;;10454:30:0;;;;;;15424:133;;;;;;:::i;:::-;;:::i;2930:126::-;;;:::i;16835:115::-;;;:::i;16436:166::-;;;:::i;10611:44::-;;;;;;25412:242;;;:::i;2741:79::-;2806:6;;;;;-1:-1:-1;;;;;2806:6:0;2741:79;;25821:180;;;;;;:::i;:::-;;:::i;10726:29::-;;;;;;;;;11136:40;;11175:1;11136:40;;1440:87;;;:::i;12425:31::-;;;;;;24673:731;;;;;;:::i;:::-;;:::i;26974:188::-;;;;;;:::i;:::-;;:::i;11183:51::-;;11230:4;11183:51;;22284:569;;;;;;:::i;:::-;;:::i;26009:304::-;;;;;;:::i;:::-;;:::i;11982:31::-;;;;;-1:-1:-1;;;;;11982:31:0;;;12133:19;;;;;-1:-1:-1;;;;;12133:19:0;;;16610:173;;;;;;:::i;:::-;;:::i;10886:28::-;;;;;;11069:58;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10414:33;;;;;-1:-1:-1;;;10414:33:0;;;;;;10694:25;;;;;;12020:30;;;;;-1:-1:-1;;;;;12020:30:0;;;12377:39;;;;;;;;;12501:30;;;;;;26321:355;;;;;;:::i;:::-;;:::i;10923:27::-;;;;;;10764:51;;;;;;15565:113;;;;;;:::i;:::-;-1:-1:-1;;;;;15651:19:0;15627:4;15651:19;;;:12;:19;;;;;;;;;15565:113;11034:28;;;;;;:::i;:::-;;:::i;10544:58::-;;;;;;15264:152;;;;;;:::i;:::-;-1:-1:-1;;;;;15374:25:0;;;15348:7;15374:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;15264:152;25715:98;;;:::i;3064:109::-;;;;;;:::i;:::-;;:::i;12092:34::-;;;;;26684:282;;;;;;:::i;:::-;;:::i;10957:24::-;;;;;;1349:83;1386:13;1419:5;1412:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1349:83;:::o;23244:218::-;23352:10;23318:4;23334:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;23334:38:0;;;;;;;;;;:46;;;23396:36;23318:4;;23334:38;;23396:36;;;;23375:5;1361:25:1;;1349:2;1334:18;;1215:177;23396:36:0;;;;;;;;-1:-1:-1;23450:4:0;23244:218;;;;;:::o;19715:454::-;19825:4;19812:2;-1:-1:-1;;;;;13159:18:0;;13151:27;;;;;;-1:-1:-1;;;;;19846:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;19870:10:::1;19846:35:::0;;;;;;;;-1:-1:-1;;19846:50:0::1;19842:257;;-1:-1:-1::0;;;;;19921:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;19945:10:::1;19921:35:::0;;;;;;;;:44;-1:-1:-1;19921:44:0::1;19913:78;;;::::0;-1:-1:-1;;;19913:78:0;;5418:2:1;19913:78:0::1;::::0;::::1;5400:21:1::0;5457:2;5437:18;;;5430:30;-1:-1:-1;;;5476:18:1;;;5469:52;5538:18;;19913:78:0::1;;;;;;;;;-1:-1:-1::0;;;;;20044:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;20068:10:::1;20044:35:::0;;;;;;;;:43:::1;::::0;20081:5;;20044:43:::1;:::i;:::-;-1:-1:-1::0;;;;;20006:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;20030:10:::1;20006:35:::0;;;;;;;:81;19842:257:::1;20109:30;20123:4;20129:2;20133:5;20109:13;:30::i;:::-;-1:-1:-1::0;20157:4:0::1;::::0;19715:454;-1:-1:-1;;;;;19715:454:0:o;22861:375::-;23018:10;22943:4;23000:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;23000:58:0;;;;;;;;;;:71;;23060:10;;23000:71;:::i;:::-;22977:10;22959:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22959:38:0;;;;;;;;;;;;:112;;;23087:119;1361:25:1;;;22959:38:0;;23087:119;;1334:18:1;23087:119:0;1215:177:1;17038:412:0;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17114:22:0;::::1;17106:47;;;::::0;-1:-1:-1;;;17106:47:0;;6501:2:1;17106:47:0::1;::::0;::::1;6483:21:1::0;6540:2;6520:18;;;6513:30;-1:-1:-1;;;6559:18:1;;;6552:42;6611:18;;17106:47:0::1;6299:336:1::0;17106:47:0::1;17173:13;::::0;-1:-1:-1;;;17173:13:0;::::1;;;17172:14;17164:49;;;::::0;-1:-1:-1;;;17164:49:0;;6842:2:1;17164:49:0::1;::::0;::::1;6824:21:1::0;6881:2;6861:18;;;6854:30;-1:-1:-1;;;6900:18:1;;;6893:52;6962:18;;17164:49:0::1;6640:346:1::0;17164:49:0::1;17243:6;-1:-1:-1::0;;;;;17243:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17231:65;::::0;-1:-1:-1;;;17231:65:0;;17280:4:::1;17231:65;::::0;::::1;7459:34:1::0;-1:-1:-1;;;;;7529:15:1;;;7509:18;;;7502:43;17231:40:0;;;::::1;::::0;::::1;::::0;7394:18:1;;17231:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17224:4;:72:::0;;-1:-1:-1;;;;;;17224:72:0::1;-1:-1:-1::0;;;;;17224:72:0;;::::1;::::0;;::::1;::::0;;17333:4:::1;-1:-1:-1::0;17307:32:0;;;:17:::1;:32;::::0;;;;;;;:38;;;;;;;-1:-1:-1;;17307:52:0;;17398:4;17370:39:::1;::::0;17398:4:::1;-1:-1:-1::0;17370:27:0::1;:39::i;:::-;17420:11;:22:::0;;-1:-1:-1;;;;;;17420:22:0::1;-1:-1:-1::0;;;;;17420:22:0;;;::::1;::::0;;;::::1;::::0;;17038:412::o;23470:144::-;23531:7;23584:22;;23571:11;;23558:12;;:24;;;;:::i;:::-;23557:49;;;;:::i;:::-;23550:56;;23470:144;:::o;24512:149::-;24565:6;;;;;;;24564:7;24556:29;;;;-1:-1:-1;;;24556:29:0;;8188:2:1;24556:29:0;;;8170:21:1;8227:1;8207:18;;;8200:29;-1:-1:-1;;;8245:18:1;;;8238:39;8294:18;;24556:29:0;7986:332:1;24556:29:0;15886:10;;15900:15;-1:-1:-1;15886:29:0;24596:38;;;;-1:-1:-1;;;24596:38:0;;8525:2:1;24596:38:0;;;8507:21:1;8564:2;8544:18;;;8537:30;-1:-1:-1;;;8583:18:1;;;8576:41;8634:18;;24596:38:0;8323:335:1;24596:38:0;24645:8;:6;:8::i;:::-;;24512:149::o;20183:1266::-;20223:23;20249:24;20267:4;20249:9;:24::i;:::-;20223:50;;20325:16;;20307;;:35;;;;:::i;:::-;:40;;20345:2;20307:40;:::i;:::-;20289:15;:58;20286:147;;;20399:16;;20381;;:35;;;;:::i;:::-;:40;;20419:2;20381:40;:::i;:::-;20363:58;;20286:147;20445:26;20507:8;;20492:12;;20474:15;:30;;;;:::i;:::-;:41;;;;:::i;:::-;20445:70;;20552:1;20531:18;:22;:63;;;;;20576:18;20557:15;:37;;20531:63;20528:264;;;20639:4;;20610:54;;20632:4;;-1:-1:-1;;;;;20639:4:0;20645:18;20610:13;:54::i;:::-;;20679:12;:10;:12::i;:::-;20706:37;20725:18;20706:37;;:::i;:::-;;;20779:1;20758:22;;20528:264;20812:41;20837:15;20812:24;:41::i;:::-;20866:12;;20904:11;;20866:51;;-1:-1:-1;;;20866:51:0;;-1:-1:-1;;;;;20904:11:0;;;20866:51;;;1563::1;20866:12:0;;;:29;;1536:18:1;;20866:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20974:11:0;;20967:44;;-1:-1:-1;;;20967:44:0;;21005:4;20967:44;;;1563:51:1;20938:26:0;;-1:-1:-1;;;;;;20974:11:0;;;;-1:-1:-1;20967:29:0;;1536:18:1;;20967:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20938:73;;21024:30;21107:12;;21093:11;;:26;;;;:::i;:::-;21078:11;;21057:32;;:18;:32;:::i;:::-;:63;;;;:::i;:::-;21024:96;-1:-1:-1;21136:26:0;;21133:126;;21185:11;;21207:15;;21178:69;;-1:-1:-1;;;21178:69:0;;-1:-1:-1;;;;;21207:15:0;;;21178:69;;;9026:51:1;9093:18;;;9086:34;;;21185:11:0;;;21178:28;;8999:18:1;;21178:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21133:126;21281:11;;21274:44;;-1:-1:-1;;;21274:44:0;;21312:4;21274:44;;;1563:51:1;21321:1:0;;-1:-1:-1;;;;;21281:11:0;;21274:29;;1536:18:1;;21274:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;21271:171;;;21345:11;;21367:16;;21385:44;;-1:-1:-1;;;21385:44:0;;21423:4;21385:44;;;1563:51:1;-1:-1:-1;;;;;21345:11:0;;;;21338:28;;21367:16;;21345:11;;21385:29;;1536:18:1;;21385:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21338:92;;-1:-1:-1;;;;;;21338:92:0;;;;;;;-1:-1:-1;;;;;9044:32:1;;;21338:92:0;;;9026:51:1;9093:18;;;9086:34;8999:18;;21338:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21271:171;20210:1239;;;;20183:1266::o;15686:123::-;15739:7;15784:16;;15766;;:35;;;;:::i;15424:133::-;15532:16;;;-1:-1:-1;;;;;15513:17:0;;15486:7;15513:17;;;:12;:17;;;;;;;:36;;15532:16;15513:36;:::i;2930:126::-;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;3011:6:::1;::::0;2992:26:::1;::::0;3011:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;3011:6:0::1;::::0;2992:26:::1;::::0;;;::::1;3029:6;:19:::0;;-1:-1:-1;;;;;;3029:19:0::1;::::0;;2930:126::o;16835:115::-;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;16889:14:::1;:22:::0;;-1:-1:-1;;16889:22:0::1;::::0;;16927:15:::1;::::0;::::1;::::0;16906:5:::1;::::0;16927:15:::1;16835:115::o:0;16436:166::-;16480:6;16476:119;16496:11;:18;16492:22;;16476:119;;;16551:11;16563:1;16551:14;;;;;;;;:::i;:::-;;;;;;;;;;16539:34;;;-1:-1:-1;;;;;;16539:34:0;;;;-1:-1:-1;;;;;16551:14:0;;;;16539:32;;:34;;;;;;;;;;16551:14;;16539:34;;;;;;;;;;;;;;;;;;;;;;;;;16535:49;16516:3;;;;:::i;:::-;;;;16476:119;;25412:242;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;25476:13:::1;::::0;-1:-1:-1;;;25476:13:0;::::1;;;25475:14;25467:49;;;::::0;-1:-1:-1;;;25467:49:0;;9855:2:1;25467:49:0::1;::::0;::::1;9837:21:1::0;9894:2;9874:18;;;9867:30;-1:-1:-1;;;9913:18:1;;;9906:52;9975:18;;25467:49:0::1;9653:346:1::0;25467:49:0::1;25527:13;:20:::0;;-1:-1:-1;;;;25527:20:0::1;-1:-1:-1::0;;;25527:20:0::1;::::0;;25589:15:::1;::::0;25571:33:::1;::::0;:15:::1;:33;:::i;:::-;25558:10;:46:::0;25631:15:::1;25615:13;:31:::0;25412:242::o;25821:180::-;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25909:19:0;::::1;;::::0;;;:12:::1;:19;::::0;;;;;:29;::::1;;:19;::::0;;::::1;:29;;::::0;25901:53:::1;;;::::0;-1:-1:-1;;;25901:53:0;;10206:2:1;25901:53:0::1;::::0;::::1;10188:21:1::0;10245:2;10225:18;;;10218:30;-1:-1:-1;;;10264:18:1;;;10257:41;10315:18;;25901:53:0::1;10004:335:1::0;25901:53:0::1;-1:-1:-1::0;;;;;25965:19:0;;;::::1;;::::0;;;:12:::1;:19;::::0;;;;:28;;-1:-1:-1;;25965:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25821:180::o;1440:87::-;1479:13;1512:7;1505:14;;;;;:::i;24673:731::-;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24774:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;:42;::::1;;:32;::::0;;::::1;:42;;::::0;24766:72:::1;;;::::0;-1:-1:-1;;;24766:72:0;;10546:2:1;24766:72:0::1;::::0;::::1;10528:21:1::0;10585:2;10565:18;;;10558:30;-1:-1:-1;;;10604:18:1;;;10597:47;10661:18;;24766:72:0::1;10344:341:1::0;24766:72:0::1;-1:-1:-1::0;;;;;24851:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;:41;;-1:-1:-1;;24851:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;24905:432:::1;;24930:11;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;24930:23:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;24930:23:0::1;-1:-1:-1::0;;;;;24930:23:0;::::1;;::::0;;24905:432:::1;;;24994:11;:18:::0;25015:1:::1;-1:-1:-1::0;24986:50:0::1;;;::::0;-1:-1:-1;;;24986:50:0;;10892:2:1;24986:50:0::1;::::0;::::1;10874:21:1::0;10931:2;10911:18;;;10904:30;-1:-1:-1;;;10950:18:1;;;10943:45;11005:18;;24986:50:0::1;10690:339:1::0;24986:50:0::1;25056:9;25051:275;25075:11;:18:::0;25071:22;::::1;25051:275;;;25141:5;-1:-1:-1::0;;;;;25123:23:0::1;:11;25135:1;25123:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25123:14:0::1;:23:::0;25119:192:::1;;25188:11;25200:18:::0;;:22:::1;::::0;25221:1:::1;::::0;25200:22:::1;:::i;:::-;25188:35;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;25171:11:::1;:14:::0;;-1:-1:-1;;;;;25188:35:0;;::::1;::::0;25183:1;;25171:14;::::1;;;;;:::i;:::-;;;;;;;;;:52;;;;;-1:-1:-1::0;;;;;25171:52:0::1;;;;;-1:-1:-1::0;;;;;25171:52:0::1;;;;;;25246:11;:17;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25246:17:0;;;;;-1:-1:-1;;;;;;25246:17:0::1;::::0;;;;;25286:5:::1;;25119:192;25095:3:::0;::::1;::::0;::::1;:::i;:::-;;;;25051:275;;;;24905:432;25354:42;::::0;;::::1;;::::0;-1:-1:-1;;;;;25354:42:0;::::1;::::0;::::1;::::0;;;::::1;24673:731:::0;;:::o;26974:188::-;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;27070:15:::1;27056:11;:29;27048:71;;;::::0;-1:-1:-1;;;27048:71:0;;11368:2:1;27048:71:0::1;::::0;::::1;11350:21:1::0;11407:2;11387:18;;;11380:30;11446:31;11426:18;;;11419:59;11495:18;;27048:71:0::1;11166:353:1::0;27048:71:0::1;27130:10;:24:::0;26974:188::o;22284:569::-;22424:10;22371:4;22406:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22406:38:0;;;;;;;;;;22459:27;;;22455:234;;22521:10;22544:1;22503:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22503:38:0;;;;;;;;;:42;22455:234;;;22619:58;22647:15;22619:8;:58;:::i;:::-;22596:10;22578:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22578:38:0;;;;;;;;;:99;22455:234;22727:10;22774:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22704:119:0;;22774:38;;;;;;;;;;;22704:119;;1361:25:1;;;22704:119:0;;22727:10;22704:119;;1334:18:1;22704:119:0;;;;;;;-1:-1:-1;22841:4:0;;22284:569;-1:-1:-1;;;22284:569:0:o;26009:304::-;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26127:32:0;::::1;::::0;;::::1;::::0;:67:::1;;-1:-1:-1::0;;;;;;26163:31:0;::::1;::::0;::::1;26127:67;26119:92;;;::::0;-1:-1:-1;;;26119:92:0;;11726:2:1;26119:92:0::1;::::0;::::1;11708:21:1::0;11765:2;11745:18;;;11738:30;-1:-1:-1;;;11784:18:1;;;11777:42;11836:18;;26119:92:0::1;11524:336:1::0;26119:92:0::1;26222:15;:35:::0;;-1:-1:-1;;;;;26222:35:0;;::::1;-1:-1:-1::0;;;;;;26222:35:0;;::::1;;::::0;;;26268:16:::1;:37:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;26009:304::o;16610:173::-;16701:4;16688:2;-1:-1:-1;;;;;13159:18:0;;13151:27;;;;;;16717:36:::1;16731:10;16743:2;16747:5;16717:13;:36::i;:::-;-1:-1:-1::0;16771:4:0::1;::::0;16610:173;-1:-1:-1;;;;16610:173:0:o;26321:355::-;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;26436:12:::1;:28:::0;;;26475:12:::1;:28:::0;;;26514:11:::1;:26:::0;;;26528:12;26562:27:::1;26490:13:::0;26451;26562:27:::1;:::i;:::-;:41;;;;:::i;:::-;26551:8;:52:::0;;;11175:1:::1;-1:-1:-1::0;26622:24:0::1;26614:54;;;::::0;-1:-1:-1;;;26614:54:0;;12067:2:1;26614:54:0::1;::::0;::::1;12049:21:1::0;12106:2;12086:18;;;12079:30;-1:-1:-1;;;12125:18:1;;;12118:47;12182:18;;26614:54:0::1;11865:341:1::0;26614:54:0::1;26321:355:::0;;;:::o;11034:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11034:28:0;;-1:-1:-1;11034:28:0;:::o;25715:98::-;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;25777:20:::1;:28:::0;;-1:-1:-1;;25777:28:0::1;::::0;;25715:98::o;3064:109::-;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;3137:28:::1;3156:8;3137:18;:28::i;26684:282::-:0;2882:6;;26792:12;;2882:6;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;26848:4:::1;-1:-1:-1::0;;;;;26824:29:0;::::1;::::0;26816:67:::1;;;::::0;-1:-1:-1;;;26816:67:0;;12413:2:1;26816:67:0::1;::::0;::::1;12395:21:1::0;12452:2;12432:18;;;12425:30;12491:27;12471:18;;;12464:55;12536:18;;26816:67:0::1;12211:349:1::0;26816:67:0::1;26901:57;::::0;-1:-1:-1;;;26901:57:0;;-1:-1:-1;;;;;9044:32:1;;;26901:57:0::1;::::0;::::1;9026:51:1::0;9093:18;;;9086:34;;;26901:36:0;::::1;::::0;::::1;::::0;8999:18:1;;26901:57:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26894:64:::0;26684:282;-1:-1:-1;;;;26684:282:0:o;17458:2249::-;17573:13;;17550:4;;-1:-1:-1;;;17573:13:0;;;;17569:122;;-1:-1:-1;;;;;17610:20:0;;;;;;:12;:20;;;;;;;;;:47;;-1:-1:-1;;;;;;17634:23:0;;;;;;:12;:23;;;;;;;;17610:47;17602:77;;;;-1:-1:-1;;;17602:77:0;;12767:2:1;17602:77:0;;;12749:21:1;12806:2;12786:18;;;12779:30;-1:-1:-1;;;12825:18:1;;;12818:47;12882:18;;17602:77:0;12565:341:1;17602:77:0;17706:14;;;;17703:1172;;;-1:-1:-1;;;;;17741:20:0;;;;;;:12;:20;;;;;;;;17740:21;:49;;;;-1:-1:-1;;;;;;17766:23:0;;;;;;:12;:23;;;;;;;;17765:24;17740:49;17736:1128;;;17949:20;;;;17945:524;;;18018:6;-1:-1:-1;;;;;17997:28:0;:9;-1:-1:-1;;;;;17997:28:0;;;:69;;;;-1:-1:-1;;;;;;18030:36:0;;;;;;:25;:36;;;;;;;;18029:37;17997:69;17993:457;;;18127:9;18102:35;;;;:24;:35;;;;;;18144:12;;18102:39;;18140:1;18102:39;:::i;:::-;:54;:112;;;;-1:-1:-1;;;;;;18160:35:0;;;;;;:24;:35;;;;;;18202:12;;18160:39;;18198:1;18160:39;:::i;:::-;:54;18102:112;18094:178;;;;-1:-1:-1;;;18094:178:0;;13113:2:1;18094:178:0;;;13095:21:1;13152:2;13132:18;;;13125:30;13191:34;13171:18;;;13164:62;-1:-1:-1;;;13242:18:1;;;13235:51;13303:19;;18094:178:0;12911:417:1;18094:178:0;18324:9;18299:35;;;;:24;:35;;;;;;18337:12;18299:50;;;;-1:-1:-1;;;;;18376:35:0;;;;;;:50;17993:457;-1:-1:-1;;;;;18519:33:0;;;;;;:25;:33;;;;;;;;18515:157;;;18595:12;;18585:6;:22;;18577:75;;;;-1:-1:-1;;;18577:75:0;;13535:2:1;18577:75:0;;;13517:21:1;13574:2;13554:18;;;13547:30;13613:34;13593:18;;;13586:62;-1:-1:-1;;;13664:18:1;;;13657:38;13712:19;;18577:75:0;13333:404:1;18577:75:0;-1:-1:-1;;;;;18695:36:0;;;;;;:25;:36;;;;;;;;18690:159;;18796:9;;18786:6;18763:20;18773:9;18763;:20::i;:::-;:29;;;;:::i;:::-;:42;;18755:74;;;;-1:-1:-1;;;18755:74:0;;13944:2:1;18755:74:0;;;13926:21:1;13983:2;13963:18;;;13956:30;-1:-1:-1;;;14002:18:1;;;13995:49;14061:18;;18755:74:0;13742:343:1;18755:74:0;-1:-1:-1;;;;;18891:20:0;;;;;;:12;:20;;;;;;;;18890:21;:49;;;;-1:-1:-1;;;;;;18916:23:0;;;;;;:12;:23;;;;;;;;18915:24;18890:49;:69;;;;;18943:16;:14;:16::i;:::-;18890:107;;;;-1:-1:-1;;;;;;18964:33:0;;;;;;:25;:33;;;;;;;;18963:34;18890:107;18887:205;;;19013:6;:13;;-1:-1:-1;;19013:13:0;;;;;19041:10;:8;:10::i;:::-;19066:6;:14;;-1:-1:-1;;19066:14:0;;;18887:205;19107:10;;;;:48;;;;-1:-1:-1;;;;;;19122:33:0;;;;;;:25;:33;;;;;;;;19121:34;19107:48;:59;;;;-1:-1:-1;19160:6:0;;;;;;;19159:7;19107:59;:77;;;;-1:-1:-1;15886:10:0;;15900:15;-1:-1:-1;15886:29:0;19170:14;19107:105;;;;-1:-1:-1;;;;;;19189:23:0;;;;;;:12;:23;;;;;;;;19188:24;19107:105;:130;;;;-1:-1:-1;;;;;;19217:20:0;;;;;;:12;:20;;;;;;;;19216:21;19107:130;19104:169;;;19253:8;:6;:8::i;:::-;;19104:169;19285:17;19313:16;;19305:6;:25;;;;:::i;:::-;-1:-1:-1;;;;;19366:20:0;;;;;;:12;:20;;;;;;19285:45;;-1:-1:-1;19366:32:0;;19285:45;;19366:32;:::i;:::-;-1:-1:-1;;;;;19343:20:0;;;;;;:12;:20;;;;;:55;;;;19439:32;19356:6;19461:9;19439:13;:32::i;:::-;:73;;19503:9;19439:73;;;19474:26;19482:6;19490:9;19474:7;:26::i;:::-;-1:-1:-1;;;;;19549:23:0;;;;;;:12;:23;;;;;;19411:101;;-1:-1:-1;19549:43:0;;19411:101;;19549:43;:::i;:::-;-1:-1:-1;;;;;19523:23:0;;;;;;;:12;:23;;;;;;;;:69;;;;19657:16;;19610:65;;;;;;19638:36;;:17;:36;:::i;:::-;19610:65;;1361:25:1;;;1349:2;1334:18;19610:65:0;;;;;;;-1:-1:-1;19695:4:0;;17458:2249;-1:-1:-1;;;;;17458:2249:0:o;23622:882::-;23740:26;;23724:13;;23657:7;;23693:15;;;;23724:42;;;:::i;:::-;:61;23721:193;;23854:2;23830:21;;23816:11;;:35;;;;:::i;:::-;:40;;;;:::i;:::-;23801:11;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;23887:15:0;23871:13;:31;23721:193;23926:19;23975:22;;23962:11;;23949:12;;:24;;;;:::i;:::-;23948:49;;;;:::i;:::-;23926:71;;24044:15;;24031:10;;:28;;;;:::i;:::-;24018:10;:41;24091:1;24076:16;;;24072:118;;24124:5;24114:30;24131:12;;24114:30;;;;1361:25:1;;1349:2;1334:18;;1215:177;24114:30:0;;;;;;;;24166:12;;24159:19;;;;23622:882;:::o;24072:118::-;24230:11;24217:12;;:24;;;;:::i;:::-;24202:12;:39;11652:12;11335:2;11652;:12;:::i;:::-;11639:25;;:10;:25;:::i;:::-;24258:12;;:25;24254:83;;;11652:12;11335:2;11652;:12;:::i;:::-;11639:25;;:10;:25;:::i;:::-;24300:12;:25;24254:83;24380:12;;11471;11335:2;11471;:12;:::i;:::-;11459:24;;:9;:24;:::i;:::-;11549:44;;-1:-1:-1;;11549:44:0;:::i;:::-;11528:66;;-1:-1:-1;;11528:66:0;:::i;:::-;24368:25;;;;:::i;:::-;24349:16;:44;24406:12;:10;:12::i;:::-;24446:5;24436:30;24453:12;;24436:30;;;;1361:25:1;;1349:2;1334:18;;1215:177;21457:455:0;21555:16;;;21569:1;21555:16;;;;;;;;21531:21;;21555:16;;;;;;;;;;-1:-1:-1;21555:16:0;21531:40;;21600:4;21582;21587:1;21582:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21582:23:0;;;:7;;;;;;;;;:23;21634:11;;21616:7;;21634:11;;;21616:4;;21634:11;;21616:7;;;;;;:::i;:::-;-1:-1:-1;;;;;21616:30:0;;;:7;;;;;;;;;:30;21850:12;;21685:219;;-1:-1:-1;;;21685:219:0;;:6;:60;;;;;:219;;21760:11;;21786:1;;21823:4;;21850:12;;;21878:15;;21685:219;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21520:392;21457:455;:::o;3181:187::-;-1:-1:-1;;;;;3255:22:0;;3247:31;;;;;;3315:6;;3294:38;;-1:-1:-1;;;;;3294:38:0;;;;3315:6;;;;;3294:38;;;;;3343:6;:17;;-1:-1:-1;;;;;3343:17:0;;;;;-1:-1:-1;;;;;;3343:17:0;;;;;;;;;3181:187::o;16222:206::-;16305:6;;16271:4;;16305:6;;;;;16304:7;:31;;;;-1:-1:-1;16324:11:0;;-1:-1:-1;;;16324:11:0;;;;16304:31;:56;;;;;16359:1;16348:8;;:12;16304:56;:116;;;;-1:-1:-1;;16404:16:0;;16394:4;16373:27;;;;:12;:27;;;;;;:47;;;16222:206::o;15931:283::-;-1:-1:-1;;;;;16023:18:0;;16003:4;16023:18;;;:12;:18;;;;;;;;;:38;;-1:-1:-1;;;;;;16045:16:0;;;;;;:12;:16;;;;;;;;16023:38;16020:187;;;-1:-1:-1;16084:5:0;16077:12;;16020:187;-1:-1:-1;;;;;16130:31:0;;;;;;:25;:31;;;;;;;;;:64;;-1:-1:-1;;;;;;16165:29:0;;;;;;:25;:29;;;;;;;;16130:64;16122:73;;;;21920:356;21990:7;22011:17;22053:14;;22042:8;;22031:9;:20;;;;:::i;:::-;:37;;;;:::i;:::-;22132:4;22111:27;;;;:12;:27;;;;;;22011:57;;-1:-1:-1;22111:39:0;;22011:57;;22111:39;:::i;:::-;22102:4;22081:27;;;;:12;:27;;;;;;;;:69;;;;22209:16;;-1:-1:-1;;;;;22166:61:0;;;;;22198:28;;:9;:28;:::i;:::-;22166:61;;1361:25:1;;;1349:2;1334:18;22166:61:0;;;;;;;22247:21;22258:9;22247;:21;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1625:456::-;1702:6;1710;1718;1771:2;1759:9;1750:7;1746:23;1742:32;1739:52;;;1787:1;1784;1777:12;1739:52;1826:9;1813:23;1845:31;1870:5;1845:31;:::i;:::-;1895:5;-1:-1:-1;1952:2:1;1937:18;;1924:32;1965:33;1924:32;1965:33;:::i;:::-;1625:456;;2017:7;;-1:-1:-1;;;2071:2:1;2056:18;;;;2043:32;;1625:456::o;2483:247::-;2542:6;2595:2;2583:9;2574:7;2570:23;2566:32;2563:52;;;2611:1;2608;2601:12;2563:52;2650:9;2637:23;2669:31;2694:5;2669:31;:::i;:::-;2719:5;2483:247;-1:-1:-1;;;2483:247:1:o;2735:118::-;2821:5;2814:13;2807:21;2800:5;2797:32;2787:60;;2843:1;2840;2833:12;2858:382;2923:6;2931;2984:2;2972:9;2963:7;2959:23;2955:32;2952:52;;;3000:1;2997;2990:12;2952:52;3039:9;3026:23;3058:31;3083:5;3058:31;:::i;:::-;3108:5;-1:-1:-1;3165:2:1;3150:18;;3137:32;3178:30;3137:32;3178:30;:::i;:::-;3227:7;3217:17;;;2858:382;;;;;:::o;3245:180::-;3304:6;3357:2;3345:9;3336:7;3332:23;3328:32;3325:52;;;3373:1;3370;3363:12;3325:52;-1:-1:-1;3396:23:1;;3245:180;-1:-1:-1;3245:180:1:o;3430:388::-;3498:6;3506;3559:2;3547:9;3538:7;3534:23;3530:32;3527:52;;;3575:1;3572;3565:12;3527:52;3614:9;3601:23;3633:31;3658:5;3633:31;:::i;:::-;3683:5;-1:-1:-1;3740:2:1;3725:18;;3712:32;3753:33;3712:32;3753:33;:::i;3823:316::-;3900:6;3908;3916;3969:2;3957:9;3948:7;3944:23;3940:32;3937:52;;;3985:1;3982;3975:12;3937:52;-1:-1:-1;;4008:23:1;;;4078:2;4063:18;;4050:32;;-1:-1:-1;4129:2:1;4114:18;;;4101:32;;3823:316;-1:-1:-1;3823:316:1:o;4370:456::-;4447:6;4455;4463;4516:2;4504:9;4495:7;4491:23;4487:32;4484:52;;;4532:1;4529;4522:12;4484:52;4571:9;4558:23;4590:31;4615:5;4590:31;:::i;:::-;4640:5;-1:-1:-1;4692:2:1;4677:18;;4664:32;;-1:-1:-1;4748:2:1;4733:18;;4720:32;4761:33;4720:32;4761:33;:::i;:::-;4813:7;4803:17;;;4370:456;;;;;:::o;4831:380::-;4910:1;4906:12;;;;4953;;;4974:61;;5028:4;5020:6;5016:17;5006:27;;4974:61;5081:2;5073:6;5070:14;5050:18;5047:38;5044:161;;5127:10;5122:3;5118:20;5115:1;5108:31;5162:4;5159:1;5152:15;5190:4;5187:1;5180:15;5044:161;;4831:380;;;:::o;5567:127::-;5628:10;5623:3;5619:20;5616:1;5609:31;5659:4;5656:1;5649:15;5683:4;5680:1;5673:15;5699:128;5766:9;;;5787:11;;;5784:37;;;5801:18;;:::i;5832:125::-;5897:9;;;5918:10;;;5915:36;;;5931:18;;:::i;5962:332::-;6164:2;6146:21;;;6203:1;6183:18;;;6176:29;-1:-1:-1;;;6236:2:1;6221:18;;6214:39;6285:2;6270:18;;5962:332::o;6991:251::-;7061:6;7114:2;7102:9;7093:7;7089:23;7085:32;7082:52;;;7130:1;7127;7120:12;7082:52;7162:9;7156:16;7181:31;7206:5;7181:31;:::i;7556:168::-;7629:9;;;7660;;7677:15;;;7671:22;;7657:37;7647:71;;7698:18;;:::i;7729:127::-;7790:10;7785:3;7781:20;7778:1;7771:31;7821:4;7818:1;7811:15;7845:4;7842:1;7835:15;7861:120;7901:1;7927;7917:35;;7932:18;;:::i;:::-;-1:-1:-1;7966:9:1;;7861:120::o;8663:184::-;8733:6;8786:2;8774:9;8765:7;8761:23;8757:32;8754:52;;;8802:1;8799;8792:12;8754:52;-1:-1:-1;8825:16:1;;8663:184;-1:-1:-1;8663:184:1:o;9131:245::-;9198:6;9251:2;9239:9;9230:7;9226:23;9222:32;9219:52;;;9267:1;9264;9257:12;9219:52;9299:9;9293:16;9318:28;9340:5;9318:28;:::i;9381:127::-;9442:10;9437:3;9433:20;9430:1;9423:31;9473:4;9470:1;9463:15;9497:4;9494:1;9487:15;9513:135;9552:3;9573:17;;;9570:43;;9593:18;;:::i;:::-;-1:-1:-1;9640:1:1;9629:13;;9513:135::o;11034:127::-;11095:10;11090:3;11086:20;11083:1;11076:31;11126:4;11123:1;11116:15;11150:4;11147:1;11140:15;14090:422;14179:1;14222:5;14179:1;14236:270;14257:7;14247:8;14244:21;14236:270;;;14316:4;14312:1;14308:6;14304:17;14298:4;14295:27;14292:53;;;14325:18;;:::i;:::-;14375:7;14365:8;14361:22;14358:55;;;14395:16;;;;14358:55;14474:22;;;;14434:15;;;;14236:270;;;14240:3;14090:422;;;;;:::o;14517:806::-;14566:5;14596:8;14586:80;;-1:-1:-1;14637:1:1;14651:5;;14586:80;14685:4;14675:76;;-1:-1:-1;14722:1:1;14736:5;;14675:76;14767:4;14785:1;14780:59;;;;14853:1;14848:130;;;;14760:218;;14780:59;14810:1;14801:10;;14824:5;;;14848:130;14885:3;14875:8;14872:17;14869:43;;;14892:18;;:::i;:::-;-1:-1:-1;;14948:1:1;14934:16;;14963:5;;14760:218;;15062:2;15052:8;15049:16;15043:3;15037:4;15034:13;15030:36;15024:2;15014:8;15011:16;15006:2;15000:4;14997:12;14993:35;14990:77;14987:159;;;-1:-1:-1;15099:19:1;;;15131:5;;14987:159;15178:34;15203:8;15197:4;15178:34;:::i;:::-;15248:6;15244:1;15240:6;15236:19;15227:7;15224:32;15221:58;;;15259:18;;:::i;:::-;15297:20;;14517:806;-1:-1:-1;;;14517:806:1:o;15328:131::-;15388:5;15417:36;15444:8;15438:4;15417:36;:::i;15464:112::-;15496:1;15522;15512:35;;15527:18;;:::i;:::-;-1:-1:-1;15561:9:1;;15464:112::o;15713:980::-;15975:4;16023:3;16012:9;16008:19;16054:6;16043:9;16036:25;16080:2;16118:6;16113:2;16102:9;16098:18;16091:34;16161:3;16156:2;16145:9;16141:18;16134:31;16185:6;16220;16214:13;16251:6;16243;16236:22;16289:3;16278:9;16274:19;16267:26;;16328:2;16320:6;16316:15;16302:29;;16349:1;16359:195;16373:6;16370:1;16367:13;16359:195;;;16438:13;;-1:-1:-1;;;;;16434:39:1;16422:52;;16529:15;;;;16494:12;;;;16470:1;16388:9;16359:195;;;-1:-1:-1;;;;;;;16610:32:1;;;;16605:2;16590:18;;16583:60;-1:-1:-1;;;16674:3:1;16659:19;16652:35;16571:3;15713:980;-1:-1:-1;;;15713:980:1:o

Swarm Source

ipfs://399a7f69f0f71e3b311e1fbc4547db673f957a702e0d21ebd7ee9b22de0f665c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.