Token ArbiFever

 

Overview ERC20

Price
$0.00 @ 0.000000 ETH
Fully Diluted Market Cap
Total Supply:
100,000,000 AFV

Holders:
2,727 addresses
Contract:
0xaB49E0F2ccF05D1B9a25DF400E7d551C187659890xaB49E0F2ccF05D1B9a25DF400E7d551C18765989

Decimals:
18

Social Profiles:
Not Available, Update ?

Balance
1 AFV

Value
$0.00
0xed2ab4948bA6A909a7751DEc4F34f303eB8c7236
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ArbiFever

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2023-03-06
*/

// SPDX-License-Identifier: MIT

/*

Fever is coming on Arbitrum

twitter: https://twitter.com/ArbiFever
discord: https://discord.gg/arbifever


Dapp and contract by 8digits Labs
twitter: https://twitter.com/8digitsLabs

*/

// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Tree proofs.
 *
 * The tree and the proofs can be generated using our
 * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].
 * You will find a quickstart guide in the readme.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 * OpenZeppelin's JavaScript library generates merkle trees that are safe
 * against this attack out of the box.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Calldata version of {verify}
     *
     * _Available since v4.7._
     */
    function verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Calldata version of {processProof}
     *
     * _Available since v4.7._
     */
    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Calldata version of {multiProofVerify}
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
     * respectively.
     *
     * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     *
     * _Available since v4.7._
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Calldata version of {processMultiProof}.
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

pragma solidity ^0.8.9;

abstract contract Ownable {
    address internal _owner;

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

    constructor () {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

interface ERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


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


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

    function WETH() external pure returns (address);

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

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

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

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

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

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

contract ArbiFever is ERC20, Ownable {
    string private _name = "ArbiFever";
    string private _symbol = "AFV";
    uint8 constant _decimals = 18;
    uint256 _totalSupply = 100000000 * 10**_decimals;

    uint256 public _maxWalletSize = (_totalSupply * 30) / 1000; // 3% 

    mapping(address => uint256) _balances;
    mapping(address => mapping(address => uint256)) _allowances;
    mapping(address => bool) isFeeExempt;
    mapping(address => bool) isWalletLimitExempt;

    uint256 public DevFeeBuy = 40;
    uint256 public DevFeeSell = 40;
    uint256 public InfecterFeeBuy = 40;
    uint256 public InfecterFeeSell = 40;

    uint256 public TotalBase = DevFeeBuy + DevFeeSell + InfecterFeeBuy + InfecterFeeSell;

    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;

    address public autoLiquidityReceiver;
    address public MarketingWallet;

    IUniswapV2Router02 public router;
    address public pair;

    bool public isTradingEnabled = false;

    bool public swapEnabled = true;
    uint256 public swapThreshold = (_totalSupply / 1000) * 3; // 0.3%

    bool inSwap;
    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    mapping (address => bool) public infected;
    mapping (address => address) public infecter;
    mapping (address => uint256) public totalRewards;
    mapping (address => uint256) public pendingRewards;
    mapping (address => uint256) public amountOfInfection;

    uint256 currentPendingRewards;
    uint256 public amountRestantToClaim = 46000000 ether;

    uint256 public totalAllRewards;
    uint256 public amountOfAllInfection;

    address[5] bestInfector;

    uint256 launchTime;

    event infection(address indexed infecter, address indexed infected);
    event _claim(address indexed user, uint256 amount);
    event _claimPresale(address indexed user, uint256 amount);
    event _depositETH(address indexed user, uint256 amount);

    constructor(address _MarketingWallet) Ownable(){
        router = IUniswapV2Router02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506); //sushiswap
        pair = IUniswapV2Factory(router.factory()).createPair(
            router.WETH(),
            address(this)
        );
        _allowances[address(this)][address(router)] = type(uint256).max;

        MarketingWallet = _MarketingWallet;

        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;
        isFeeExempt[MarketingWallet] = true;

        isWalletLimitExempt[msg.sender] = true;
        isWalletLimitExempt[MarketingWallet] = true;
        isWalletLimitExempt[DEAD] = true;
        isWalletLimitExempt[address(this)] = true;
        isWalletLimitExempt[pair] = true;
        isWalletLimitExempt[0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506] = true;

        infected[msg.sender] = true;
        infected[MarketingWallet] = true;
        infected[DEAD] = true;
        infected[address(this)] = true;
        infected[pair] = true;
        infected[0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506] = true;

        _balances[msg.sender] = _totalSupply * 100 / 100;

        emit Transfer(address(0), msg.sender, _totalSupply * 100 / 100);
    }
    
    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view override returns (string memory) { return _name; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
    event AutoLiquify(uint256 amountETH, uint256 amountBOG);
    receive() external payable { }

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function setMaxWallet(uint256 _maxWalletSize_) external onlyOwner {
        require(
            _maxWalletSize_ >= _totalSupply / 1000,
            "Can't set MaxWallet below 0.1%"
        );
        _maxWalletSize = _maxWalletSize_;
    }

    function setFeesWallet(address _MarketingWallet) external onlyOwner {
        MarketingWallet = _MarketingWallet;
        isFeeExempt[MarketingWallet] = true;

        isWalletLimitExempt[MarketingWallet] = true;        
    }

    function setIsWalletLimitExempt(address holder, bool exempt)
        external
        onlyOwner
    {
        isWalletLimitExempt[holder] = exempt; // Exempt from max wallet
    }

    function setSwapEnabled(bool _swapEnabled) public onlyOwner {
        swapEnabled = _swapEnabled;
    }

    function setamountRestantToClaim(uint256 _amountRestantToClaim) external onlyOwner {
        amountRestantToClaim = _amountRestantToClaim;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }
        return _transferFrom(sender, recipient, amount);
    }

    function infect(address _toInfect) external {
        require(!infected[_toInfect], "Already infected");
        require(balanceOf(msg.sender) >= 1, "Not enough tokens to infect");
        require(infected[msg.sender] == true, "You're not infected");

        infecter[_toInfect] = msg.sender;
        infected[_toInfect] = true;
        amountOfInfection[msg.sender] ++;
        amountOfAllInfection ++;
        
        _balances[msg.sender] = _balances[msg.sender] - 1 ether;
        bool temp;

        temp = _basicTransfer(msg.sender, _toInfect, 1 ether);

        emit infection(msg.sender, _toInfect);
    }

    function infectOG(address[] memory _toInfect) external onlyOwner{

        for(uint256 i; i < _toInfect.length; i++) {
            require(!infected[_toInfect[i]], "Already infected");
            require(balanceOf(msg.sender) >= 1, "not enough tokens to infect");
            require(infected[msg.sender] == true, "not infected");

            infecter[_toInfect[i]] = msg.sender;
            infected[_toInfect[i]] = true;
            amountOfInfection[msg.sender] ++;
            amountOfAllInfection ++;
            
            _balances[msg.sender] = _balances[msg.sender] - 1 ether;
            bool temp;
            temp = _basicTransfer(msg.sender, _toInfect[i], 1 ether);

            emit infection(msg.sender, _toInfect[i]);
        }
    }

    function checkBestInfector() internal {
        address user = msg.sender;
        uint256[5] memory rewards;
        address[5] memory sortedAddresses;
        uint256 index = 0;
        for (uint i = 0; i < bestInfector.length; i++) {
            rewards[i] = totalRewards[bestInfector[i]];
        }

        for (uint256 i = 0; i < bestInfector.length; i++) {
            if(bestInfector[i] == user) {
                index = i;
            }
        }

        if(rewards[0] < totalRewards[user] && index != bestInfector.length - 1) {
            if(index == 0) sortedAddresses[0] = user;
            for (uint256 i = index + 1; i < bestInfector.length; i++) {
                if(rewards[i] < totalRewards[user]) {
                    sortedAddresses[i - 1] = bestInfector[i];
                    sortedAddresses[i] = user;
                }
            }
            bestInfector = sortedAddresses;
        }
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        require(isFeeExempt[sender] || isFeeExempt[recipient] || isTradingEnabled, "Not authorized to trade yet");

        // Checks infection
        if(recipient != pair) {
            require(infected[recipient], "Not infected");
        }

        
        // Checks max transaction limit
        if (sender != owner() && recipient != owner() && recipient != DEAD) {
            if(recipient != pair) {
            require(isWalletLimitExempt[recipient] || (_balances[recipient] + amount <= _maxWalletSize), "Transfer amount exceeds the MaxWallet size.");
            }
        }
        //shouldSwapBack
        if (shouldSwapBack() && recipient == pair) {
            swapBack();
        }

        _balances[sender] = _balances[sender] - amount;

        //Check if should Take Fee
        uint256 amountReceived = (!shouldTakeFee(sender) ||
            !shouldTakeFee(recipient))
            ? amount
            : takeFee(sender, recipient, amount);
        _balances[recipient] = _balances[recipient] + (amountReceived);

        emit Transfer(sender, recipient, amountReceived);

        return true;
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[recipient] = _balances[recipient] + (amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeTeam = 0;
        uint256 feeInfecter = 0;
        uint256 feeAmount = 0;

        if (sender == pair && recipient != pair) {
            // <=> buy
            feeTeam = amount * DevFeeBuy / 1000;
            feeInfecter = amount * InfecterFeeBuy / 1000;
            pendingRewards[infecter[recipient]] += feeInfecter;
            currentPendingRewards += feeInfecter;
        }
        if (sender != pair && recipient == pair) {
            // <=> sell
            feeTeam = amount * DevFeeSell / 1000;
            feeInfecter = amount * InfecterFeeSell / 1000;
            pendingRewards[infecter[sender]] += feeInfecter; 
            currentPendingRewards += feeInfecter;
        }
        feeAmount = feeTeam + feeInfecter;

        if (feeAmount > 0) {
            _balances[address(this)] += feeAmount;
            emit Transfer(sender, address(this), feeAmount);
        }
        
        return amount - feeAmount;
    }

    function claim() external {
        require(msg.sender == tx.origin, "error");
        require(pendingRewards[msg.sender] > 0 ,"no pending rewards");

        uint256 _pendingRewards = pendingRewards[msg.sender];
        pendingRewards[msg.sender] = 0;
        
        _balances[address(this)] = _balances[address(this)] - _pendingRewards;
        bool temp;
        temp = _basicTransfer(address(this), msg.sender, _pendingRewards);
        require(temp, "transfer failed");
        totalRewards[msg.sender] += _pendingRewards;
        totalAllRewards += _pendingRewards;
        currentPendingRewards -= _pendingRewards;

        checkBestInfector();
        emit _claim(msg.sender, _pendingRewards);
    }

    function getBestInfector() external view returns(address[5] memory) { return bestInfector;}

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function shouldSwapBack() internal view returns (bool) {
        return
            msg.sender != pair &&
            !inSwap &&
            swapEnabled &&
            balanceOf(address(this)) - currentPendingRewards - amountRestantToClaim >= swapThreshold;
    }

    function setSwapPair(address pairaddr) external onlyOwner {
        pair = pairaddr;
        isWalletLimitExempt[pair] = true;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external onlyOwner {
        require(_amount >= 1, "Can't set SwapThreshold to ZERO");
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

     function setIsTradingEnabled(bool _isTradingEnabled) external onlyOwner{
        isTradingEnabled = _isTradingEnabled;
        if(isTradingEnabled) launchTime = block.timestamp;
    }

    function checkBestInfector(address user) internal {
        uint256[5] memory rewards;
        address[5] memory sortedAddresses;
        uint256 index;
        for (uint i = 0; i < bestInfector.length; i++) {
            rewards[i] = totalRewards[bestInfector[i]];
        }

        for (uint256 i = 0; i < 5; i++) {
                if(bestInfector[0] == user) {
                    index = i;
                }
            }

        if(rewards[0] < totalRewards[user]) {
            if(index > 0) sortedAddresses[0] = user;
            for (index; index < 5; index++) {
                if(rewards[index] < totalRewards[user]) {
                    sortedAddresses[index - 1] = bestInfector[index];
                    sortedAddresses[index] = user;
                }
            }
        }

        bestInfector = sortedAddresses;
    }

    function setFees(uint256 _DevFeeBuy, uint256 _DevFeeSell, uint256 _InfecterFeeBuy, uint256 _InfecterFeeSell) external onlyOwner {
        DevFeeBuy = _DevFeeBuy;
        DevFeeSell = _DevFeeSell;
        InfecterFeeBuy = _InfecterFeeBuy;
        InfecterFeeSell = _InfecterFeeSell;
        TotalBase = DevFeeBuy + DevFeeSell + InfecterFeeBuy + InfecterFeeSell;
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function swapBack() internal swapping {
        uint256 amountToSwap = balanceOf(address(this)) - currentPendingRewards - amountRestantToClaim;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp + 5 minutes
        );

        uint256 amountETHDev = address(this).balance;

        if(amountETHDev>0){
            bool tmpSuccess;
            (tmpSuccess,) = payable(MarketingWallet).call{value: amountETHDev, gas: 30000}("");
        }
    }


    ///////////////////////PRESALE////////////////////////////////


    mapping(address => uint256) public amountDeposit;
    mapping(uint256 => mapping(address => bool)) public haveClaimedPresale;
    uint256 public MinimumPresaleAllocation = 0.03 ether;
    uint256 public MaximumPresaleAllocation = 0.2 ether;
    uint256 public presaleTotal;
    uint256[] public vesting = [40, 30, 30];
    uint256 public presalePercentage = 46;
    bool public beforeSale;
    uint256 delayBetweenClaimPresale = 86400;
    bytes32 merkleRoot;
    
    bool public saleOpen;

    function openSale() external onlyOwner {
        saleOpen = true;
    }

    function closeSale() external onlyOwner {
        saleOpen = false;
        beforeSale = true;
    }

    function changeBeforeSale(bool _beforeSale) external onlyOwner {
        beforeSale = _beforeSale;
    }

    function withdraw() public onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

    function getCurrentStep() public view returns(uint256){
        if (launchTime == 0) return 0;
        if (launchTime + delayBetweenClaimPresale > block.timestamp) return 1;
        if (launchTime + 2 * delayBetweenClaimPresale > block.timestamp) return 2;
        return 3;
    }

    function setDelayBetweenClaimPresale(uint256 _delayBetweenClaimPresale) external onlyOwner{
        delayBetweenClaimPresale = _delayBetweenClaimPresale;
    }

    function depositETH(bytes32[] calldata _proof) external payable {
        require(msg.sender == tx.origin, "error");
        require(saleOpen, "sale is not open");
        require(msg.value + amountDeposit[msg.sender] >= MinimumPresaleAllocation, "Amount deposit is too low.");
        require(msg.value + amountDeposit[msg.sender] <= MaximumPresaleAllocation, "Amount deposit is too high.");
        require(isWhiteListed(msg.sender, _proof), "Not whitelisted");

        amountDeposit[msg.sender] += msg.value;
        presaleTotal += msg.value;
        infected[msg.sender] = true;
        infecter[msg.sender] = owner();
        amountOfAllInfection ++;
        emit _depositETH(msg.sender, msg.value);
    }

    function SetDepositETH(address[] memory users, uint256[] memory amounts) external onlyOwner {
        for(uint256 i; i < users.length; i++) {
            amountDeposit[users[i]] += amounts[i];
            presaleTotal += amounts[i];
            infected[users[i]] = true;
            infecter[users[i]] = owner();
            amountOfAllInfection ++;
        }
    }

    function checkCanClaimPresale(address user) view public returns(bool){
        return amountDeposit[user] > 0 && getCurrentStep() != 0
        && !haveClaimedPresale[getCurrentStep()][user];
    }

    function getAmountToClaim(address user) view public returns(uint256) {
        uint256 percentage;
        uint256 amount;
        for(uint256 i = 1; i <= getCurrentStep(); i++) {
            if(!haveClaimedPresale[i][user]) {
                percentage = vesting[i - 1];
                amount += (amountDeposit[user] * (_totalSupply * presalePercentage / 100) / presaleTotal) * percentage / 100;
            }
        }
        return amount;
    }

    function claimPresale() external {
        require(checkCanClaimPresale(msg.sender), "cant claim presale");
        require(msg.sender == tx.origin, "not allowed");
        uint256 amount;
        uint256 percentage;

        for(uint256 i = 1; i <= getCurrentStep(); i++) {
            if(!haveClaimedPresale[i][msg.sender]) {
                percentage = vesting[i - 1];
                amount += (amountDeposit[msg.sender] * (_totalSupply * presalePercentage / 100) / presaleTotal) * percentage / 100;
            }
            haveClaimedPresale[i][msg.sender] = true;
        }
        amountRestantToClaim -= amount;
        _balances[msg.sender] += amount;
        _balances[address(this)] -= amount;
        emit Transfer(address(this), msg.sender, amount);
        emit _claimPresale(msg.sender, amount);
    }



    ///////////////////////WHITELIST////////////////////////////////


    function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner {
        merkleRoot = _merkleRoot;
    }

    function isWhiteListed(address _account, bytes32[] calldata _proof)
        public
        view
        returns (bool)
    {
        return _verify(leaf(_account), _proof);
    }

    function leaf(address _account) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked(_account));
    }

    function _verify(bytes32 _leaf, bytes32[] memory _proof)
        internal
        view
        returns (bool)
    {
        return MerkleProof.verify(_proof, merkleRoot, _leaf);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_MarketingWallet","type":"address"}],"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":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_claimPresale","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_depositETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"infecter","type":"address"},{"indexed":true,"internalType":"address","name":"infected","type":"address"}],"name":"infection","type":"event"},{"inputs":[],"name":"DevFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DevFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"InfecterFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"InfecterFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaximumPresaleAllocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MinimumPresaleAllocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"SetDepositETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TotalBase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"amountDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountOfAllInfection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"amountOfInfection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountRestantToClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beforeSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_beforeSale","type":"bool"}],"name":"changeBeforeSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"checkCanClaimPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"closeSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getAmountToClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBestInfector","outputs":[{"internalType":"address[5]","name":"","type":"address[5]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentStep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"haveClaimedPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_toInfect","type":"address"}],"name":"infect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_toInfect","type":"address[]"}],"name":"infectOG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"infected","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"infecter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"isWhiteListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openSale","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"","type":"address"}],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presalePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_delayBetweenClaimPresale","type":"uint256"}],"name":"setDelayBetweenClaimPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_DevFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_DevFeeSell","type":"uint256"},{"internalType":"uint256","name":"_InfecterFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_InfecterFeeSell","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_MarketingWallet","type":"address"}],"name":"setFeesWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isTradingEnabled","type":"bool"}],"name":"setIsTradingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletSize_","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pairaddr","type":"address"}],"name":"setSwapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountRestantToClaim","type":"uint256"}],"name":"setamountRestantToClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"vesting","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600960809081526820b93134a332bb32b960b91b60a0526001906200002a9082620006ca565b5060408051808201909152600381526220a32b60e91b6020820152600290620000549082620006ca565b50620000636012600a620008ab565b62000073906305f5e100620008c3565b6003556103e8600354601e6200008a9190620008c3565b620000969190620008dd565b60045560286009819055600a819055600b819055600c81905580620000bc818062000900565b620000c8919062000900565b620000d4919062000900565b600d556011805461ffff60a01b1916600160a81b179055600354620000fd906103e890620008dd565b6200010a906003620008c3565b6012556a260ce0ff28d2b2ee000000601a55666a94d74f4300006025556702c68af0bb140000602655604080516060810182526028808252601e60208301819052928201929092526200016091906003620005b9565b50602e60295562015180602b553480156200017a57600080fd5b50604051620040db380380620040db8339810160408190526200019d9162000916565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601080546001600160a01b031916731b02da8cb0d097eb8d57a175b88c7d8b479975069081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000243573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000269919062000916565b6001600160a01b031663c9c65396601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f1919062000916565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156200033e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000364919062000916565b601180546001600160a01b03199081166001600160a01b039384161782553060008181526006602090815260408083206010548816845282528083206000199055600f80549095168888161785553380845260078352818420805460ff199081166001908117909255868652838620805482168317905587548a168652838620805482168317905582865260088552838620805482168317905587548a16865283862080548216831790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd093342998054821683179055868652838620805482168317905588548a16865283862080548216831790557fb50832c66f3cfdd9d738efba7c10e1a3f1a5e99524570cf093d28e82df057da680548216831790559185526014909352818420805482168417905594548716835280832080548616831790557f8b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db00805486168317905592825282822080548516821790559354909416845283208054821683179055731b02da8cb0d097eb8d57a175b88c7d8b479975069092527f2bcac51bc661119b055882d7b945e8c9b355b2d938c5241eaa171e9b382ac18280549092161790556003546064906200053f9082620008c3565b6200054b9190620008dd565b336000818152600560205260408120929092556003549091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90606490620005959082620008c3565b620005a19190620008dd565b60405190815260200160405180910390a35062000941565b828054828255906000526020600020908101928215620005fc579160200282015b82811115620005fc578251829060ff16905591602001919060010190620005da565b506200060a9291506200060e565b5090565b5b808211156200060a57600081556001016200060f565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200065057607f821691505b6020821081036200067157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006c557600081815260208120601f850160051c81016020861015620006a05750805b601f850160051c820191505b81811015620006c157828155600101620006ac565b5050505b505050565b81516001600160401b03811115620006e657620006e662000625565b620006fe81620006f784546200063b565b8462000677565b602080601f8311600181146200073657600084156200071d5750858301515b600019600386901b1c1916600185901b178555620006c1565b600085815260208120601f198616915b82811015620007675788860151825594840194600190910190840162000746565b5085821015620007865787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007ed578160001904821115620007d157620007d162000796565b80851615620007df57918102915b93841c9390800290620007b1565b509250929050565b6000826200080657506001620008a5565b816200081557506000620008a5565b81600181146200082e5760028114620008395762000859565b6001915050620008a5565b60ff8411156200084d576200084d62000796565b50506001821b620008a5565b5060208310610133831016604e8410600b84101617156200087e575081810a620008a5565b6200088a8383620007ac565b8060001904821115620008a157620008a162000796565b0290505b92915050565b6000620008bc60ff841683620007f5565b9392505050565b8082028115828204841417620008a557620008a562000796565b600082620008fb57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008a557620008a562000796565b6000602082840312156200092957600080fd5b81516001600160a01b0381168114620008bc57600080fd5b61378a80620009516000396000f3fe6080604052600436106104095760003560e01c80636ddd171311610213578063b29a8e0011610123578063dd62ed3e116100ab578063ee55efee1161007a578063ee55efee14610c30578063f1d6c75614610c45578063f2fde38b14610c5b578063f5415cbb14610c7b578063f887ea4014610c9b57600080fd5b8063dd62ed3e14610b94578063de8af79114610bda578063df20fd4914610bf0578063e01af92c14610c1057600080fd5b8063ce891ef2116100f2578063ce891ef214610b08578063d3bd6d6514610b28578063d86697ee14610b48578063da23545914610b68578063dc1d85f614610b7e57600080fd5b8063b29a8e0014610a81578063c3ec889714610abc578063ca27375614610ad2578063ca33e64c14610ae857600080fd5b80638da5cb5b116101a657806396eb64a91161017557806396eb64a9146109da57806399288dbb146109fa578063a8aa1b3114610a14578063a9059cbb14610a34578063ab7573dd14610a5457600080fd5b80638da5cb5b1461097e5780638f9a55c01461099c57806393df36ec146109b257806395d89b41146109c557600080fd5b806373a432bb116101e257806373a432bb146109065780637cb647591461092657806383f04c72146109465780638b46840b1461095c57600080fd5b80636ddd17131461087a5780636fcba3771461089b57806370a08231146108bb578063715018a6146108f157600080fd5b8063313ce56711610319578063559ef225116102a15780635d0044ca116102705780635d0044ca146107da5780636295c649146107fa578063636ee0db14610810578063658d4b7f146108405780636898f1481461086057600080fd5b8063559ef225146107645780635674bee114610784578063571ac8b0146107a45780635be0499b146107c457600080fd5b8063431cf922116102e8578063431cf922146106d657806343d4f92b1461070357806344a8b0cd146107235780634e71d92d146107395780635119c9711461074e57600080fd5b8063313ce5671461064257806331d7a2621461065e5780633ccfd60b1461068b5780633eca5343146106a057600080fd5b8063105cfc5c1161039c5780631d3824ea1161036b5780631d3824ea146105955780632198cf6c146105aa57806323b872dd146105ca5780632598cdb2146105ea5780632ffac82c1461062257600080fd5b8063105cfc5c14610535578063145a2dc514610555578063167ff46f1461056b57806318160ddd1461058057600080fd5b806306fdde03116103d857806306fdde03146104a6578063095ea7b3146104c85780630bca8bcd146104e85780630f44e8941461050857600080fd5b80630445b66714610415578063046ef9a51461043e578063062225a714610455578063064a59d01461048557600080fd5b3661041057005b600080fd5b34801561042157600080fd5b5061042b60125481565b6040519081526020015b60405180910390f35b34801561044a57600080fd5b50610453610cbb565b005b34801561046157600080fd5b506104756104703660046130ba565b610f02565b6040519015158152602001610435565b34801561049157600080fd5b5060115461047590600160a01b900460ff1681565b3480156104b257600080fd5b506104bb610f74565b60405161043591906130d7565b3480156104d457600080fd5b506104756104e3366004613125565b611006565b3480156104f457600080fd5b5061042b6105033660046130ba565b611072565b34801561051457600080fd5b5061042b6105233660046130ba565b60186020526000908152604090205481565b34801561054157600080fd5b50610453610550366004613151565b611165565b34801561056157600080fd5b5061042b60265481565b34801561057757600080fd5b50610453611194565b34801561058c57600080fd5b5060035461042b565b3480156105a157600080fd5b5061042b6111cd565b3480156105b657600080fd5b506104536105c536600461317f565b61122b565b3480156105d657600080fd5b506104756105e53660046131b4565b611280565b3480156105f657600080fd5b50600f5461060a906001600160a01b031681565b6040516001600160a01b039091168152602001610435565b34801561062e57600080fd5b5061042b61063d366004613151565b611313565b34801561064e57600080fd5b5060405160128152602001610435565b34801561066a57600080fd5b5061042b6106793660046130ba565b60176020526000908152604090205481565b34801561069757600080fd5b50610453611334565b3480156106ac57600080fd5b5061060a6106bb3660046130ba565b6015602052600090815260409020546001600160a01b031681565b3480156106e257600080fd5b5061042b6106f13660046130ba565b60236020526000908152604090205481565b34801561070f57600080fd5b5061045361071e3660046130ba565b61139b565b34801561072f57600080fd5b5061042b601a5481565b34801561074557600080fd5b5061045361141e565b34801561075a57600080fd5b5061042b601b5481565b34801561077057600080fd5b5061045361077f3660046131f5565b6115c5565b34801561079057600080fd5b5061045361079f366004613151565b61161d565b3480156107b057600080fd5b506104756107bf3660046130ba565b61164c565b3480156107d057600080fd5b5061042b600d5481565b3480156107e657600080fd5b506104536107f5366004613151565b61165a565b34801561080657600080fd5b5061042b600a5481565b34801561081c57600080fd5b5061047561082b3660046130ba565b60146020526000908152604090205460ff1681565b34801561084c57600080fd5b5061045361085b36600461317f565b6116e8565b34801561086c57600080fd5b50602a546104759060ff1681565b34801561088657600080fd5b5060115461047590600160a81b900460ff1681565b3480156108a757600080fd5b506104536108b6366004613210565b61173d565b3480156108c757600080fd5b5061042b6108d63660046130ba565b6001600160a01b031660009081526005602052604090205490565b3480156108fd57600080fd5b506104536117a4565b34801561091257600080fd5b506104536109213660046130ba565b611818565b34801561093257600080fd5b50610453610941366004613151565b61187c565b34801561095257600080fd5b5061042b600b5481565b34801561096857600080fd5b506109716118ab565b6040516104359190613242565b34801561098a57600080fd5b506000546001600160a01b031661060a565b3480156109a857600080fd5b5061042b60045481565b6104536109c03660046132c8565b6118f0565b3480156109d157600080fd5b506104bb611b67565b3480156109e657600080fd5b506104536109f53660046130ba565b611b76565b348015610a0657600080fd5b50602d546104759060ff1681565b348015610a2057600080fd5b5060115461060a906001600160a01b031681565b348015610a4057600080fd5b50610475610a4f366004613125565b611d81565b348015610a6057600080fd5b5061042b610a6f3660046130ba565b60166020526000908152604090205481565b348015610a8d57600080fd5b50610475610a9c36600461330a565b602460209081526000928352604080842090915290825290205460ff1681565b348015610ac857600080fd5b5061042b601c5481565b348015610ade57600080fd5b5061042b60255481565b348015610af457600080fd5b50600e5461060a906001600160a01b031681565b348015610b1457600080fd5b50610453610b233660046131f5565b611d95565b348015610b3457600080fd5b50610453610b43366004613419565b611dd2565b348015610b5457600080fd5b50610475610b633660046134d4565b611fa3565b348015610b7457600080fd5b5061042b60095481565b348015610b8a57600080fd5b5061042b60275481565b348015610ba057600080fd5b5061042b610baf366004613529565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610be657600080fd5b5061042b60295481565b348015610bfc57600080fd5b50610453610c0b366004613557565b612024565b348015610c1c57600080fd5b50610453610c2b3660046131f5565b6120c1565b348015610c3c57600080fd5b50610453612109565b348015610c5157600080fd5b5061042b600c5481565b348015610c6757600080fd5b50610453610c763660046130ba565b61214e565b348015610c8757600080fd5b50610453610c96366004613573565b612214565b348015610ca757600080fd5b5060105461060a906001600160a01b031681565b610cc433610f02565b610d0a5760405162461bcd60e51b815260206004820152601260248201527163616e7420636c61696d2070726573616c6560701b60448201526064015b60405180910390fd5b333214610d475760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b6044820152606401610d01565b60008060015b610d556111cd565b8111610e4357600081815260246020908152604080832033845290915290205460ff16610e0d576028610d896001836135be565b81548110610d9957610d996135d1565b906000526020600020015491506064826027546064602954600354610dbe91906135e7565b610dc891906135fe565b33600090815260236020526040902054610de291906135e7565b610dec91906135fe565b610df691906135e7565b610e0091906135fe565b610e0a9084613620565b92505b60008181526024602090815260408083203384529091529020805460ff1916600117905580610e3b81613633565b915050610d4d565b5081601a6000828254610e5691906135be565b90915550503360009081526005602052604081208054849290610e7a908490613620565b90915550503060009081526005602052604081208054849290610e9e9084906135be565b9091555050604051828152339030906000805160206137358339815191529060200160405180910390a360405182815233907f58c757c20c6fd456273fc2cf46b92edf1464795a9a40f234a94ea2e7f3b6727f906020015b60405180910390a25050565b6001600160a01b03811660009081526023602052604081205415801590610f2f5750610f2c6111cd565b15155b8015610f6e575060246000610f426111cd565b8152602080820192909252604090810160009081206001600160a01b038616825290925290205460ff16155b92915050565b606060018054610f839061364c565b80601f0160208091040260200160405190810160405280929190818152602001828054610faf9061364c565b8015610ffc5780601f10610fd157610100808354040283529160200191610ffc565b820191906000526020600020905b815481529060010190602001808311610fdf57829003601f168201915b5050505050905090565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906110619086815260200190565b60405180910390a350600192915050565b6000808060015b6110816111cd565b811161115d5760008181526024602090815260408083206001600160a01b038916845290915290205460ff1661114b5760286110be6001836135be565b815481106110ce576110ce6135d1565b9060005260206000200154925060648360275460646029546003546110f391906135e7565b6110fd91906135fe565b6001600160a01b03891660009081526023602052604090205461112091906135e7565b61112a91906135fe565b61113491906135e7565b61113e91906135fe565b6111489083613620565b91505b8061115581613633565b915050611079565b509392505050565b6000546001600160a01b0316331461118f5760405162461bcd60e51b8152600401610d0190613686565b601a55565b6000546001600160a01b031633146111be5760405162461bcd60e51b8152600401610d0190613686565b602d805460ff19166001179055565b60006022546000036111df5750600090565b42602b546022546111f09190613620565b11156111fc5750600190565b42602b54600261120c91906135e7565b6022546112199190613620565b11156112255750600290565b50600390565b6000546001600160a01b031633146112555760405162461bcd60e51b8152600401610d0190613686565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6001600160a01b038316600090815260066020908152604080832033845290915281205460001914611300576001600160a01b03841660009081526006602090815260408083203384529091529020546112db9083906135be565b6001600160a01b03851660009081526006602090815260408083203384529091529020555b61130b848484612534565b949350505050565b6028818154811061132357600080fd5b600091825260209091200154905081565b6000546001600160a01b0316331461135e5760405162461bcd60e51b8152600401610d0190613686565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611398573d6000803e3d6000fd5b50565b6000546001600160a01b031633146113c55760405162461bcd60e51b8152600401610d0190613686565b600f80546001600160a01b0319166001600160a01b0392831690811782556000908152600760209081526040808320805460ff199081166001908117909255945490951683526008909152902080549091169091179055565b3332146114555760405162461bcd60e51b815260206004820152600560248201526432b93937b960d91b6044820152606401610d01565b336000908152601760205260409020546114a65760405162461bcd60e51b81526020600482015260126024820152716e6f2070656e64696e67207265776172647360701b6044820152606401610d01565b3360009081526017602090815260408083208054908490553084526005909252909120546114d59082906135be565b306000818152600560205260408120929092556114f390338461287d565b9050806115345760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610d01565b3360009081526016602052604081208054849290611553908490613620565b9250508190555081601b600082825461156c9190613620565b92505081905550816019600082825461158591906135be565b9091555061159390506128f5565b60405182815233907f620fc7379f7c67f4289f23e24a7f28f721792b0e898e2af03581b2e73e604a5390602001610ef6565b6000546001600160a01b031633146115ef5760405162461bcd60e51b8152600401610d0190613686565b6011805460ff60a01b1916600160a01b8315158102919091179182905560ff91041615611398574260225550565b6000546001600160a01b031633146116475760405162461bcd60e51b8152600401610d0190613686565b602b55565b6000610f6e82600019611006565b6000546001600160a01b031633146116845760405162461bcd60e51b8152600401610d0190613686565b6103e860035461169491906135fe565b8110156116e35760405162461bcd60e51b815260206004820152601e60248201527f43616e277420736574204d617857616c6c65742062656c6f7720302e312500006044820152606401610d01565b600455565b6000546001600160a01b031633146117125760405162461bcd60e51b8152600401610d0190613686565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117675760405162461bcd60e51b8152600401610d0190613686565b6009849055600a839055600b829055600c81905580826117878587613620565b6117919190613620565b61179b9190613620565b600d5550505050565b6000546001600160a01b031633146117ce5760405162461bcd60e51b8152600401610d0190613686565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146118425760405162461bcd60e51b8152600401610d0190613686565b601180546001600160a01b039092166001600160a01b0319909216821790556000908152600860205260409020805460ff19166001179055565b6000546001600160a01b031633146118a65760405162461bcd60e51b8152600401610d0190613686565b602c55565b6118b361301a565b6040805160a081019182905290601d9060059082845b81546001600160a01b031681526001909101906020018083116118c9575050505050905090565b3332146119275760405162461bcd60e51b815260206004820152600560248201526432b93937b960d91b6044820152606401610d01565b602d5460ff1661196c5760405162461bcd60e51b815260206004820152601060248201526f39b0b6329034b9903737ba1037b832b760811b6044820152606401610d01565b602554336000908152602360205260409020546119899034613620565b10156119d75760405162461bcd60e51b815260206004820152601a60248201527f416d6f756e74206465706f73697420697320746f6f206c6f772e0000000000006044820152606401610d01565b602654336000908152602360205260409020546119f49034613620565b1115611a425760405162461bcd60e51b815260206004820152601b60248201527f416d6f756e74206465706f73697420697320746f6f20686967682e00000000006044820152606401610d01565b611a4d338383611fa3565b611a8b5760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610d01565b3360009081526023602052604081208054349290611aaa908490613620565b925050819055503460276000828254611ac39190613620565b9091555050336000908152601460205260409020805460ff19166001179055611af46000546001600160a01b031690565b33600090815260156020526040812080546001600160a01b0319166001600160a01b039390931692909217909155601c805491611b3083613633565b909155505060405134815233907f32a56dc70306cd08cba04d010e836f7358aced016eeee06701116b62c4e7d52490602001610ef6565b606060028054610f839061364c565b6001600160a01b03811660009081526014602052604090205460ff1615611bd25760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481a5b999958dd195960821b6044820152606401610d01565b3360009081526005602052604090205460011115611c325760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320746f20696e6665637400000000006044820152606401610d01565b3360009081526014602052604090205460ff161515600114611c8c5760405162461bcd60e51b8152602060048201526013602482015272165bdd49dc99481b9bdd081a5b999958dd1959606a1b6044820152606401610d01565b6001600160a01b038116600090815260156020908152604080832080546001600160a01b0319163390811790915560148352818420805460ff19166001179055835260189091528120805491611ce183613633565b9091555050601c8054906000611cf683613633565b909155505033600090815260056020526040902054611d1e90670de0b6b3a7640000906135be565b33600081815260056020526040812092909255611d449083670de0b6b3a764000061287d565b6040519091506001600160a01b0383169033907f65e2f1400ae8f2248d5f90d205f42d4b5a91835d0dbef107d1a4722b1cb5867490600090a35050565b6000611d8e338484612534565b9392505050565b6000546001600160a01b03163314611dbf5760405162461bcd60e51b8152600401610d0190613686565b602a805460ff1916911515919091179055565b6000546001600160a01b03163314611dfc5760405162461bcd60e51b8152600401610d0190613686565b60005b8251811015611f9e57818181518110611e1a57611e1a6135d1565b602002602001015160236000858481518110611e3857611e386135d1565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000828254611e6f9190613620565b92505081905550818181518110611e8857611e886135d1565b602002602001015160276000828254611ea19190613620565b92505081905550600160146000858481518110611ec057611ec06135d1565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550611f116000546001600160a01b031690565b60156000858481518110611f2757611f276135d1565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601c6000815480929190611f8690613633565b91905055508080611f9690613633565b915050611dff565b505050565b600061130b611feb856040516bffffffffffffffffffffffff19606083901b166020820152600090603401604051602081830303815290604052805190602001209050919050565b848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612af892505050565b6000546001600160a01b0316331461204e5760405162461bcd60e51b8152600401610d0190613686565b600181101561209f5760405162461bcd60e51b815260206004820152601f60248201527f43616e27742073657420537761705468726573686f6c6420746f205a45524f006044820152606401610d01565b60118054921515600160a81b0260ff60a81b1990931692909217909155601255565b6000546001600160a01b031633146120eb5760405162461bcd60e51b8152600401610d0190613686565b60118054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b031633146121335760405162461bcd60e51b8152600401610d0190613686565b602d805460ff19908116909155602a80549091166001179055565b6000546001600160a01b031633146121785760405162461bcd60e51b8152600401610d0190613686565b6001600160a01b0381166121b95760405162461bcd60e51b815260206004820152600860248201526706e657720697320360c41b6044820152606401610d01565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461223e5760405162461bcd60e51b8152600401610d0190613686565b60005b81518110156125305760146000838381518110612260576122606135d1565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16156122c75760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481a5b999958dd195960821b6044820152606401610d01565b33600090815260056020526040902054600111156123275760405162461bcd60e51b815260206004820152601b60248201527f6e6f7420656e6f75676820746f6b656e7320746f20696e6665637400000000006044820152606401610d01565b3360009081526014602052604090205460ff16151560011461237a5760405162461bcd60e51b815260206004820152600c60248201526b1b9bdd081a5b999958dd195960a21b6044820152606401610d01565b3360156000848481518110612391576123916135d1565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055506001601460008484815181106123f5576123f56135d1565b6020908102919091018101516001600160a01b031682528181019290925260409081016000908120805460ff1916941515949094179093553383526018909152812080549161244383613633565b9091555050601c805490600061245883613633565b90915550503360009081526005602052604090205461248090670de0b6b3a7640000906135be565b3360008181526005602052604081209290925583516124c291908590859081106124ac576124ac6135d1565b6020026020010151670de0b6b3a764000061287d565b90508282815181106124d6576124d66135d1565b60200260200101516001600160a01b0316336001600160a01b03167f65e2f1400ae8f2248d5f90d205f42d4b5a91835d0dbef107d1a4722b1cb5867460405160405180910390a3508061252881613633565b915050612241565b5050565b6001600160a01b03831660009081526007602052604081205460ff168061257357506001600160a01b03831660009081526007602052604090205460ff165b806125875750601154600160a01b900460ff165b6125d35760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420617574686f72697a656420746f2074726164652079657400000000006044820152606401610d01565b6011546001600160a01b0384811691161461263f576001600160a01b03831660009081526014602052604090205460ff1661263f5760405162461bcd60e51b815260206004820152600c60248201526b139bdd081a5b999958dd195960a21b6044820152606401610d01565b6000546001600160a01b0385811691161480159061266b57506000546001600160a01b03848116911614155b801561268257506001600160a01b03831661dead14155b15612748576011546001600160a01b03848116911614612748576001600160a01b03831660009081526008602052604090205460ff16806126e857506004546001600160a01b0384166000908152600560205260409020546126e5908490613620565b11155b6127485760405162461bcd60e51b815260206004820152602b60248201527f5472616e7366657220616d6f756e74206578636565647320746865204d61785760448201526a30b63632ba1039b4bd329760a91b6064820152608401610d01565b612750612b07565b801561276957506011546001600160a01b038481169116145b1561277657612776612b79565b6001600160a01b03841660009081526005602052604090205461279a9083906135be565b6001600160a01b038516600090815260056020908152604080832093909355600790529081205460ff161515806127eb57506001600160a01b03841660009081526007602052604090205460ff1615155b6127ff576127fa858585612d83565b612801565b825b6001600160a01b038516600090815260056020526040902054909150612828908290613620565b6001600160a01b0380861660008181526005602052604090819020939093559151908716906000805160206137358339815191529061286a9085815260200190565b60405180910390a3506001949350505050565b6001600160a01b0382166000908152600560205260408120546128a1908390613620565b6001600160a01b038085166000818152600560205260409081902093909355915190861690600080516020613735833981519152906128e39086815260200190565b60405180910390a35060019392505050565b336128fe61301a565b61290661301a565b6000805b600581101561296f5760166000601d836005811061292a5761292a6135d1565b01546001600160a01b03168152602081019190915260400160002054848260058110612958576129586135d1565b60200201528061296781613633565b91505061290a565b5060005b60058110156129bf57846001600160a01b0316601d8260058110612999576129996135d1565b01546001600160a01b0316036129ad578091505b806129b781613633565b915050612973565b506001600160a01b03841660009081526016602052604090205483511080156129f357506129ef600160056135be565b8114155b15612af25780600003612a0d576001600160a01b03841682525b6000612a1a826001613620565b90505b6005811015612ae2576001600160a01b038516600090815260166020526040902054848260058110612a5157612a516135d1565b60200201511015612ad057601d8160058110612a6f57612a6f6135d1565b01546001600160a01b031683612a866001846135be565b60058110612a9657612a966135d1565b6001600160a01b03909216602092909202015284838260058110612abc57612abc6135d1565b6001600160a01b0390921660209290920201525b80612ada81613633565b915050612a1d565b50612af0601d836005613038565b505b50505050565b6000611d8e82602c5485612f90565b6011546000906001600160a01b03163314801590612b28575060135460ff16155b8015612b3d5750601154600160a81b900460ff165b8015612b745750601254601a5460195430600090815260056020526040902054612b6791906135be565b612b7191906135be565b10155b905090565b6013805460ff19166001179055601a5460195460009190612baf306001600160a01b031660009081526005602052604090205490565b612bb991906135be565b612bc391906135be565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612bfd57612bfd6135d1565b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7a91906136a6565b81600181518110612c8d57612c8d6135d1565b6001600160a01b0392831660209182029290920101526010541663791ac9478360008430612cbd4261012c613620565b6040518663ffffffff1660e01b8152600401612cdd9594939291906136c3565b600060405180830381600087803b158015612cf757600080fd5b505af1158015612d0b573d6000803e3d6000fd5b504792505081159050612d7457600f546040516000916001600160a01b03169061753090849084818181858888f193505050503d8060008114612d6a576040519150601f19603f3d011682016040523d82523d6000602084013e612d6f565b606091505b505050505b50506013805460ff1916905550565b6011546000908190819081906001600160a01b038881169116148015612db757506011546001600160a01b03878116911614155b15612e51576103e860095486612dcd91906135e7565b612dd791906135fe565b92506103e8600b5486612dea91906135e7565b612df491906135fe565b6001600160a01b0380881660009081526015602090815260408083205490931682526017905290812080549294508492909190612e32908490613620565b925050819055508160196000828254612e4b9190613620565b90915550505b6011546001600160a01b03888116911614801590612e7c57506011546001600160a01b038781169116145b15612f16576103e8600a5486612e9291906135e7565b612e9c91906135fe565b92506103e8600c5486612eaf91906135e7565b612eb991906135fe565b6001600160a01b0380891660009081526015602090815260408083205490931682526017905290812080549294508492909190612ef7908490613620565b925050819055508160196000828254612f109190613620565b90915550505b612f208284613620565b90508015612f7b573060009081526005602052604081208054839290612f47908490613620565b909155505060405181815230906001600160a01b038916906000805160206137358339815191529060200160405180910390a35b612f8581866135be565b979650505050505050565b600082612f9d8584612fa6565b14949350505050565b600081815b845181101561115d57612fd782868381518110612fca57612fca6135d1565b6020026020010151612feb565b915080612fe381613633565b915050612fab565b6000818310613007576000828152602084905260409020611d8e565b6000838152602083905260409020611d8e565b6040518060a001604052806005906020820280368337509192915050565b8260058101928215613080579160200282015b8281111561308057825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061304b565b5061308c929150613090565b5090565b5b8082111561308c5760008155600101613091565b6001600160a01b038116811461139857600080fd5b6000602082840312156130cc57600080fd5b8135611d8e816130a5565b600060208083528351808285015260005b81811015613104578581018301518582016040015282016130e8565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561313857600080fd5b8235613143816130a5565b946020939093013593505050565b60006020828403121561316357600080fd5b5035919050565b8035801515811461317a57600080fd5b919050565b6000806040838503121561319257600080fd5b823561319d816130a5565b91506131ab6020840161316a565b90509250929050565b6000806000606084860312156131c957600080fd5b83356131d4816130a5565b925060208401356131e4816130a5565b929592945050506040919091013590565b60006020828403121561320757600080fd5b611d8e8261316a565b6000806000806080858703121561322657600080fd5b5050823594602084013594506040840135936060013592509050565b60a08101818360005b60058110156132735781516001600160a01b031683526020928301929091019060010161324b565b50505092915050565b60008083601f84011261328e57600080fd5b50813567ffffffffffffffff8111156132a657600080fd5b6020830191508360208260051b85010111156132c157600080fd5b9250929050565b600080602083850312156132db57600080fd5b823567ffffffffffffffff8111156132f257600080fd5b6132fe8582860161327c565b90969095509350505050565b6000806040838503121561331d57600080fd5b82359150602083013561332f816130a5565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156133795761337961333a565b604052919050565b600067ffffffffffffffff82111561339b5761339b61333a565b5060051b60200190565b600082601f8301126133b657600080fd5b813560206133cb6133c683613381565b613350565b82815260059290921b840181019181810190868411156133ea57600080fd5b8286015b8481101561340e578035613401816130a5565b83529183019183016133ee565b509695505050505050565b6000806040838503121561342c57600080fd5b823567ffffffffffffffff8082111561344457600080fd5b613450868387016133a5565b935060209150818501358181111561346757600080fd5b85019050601f8101861361347a57600080fd5b80356134886133c682613381565b81815260059190911b820183019083810190888311156134a757600080fd5b928401925b828410156134c5578335825292840192908401906134ac565b80955050505050509250929050565b6000806000604084860312156134e957600080fd5b83356134f4816130a5565b9250602084013567ffffffffffffffff81111561351057600080fd5b61351c8682870161327c565b9497909650939450505050565b6000806040838503121561353c57600080fd5b8235613547816130a5565b9150602083013561332f816130a5565b6000806040838503121561356a57600080fd5b6131438361316a565b60006020828403121561358557600080fd5b813567ffffffffffffffff81111561359c57600080fd5b61130b848285016133a5565b634e487b7160e01b600052601160045260246000fd5b81810381811115610f6e57610f6e6135a8565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610f6e57610f6e6135a8565b60008261361b57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610f6e57610f6e6135a8565b600060018201613645576136456135a8565b5060010190565b600181811c9082168061366057607f821691505b60208210810361368057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526006908201526510b7bbb732b960d11b604082015260600190565b6000602082840312156136b857600080fd5b8151611d8e816130a5565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137135784516001600160a01b0316835293830193918301916001016136ee565b50506001600160a01b0396909616606085015250505060800152939250505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212202484ca09371b3b788c84f087f7d4aaf5e8aa247bc7d1c7318826636efa0c468764736f6c634300081200330000000000000000000000000943153b8efb432504f80830fd02d21aba77e993

Deployed Bytecode

0x6080604052600436106104095760003560e01c80636ddd171311610213578063b29a8e0011610123578063dd62ed3e116100ab578063ee55efee1161007a578063ee55efee14610c30578063f1d6c75614610c45578063f2fde38b14610c5b578063f5415cbb14610c7b578063f887ea4014610c9b57600080fd5b8063dd62ed3e14610b94578063de8af79114610bda578063df20fd4914610bf0578063e01af92c14610c1057600080fd5b8063ce891ef2116100f2578063ce891ef214610b08578063d3bd6d6514610b28578063d86697ee14610b48578063da23545914610b68578063dc1d85f614610b7e57600080fd5b8063b29a8e0014610a81578063c3ec889714610abc578063ca27375614610ad2578063ca33e64c14610ae857600080fd5b80638da5cb5b116101a657806396eb64a91161017557806396eb64a9146109da57806399288dbb146109fa578063a8aa1b3114610a14578063a9059cbb14610a34578063ab7573dd14610a5457600080fd5b80638da5cb5b1461097e5780638f9a55c01461099c57806393df36ec146109b257806395d89b41146109c557600080fd5b806373a432bb116101e257806373a432bb146109065780637cb647591461092657806383f04c72146109465780638b46840b1461095c57600080fd5b80636ddd17131461087a5780636fcba3771461089b57806370a08231146108bb578063715018a6146108f157600080fd5b8063313ce56711610319578063559ef225116102a15780635d0044ca116102705780635d0044ca146107da5780636295c649146107fa578063636ee0db14610810578063658d4b7f146108405780636898f1481461086057600080fd5b8063559ef225146107645780635674bee114610784578063571ac8b0146107a45780635be0499b146107c457600080fd5b8063431cf922116102e8578063431cf922146106d657806343d4f92b1461070357806344a8b0cd146107235780634e71d92d146107395780635119c9711461074e57600080fd5b8063313ce5671461064257806331d7a2621461065e5780633ccfd60b1461068b5780633eca5343146106a057600080fd5b8063105cfc5c1161039c5780631d3824ea1161036b5780631d3824ea146105955780632198cf6c146105aa57806323b872dd146105ca5780632598cdb2146105ea5780632ffac82c1461062257600080fd5b8063105cfc5c14610535578063145a2dc514610555578063167ff46f1461056b57806318160ddd1461058057600080fd5b806306fdde03116103d857806306fdde03146104a6578063095ea7b3146104c85780630bca8bcd146104e85780630f44e8941461050857600080fd5b80630445b66714610415578063046ef9a51461043e578063062225a714610455578063064a59d01461048557600080fd5b3661041057005b600080fd5b34801561042157600080fd5b5061042b60125481565b6040519081526020015b60405180910390f35b34801561044a57600080fd5b50610453610cbb565b005b34801561046157600080fd5b506104756104703660046130ba565b610f02565b6040519015158152602001610435565b34801561049157600080fd5b5060115461047590600160a01b900460ff1681565b3480156104b257600080fd5b506104bb610f74565b60405161043591906130d7565b3480156104d457600080fd5b506104756104e3366004613125565b611006565b3480156104f457600080fd5b5061042b6105033660046130ba565b611072565b34801561051457600080fd5b5061042b6105233660046130ba565b60186020526000908152604090205481565b34801561054157600080fd5b50610453610550366004613151565b611165565b34801561056157600080fd5b5061042b60265481565b34801561057757600080fd5b50610453611194565b34801561058c57600080fd5b5060035461042b565b3480156105a157600080fd5b5061042b6111cd565b3480156105b657600080fd5b506104536105c536600461317f565b61122b565b3480156105d657600080fd5b506104756105e53660046131b4565b611280565b3480156105f657600080fd5b50600f5461060a906001600160a01b031681565b6040516001600160a01b039091168152602001610435565b34801561062e57600080fd5b5061042b61063d366004613151565b611313565b34801561064e57600080fd5b5060405160128152602001610435565b34801561066a57600080fd5b5061042b6106793660046130ba565b60176020526000908152604090205481565b34801561069757600080fd5b50610453611334565b3480156106ac57600080fd5b5061060a6106bb3660046130ba565b6015602052600090815260409020546001600160a01b031681565b3480156106e257600080fd5b5061042b6106f13660046130ba565b60236020526000908152604090205481565b34801561070f57600080fd5b5061045361071e3660046130ba565b61139b565b34801561072f57600080fd5b5061042b601a5481565b34801561074557600080fd5b5061045361141e565b34801561075a57600080fd5b5061042b601b5481565b34801561077057600080fd5b5061045361077f3660046131f5565b6115c5565b34801561079057600080fd5b5061045361079f366004613151565b61161d565b3480156107b057600080fd5b506104756107bf3660046130ba565b61164c565b3480156107d057600080fd5b5061042b600d5481565b3480156107e657600080fd5b506104536107f5366004613151565b61165a565b34801561080657600080fd5b5061042b600a5481565b34801561081c57600080fd5b5061047561082b3660046130ba565b60146020526000908152604090205460ff1681565b34801561084c57600080fd5b5061045361085b36600461317f565b6116e8565b34801561086c57600080fd5b50602a546104759060ff1681565b34801561088657600080fd5b5060115461047590600160a81b900460ff1681565b3480156108a757600080fd5b506104536108b6366004613210565b61173d565b3480156108c757600080fd5b5061042b6108d63660046130ba565b6001600160a01b031660009081526005602052604090205490565b3480156108fd57600080fd5b506104536117a4565b34801561091257600080fd5b506104536109213660046130ba565b611818565b34801561093257600080fd5b50610453610941366004613151565b61187c565b34801561095257600080fd5b5061042b600b5481565b34801561096857600080fd5b506109716118ab565b6040516104359190613242565b34801561098a57600080fd5b506000546001600160a01b031661060a565b3480156109a857600080fd5b5061042b60045481565b6104536109c03660046132c8565b6118f0565b3480156109d157600080fd5b506104bb611b67565b3480156109e657600080fd5b506104536109f53660046130ba565b611b76565b348015610a0657600080fd5b50602d546104759060ff1681565b348015610a2057600080fd5b5060115461060a906001600160a01b031681565b348015610a4057600080fd5b50610475610a4f366004613125565b611d81565b348015610a6057600080fd5b5061042b610a6f3660046130ba565b60166020526000908152604090205481565b348015610a8d57600080fd5b50610475610a9c36600461330a565b602460209081526000928352604080842090915290825290205460ff1681565b348015610ac857600080fd5b5061042b601c5481565b348015610ade57600080fd5b5061042b60255481565b348015610af457600080fd5b50600e5461060a906001600160a01b031681565b348015610b1457600080fd5b50610453610b233660046131f5565b611d95565b348015610b3457600080fd5b50610453610b43366004613419565b611dd2565b348015610b5457600080fd5b50610475610b633660046134d4565b611fa3565b348015610b7457600080fd5b5061042b60095481565b348015610b8a57600080fd5b5061042b60275481565b348015610ba057600080fd5b5061042b610baf366004613529565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610be657600080fd5b5061042b60295481565b348015610bfc57600080fd5b50610453610c0b366004613557565b612024565b348015610c1c57600080fd5b50610453610c2b3660046131f5565b6120c1565b348015610c3c57600080fd5b50610453612109565b348015610c5157600080fd5b5061042b600c5481565b348015610c6757600080fd5b50610453610c763660046130ba565b61214e565b348015610c8757600080fd5b50610453610c96366004613573565b612214565b348015610ca757600080fd5b5060105461060a906001600160a01b031681565b610cc433610f02565b610d0a5760405162461bcd60e51b815260206004820152601260248201527163616e7420636c61696d2070726573616c6560701b60448201526064015b60405180910390fd5b333214610d475760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b6044820152606401610d01565b60008060015b610d556111cd565b8111610e4357600081815260246020908152604080832033845290915290205460ff16610e0d576028610d896001836135be565b81548110610d9957610d996135d1565b906000526020600020015491506064826027546064602954600354610dbe91906135e7565b610dc891906135fe565b33600090815260236020526040902054610de291906135e7565b610dec91906135fe565b610df691906135e7565b610e0091906135fe565b610e0a9084613620565b92505b60008181526024602090815260408083203384529091529020805460ff1916600117905580610e3b81613633565b915050610d4d565b5081601a6000828254610e5691906135be565b90915550503360009081526005602052604081208054849290610e7a908490613620565b90915550503060009081526005602052604081208054849290610e9e9084906135be565b9091555050604051828152339030906000805160206137358339815191529060200160405180910390a360405182815233907f58c757c20c6fd456273fc2cf46b92edf1464795a9a40f234a94ea2e7f3b6727f906020015b60405180910390a25050565b6001600160a01b03811660009081526023602052604081205415801590610f2f5750610f2c6111cd565b15155b8015610f6e575060246000610f426111cd565b8152602080820192909252604090810160009081206001600160a01b038616825290925290205460ff16155b92915050565b606060018054610f839061364c565b80601f0160208091040260200160405190810160405280929190818152602001828054610faf9061364c565b8015610ffc5780601f10610fd157610100808354040283529160200191610ffc565b820191906000526020600020905b815481529060010190602001808311610fdf57829003601f168201915b5050505050905090565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906110619086815260200190565b60405180910390a350600192915050565b6000808060015b6110816111cd565b811161115d5760008181526024602090815260408083206001600160a01b038916845290915290205460ff1661114b5760286110be6001836135be565b815481106110ce576110ce6135d1565b9060005260206000200154925060648360275460646029546003546110f391906135e7565b6110fd91906135fe565b6001600160a01b03891660009081526023602052604090205461112091906135e7565b61112a91906135fe565b61113491906135e7565b61113e91906135fe565b6111489083613620565b91505b8061115581613633565b915050611079565b509392505050565b6000546001600160a01b0316331461118f5760405162461bcd60e51b8152600401610d0190613686565b601a55565b6000546001600160a01b031633146111be5760405162461bcd60e51b8152600401610d0190613686565b602d805460ff19166001179055565b60006022546000036111df5750600090565b42602b546022546111f09190613620565b11156111fc5750600190565b42602b54600261120c91906135e7565b6022546112199190613620565b11156112255750600290565b50600390565b6000546001600160a01b031633146112555760405162461bcd60e51b8152600401610d0190613686565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6001600160a01b038316600090815260066020908152604080832033845290915281205460001914611300576001600160a01b03841660009081526006602090815260408083203384529091529020546112db9083906135be565b6001600160a01b03851660009081526006602090815260408083203384529091529020555b61130b848484612534565b949350505050565b6028818154811061132357600080fd5b600091825260209091200154905081565b6000546001600160a01b0316331461135e5760405162461bcd60e51b8152600401610d0190613686565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611398573d6000803e3d6000fd5b50565b6000546001600160a01b031633146113c55760405162461bcd60e51b8152600401610d0190613686565b600f80546001600160a01b0319166001600160a01b0392831690811782556000908152600760209081526040808320805460ff199081166001908117909255945490951683526008909152902080549091169091179055565b3332146114555760405162461bcd60e51b815260206004820152600560248201526432b93937b960d91b6044820152606401610d01565b336000908152601760205260409020546114a65760405162461bcd60e51b81526020600482015260126024820152716e6f2070656e64696e67207265776172647360701b6044820152606401610d01565b3360009081526017602090815260408083208054908490553084526005909252909120546114d59082906135be565b306000818152600560205260408120929092556114f390338461287d565b9050806115345760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610d01565b3360009081526016602052604081208054849290611553908490613620565b9250508190555081601b600082825461156c9190613620565b92505081905550816019600082825461158591906135be565b9091555061159390506128f5565b60405182815233907f620fc7379f7c67f4289f23e24a7f28f721792b0e898e2af03581b2e73e604a5390602001610ef6565b6000546001600160a01b031633146115ef5760405162461bcd60e51b8152600401610d0190613686565b6011805460ff60a01b1916600160a01b8315158102919091179182905560ff91041615611398574260225550565b6000546001600160a01b031633146116475760405162461bcd60e51b8152600401610d0190613686565b602b55565b6000610f6e82600019611006565b6000546001600160a01b031633146116845760405162461bcd60e51b8152600401610d0190613686565b6103e860035461169491906135fe565b8110156116e35760405162461bcd60e51b815260206004820152601e60248201527f43616e277420736574204d617857616c6c65742062656c6f7720302e312500006044820152606401610d01565b600455565b6000546001600160a01b031633146117125760405162461bcd60e51b8152600401610d0190613686565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117675760405162461bcd60e51b8152600401610d0190613686565b6009849055600a839055600b829055600c81905580826117878587613620565b6117919190613620565b61179b9190613620565b600d5550505050565b6000546001600160a01b031633146117ce5760405162461bcd60e51b8152600401610d0190613686565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146118425760405162461bcd60e51b8152600401610d0190613686565b601180546001600160a01b039092166001600160a01b0319909216821790556000908152600860205260409020805460ff19166001179055565b6000546001600160a01b031633146118a65760405162461bcd60e51b8152600401610d0190613686565b602c55565b6118b361301a565b6040805160a081019182905290601d9060059082845b81546001600160a01b031681526001909101906020018083116118c9575050505050905090565b3332146119275760405162461bcd60e51b815260206004820152600560248201526432b93937b960d91b6044820152606401610d01565b602d5460ff1661196c5760405162461bcd60e51b815260206004820152601060248201526f39b0b6329034b9903737ba1037b832b760811b6044820152606401610d01565b602554336000908152602360205260409020546119899034613620565b10156119d75760405162461bcd60e51b815260206004820152601a60248201527f416d6f756e74206465706f73697420697320746f6f206c6f772e0000000000006044820152606401610d01565b602654336000908152602360205260409020546119f49034613620565b1115611a425760405162461bcd60e51b815260206004820152601b60248201527f416d6f756e74206465706f73697420697320746f6f20686967682e00000000006044820152606401610d01565b611a4d338383611fa3565b611a8b5760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610d01565b3360009081526023602052604081208054349290611aaa908490613620565b925050819055503460276000828254611ac39190613620565b9091555050336000908152601460205260409020805460ff19166001179055611af46000546001600160a01b031690565b33600090815260156020526040812080546001600160a01b0319166001600160a01b039390931692909217909155601c805491611b3083613633565b909155505060405134815233907f32a56dc70306cd08cba04d010e836f7358aced016eeee06701116b62c4e7d52490602001610ef6565b606060028054610f839061364c565b6001600160a01b03811660009081526014602052604090205460ff1615611bd25760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481a5b999958dd195960821b6044820152606401610d01565b3360009081526005602052604090205460011115611c325760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320746f20696e6665637400000000006044820152606401610d01565b3360009081526014602052604090205460ff161515600114611c8c5760405162461bcd60e51b8152602060048201526013602482015272165bdd49dc99481b9bdd081a5b999958dd1959606a1b6044820152606401610d01565b6001600160a01b038116600090815260156020908152604080832080546001600160a01b0319163390811790915560148352818420805460ff19166001179055835260189091528120805491611ce183613633565b9091555050601c8054906000611cf683613633565b909155505033600090815260056020526040902054611d1e90670de0b6b3a7640000906135be565b33600081815260056020526040812092909255611d449083670de0b6b3a764000061287d565b6040519091506001600160a01b0383169033907f65e2f1400ae8f2248d5f90d205f42d4b5a91835d0dbef107d1a4722b1cb5867490600090a35050565b6000611d8e338484612534565b9392505050565b6000546001600160a01b03163314611dbf5760405162461bcd60e51b8152600401610d0190613686565b602a805460ff1916911515919091179055565b6000546001600160a01b03163314611dfc5760405162461bcd60e51b8152600401610d0190613686565b60005b8251811015611f9e57818181518110611e1a57611e1a6135d1565b602002602001015160236000858481518110611e3857611e386135d1565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000828254611e6f9190613620565b92505081905550818181518110611e8857611e886135d1565b602002602001015160276000828254611ea19190613620565b92505081905550600160146000858481518110611ec057611ec06135d1565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550611f116000546001600160a01b031690565b60156000858481518110611f2757611f276135d1565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601c6000815480929190611f8690613633565b91905055508080611f9690613633565b915050611dff565b505050565b600061130b611feb856040516bffffffffffffffffffffffff19606083901b166020820152600090603401604051602081830303815290604052805190602001209050919050565b848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612af892505050565b6000546001600160a01b0316331461204e5760405162461bcd60e51b8152600401610d0190613686565b600181101561209f5760405162461bcd60e51b815260206004820152601f60248201527f43616e27742073657420537761705468726573686f6c6420746f205a45524f006044820152606401610d01565b60118054921515600160a81b0260ff60a81b1990931692909217909155601255565b6000546001600160a01b031633146120eb5760405162461bcd60e51b8152600401610d0190613686565b60118054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b031633146121335760405162461bcd60e51b8152600401610d0190613686565b602d805460ff19908116909155602a80549091166001179055565b6000546001600160a01b031633146121785760405162461bcd60e51b8152600401610d0190613686565b6001600160a01b0381166121b95760405162461bcd60e51b815260206004820152600860248201526706e657720697320360c41b6044820152606401610d01565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461223e5760405162461bcd60e51b8152600401610d0190613686565b60005b81518110156125305760146000838381518110612260576122606135d1565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16156122c75760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481a5b999958dd195960821b6044820152606401610d01565b33600090815260056020526040902054600111156123275760405162461bcd60e51b815260206004820152601b60248201527f6e6f7420656e6f75676820746f6b656e7320746f20696e6665637400000000006044820152606401610d01565b3360009081526014602052604090205460ff16151560011461237a5760405162461bcd60e51b815260206004820152600c60248201526b1b9bdd081a5b999958dd195960a21b6044820152606401610d01565b3360156000848481518110612391576123916135d1565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055506001601460008484815181106123f5576123f56135d1565b6020908102919091018101516001600160a01b031682528181019290925260409081016000908120805460ff1916941515949094179093553383526018909152812080549161244383613633565b9091555050601c805490600061245883613633565b90915550503360009081526005602052604090205461248090670de0b6b3a7640000906135be565b3360008181526005602052604081209290925583516124c291908590859081106124ac576124ac6135d1565b6020026020010151670de0b6b3a764000061287d565b90508282815181106124d6576124d66135d1565b60200260200101516001600160a01b0316336001600160a01b03167f65e2f1400ae8f2248d5f90d205f42d4b5a91835d0dbef107d1a4722b1cb5867460405160405180910390a3508061252881613633565b915050612241565b5050565b6001600160a01b03831660009081526007602052604081205460ff168061257357506001600160a01b03831660009081526007602052604090205460ff165b806125875750601154600160a01b900460ff165b6125d35760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420617574686f72697a656420746f2074726164652079657400000000006044820152606401610d01565b6011546001600160a01b0384811691161461263f576001600160a01b03831660009081526014602052604090205460ff1661263f5760405162461bcd60e51b815260206004820152600c60248201526b139bdd081a5b999958dd195960a21b6044820152606401610d01565b6000546001600160a01b0385811691161480159061266b57506000546001600160a01b03848116911614155b801561268257506001600160a01b03831661dead14155b15612748576011546001600160a01b03848116911614612748576001600160a01b03831660009081526008602052604090205460ff16806126e857506004546001600160a01b0384166000908152600560205260409020546126e5908490613620565b11155b6127485760405162461bcd60e51b815260206004820152602b60248201527f5472616e7366657220616d6f756e74206578636565647320746865204d61785760448201526a30b63632ba1039b4bd329760a91b6064820152608401610d01565b612750612b07565b801561276957506011546001600160a01b038481169116145b1561277657612776612b79565b6001600160a01b03841660009081526005602052604090205461279a9083906135be565b6001600160a01b038516600090815260056020908152604080832093909355600790529081205460ff161515806127eb57506001600160a01b03841660009081526007602052604090205460ff1615155b6127ff576127fa858585612d83565b612801565b825b6001600160a01b038516600090815260056020526040902054909150612828908290613620565b6001600160a01b0380861660008181526005602052604090819020939093559151908716906000805160206137358339815191529061286a9085815260200190565b60405180910390a3506001949350505050565b6001600160a01b0382166000908152600560205260408120546128a1908390613620565b6001600160a01b038085166000818152600560205260409081902093909355915190861690600080516020613735833981519152906128e39086815260200190565b60405180910390a35060019392505050565b336128fe61301a565b61290661301a565b6000805b600581101561296f5760166000601d836005811061292a5761292a6135d1565b01546001600160a01b03168152602081019190915260400160002054848260058110612958576129586135d1565b60200201528061296781613633565b91505061290a565b5060005b60058110156129bf57846001600160a01b0316601d8260058110612999576129996135d1565b01546001600160a01b0316036129ad578091505b806129b781613633565b915050612973565b506001600160a01b03841660009081526016602052604090205483511080156129f357506129ef600160056135be565b8114155b15612af25780600003612a0d576001600160a01b03841682525b6000612a1a826001613620565b90505b6005811015612ae2576001600160a01b038516600090815260166020526040902054848260058110612a5157612a516135d1565b60200201511015612ad057601d8160058110612a6f57612a6f6135d1565b01546001600160a01b031683612a866001846135be565b60058110612a9657612a966135d1565b6001600160a01b03909216602092909202015284838260058110612abc57612abc6135d1565b6001600160a01b0390921660209290920201525b80612ada81613633565b915050612a1d565b50612af0601d836005613038565b505b50505050565b6000611d8e82602c5485612f90565b6011546000906001600160a01b03163314801590612b28575060135460ff16155b8015612b3d5750601154600160a81b900460ff165b8015612b745750601254601a5460195430600090815260056020526040902054612b6791906135be565b612b7191906135be565b10155b905090565b6013805460ff19166001179055601a5460195460009190612baf306001600160a01b031660009081526005602052604090205490565b612bb991906135be565b612bc391906135be565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612bfd57612bfd6135d1565b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7a91906136a6565b81600181518110612c8d57612c8d6135d1565b6001600160a01b0392831660209182029290920101526010541663791ac9478360008430612cbd4261012c613620565b6040518663ffffffff1660e01b8152600401612cdd9594939291906136c3565b600060405180830381600087803b158015612cf757600080fd5b505af1158015612d0b573d6000803e3d6000fd5b504792505081159050612d7457600f546040516000916001600160a01b03169061753090849084818181858888f193505050503d8060008114612d6a576040519150601f19603f3d011682016040523d82523d6000602084013e612d6f565b606091505b505050505b50506013805460ff1916905550565b6011546000908190819081906001600160a01b038881169116148015612db757506011546001600160a01b03878116911614155b15612e51576103e860095486612dcd91906135e7565b612dd791906135fe565b92506103e8600b5486612dea91906135e7565b612df491906135fe565b6001600160a01b0380881660009081526015602090815260408083205490931682526017905290812080549294508492909190612e32908490613620565b925050819055508160196000828254612e4b9190613620565b90915550505b6011546001600160a01b03888116911614801590612e7c57506011546001600160a01b038781169116145b15612f16576103e8600a5486612e9291906135e7565b612e9c91906135fe565b92506103e8600c5486612eaf91906135e7565b612eb991906135fe565b6001600160a01b0380891660009081526015602090815260408083205490931682526017905290812080549294508492909190612ef7908490613620565b925050819055508160196000828254612f109190613620565b90915550505b612f208284613620565b90508015612f7b573060009081526005602052604081208054839290612f47908490613620565b909155505060405181815230906001600160a01b038916906000805160206137358339815191529060200160405180910390a35b612f8581866135be565b979650505050505050565b600082612f9d8584612fa6565b14949350505050565b600081815b845181101561115d57612fd782868381518110612fca57612fca6135d1565b6020026020010151612feb565b915080612fe381613633565b915050612fab565b6000818310613007576000828152602084905260409020611d8e565b6000838152602083905260409020611d8e565b6040518060a001604052806005906020820280368337509192915050565b8260058101928215613080579160200282015b8281111561308057825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061304b565b5061308c929150613090565b5090565b5b8082111561308c5760008155600101613091565b6001600160a01b038116811461139857600080fd5b6000602082840312156130cc57600080fd5b8135611d8e816130a5565b600060208083528351808285015260005b81811015613104578581018301518582016040015282016130e8565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561313857600080fd5b8235613143816130a5565b946020939093013593505050565b60006020828403121561316357600080fd5b5035919050565b8035801515811461317a57600080fd5b919050565b6000806040838503121561319257600080fd5b823561319d816130a5565b91506131ab6020840161316a565b90509250929050565b6000806000606084860312156131c957600080fd5b83356131d4816130a5565b925060208401356131e4816130a5565b929592945050506040919091013590565b60006020828403121561320757600080fd5b611d8e8261316a565b6000806000806080858703121561322657600080fd5b5050823594602084013594506040840135936060013592509050565b60a08101818360005b60058110156132735781516001600160a01b031683526020928301929091019060010161324b565b50505092915050565b60008083601f84011261328e57600080fd5b50813567ffffffffffffffff8111156132a657600080fd5b6020830191508360208260051b85010111156132c157600080fd5b9250929050565b600080602083850312156132db57600080fd5b823567ffffffffffffffff8111156132f257600080fd5b6132fe8582860161327c565b90969095509350505050565b6000806040838503121561331d57600080fd5b82359150602083013561332f816130a5565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156133795761337961333a565b604052919050565b600067ffffffffffffffff82111561339b5761339b61333a565b5060051b60200190565b600082601f8301126133b657600080fd5b813560206133cb6133c683613381565b613350565b82815260059290921b840181019181810190868411156133ea57600080fd5b8286015b8481101561340e578035613401816130a5565b83529183019183016133ee565b509695505050505050565b6000806040838503121561342c57600080fd5b823567ffffffffffffffff8082111561344457600080fd5b613450868387016133a5565b935060209150818501358181111561346757600080fd5b85019050601f8101861361347a57600080fd5b80356134886133c682613381565b81815260059190911b820183019083810190888311156134a757600080fd5b928401925b828410156134c5578335825292840192908401906134ac565b80955050505050509250929050565b6000806000604084860312156134e957600080fd5b83356134f4816130a5565b9250602084013567ffffffffffffffff81111561351057600080fd5b61351c8682870161327c565b9497909650939450505050565b6000806040838503121561353c57600080fd5b8235613547816130a5565b9150602083013561332f816130a5565b6000806040838503121561356a57600080fd5b6131438361316a565b60006020828403121561358557600080fd5b813567ffffffffffffffff81111561359c57600080fd5b61130b848285016133a5565b634e487b7160e01b600052601160045260246000fd5b81810381811115610f6e57610f6e6135a8565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610f6e57610f6e6135a8565b60008261361b57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610f6e57610f6e6135a8565b600060018201613645576136456135a8565b5060010190565b600181811c9082168061366057607f821691505b60208210810361368057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526006908201526510b7bbb732b960d11b604082015260600190565b6000602082840312156136b857600080fd5b8151611d8e816130a5565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137135784516001600160a01b0316835293830193918301916001016136ee565b50506001600160a01b0396909616606085015250505060800152939250505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212202484ca09371b3b788c84f087f7d4aaf5e8aa247bc7d1c7318826636efa0c468764736f6c63430008120033

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

0000000000000000000000000943153b8efb432504f80830fd02d21aba77e993

-----Decoded View---------------
Arg [0] : _MarketingWallet (address): 0x0943153B8EFb432504f80830Fd02D21ABa77e993

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000943153b8efb432504f80830fd02d21aba77e993


Deployed ByteCode Sourcemap

13489:19579:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14549:56;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;14549:56:0;;;;;;;;31510:837;;;;;;;;;;;;;:::i;:::-;;30835:199;;;;;;;;;;-1:-1:-1;30835:199:0;;;;;:::i;:::-;;:::i;:::-;;;749:14:1;;742:22;724:41;;712:2;697:18;30835:199:0;584:187:1;14467:36:0;;;;;;;;;;-1:-1:-1;14467:36:0;;;;-1:-1:-1;;;14467:36:0;;;;;;17041:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17477:216::-;;;;;;;;;;-1:-1:-1;17477:216:0;;;;;:::i;:::-;;:::i;31042:460::-;;;;;;;;;;-1:-1:-1;31042:460:0;;;;;:::i;:::-;;:::i;14948:53::-;;;;;;;;;;-1:-1:-1;14948:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;18793:146;;;;;;;;;;-1:-1:-1;18793:146:0;;;;;:::i;:::-;;:::i;28522:51::-;;;;;;;;;;;;;;;;28840:73;;;;;;;;;;;;;:::i;16771:88::-;;;;;;;;;;-1:-1:-1;16844:12:0;;16771:88;;29258:285;;;;;;;;;;;;;:::i;18488:184::-;;;;;;;;;;-1:-1:-1;18488:184:0;;;;;:::i;:::-;;:::i;18947:339::-;;;;;;;;;;-1:-1:-1;18947:339:0;;;;;:::i;:::-;;:::i;14361:30::-;;;;;;;;;;-1:-1:-1;14361:30:0;;;;-1:-1:-1;;;;;14361:30:0;;;;;;-1:-1:-1;;;;;2944:32:1;;;2926:51;;2914:2;2899:18;14361:30:0;2780:203:1;28614:39:0;;;;;;;;;;-1:-1:-1;28614:39:0;;;;;:::i;:::-;;:::i;16865:80::-;;;;;;;;;;-1:-1:-1;16865:80:0;;13638:2;3130:36:1;;3118:2;3103:18;16865:80:0;2988:184:1;14891:50:0;;;;;;;;;;-1:-1:-1;14891:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;29146:104;;;;;;;;;;;;;:::i;14785:44::-;;;;;;;;;;-1:-1:-1;14785:44:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;14785:44:0;;;28331:48;;;;;;;;;;-1:-1:-1;28331:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;18249:231;;;;;;;;;;-1:-1:-1;18249:231:0;;;;;:::i;:::-;;:::i;15046:52::-;;;;;;;;;;;;;;;;24359:726;;;;;;;;;;;;;:::i;15107:30::-;;;;;;;;;;;;;;;;25965:186;;;;;;;;;;-1:-1:-1;25965:186:0;;;;;:::i;:::-;;:::i;29551:161::-;;;;;;;;;;-1:-1:-1;29551:161:0;;;;;:::i;:::-;;:::i;17701:122::-;;;;;;;;;;-1:-1:-1;17701:122:0;;;;;:::i;:::-;;:::i;14142:84::-;;;;;;;;;;;;;;;;17995:246;;;;;;;;;;-1:-1:-1;17995:246:0;;;;;:::i;:::-;;:::i;14020:30::-;;;;;;;;;;;;;;;;14737:41;;;;;;;;;;-1:-1:-1;14737:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27413:119;;;;;;;;;;-1:-1:-1;27413:119:0;;;;;:::i;:::-;;:::i;28704:22::-;;;;;;;;;;-1:-1:-1;28704:22:0;;;;;;;;14512:30;;;;;;;;;;-1:-1:-1;14512:30:0;;;;-1:-1:-1;;;14512:30:0;;;;;;27033:372;;;;;;;;;;-1:-1:-1;27033:372:0;;;;;:::i;:::-;;:::i;17127:105::-;;;;;;;;;;-1:-1:-1;17127:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;17211:18:0;17193:7;17211:18;;;:9;:18;;;;;;;17127:105;10331:148;;;;;;;;;;;;;:::i;25591:135::-;;;;;;;;;;-1:-1:-1;25591:135:0;;;;;:::i;:::-;;:::i;32433:106::-;;;;;;;;;;-1:-1:-1;32433:106:0;;;;;:::i;:::-;;:::i;14057:34::-;;;;;;;;;;;;;;;;25093:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10145:79::-;;;;;;;;;;-1:-1:-1;10183:7:0;10210:6;-1:-1:-1;;;;;10210:6:0;10145:79;;13704:58;;;;;;;;;;;;;;;;29720:725;;;;;;:::i;:::-;;:::i;16951:84::-;;;;;;;;;;;;;:::i;19294:631::-;;;;;;;;;;-1:-1:-1;19294:631:0;;;;;:::i;:::-;;:::i;28811:20::-;;;;;;;;;;-1:-1:-1;28811:20:0;;;;;;;;14439:19;;;;;;;;;;-1:-1:-1;14439:19:0;;;;-1:-1:-1;;;;;14439:19:0;;;17831:156;;;;;;;;;;-1:-1:-1;17831:156:0;;;;;:::i;:::-;;:::i;14836:48::-;;;;;;;;;;-1:-1:-1;14836:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;28386:70;;;;;;;;;;-1:-1:-1;28386:70:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;15144:35;;;;;;;;;;;;;;;;28463:52;;;;;;;;;;;;;;;;14318:36;;;;;;;;;;-1:-1:-1;14318:36:0;;;;-1:-1:-1;;;;;14318:36:0;;;29032:106;;;;;;;;;;-1:-1:-1;29032:106:0;;;;;:::i;:::-;;:::i;30453:374::-;;;;;;;;;;-1:-1:-1;30453:374:0;;;;;:::i;:::-;;:::i;32547:184::-;;;;;;;;;;-1:-1:-1;32547:184:0;;;;;:::i;:::-;;:::i;13984:29::-;;;;;;;;;;;;;;;;28580:27;;;;;;;;;;;;;;;;17238:133;;;;;;;;;;-1:-1:-1;17238:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;17340:19:0;;;17322:7;17340:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17238:133;28660:37;;;;;;;;;;;;;;;;25734:222;;;;;;;;;;-1:-1:-1;25734:222:0;;;;;:::i;:::-;;:::i;18680:105::-;;;;;;;;;;-1:-1:-1;18680:105:0;;;;;:::i;:::-;;:::i;28921:103::-;;;;;;;;;;;;;:::i;14098:35::-;;;;;;;;;;;;;;;;10487:214;;;;;;;;;;-1:-1:-1;10487:214:0;;;;;:::i;:::-;;:::i;19933:771::-;;;;;;;;;;-1:-1:-1;19933:771:0;;;;;:::i;:::-;;:::i;14400:32::-;;;;;;;;;;-1:-1:-1;14400:32:0;;;;-1:-1:-1;;;;;14400:32:0;;;31510:837;31562:32;31583:10;31562:20;:32::i;:::-;31554:63;;;;-1:-1:-1;;;31554:63:0;;10094:2:1;31554:63:0;;;10076:21:1;10133:2;10113:18;;;10106:30;-1:-1:-1;;;10152:18:1;;;10145:48;10210:18;;31554:63:0;;;;;;;;;31636:10;31650:9;31636:23;31628:47;;;;-1:-1:-1;;;31628:47:0;;10441:2:1;31628:47:0;;;10423:21:1;10480:2;10460:18;;;10453:30;-1:-1:-1;;;10499:18:1;;;10492:41;10550:18;;31628:47:0;10239:335:1;31628:47:0;31686:14;;31758:1;31742:362;31766:16;:14;:16::i;:::-;31761:1;:21;31742:362;;31808:21;;;;:18;:21;;;;;;;;31830:10;31808:33;;;;;;;;;;31804:234;;31875:7;31883:5;31887:1;31883;:5;:::i;:::-;31875:14;;;;;;;;:::i;:::-;;;;;;;;;31862:27;;32019:3;32006:10;31990:12;;31983:3;31963:17;;31948:12;;:32;;;;:::i;:::-;:38;;;;:::i;:::-;31933:10;31919:25;;;;:13;:25;;;;;;:68;;;;:::i;:::-;:83;;;;:::i;:::-;31918:98;;;;:::i;:::-;:104;;;;:::i;:::-;31908:114;;;;:::i;:::-;;;31804:234;32052:21;;;;:18;:21;;;;;;;;32074:10;32052:33;;;;;;;:40;;-1:-1:-1;;32052:40:0;32088:4;32052:40;;;32071:1;31784:3;32071:1;31784:3;:::i;:::-;;;;31742:362;;;;32138:6;32114:20;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;32165:10:0;32155:21;;;;:9;:21;;;;;:31;;32180:6;;32155:21;:31;;32180:6;;32155:31;:::i;:::-;;;;-1:-1:-1;;32215:4:0;32197:24;;;;:9;:24;;;;;:34;;32225:6;;32197:24;:34;;32225:6;;32197:34;:::i;:::-;;;;-1:-1:-1;;32247:43:0;;160:25:1;;;32271:10:0;;32264:4;;-1:-1:-1;;;;;;;;;;;32247:43:0;148:2:1;133:18;32247:43:0;;;;;;;32306:33;;160:25:1;;;32320:10:0;;32306:33;;148:2:1;133:18;32306:33:0;;;;;;;;31543:804;;31510:837::o;30835:199::-;-1:-1:-1;;;;;30922:19:0;;30899:4;30922:19;;;:13;:19;;;;;;:23;;;;:48;;;30949:16;:14;:16::i;:::-;:21;;30922:48;:104;;;;;30984:18;:36;31003:16;:14;:16::i;:::-;30984:36;;;;;;;;;;;;;;-1:-1:-1;30984:36:0;;;-1:-1:-1;;;;;30984:42:0;;;;;;;;;;;;30983:43;30922:104;30915:111;30835:199;-1:-1:-1;;30835:199:0:o;17041:80::-;17089:13;17113:5;17106:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17041:80;:::o;17477:216::-;17581:10;17552:4;17569:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17569:32:0;;;;;;;;;;:41;;;17626:37;17552:4;;17569:32;;17626:37;;;;17604:6;160:25:1;;148:2;133:18;;14:177;17626:37:0;;;;;;;;-1:-1:-1;17681:4:0;17477:216;;;;:::o;31042:460::-;31102:7;;;31192:1;31176:295;31200:16;:14;:16::i;:::-;31195:1;:21;31176:295;;31242:21;;;;:18;:21;;;;;;;;-1:-1:-1;;;;;31242:27:0;;;;;;;;;;;;31238:222;;31303:7;31311:5;31315:1;31311;:5;:::i;:::-;31303:14;;;;;;;;:::i;:::-;;;;;;;;;31290:27;;31441:3;31428:10;31412:12;;31405:3;31385:17;;31370:12;;:32;;;;:::i;:::-;:38;;;;:::i;:::-;-1:-1:-1;;;;;31347:19:0;;;;;;:13;:19;;;;;;:62;;;;:::i;:::-;:77;;;;:::i;:::-;31346:92;;;;:::i;:::-;:98;;;;:::i;:::-;31336:108;;;;:::i;:::-;;;31238:222;31218:3;;;;:::i;:::-;;;;31176:295;;;-1:-1:-1;31488:6:0;31042:460;-1:-1:-1;;;31042:460:0:o;18793:146::-;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;18887:20:::1;:44:::0;18793:146::o;28840:73::-;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;28890:8:::1;:15:::0;;-1:-1:-1;;28890:15:0::1;28901:4;28890:15;::::0;;28840:73::o;29258:285::-;29304:7;29327:10;;29341:1;29327:15;29323:29;;-1:-1:-1;29351:1:0;;29258:285::o;29323:29::-;29407:15;29380:24;;29367:10;;:37;;;;:::i;:::-;:55;29363:69;;;-1:-1:-1;29431:1:0;;29258:285::o;29363:69::-;29491:15;29464:24;;29460:1;:28;;;;:::i;:::-;29447:10;;:41;;;;:::i;:::-;:59;29443:73;;;-1:-1:-1;29515:1:0;;29258:285::o;29443:73::-;-1:-1:-1;29534:1:0;;29258:285::o;18488:184::-;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18602:27:0;;;::::1;;::::0;;;:19:::1;:27;::::0;;;;:36;;-1:-1:-1;;18602:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18488:184::o;18947:339::-;-1:-1:-1;;;;;19067:19:0;;19047:4;19067:19;;;:11;:19;;;;;;;;19087:10;19067:31;;;;;;;;-1:-1:-1;;19067:52:0;19064:157;;-1:-1:-1;;;;;19169:19:0;;;;;;:11;:19;;;;;;;;19189:10;19169:31;;;;;;;;:40;;19203:6;;19169:40;:::i;:::-;-1:-1:-1;;;;;19135:19:0;;;;;;:11;:19;;;;;;;;19155:10;19135:31;;;;;;;:74;19064:157;19238:40;19252:6;19260:9;19271:6;19238:13;:40::i;:::-;19231:47;18947:339;-1:-1:-1;;;;18947:339:0:o;28614:39::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28614:39:0;:::o;29146:104::-;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;10183:7;10210:6;;29194:48:::1;::::0;-1:-1:-1;;;;;10210:6:0;;;;29220:21:::1;29194:48:::0;::::1;;;::::0;29220:21;;29194:48;10183:7;29194:48;29220:21;10210:6;29194:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29146:104::o:0;18249:231::-;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;18328:15:::1;:34:::0;;-1:-1:-1;;;;;;18328:34:0::1;-1:-1:-1::0;;;;;18328:34:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;18373:28:0;;;:11:::1;:28;::::0;;;;;;;:35;;-1:-1:-1;;18373:35:0;;::::1;-1:-1:-1::0;18373:35:0;;::::1;::::0;;;18441:15;;;;::::1;18421:36:::0;;:19:::1;:36:::0;;;;;:43;;;;::::1;::::0;;::::1;::::0;;18249:231::o;24359:726::-;24404:10;24418:9;24404:23;24396:41;;;;-1:-1:-1;;;24396:41:0;;12562:2:1;24396:41:0;;;12544:21:1;12601:1;12581:18;;;12574:29;-1:-1:-1;;;12619:18:1;;;12612:35;12664:18;;24396:41:0;12360:328:1;24396:41:0;24471:10;24485:1;24456:26;;;:14;:26;;;;;;24448:61;;;;-1:-1:-1;;;24448:61:0;;12895:2:1;24448:61:0;;;12877:21:1;12934:2;12914:18;;;12907:30;-1:-1:-1;;;12953:18:1;;;12946:48;13011:18;;24448:61:0;12693:342:1;24448:61:0;24563:10;24522:23;24548:26;;;:14;:26;;;;;;;;;;24585:30;;;;24681:4;24663:24;;:9;:24;;;;;;;:42;;24548:26;;24663:42;:::i;:::-;24654:4;24636:24;;;;:9;:24;;;;;:69;;;;24743:58;;24773:10;24785:15;24743:14;:58::i;:::-;24736:65;;24820:4;24812:32;;;;-1:-1:-1;;;24812:32:0;;13242:2:1;24812:32:0;;;13224:21:1;13281:2;13261:18;;;13254:30;-1:-1:-1;;;13300:18:1;;;13293:45;13355:18;;24812:32:0;13040:339:1;24812:32:0;24868:10;24855:24;;;;:12;:24;;;;;:43;;24883:15;;24855:24;:43;;24883:15;;24855:43;:::i;:::-;;;;;;;;24928:15;24909;;:34;;;;;;;:::i;:::-;;;;;;;;24979:15;24954:21;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;25007:19:0;;-1:-1:-1;25007:17:0;:19::i;:::-;25042:35;;160:25:1;;;25049:10:0;;25042:35;;148:2:1;133:18;25042:35:0;14:177:1;25965:186:0;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;26047:16:::1;:36:::0;;-1:-1:-1;;;;26047:36:0::1;-1:-1:-1::0;;;26047:36:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;26097:16:::0;::::1;;26094:49;;;26128:15;26115:10;:28:::0;25965:186;:::o;29551:161::-;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;29652:24:::1;:52:::0;29551:161::o;17701:122::-;17756:4;17780:35;17788:7;-1:-1:-1;;17780:7:0;:35::i;17995:246::-;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;18128:4:::1;18113:12;;:19;;;;:::i;:::-;18094:15;:38;;18072:118;;;::::0;-1:-1:-1;;;18072:118:0;;13586:2:1;18072:118:0::1;::::0;::::1;13568:21:1::0;13625:2;13605:18;;;13598:30;13664:32;13644:18;;;13637:60;13714:18;;18072:118:0::1;13384:354:1::0;18072:118:0::1;18201:14;:32:::0;17995:246::o;27413:119::-;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27496:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;27496:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27413:119::o;27033:372::-;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;27172:9:::1;:22:::0;;;27205:10:::1;:24:::0;;;27240:14:::1;:32:::0;;;27283:15:::1;:34:::0;;;27301:16;27257:15;27340:22:::1;27218:11:::0;27184:10;27340:22:::1;:::i;:::-;:39;;;;:::i;:::-;:57;;;;:::i;:::-;27328:9;:69:::0;-1:-1:-1;;;;27033:372:0:o;10331:148::-;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;10438:1:::1;10422:6:::0;;10401:40:::1;::::0;-1:-1:-1;;;;;10422:6:0;;::::1;::::0;10401:40:::1;::::0;10438:1;;10401:40:::1;10469:1;10452:19:::0;;-1:-1:-1;;;;;;10452:19:0::1;::::0;;10331:148::o;25591:135::-;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;25660:4:::1;:15:::0;;-1:-1:-1;;;;;25660:15:0;;::::1;-1:-1:-1::0;;;;;;25660:15:0;;::::1;::::0;::::1;::::0;;:4:::1;25686:25:::0;;;:19:::1;:25;::::0;;;;:32;;-1:-1:-1;;25686:32:0::1;25660:15:::0;25686:32:::1;::::0;;25591:135::o;32433:106::-;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;32507:10:::1;:24:::0;32433:106::o;25093:91::-;25142:17;;:::i;:::-;25163:19;;;;;;;;;;;25170:12;;25163:19;;25170:12;25163:19;;;;-1:-1:-1;;;;;25163:19:0;;;;;;;;;;;;;;;;;;;;;;25093:91;:::o;29720:725::-;29803:10;29817:9;29803:23;29795:41;;;;-1:-1:-1;;;29795:41:0;;12562:2:1;29795:41:0;;;12544:21:1;12601:1;12581:18;;;12574:29;-1:-1:-1;;;12619:18:1;;;12612:35;12664:18;;29795:41:0;12360:328:1;29795:41:0;29855:8;;;;29847:37;;;;-1:-1:-1;;;29847:37:0;;13945:2:1;29847:37:0;;;13927:21:1;13984:2;13964:18;;;13957:30;-1:-1:-1;;;14003:18:1;;;13996:46;14059:18;;29847:37:0;13743:340:1;29847:37:0;29944:24;;29929:10;29915:25;;;;:13;:25;;;;;;29903:37;;:9;:37;:::i;:::-;:65;;29895:104;;;;-1:-1:-1;;;29895:104:0;;14290:2:1;29895:104:0;;;14272:21:1;14329:2;14309:18;;;14302:30;14368:28;14348:18;;;14341:56;14414:18;;29895:104:0;14088:350:1;29895:104:0;30059:24;;30044:10;30030:25;;;;:13;:25;;;;;;30018:37;;:9;:37;:::i;:::-;:65;;30010:105;;;;-1:-1:-1;;;30010:105:0;;14645:2:1;30010:105:0;;;14627:21:1;14684:2;14664:18;;;14657:30;14723:29;14703:18;;;14696:57;14770:18;;30010:105:0;14443:351:1;30010:105:0;30134:33;30148:10;30160:6;;30134:13;:33::i;:::-;30126:61;;;;-1:-1:-1;;;30126:61:0;;15001:2:1;30126:61:0;;;14983:21:1;15040:2;15020:18;;;15013:30;-1:-1:-1;;;15059:18:1;;;15052:45;15114:18;;30126:61:0;14799:339:1;30126:61:0;30214:10;30200:25;;;;:13;:25;;;;;:38;;30229:9;;30200:25;:38;;30229:9;;30200:38;:::i;:::-;;;;;;;;30265:9;30249:12;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;30294:10:0;30285:20;;;;:8;:20;;;;;:27;;-1:-1:-1;;30285:27:0;30308:4;30285:27;;;30346:7;10183;10210:6;-1:-1:-1;;;;;10210:6:0;;10145:79;30346:7;30332:10;30323:20;;;;:8;:20;;;;;:30;;-1:-1:-1;;;;;;30323:30:0;-1:-1:-1;;;;;30323:30:0;;;;;;;;;;;30364:20;:23;;;;;;:::i;:::-;;;;-1:-1:-1;;30403:34:0;;30427:9;160:25:1;;30415:10:0;;30403:34;;148:2:1;133:18;30403:34:0;14:177:1;16951:84:0;17001:13;17025:7;17018:14;;;;;:::i;19294:631::-;-1:-1:-1;;;;;19358:19:0;;;;;;:8;:19;;;;;;;;19357:20;19349:49;;;;-1:-1:-1;;;19349:49:0;;15345:2:1;19349:49:0;;;15327:21:1;15384:2;15364:18;;;15357:30;-1:-1:-1;;;15403:18:1;;;15396:46;15459:18;;19349:49:0;15143:340:1;19349:49:0;19427:10;17193:7;17211:18;;;:9;:18;;;;;;19442:1;-1:-1:-1;19417:26:0;19409:66;;;;-1:-1:-1;;;19409:66:0;;15690:2:1;19409:66:0;;;15672:21:1;15729:2;15709:18;;;15702:30;15768:29;15748:18;;;15741:57;15815:18;;19409:66:0;15488:351:1;19409:66:0;19503:10;19494:20;;;;:8;:20;;;;;;;;:28;;:20;:28;19486:60;;;;-1:-1:-1;;;19486:60:0;;16046:2:1;19486:60:0;;;16028:21:1;16085:2;16065:18;;;16058:30;-1:-1:-1;;;16104:18:1;;;16097:49;16163:18;;19486:60:0;15844:343:1;19486:60:0;-1:-1:-1;;;;;19559:19:0;;;;;;:8;:19;;;;;;;;:32;;-1:-1:-1;;;;;;19559:32:0;19581:10;19559:32;;;;;;19602:8;:19;;;;;:26;;-1:-1:-1;;19602:26:0;19559:32;19602:26;;;19639:29;;:17;:29;;;;;:32;;;;;;:::i;:::-;;;;-1:-1:-1;;19682:20:0;:23;;;:20;:23;;;:::i;:::-;;;;-1:-1:-1;;19760:10:0;19750:21;;;;:9;:21;;;;;;:31;;19774:7;;19750:31;:::i;:::-;19736:10;19726:21;;;;:9;:21;;;;;:55;;;;19821:46;;19848:9;19859:7;19821:14;:46::i;:::-;19885:32;;19814:53;;-1:-1:-1;;;;;;19885:32:0;;;19895:10;;19885:32;;;;;19338:587;19294:631;:::o;17831:156::-;17911:4;17935:44;17949:10;17961:9;17972:6;17935:13;:44::i;:::-;17928:51;17831:156;-1:-1:-1;;;17831:156:0:o;29032:106::-;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;29106:10:::1;:24:::0;;-1:-1:-1;;29106:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29032:106::o;30453:374::-;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;30560:9:::1;30556:264;30575:5;:12;30571:1;:16;30556:264;;;30636:7;30644:1;30636:10;;;;;;;;:::i;:::-;;;;;;;30609:13;:23;30623:5;30629:1;30623:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;30609:23:0::1;-1:-1:-1::0;;;;;30609:23:0::1;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;30677:7;30685:1;30677:10;;;;;;;;:::i;:::-;;;;;;;30661:12;;:26;;;;;;;:::i;:::-;;;;;;;;30723:4;30702:8;:18;30711:5;30717:1;30711:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;30702:18:0::1;-1:-1:-1::0;;;;;30702:18:0::1;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;30763:7;10183::::0;10210:6;-1:-1:-1;;;;;10210:6:0;;10145:79;30763:7:::1;30742:8;:18;30751:5;30757:1;30751:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;30742:18:0::1;-1:-1:-1::0;;;;;30742:18:0::1;;;;;;;;;;;;;:28;;;;;-1:-1:-1::0;;;;;30742:28:0::1;;;;;-1:-1:-1::0;;;;;30742:28:0::1;;;;;;30785:20;;:23;;;;;;;;;:::i;:::-;;;;;;30589:3;;;;;:::i;:::-;;;;30556:264;;;;30453:374:::0;;:::o;32547:184::-;32663:4;32692:31;32700:14;32705:8;32831:26;;-1:-1:-1;;18843:2:1;18839:15;;;18835:53;32831:26:0;;;18823:66:1;32794:7:0;;18905:12:1;;32831:26:0;;;;;;;;;;;;32821:37;;;;;;32814:44;;32739:127;;;;32700:14;32716:6;;32692:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32692:7:0;;-1:-1:-1;;;32692:31:0:i;25734:222::-;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;25844:1:::1;25833:7;:12;;25825:56;;;::::0;-1:-1:-1;;;25825:56:0;;16394:2:1;25825:56:0::1;::::0;::::1;16376:21:1::0;16433:2;16413:18;;;16406:30;16472:33;16452:18;;;16445:61;16523:18;;25825:56:0::1;16192:355:1::0;25825:56:0::1;25892:11;:22:::0;;;::::1;;-1:-1:-1::0;;;25892:22:0::1;-1:-1:-1::0;;;;25892:22:0;;::::1;::::0;;;::::1;::::0;;;25925:13:::1;:23:::0;25734:222::o;18680:105::-;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;18751:11:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;18751:26:0::1;-1:-1:-1::0;;;;18751:26:0;;::::1;::::0;;;::::1;::::0;;18680:105::o;28921:103::-;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;28972:8:::1;:16:::0;;-1:-1:-1;;28972:16:0;;::::1;::::0;;;28999:10:::1;:17:::0;;;;::::1;28972:16:::0;28999:17:::1;::::0;;28921:103::o;10487:214::-;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10576:22:0;::::1;10568:43;;;::::0;-1:-1:-1;;;10568:43:0;;16754:2:1;10568:43:0::1;::::0;::::1;16736:21:1::0;16793:1;16773:18;;;16766:29;-1:-1:-1;;;16811:18:1;;;16804:38;16859:18;;10568:43:0::1;16552:331:1::0;10568:43:0::1;10648:6;::::0;;10627:38:::1;::::0;-1:-1:-1;;;;;10627:38:0;;::::1;::::0;10648:6;::::1;::::0;10627:38:::1;::::0;::::1;10676:6;:17:::0;;-1:-1:-1;;;;;;10676:17:0::1;-1:-1:-1::0;;;;;10676:17:0;;;::::1;::::0;;;::::1;::::0;;10487:214::o;19933:771::-;10272:6;;-1:-1:-1;;;;;10272:6:0;10282:10;10272:20;10264:39;;;;-1:-1:-1;;;10264:39:0;;;;;;;:::i;:::-;20014:9:::1;20010:687;20029:9;:16;20025:1;:20;20010:687;;;20076:8;:22;20085:9;20095:1;20085:12;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;20076:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;20076:22:0;;::::1;;20075:23;20067:52;;;::::0;-1:-1:-1;;;20067:52:0;;15345:2:1;20067:52:0::1;::::0;::::1;15327:21:1::0;15384:2;15364:18;;;15357:30;-1:-1:-1;;;15403:18:1;;;15396:46;15459:18;;20067:52:0::1;15143:340:1::0;20067:52:0::1;20152:10;17193:7:::0;17211:18;;;:9;:18;;;;;;20167:1:::1;-1:-1:-1::0;20142:26:0::1;20134:66;;;::::0;-1:-1:-1;;;20134:66:0;;17090:2:1;20134:66:0::1;::::0;::::1;17072:21:1::0;17129:2;17109:18;;;17102:30;17168:29;17148:18;;;17141:57;17215:18;;20134:66:0::1;16888:351:1::0;20134:66:0::1;20232:10;20223:20;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:28;;:20:::0;:28:::1;20215:53;;;::::0;-1:-1:-1;;;20215:53:0;;17446:2:1;20215:53:0::1;::::0;::::1;17428:21:1::0;17485:2;17465:18;;;17458:30;-1:-1:-1;;;17504:18:1;;;17497:42;17556:18;;20215:53:0::1;17244:336:1::0;20215:53:0::1;20310:10;20285:8;:22;20294:9;20304:1;20294:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;20285:22:0::1;-1:-1:-1::0;;;;;20285:22:0::1;;;;;;;;;;;;;:35;;;;;-1:-1:-1::0;;;;;20285:35:0::1;;;;;-1:-1:-1::0;;;;;20285:35:0::1;;;;;;20360:4;20335:8;:22;20344:9;20354:1;20344:12;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;20335:22:0::1;::::0;;;;::::1;::::0;;;;;;;;-1:-1:-1;20335:22:0;;;:29;;-1:-1:-1;;20335:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;20397:10:::1;20379:29:::0;;:17:::1;:29:::0;;;;;:32;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;20426:20:0::1;:23:::0;;;:20:::1;:23;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;20512:10:0::1;20502:21;::::0;;;:9:::1;:21;::::0;;;;;:31:::1;::::0;20526:7:::1;::::0;20502:31:::1;:::i;:::-;20488:10;20478:21;::::0;;;:9:::1;:21;::::0;;;;:55;;;;20606:12;;20579:49:::1;::::0;20488:10;20606:9;;20616:1;;20606:12;::::1;;;;;:::i;:::-;;;;;;;20620:7;20579:14;:49::i;:::-;20572:56;;20672:9;20682:1;20672:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;20650:35:0::1;20660:10;-1:-1:-1::0;;;;;20650:35:0::1;;;;;;;;;;;-1:-1:-1::0;20047:3:0;::::1;::::0;::::1;:::i;:::-;;;;20010:687;;;;19933:771:::0;:::o;21665:1284::-;-1:-1:-1;;;;;21816:19:0;;21791:4;21816:19;;;:11;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;21839:22:0;;;;;;:11;:22;;;;;;;;21816:45;:65;;;-1:-1:-1;21865:16:0;;-1:-1:-1;;;21865:16:0;;;;21816:65;21808:105;;;;-1:-1:-1;;;21808:105:0;;17787:2:1;21808:105:0;;;17769:21:1;17826:2;17806:18;;;17799:30;17865:29;17845:18;;;17838:57;17912:18;;21808:105:0;17585:351:1;21808:105:0;21971:4;;-1:-1:-1;;;;;21958:17:0;;;21971:4;;21958:17;21955:93;;-1:-1:-1;;;;;22000:19:0;;;;;;:8;:19;;;;;;;;21992:44;;;;-1:-1:-1;;;21992:44:0;;18143:2:1;21992:44:0;;;18125:21:1;18182:2;18162:18;;;18155:30;-1:-1:-1;;;18201:18:1;;;18194:42;18253:18;;21992:44:0;17941:336:1;21992:44:0;10183:7;10210:6;-1:-1:-1;;;;;22115:17:0;;;10210:6;;22115:17;;;;:41;;-1:-1:-1;10183:7:0;10210:6;-1:-1:-1;;;;;22136:20:0;;;10210:6;;22136:20;;22115:41;:62;;;;-1:-1:-1;;;;;;22160:17:0;;14267:42;22160:17;;22115:62;22111:286;;;22210:4;;-1:-1:-1;;;;;22197:17:0;;;22210:4;;22197:17;22194:192;;-1:-1:-1;;;;;22239:30:0;;;;;;:19;:30;;;;;;;;;:83;;-1:-1:-1;22307:14:0;;-1:-1:-1;;;;;22274:20:0;;;;;;:9;:20;;;;;;:29;;22297:6;;22274:29;:::i;:::-;:47;;22239:83;22231:139;;;;-1:-1:-1;;;22231:139:0;;18484:2:1;22231:139:0;;;18466:21:1;18523:2;18503:18;;;18496:30;18562:34;18542:18;;;18535:62;-1:-1:-1;;;18613:18:1;;;18606:41;18664:19;;22231:139:0;18282:407:1;22231:139:0;22437:16;:14;:16::i;:::-;:37;;;;-1:-1:-1;22470:4:0;;-1:-1:-1;;;;;22457:17:0;;;22470:4;;22457:17;22437:37;22433:80;;;22491:10;:8;:10::i;:::-;-1:-1:-1;;;;;22545:17:0;;;;;;:9;:17;;;;;;:26;;22565:6;;22545:26;:::i;:::-;-1:-1:-1;;;;;22525:17:0;;;;;;:9;:17;;;;;;;;:46;;;;25279:11;:19;;;;;;;;25278:20;22646:22;:64;;;-1:-1:-1;;;;;;25279:19:0;;25254:4;25279:19;;;:11;:19;;;;;;;;25278:20;22685:25;22646:64;22645:138;;22749:34;22757:6;22765:9;22776:6;22749:7;:34::i;:::-;22645:138;;;22727:6;22645:138;-1:-1:-1;;;;;22817:20:0;;;;;;:9;:20;;;;;;22620:163;;-1:-1:-1;22817:39:0;;22620:163;;22817:39;:::i;:::-;-1:-1:-1;;;;;22794:20:0;;;;;;;:9;:20;;;;;;;:62;;;;22874:43;;;;;;-1:-1:-1;;;;;;;;;;;22874:43:0;;;22902:14;160:25:1;;148:2;133:18;;14:177;22874:43:0;;;;;;;;-1:-1:-1;22937:4:0;;21665:1284;-1:-1:-1;;;;21665:1284:0:o;22957:279::-;-1:-1:-1;;;;;23124:20:0;;23084:4;23124:20;;;:9;:20;;;;;;:31;;23148:6;;23124:31;:::i;:::-;-1:-1:-1;;;;;23101:20:0;;;;;;;:9;:20;;;;;;;:54;;;;23171:35;;;;;;-1:-1:-1;;;;;;;;;;;23171:35:0;;;23199:6;160:25:1;;148:2;133:18;;14:177;23171:35:0;;;;;;;;-1:-1:-1;23224:4:0;22957:279;;;;;:::o;20712:945::-;20776:10;20797:25;;:::i;:::-;20833:33;;:::i;:::-;20877:13;20910:6;20905:116;20926:19;20922:1;:23;20905:116;;;20980:12;:29;20993:12;21006:1;20993:15;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;20993:15:0;20980:29;;;;;;;;;;;20993:15;20980:29;;20967:7;20975:1;20967:10;;;;;;;:::i;:::-;;;;:42;20947:3;;;;:::i;:::-;;;;20905:116;;;;21038:9;21033:148;21057:19;21053:1;:23;21033:148;;;21120:4;-1:-1:-1;;;;;21101:23:0;:12;21114:1;21101:15;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;21101:15:0;:23;21098:72;;21153:1;21145:9;;21098:72;21078:3;;;;:::i;:::-;;;;21033:148;;;-1:-1:-1;;;;;;21209:18:0;;;;;;:12;:18;;;;;;21196:10;;:31;:67;;;;-1:-1:-1;21240:23:0;21262:1;21240:19;:23;:::i;:::-;21231:5;:32;;21196:67;21193:457;;;21283:5;21292:1;21283:10;21280:40;;-1:-1:-1;;;;;21295:25:0;;;;21280:40;21340:9;21352;:5;21360:1;21352:9;:::i;:::-;21340:21;;21335:259;21367:19;21363:1;:23;21335:259;;;-1:-1:-1;;;;;21428:18:0;;;;;;:12;:18;;;;;;21415:7;21423:1;21415:10;;;;;;;:::i;:::-;;;;;:31;21412:167;;;21496:12;21509:1;21496:15;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;21496:15:0;21471;21487:5;21496:15;21487:1;:5;:::i;:::-;21471:22;;;;;;;:::i;:::-;-1:-1:-1;;;;;21471:40:0;;;:22;;;;;;:40;21555:4;21534:15;21550:1;21534:18;;;;;;;:::i;:::-;-1:-1:-1;;;;;21534:25:0;;;:18;;;;;;:25;21412:167;21388:3;;;;:::i;:::-;;;;21335:259;;;-1:-1:-1;21608:30:0;:12;21623:15;21608:30;;:::i;:::-;;21193:457;20750:907;;;;20712:945::o;32874:189::-;32981:4;33010:45;33029:6;33037:10;;33049:5;33010:18;:45::i;25314:269::-;25414:4;;25363;;-1:-1:-1;;;;;25414:4:0;25400:10;:18;;;;:42;;-1:-1:-1;25436:6:0;;;;25435:7;25400:42;:70;;;;-1:-1:-1;25459:11:0;;-1:-1:-1;;;25459:11:0;;;;25400:70;:175;;;;-1:-1:-1;25562:13:0;;25538:20;;25514:21;;25505:4;17193:7;17211:18;;;:9;:18;;;;;;25487:48;;;;:::i;:::-;:71;;;;:::i;:::-;:88;;25400:175;25380:195;;25314:269;:::o;27540:709::-;14671:6;:13;;-1:-1:-1;;14671:13:0;14680:4;14671:13;;;27663:20:::1;::::0;27639:21:::1;::::0;14671:6;;27663:20;27612:24:::1;27630:4;-1:-1:-1::0;;;;;17211:18:0;17193:7;17211:18;;;:9;:18;;;;;;;17127:105;27612:24:::1;:48;;;;:::i;:::-;:71;;;;:::i;:::-;27720:16;::::0;;27734:1:::1;27720:16:::0;;;;;::::1;::::0;;27589:94;;-1:-1:-1;27696:21:0::1;::::0;27720:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27720:16:0::1;27696:40;;27765:4;27747;27752:1;27747:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27747:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;27791:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;27791:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;27747:7;;27791:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27781:4;27786:1;27781:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27781:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;27815:6:::1;::::0;::::1;:57;27887:12:::0;27815:6:::1;27930:4:::0;27957::::1;27977:27;:15;27995:9;27977:27;:::i;:::-;27815:200;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;28051:21:0::1;::::0;-1:-1:-1;;28088:14:0;;;-1:-1:-1;28085:157:0::1;;28172:15;::::0;28164:66:::1;::::0;28118:15:::1;::::0;-1:-1:-1;;;;;28172:15:0::1;::::0;28220:5:::1;::::0;28201:12;;28118:15;28164:66;28118:15;28164:66;28201:12;28172:15;28220:5;28164:66:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;28085:157:0::1;-1:-1:-1::0;;14707:6:0;:14;;-1:-1:-1;;14707:14:0;;;-1:-1:-1;27540:709:0:o;23244:1107::-;23496:4;;23364:7;;;;;;;;-1:-1:-1;;;;;23486:14:0;;;23496:4;;23486:14;:35;;;;-1:-1:-1;23517:4:0;;-1:-1:-1;;;;;23504:17:0;;;23517:4;;23504:17;;23486:35;23482:302;;;23593:4;23581:9;;23572:6;:18;;;;:::i;:::-;:25;;;;:::i;:::-;23562:35;;23652:4;23635:14;;23626:6;:23;;;;:::i;:::-;:30;;;;:::i;:::-;-1:-1:-1;;;;;23686:19:0;;;23671:35;23686:19;;;:8;:19;;;;;;;;;;;;23671:35;;:14;:35;;;;;:50;;23612:44;;-1:-1:-1;23612:44:0;;23671:35;;;:50;;23612:44;;23671:50;:::i;:::-;;;;;;;;23761:11;23736:21;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;23482:302:0;23808:4;;-1:-1:-1;;;;;23798:14:0;;;23808:4;;23798:14;;;;:35;;-1:-1:-1;23829:4:0;;-1:-1:-1;;;;;23816:17:0;;;23829:4;;23816:17;23798:35;23794:303;;;23907:4;23894:10;;23885:6;:19;;;;:::i;:::-;:26;;;;:::i;:::-;23875:36;;23967:4;23949:15;;23940:6;:24;;;;:::i;:::-;:31;;;;:::i;:::-;-1:-1:-1;;;;;24001:16:0;;;23986:32;24001:16;;;:8;:16;;;;;;;;;;;;23986:32;;:14;:32;;;;;:47;;23926:45;;-1:-1:-1;23926:45:0;;23986:32;;;:47;;23926:45;;23986:47;:::i;:::-;;;;;;;;24074:11;24049:21;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;23794:303:0;24119:21;24129:11;24119:7;:21;:::i;:::-;24107:33;-1:-1:-1;24157:13:0;;24153:145;;24205:4;24187:24;;;;:9;:24;;;;;:37;;24215:9;;24187:24;:37;;24215:9;;24187:37;:::i;:::-;;;;-1:-1:-1;;24244:42:0;;160:25:1;;;24269:4:0;;-1:-1:-1;;;;;24244:42:0;;;-1:-1:-1;;;;;;;;;;;24244:42:0;148:2:1;133:18;24244:42:0;;;;;;;24153:145;24325:18;24334:9;24325:6;:18;:::i;:::-;24318:25;23244:1107;-1:-1:-1;;;;;;;23244:1107:0:o;1462:190::-;1587:4;1640;1611:25;1624:5;1631:4;1611:12;:25::i;:::-;:33;;1462:190;-1:-1:-1;;;;1462:190:0:o;2329:296::-;2412:7;2455:4;2412:7;2470:118;2494:5;:12;2490:1;:16;2470:118;;;2543:33;2553:12;2567:5;2573:1;2567:8;;;;;;;;:::i;:::-;;;;;;;2543:9;:33::i;:::-;2528:48;-1:-1:-1;2508:3:0;;;;:::i;:::-;;;;2470:118;;9369:149;9432:7;9463:1;9459;:5;:51;;9594:13;9688:15;;;9724:4;9717:15;;;9771:4;9755:21;;9459:51;;;9594:13;9688:15;;;9724:4;9717:15;;;9771:4;9755:21;;9467:20;9526:268;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;196:131:1;-1:-1:-1;;;;;271:31:1;;261:42;;251:70;;317:1;314;307:12;332:247;391:6;444:2;432:9;423:7;419:23;415:32;412:52;;;460:1;457;450:12;412:52;499:9;486:23;518:31;543:5;518:31;:::i;776:548::-;888:4;917:2;946;935:9;928:21;978:6;972:13;1021:6;1016:2;1005:9;1001:18;994:34;1046:1;1056:140;1070:6;1067:1;1064:13;1056:140;;;1165:14;;;1161:23;;1155:30;1131:17;;;1150:2;1127:26;1120:66;1085:10;;1056:140;;;1060:3;1245:1;1240:2;1231:6;1220:9;1216:22;1212:31;1205:42;1315:2;1308;1304:7;1299:2;1291:6;1287:15;1283:29;1272:9;1268:45;1264:54;1256:62;;;;776:548;;;;:::o;1329:315::-;1397:6;1405;1458:2;1446:9;1437:7;1433:23;1429:32;1426:52;;;1474:1;1471;1464:12;1426:52;1513:9;1500:23;1532:31;1557:5;1532:31;:::i;:::-;1582:5;1634:2;1619:18;;;;1606:32;;-1:-1:-1;;;1329:315:1:o;1649:180::-;1708:6;1761:2;1749:9;1740:7;1736:23;1732:32;1729:52;;;1777:1;1774;1767:12;1729:52;-1:-1:-1;1800:23:1;;1649:180;-1:-1:-1;1649:180:1:o;1834:160::-;1899:20;;1955:13;;1948:21;1938:32;;1928:60;;1984:1;1981;1974:12;1928:60;1834:160;;;:::o;1999:315::-;2064:6;2072;2125:2;2113:9;2104:7;2100:23;2096:32;2093:52;;;2141:1;2138;2131:12;2093:52;2180:9;2167:23;2199:31;2224:5;2199:31;:::i;:::-;2249:5;-1:-1:-1;2273:35:1;2304:2;2289:18;;2273:35;:::i;:::-;2263:45;;1999:315;;;;;:::o;2319:456::-;2396:6;2404;2412;2465:2;2453:9;2444:7;2440:23;2436:32;2433:52;;;2481:1;2478;2471:12;2433:52;2520:9;2507:23;2539:31;2564:5;2539:31;:::i;:::-;2589:5;-1:-1:-1;2646:2:1;2631:18;;2618:32;2659:33;2618:32;2659:33;:::i;:::-;2319:456;;2711:7;;-1:-1:-1;;;2765:2:1;2750:18;;;;2737:32;;2319:456::o;3177:180::-;3233:6;3286:2;3274:9;3265:7;3261:23;3257:32;3254:52;;;3302:1;3299;3292:12;3254:52;3325:26;3341:9;3325:26;:::i;3362:385::-;3448:6;3456;3464;3472;3525:3;3513:9;3504:7;3500:23;3496:33;3493:53;;;3542:1;3539;3532:12;3493:53;-1:-1:-1;;3565:23:1;;;3635:2;3620:18;;3607:32;;-1:-1:-1;3686:2:1;3671:18;;3658:32;;3737:2;3722:18;3709:32;;-1:-1:-1;3362:385:1;-1:-1:-1;3362:385:1:o;3937:521::-;4117:3;4102:19;;4106:9;4198:6;4075:4;4232:220;4246:4;4243:1;4240:11;4232:220;;;4309:13;;-1:-1:-1;;;;;4305:39:1;4293:52;;4368:4;4392:12;;;;4427:15;;;;4341:1;4259:9;4232:220;;;4236:3;;;3937:521;;;;:::o;4463:367::-;4526:8;4536:6;4590:3;4583:4;4575:6;4571:17;4567:27;4557:55;;4608:1;4605;4598:12;4557:55;-1:-1:-1;4631:20:1;;4674:18;4663:30;;4660:50;;;4706:1;4703;4696:12;4660:50;4743:4;4735:6;4731:17;4719:29;;4803:3;4796:4;4786:6;4783:1;4779:14;4771:6;4767:27;4763:38;4760:47;4757:67;;;4820:1;4817;4810:12;4757:67;4463:367;;;;;:::o;4835:437::-;4921:6;4929;4982:2;4970:9;4961:7;4957:23;4953:32;4950:52;;;4998:1;4995;4988:12;4950:52;5038:9;5025:23;5071:18;5063:6;5060:30;5057:50;;;5103:1;5100;5093:12;5057:50;5142:70;5204:7;5195:6;5184:9;5180:22;5142:70;:::i;:::-;5231:8;;5116:96;;-1:-1:-1;4835:437:1;-1:-1:-1;;;;4835:437:1:o;5277:315::-;5345:6;5353;5406:2;5394:9;5385:7;5381:23;5377:32;5374:52;;;5422:1;5419;5412:12;5374:52;5458:9;5445:23;5435:33;;5518:2;5507:9;5503:18;5490:32;5531:31;5556:5;5531:31;:::i;:::-;5581:5;5571:15;;;5277:315;;;;;:::o;5597:127::-;5658:10;5653:3;5649:20;5646:1;5639:31;5689:4;5686:1;5679:15;5713:4;5710:1;5703:15;5729:275;5800:2;5794:9;5865:2;5846:13;;-1:-1:-1;;5842:27:1;5830:40;;5900:18;5885:34;;5921:22;;;5882:62;5879:88;;;5947:18;;:::i;:::-;5983:2;5976:22;5729:275;;-1:-1:-1;5729:275:1:o;6009:183::-;6069:4;6102:18;6094:6;6091:30;6088:56;;;6124:18;;:::i;:::-;-1:-1:-1;6169:1:1;6165:14;6181:4;6161:25;;6009:183::o;6197:737::-;6251:5;6304:3;6297:4;6289:6;6285:17;6281:27;6271:55;;6322:1;6319;6312:12;6271:55;6358:6;6345:20;6384:4;6408:60;6424:43;6464:2;6424:43;:::i;:::-;6408:60;:::i;:::-;6502:15;;;6588:1;6584:10;;;;6572:23;;6568:32;;;6533:12;;;;6612:15;;;6609:35;;;6640:1;6637;6630:12;6609:35;6676:2;6668:6;6664:15;6688:217;6704:6;6699:3;6696:15;6688:217;;;6784:3;6771:17;6801:31;6826:5;6801:31;:::i;:::-;6845:18;;6883:12;;;;6721;;6688:217;;;-1:-1:-1;6923:5:1;6197:737;-1:-1:-1;;;;;;6197:737:1:o;6939:1138::-;7057:6;7065;7118:2;7106:9;7097:7;7093:23;7089:32;7086:52;;;7134:1;7131;7124:12;7086:52;7174:9;7161:23;7203:18;7244:2;7236:6;7233:14;7230:34;;;7260:1;7257;7250:12;7230:34;7283:61;7336:7;7327:6;7316:9;7312:22;7283:61;:::i;:::-;7273:71;;7363:2;7353:12;;7418:2;7407:9;7403:18;7390:32;7447:2;7437:8;7434:16;7431:36;;;7463:1;7460;7453:12;7431:36;7486:24;;;-1:-1:-1;7541:4:1;7533:13;;7529:27;-1:-1:-1;7519:55:1;;7570:1;7567;7560:12;7519:55;7606:2;7593:16;7629:60;7645:43;7685:2;7645:43;:::i;7629:60::-;7723:15;;;7805:1;7801:10;;;;7793:19;;7789:28;;;7754:12;;;;7829:19;;;7826:39;;;7861:1;7858;7851:12;7826:39;7885:11;;;;7905:142;7921:6;7916:3;7913:15;7905:142;;;7987:17;;7975:30;;7938:12;;;;8025;;;;7905:142;;;8066:5;8056:15;;;;;;;6939:1138;;;;;:::o;8082:572::-;8177:6;8185;8193;8246:2;8234:9;8225:7;8221:23;8217:32;8214:52;;;8262:1;8259;8252:12;8214:52;8301:9;8288:23;8320:31;8345:5;8320:31;:::i;:::-;8370:5;-1:-1:-1;8426:2:1;8411:18;;8398:32;8453:18;8442:30;;8439:50;;;8485:1;8482;8475:12;8439:50;8524:70;8586:7;8577:6;8566:9;8562:22;8524:70;:::i;:::-;8082:572;;8613:8;;-1:-1:-1;8498:96:1;;-1:-1:-1;;;;8082:572:1:o;8659:388::-;8727:6;8735;8788:2;8776:9;8767:7;8763:23;8759:32;8756:52;;;8804:1;8801;8794:12;8756:52;8843:9;8830:23;8862:31;8887:5;8862:31;:::i;:::-;8912:5;-1:-1:-1;8969:2:1;8954:18;;8941:32;8982:33;8941:32;8982:33;:::i;9052:248::-;9117:6;9125;9178:2;9166:9;9157:7;9153:23;9149:32;9146:52;;;9194:1;9191;9184:12;9146:52;9217:26;9233:9;9217:26;:::i;9305:348::-;9389:6;9442:2;9430:9;9421:7;9417:23;9413:32;9410:52;;;9458:1;9455;9448:12;9410:52;9498:9;9485:23;9531:18;9523:6;9520:30;9517:50;;;9563:1;9560;9553:12;9517:50;9586:61;9639:7;9630:6;9619:9;9615:22;9586:61;:::i;10579:127::-;10640:10;10635:3;10631:20;10628:1;10621:31;10671:4;10668:1;10661:15;10695:4;10692:1;10685:15;10711:128;10778:9;;;10799:11;;;10796:37;;;10813:18;;:::i;10844:127::-;10905:10;10900:3;10896:20;10893:1;10886:31;10936:4;10933:1;10926:15;10960:4;10957:1;10950:15;10976:168;11049:9;;;11080;;11097:15;;;11091:22;;11077:37;11067:71;;11118:18;;:::i;11149:217::-;11189:1;11215;11205:132;;11259:10;11254:3;11250:20;11247:1;11240:31;11294:4;11291:1;11284:15;11322:4;11319:1;11312:15;11205:132;-1:-1:-1;11351:9:1;;11149:217::o;11371:125::-;11436:9;;;11457:10;;;11454:36;;;11470:18;;:::i;11501:135::-;11540:3;11561:17;;;11558:43;;11581:18;;:::i;:::-;-1:-1:-1;11628:1:1;11617:13;;11501:135::o;11641:380::-;11720:1;11716:12;;;;11763;;;11784:61;;11838:4;11830:6;11826:17;11816:27;;11784:61;11891:2;11883:6;11880:14;11860:18;11857:38;11854:161;;11937:10;11932:3;11928:20;11925:1;11918:31;11972:4;11969:1;11962:15;12000:4;11997:1;11990:15;11854:161;;11641:380;;;:::o;12026:329::-;12228:2;12210:21;;;12267:1;12247:18;;;12240:29;-1:-1:-1;;;12300:2:1;12285:18;;12278:36;12346:2;12331:18;;12026:329::o;18928:251::-;18998:6;19051:2;19039:9;19030:7;19026:23;19022:32;19019:52;;;19067:1;19064;19057:12;19019:52;19099:9;19093:16;19118:31;19143:5;19118:31;:::i;19184:980::-;19446:4;19494:3;19483:9;19479:19;19525:6;19514:9;19507:25;19551:2;19589:6;19584:2;19573:9;19569:18;19562:34;19632:3;19627:2;19616:9;19612:18;19605:31;19656:6;19691;19685:13;19722:6;19714;19707:22;19760:3;19749:9;19745:19;19738:26;;19799:2;19791:6;19787:15;19773:29;;19820:1;19830:195;19844:6;19841:1;19838:13;19830:195;;;19909:13;;-1:-1:-1;;;;;19905:39:1;19893:52;;20000:15;;;;19965:12;;;;19941:1;19859:9;19830:195;;;-1:-1:-1;;;;;;;20081:32:1;;;;20076:2;20061:18;;20054:60;-1:-1:-1;;;20145:3:1;20130:19;20123:35;20042:3;19184:980;-1:-1:-1;;;19184:980:1:o

Metadata Hash

ipfs://2484ca09371b3b788c84f087f7d4aaf5e8aa247bc7d1c7318826636efa0c4687
Loading