ETH Price: $3,416.89 (-1.71%)
Gas: 8 Gwei

Contract

0xb5De343139B0Fb823DbC897A3ef171591cF704D3
 

Overview

ETH Balance

0.047225 ETH

Eth Value

$161.36 (@ $3,416.89/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer Ownersh...155028482022-09-09 12:51:44677 days ago1662727904IN
0xb5De3431...91cF704D3
0 ETH0.000348912.83769851
Put On Sale154269562022-08-28 9:16:37689 days ago1661678197IN
0xb5De3431...91cF704D3
0 ETH0.006286974.1727944
Collect153589432022-08-17 13:19:46700 days ago1660742386IN
0xb5De3431...91cF704D3
0 ETH0.0124324310.50890801
Put On Sale152418942022-07-30 5:14:42718 days ago1659158082IN
0xb5De3431...91cF704D3
0 ETH0.007510355
Put On Sale152418942022-07-30 5:14:42718 days ago1659158082IN
0xb5De3431...91cF704D3
0 ETH0.00756015.1
Put On Sale152398992022-07-29 21:47:13718 days ago1659131233IN
0xb5De3431...91cF704D3
0 ETH0.008930116
Put On Sale152395622022-07-29 20:31:25718 days ago1659126685IN
0xb5De3431...91cF704D3
0 ETH0.010145196.89633938
Put On Sale152387142022-07-29 17:27:17719 days ago1659115637IN
0xb5De3431...91cF704D3
0 ETH0.0116646710.58225399
Put On Sale152387122022-07-29 17:27:11719 days ago1659115631IN
0xb5De3431...91cF704D3
0 ETH0.0120505311
Put On Sale152386992022-07-29 17:24:39719 days ago1659115479IN
0xb5De3431...91cF704D3
0 ETH0.0119570111
Put On Sale152386972022-07-29 17:24:19719 days ago1659115459IN
0xb5De3431...91cF704D3
0 ETH0.0118734811
Put On Sale152386972022-07-29 17:24:19719 days ago1659115459IN
0xb5De3431...91cF704D3
0 ETH0.0120541911
Put On Sale152381902022-07-29 15:31:36719 days ago1659108696IN
0xb5De3431...91cF704D3
0 ETH0.01191811.1
Put On Sale152375482022-07-29 13:10:28719 days ago1659100228IN
0xb5De3431...91cF704D3
0 ETH0.0166207111.3
Put On Sale152344392022-07-29 1:20:27719 days ago1659057627IN
0xb5De3431...91cF704D3
0 ETH0.012290788.42982807
Put On Sale152343142022-07-29 0:52:52719 days ago1659055972IN
0xb5De3431...91cF704D3
0 ETH0.0144090810
Put On Sale152340882022-07-29 0:05:40719 days ago1659053140IN
0xb5De3431...91cF704D3
0 ETH0.010454217
Put On Sale152334452022-07-28 21:39:17719 days ago1659044357IN
0xb5De3431...91cF704D3
0 ETH0.0215531715
Put On Sale152334452022-07-28 21:39:17719 days ago1659044357IN
0xb5De3431...91cF704D3
0 ETH0.0214387215
Put On Sale152334452022-07-28 21:39:17719 days ago1659044357IN
0xb5De3431...91cF704D3
0 ETH0.021400515
Put On Sale152334452022-07-28 21:39:17719 days ago1659044357IN
0xb5De3431...91cF704D3
0 ETH0.0212629215
Put On Sale152334452022-07-28 21:39:17719 days ago1659044357IN
0xb5De3431...91cF704D3
0 ETH0.0213502215
Put On Sale152303862022-07-28 10:08:45720 days ago1659002925IN
0xb5De3431...91cF704D3
0 ETH0.008558856
Put On Sale152302002022-07-28 9:30:08720 days ago1659000608IN
0xb5De3431...91cF704D3
0 ETH0.0161394611.42808743
Put On Sale152300262022-07-28 8:46:43720 days ago1658998003IN
0xb5De3431...91cF704D3
0 ETH0.0187125712.1710277
View all transactions

Latest 7 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
153589432022-08-17 13:19:46700 days ago1660742386
0xb5De3431...91cF704D3
0.01175 ETH
153589432022-08-17 13:19:46700 days ago1660742386
0xb5De3431...91cF704D3
2.12675 ETH
153589432022-08-17 13:19:46700 days ago1660742386
0xb5De3431...91cF704D3
0.1645 ETH
148787702022-05-31 12:45:39778 days ago1654001139
0xb5De3431...91cF704D3
0.0000025 ETH
148787702022-05-31 12:45:39778 days ago1654001139
0xb5De3431...91cF704D3
0.000975 ETH
148771832022-05-31 6:22:42778 days ago1653978162
0xb5De3431...91cF704D3
0.000025 ETH
148771832022-05-31 6:22:42778 days ago1653978162
0xb5De3431...91cF704D3
0.00975 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BrokerV2

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 800 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-26
*/

pragma solidity ^0.5.17;
pragma experimental ABIEncoderV2;

// librray for TokenDets
library TokenDetArrayLib {
    // Using for array of strcutres for storing mintable address and token id
    using TokenDetArrayLib for TokenDets;

    struct TokenDet {
        address NFTAddress;
        uint256 tokenID;
    }

    // custom type array TokenDets
    struct TokenDets {
        TokenDet[] array;
    }

    function addTokenDet(
        TokenDets storage self,
        TokenDet memory _tokenDet
        // address _mintableAddress,
        // uint256 _tokenID
    ) public {
        if (!self.exists(_tokenDet)) {
            self.array.push(_tokenDet);
        }
    }

    function getIndexByTokenDet(
        TokenDets storage self,
        TokenDet memory _tokenDet
    ) internal view returns (uint256, bool) {
        uint256 index;
        bool tokenExists = false;
        for (uint256 i = 0; i < self.array.length; i++) {
            if (
                self.array[i].NFTAddress == _tokenDet.NFTAddress &&
                self.array[i].tokenID == _tokenDet.tokenID 
            ) {
                index = i;
                tokenExists = true;
                break;
            }
        }
        return (index, tokenExists);
    }

    function removeTokenDet(
        TokenDets storage self,
        TokenDet memory _tokenDet
    ) internal returns (bool) {
        (uint256 i, bool tokenExists) = self.getIndexByTokenDet(_tokenDet);
        if (tokenExists == true) {
            self.array[i] = self.array[self.array.length - 1];
            self.array.pop();
            return true;
        }
        return false;
    }

    function exists(
        TokenDets storage self,
        TokenDet memory _tokenDet
    ) internal view returns (bool) {
        for (uint256 i = 0; i < self.array.length; i++) {
            if (
                self.array[i].NFTAddress == _tokenDet.NFTAddress &&
                self.array[i].tokenID == _tokenDet.tokenID
            ) {
                return true;
            }
        }
        return false;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        // address msgSender = _msgSender();
        _owner = msg.sender;
        // emit OwnershipTransferred(address(0), msg.sender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        // emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

}

// library for erc20address array 
library ERC20Addresses {
    using ERC20Addresses for erc20Addresses;

    struct erc20Addresses {
        address[] array;
    }

    function addERC20Tokens(erc20Addresses storage self, address erc20address)
        external
    {
        self.array.push(erc20address);
    }

    function getIndexByERC20Token(
        erc20Addresses storage self,
        address _ercTokenAddress
    ) internal view returns (uint256, bool) {
        uint256 index;
        bool exists;

        for (uint256 i = 0; i < self.array.length; i++) {
            if (self.array[i] == _ercTokenAddress) {
                index = i;
                exists = true;

                break;
            }
        }
        return (index, exists);
    }

    function removeERC20Token(
        erc20Addresses storage self,
        address _ercTokenAddress
    ) internal {
        if (self.array.length > 1){
            for (uint256 i = 0; i < self.array.length; i++) {
                    if (
                        self.array[i] == _ercTokenAddress 
                    ) {
                        delete self.array[i];
                    }
                }
        }
        else{
            self.array.length = 0;
        }
    }
    function exists(
        erc20Addresses storage self,
        address _ercTokenAddress
    ) internal view returns (bool) {
        for (uint256 i = 0; i < self.array.length; i++) {
            if (
                self.array[i] == _ercTokenAddress 
            ) {
                return true;
            }
        }
        return false;
    }
}

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

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

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

contract IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes memory data
    ) public returns (bytes4);
}

contract ERC721Holder is IERC721Receiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes memory
    ) public returns (bytes4) {
        return this.onERC721Received.selector;
    }
}

contract IMintableToken {
    // Required methods
    function ownerOf(uint256 _tokenId) external view returns (address owner);

    function royalities(uint256 _tokenId) public view returns (uint256);

    function creators(uint256 _tokenId) public view returns (address payable);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public;

    function getApproved(uint256 tokenId)
        public
        view
        returns (address operator);
        
    function isApprovedForAll(address owner, address operator)
        public
        view
        returns (bool);

    // Events
    event Transfer(address from, address to, uint256 tokenId);
    event Approval(address owner, address approved, uint256 tokenId);

    // ERC-165 Compatibility (https://github.com/ethereum/EIPs/issues/165)
    function supportsInterface(bytes4 _interfaceID)
        external
        view
        returns (bool);
}


contract Storage is Ownable {
    using TokenDetArrayLib for TokenDetArrayLib.TokenDets;
    using ERC20Addresses for ERC20Addresses.erc20Addresses;
    // address owner;
    // address owner;
    uint16 public rewardDistributionPercentage;
    uint16 public platFormFeePercentage;   
    uint16 public lpStakefeepercentage; 
    // uint16 public brokerage;
    uint256 public updateClosingTime;

    mapping(address => mapping(uint256 => bool)) tokenOpenForSale;
    mapping(address => TokenDetArrayLib.TokenDets) tokensForSalePerUser;
    TokenDetArrayLib.TokenDets fixedPriceTokens;
    TokenDetArrayLib.TokenDets auctionTokens;

    //auction type :
    // 1 : only direct buy
    // 2 : only bid
    // 3 : both buy and bid

    struct auction {
        address payable lastOwner;
        uint256 currentBid;
        address payable highestBidder;
        uint256 auctionType;
        uint256 startingPrice;
        uint256 buyPrice;
        bool buyer;
        uint256 startingTime;
        uint256 closingTime;
        address erc20Token;
    }

    struct OfferDetails {
        address offerer;
        uint256 amount;
    }
    
    /** Offer mapping
     * {
     *      ERC721Address:{
     *          tokenId:{
     *               ERC20Address{
     *                   offerer: Address of offerer,
     *                   amount: Offer in this currency
     *               }
     *           }
     *       }   
     * }
     */
    mapping(
        address => mapping( 
            uint256 => mapping(
                address => OfferDetails
            )
        )
    ) public offerprice;

    mapping(address => mapping(uint256 => auction)) public auctions;

    TokenDetArrayLib.TokenDets tokensForSale;
    ERC20Addresses.erc20Addresses erc20TokensArray;

    address public WETHAddress;
    address public StakeAddress;
    address public LPStakeAddress;
    function getErc20Tokens()
        public
        view
        returns (ERC20Addresses.erc20Addresses memory)
    {
        return erc20TokensArray;
    }

    function getTokensForSale()
        public
        view
        returns (TokenDetArrayLib.TokenDet[] memory)
    {
        return tokensForSale.array;
    }

    function getFixedPriceTokensForSale()
        public
        view
        returns (TokenDetArrayLib.TokenDet[] memory)
    {
        return fixedPriceTokens.array;
    }

    function getAuctionTokensForSale()
        public
        view
        returns (TokenDetArrayLib.TokenDet[] memory)
    {
        return auctionTokens.array;
    }

    function getTokensForSalePerUser(address _user)
        public
        view
        returns (TokenDetArrayLib.TokenDet[] memory)
    {
        return tokensForSalePerUser[_user].array;
    }

    // function setBrokerage(uint16 _brokerage) public onlyOwner {
    //     brokerage = _brokerage;
    // }


      function setBrokerage(address _rewardDistributionAddress,address _lpStakeAddress ,uint16 _lpStakefeepercentage, uint16 _rewardDistributionPercentage, uint16 _platFormFeePercentage) public onlyOwner {
        require(_rewardDistributionAddress != address(0) &&_lpStakeAddress!=address(0), "Address is Zero");
        require(_rewardDistributionPercentage >= 0 && _platFormFeePercentage >= 0 &&_lpStakefeepercentage>=0, "should be greater than zero");
        require(_rewardDistributionPercentage <= 1000 && _platFormFeePercentage <= 1000 && _lpStakefeepercentage<=1000, "should be greater than zero");
        rewardDistributionPercentage = _rewardDistributionPercentage;
        platFormFeePercentage = _platFormFeePercentage;
        lpStakefeepercentage=_lpStakefeepercentage;
        StakeAddress = _rewardDistributionAddress;
        LPStakeAddress = _lpStakeAddress;
    }

    function setUpdatedClosingTime(uint256 _updateTime) public onlyOwner {
        updateClosingTime = _updateTime;
    }

    function setAddress(address _weth, address _rewardDistributionAddress) external onlyOwner {
        WETHAddress =_weth;
        StakeAddress = _rewardDistributionAddress;
    }
}

contract BrokerModifiers is Storage {
    modifier erc20Allowed(address _erc20Token) {
        if (_erc20Token != address(0)) {
            require(
                erc20TokensArray.exists(_erc20Token),
                "ERC20 not allowed"
            );
        }
        _;
    }

    modifier onSaleOnly(uint256 tokenID, address _mintableToken) {
        require(
            tokenOpenForSale[_mintableToken][tokenID] == true,
            "Token Not For Sale"
        );
        _;
    }

    modifier activeAuction(uint256 tokenID, address _mintableToken) {
        require(
            block.timestamp < auctions[_mintableToken][tokenID].closingTime,
            "Auction Time Over!"
        );
        require(
            block.timestamp > auctions[_mintableToken][tokenID].startingTime,
            "Auction Not Started yet!"
        );
        _;
    }

    modifier auctionOnly(uint256 tokenID, address _mintableToken) {
        require(
            auctions[_mintableToken][tokenID].auctionType != 1,
            "Auction Not For Bid"
        );
        _;
    }

    modifier flatSaleOnly(uint256 tokenID, address _mintableToken) {
        require(
            auctions[_mintableToken][tokenID].auctionType != 2,
            "For flat sale only!"
        );
        _;
    }

    modifier tokenOwnerOnlly(uint256 tokenID, address _mintableToken) {
        // Sender will be owner only if no have bidded on auction.
        require(
            IMintableToken(_mintableToken).ownerOf(tokenID) == msg.sender,
            "You must be owner and Token should not have any bid"
        );
        _;
    }
}

pragma solidity ^0.5.17;

interface IWETH {
    function deposit() external payable;
    function approve(address spender, uint value) external returns (bool);
    function withdraw(uint) external;
    function transfer(address to, uint value) external returns (bool);
}

interface IStake{
    function receiveWETHFee(uint256 amount) external;
}

interface ILPStake{
    function receiveWETHFee(uint256 amount) external;
}

contract BrokerV2 is ERC721Holder, BrokerModifiers {
    // events
    event Bid(
        address indexed collection,
        uint256 indexed tokenId,
        address indexed seller,
        address bidder,
        uint256 amouont,
        uint256 time,
        address ERC20Address
    );
    event Buy(
        address indexed collection,
        uint256 tokenId,
        address indexed seller,
        address indexed buyer,
        uint256 amount,
        uint256 time,
        address ERC20Address,
        bool isOffer
    );
    event Collect(
        address indexed collection,
        uint256 indexed tokenId,
        address indexed seller,
        address buyer,
        address collector,
        uint256 time,
        address ERC20Address
    );
    event OnSale(
        address indexed collection,
        uint256 indexed tokenId,
        address indexed seller,
        uint256 auctionType,
        uint256 amount,
        uint256 time,
        address ERC20Address
    );
    event PriceUpdated(
        address indexed collection,
        uint256 indexed tokenId,
        address indexed seller,
        uint256 auctionType,
        uint256 oldAmount,
        uint256 amount,
        uint256 time,
        address ERC20Address
    );
    event OffSale(
        address indexed collection,
        uint256 indexed tokenId,
        address indexed seller,
        uint256 time,
        address ERC20Address
    );

    event MakeAnOffer(
        address indexed collection,
        uint256 indexed tokenId,
        address indexed offerer,
        address erc20Token,
        uint256 offerAmount
    );

    mapping(address => uint256) public brokerageBalance;

    //Struct of Asset
    struct Asset {
        uint256 _tokenID;
        uint256 _startingPrice;
        uint256 _auctionType;
        uint256 _buyPrice;
        uint256 _startingTime;
        uint256 _closingTime;
        address _mintableToken;
        address _erc20Token;
    }

    //Struct of Pair
    struct Pair {
        uint256 tokenID;
        address _mintableToken;
    }    

    constructor(
        uint16 _rewardDistributionPercentage,
        uint16 _platFormFeePercentage,
        uint16 _lpStakefeepercentage,
        uint256 _updatedTime,
        address _weth,
        address _rewardDistributionAddress,
        address _lpStakeAddress
    ) public {
        rewardDistributionPercentage = _rewardDistributionPercentage;
        platFormFeePercentage = _platFormFeePercentage;
        setUpdatedClosingTime(_updatedTime);
        transferOwnership(msg.sender);
        WETHAddress =_weth;
        StakeAddress = _rewardDistributionAddress;
        LPStakeAddress = _lpStakeAddress;
        lpStakefeepercentage = _lpStakefeepercentage;
    }    

    //Update contract parameter
    function updateparams(
        uint16 _rewardDistributionPercentage,
        uint16 _platFormFeePercentage,
        uint16 _lpStakefeepercentage,
        uint256 _updatedTime,
        address _weth,
        address _rewardDistributionAddress,
        address _lpStakeAddress
    ) external onlyOwner {
        
        require(_rewardDistributionAddress != address(0) &&_lpStakeAddress!=address(0), "Address is Zero");
        require(_rewardDistributionPercentage >= 0 && _platFormFeePercentage >= 0 &&_lpStakefeepercentage>=0, "should be greater than zero");
        require(_rewardDistributionPercentage <= 1000 && _platFormFeePercentage <= 1000 && _lpStakefeepercentage<=1000, "should be greater than zero");
       
        rewardDistributionPercentage = _rewardDistributionPercentage;
        platFormFeePercentage = _platFormFeePercentage;
        setUpdatedClosingTime(_updatedTime);
        WETHAddress =_weth;
        StakeAddress = _rewardDistributionAddress;
        LPStakeAddress = _lpStakeAddress;
        lpStakefeepercentage = _lpStakefeepercentage;

    }



    // Method to create any offer for any NFT.
    function makeAnOffer(
        uint256 tokenID,
        address _mintableToken,
        address _erc20Token,
        uint256 amount
    ) public payable erc20Allowed(_erc20Token) {
        // Allow offer only if token is not auction or auction have been ended withoud any bids.
        if (auctions[_mintableToken][tokenID].auctionType == 2) {
            require(
                block.timestamp <
                    auctions[_mintableToken][tokenID].closingTime &&
                    !auctions[_mintableToken][tokenID].buyer,
                "Can not make an offer on an incomplete auction"
            );
        }

        // Check if the amount offered is better than previous
        require(
            amount >= offerprice[_mintableToken][tokenID][_erc20Token].amount,
            "amount is not less  than msg value"
        );

        // Revert previous offer
        _revertOffer(_mintableToken, tokenID, _erc20Token);

        // If the offer is not native currency
        if (_erc20Token == address(0)) {
            require(msg.value >= amount, "Value sent less than amount");
        } else {
            IERC20 erc20Token = IERC20(_erc20Token);
            require(
                erc20Token.allowance(msg.sender, address(this)) >= amount,
                "Insufficient spent allowance "
            );
            erc20Token.transferFrom(msg.sender, address(this), amount);
        }

        // Update the offer
        offerprice[_mintableToken][tokenID][_erc20Token].offerer = msg.sender;
        offerprice[_mintableToken][tokenID][_erc20Token].amount = amount;

        // Trigger the event
        emit MakeAnOffer(
            _mintableToken,
            tokenID,
            msg.sender,
            _erc20Token,
            amount
        );
    }

    // Method to accept an offer.
    function accpetOffer(
        uint256 tokenID,
        address _mintableToken,
        address _erc20Token,
        bool isNotClubare
    )
        public
        payable
        flatSaleOnly(tokenID, _mintableToken)
        tokenOwnerOnlly(tokenID, _mintableToken)
        erc20Allowed(_erc20Token)
    {
        // Chekc offer details and offer exists.
        OfferDetails memory _offer = offerprice[_mintableToken][tokenID][
            _erc20Token
        ];
        require(
            _offer.offerer != address(0),
            "selected candidate amount not match "
        );


        IMintableToken Token = IMintableToken(_mintableToken);

        _calculateFees(tokenID, _mintableToken, msg.sender, _erc20Token, _offer.amount, isNotClubare, false);

        tokenOpenForSale[_mintableToken][tokenID] = false;

        // Transfer the NFT
        Token.safeTransferFrom(Token.ownerOf(tokenID), _offer.offerer, tokenID);

        // Buy event
        emit Buy(
            _mintableToken,
            tokenID,
            msg.sender,
            _offer.offerer,
            _offer.amount,
            block.timestamp,
            _erc20Token,
            true
        );

        // delete all auctin details.
        delete offerprice[_mintableToken][tokenID][_erc20Token];
        _revertAll(_mintableToken, tokenID);
        TokenDetArrayLib.TokenDet memory _tokenDet = TokenDetArrayLib.TokenDet(
            _mintableToken,
            tokenID
        );
        tokensForSale.removeTokenDet(_tokenDet);
        tokensForSalePerUser[msg.sender].removeTokenDet(_tokenDet);
        fixedPriceTokens.removeTokenDet(_tokenDet);
        delete auctions[_tokenDet.NFTAddress][_tokenDet.tokenID];
    }

    function _calculateFees(uint256 tokenID, address _collectionAddress, address payable _lastOwner2, address _erc20Token, uint256 amount, bool isNotClubare, bool isBuymethod) internal {

        IMintableToken Token = IMintableToken(_collectionAddress);
        {
            uint256 royalities;
            address payable creator;
            uint256 royality;
            if (!isNotClubare) {
                royalities = Token.royalities(tokenID);
                creator = Token.creators(tokenID);
                royality = (royalities * amount) / 10000;
            }

            uint256 stakingAmt = ((rewardDistributionPercentage *
                amount) / 10000);
            uint256 lpStakingAmt = ((lpStakefeepercentage *
                amount) / 10000);
            uint256 brokerage = ((platFormFeePercentage *
                amount) / 10000);

            uint256 lastOwner_funds = amount -
                royality -
                stakingAmt -
                lpStakingAmt-
                brokerage;

            address payable user = msg.sender;
            address payable lastOwner2 = _lastOwner2;
            IWETH weth = IWETH(WETHAddress);
        
            if (_erc20Token == address(0)) {
                if (isBuymethod) {
                    require(msg.value >= amount, "Insufficient Payment");                
                }
                if (!isNotClubare) {
                    creator.transfer(royality);
                }
                lastOwner2.transfer(lastOwner_funds);
                weth.deposit.value(stakingAmt+lpStakingAmt)();
            } else {
                IERC20 erc20Token = IERC20(_erc20Token);                
                if (isBuymethod) {
                    require(
                        erc20Token.allowance(user, address(this)) >=
                            amount,
                        "Insufficient spent allowance "
                    );
                    erc20Token.transferFrom(user, address(this), brokerage + stakingAmt + lpStakingAmt);
                    // transfer royalitiy to creator
                    if (!isNotClubare) {
                        erc20Token.transferFrom(user, creator, royality);
                    }
                    erc20Token.transferFrom(user, lastOwner2, lastOwner_funds);
                } else {                    
                    if (!isNotClubare) {
                        erc20Token.transfer(creator, royality);
                    }
                    erc20Token.transfer(lastOwner2, lastOwner_funds);
                }
            }
            if(_erc20Token==address(0)|| _erc20Token==WETHAddress){
                if(stakingAmt > 0) {
                    weth.approve(address(StakeAddress), stakingAmt);
                    IStake stake = IStake(StakeAddress);
                    stake.receiveWETHFee(stakingAmt);
                }
                if(lpStakingAmt > 0) {
                    weth.approve(address(LPStakeAddress), lpStakingAmt);
                    ILPStake lpStake = ILPStake(LPStakeAddress);
                    lpStake.receiveWETHFee(lpStakingAmt);
                }
            }
        
            // Update the brokerage and auction state of NFT
            address _stackDeep_erc20Token = _erc20Token;
            brokerageBalance[_stackDeep_erc20Token] += brokerage + stakingAmt + lpStakingAmt;
        }
    }

    // Method to update revert the current offer.
    function _revertOffer(
        address _mintableToken,
        uint256 tokenID,
        address _erc20Token
    ) internal {
        // If there is any amount offered for this currency
        if (
            offerprice[_mintableToken][tokenID][_erc20Token].amount > 0 &&
            offerprice[_mintableToken][tokenID][_erc20Token].offerer !=
            address(0)
        ) {
            // Revert amount for native currency
            if (_erc20Token == address(0)) {
                address(
                    uint160(
                        offerprice[_mintableToken][tokenID][_erc20Token].offerer
                    )
                ).transfer(
                        offerprice[_mintableToken][tokenID][_erc20Token].amount
                    );
            } else {
                // Revert other currency
                IERC20 erc20 = IERC20(_erc20Token);
                erc20.transfer(
                    offerprice[_mintableToken][tokenID][_erc20Token].offerer,
                    offerprice[_mintableToken][tokenID][_erc20Token].amount
                );
            }

            // Delete the mapping to gas reward.
            delete offerprice[_mintableToken][tokenID][_erc20Token];
        }
    }

    // Method to revert all offers on current tokenId.
    function _revertAll(address _mintableToken, uint256 tokenID) internal {
        for (uint256 i = 0; i < erc20TokensArray.array.length; i++) {
            _revertOffer(_mintableToken, tokenID, erc20TokensArray.array[i]);
        }
    }

    // Public method to revert offer
    function revertOffer(
        address _mintableToken,
        uint256 tokenID,
        address _erc20Token
    ) public payable {
        // only allowed to token owner of offerer
        require(
            msg.sender ==
                offerprice[_mintableToken][tokenID][_erc20Token].offerer ||
                IMintableToken(_mintableToken).ownerOf(tokenID) == msg.sender,
            "You must be offerer or owner to remove the offer."
        );
        // Must be valid offer
        require(
            offerprice[_mintableToken][tokenID][_erc20Token].amount > 0 &&
                offerprice[_mintableToken][tokenID][_erc20Token].offerer !=
                address(0),
            " Offer doesn't exist. "
        );
        // revert offer
        _revertOffer(_mintableToken, tokenID, _erc20Token);
    }

    // Public method to allow token owner to discard all offers
    function revertAll(address _mintableToken, uint256 tokenID)
        public
        tokenOwnerOnlly(tokenID, _mintableToken)
    {
        _revertAll(_mintableToken, tokenID);
    }

    function addERC20TokenPayment(address _erc20Token) public onlyOwner {
        erc20TokensArray.addERC20Tokens(_erc20Token);
    }

    function removeERC20TokenPayment(address _erc20Token)
        public
        erc20Allowed(_erc20Token)
        onlyOwner
    {
        erc20TokensArray.removeERC20Token(_erc20Token);
    }

    function bid(
        uint256 tokenID,
        address _mintableToken,
        uint256 amount
    )
        public
        payable
        onSaleOnly(tokenID, _mintableToken)
        activeAuction(tokenID, _mintableToken)
    {
        IMintableToken Token = IMintableToken(_mintableToken);

        auction memory _auction = auctions[_mintableToken][tokenID];

        if (_auction.erc20Token == address(0)) {
            require(
                msg.value > _auction.currentBid,
                "Insufficient bidding amount."
            );

            if (_auction.buyer == true) {
                _auction.highestBidder.transfer(_auction.currentBid);
            }
        } else {
            IERC20 erc20Token = IERC20(_auction.erc20Token);
            require(
                erc20Token.allowance(msg.sender, address(this)) >= amount,
                "Allowance is less than amount sent for bidding."
            );
            require(
                amount > _auction.currentBid,
                "Insufficient bidding amount."
            );
            erc20Token.transferFrom(msg.sender, address(this), amount);

            if (_auction.buyer == true) {
                erc20Token.transfer(
                    _auction.highestBidder,
                    _auction.currentBid
                );
            }
        }

        _auction.currentBid = _auction.erc20Token == address(0)
            ? msg.value
            : amount;

        Token.safeTransferFrom(Token.ownerOf(tokenID), address(this), tokenID);
        _auction.buyer = true;
        _auction.highestBidder = msg.sender;
        _auction.closingTime += updateClosingTime;
        auctions[_mintableToken][tokenID] = _auction;

        // Bid event
        emit Bid(
            _mintableToken,
            tokenID,
            _auction.lastOwner,
            _auction.highestBidder,
            _auction.currentBid,
            block.timestamp,
            _auction.erc20Token
        );
    }

    struct TokenDetails {
        uint256 tokenID;
        address _mintableToken;
        bool isNotClubare;
    }

    // Collect Function are use to collect funds and NFT from Broker
    function collect(
        uint256 tokenID,
        address _mintableToken,
        bool isNotClubare
    ) public {
        IMintableToken Token = IMintableToken(_mintableToken);
        auction memory _auction = auctions[_mintableToken][tokenID];
        TokenDetArrayLib.TokenDet memory _tokenDet = TokenDetArrayLib.TokenDet(
            _mintableToken,
            tokenID
        );
        require(
            block.timestamp > _auction.closingTime && _auction.auctionType == 2,
            "Auction Not Over!"
        );
        
        if (_auction.buyer == true) {
            address payable lastOwner2 = _auction.lastOwner;
             _calculateFees(tokenID, _mintableToken, lastOwner2, _auction.erc20Token, _auction.currentBid, isNotClubare, false);

            {
                //Scope added for stack too deep error
                uint id = tokenID;
                auction memory auction = _auction;
                Token.safeTransferFrom(
                    Token.ownerOf(id),
                    auction.highestBidder,
                    id
                );

                // Buy event
                emit Buy(
                    _tokenDet.NFTAddress,
                    _tokenDet.tokenID,
                    lastOwner2,
                    auction.highestBidder,
                    auction.currentBid,
                    block.timestamp,
                    auction.erc20Token,
                    false
                );
                // Revert all the offers.
                _revertAll(_mintableToken, id);
            }

            // Collect event
            emit Collect(
                _tokenDet.NFTAddress,
                _tokenDet.tokenID,
                lastOwner2,
                _auction.highestBidder,
                msg.sender,
                block.timestamp,
                _auction.erc20Token
            );
            tokenOpenForSale[_mintableToken][tokenID] = false;
            tokensForSale.removeTokenDet(_tokenDet);

            tokensForSalePerUser[lastOwner2].removeTokenDet(_tokenDet);
            auctionTokens.removeTokenDet(_tokenDet);
            delete auctions[_mintableToken][tokenID];
        }
    }

    function buy(
        uint256 tokenID,
        address _mintableToken,
        bool isNotClubare
    )
        public
        payable
        onSaleOnly(tokenID, _mintableToken)
        flatSaleOnly(tokenID, _mintableToken)
    {
        IMintableToken Token = IMintableToken(_mintableToken);
        auction memory _auction = auctions[_mintableToken][tokenID];
        TokenDetArrayLib.TokenDet memory _tokenDet = TokenDetArrayLib.TokenDet(
            _mintableToken,
            tokenID
        );
        address payable lastOwner2 = _auction.lastOwner;
        _calculateFees(tokenID, _mintableToken, lastOwner2, _auction.erc20Token, _auction.buyPrice, isNotClubare, true);

        tokenOpenForSale[_tokenDet.NFTAddress][_tokenDet.tokenID] = false;

        Token.safeTransferFrom(
            Token.ownerOf(_tokenDet.tokenID),
            msg.sender,
            _tokenDet.tokenID
        );

        // Buy event
        emit Buy(
            _tokenDet.NFTAddress,
            _tokenDet.tokenID,
            lastOwner2,
            msg.sender,
            _auction.buyPrice,
            block.timestamp,
            _auction.erc20Token,
            false
        );

        tokensForSale.removeTokenDet(_tokenDet);
        tokensForSalePerUser[lastOwner2].removeTokenDet(_tokenDet);

        fixedPriceTokens.removeTokenDet(_tokenDet);
        delete auctions[_tokenDet.NFTAddress][_tokenDet.tokenID];
        _revertAll(_tokenDet.NFTAddress, _tokenDet.tokenID);
    }

    function withdraw() public onlyOwner {
        msg.sender.transfer(brokerageBalance[address(0)]);
        brokerageBalance[address(0)] = 0;
    }

    function withdrawERC20(address _erc20Token) public onlyOwner {
        require(
            erc20TokensArray.exists(_erc20Token),
            "This erc20token payment not allowed"
        );
        IERC20 erc20Token = IERC20(_erc20Token);
        erc20Token.transfer(msg.sender, brokerageBalance[_erc20Token]);
        brokerageBalance[_erc20Token] = 0;
    }

    function putOnSale(
        uint256 _tokenID,
        uint256 _startingPrice,
        uint256 _auctionType,
        uint256 _buyPrice,
        uint256 _startingTime,
        uint256 _closingTime,
        address _mintableToken,
        address _erc20Token
    )
        public
        erc20Allowed(_erc20Token)
        tokenOwnerOnlly(_tokenID, _mintableToken)
    {
        IMintableToken Token = IMintableToken(_mintableToken);
        auction memory _auction = auctions[_mintableToken][_tokenID];

        // Allow to put on sale to already on sale NFT \
        // only if it was on auction and have 0 bids and auction is over
        if (tokenOpenForSale[_mintableToken][_tokenID] == true) {
            require(
                _auction.auctionType == 2 &&
                    _auction.buyer == false &&
                    block.timestamp > _auction.closingTime,
                "This NFT is already on sale."
            );
        }
        TokenDetArrayLib.TokenDet memory _tokenDet = TokenDetArrayLib.TokenDet(
            _mintableToken,
            _tokenID
        );
        auction memory newAuction = auction(
            msg.sender,
            _startingPrice,
            address(0),
            _auctionType,
            _startingPrice,
            _buyPrice,
            false,
            _startingTime,
            _closingTime,
            _erc20Token
        );

        require(
            (Token.isApprovedForAll(msg.sender, address(this)) ||
                Token.getApproved(_tokenDet.tokenID) == address(this)),
            "Broker Not approved"
        );
        require(
            _closingTime > _startingTime,
            "Closing time should be greater than starting time!"
        );
        auctions[_tokenDet.NFTAddress][_tokenDet.tokenID] = newAuction;

        // Store data in all mappings if adding fresh token on sale
        if (
            tokenOpenForSale[_tokenDet.NFTAddress][_tokenDet.tokenID] == false
        ) {
            tokenOpenForSale[_tokenDet.NFTAddress][_tokenDet.tokenID] = true;

            tokensForSale.addTokenDet(_tokenDet);
            tokensForSalePerUser[msg.sender].addTokenDet(_tokenDet);

            // Add token to fixedPrice on Timed list
            if (_auctionType == 1) {
                fixedPriceTokens.addTokenDet(_tokenDet);
            } else if (_auctionType == 2) {
                auctionTokens.addTokenDet(_tokenDet);
            }
        }

        // OnSale event
        emit OnSale(
            _tokenDet.NFTAddress,
            _tokenDet.tokenID,
            msg.sender,
            newAuction.auctionType,
            newAuction.auctionType == 1
                ? newAuction.buyPrice
                : newAuction.startingPrice,
            block.timestamp,
            newAuction.erc20Token
        );
    }

    /**
     * @notice Bulk De listing from marketplace
     * @param _assets array of struct Asset[]
     **/
    function batchListing(Asset[] calldata _assets) external {
        for (uint i = 0; i < _assets.length; i++) {
            Asset memory a = _assets[i];
            putOnSale(
                a._tokenID,
                a._startingPrice,
                a._auctionType,
                a._buyPrice,
                a._startingTime,
                a._closingTime,
                a._mintableToken,
                a._erc20Token
            );
        }
    }

    function updatePrice(
        uint256 tokenID,
        address _mintableToken,
        uint256 _newPrice,
        address _erc20Token
    )
        public
        onSaleOnly(tokenID, _mintableToken)
        erc20Allowed(_erc20Token)
        tokenOwnerOnlly(tokenID, _mintableToken)
    {
        // IMintableToken Token = IMintableToken(_mintableToken);
        auction memory _auction = auctions[_mintableToken][tokenID];

        if (_auction.auctionType == 2) {
            require(
                block.timestamp < _auction.closingTime,
                "Auction Time Over!"
            );
        }
        emit PriceUpdated(
            _mintableToken,
            tokenID,
            _auction.lastOwner,
            _auction.auctionType,
            _auction.auctionType == 1
                ? _auction.buyPrice
                : _auction.startingPrice,
            _newPrice,
            block.timestamp,
            _auction.erc20Token
        );
        // Update Price
        if (_auction.auctionType == 1) {
            _auction.buyPrice = _newPrice;
        } else {
            _auction.startingPrice = _newPrice;
            _auction.currentBid = _newPrice;
        }
        _auction.erc20Token = _erc20Token;
        auctions[_mintableToken][tokenID] = _auction;
    }

    function putSaleOff(uint256 tokenID, address _mintableToken)
        public
        tokenOwnerOnlly(tokenID, _mintableToken)
    {
        // IMintableToken Token = IMintableToken(_mintableToken);
        auction memory _auction = auctions[_mintableToken][tokenID];
        TokenDetArrayLib.TokenDet memory _tokenDet = TokenDetArrayLib.TokenDet(
            _mintableToken,
            tokenID
        );
        tokenOpenForSale[_mintableToken][tokenID] = false;

        // OffSale event
        emit OffSale(
            _mintableToken,
            tokenID,
            msg.sender,
            block.timestamp,
            _auction.erc20Token
        );

        tokensForSale.removeTokenDet(_tokenDet);

        tokensForSalePerUser[msg.sender].removeTokenDet(_tokenDet);
        // Remove token from list
        if (_auction.auctionType == 1) {
            fixedPriceTokens.removeTokenDet(_tokenDet);
        } else if (_auction.auctionType == 2) {
            auctionTokens.removeTokenDet(_tokenDet);
        }
        delete auctions[_mintableToken][tokenID];
    }

    /**
     * @notice Bulk De listing from marketplace
     * @param _pairs array of struct Pair[]
     **/
    function batchDelisting(Pair[] calldata _pairs) external {
        for (uint i = 0; i < _pairs.length; i++) {
            Pair memory p = _pairs[i];
            putSaleOff(p.tokenID, p._mintableToken);
        }
    }

    function getOnSaleStatus(address _mintableToken, uint256 tokenID)
        public
        view
        returns (bool)
    {
        return tokenOpenForSale[_mintableToken][tokenID];
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint16","name":"_rewardDistributionPercentage","type":"uint16"},{"internalType":"uint16","name":"_platFormFeePercentage","type":"uint16"},{"internalType":"uint16","name":"_lpStakefeepercentage","type":"uint16"},{"internalType":"uint256","name":"_updatedTime","type":"uint256"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_rewardDistributionAddress","type":"address"},{"internalType":"address","name":"_lpStakeAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collection","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"address","name":"bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amouont","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"address","name":"ERC20Address","type":"address"}],"name":"Bid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collection","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"address","name":"ERC20Address","type":"address"},{"indexed":false,"internalType":"bool","name":"isOffer","type":"bool"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collection","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"address","name":"collector","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"address","name":"ERC20Address","type":"address"}],"name":"Collect","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collection","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":false,"internalType":"address","name":"erc20Token","type":"address"},{"indexed":false,"internalType":"uint256","name":"offerAmount","type":"uint256"}],"name":"MakeAnOffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collection","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"address","name":"ERC20Address","type":"address"}],"name":"OffSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collection","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"auctionType","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"address","name":"ERC20Address","type":"address"}],"name":"OnSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collection","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"auctionType","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"address","name":"ERC20Address","type":"address"}],"name":"PriceUpdated","type":"event"},{"constant":true,"inputs":[],"name":"LPStakeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"StakeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"WETHAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"address","name":"_mintableToken","type":"address"},{"internalType":"address","name":"_erc20Token","type":"address"},{"internalType":"bool","name":"isNotClubare","type":"bool"}],"name":"accpetOffer","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_erc20Token","type":"address"}],"name":"addERC20TokenPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"auctions","outputs":[{"internalType":"address payable","name":"lastOwner","type":"address"},{"internalType":"uint256","name":"currentBid","type":"uint256"},{"internalType":"address payable","name":"highestBidder","type":"address"},{"internalType":"uint256","name":"auctionType","type":"uint256"},{"internalType":"uint256","name":"startingPrice","type":"uint256"},{"internalType":"uint256","name":"buyPrice","type":"uint256"},{"internalType":"bool","name":"buyer","type":"bool"},{"internalType":"uint256","name":"startingTime","type":"uint256"},{"internalType":"uint256","name":"closingTime","type":"uint256"},{"internalType":"address","name":"erc20Token","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"components":[{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"address","name":"_mintableToken","type":"address"}],"internalType":"struct BrokerV2.Pair[]","name":"_pairs","type":"tuple[]"}],"name":"batchDelisting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"components":[{"internalType":"uint256","name":"_tokenID","type":"uint256"},{"internalType":"uint256","name":"_startingPrice","type":"uint256"},{"internalType":"uint256","name":"_auctionType","type":"uint256"},{"internalType":"uint256","name":"_buyPrice","type":"uint256"},{"internalType":"uint256","name":"_startingTime","type":"uint256"},{"internalType":"uint256","name":"_closingTime","type":"uint256"},{"internalType":"address","name":"_mintableToken","type":"address"},{"internalType":"address","name":"_erc20Token","type":"address"}],"internalType":"struct BrokerV2.Asset[]","name":"_assets","type":"tuple[]"}],"name":"batchListing","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"address","name":"_mintableToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"brokerageBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"address","name":"_mintableToken","type":"address"},{"internalType":"bool","name":"isNotClubare","type":"bool"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"address","name":"_mintableToken","type":"address"},{"internalType":"bool","name":"isNotClubare","type":"bool"}],"name":"collect","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAuctionTokensForSale","outputs":[{"components":[{"internalType":"address","name":"NFTAddress","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"internalType":"struct TokenDetArrayLib.TokenDet[]","name":"","type":"tuple[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getErc20Tokens","outputs":[{"components":[{"internalType":"address[]","name":"array","type":"address[]"}],"internalType":"struct ERC20Addresses.erc20Addresses","name":"","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getFixedPriceTokensForSale","outputs":[{"components":[{"internalType":"address","name":"NFTAddress","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"internalType":"struct TokenDetArrayLib.TokenDet[]","name":"","type":"tuple[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_mintableToken","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"getOnSaleStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTokensForSale","outputs":[{"components":[{"internalType":"address","name":"NFTAddress","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"internalType":"struct TokenDetArrayLib.TokenDet[]","name":"","type":"tuple[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getTokensForSalePerUser","outputs":[{"components":[{"internalType":"address","name":"NFTAddress","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"internalType":"struct TokenDetArrayLib.TokenDet[]","name":"","type":"tuple[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lpStakefeepercentage","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"address","name":"_mintableToken","type":"address"},{"internalType":"address","name":"_erc20Token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"makeAnOffer","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"offerprice","outputs":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"platFormFeePercentage","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_tokenID","type":"uint256"},{"internalType":"uint256","name":"_startingPrice","type":"uint256"},{"internalType":"uint256","name":"_auctionType","type":"uint256"},{"internalType":"uint256","name":"_buyPrice","type":"uint256"},{"internalType":"uint256","name":"_startingTime","type":"uint256"},{"internalType":"uint256","name":"_closingTime","type":"uint256"},{"internalType":"address","name":"_mintableToken","type":"address"},{"internalType":"address","name":"_erc20Token","type":"address"}],"name":"putOnSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"address","name":"_mintableToken","type":"address"}],"name":"putSaleOff","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_erc20Token","type":"address"}],"name":"removeERC20TokenPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_mintableToken","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"revertAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_mintableToken","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"address","name":"_erc20Token","type":"address"}],"name":"revertOffer","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"rewardDistributionPercentage","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_rewardDistributionAddress","type":"address"}],"name":"setAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_rewardDistributionAddress","type":"address"},{"internalType":"address","name":"_lpStakeAddress","type":"address"},{"internalType":"uint16","name":"_lpStakefeepercentage","type":"uint16"},{"internalType":"uint16","name":"_rewardDistributionPercentage","type":"uint16"},{"internalType":"uint16","name":"_platFormFeePercentage","type":"uint16"}],"name":"setBrokerage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_updateTime","type":"uint256"}],"name":"setUpdatedClosingTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"updateClosingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"address","name":"_mintableToken","type":"address"},{"internalType":"uint256","name":"_newPrice","type":"uint256"},{"internalType":"address","name":"_erc20Token","type":"address"}],"name":"updatePrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint16","name":"_rewardDistributionPercentage","type":"uint16"},{"internalType":"uint16","name":"_platFormFeePercentage","type":"uint16"},{"internalType":"uint16","name":"_lpStakefeepercentage","type":"uint16"},{"internalType":"uint256","name":"_updatedTime","type":"uint256"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_rewardDistributionAddress","type":"address"},{"internalType":"address","name":"_lpStakeAddress","type":"address"}],"name":"updateparams","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_erc20Token","type":"address"}],"name":"withdrawERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162005fa738038062005fa78339810160408190526200003491620001ff565b6000805461ffff888116600160b01b0261ffff60b01b19918b16600160a01b0261ffff60a01b196001600160a01b0319909416331793909316929092171617905562000089846001600160e01b036200010416565b6200009d336001600160e01b036200014416565b600a80546001600160a01b039485166001600160a01b031991821617909155600b805493851693821693909317909255600c8054919093169116179055506000805461ffff909216600160c01b0261ffff60c01b1990921691909117905550620003af9050565b620001176001600160e01b03620001c116565b6200013f5760405162461bcd60e51b8152600401620001369062000341565b60405180910390fd5b600155565b620001576001600160e01b03620001c116565b620001765760405162461bcd60e51b8152600401620001369062000341565b6001600160a01b0381166200019f5760405162461bcd60e51b815260040162000136906200032f565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331490565b8051620001df816200037f565b92915050565b8051620001df8162000399565b8051620001df81620003a4565b600080600080600080600060e0888a0312156200021b57600080fd5b6000620002298a8a620001e5565b97505060206200023c8a828b01620001e5565b96505060406200024f8a828b01620001e5565b9550506060620002628a828b01620001f2565b9450506080620002758a828b01620001d2565b93505060a0620002888a828b01620001d2565b92505060c06200029b8a828b01620001d2565b91505092959891949750929550565b6000620002b960268362000353565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b60006200030360208362000353565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60208082528101620001df81620002aa565b60208082528101620001df81620002f4565b90815260200190565b6000620001df8262000370565b61ffff1690565b6001600160a01b031690565b90565b6200038a816200035c565b81146200039657600080fd5b50565b6200038a8162000369565b6200038a816200037c565b615be880620003bf6000396000f3fe6080604052600436106102bb5760003560e01c80637f4948521161016e578063d4739cca116100cb578063f2fde38b1161007f578063f5a0c9b811610064578063f5a0c9b81461071a578063f7f174881461073a578063ff8edbdb1461074f576102bb565b8063f2fde38b146106da578063f4f3b200146106fa576102bb565b8063efb7027b116100b0578063efb7027b14610677578063f09856f314610697578063f26f8494146106c5576102bb565b8063d4739cca14610637578063e467682d14610657576102bb565b8063c0f4ed3111610122578063c52ea52e11610107578063c52ea52e146105eb578063d2abc5171461060d578063d3c9080a14610622576102bb565b8063c0f4ed31146105b8578063c1a8bdbc146105cb576102bb565b80638c6ab013116101535780638c6ab0131461056e5780638da5cb5b1461058e5780638f32d59b146105a3576102bb565b80637f494852146105445780638bae5f4f14610559576102bb565b80633ccfd60b1161021c578063640cf873116101d05780636d036535116101b55780636d036535146104e25780636eafbe10146105045780637ad157b914610531576102bb565b8063640cf873146104a057806365e4e1c0146104c0576102bb565b806344f91c1e1161020157806344f91c1e1461044257806345ce7db9146104785780635aa8680a1461048d576102bb565b80633ccfd60b1461040d5780633e54d3a214610422576102bb565b80631a07b081116102735780633169b515116102585780633169b515146103ba578063398ef17f146103cd5780633b58524d146103ed576102bb565b80631a07b0811461036d5780631f90607a1461039a576102bb565b8063136a6a24116102a4578063136a6a241461030d578063150b7a0214610320578063179443f31461034d576102bb565b806305ac943e146102c05780630af88b24146102e2575b600080fd5b3480156102cc57600080fd5b506102e06102db366004614885565b61076f565b005b3480156102ee57600080fd5b506102f7610809565b6040516103049190615652565b60405180910390f35b6102e061031b366004614a19565b610818565b34801561032c57600080fd5b5061034061033b366004614970565b61098e565b604051610304919061580e565b34801561035957600080fd5b506102e0610368366004614c11565b61099f565b34801561037957600080fd5b5061038d6103883660046149e9565b610c6f565b6040516103049190615800565b3480156103a657600080fd5b506102e06103b53660046149e9565b610c9d565b6102e06103c8366004614c85565b610d55565b3480156103d957600080fd5b506102e06103e8366004614b39565b611078565b3480156103f957600080fd5b506102e06104083660046148c1565b6111bf565b34801561041957600080fd5b506102e0611211565b34801561042e57600080fd5b506102e061043d366004614aa8565b6112bb565b34801561044e57600080fd5b5061046261045d3660046149e9565b61130d565b6040516103049a99989796959493929190615715565b34801561048457600080fd5b506102f761137a565b6102e061049b366004614c30565b611389565b3480156104ac57600080fd5b506102e06104bb366004614db5565b61181b565b3480156104cc57600080fd5b506104d561200e565b60405161030491906157ef565b3480156104ee57600080fd5b506104f7612087565b60405161030491906159c7565b34801561051057600080fd5b5061052461051f366004614885565b6120f8565b60405161030491906159f4565b6102e061053f366004614cda565b61210a565b34801561055057600080fd5b506105246124ec565b34801561056557600080fd5b506102f76124f2565b34801561057a57600080fd5b506102e0610589366004614cda565b612501565b34801561059a57600080fd5b506102f76128fc565b3480156105af57600080fd5b5061038d61290b565b6102e06105c6366004614d1d565b61291c565b3480156105d757600080fd5b506102e06105e63660046148fb565b612fc8565b3480156105f757600080fd5b506106006130ea565b60405161030491906159e6565b34801561061957600080fd5b506106006130fb565b34801561062e57600080fd5b506104d561310c565b34801561064357600080fd5b506104d5610652366004614885565b613175565b34801561066357600080fd5b506102e0610672366004614885565b613200565b34801561068357600080fd5b506102e0610692366004614a66565b613276565b3480156106a357600080fd5b506106b76106b2366004614a19565b6132e7565b6040516103049291906157e1565b3480156106d157600080fd5b5061060061331d565b3480156106e657600080fd5b506102e06106f5366004614885565b61332e565b34801561070657600080fd5b506102e0610715366004614885565b61339a565b34801561072657600080fd5b506102e0610735366004614bd5565b613497565b34801561074657600080fd5b506104d56134c0565b34801561075b57600080fd5b506102e061076a366004614d60565b613529565b61077761290b565b61079c5760405162461bcd60e51b81526004016107939061592c565b60405180910390fd5b60405163581455e960e01b815273b5803c83f862c81a6a20f6008976633b6a35f22b9063581455e9906107d69060099085906004016159d8565b60006040518083038186803b1580156107ee57600080fd5b505af4158015610802573d6000803e3d6000fd5b5050505050565b600a546001600160a01b031681565b6001600160a01b03838116600090815260066020908152604080832086845282528083208585168452909152902054163314806108d957506040516331a9108f60e11b815233906001600160a01b03851690636352211e9061087e9086906004016159f4565b60206040518083038186803b15801561089657600080fd5b505afa1580156108aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108ce91908101906148a3565b6001600160a01b0316145b6108f55760405162461bcd60e51b81526004016107939061584c565b6001600160a01b0380841660009081526006602090815260408083208684528252808320938516835292905220600101541580159061096257506001600160a01b038381166000908152600660209081526040808320868452825280832085851684529091529020541615155b61097e5760405162461bcd60e51b81526004016107939061596c565b6109898383836138a2565b505050565b630a85bd0160e11b5b949350505050565b6040516331a9108f60e11b81528290829033906001600160a01b03831690636352211e906109d19086906004016159f4565b60206040518083038186803b1580156109e957600080fd5b505afa1580156109fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a2191908101906148a3565b6001600160a01b031614610a475760405162461bcd60e51b81526004016107939061582c565b610a4f614529565b506001600160a01b03808416600090815260076020818152604080842089855282529283902083516101408101855281548616815260018201549281019290925260028101548516938201939093526003830154606082015260048301546080820152600583015460a0820152600683015460ff16151560c08201529082015460e08201526008820154610100820152600990910154909116610120820152610af6614599565b506040805180820182526001600160a01b03861680825260208083018990526000828152600282528481208a8252909152839020805460ff191690556101208401519251919233928992917fc2faf9d94bb8992d1eda56db8f2aefeb7cd52ed54e8bdfdd439d361132f59e2091610b6e914291615a02565b60405180910390a4610b8760088263ffffffff613a7c16565b50336000908152600360205260409020610ba7908263ffffffff613a7c16565b50816060015160011415610bcc57610bc660048263ffffffff613a7c16565b50610bec565b816060015160021415610bec57610bea60058263ffffffff613a7c16565b505b505050506001600160a01b0316600090815260076020818152604080842094845293905291812080546001600160a01b03199081168255600182018390556002820180548216905560038201839055600482018390556005820183905560068201805460ff19169055928101829055600881019190915560090180549091169055565b6001600160a01b038216600090815260026020908152604080832084845290915290205460ff165b92915050565b6040516331a9108f60e11b81528190839033906001600160a01b03831690636352211e90610ccf9086906004016159f4565b60206040518083038186803b158015610ce757600080fd5b505afa158015610cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d1f91908101906148a3565b6001600160a01b031614610d455760405162461bcd60e51b81526004016107939061582c565b610d4f8484613b55565b50505050565b816001600160a01b03811615610d9257610d7660098263ffffffff613b9916565b610d925760405162461bcd60e51b81526004016107939061599c565b6001600160a01b038416600090815260076020908152604080832088845290915290206003015460021415610e39576001600160a01b038416600090815260076020908152604080832088845290915290206008015442108015610e1d57506001600160a01b038416600090815260076020908152604080832088845290915290206006015460ff16155b610e395760405162461bcd60e51b81526004016107939061598c565b6001600160a01b038085166000908152600660209081526040808320898452825280832093871683529290522060010154821015610e895760405162461bcd60e51b81526004016107939061581c565b610e948486856138a2565b6001600160a01b038316610ec75781341015610ec25760405162461bcd60e51b8152600401610793906158bc565b610fec565b604051636eb1769f60e11b8152839083906001600160a01b0383169063dd62ed3e90610ef99033903090600401615660565b60206040518083038186803b158015610f1157600080fd5b505afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f499190810190614bf3565b1015610f675760405162461bcd60e51b81526004016107939061589c565b6040516323b872dd60e01b81526001600160a01b038216906323b872dd90610f97903390309088906004016156df565b602060405180830381600087803b158015610fb157600080fd5b505af1158015610fc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fe99190810190614ade565b50505b6001600160a01b0384811660008181526006602090815260408083208a84528252808320948816835293905282902080546001600160a01b031916339081178255600190910185905591518791907f06321e89bf5f7245b1a2aaf538585dcedb3e3bcda42c59db5c3c437bb51e3f0f9061106990889088906157e1565b60405180910390a45050505050565b61108061290b565b61109c5760405162461bcd60e51b81526004016107939061592c565b6001600160a01b038216158015906110bc57506001600160a01b03811615155b6110d85760405162461bcd60e51b8152600401610793906158ac565b6103e88761ffff16111580156110f457506103e88661ffff1611155b801561110657506103e88561ffff1611155b6111225760405162461bcd60e51b81526004016107939061591c565b6000805461ffff888116600160b01b0261ffff60b01b19918b16600160a01b0261ffff60a01b19909316929092171617905561115d84613497565b600a80546001600160a01b039485166001600160a01b031991821617909155600b805493851693821693909317909255600c8054919093169116179055506000805461ffff909216600160c01b0261ffff60c01b199092169190911790555050565b6111c761290b565b6111e35760405162461bcd60e51b81526004016107939061592c565b600a80546001600160a01b039384166001600160a01b031991821617909155600b8054929093169116179055565b61121961290b565b6112355760405162461bcd60e51b81526004016107939061592c565b6000808052600d6020527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee54604051339282156108fc02929190818181858888f1935050505015801561128c573d6000803e3d6000fd5b506000808052600d6020527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee55565b60005b81811015610989576112ce614599565b8383838181106112da57fe5b9050604002018036036112f09190810190614b1b565b90506113048160000151826020015161099f565b506001016112be565b6007602081815260009384526040808520909152918352912080546001820154600283015460038401546004850154600586015460068701549787015460088801546009909801546001600160a01b039788169996989588169794969395929460ff90941693919291168a565b600b546001600160a01b031681565b6001600160a01b038316600090815260076020908152604080832087845290915290206003015484908490600214156113d45760405162461bcd60e51b81526004016107939061586c565b6040516331a9108f60e11b81528690869033906001600160a01b03831690636352211e906114069086906004016159f4565b60206040518083038186803b15801561141e57600080fd5b505afa158015611432573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061145691908101906148a3565b6001600160a01b03161461147c5760405162461bcd60e51b81526004016107939061582c565b856001600160a01b038116156114b95761149d60098263ffffffff613b9916565b6114b95760405162461bcd60e51b81526004016107939061599c565b6114c1614599565b506001600160a01b0380891660009081526006602090815260408083208d845282528083208b851684528252918290208251808401909352805490931680835260019093015490820152906115285760405162461bcd60e51b81526004016107939061594c565b60008990506115418b8b338c86602001518d6000613bf6565b6000600260008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008d815260200190815260200160002060006101000a81548160ff021916908315150217905550806001600160a01b03166342842e0e826001600160a01b0316636352211e8e6040518263ffffffff1660e01b81526004016115cb91906159f4565b60206040518083038186803b1580156115e357600080fd5b505afa1580156115f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061161b91908101906148a3565b84600001518e6040518463ffffffff1660e01b815260040161163f939291906157d3565b600060405180830381600087803b15801561165957600080fd5b505af115801561166d573d6000803e3d6000fd5b5050505081600001516001600160a01b0316336001600160a01b03168b6001600160a01b03167fa2ab0454b724b203a92ee88de73837b4e8fb3a36b43d7c22c7d52ee55011340f8e8660200151428f60016040516116cf959493929190615a1e565b60405180910390a46001600160a01b03808b1660009081526006602090815260408083208f84528252808320938d16835292905290812080546001600160a01b0319168155600101556117228a8c613b55565b61172a614599565b50604080518082019091526001600160a01b038b168152602081018c905261175960088263ffffffff613a7c16565b50336000908152600360205260409020611779908263ffffffff613a7c16565b5061178b60048263ffffffff613a7c16565b5080516001600160a01b0316600090815260076020818152604080842094820151845293905291812080546001600160a01b03199081168255600182018390556002820180548216905560038201839055600482018390556005820183905560068201805460ff191690559281018290556008810191909155600901805490911690555050505050505050505050565b806001600160a01b038116156118585761183c60098263ffffffff613b9916565b6118585760405162461bcd60e51b81526004016107939061599c565b6040516331a9108f60e11b81528990849033906001600160a01b03831690636352211e9061188a9086906004016159f4565b60206040518083038186803b1580156118a257600080fd5b505afa1580156118b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118da91908101906148a3565b6001600160a01b0316146119005760405162461bcd60e51b81526004016107939061582c565b84611909614529565b60076000886001600160a01b03166001600160a01b0316815260200190815260200160002060008e8152602001908152602001600020604051806101400160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600182015481526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff1615151515815260200160078201548152602001600882015481526020016009820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681525050905060026000886001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060009054906101000a900460ff161515600115151415611ac35780606001516002148015611a97575060c0810151155b8015611aa7575080610100015142115b611ac35760405162461bcd60e51b8152600401610793906158fc565b611acb614599565b6040518060400160405280896001600160a01b031681526020018f8152509050611af3614529565b604051806101400160405280336001600160a01b031681526020018f815260200160006001600160a01b031681526020018e81526020018f81526020018d81526020016000151581526020018c81526020018b8152602001896001600160a01b03168152509050836001600160a01b031663e985e9c533306040518363ffffffff1660e01b8152600401611b88929190615660565b60206040518083038186803b158015611ba057600080fd5b505afa158015611bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611bd89190810190614ade565b80611c6a5750602082015160405163020604bf60e21b815230916001600160a01b0387169163081812fc91611c0f916004016159f4565b60206040518083038186803b158015611c2757600080fd5b505afa158015611c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c5f91908101906148a3565b6001600160a01b0316145b611c865760405162461bcd60e51b8152600401610793906158ec565b8a8a11611ca55760405162461bcd60e51b81526004016107939061597c565b81516001600160a01b03908116600090815260076020818152604080842082880180518652908352818520875181546001600160a01b031990811691891691909117825588850151600183015588840151600280840180548416928b169290921790915560608a0151600384015560808a0151600484015560a08a0151600584015560c08a015160068401805460ff191691151591909117905560e08a015196830196909655610100890151600883015561012089015160099092018054909116918816919091179055875190951684529181528183209351835292909252205460ff16611f8c5781516001600160a01b0316600090815260026020908152604080832082860151845290915290819020805460ff191660011790555163fd7c9a1560e01b815273cfdabef2efe8b0f8adc6e321cdeaeba4b0bf61e89063fd7c9a1590611df99060089086906004016159ac565b60006040518083038186803b158015611e1157600080fd5b505af4158015611e25573d6000803e3d6000fd5b50503360009081526003602052604090819020905163fd7c9a1560e01b815273cfdabef2efe8b0f8adc6e321cdeaeba4b0bf61e8935063fd7c9a159250611e71919086906004016159ac565b60006040518083038186803b158015611e8957600080fd5b505af4158015611e9d573d6000803e3d6000fd5b505050508c60011415611f185760405163fd7c9a1560e01b815273cfdabef2efe8b0f8adc6e321cdeaeba4b0bf61e89063fd7c9a1590611ee390600490869082016159ac565b60006040518083038186803b158015611efb57600080fd5b505af4158015611f0f573d6000803e3d6000fd5b50505050611f8c565b8c60021415611f8c5760405163fd7c9a1560e01b815273cfdabef2efe8b0f8adc6e321cdeaeba4b0bf61e89063fd7c9a1590611f5b9060059086906004016159ac565b60006040518083038186803b158015611f7357600080fd5b505af4158015611f87573d6000803e3d6000fd5b505050505b6020820151825160608301513392916001600160a01b0316907fab6ed0d1a912b3de36cc5b4c42eb3b65a1baa1321ec3a4be61d51708ec37c8cb9060018114611fd9578560800151611fdf565b8560a001515b610120870151604051611ff59392914291615a10565b60405180910390a4505050505050505050505050505050565b60606008600001805480602002602001604051908101604052809291908181526020016000905b8282101561207d576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101612035565b5050505090505b90565b61208f6145b0565b604080516009805460208181028401850185528301818152929391928492909184918401828280156120ea57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116120cc575b505050505081525050905090565b600d6020526000908152604090205481565b6001600160a01b03821660009081526002602090815260408083208684529091529020548390839060ff1615156001146121565760405162461bcd60e51b8152600401610793906158dc565b6001600160a01b038416600090815260076020908152604080832088845290915290206003015485908590600214156121a15760405162461bcd60e51b81526004016107939061586c565b856121aa614529565b506001600160a01b0380881660009081526007602081815260408084208d855282529283902083516101408101855281548616815260018201549281019290925260028101548516938201939093526003830154606082015260048301546080820152600583015460a0820152600683015460ff16151560c08201529082015460e08201526008820154610100820152600990910154909116610120820152612251614599565b50604080518082019091526001600160a01b0389168152602081018a9052815161012083015160a084015161228e918d918d9185918e6001613bf6565b81516001600160a01b03908116600090815260026020908152604080832082870180518552925291829020805460ff191690555190516331a9108f60e11b8152918616916342842e0e918391636352211e916122ec916004016159f4565b60206040518083038186803b15801561230457600080fd5b505afa158015612318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061233c91908101906148a3565b3385602001516040518463ffffffff1660e01b8152600401612360939291906157c5565b600060405180830381600087803b15801561237a57600080fd5b505af115801561238e573d6000803e3d6000fd5b50505050336001600160a01b0316816001600160a01b031683600001516001600160a01b03167fa2ab0454b724b203a92ee88de73837b4e8fb3a36b43d7c22c7d52ee55011340f85602001518760a001514289610120015160006040516123f9959493929190615a1e565b60405180910390a461241260088363ffffffff613a7c16565b506001600160a01b038116600090815260036020526040902061243b908363ffffffff613a7c16565b5061244d60048363ffffffff613a7c16565b5081516001600160a01b03166000908152600760208181526040808420828701805186529252832080546001600160a01b03199081168255600182018590556002820180548216905560038201859055600482018590556005820185905560068201805460ff191690559281018490556008810193909355600990920180549091169055825190516124df9190613b55565b5050505050505050505050565b60015481565b600c546001600160a01b031681565b8161250a614529565b506001600160a01b03808416600090815260076020818152604080842089855282529283902083516101408101855281548616815260018201549281019290925260028101548516938201939093526003830154606082015260048301546080820152600583015460a0820152600683015460ff16151560c08201529082015460e082015260088201546101008201526009909101549091166101208201526125b1614599565b6040518060400160405280866001600160a01b03168152602001878152509050816101000151421180156125e9575081606001516002145b6126055760405162461bcd60e51b81526004016107939061585c565b60c08201511515600114156128f45781516101208301516020840151612633918991899185918a6000613bf6565b8661263c614529565b506040516331a9108f60e11b815284906001600160a01b038716906342842e0e908290636352211e906126739087906004016159f4565b60206040518083038186803b15801561268b57600080fd5b505afa15801561269f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126c391908101906148a3565b8360400151856040518463ffffffff1660e01b81526004016126e7939291906157c5565b600060405180830381600087803b15801561270157600080fd5b505af1158015612715573d6000803e3d6000fd5b5050505080604001516001600160a01b0316836001600160a01b031685600001516001600160a01b03167fa2ab0454b724b203a92ee88de73837b4e8fb3a36b43d7c22c7d52ee55011340f87602001518560200151428761012001516000604051612784959493929190615a1e565b60405180910390a46127968883613b55565b5050806001600160a01b0316826020015183600001516001600160a01b03167ffea08bb1b0c126c4d14cec1f22705e26528a9385b48fd32837d4432137c39e9e866040015133428961012001516040516127f394939291906156aa565b60405180910390a46001600160a01b03861660009081526002602090815260408083208a84529091529020805460ff1916905561283760088363ffffffff613a7c16565b506001600160a01b0381166000908152600360205260409020612860908363ffffffff613a7c16565b5061287260058363ffffffff613a7c16565b50506001600160a01b03851660009081526007602081815260408084208a8552909152822080546001600160a01b03199081168255600182018490556002820180548216905560038201849055600482018490556005820184905560068201805460ff1916905591810183905560088101929092556009909101805490911690555b505050505050565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6001600160a01b03821660009081526002602090815260408083208684529091529020548390839060ff1615156001146129685760405162461bcd60e51b8152600401610793906158dc565b6001600160a01b03841660009081526007602090815260408083208884529091529020600801548590859042106129b15760405162461bcd60e51b81526004016107939061593c565b6001600160a01b0381166000908152600760208181526040808420868552909152909120015442116129f55760405162461bcd60e51b81526004016107939061595c565b856129fe614529565b506001600160a01b0380881660009081526007602081815260408084208d855282529283902083516101408101855281548616815260018201549281019290925260028101548516938201939093526003830154606082015260048301546080820152600583015460a0820152600683015460ff16151560c08201529082015460e082015260088201546101008201526009909101549091166101208201819052612b1d5780602001513411612ac65760405162461bcd60e51b81526004016107939061583c565b60c0810151151560011415612b185780604001516001600160a01b03166108fc82602001519081150290604051600060405180830381858888f19350505050158015612b16573d6000803e3d6000fd5b505b612d02565b610120810151604051636eb1769f60e11b815288906001600160a01b0383169063dd62ed3e90612b539033903090600401615660565b60206040518083038186803b158015612b6b57600080fd5b505afa158015612b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ba39190810190614bf3565b1015612bc15760405162461bcd60e51b81526004016107939061587c565b81602001518811612be45760405162461bcd60e51b81526004016107939061583c565b6040516323b872dd60e01b81526001600160a01b038216906323b872dd90612c1490339030908d906004016156df565b602060405180830381600087803b158015612c2e57600080fd5b505af1158015612c42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c669190810190614ade565b5060c0820151151560011415612d0057806001600160a01b031663a9059cbb836040015184602001516040518363ffffffff1660e01b8152600401612cac9291906156fa565b602060405180830381600087803b158015612cc657600080fd5b505af1158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612cfe9190810190614ade565b505b505b6101208101516001600160a01b031615612d1c5786612d1e565b345b60208201526040516331a9108f60e11b81526001600160a01b038316906342842e0e908290636352211e90612d57908e906004016159f4565b60206040518083038186803b158015612d6f57600080fd5b505afa158015612d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612da791908101906148a3565b308c6040518463ffffffff1660e01b8152600401612dc7939291906157d3565b600060405180830381600087803b158015612de157600080fd5b505af1158015612df5573d6000803e3d6000fd5b5050505060018160c00190151590811515815250503381604001906001600160a01b031690816001600160a01b0316815250506001548161010001818151019150818152505080600760008a6001600160a01b03166001600160a01b0316815260200190815260200160002060008b815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e0820151816007015561010082015181600801556101208201518160090160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555090505080600001516001600160a01b031689896001600160a01b03167fc47f35ccd7c07e8a8a68419f2150e2a62c012eed08ade47b9d264d7a091275e08460400151856020015142876101200151604051612fb594939291906157aa565b60405180910390a4505050505050505050565b612fd061290b565b612fec5760405162461bcd60e51b81526004016107939061592c565b6001600160a01b0385161580159061300c57506001600160a01b03841615155b6130285760405162461bcd60e51b8152600401610793906158ac565b6103e88261ffff161115801561304457506103e88161ffff1611155b801561305657506103e88361ffff1611155b6130725760405162461bcd60e51b81526004016107939061591c565b6000805461ffff60a01b1916600160a01b61ffff948516021761ffff60b01b1916600160b01b928416929092029190911761ffff60c01b1916600160c01b9390921692909202179055600b80546001600160a01b03199081166001600160a01b0394851617909155600c805490911691909216179055565b600054600160a01b900461ffff1681565b600054600160c01b900461ffff1681565b6004805460408051602080840282018101909252828152606093909290916000908401821561207d576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101612035565b6001600160a01b0381166000908152600360209081526040808320805482518185028101850190935280835260609492939192909184015b828210156131f5576000848152602090819020604080518082019091526002850290910180546001600160a01b031682526001908101548284015290835290920191016131ad565b505050509050919050565b806001600160a01b0381161561323d5761322160098263ffffffff613b9916565b61323d5760405162461bcd60e51b81526004016107939061599c565b61324561290b565b6132615760405162461bcd60e51b81526004016107939061592c565b61327260098363ffffffff6143fe16565b5050565b60005b81811015610989576132896145c3565b83838381811061329557fe5b905061010002018036036132ac9190810190614afc565b90506132de816000015182602001518360400151846060015185608001518660a001518760c001518860e0015161181b565b50600101613279565b6006602090815260009384526040808520825292845282842090528252902080546001909101546001600160a01b039091169082565b600054600160b01b900461ffff1681565b61333661290b565b6133525760405162461bcd60e51b81526004016107939061592c565b6001600160a01b0381166133785760405162461bcd60e51b81526004016107939061588c565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6133a261290b565b6133be5760405162461bcd60e51b81526004016107939061592c565b6133cf60098263ffffffff613b9916565b6133eb5760405162461bcd60e51b8152600401610793906158cc565b6001600160a01b0381166000818152600d60205260409081902054905163a9059cbb60e01b815283929163a9059cbb916134299133916004016156fa565b602060405180830381600087803b15801561344357600080fd5b505af1158015613457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061347b9190810190614ade565b50506001600160a01b03166000908152600d6020526040812055565b61349f61290b565b6134bb5760405162461bcd60e51b81526004016107939061592c565b600155565b6005805460408051602080840282018101909252828152606093909290916000908401821561207d576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101612035565b6001600160a01b03831660009081526002602090815260408083208784529091529020548490849060ff1615156001146135755760405162461bcd60e51b8152600401610793906158dc565b826001600160a01b038116156135b25761359660098263ffffffff613b9916565b6135b25760405162461bcd60e51b81526004016107939061599c565b6040516331a9108f60e11b81528790879033906001600160a01b03831690636352211e906135e49086906004016159f4565b60206040518083038186803b1580156135fc57600080fd5b505afa158015613610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061363491908101906148a3565b6001600160a01b03161461365a5760405162461bcd60e51b81526004016107939061582c565b613662614529565b506001600160a01b0380891660009081526007602081815260408084208e855282529283902083516101408101855281548616815260018201549281019290925260028082015486169483019490945260038101546060830181905260048201546080840152600582015460a0840152600682015460ff16151560c08401529281015460e0830152600881015461010083015260090154909316610120840152141561372c57806101000151421061372c5760405162461bcd60e51b81526004016107939061593c565b80600001516001600160a01b03168a8a6001600160a01b03167f4a232d19b0abe3474b9311b6769fa4b4a725b50d0222b222357981b17a8e7e9784606001518560600151600114613781578560800151613787565b8560a001515b8d428861012001516040516137a0959493929190615a6a565b60405180910390a48060600151600114156137c15760a081018890526137d0565b60808101889052602081018890525b6001600160a01b03968716610120820190815298871660009081526007602081815260408084209d84529c8152918c9020835181546001600160a01b0319908116918c169190911782559284015160018201559b83015160028d0180548416918b16919091179055606083015160038d0155608083015160048d015560a083015160058d015560c083015160068d01805460ff191691151591909117905560e0830151908c01556101009091015160088b01559751600990990180549098169890951697909717909555505050505050565b6001600160a01b0380841660009081526006602090815260408083208684528252808320938516835292905220600101541580159061390f57506001600160a01b038381166000908152600660209081526040808320868452825280832085851684529091529020541615155b15610989576001600160a01b038116613988576001600160a01b03838116600090815260066020908152604080832086845282528083208585168452909152808220805460019091015491519316926108fc82150292818181858888f19350505050158015613982573d6000803e3d6000fd5b50613a39565b6001600160a01b03838116600090815260066020908152604080832086845282528083208585168085529252918290208054600190910154925163a9059cbb60e01b81528594929363a9059cbb936139e49316916004016157e1565b602060405180830381600087803b1580156139fe57600080fd5b505af1158015613a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613a369190810190614ade565b50505b6001600160a01b0392831660009081526006602090815260408083209483529381528382209290941681529252812080546001600160a01b031916815560010155565b60008080613a90858563ffffffff61448b16565b909250905060018115151415613b4a57845485906000198101908110613ab257fe5b9060005260206000209060020201856000018381548110613acf57fe5b60009182526020909120825460029092020180546001600160a01b0319166001600160a01b039092169190911781556001918201549101558454859080613b1257fe5b60008281526020812060026000199093019283020180546001600160a01b031916815560019081019190915591559250610c97915050565b506000949350505050565b60005b60095481101561098957613b91838360096000018481548110613b7757fe5b6000918252602090912001546001600160a01b03166138a2565b600101613b58565b6000805b8354811015613bec57826001600160a01b0316846000018281548110613bbf57fe5b6000918252602090912001546001600160a01b03161415613be4576001915050610c97565b600101613b9d565b5060009392505050565b856000808085613d065760405163b5004f0160e01b81526001600160a01b0385169063b5004f0190613c2c908e906004016159f4565b60206040518083038186803b158015613c4457600080fd5b505afa158015613c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613c7c9190810190614bf3565b6040516366a9e84760e11b81529093506001600160a01b0385169063cd53d08e90613cab908e906004016159f4565b60206040518083038186803b158015613cc357600080fd5b505afa158015613cd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613cfb91908101906148a3565b915050612710868302045b600054600a5461271061ffff600160a01b840481168b0282900493600160c01b810482168c0283900493600160b01b9091049091168b029190910490848b038490038390038290039033908e906001600160a01b03908116908f16613e5a578b15613d8b578d341015613d8b5760405162461bcd60e51b81526004016107939061590c565b8c613dc8576040516001600160a01b038a169089156108fc02908a906000818181858888f19350505050158015613dc6573d6000803e3d6000fd5b505b6040516001600160a01b0383169085156108fc029086906000818181858888f19350505050158015613dfe573d6000803e3d6000fd5b50806001600160a01b031663d0e30db08789016040518263ffffffff1660e01b81526004016000604051808303818588803b158015613e3c57600080fd5b505af1158015613e50573d6000803e3d6000fd5b50505050506141a2565b8e8c1561409757604051636eb1769f60e11b81528f906001600160a01b0383169063dd62ed3e90613e919088903090600401615660565b60206040518083038186803b158015613ea957600080fd5b505afa158015613ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613ee19190810190614bf3565b1015613eff5760405162461bcd60e51b81526004016107939061589c565b6040516323b872dd60e01b81526001600160a01b038216906323b872dd90613f3390879030908b8e018d01906004016156df565b602060405180830381600087803b158015613f4d57600080fd5b505af1158015613f61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613f859190810190614ade565b508d61400f576040516323b872dd60e01b81526001600160a01b038216906323b872dd90613fbb9087908e908e90600401615682565b602060405180830381600087803b158015613fd557600080fd5b505af1158015613fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061400d9190810190614ade565b505b6040516323b872dd60e01b81526001600160a01b038216906323b872dd9061403f90879087908a90600401615682565b602060405180830381600087803b15801561405957600080fd5b505af115801561406d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506140919190810190614ade565b506141a0565b8d61411e5760405163a9059cbb60e01b81526001600160a01b0382169063a9059cbb906140ca908d908d906004016156fa565b602060405180830381600087803b1580156140e457600080fd5b505af11580156140f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061411c9190810190614ade565b505b60405163a9059cbb60e01b81526001600160a01b0382169063a9059cbb9061414c90869089906004016156fa565b602060405180830381600087803b15801561416657600080fd5b505af115801561417a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061419e9190810190614ade565b505b505b6001600160a01b038f1615806141de5750600a60009054906101000a90046001600160a01b03166001600160a01b03168f6001600160a01b0316145b156143c95786156142d657600b5460405163095ea7b360e01b81526001600160a01b038381169263095ea7b39261421d92909116908b906004016157e1565b602060405180830381600087803b15801561423757600080fd5b505af115801561424b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061426f9190810190614ade565b50600b5460405163e7c928b160e01b81526001600160a01b0390911690819063e7c928b1906142a2908b906004016159f4565b600060405180830381600087803b1580156142bc57600080fd5b505af11580156142d0573d6000803e3d6000fd5b50505050505b85156143c957600c5460405163095ea7b360e01b81526001600160a01b038381169263095ea7b39261431092909116908a906004016157e1565b602060405180830381600087803b15801561432a57600080fd5b505af115801561433e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506143629190810190614ade565b50600c5460405163e7c928b160e01b81526001600160a01b0390911690819063e7c928b190614395908a906004016159f4565b600060405180830381600087803b1580156143af57600080fd5b505af11580156143c3573d6000803e3d6000fd5b50505050505b5050506001600160a01b03909b166000908152600d602052604090208054919093019091010190555050505050505050505050565b81546001101561447f5760005b825481101561447957816001600160a01b031683600001828154811061442d57fe5b6000918252602090912001546001600160a01b031614156144715782600001818154811061445757fe5b600091825260209091200180546001600160a01b03191690555b60010161440b565b50613272565b6000610989838261461a565b6000808080805b865481101561451b5785600001516001600160a01b03168760000182815481106144b857fe5b60009182526020909120600290910201546001600160a01b0316148015614502575085602001518760000182815481106144ee57fe5b906000526020600020906002020160010154145b15614513578092506001915061451b565b600101614492565b5090925090505b9250929050565b60405180610140016040528060006001600160a01b031681526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600015158152602001600081526020016000815260200160006001600160a01b031681525090565b604080518082019091526000808252602082015290565b6040518060200160405280606081525090565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b8154818355818111156109895760008381526020902061098991810190830161208491905b80821115614653576000815560010161463f565b5090565b8035610c9781615b73565b8051610c9781615b73565b60008083601f84011261467f57600080fd5b50813567ffffffffffffffff81111561469757600080fd5b6020830191508361010082028301111561452257600080fd5b60008083601f8401126146c257600080fd5b50813567ffffffffffffffff8111156146da57600080fd5b60208301915083604082028301111561452257600080fd5b8035610c9781615b8a565b8051610c9781615b8a565b600082601f83011261471957600080fd5b813561472c61472782615ad3565b615aac565b9150808252602083016020830185838301111561474857600080fd5b614753838284615b67565b50505092915050565b6000610100828403121561476f57600080fd5b61477a610100615aac565b90506000614788848461486f565b82525060206147998484830161486f565b60208301525060406147ad8482850161486f565b60408301525060606147c18482850161486f565b60608301525060806147d58482850161486f565b60808301525060a06147e98482850161486f565b60a08301525060c06147fd84828501614657565b60c08301525060e061481184828501614657565b60e08301525092915050565b60006040828403121561482f57600080fd5b6148396040615aac565b90506000614847848461486f565b825250602061485884848301614657565b60208301525092915050565b8035610c9781615b93565b8035610c9781615b9c565b8051610c9781615b9c565b60006020828403121561489757600080fd5b60006109978484614657565b6000602082840312156148b557600080fd5b60006109978484614662565b600080604083850312156148d457600080fd5b60006148e08585614657565b92505060206148f185828601614657565b9150509250929050565b600080600080600060a0868803121561491357600080fd5b600061491f8888614657565b955050602061493088828901614657565b945050604061494188828901614864565b935050606061495288828901614864565b925050608061496388828901614864565b9150509295509295909350565b6000806000806080858703121561498657600080fd5b60006149928787614657565b94505060206149a387828801614657565b93505060406149b48782880161486f565b925050606085013567ffffffffffffffff8111156149d157600080fd5b6149dd87828801614708565b91505092959194509250565b600080604083850312156149fc57600080fd5b6000614a088585614657565b92505060206148f18582860161486f565b600080600060608486031215614a2e57600080fd5b6000614a3a8686614657565b9350506020614a4b8682870161486f565b9250506040614a5c86828701614657565b9150509250925092565b60008060208385031215614a7957600080fd5b823567ffffffffffffffff811115614a9057600080fd5b614a9c8582860161466d565b92509250509250929050565b60008060208385031215614abb57600080fd5b823567ffffffffffffffff811115614ad257600080fd5b614a9c858286016146b0565b600060208284031215614af057600080fd5b600061099784846146fd565b60006101008284031215614b0f57600080fd5b6000610997848461475c565b600060408284031215614b2d57600080fd5b6000610997848461481d565b600080600080600080600060e0888a031215614b5457600080fd5b6000614b608a8a614864565b9750506020614b718a828b01614864565b9650506040614b828a828b01614864565b9550506060614b938a828b0161486f565b9450506080614ba48a828b01614657565b93505060a0614bb58a828b01614657565b92505060c0614bc68a828b01614657565b91505092959891949750929550565b600060208284031215614be757600080fd5b6000610997848461486f565b600060208284031215614c0557600080fd5b6000610997848461487a565b60008060408385031215614c2457600080fd5b60006148e0858561486f565b60008060008060808587031215614c4657600080fd5b6000614c52878761486f565b9450506020614c6387828801614657565b9350506040614c7487828801614657565b92505060606149dd878288016146f2565b60008060008060808587031215614c9b57600080fd5b6000614ca7878761486f565b9450506020614cb887828801614657565b9350506040614cc987828801614657565b92505060606149dd8782880161486f565b600080600060608486031215614cef57600080fd5b6000614cfb868661486f565b9350506020614d0c86828701614657565b9250506040614a5c868287016146f2565b600080600060608486031215614d3257600080fd5b6000614d3e868661486f565b9350506020614d4f86828701614657565b9250506040614a5c8682870161486f565b60008060008060808587031215614d7657600080fd5b6000614d82878761486f565b9450506020614d9387828801614657565b9350506040614da48782880161486f565b92505060606149dd87828801614657565b600080600080600080600080610100898b031215614dd257600080fd5b6000614dde8b8b61486f565b9850506020614def8b828c0161486f565b9750506040614e008b828c0161486f565b9650506060614e118b828c0161486f565b9550506080614e228b828c0161486f565b94505060a0614e338b828c0161486f565b93505060c0614e448b828c01614657565b92505060e0614e558b828c01614657565b9150509295985092959890939650565b6000614e718383614e9c565b505060200190565b6000614e8583836155f7565b505060400190565b614e9681615b56565b82525050565b614e9681615b0e565b6000614eb082615b01565b614eba8185615b05565b9350614ec583615afb565b8060005b83811015614ef3578151614edd8882614e65565b9750614ee883615afb565b925050600101614ec9565b509495945050505050565b6000614f0982615b01565b614f138185615b05565b9350614f1e83615afb565b8060005b83811015614ef3578151614f368882614e79565b9750614f4183615afb565b925050600101614f22565b614e9681615b19565b614e9681615b1e565b6000614f6b602283615b05565b7f616d6f756e74206973206e6f74206c65737320207468616e206d73672076616c815261756560f01b602082015260400192915050565b6000614faf603383615b05565b7f596f75206d757374206265206f776e657220616e6420546f6b656e2073686f7581527f6c64206e6f74206861766520616e792062696400000000000000000000000000602082015260400192915050565b600061500e601c83615b05565b7f496e73756666696369656e742062696464696e6720616d6f756e742e00000000815260200192915050565b6000615047603183615b05565b7f596f75206d757374206265206f666665726572206f72206f776e657220746f2081527f72656d6f766520746865206f666665722e000000000000000000000000000000602082015260400192915050565b60006150a6601183615b05565b7f41756374696f6e204e6f74204f76657221000000000000000000000000000000815260200192915050565b60006150df601383615b05565b7f466f7220666c61742073616c65206f6e6c792100000000000000000000000000815260200192915050565b6000615118602f83615b05565b7f416c6c6f77616e6365206973206c657373207468616e20616d6f756e7420736581527f6e7420666f722062696464696e672e0000000000000000000000000000000000602082015260400192915050565b6000615177602683615b05565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181527f6464726573730000000000000000000000000000000000000000000000000000602082015260400192915050565b60006151d6601d83615b05565b7f496e73756666696369656e74207370656e7420616c6c6f77616e636520000000815260200192915050565b600061520f600f83615b05565b7f41646472657373206973205a65726f0000000000000000000000000000000000815260200192915050565b6000615248601b83615b05565b7f56616c75652073656e74206c657373207468616e20616d6f756e740000000000815260200192915050565b6000615281602383615b05565b7f54686973206572633230746f6b656e207061796d656e74206e6f7420616c6c6f8152621dd95960ea1b602082015260400192915050565b60006152c6601283615b05565b7f546f6b656e204e6f7420466f722053616c650000000000000000000000000000815260200192915050565b60006152ff601383615b05565b7f42726f6b6572204e6f7420617070726f76656400000000000000000000000000815260200192915050565b6000615338601c83615b05565b7f54686973204e465420697320616c7265616479206f6e2073616c652e00000000815260200192915050565b6000615371601483615b05565b7f496e73756666696369656e74205061796d656e74000000000000000000000000815260200192915050565b60006153aa601b83615b05565b7f73686f756c642062652067726561746572207468616e207a65726f0000000000815260200192915050565b60006153e3602083615b05565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b600061541c601283615b05565b7f41756374696f6e2054696d65204f766572210000000000000000000000000000815260200192915050565b6000615455602483615b05565b7f73656c65637465642063616e64696461746520616d6f756e74206e6f74206d6181526303a31b4160e51b602082015260400192915050565b600061549b601883615b05565b7f41756374696f6e204e6f74205374617274656420796574210000000000000000815260200192915050565b60006154d4601683615b05565b7f204f6666657220646f65736e27742065786973742e2000000000000000000000815260200192915050565b600061550d603283615b05565b7f436c6f73696e672074696d652073686f756c642062652067726561746572207481527f68616e207374617274696e672074696d65210000000000000000000000000000602082015260400192915050565b600061556c602e83615b05565b7f43616e206e6f74206d616b6520616e206f66666572206f6e20616e20696e636f81527f6d706c6574652061756374696f6e000000000000000000000000000000000000602082015260400192915050565b60006155cb601183615b05565b7f4552433230206e6f7420616c6c6f776564000000000000000000000000000000815260200192915050565b805160408301906156088482614e9c565b506020820151610d4f6020850182615649565b9052565b80516020808452600091908401906156378282614ea5565b95945050505050565b614e9681615b43565b614e9681612084565b60208101610c978284614e9c565b6040810161566e8285614e8d565b61567b6020830184614e9c565b9392505050565b606081016156908286614e8d565b61569d6020830185614e8d565b6109976040830184615649565b608081016156b88287614e8d565b6156c56020830186614e8d565b6156d26040830185615649565b6156376060830184614e9c565b606081016156ed8286614e8d565b61569d6020830185614e9c565b604081016157088285614e8d565b61567b6020830184615649565b6101408101615724828d614e9c565b615731602083018c615649565b61573e604083018b614e9c565b61574b606083018a615649565b6157586080830189615649565b61576560a0830188615649565b61577260c0830187614f4c565b61577f60e0830186615649565b61578d610100830185615649565b61579b610120830184614e9c565b9b9a5050505050505050505050565b608081016157b88287614e8d565b6156c56020830186615649565b606081016156908286614e9c565b606081016156ed8286614e9c565b604081016157088285614e9c565b6020808252810161567b8184614efe565b60208101610c978284614f4c565b60208101610c978284614f55565b60208082528101610c9781614f5e565b60208082528101610c9781614fa2565b60208082528101610c9781615001565b60208082528101610c978161503a565b60208082528101610c9781615099565b60208082528101610c97816150d2565b60208082528101610c978161510b565b60208082528101610c978161516a565b60208082528101610c97816151c9565b60208082528101610c9781615202565b60208082528101610c978161523b565b60208082528101610c9781615274565b60208082528101610c97816152b9565b60208082528101610c97816152f2565b60208082528101610c978161532b565b60208082528101610c9781615364565b60208082528101610c978161539d565b60208082528101610c97816153d6565b60208082528101610c978161540f565b60208082528101610c9781615448565b60208082528101610c978161548e565b60208082528101610c97816154c7565b60208082528101610c9781615500565b60208082528101610c978161555f565b60208082528101610c97816155be565b606081016159ba828561561b565b61567b60208301846155f7565b6020808252810161567b818461561f565b6040810161566e828561561b565b60208101610c978284615640565b60208101610c978284615649565b6040810161566e8285615649565b608081016157b88287615649565b60a08101615a2c8288615649565b615a396020830187615649565b615a466040830186615649565b615a536060830185614e9c565b615a606080830184614f4c565b9695505050505050565b60a08101615a788288615649565b615a856020830187615649565b615a926040830186615649565b615a9f6060830185615649565b615a606080830184614e9c565b60405181810167ffffffffffffffff81118282101715615acb57600080fd5b604052919050565b600067ffffffffffffffff821115615aea57600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b6000610c9782615b4a565b151590565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b61ffff1690565b6001600160a01b031690565b6000610c97826000610c9782615b0e565b82818337506000910152565b615b7c81615b0e565b8114615b8757600080fd5b50565b615b7c81615b19565b615b7c81615b43565b615b7c8161208456fea365627a7a72315820a6d3274aa9a9a8830400220ecf38acd9853a2327a0871601fa7cdcd0f1f40df66c6578706572696d656e74616cf564736f6c63430005110040000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000258000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000c0fde5fc14b5e841ed1aaa92c66446dba2fa71e3000000000000000000000000fa1bdf7da5a89886f394a463e21b7e877be81600

Deployed Bytecode

0x6080604052600436106102bb5760003560e01c80637f4948521161016e578063d4739cca116100cb578063f2fde38b1161007f578063f5a0c9b811610064578063f5a0c9b81461071a578063f7f174881461073a578063ff8edbdb1461074f576102bb565b8063f2fde38b146106da578063f4f3b200146106fa576102bb565b8063efb7027b116100b0578063efb7027b14610677578063f09856f314610697578063f26f8494146106c5576102bb565b8063d4739cca14610637578063e467682d14610657576102bb565b8063c0f4ed3111610122578063c52ea52e11610107578063c52ea52e146105eb578063d2abc5171461060d578063d3c9080a14610622576102bb565b8063c0f4ed31146105b8578063c1a8bdbc146105cb576102bb565b80638c6ab013116101535780638c6ab0131461056e5780638da5cb5b1461058e5780638f32d59b146105a3576102bb565b80637f494852146105445780638bae5f4f14610559576102bb565b80633ccfd60b1161021c578063640cf873116101d05780636d036535116101b55780636d036535146104e25780636eafbe10146105045780637ad157b914610531576102bb565b8063640cf873146104a057806365e4e1c0146104c0576102bb565b806344f91c1e1161020157806344f91c1e1461044257806345ce7db9146104785780635aa8680a1461048d576102bb565b80633ccfd60b1461040d5780633e54d3a214610422576102bb565b80631a07b081116102735780633169b515116102585780633169b515146103ba578063398ef17f146103cd5780633b58524d146103ed576102bb565b80631a07b0811461036d5780631f90607a1461039a576102bb565b8063136a6a24116102a4578063136a6a241461030d578063150b7a0214610320578063179443f31461034d576102bb565b806305ac943e146102c05780630af88b24146102e2575b600080fd5b3480156102cc57600080fd5b506102e06102db366004614885565b61076f565b005b3480156102ee57600080fd5b506102f7610809565b6040516103049190615652565b60405180910390f35b6102e061031b366004614a19565b610818565b34801561032c57600080fd5b5061034061033b366004614970565b61098e565b604051610304919061580e565b34801561035957600080fd5b506102e0610368366004614c11565b61099f565b34801561037957600080fd5b5061038d6103883660046149e9565b610c6f565b6040516103049190615800565b3480156103a657600080fd5b506102e06103b53660046149e9565b610c9d565b6102e06103c8366004614c85565b610d55565b3480156103d957600080fd5b506102e06103e8366004614b39565b611078565b3480156103f957600080fd5b506102e06104083660046148c1565b6111bf565b34801561041957600080fd5b506102e0611211565b34801561042e57600080fd5b506102e061043d366004614aa8565b6112bb565b34801561044e57600080fd5b5061046261045d3660046149e9565b61130d565b6040516103049a99989796959493929190615715565b34801561048457600080fd5b506102f761137a565b6102e061049b366004614c30565b611389565b3480156104ac57600080fd5b506102e06104bb366004614db5565b61181b565b3480156104cc57600080fd5b506104d561200e565b60405161030491906157ef565b3480156104ee57600080fd5b506104f7612087565b60405161030491906159c7565b34801561051057600080fd5b5061052461051f366004614885565b6120f8565b60405161030491906159f4565b6102e061053f366004614cda565b61210a565b34801561055057600080fd5b506105246124ec565b34801561056557600080fd5b506102f76124f2565b34801561057a57600080fd5b506102e0610589366004614cda565b612501565b34801561059a57600080fd5b506102f76128fc565b3480156105af57600080fd5b5061038d61290b565b6102e06105c6366004614d1d565b61291c565b3480156105d757600080fd5b506102e06105e63660046148fb565b612fc8565b3480156105f757600080fd5b506106006130ea565b60405161030491906159e6565b34801561061957600080fd5b506106006130fb565b34801561062e57600080fd5b506104d561310c565b34801561064357600080fd5b506104d5610652366004614885565b613175565b34801561066357600080fd5b506102e0610672366004614885565b613200565b34801561068357600080fd5b506102e0610692366004614a66565b613276565b3480156106a357600080fd5b506106b76106b2366004614a19565b6132e7565b6040516103049291906157e1565b3480156106d157600080fd5b5061060061331d565b3480156106e657600080fd5b506102e06106f5366004614885565b61332e565b34801561070657600080fd5b506102e0610715366004614885565b61339a565b34801561072657600080fd5b506102e0610735366004614bd5565b613497565b34801561074657600080fd5b506104d56134c0565b34801561075b57600080fd5b506102e061076a366004614d60565b613529565b61077761290b565b61079c5760405162461bcd60e51b81526004016107939061592c565b60405180910390fd5b60405163581455e960e01b815273b5803c83f862c81a6a20f6008976633b6a35f22b9063581455e9906107d69060099085906004016159d8565b60006040518083038186803b1580156107ee57600080fd5b505af4158015610802573d6000803e3d6000fd5b5050505050565b600a546001600160a01b031681565b6001600160a01b03838116600090815260066020908152604080832086845282528083208585168452909152902054163314806108d957506040516331a9108f60e11b815233906001600160a01b03851690636352211e9061087e9086906004016159f4565b60206040518083038186803b15801561089657600080fd5b505afa1580156108aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108ce91908101906148a3565b6001600160a01b0316145b6108f55760405162461bcd60e51b81526004016107939061584c565b6001600160a01b0380841660009081526006602090815260408083208684528252808320938516835292905220600101541580159061096257506001600160a01b038381166000908152600660209081526040808320868452825280832085851684529091529020541615155b61097e5760405162461bcd60e51b81526004016107939061596c565b6109898383836138a2565b505050565b630a85bd0160e11b5b949350505050565b6040516331a9108f60e11b81528290829033906001600160a01b03831690636352211e906109d19086906004016159f4565b60206040518083038186803b1580156109e957600080fd5b505afa1580156109fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a2191908101906148a3565b6001600160a01b031614610a475760405162461bcd60e51b81526004016107939061582c565b610a4f614529565b506001600160a01b03808416600090815260076020818152604080842089855282529283902083516101408101855281548616815260018201549281019290925260028101548516938201939093526003830154606082015260048301546080820152600583015460a0820152600683015460ff16151560c08201529082015460e08201526008820154610100820152600990910154909116610120820152610af6614599565b506040805180820182526001600160a01b03861680825260208083018990526000828152600282528481208a8252909152839020805460ff191690556101208401519251919233928992917fc2faf9d94bb8992d1eda56db8f2aefeb7cd52ed54e8bdfdd439d361132f59e2091610b6e914291615a02565b60405180910390a4610b8760088263ffffffff613a7c16565b50336000908152600360205260409020610ba7908263ffffffff613a7c16565b50816060015160011415610bcc57610bc660048263ffffffff613a7c16565b50610bec565b816060015160021415610bec57610bea60058263ffffffff613a7c16565b505b505050506001600160a01b0316600090815260076020818152604080842094845293905291812080546001600160a01b03199081168255600182018390556002820180548216905560038201839055600482018390556005820183905560068201805460ff19169055928101829055600881019190915560090180549091169055565b6001600160a01b038216600090815260026020908152604080832084845290915290205460ff165b92915050565b6040516331a9108f60e11b81528190839033906001600160a01b03831690636352211e90610ccf9086906004016159f4565b60206040518083038186803b158015610ce757600080fd5b505afa158015610cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d1f91908101906148a3565b6001600160a01b031614610d455760405162461bcd60e51b81526004016107939061582c565b610d4f8484613b55565b50505050565b816001600160a01b03811615610d9257610d7660098263ffffffff613b9916565b610d925760405162461bcd60e51b81526004016107939061599c565b6001600160a01b038416600090815260076020908152604080832088845290915290206003015460021415610e39576001600160a01b038416600090815260076020908152604080832088845290915290206008015442108015610e1d57506001600160a01b038416600090815260076020908152604080832088845290915290206006015460ff16155b610e395760405162461bcd60e51b81526004016107939061598c565b6001600160a01b038085166000908152600660209081526040808320898452825280832093871683529290522060010154821015610e895760405162461bcd60e51b81526004016107939061581c565b610e948486856138a2565b6001600160a01b038316610ec75781341015610ec25760405162461bcd60e51b8152600401610793906158bc565b610fec565b604051636eb1769f60e11b8152839083906001600160a01b0383169063dd62ed3e90610ef99033903090600401615660565b60206040518083038186803b158015610f1157600080fd5b505afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f499190810190614bf3565b1015610f675760405162461bcd60e51b81526004016107939061589c565b6040516323b872dd60e01b81526001600160a01b038216906323b872dd90610f97903390309088906004016156df565b602060405180830381600087803b158015610fb157600080fd5b505af1158015610fc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fe99190810190614ade565b50505b6001600160a01b0384811660008181526006602090815260408083208a84528252808320948816835293905282902080546001600160a01b031916339081178255600190910185905591518791907f06321e89bf5f7245b1a2aaf538585dcedb3e3bcda42c59db5c3c437bb51e3f0f9061106990889088906157e1565b60405180910390a45050505050565b61108061290b565b61109c5760405162461bcd60e51b81526004016107939061592c565b6001600160a01b038216158015906110bc57506001600160a01b03811615155b6110d85760405162461bcd60e51b8152600401610793906158ac565b6103e88761ffff16111580156110f457506103e88661ffff1611155b801561110657506103e88561ffff1611155b6111225760405162461bcd60e51b81526004016107939061591c565b6000805461ffff888116600160b01b0261ffff60b01b19918b16600160a01b0261ffff60a01b19909316929092171617905561115d84613497565b600a80546001600160a01b039485166001600160a01b031991821617909155600b805493851693821693909317909255600c8054919093169116179055506000805461ffff909216600160c01b0261ffff60c01b199092169190911790555050565b6111c761290b565b6111e35760405162461bcd60e51b81526004016107939061592c565b600a80546001600160a01b039384166001600160a01b031991821617909155600b8054929093169116179055565b61121961290b565b6112355760405162461bcd60e51b81526004016107939061592c565b6000808052600d6020527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee54604051339282156108fc02929190818181858888f1935050505015801561128c573d6000803e3d6000fd5b506000808052600d6020527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee55565b60005b81811015610989576112ce614599565b8383838181106112da57fe5b9050604002018036036112f09190810190614b1b565b90506113048160000151826020015161099f565b506001016112be565b6007602081815260009384526040808520909152918352912080546001820154600283015460038401546004850154600586015460068701549787015460088801546009909801546001600160a01b039788169996989588169794969395929460ff90941693919291168a565b600b546001600160a01b031681565b6001600160a01b038316600090815260076020908152604080832087845290915290206003015484908490600214156113d45760405162461bcd60e51b81526004016107939061586c565b6040516331a9108f60e11b81528690869033906001600160a01b03831690636352211e906114069086906004016159f4565b60206040518083038186803b15801561141e57600080fd5b505afa158015611432573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061145691908101906148a3565b6001600160a01b03161461147c5760405162461bcd60e51b81526004016107939061582c565b856001600160a01b038116156114b95761149d60098263ffffffff613b9916565b6114b95760405162461bcd60e51b81526004016107939061599c565b6114c1614599565b506001600160a01b0380891660009081526006602090815260408083208d845282528083208b851684528252918290208251808401909352805490931680835260019093015490820152906115285760405162461bcd60e51b81526004016107939061594c565b60008990506115418b8b338c86602001518d6000613bf6565b6000600260008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008d815260200190815260200160002060006101000a81548160ff021916908315150217905550806001600160a01b03166342842e0e826001600160a01b0316636352211e8e6040518263ffffffff1660e01b81526004016115cb91906159f4565b60206040518083038186803b1580156115e357600080fd5b505afa1580156115f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061161b91908101906148a3565b84600001518e6040518463ffffffff1660e01b815260040161163f939291906157d3565b600060405180830381600087803b15801561165957600080fd5b505af115801561166d573d6000803e3d6000fd5b5050505081600001516001600160a01b0316336001600160a01b03168b6001600160a01b03167fa2ab0454b724b203a92ee88de73837b4e8fb3a36b43d7c22c7d52ee55011340f8e8660200151428f60016040516116cf959493929190615a1e565b60405180910390a46001600160a01b03808b1660009081526006602090815260408083208f84528252808320938d16835292905290812080546001600160a01b0319168155600101556117228a8c613b55565b61172a614599565b50604080518082019091526001600160a01b038b168152602081018c905261175960088263ffffffff613a7c16565b50336000908152600360205260409020611779908263ffffffff613a7c16565b5061178b60048263ffffffff613a7c16565b5080516001600160a01b0316600090815260076020818152604080842094820151845293905291812080546001600160a01b03199081168255600182018390556002820180548216905560038201839055600482018390556005820183905560068201805460ff191690559281018290556008810191909155600901805490911690555050505050505050505050565b806001600160a01b038116156118585761183c60098263ffffffff613b9916565b6118585760405162461bcd60e51b81526004016107939061599c565b6040516331a9108f60e11b81528990849033906001600160a01b03831690636352211e9061188a9086906004016159f4565b60206040518083038186803b1580156118a257600080fd5b505afa1580156118b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118da91908101906148a3565b6001600160a01b0316146119005760405162461bcd60e51b81526004016107939061582c565b84611909614529565b60076000886001600160a01b03166001600160a01b0316815260200190815260200160002060008e8152602001908152602001600020604051806101400160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600182015481526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff1615151515815260200160078201548152602001600882015481526020016009820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681525050905060026000886001600160a01b03166001600160a01b0316815260200190815260200160002060008e815260200190815260200160002060009054906101000a900460ff161515600115151415611ac35780606001516002148015611a97575060c0810151155b8015611aa7575080610100015142115b611ac35760405162461bcd60e51b8152600401610793906158fc565b611acb614599565b6040518060400160405280896001600160a01b031681526020018f8152509050611af3614529565b604051806101400160405280336001600160a01b031681526020018f815260200160006001600160a01b031681526020018e81526020018f81526020018d81526020016000151581526020018c81526020018b8152602001896001600160a01b03168152509050836001600160a01b031663e985e9c533306040518363ffffffff1660e01b8152600401611b88929190615660565b60206040518083038186803b158015611ba057600080fd5b505afa158015611bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611bd89190810190614ade565b80611c6a5750602082015160405163020604bf60e21b815230916001600160a01b0387169163081812fc91611c0f916004016159f4565b60206040518083038186803b158015611c2757600080fd5b505afa158015611c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c5f91908101906148a3565b6001600160a01b0316145b611c865760405162461bcd60e51b8152600401610793906158ec565b8a8a11611ca55760405162461bcd60e51b81526004016107939061597c565b81516001600160a01b03908116600090815260076020818152604080842082880180518652908352818520875181546001600160a01b031990811691891691909117825588850151600183015588840151600280840180548416928b169290921790915560608a0151600384015560808a0151600484015560a08a0151600584015560c08a015160068401805460ff191691151591909117905560e08a015196830196909655610100890151600883015561012089015160099092018054909116918816919091179055875190951684529181528183209351835292909252205460ff16611f8c5781516001600160a01b0316600090815260026020908152604080832082860151845290915290819020805460ff191660011790555163fd7c9a1560e01b815273cfdabef2efe8b0f8adc6e321cdeaeba4b0bf61e89063fd7c9a1590611df99060089086906004016159ac565b60006040518083038186803b158015611e1157600080fd5b505af4158015611e25573d6000803e3d6000fd5b50503360009081526003602052604090819020905163fd7c9a1560e01b815273cfdabef2efe8b0f8adc6e321cdeaeba4b0bf61e8935063fd7c9a159250611e71919086906004016159ac565b60006040518083038186803b158015611e8957600080fd5b505af4158015611e9d573d6000803e3d6000fd5b505050508c60011415611f185760405163fd7c9a1560e01b815273cfdabef2efe8b0f8adc6e321cdeaeba4b0bf61e89063fd7c9a1590611ee390600490869082016159ac565b60006040518083038186803b158015611efb57600080fd5b505af4158015611f0f573d6000803e3d6000fd5b50505050611f8c565b8c60021415611f8c5760405163fd7c9a1560e01b815273cfdabef2efe8b0f8adc6e321cdeaeba4b0bf61e89063fd7c9a1590611f5b9060059086906004016159ac565b60006040518083038186803b158015611f7357600080fd5b505af4158015611f87573d6000803e3d6000fd5b505050505b6020820151825160608301513392916001600160a01b0316907fab6ed0d1a912b3de36cc5b4c42eb3b65a1baa1321ec3a4be61d51708ec37c8cb9060018114611fd9578560800151611fdf565b8560a001515b610120870151604051611ff59392914291615a10565b60405180910390a4505050505050505050505050505050565b60606008600001805480602002602001604051908101604052809291908181526020016000905b8282101561207d576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101612035565b5050505090505b90565b61208f6145b0565b604080516009805460208181028401850185528301818152929391928492909184918401828280156120ea57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116120cc575b505050505081525050905090565b600d6020526000908152604090205481565b6001600160a01b03821660009081526002602090815260408083208684529091529020548390839060ff1615156001146121565760405162461bcd60e51b8152600401610793906158dc565b6001600160a01b038416600090815260076020908152604080832088845290915290206003015485908590600214156121a15760405162461bcd60e51b81526004016107939061586c565b856121aa614529565b506001600160a01b0380881660009081526007602081815260408084208d855282529283902083516101408101855281548616815260018201549281019290925260028101548516938201939093526003830154606082015260048301546080820152600583015460a0820152600683015460ff16151560c08201529082015460e08201526008820154610100820152600990910154909116610120820152612251614599565b50604080518082019091526001600160a01b0389168152602081018a9052815161012083015160a084015161228e918d918d9185918e6001613bf6565b81516001600160a01b03908116600090815260026020908152604080832082870180518552925291829020805460ff191690555190516331a9108f60e11b8152918616916342842e0e918391636352211e916122ec916004016159f4565b60206040518083038186803b15801561230457600080fd5b505afa158015612318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061233c91908101906148a3565b3385602001516040518463ffffffff1660e01b8152600401612360939291906157c5565b600060405180830381600087803b15801561237a57600080fd5b505af115801561238e573d6000803e3d6000fd5b50505050336001600160a01b0316816001600160a01b031683600001516001600160a01b03167fa2ab0454b724b203a92ee88de73837b4e8fb3a36b43d7c22c7d52ee55011340f85602001518760a001514289610120015160006040516123f9959493929190615a1e565b60405180910390a461241260088363ffffffff613a7c16565b506001600160a01b038116600090815260036020526040902061243b908363ffffffff613a7c16565b5061244d60048363ffffffff613a7c16565b5081516001600160a01b03166000908152600760208181526040808420828701805186529252832080546001600160a01b03199081168255600182018590556002820180548216905560038201859055600482018590556005820185905560068201805460ff191690559281018490556008810193909355600990920180549091169055825190516124df9190613b55565b5050505050505050505050565b60015481565b600c546001600160a01b031681565b8161250a614529565b506001600160a01b03808416600090815260076020818152604080842089855282529283902083516101408101855281548616815260018201549281019290925260028101548516938201939093526003830154606082015260048301546080820152600583015460a0820152600683015460ff16151560c08201529082015460e082015260088201546101008201526009909101549091166101208201526125b1614599565b6040518060400160405280866001600160a01b03168152602001878152509050816101000151421180156125e9575081606001516002145b6126055760405162461bcd60e51b81526004016107939061585c565b60c08201511515600114156128f45781516101208301516020840151612633918991899185918a6000613bf6565b8661263c614529565b506040516331a9108f60e11b815284906001600160a01b038716906342842e0e908290636352211e906126739087906004016159f4565b60206040518083038186803b15801561268b57600080fd5b505afa15801561269f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126c391908101906148a3565b8360400151856040518463ffffffff1660e01b81526004016126e7939291906157c5565b600060405180830381600087803b15801561270157600080fd5b505af1158015612715573d6000803e3d6000fd5b5050505080604001516001600160a01b0316836001600160a01b031685600001516001600160a01b03167fa2ab0454b724b203a92ee88de73837b4e8fb3a36b43d7c22c7d52ee55011340f87602001518560200151428761012001516000604051612784959493929190615a1e565b60405180910390a46127968883613b55565b5050806001600160a01b0316826020015183600001516001600160a01b03167ffea08bb1b0c126c4d14cec1f22705e26528a9385b48fd32837d4432137c39e9e866040015133428961012001516040516127f394939291906156aa565b60405180910390a46001600160a01b03861660009081526002602090815260408083208a84529091529020805460ff1916905561283760088363ffffffff613a7c16565b506001600160a01b0381166000908152600360205260409020612860908363ffffffff613a7c16565b5061287260058363ffffffff613a7c16565b50506001600160a01b03851660009081526007602081815260408084208a8552909152822080546001600160a01b03199081168255600182018490556002820180548216905560038201849055600482018490556005820184905560068201805460ff1916905591810183905560088101929092556009909101805490911690555b505050505050565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6001600160a01b03821660009081526002602090815260408083208684529091529020548390839060ff1615156001146129685760405162461bcd60e51b8152600401610793906158dc565b6001600160a01b03841660009081526007602090815260408083208884529091529020600801548590859042106129b15760405162461bcd60e51b81526004016107939061593c565b6001600160a01b0381166000908152600760208181526040808420868552909152909120015442116129f55760405162461bcd60e51b81526004016107939061595c565b856129fe614529565b506001600160a01b0380881660009081526007602081815260408084208d855282529283902083516101408101855281548616815260018201549281019290925260028101548516938201939093526003830154606082015260048301546080820152600583015460a0820152600683015460ff16151560c08201529082015460e082015260088201546101008201526009909101549091166101208201819052612b1d5780602001513411612ac65760405162461bcd60e51b81526004016107939061583c565b60c0810151151560011415612b185780604001516001600160a01b03166108fc82602001519081150290604051600060405180830381858888f19350505050158015612b16573d6000803e3d6000fd5b505b612d02565b610120810151604051636eb1769f60e11b815288906001600160a01b0383169063dd62ed3e90612b539033903090600401615660565b60206040518083038186803b158015612b6b57600080fd5b505afa158015612b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ba39190810190614bf3565b1015612bc15760405162461bcd60e51b81526004016107939061587c565b81602001518811612be45760405162461bcd60e51b81526004016107939061583c565b6040516323b872dd60e01b81526001600160a01b038216906323b872dd90612c1490339030908d906004016156df565b602060405180830381600087803b158015612c2e57600080fd5b505af1158015612c42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c669190810190614ade565b5060c0820151151560011415612d0057806001600160a01b031663a9059cbb836040015184602001516040518363ffffffff1660e01b8152600401612cac9291906156fa565b602060405180830381600087803b158015612cc657600080fd5b505af1158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612cfe9190810190614ade565b505b505b6101208101516001600160a01b031615612d1c5786612d1e565b345b60208201526040516331a9108f60e11b81526001600160a01b038316906342842e0e908290636352211e90612d57908e906004016159f4565b60206040518083038186803b158015612d6f57600080fd5b505afa158015612d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612da791908101906148a3565b308c6040518463ffffffff1660e01b8152600401612dc7939291906157d3565b600060405180830381600087803b158015612de157600080fd5b505af1158015612df5573d6000803e3d6000fd5b5050505060018160c00190151590811515815250503381604001906001600160a01b031690816001600160a01b0316815250506001548161010001818151019150818152505080600760008a6001600160a01b03166001600160a01b0316815260200190815260200160002060008b815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e0820151816007015561010082015181600801556101208201518160090160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555090505080600001516001600160a01b031689896001600160a01b03167fc47f35ccd7c07e8a8a68419f2150e2a62c012eed08ade47b9d264d7a091275e08460400151856020015142876101200151604051612fb594939291906157aa565b60405180910390a4505050505050505050565b612fd061290b565b612fec5760405162461bcd60e51b81526004016107939061592c565b6001600160a01b0385161580159061300c57506001600160a01b03841615155b6130285760405162461bcd60e51b8152600401610793906158ac565b6103e88261ffff161115801561304457506103e88161ffff1611155b801561305657506103e88361ffff1611155b6130725760405162461bcd60e51b81526004016107939061591c565b6000805461ffff60a01b1916600160a01b61ffff948516021761ffff60b01b1916600160b01b928416929092029190911761ffff60c01b1916600160c01b9390921692909202179055600b80546001600160a01b03199081166001600160a01b0394851617909155600c805490911691909216179055565b600054600160a01b900461ffff1681565b600054600160c01b900461ffff1681565b6004805460408051602080840282018101909252828152606093909290916000908401821561207d576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101612035565b6001600160a01b0381166000908152600360209081526040808320805482518185028101850190935280835260609492939192909184015b828210156131f5576000848152602090819020604080518082019091526002850290910180546001600160a01b031682526001908101548284015290835290920191016131ad565b505050509050919050565b806001600160a01b0381161561323d5761322160098263ffffffff613b9916565b61323d5760405162461bcd60e51b81526004016107939061599c565b61324561290b565b6132615760405162461bcd60e51b81526004016107939061592c565b61327260098363ffffffff6143fe16565b5050565b60005b81811015610989576132896145c3565b83838381811061329557fe5b905061010002018036036132ac9190810190614afc565b90506132de816000015182602001518360400151846060015185608001518660a001518760c001518860e0015161181b565b50600101613279565b6006602090815260009384526040808520825292845282842090528252902080546001909101546001600160a01b039091169082565b600054600160b01b900461ffff1681565b61333661290b565b6133525760405162461bcd60e51b81526004016107939061592c565b6001600160a01b0381166133785760405162461bcd60e51b81526004016107939061588c565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6133a261290b565b6133be5760405162461bcd60e51b81526004016107939061592c565b6133cf60098263ffffffff613b9916565b6133eb5760405162461bcd60e51b8152600401610793906158cc565b6001600160a01b0381166000818152600d60205260409081902054905163a9059cbb60e01b815283929163a9059cbb916134299133916004016156fa565b602060405180830381600087803b15801561344357600080fd5b505af1158015613457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061347b9190810190614ade565b50506001600160a01b03166000908152600d6020526040812055565b61349f61290b565b6134bb5760405162461bcd60e51b81526004016107939061592c565b600155565b6005805460408051602080840282018101909252828152606093909290916000908401821561207d576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101612035565b6001600160a01b03831660009081526002602090815260408083208784529091529020548490849060ff1615156001146135755760405162461bcd60e51b8152600401610793906158dc565b826001600160a01b038116156135b25761359660098263ffffffff613b9916565b6135b25760405162461bcd60e51b81526004016107939061599c565b6040516331a9108f60e11b81528790879033906001600160a01b03831690636352211e906135e49086906004016159f4565b60206040518083038186803b1580156135fc57600080fd5b505afa158015613610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061363491908101906148a3565b6001600160a01b03161461365a5760405162461bcd60e51b81526004016107939061582c565b613662614529565b506001600160a01b0380891660009081526007602081815260408084208e855282529283902083516101408101855281548616815260018201549281019290925260028082015486169483019490945260038101546060830181905260048201546080840152600582015460a0840152600682015460ff16151560c08401529281015460e0830152600881015461010083015260090154909316610120840152141561372c57806101000151421061372c5760405162461bcd60e51b81526004016107939061593c565b80600001516001600160a01b03168a8a6001600160a01b03167f4a232d19b0abe3474b9311b6769fa4b4a725b50d0222b222357981b17a8e7e9784606001518560600151600114613781578560800151613787565b8560a001515b8d428861012001516040516137a0959493929190615a6a565b60405180910390a48060600151600114156137c15760a081018890526137d0565b60808101889052602081018890525b6001600160a01b03968716610120820190815298871660009081526007602081815260408084209d84529c8152918c9020835181546001600160a01b0319908116918c169190911782559284015160018201559b83015160028d0180548416918b16919091179055606083015160038d0155608083015160048d015560a083015160058d015560c083015160068d01805460ff191691151591909117905560e0830151908c01556101009091015160088b01559751600990990180549098169890951697909717909555505050505050565b6001600160a01b0380841660009081526006602090815260408083208684528252808320938516835292905220600101541580159061390f57506001600160a01b038381166000908152600660209081526040808320868452825280832085851684529091529020541615155b15610989576001600160a01b038116613988576001600160a01b03838116600090815260066020908152604080832086845282528083208585168452909152808220805460019091015491519316926108fc82150292818181858888f19350505050158015613982573d6000803e3d6000fd5b50613a39565b6001600160a01b03838116600090815260066020908152604080832086845282528083208585168085529252918290208054600190910154925163a9059cbb60e01b81528594929363a9059cbb936139e49316916004016157e1565b602060405180830381600087803b1580156139fe57600080fd5b505af1158015613a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613a369190810190614ade565b50505b6001600160a01b0392831660009081526006602090815260408083209483529381528382209290941681529252812080546001600160a01b031916815560010155565b60008080613a90858563ffffffff61448b16565b909250905060018115151415613b4a57845485906000198101908110613ab257fe5b9060005260206000209060020201856000018381548110613acf57fe5b60009182526020909120825460029092020180546001600160a01b0319166001600160a01b039092169190911781556001918201549101558454859080613b1257fe5b60008281526020812060026000199093019283020180546001600160a01b031916815560019081019190915591559250610c97915050565b506000949350505050565b60005b60095481101561098957613b91838360096000018481548110613b7757fe5b6000918252602090912001546001600160a01b03166138a2565b600101613b58565b6000805b8354811015613bec57826001600160a01b0316846000018281548110613bbf57fe5b6000918252602090912001546001600160a01b03161415613be4576001915050610c97565b600101613b9d565b5060009392505050565b856000808085613d065760405163b5004f0160e01b81526001600160a01b0385169063b5004f0190613c2c908e906004016159f4565b60206040518083038186803b158015613c4457600080fd5b505afa158015613c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613c7c9190810190614bf3565b6040516366a9e84760e11b81529093506001600160a01b0385169063cd53d08e90613cab908e906004016159f4565b60206040518083038186803b158015613cc357600080fd5b505afa158015613cd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613cfb91908101906148a3565b915050612710868302045b600054600a5461271061ffff600160a01b840481168b0282900493600160c01b810482168c0283900493600160b01b9091049091168b029190910490848b038490038390038290039033908e906001600160a01b03908116908f16613e5a578b15613d8b578d341015613d8b5760405162461bcd60e51b81526004016107939061590c565b8c613dc8576040516001600160a01b038a169089156108fc02908a906000818181858888f19350505050158015613dc6573d6000803e3d6000fd5b505b6040516001600160a01b0383169085156108fc029086906000818181858888f19350505050158015613dfe573d6000803e3d6000fd5b50806001600160a01b031663d0e30db08789016040518263ffffffff1660e01b81526004016000604051808303818588803b158015613e3c57600080fd5b505af1158015613e50573d6000803e3d6000fd5b50505050506141a2565b8e8c1561409757604051636eb1769f60e11b81528f906001600160a01b0383169063dd62ed3e90613e919088903090600401615660565b60206040518083038186803b158015613ea957600080fd5b505afa158015613ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613ee19190810190614bf3565b1015613eff5760405162461bcd60e51b81526004016107939061589c565b6040516323b872dd60e01b81526001600160a01b038216906323b872dd90613f3390879030908b8e018d01906004016156df565b602060405180830381600087803b158015613f4d57600080fd5b505af1158015613f61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613f859190810190614ade565b508d61400f576040516323b872dd60e01b81526001600160a01b038216906323b872dd90613fbb9087908e908e90600401615682565b602060405180830381600087803b158015613fd557600080fd5b505af1158015613fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061400d9190810190614ade565b505b6040516323b872dd60e01b81526001600160a01b038216906323b872dd9061403f90879087908a90600401615682565b602060405180830381600087803b15801561405957600080fd5b505af115801561406d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506140919190810190614ade565b506141a0565b8d61411e5760405163a9059cbb60e01b81526001600160a01b0382169063a9059cbb906140ca908d908d906004016156fa565b602060405180830381600087803b1580156140e457600080fd5b505af11580156140f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061411c9190810190614ade565b505b60405163a9059cbb60e01b81526001600160a01b0382169063a9059cbb9061414c90869089906004016156fa565b602060405180830381600087803b15801561416657600080fd5b505af115801561417a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061419e9190810190614ade565b505b505b6001600160a01b038f1615806141de5750600a60009054906101000a90046001600160a01b03166001600160a01b03168f6001600160a01b0316145b156143c95786156142d657600b5460405163095ea7b360e01b81526001600160a01b038381169263095ea7b39261421d92909116908b906004016157e1565b602060405180830381600087803b15801561423757600080fd5b505af115801561424b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061426f9190810190614ade565b50600b5460405163e7c928b160e01b81526001600160a01b0390911690819063e7c928b1906142a2908b906004016159f4565b600060405180830381600087803b1580156142bc57600080fd5b505af11580156142d0573d6000803e3d6000fd5b50505050505b85156143c957600c5460405163095ea7b360e01b81526001600160a01b038381169263095ea7b39261431092909116908a906004016157e1565b602060405180830381600087803b15801561432a57600080fd5b505af115801561433e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506143629190810190614ade565b50600c5460405163e7c928b160e01b81526001600160a01b0390911690819063e7c928b190614395908a906004016159f4565b600060405180830381600087803b1580156143af57600080fd5b505af11580156143c3573d6000803e3d6000fd5b50505050505b5050506001600160a01b03909b166000908152600d602052604090208054919093019091010190555050505050505050505050565b81546001101561447f5760005b825481101561447957816001600160a01b031683600001828154811061442d57fe5b6000918252602090912001546001600160a01b031614156144715782600001818154811061445757fe5b600091825260209091200180546001600160a01b03191690555b60010161440b565b50613272565b6000610989838261461a565b6000808080805b865481101561451b5785600001516001600160a01b03168760000182815481106144b857fe5b60009182526020909120600290910201546001600160a01b0316148015614502575085602001518760000182815481106144ee57fe5b906000526020600020906002020160010154145b15614513578092506001915061451b565b600101614492565b5090925090505b9250929050565b60405180610140016040528060006001600160a01b031681526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600015158152602001600081526020016000815260200160006001600160a01b031681525090565b604080518082019091526000808252602082015290565b6040518060200160405280606081525090565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b8154818355818111156109895760008381526020902061098991810190830161208491905b80821115614653576000815560010161463f565b5090565b8035610c9781615b73565b8051610c9781615b73565b60008083601f84011261467f57600080fd5b50813567ffffffffffffffff81111561469757600080fd5b6020830191508361010082028301111561452257600080fd5b60008083601f8401126146c257600080fd5b50813567ffffffffffffffff8111156146da57600080fd5b60208301915083604082028301111561452257600080fd5b8035610c9781615b8a565b8051610c9781615b8a565b600082601f83011261471957600080fd5b813561472c61472782615ad3565b615aac565b9150808252602083016020830185838301111561474857600080fd5b614753838284615b67565b50505092915050565b6000610100828403121561476f57600080fd5b61477a610100615aac565b90506000614788848461486f565b82525060206147998484830161486f565b60208301525060406147ad8482850161486f565b60408301525060606147c18482850161486f565b60608301525060806147d58482850161486f565b60808301525060a06147e98482850161486f565b60a08301525060c06147fd84828501614657565b60c08301525060e061481184828501614657565b60e08301525092915050565b60006040828403121561482f57600080fd5b6148396040615aac565b90506000614847848461486f565b825250602061485884848301614657565b60208301525092915050565b8035610c9781615b93565b8035610c9781615b9c565b8051610c9781615b9c565b60006020828403121561489757600080fd5b60006109978484614657565b6000602082840312156148b557600080fd5b60006109978484614662565b600080604083850312156148d457600080fd5b60006148e08585614657565b92505060206148f185828601614657565b9150509250929050565b600080600080600060a0868803121561491357600080fd5b600061491f8888614657565b955050602061493088828901614657565b945050604061494188828901614864565b935050606061495288828901614864565b925050608061496388828901614864565b9150509295509295909350565b6000806000806080858703121561498657600080fd5b60006149928787614657565b94505060206149a387828801614657565b93505060406149b48782880161486f565b925050606085013567ffffffffffffffff8111156149d157600080fd5b6149dd87828801614708565b91505092959194509250565b600080604083850312156149fc57600080fd5b6000614a088585614657565b92505060206148f18582860161486f565b600080600060608486031215614a2e57600080fd5b6000614a3a8686614657565b9350506020614a4b8682870161486f565b9250506040614a5c86828701614657565b9150509250925092565b60008060208385031215614a7957600080fd5b823567ffffffffffffffff811115614a9057600080fd5b614a9c8582860161466d565b92509250509250929050565b60008060208385031215614abb57600080fd5b823567ffffffffffffffff811115614ad257600080fd5b614a9c858286016146b0565b600060208284031215614af057600080fd5b600061099784846146fd565b60006101008284031215614b0f57600080fd5b6000610997848461475c565b600060408284031215614b2d57600080fd5b6000610997848461481d565b600080600080600080600060e0888a031215614b5457600080fd5b6000614b608a8a614864565b9750506020614b718a828b01614864565b9650506040614b828a828b01614864565b9550506060614b938a828b0161486f565b9450506080614ba48a828b01614657565b93505060a0614bb58a828b01614657565b92505060c0614bc68a828b01614657565b91505092959891949750929550565b600060208284031215614be757600080fd5b6000610997848461486f565b600060208284031215614c0557600080fd5b6000610997848461487a565b60008060408385031215614c2457600080fd5b60006148e0858561486f565b60008060008060808587031215614c4657600080fd5b6000614c52878761486f565b9450506020614c6387828801614657565b9350506040614c7487828801614657565b92505060606149dd878288016146f2565b60008060008060808587031215614c9b57600080fd5b6000614ca7878761486f565b9450506020614cb887828801614657565b9350506040614cc987828801614657565b92505060606149dd8782880161486f565b600080600060608486031215614cef57600080fd5b6000614cfb868661486f565b9350506020614d0c86828701614657565b9250506040614a5c868287016146f2565b600080600060608486031215614d3257600080fd5b6000614d3e868661486f565b9350506020614d4f86828701614657565b9250506040614a5c8682870161486f565b60008060008060808587031215614d7657600080fd5b6000614d82878761486f565b9450506020614d9387828801614657565b9350506040614da48782880161486f565b92505060606149dd87828801614657565b600080600080600080600080610100898b031215614dd257600080fd5b6000614dde8b8b61486f565b9850506020614def8b828c0161486f565b9750506040614e008b828c0161486f565b9650506060614e118b828c0161486f565b9550506080614e228b828c0161486f565b94505060a0614e338b828c0161486f565b93505060c0614e448b828c01614657565b92505060e0614e558b828c01614657565b9150509295985092959890939650565b6000614e718383614e9c565b505060200190565b6000614e8583836155f7565b505060400190565b614e9681615b56565b82525050565b614e9681615b0e565b6000614eb082615b01565b614eba8185615b05565b9350614ec583615afb565b8060005b83811015614ef3578151614edd8882614e65565b9750614ee883615afb565b925050600101614ec9565b509495945050505050565b6000614f0982615b01565b614f138185615b05565b9350614f1e83615afb565b8060005b83811015614ef3578151614f368882614e79565b9750614f4183615afb565b925050600101614f22565b614e9681615b19565b614e9681615b1e565b6000614f6b602283615b05565b7f616d6f756e74206973206e6f74206c65737320207468616e206d73672076616c815261756560f01b602082015260400192915050565b6000614faf603383615b05565b7f596f75206d757374206265206f776e657220616e6420546f6b656e2073686f7581527f6c64206e6f74206861766520616e792062696400000000000000000000000000602082015260400192915050565b600061500e601c83615b05565b7f496e73756666696369656e742062696464696e6720616d6f756e742e00000000815260200192915050565b6000615047603183615b05565b7f596f75206d757374206265206f666665726572206f72206f776e657220746f2081527f72656d6f766520746865206f666665722e000000000000000000000000000000602082015260400192915050565b60006150a6601183615b05565b7f41756374696f6e204e6f74204f76657221000000000000000000000000000000815260200192915050565b60006150df601383615b05565b7f466f7220666c61742073616c65206f6e6c792100000000000000000000000000815260200192915050565b6000615118602f83615b05565b7f416c6c6f77616e6365206973206c657373207468616e20616d6f756e7420736581527f6e7420666f722062696464696e672e0000000000000000000000000000000000602082015260400192915050565b6000615177602683615b05565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181527f6464726573730000000000000000000000000000000000000000000000000000602082015260400192915050565b60006151d6601d83615b05565b7f496e73756666696369656e74207370656e7420616c6c6f77616e636520000000815260200192915050565b600061520f600f83615b05565b7f41646472657373206973205a65726f0000000000000000000000000000000000815260200192915050565b6000615248601b83615b05565b7f56616c75652073656e74206c657373207468616e20616d6f756e740000000000815260200192915050565b6000615281602383615b05565b7f54686973206572633230746f6b656e207061796d656e74206e6f7420616c6c6f8152621dd95960ea1b602082015260400192915050565b60006152c6601283615b05565b7f546f6b656e204e6f7420466f722053616c650000000000000000000000000000815260200192915050565b60006152ff601383615b05565b7f42726f6b6572204e6f7420617070726f76656400000000000000000000000000815260200192915050565b6000615338601c83615b05565b7f54686973204e465420697320616c7265616479206f6e2073616c652e00000000815260200192915050565b6000615371601483615b05565b7f496e73756666696369656e74205061796d656e74000000000000000000000000815260200192915050565b60006153aa601b83615b05565b7f73686f756c642062652067726561746572207468616e207a65726f0000000000815260200192915050565b60006153e3602083615b05565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b600061541c601283615b05565b7f41756374696f6e2054696d65204f766572210000000000000000000000000000815260200192915050565b6000615455602483615b05565b7f73656c65637465642063616e64696461746520616d6f756e74206e6f74206d6181526303a31b4160e51b602082015260400192915050565b600061549b601883615b05565b7f41756374696f6e204e6f74205374617274656420796574210000000000000000815260200192915050565b60006154d4601683615b05565b7f204f6666657220646f65736e27742065786973742e2000000000000000000000815260200192915050565b600061550d603283615b05565b7f436c6f73696e672074696d652073686f756c642062652067726561746572207481527f68616e207374617274696e672074696d65210000000000000000000000000000602082015260400192915050565b600061556c602e83615b05565b7f43616e206e6f74206d616b6520616e206f66666572206f6e20616e20696e636f81527f6d706c6574652061756374696f6e000000000000000000000000000000000000602082015260400192915050565b60006155cb601183615b05565b7f4552433230206e6f7420616c6c6f776564000000000000000000000000000000815260200192915050565b805160408301906156088482614e9c565b506020820151610d4f6020850182615649565b9052565b80516020808452600091908401906156378282614ea5565b95945050505050565b614e9681615b43565b614e9681612084565b60208101610c978284614e9c565b6040810161566e8285614e8d565b61567b6020830184614e9c565b9392505050565b606081016156908286614e8d565b61569d6020830185614e8d565b6109976040830184615649565b608081016156b88287614e8d565b6156c56020830186614e8d565b6156d26040830185615649565b6156376060830184614e9c565b606081016156ed8286614e8d565b61569d6020830185614e9c565b604081016157088285614e8d565b61567b6020830184615649565b6101408101615724828d614e9c565b615731602083018c615649565b61573e604083018b614e9c565b61574b606083018a615649565b6157586080830189615649565b61576560a0830188615649565b61577260c0830187614f4c565b61577f60e0830186615649565b61578d610100830185615649565b61579b610120830184614e9c565b9b9a5050505050505050505050565b608081016157b88287614e8d565b6156c56020830186615649565b606081016156908286614e9c565b606081016156ed8286614e9c565b604081016157088285614e9c565b6020808252810161567b8184614efe565b60208101610c978284614f4c565b60208101610c978284614f55565b60208082528101610c9781614f5e565b60208082528101610c9781614fa2565b60208082528101610c9781615001565b60208082528101610c978161503a565b60208082528101610c9781615099565b60208082528101610c97816150d2565b60208082528101610c978161510b565b60208082528101610c978161516a565b60208082528101610c97816151c9565b60208082528101610c9781615202565b60208082528101610c978161523b565b60208082528101610c9781615274565b60208082528101610c97816152b9565b60208082528101610c97816152f2565b60208082528101610c978161532b565b60208082528101610c9781615364565b60208082528101610c978161539d565b60208082528101610c97816153d6565b60208082528101610c978161540f565b60208082528101610c9781615448565b60208082528101610c978161548e565b60208082528101610c97816154c7565b60208082528101610c9781615500565b60208082528101610c978161555f565b60208082528101610c97816155be565b606081016159ba828561561b565b61567b60208301846155f7565b6020808252810161567b818461561f565b6040810161566e828561561b565b60208101610c978284615640565b60208101610c978284615649565b6040810161566e8285615649565b608081016157b88287615649565b60a08101615a2c8288615649565b615a396020830187615649565b615a466040830186615649565b615a536060830185614e9c565b615a606080830184614f4c565b9695505050505050565b60a08101615a788288615649565b615a856020830187615649565b615a926040830186615649565b615a9f6060830185615649565b615a606080830184614e9c565b60405181810167ffffffffffffffff81118282101715615acb57600080fd5b604052919050565b600067ffffffffffffffff821115615aea57600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b6000610c9782615b4a565b151590565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b61ffff1690565b6001600160a01b031690565b6000610c97826000610c9782615b0e565b82818337506000910152565b615b7c81615b0e565b8114615b8757600080fd5b50565b615b7c81615b19565b615b7c81615b43565b615b7c8161208456fea365627a7a72315820a6d3274aa9a9a8830400220ecf38acd9853a2327a0871601fa7cdcd0f1f40df66c6578706572696d656e74616cf564736f6c63430005110040

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

000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000258000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000c0fde5fc14b5e841ed1aaa92c66446dba2fa71e3000000000000000000000000fa1bdf7da5a89886f394a463e21b7e877be81600

-----Decoded View---------------
Arg [0] : _rewardDistributionPercentage (uint16): 25
Arg [1] : _platFormFeePercentage (uint16): 200
Arg [2] : _lpStakefeepercentage (uint16): 25
Arg [3] : _updatedTime (uint256): 600
Arg [4] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [5] : _rewardDistributionAddress (address): 0xc0fDe5fC14B5E841ed1aaa92c66446dbA2Fa71E3
Arg [6] : _lpStakeAddress (address): 0xfA1bDF7Da5A89886f394a463E21B7E877be81600

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000258
Arg [4] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [5] : 000000000000000000000000c0fde5fc14b5e841ed1aaa92c66446dba2fa71e3
Arg [6] : 000000000000000000000000fa1bdf7da5a89886f394a463e21b7e877be81600


Deployed Bytecode Sourcemap

13863:27292:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27782:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27782:131:0;;;;;;;;:::i;:::-;;9418:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9418:26:0;;;:::i;:::-;;;;;;;;;;;;;;;;26678:838;;;;;;;;;:::i;6379:190::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6379:190:0;;;;;;;;:::i;:::-;;;;;;;;39505:1104;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;39505:1104:0;;;;;;;;:::i;40960:192::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;40960:192:0;;;;;;;;:::i;:::-;;;;;;;;27589:185;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27589:185:0;;;;;;;;:::i;17911:1826::-;;;;;;;;;:::i;16756:1095::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16756:1095:0;;;;;;;;:::i;11564:179::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11564:179:0;;;;;;;;:::i;34143:148::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34143:148:0;;;:::i;40730:222::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;40730:222:0;;;;;;;;:::i;9244:63::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9244:63:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;9451:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9451:27:0;;;:::i;19780:1763::-;;;;;;;;;:::i;34675:2892::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;34675:2892:0;;;;;;;;:::i;9688:162::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9688:162:0;;;:::i;:::-;;;;;;;;9521:159;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9521:159:0;;;:::i;:::-;;;;;;;;15554:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15554:51:0;;;;;;;;:::i;:::-;;;;;;;;32613:1522;;;;;;;;;:::i;7942:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7942:32:0;;;:::i;9485:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9485:29:0;;;:::i;30360:2245::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30360:2245:0;;;;;;;;:::i;3018:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3018:79:0;;;:::i;3384:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3384:92:0;;;:::i;28123:2036::-;;;;;;;;;:::i;10542:887::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10542:887:0;;;;;;;;:::i;7773:42::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7773:42:0;;;:::i;:::-;;;;;;;;7867:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7867:34:0;;;:::i;9858:175::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9858:175:0;;;:::i;10218:196::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10218:196:0;;;;;;;;:::i;27921:194::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27921:194:0;;;;;;;;:::i;37690:471::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;37690:471:0;;;;;;;;:::i;9072:163::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9072:163:0;;;;;;;;:::i;:::-;;;;;;;;;7822:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7822:35:0;;;:::i;3631:239::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3631:239:0;;;;;;;;:::i;34299:368::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;34299:368:0;;;;;;;;:::i;11437:119::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11437:119:0;;;;;;;;:::i;10041:169::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10041:169:0;;;:::i;38169:1328::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;38169:1328:0;;;;;;;;:::i;27782:131::-;3230:9;:7;:9::i;:::-;3222:54;;;;-1:-1:-1;;;3222:54:0;;;;;;;;;;;;;;;;;27861:44;;-1:-1:-1;;;27861:44:0;;:31;;;;:44;;:16;;27893:11;;27861:44;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27861:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27861:44:0;;;;27782:131;:::o;9418:26::-;;;-1:-1:-1;;;;;9418:26:0;;:::o;26678:838::-;-1:-1:-1;;;;;26925:26:0;;;;;;;:10;:26;;;;;;;;:35;;;;;;;;:48;;;;;;;;;;:56;;26894:10;:87;;:169;;-1:-1:-1;27002:47:0;;-1:-1:-1;;;27002:47:0;;27053:10;;-1:-1:-1;;;;;27002:38:0;;;;;:47;;27041:7;;27002:47;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27002:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27002:47:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27002:47:0;;;;;;;;;-1:-1:-1;;;;;27002:61:0;;26894:169;26872:268;;;;-1:-1:-1;;;26872:268:0;;;;;;;;;-1:-1:-1;;;;;27205:26:0;;;27263:1;27205:26;;;:10;:26;;;;;;;;:35;;;;;;;;:48;;;;;;;;;:55;;;:59;;;;:167;;-1:-1:-1;;;;;;27285:26:0;;;27370:1;27285:26;;;:10;:26;;;;;;;;:35;;;;;;;;:48;;;;;;;;;;:56;;:87;;27205:167;27183:239;;;;-1:-1:-1;;;27183:239:0;;;;;;;;;27458:50;27471:14;27487:7;27496:11;27458:12;:50::i;:::-;26678:838;;;:::o;6379:190::-;-1:-1:-1;;;6379:190:0;;;;;;;:::o;39505:1104::-;13255:47;;-1:-1:-1;;;13255:47:0;;39607:7;;39616:14;;13306:10;;-1:-1:-1;;;;;13255:38:0;;;;;:47;;39607:7;;13255:47;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13255:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13255:47:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13255:47:0;;;;;;;;;-1:-1:-1;;;;;13255:61:0;;13233:162;;;;-1:-1:-1;;;13233:162:0;;;;;;;;;39715:23;;:::i;:::-;-1:-1:-1;;;;;;39741:24:0;;;;;;;:8;:24;;;;;;;;:33;;;;;;;;;39715:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39785:42;;:::i;:::-;-1:-1:-1;39830:87:0;;;;;;;;-1:-1:-1;;;;;39830:87:0;;;;;;;;;;;;-1:-1:-1;39928:32:0;;;:16;:32;;;;;:41;;;;;;;;;:49;;-1:-1:-1;;39928:49:0;;;40149:19;;;;40021:158;;39830:87;;40094:10;;39899:7;;39830:87;40021:158;;;;40119:15;;40021:158;;;;;;;;;;40192:39;:13;40221:9;40192:39;:28;:39;:::i;:::-;-1:-1:-1;40265:10:0;40244:32;;;;:20;:32;;;;;:58;;40292:9;40244:58;:47;:58;:::i;:::-;;40352:8;:20;;;40376:1;40352:25;40348:203;;;40394:42;:16;40426:9;40394:42;:31;:42;:::i;:::-;;40348:203;;;40458:8;:20;;;40482:1;40458:25;40454:97;;;40500:39;:13;40529:9;40500:39;:28;:39;:::i;:::-;;40454:97;-1:-1:-1;;;;;;;;;40568:24:0;;;;;:8;:24;;;;;;;;:33;;;;;;;;;40561:40;;-1:-1:-1;;;;;;40561:40:0;;;;;-1:-1:-1;40561:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40561:40:0;;;;;;;;;;;;;;;;;;;;;;;;;39505:1104::o;40960:192::-;-1:-1:-1;;;;;41103:32:0;;41074:4;41103:32;;;:16;:32;;;;;;;;:41;;;;;;;;;;;40960:192;;;;;:::o;27589:185::-;13255:47;;-1:-1:-1;;;13255:47:0;;27690:7;;27699:14;;13306:10;;-1:-1:-1;;;;;13255:38:0;;;;;:47;;27690:7;;13255:47;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13255:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13255:47:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13255:47:0;;;;;;;;;-1:-1:-1;;;;;13255:61:0;;13233:162;;;;-1:-1:-1;;;13233:162:0;;;;;;;;;27731:35;27742:14;27758:7;27731:10;:35::i;:::-;27589:185;;;;:::o;17911:1826::-;18081:11;-1:-1:-1;;;;;11851:25:0;;;11847:173;;11919:36;:16;11943:11;11919:36;:23;:36;:::i;:::-;11893:115;;;;-1:-1:-1;;;11893:115:0;;;;;;;;;-1:-1:-1;;;;;18207:24:0;;;;;;:8;:24;;;;;;;;:33;;;;;;;;:45;;;18256:1;18207:50;18203:340;;;-1:-1:-1;;;;;18339:24:0;;;;;;:8;:24;;;;;;;;:33;;;;;;;;:45;;;18300:15;:84;:149;;;;-1:-1:-1;;;;;;18410:24:0;;;;;;:8;:24;;;;;;;;:33;;;;;;;;:39;;;;;18409:40;18300:149;18274:257;;;;-1:-1:-1;;;18274:257:0;;;;;;;;;-1:-1:-1;;;;;18651:26:0;;;;;;;:10;:26;;;;;;;;:35;;;;;;;;:48;;;;;;;;;:55;;;18641:65;;;18619:149;;;;-1:-1:-1;;;18619:149:0;;;;;;;;;18815:50;18828:14;18844:7;18853:11;18815:12;:50::i;:::-;-1:-1:-1;;;;;18930:25:0;;18926:425;;18993:6;18980:9;:19;;18972:59;;;;-1:-1:-1;;;18972:59:0;;;;;;;;;18926:425;;;19144:47;;-1:-1:-1;;;19144:47:0;;19091:11;;19195:6;;-1:-1:-1;;;;;19144:20:0;;;;;:47;;19165:10;;19185:4;;19144:47;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19144:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19144:47:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19144:47:0;;;;;;;;;:57;;19118:148;;;;-1:-1:-1;;;19118:148:0;;;;;;;;;19281:58;;-1:-1:-1;;;19281:58:0;;-1:-1:-1;;;;;19281:23:0;;;;;:58;;19305:10;;19325:4;;19332:6;;19281:58;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19281:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19281:58:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19281:58:0;;;;;;;;;;18926:425;;-1:-1:-1;;;;;19392:26:0;;;;;;;:10;:26;;;;;;;;:35;;;;;;;;:48;;;;;;;;;;;:69;;-1:-1:-1;;;;;;19392:69:0;19451:10;19392:69;;;;;-1:-1:-1;19472:55:0;;;:64;;;19584:145;;19392:35;;:26;19584:145;;;;19392:48;;19472:64;;19584:145;;;;;;;;;;17911:1826;;;;;:::o;16756:1095::-;3230:9;:7;:9::i;:::-;3222:54;;;;-1:-1:-1;;;3222:54:0;;;;;;;;;-1:-1:-1;;;;;17093:40:0;;;;;;:70;;-1:-1:-1;;;;;;17136:27:0;;;;17093:70;17085:98;;;;-1:-1:-1;;;17085:98:0;;;;;;;;;17378:4;17345:29;:37;;;;:71;;;;;17412:4;17386:22;:30;;;;17345:71;:102;;;;;17443:4;17420:21;:27;;;;17345:102;17337:142;;;;-1:-1:-1;;;17337:142:0;;;;;;;;;17499:28;:60;;;17570:46;;;-1:-1:-1;;;17570:46:0;-1:-1:-1;;;;17499:60:0;;;-1:-1:-1;;;17499:60:0;-1:-1:-1;;;;17499:60:0;;;;;;;17570:46;;;;17627:35;17649:12;17627:21;:35::i;:::-;17673:11;:18;;-1:-1:-1;;;;;17673:18:0;;;-1:-1:-1;;;;;;17673:18:0;;;;;;;17702:12;:41;;;;;;;;;;;;;;;17754:14;:32;;;;;;;;;;;-1:-1:-1;17673:11:0;17797:44;;;;;;-1:-1:-1;;;17797:44:0;-1:-1:-1;;;;17797:44:0;;;;;;;;;-1:-1:-1;;16756:1095:0:o;11564:179::-;3230:9;:7;:9::i;:::-;3222:54;;;;-1:-1:-1;;;3222:54:0;;;;;;;;;11665:11;:18;;-1:-1:-1;;;;;11665:18:0;;;-1:-1:-1;;;;;;11665:18:0;;;;;;;11694:12;:41;;;;;;;;;;;11564:179::o;34143:148::-;3230:9;:7;:9::i;:::-;3222:54;;;;-1:-1:-1;;;3222:54:0;;;;;;;;;34211:28;;;;:16;:28;;;;;34191:49;:10;;:49;;;;;34211:28;34191:49;;34211:28;34191:49;34211:28;34191:10;:49;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;34282:1:0;34251:28;;;:16;:28;;;:32;34143:148::o;40730:222::-;40803:6;40798:147;40815:17;;;40798:147;;;40854:13;;:::i;:::-;40870:6;;40877:1;40870:9;;;;;;;;;;;;40854:25;;;;;;;;;;;;;;40894:39;40905:1;:9;;;40916:1;:16;;;40894:10;:39::i;:::-;-1:-1:-1;40834:3:0;;40798:147;;9244:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9244:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9451:27::-;;;-1:-1:-1;;;;;9451:27:0;;:::o;19780:1763::-;-1:-1:-1;;;;;12963:24:0;;;;;;:8;:24;;;;;;;;:33;;;;;;;;:45;;;19980:7;;19989:14;;13012:1;12963:50;;12941:119;;;;-1:-1:-1;;;12941:119:0;;;;;;;;;13255:47;;-1:-1:-1;;;13255:47:0;;20030:7;;20039:14;;13306:10;;-1:-1:-1;;;;;13255:38:0;;;;;:47;;20030:7;;13255:47;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13255:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13255:47:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13255:47:0;;;;;;;;;-1:-1:-1;;;;;13255:61:0;;13233:162;;;;-1:-1:-1;;;13233:162:0;;;;;;;;;20077:11;-1:-1:-1;;;;;11851:25:0;;;11847:173;;11919:36;:16;11943:11;11919:36;:23;:36;:::i;:::-;11893:115;;;;-1:-1:-1;;;11893:115:0;;;;;;;;;20156:26;;:::i;:::-;-1:-1:-1;;;;;;20185:26:0;;;;;;;:10;:26;;;;;;;;:35;;;;;;;;:72;;;;;;;;;;;20156:101;;;;;;;;;;;;;;;;;;;;;;;;;;20268:114;;;;-1:-1:-1;;;20268:114:0;;;;;;;;;20397:20;20435:14;20397:53;;20463:100;20478:7;20487:14;20503:10;20515:11;20528:6;:13;;;20543:12;20557:5;20463:14;:100::i;:::-;20620:5;20576:16;:32;20593:14;-1:-1:-1;;;;;20576:32:0;-1:-1:-1;;;;;20576:32:0;;;;;;;;;;;;:41;20609:7;20576:41;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;20667:5;-1:-1:-1;;;;;20667:22:0;;20690:5;-1:-1:-1;;;;;20690:13:0;;20704:7;20690:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20690:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20690:22:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20690:22:0;;;;;;;;;20714:6;:14;;;20730:7;20667:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20667:71:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20667:71:0;;;;20872:6;:14;;;-1:-1:-1;;;;;20778:222:0;20847:10;-1:-1:-1;;;;;20778:222:0;20796:14;-1:-1:-1;;;;;20778:222:0;;20825:7;20901:6;:13;;;20929:15;20959:11;20985:4;20778:222;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21059:26:0;;;;;;;:10;:26;;;;;;;;:35;;;;;;;;:48;;;;;;;;;;;21052:55;;-1:-1:-1;;;;;;21052:55:0;;;;;;21118:35;21070:14;21086:7;21118:10;:35::i;:::-;21164:42;;:::i;:::-;-1:-1:-1;21209:87:0;;;;;;;;;-1:-1:-1;;;;;21209:87:0;;;;;;;;;;21307:39;:13;21209:87;21307:39;:28;:39;:::i;:::-;-1:-1:-1;21378:10:0;21357:32;;;;:20;:32;;;;;:58;;21405:9;21357:58;:47;:58;:::i;:::-;-1:-1:-1;21426:42:0;:16;21458:9;21426:42;:31;:42;:::i;:::-;-1:-1:-1;21495:20:0;;-1:-1:-1;;;;;21486:30:0;;;;;:8;:30;;;;;;;;21517:17;;;;21486:49;;;;;;;;21479:56;;-1:-1:-1;;;;;;21479:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21479:56:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19780:1763:0:o;34675:2892::-;34984:11;-1:-1:-1;;;;;11851:25:0;;;11847:173;;11919:36;:16;11943:11;11919:36;:23;:36;:::i;:::-;11893:115;;;;-1:-1:-1;;;11893:115:0;;;;;;;;;13255:47;;-1:-1:-1;;;13255:47:0;;35022:8;;35032:14;;13306:10;;-1:-1:-1;;;;;13255:38:0;;;;;:47;;35022:8;;13255:47;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13255:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13255:47:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13255:47:0;;;;;;;;;-1:-1:-1;;;;;13255:61:0;;13233:162;;;;-1:-1:-1;;;13233:162:0;;;;;;;;;35102:14;35128:23;;:::i;:::-;35154:8;:24;35163:14;-1:-1:-1;;;;;35154:24:0;-1:-1:-1;;;;;35154:24:0;;;;;;;;;;;;:34;35179:8;35154:34;;;;;;;;;;;35128:60;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35128:60:0;-1:-1:-1;;;;;35128:60:0;-1:-1:-1;;;;;35128:60:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35128:60:0;-1:-1:-1;;;;;35128:60:0;-1:-1:-1;;;;;35128:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35128:60:0;-1:-1:-1;;;;;35128:60:0;-1:-1:-1;;;;;35128:60:0;;;;;;;35337:16;:32;35354:14;-1:-1:-1;;;;;35337:32:0;-1:-1:-1;;;;;35337:32:0;;;;;;;;;;;;:42;35370:8;35337:42;;;;;;;;;;;;;;;;;;;;;:50;;35383:4;35337:50;;;35333:309;;;35430:8;:20;;;35454:1;35430:25;:73;;;;-1:-1:-1;35480:14:0;;;;:23;35430:73;:136;;;;;35546:8;:20;;;35528:15;:38;35430:136;35404:226;;;;-1:-1:-1;;;35404:226:0;;;;;;;;;35652:42;;:::i;:::-;35697:88;;;;;;;;35737:14;-1:-1:-1;;;;;35697:88:0;;;;;35766:8;35697:88;;;35652:133;;35796:25;;:::i;:::-;35824:278;;;;;;;;35846:10;-1:-1:-1;;;;;35824:278:0;;;;;35871:14;35824:278;;;;35908:1;-1:-1:-1;;;;;35824:278:0;;;;;35925:12;35824:278;;;;35952:14;35824:278;;;;35981:9;35824:278;;;;36005:5;35824:278;;;;;;36025:13;35824:278;;;;36053:12;35824:278;;;;36080:11;-1:-1:-1;;;;;35824:278:0;;;;35796:306;;36138:5;-1:-1:-1;;;;;36138:22:0;;36161:10;36181:4;36138:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36138:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36138:49:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;36138:49:0;;;;;;;;;:123;;;-1:-1:-1;36226:17:0;;;;36208:36;;-1:-1:-1;;;36208:36:0;;36256:4;;-1:-1:-1;;;;;36208:17:0;;;;;:36;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36208:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36208:36:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;36208:36:0;;;;;;;;;-1:-1:-1;;;;;36208:53:0;;36138:123;36115:194;;;;-1:-1:-1;;;36115:194:0;;;;;;;;;36357:13;36342:12;:28;36320:128;;;;-1:-1:-1;;;36320:128:0;;;;;;;;;36468:20;;-1:-1:-1;;;;;36459:30:0;;;;;;;:8;:30;;;;;;;;36490:17;;;;;36459:49;;;;;;;;:62;;;;-1:-1:-1;;;;;;36459:62:0;;;;;;;;;;;;;;;;-1:-1:-1;36459:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36459:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36638:20;;36621:38;;;;;;;;;;;36660:17;;36621:57;;;;;;;;36459:62;36621:57;36603:577;;36731:20;;-1:-1:-1;;;;;36714:38:0;;;;;:16;:38;;;;;;;;36753:17;;;;36714:57;;;;;;;;;:64;;-1:-1:-1;;36714:64:0;36774:4;36714:64;;;36795:36;-1:-1:-1;;;36795:36:0;;:25;;;;:36;;:13;;36731:9;;36795:36;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36795:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;36867:10:0;36846:32;;;;:20;:32;;;;;;;:55;;-1:-1:-1;;;36846:55:0;;:44;;-1:-1:-1;36846:44:0;;-1:-1:-1;36846:55:0;;:32;36891:9;;36846:55;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36846:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36846:55:0;;;;36976:12;36992:1;36976:17;36972:197;;;37014:39;;-1:-1:-1;;;37014:39:0;;:28;;;;:39;;:16;;37043:9;;37014:39;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37014:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37014:39:0;;;;36972:197;;;37079:12;37095:1;37079:17;37075:94;;;37117:36;;-1:-1:-1;;;37117:36:0;;:25;;;;:36;;:13;;37143:9;;37117:36;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37117:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37117:36:0;;;;37075:94;37278:17;;;;37243:20;;37335:22;;;;37310:10;;37278:17;-1:-1:-1;;;;;37222:337:0;;;;37398:1;37372:27;;:110;;37458:10;:24;;;37372:110;;;37419:10;:19;;;37372:110;37527:21;;;;37222:337;;;;;;37497:15;;37222:337;;;;;;;;;;13406:1;;;;12030;;34675:2892;;;;;;;;;:::o;9688:162::-;9764:34;9823:13;:19;;9816:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9816:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9688:162;;:::o;9521:159::-;9595:36;;:::i;:::-;9649:23;;;9656:16;9649:23;;;;;;;;;;;;;;;;;;;9656:16;;9649:23;;;;9656:16;;9649:23;;9656:16;9649:23;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9649:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;9521:159;:::o;15554:51::-;;;;;;;;;;;;;:::o;32613:1522::-;-1:-1:-1;;;;;12141:32:0;;;;;;:16;:32;;;;;;;;:41;;;;;;;;;32773:7;;32782:14;;12141:41;;:49;;:41;:49;12119:117;;;;-1:-1:-1;;;12119:117:0;;;;;;;;;-1:-1:-1;;;;;12963:24:0;;;;;;:8;:24;;;;;;;;:33;;;;;;;;:45;;;32820:7;;32829:14;;13012:1;12963:50;;12941:119;;;;-1:-1:-1;;;12941:119:0;;;;;;;;;32899:14;32925:23;;:::i;:::-;-1:-1:-1;;;;;;32951:24:0;;;;;;;:8;:24;;;;;;;;:33;;;;;;;;;32925:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32995:42;;:::i;:::-;-1:-1:-1;33040:87:0;;;;;;;;;-1:-1:-1;;;;;33040:87:0;;;;;;;;;;33167:18;;33248:19;;;;33269:17;;;;33196:111;;33109:7;;33080:14;;33167:18;;33288:12;33302:4;33196:14;:111::i;:::-;33337:20;;-1:-1:-1;;;;;33320:38:0;;;33380:5;33320:38;;;:16;:38;;;;;;;;33359:17;;;;;33320:57;;;;;;;;:65;;-1:-1:-1;;33320:65:0;;;33449:17;33435:32;;-1:-1:-1;;;33435:32:0;;33398:22;;;;;;;;33435:13;;:32;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33435:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33435:32:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;33435:32:0;;;;;;;;;33482:10;33507:9;:17;;;33398:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33398:137:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33398:137:0;;;;33685:10;-1:-1:-1;;;;;33575:247:0;33660:10;-1:-1:-1;;;;;33575:247:0;33593:9;:20;;;-1:-1:-1;;;;;33575:247:0;;33628:9;:17;;;33710:8;:17;;;33742:15;33772:8;:19;;;33806:5;33575:247;;;;;;;;;;;;;;;;;;;33835:39;:13;33864:9;33835:39;:28;:39;:::i;:::-;-1:-1:-1;;;;;;33885:32:0;;;;;;:20;:32;;;;;:58;;33933:9;33885:58;:47;:58;:::i;:::-;-1:-1:-1;33956:42:0;:16;33988:9;33956:42;:31;:42;:::i;:::-;-1:-1:-1;34025:20:0;;-1:-1:-1;;;;;34016:30:0;;;;;:8;:30;;;;;;;;34047:17;;;;;34016:49;;;;;;34009:56;;-1:-1:-1;;;;;;34009:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34009:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;34087:20;;34109:17;;34076:51;;34087:20;34076:10;:51::i;:::-;13071:1;;;;12247;;32613:1522;;;;;:::o;7942:32::-;;;;:::o;9485:29::-;;;-1:-1:-1;;;;;9485:29:0;;:::o;30360:2245::-;30527:14;30553:23;;:::i;:::-;-1:-1:-1;;;;;;30579:24:0;;;;;;;:8;:24;;;;;;;;:33;;;;;;;;;30553:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30623:42;;:::i;:::-;30668:87;;;;;;;;30708:14;-1:-1:-1;;;;;30668:87:0;;;;;30737:7;30668:87;;;30623:132;;30806:8;:20;;;30788:15;:38;:67;;;;;30830:8;:20;;;30854:1;30830:25;30788:67;30766:134;;;;-1:-1:-1;;;30766:134:0;;;;;;;;;30925:14;;;;:22;;30943:4;30925:22;30921:1677;;;30993:18;;31079:19;;;;31100;;;;31027:114;;31042:7;;31051:14;;30993:18;;31121:12;30964:26;31027:14;:114::i;:::-;31243:7;31269:22;;:::i;:::-;-1:-1:-1;31366:17:0;;-1:-1:-1;;;31366:17:0;;31294:8;;-1:-1:-1;;;;;31321:22:0;;;;;;;31366:13;;:17;;31380:2;;31366:17;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31366:17:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31366:17:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;31366:17:0;;;;;;;;;31406:7;:21;;;31450:2;31321:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31321:150:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31321:150:0;;;;31669:7;:21;;;-1:-1:-1;;;;;31527:330:0;31636:10;-1:-1:-1;;;;;31527:330:0;31553:9;:20;;;-1:-1:-1;;;;;31527:330:0;;31596:9;:17;;;31713:7;:18;;;31754:15;31792:7;:18;;;31833:5;31527:330;;;;;;;;;;;;;;;;;;;31919:30;31930:14;31946:2;31919:10;:30::i;:::-;30921:1677;;32117:10;-1:-1:-1;;;;;32016:268:0;32081:9;:17;;;32042:9;:20;;;-1:-1:-1;;;;;32016:268:0;;32146:8;:22;;;32187:10;32216:15;32250:8;:19;;;32016:268;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32299:32:0;;32343:5;32299:32;;;:16;:32;;;;;;;;:41;;;;;;;;:49;;-1:-1:-1;;32299:49:0;;;32363:39;:13;32392:9;32363:39;:28;:39;:::i;:::-;-1:-1:-1;;;;;;32419:32:0;;;;;;:20;:32;;;;;:58;;32467:9;32419:58;:47;:58;:::i;:::-;-1:-1:-1;32492:39:0;:13;32521:9;32492:39;:28;:39;:::i;:::-;-1:-1:-1;;;;;;;32553:24:0;;;;;;:8;:24;;;;;;;;:33;;;;;;;;32546:40;;-1:-1:-1;;;;;;32546:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32546:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;30921:1677;30360:2245;;;;;;:::o;3018:79::-;3056:7;3083:6;-1:-1:-1;;;;;3083:6:0;3018:79;:::o;3384:92::-;3424:4;3462:6;-1:-1:-1;;;;;3462:6:0;3448:10;:20;;3384:92::o;28123:2036::-;-1:-1:-1;;;;;12141:32:0;;;;;;:16;:32;;;;;;;;:41;;;;;;;;;28280:7;;28289:14;;12141:41;;:49;;:41;:49;12119:117;;;;-1:-1:-1;;;12119:117:0;;;;;;;;;-1:-1:-1;;;;;12379:24:0;;;;;;:8;:24;;;;;;;;:33;;;;;;;;:45;;;28328:7;;28337:14;;12361:15;:63;12339:131;;;;-1:-1:-1;;;12339:131:0;;;;;;;;;-1:-1:-1;;;;;12521:24:0;;;;;;:8;:24;;;;;;;;:33;;;;;;;;;:46;;12503:15;:64;12481:138;;;;-1:-1:-1;;;12481:138:0;;;;;;;;;28407:14;28435:23;;:::i;:::-;-1:-1:-1;;;;;;28461:24:0;;;;;;;:8;:24;;;;;;;;:33;;;;;;;;;28435:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28507:989;;28599:8;:19;;;28587:9;:31;28561:121;;;;-1:-1:-1;;;28561:121:0;;;;;;;;;28703:14;;;;:22;;28721:4;28703:22;28699:115;;;28746:8;:22;;;-1:-1:-1;;;;;28746:31:0;:52;28778:8;:19;;;28746:52;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28746:52:0;28699:115;28507:989;;;28873:19;;;;28934:47;;-1:-1:-1;;;28934:47:0;;28985:6;;-1:-1:-1;;;;;28934:20:0;;;;;:47;;28955:10;;28975:4;;28934:47;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28934:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28934:47:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;28934:47:0;;;;;;;;;:57;;28908:166;;;;-1:-1:-1;;;28908:166:0;;;;;;;;;29124:8;:19;;;29115:6;:28;29089:118;;;;-1:-1:-1;;;29089:118:0;;;;;;;;;29222:58;;-1:-1:-1;;;29222:58:0;;-1:-1:-1;;;;;29222:23:0;;;;;:58;;29246:10;;29266:4;;29273:6;;29222:58;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29222:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29222:58:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29222:58:0;;;;;;;;;-1:-1:-1;29301:14:0;;;;:22;;29319:4;29301:22;29297:188;;;29344:10;-1:-1:-1;;;;;29344:19:0;;29386:8;:22;;;29431:8;:19;;;29344:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29344:125:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29344:125:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29344:125:0;;;;;;;;;;29297:188;28507:989;;29530:19;;;;-1:-1:-1;;;;;29530:33:0;;:80;;29604:6;29530:80;;;29579:9;29530:80;29508:19;;;:102;29646:22;;-1:-1:-1;;;29646:22:0;;-1:-1:-1;;;;;29623:22:0;;;;;;;29646:13;;:22;;29660:7;;29646:22;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29646:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29646:22:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29646:22:0;;;;;;;;;29678:4;29685:7;29623:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29623:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29623:70:0;;;;29721:4;29704:8;:14;;:21;;;;;;;;;;;29761:10;29736:8;:22;;:35;-1:-1:-1;;;;;29736:35:0;;;-1:-1:-1;;;;;29736:35:0;;;;;29806:17;;29782:8;:20;;:41;;;;;;;;;;;29870:8;29834;:24;29843:14;-1:-1:-1;;;;;29834:24:0;-1:-1:-1;;;;;29834:24:0;;;;;;;;;;;;:33;29859:7;29834:33;;;;;;;;;;;:44;;;;;;;;;;;;;-1:-1:-1;;;;;29834:44:0;;;;;-1:-1:-1;;;;;29834:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29834:44:0;;;;;-1:-1:-1;;;;;29834:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29834:44:0;;;;;-1:-1:-1;;;;;29834:44:0;;;;;;;;;29987:8;:18;;;-1:-1:-1;;;;;29918:233:0;29965:7;29936:14;-1:-1:-1;;;;;29918:233:0;;30020:8;:22;;;30057:8;:19;;;30091:15;30121:8;:19;;;29918:233;;;;;;;;;;;;;;;;;;12630:1;;12247;;28123:2036;;;;;:::o;10542:887::-;3230:9;:7;:9::i;:::-;3222:54;;;;-1:-1:-1;;;3222:54:0;;;;;;;;;-1:-1:-1;;;;;10759:40:0;;;;;;:70;;-1:-1:-1;;;;;;10802:27:0;;;;10759:70;10751:98;;;;-1:-1:-1;;;10751:98:0;;;;;;;;;11044:4;11011:29;:37;;;;:71;;;;;11078:4;11052:22;:30;;;;11011:71;:102;;;;;11109:4;11086:21;:27;;;;11011:102;11003:142;;;;-1:-1:-1;;;11003:142:0;;;;;;;;;11156:28;:60;;-1:-1:-1;;;;11156:60:0;-1:-1:-1;;;11156:60:0;;;;;;-1:-1:-1;;;;11227:46:0;-1:-1:-1;;;11227:46:0;;;;;;;;;;;-1:-1:-1;;;;11284:42:0;-1:-1:-1;;;11284:42:0;;;;;;;;;;;11337:12;:41;;-1:-1:-1;;;;;;11337:41:0;;;-1:-1:-1;;;;;11337:41:0;;;;;;;11389:14;:32;;;;;;;;;;;;10542:887::o;7773:42::-;;;-1:-1:-1;;;7773:42:0;;;;;:::o;7867:34::-;;;-1:-1:-1;;;7867:34:0;;;;;:::o;9858:175::-;10003:16;9996:29;;;;;;;;;;;;;;;;;;;9944:34;;9996:29;;10003:16;;:22;;9996:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9996:29:0;;;;;;;;;;;;;;;;;;;;;;10218:196;-1:-1:-1;;;;;10373:27:0;;;;;;:20;:27;;;;;;;;10366:40;;;;;;;;;;;;;;;;;10314:34;;10366:40;;10373:27;;10366:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10366:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10218:196;;;:::o;27921:194::-;28013:11;-1:-1:-1;;;;;11851:25:0;;;11847:173;;11919:36;:16;11943:11;11919:36;:23;:36;:::i;:::-;11893:115;;;;-1:-1:-1;;;11893:115:0;;;;;;;;;3230:9;:7;:9::i;:::-;3222:54;;;;-1:-1:-1;;;3222:54:0;;;;;;;;;28061:46;:16;28095:11;28061:46;:33;:46;:::i;:::-;27921:194;;:::o;37690:471::-;37763:6;37758:396;37775:18;;;37758:396;;;37815:14;;:::i;:::-;37832:7;;37840:1;37832:10;;;;;;;;;;;;37815:27;;;;;;;;;;;;;;37857:285;37885:1;:10;;;37914:1;:16;;;37949:1;:14;;;37982:1;:11;;;38012:1;:15;;;38046:1;:14;;;38079:1;:16;;;38114:1;:13;;;37857:9;:285::i;:::-;-1:-1:-1;37795:3:0;;37758:396;;9072:163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9072:163:0;;;;;:::o;7822:35::-;;;-1:-1:-1;;;7822:35:0;;;;;:::o;3631:239::-;3230:9;:7;:9::i;:::-;3222:54;;;;-1:-1:-1;;;3222:54:0;;;;;;;;;-1:-1:-1;;;;;3712:22:0;;3704:73;;;;-1:-1:-1;;;3704:73:0;;;;;;;;;3845:6;:17;;-1:-1:-1;;;;;;3845:17:0;-1:-1:-1;;;;;3845:17:0;;;;;;;;;;3631:239::o;34299:368::-;3230:9;:7;:9::i;:::-;3222:54;;;;-1:-1:-1;;;3222:54:0;;;;;;;;;34393:36;:16;34417:11;34393:36;:23;:36;:::i;:::-;34371:121;;;;-1:-1:-1;;;34371:121:0;;;;;;;;;-1:-1:-1;;;;;34553:19:0;;34503:17;34585:29;;;:16;:29;;;;;;;;34553:62;;-1:-1:-1;;;34553:62:0;;34530:11;;34553:19;;;:62;;34573:10;;34553:62;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34553:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34553:62:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;34553:62:0;;;;;;;;;-1:-1:-1;;;;;;;34626:29:0;34658:1;34626:29;;;:16;:29;;;;;:33;34299:368::o;11437:119::-;3230:9;:7;:9::i;:::-;3222:54;;;;-1:-1:-1;;;3222:54:0;;;;;;;;;11517:17;:31;11437:119::o;10041:169::-;10183:13;10176:26;;;;;;;;;;;;;;;;;;;10124:34;;10176:26;;10183:13;;:19;;10176:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10176:26:0;;;;;;;;;;;;;;;;;;;;;;38169:1328;-1:-1:-1;;;;;12141:32:0;;;;;;:16;:32;;;;;;;;:41;;;;;;;;;38350:7;;38359:14;;12141:41;;:49;;:41;:49;12119:117;;;;-1:-1:-1;;;12119:117:0;;;;;;;;;38397:11;-1:-1:-1;;;;;11851:25:0;;;11847:173;;11919:36;:16;11943:11;11919:36;:23;:36;:::i;:::-;11893:115;;;;-1:-1:-1;;;11893:115:0;;;;;;;;;13255:47;;-1:-1:-1;;;13255:47:0;;38435:7;;38444:14;;13306:10;;-1:-1:-1;;;;;13255:38:0;;;;;:47;;38435:7;;13255:47;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13255:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13255:47:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13255:47:0;;;;;;;;;-1:-1:-1;;;;;13255:61:0;;13233:162;;;;-1:-1:-1;;;13233:162:0;;;;;;;;;38543:23;;:::i;:::-;-1:-1:-1;;;;;;38569:24:0;;;;;;;:8;:24;;;;;;;;:33;;;;;;;;;38543:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38619:25;38615:176;;;38705:8;:20;;;38687:15;:38;38661:118;;;;-1:-1:-1;;;38661:118:0;;;;;;;;;38884:8;:18;;;-1:-1:-1;;;;;38806:349:0;38862:7;38833:14;-1:-1:-1;;;;;38806:349:0;;38917:8;:20;;;38952:8;:20;;;38976:1;38952:25;:104;;39034:8;:22;;;38952:104;;;38997:8;:17;;;38952:104;39071:9;39095:15;39125:8;:19;;;38806:349;;;;;;;;;;;;;;;;;;;39195:8;:20;;;39219:1;39195:25;39191:200;;;39237:17;;;:29;;;39191:200;;;39299:22;;;:34;;;39348:19;;;:31;;;39191:200;-1:-1:-1;;;;;39401:33:0;;;:19;;;:33;;;39445:24;;;;;;;:8;:24;;;;;;;;:33;;;;;;;;;;:44;;;;-1:-1:-1;;;;;;39445:44:0;;;;;;;;;;;;;;;;-1:-1:-1;39445:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39445:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38169:1328:0:o;25068:1261::-;-1:-1:-1;;;;;25285:26:0;;;25343:1;25285:26;;;:10;:26;;;;;;;;:35;;;;;;;;:48;;;;;;;;;:55;;;:59;;;;:159;;-1:-1:-1;;;;;;25361:26:0;;;25442:1;25361:26;;;:10;:26;;;;;;;;:35;;;;;;;;:48;;;;;;;;;;:56;;:83;;25285:159;25267:1055;;;-1:-1:-1;;;;;25525:25:0;;25521:668;;-1:-1:-1;;;;;25635:26:0;;;;;;;:10;:26;;;;;;;;:35;;;;;;;;:48;;;;;;;;;;;:56;;;25769:55;;;;25571:276;;25635:56;;;25571:276;;;;;;25635:26;25571:276;25769:55;25635:56;25571:276;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25571:276:0;25521:668;;;-1:-1:-1;;;;;26020:26:0;;;25930:12;26020:26;;;:10;:26;;;;;;;;:35;;;;;;;;25983:14;;;26020:48;;;;;;;;;:56;;;26099:55;;;;25983:190;;-1:-1:-1;;;25983:190:0;;:14;;;;;;:190;;26020:56;;25983:190;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25983:190:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25983:190:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;25983:190:0;;;;;;;;;;25521:668;;-1:-1:-1;;;;;26262:26:0;;;;;;;:10;:26;;;;;;;;:35;;;;;;;;;:48;;;;;;;;;;26255:55;;-1:-1:-1;;;;;;26255:55:0;;;-1:-1:-1;26255:55:0;;25068:1261::o;1301:400::-;1419:4;;;1468:34;:4;1492:9;1468:34;:23;:34;:::i;:::-;1436:66;;-1:-1:-1;1436:66:0;-1:-1:-1;1532:4:0;1517:19;;;;1513:158;;;1580:17;;1569:4;;-1:-1:-1;;1580:21:0;;;1569:33;;;;;;;;;;;;;;;;1553:4;:10;;1564:1;1553:13;;;;;;;;;;;;;;;;:49;;:13;;;;;:49;;-1:-1:-1;;;;;;1553:49:0;-1:-1:-1;;;;;1553:49:0;;;;;;;;;;;;;;;;;1617:16;;:4;;:16;;;;;;;;;;;;;-1:-1:-1;;1617:16:0;;;;;;;;;-1:-1:-1;;;;;;1617:16:0;;;;;;;;;;;;;;-1:-1:-1;1648:11:0;;-1:-1:-1;;1648:11:0;1513:158;-1:-1:-1;1688:5:0;;1301:400;-1:-1:-1;;;;1301:400:0:o;26393:239::-;26479:9;26474:151;26498:16;:29;26494:33;;26474:151;;;26549:64;26562:14;26578:7;26587:16;:22;;26610:1;26587:25;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26587:25:0;26549:12;:64::i;:::-;26529:3;;26474:151;;5183:358;5302:4;;5319:192;5343:17;;5339:21;;5319:192;;;5421:16;-1:-1:-1;;;;;5404:33:0;:4;:10;;5415:1;5404:13;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5404:13:0;:33;5382:118;;;5480:4;5473:11;;;;;5382:118;5362:3;;5319:192;;;-1:-1:-1;5528:5:0;;5183:358;-1:-1:-1;;;5183:358:0:o;21551:3458::-;21783:18;21745:20;;;21935:12;21930:203;;21981:25;;-1:-1:-1;;;21981:25:0;;-1:-1:-1;;;;;21981:16:0;;;;;:25;;21998:7;;21981:25;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21981:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21981:25:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;21981:25:0;;;;;;;;;22035:23;;-1:-1:-1;;;22035:23:0;;21968:38;;-1:-1:-1;;;;;;22035:14:0;;;;;:23;;22050:7;;22035:23;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22035:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22035:23:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;22035:23:0;;;;;;;;;22025:33;-1:-1:-1;;22112:5:0;22089:19;;;22088:29;21930:203;22149:18;22172:28;22732:11;;22230:5;22172:28;-1:-1:-1;;;22172:28:0;;;;:54;;22171:64;;;;-1:-1:-1;;;22276:20:0;;;;:46;;22275:56;;;;-1:-1:-1;;;22369:21:0;;;;;;:47;;22368:57;;;;;22469:34;;;:64;;;:96;;;:124;;;;22633:10;;22687:11;;-1:-1:-1;;;;;22732:11:0;;;;22773:25;;22769:1415;;22823:11;22819:128;;;22880:6;22867:9;:19;;22859:52;;;;-1:-1:-1;;;22859:52:0;;;;;;;;;22970:12;22965:88;;23007:26;;-1:-1:-1;;;;;23007:16:0;;;:26;;;;;23024:8;;23007:26;;;;23024:8;23007:16;:26;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23007:26:0;22965:88;23071:36;;-1:-1:-1;;;;;23071:19:0;;;:36;;;;;23091:15;;23071:36;;;;23091:15;23071:19;:36;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23071:36:0;23126:4;-1:-1:-1;;;;;23126:12:0;;23156;23145:10;:23;23126:45;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23126:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23126:45:0;;;;;22769:1415;;;23239:11;23286:883;;;;23360:41;;-1:-1:-1;;;23360:41:0;;23434:6;;-1:-1:-1;;;;;23360:20:0;;;;;:41;;23381:4;;23395;;23360:41;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23360:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23360:41:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23360:41:0;;;;;;;;;:80;;23326:195;;;;-1:-1:-1;;;23326:195:0;;;;;;;;;23544:83;;-1:-1:-1;;;23544:83:0;;-1:-1:-1;;;;;23544:23:0;;;;;:83;;23568:4;;23582;;23589:22;;;:37;;;23544:83;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23544:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23544:83:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23544:83:0;;;;;;;;;;23709:12;23704:118;;23750:48;;-1:-1:-1;;;23750:48:0;;-1:-1:-1;;;;;23750:23:0;;;;;:48;;23774:4;;23780:7;;23789:8;;23750:48;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23750:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23750:48:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23750:48:0;;;;;;;;;;23704:118;23844:58;;-1:-1:-1;;;23844:58:0;;-1:-1:-1;;;;;23844:23:0;;;;;:58;;23868:4;;23874:10;;23886:15;;23844:58;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23844:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23844:58:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23844:58:0;;;;;;;;;;23286:883;;;23976:12;23971:108;;24017:38;;-1:-1:-1;;;24017:38:0;;-1:-1:-1;;;;;24017:19:0;;;;;:38;;24037:7;;24046:8;;24017:38;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24017:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24017:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24017:38:0;;;;;;;;;;23971:108;24101:48;;-1:-1:-1;;;24101:48:0;;-1:-1:-1;;;;;24101:19:0;;;;;:48;;24121:10;;24133:15;;24101:48;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24101:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24101:48:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24101:48:0;;;;;;;;;;23286:883;22769:1415;;-1:-1:-1;;;;;24201:23:0;;;;:50;;;24240:11;;;;;;;;;-1:-1:-1;;;;;24240:11:0;-1:-1:-1;;;;;24227:24:0;:11;-1:-1:-1;;;;;24227:24:0;;24201:50;24198:568;;;24274:14;;24271:222;;24334:12;;24313:47;;-1:-1:-1;;;24313:47:0;;-1:-1:-1;;;;;24313:12:0;;;;;;:47;;24334:12;;;;24349:10;;24313:47;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24313:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24313:47:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24313:47:0;;;;;;;;;-1:-1:-1;24405:12:0;;24441:32;;-1:-1:-1;;;24441:32:0;;-1:-1:-1;;;;;24405:12:0;;;;;;24441:20;;:32;;24462:10;;24441:32;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24441:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24441:32:0;;;;24271:222;;24514:16;;24511:240;;24576:14;;24555:51;;-1:-1:-1;;;24555:51:0;;-1:-1:-1;;;;;24555:12:0;;;;;;:51;;24576:14;;;;24593:12;;24555:51;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24555:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24555:51:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24555:51:0;;;;;;;;;-1:-1:-1;24657:14:0;;24695:36;;-1:-1:-1;;;24695:36:0;;-1:-1:-1;;;;;24657:14:0;;;;;;24695:22;;:36;;24718:12;;24695:36;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24695:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24695:36:0;;;;24511:240;;-1:-1:-1;;;;;;;;24910:39:0;;;24852:29;24910:39;;;:16;:39;;;;;:80;;24953:22;;;;:37;;;24910:80;;;-1:-1:-1;;;;;;;;;;;21551:3458:0:o;4681:496::-;4811:17;;4831:1;-1:-1:-1;4807:363:0;;;4853:9;4848:249;4872:17;;4868:21;;4848:249;;;4966:16;-1:-1:-1;;;;;4949:33:0;:4;:10;;4960:1;4949:13;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4949:13:0;:33;4919:159;;;5041:4;:10;;5052:1;5041:13;;;;;;;;;;;;;;;;;5034:20;;-1:-1:-1;;;;;;5034:20:0;;;4919:159;4891:3;;4848:249;;;;4807:363;;;5157:1;5137:21;:4;5157:1;5137:21;:::i;707:586::-;834:7;;;;;919:329;943:17;;939:21;;919:329;;;1032:9;:20;;;-1:-1:-1;;;;;1004:48:0;:4;:10;;1015:1;1004:13;;;;;;;;;;;;;;;;;;;;;:24;-1:-1:-1;;;;;1004:24:0;:48;:111;;;;;1098:9;:17;;;1073:4;:10;;1084:1;1073:13;;;;;;;;;;;;;;;;;;:21;;;:42;1004:111;982:255;;;1159:1;1151:9;;1193:4;1179:18;;1216:5;;982:255;962:3;;919:329;;;-1:-1:-1;1266:5:0;;-1:-1:-1;1273:11:0;-1:-1:-1;707:586:0;;;;;;:::o;13863:27292::-;;;;;;;;;;-1:-1:-1;;;;;13863:27292:0;;;;;;;;;;;-1:-1:-1;;;;;13863:27292:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13863:27292:0;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;13863:27292:0;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13863:27292:0;;;;;;-1:-1:-1;;;;;13863:27292:0;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:130:-1;72:20;;97:33;72:20;97:33;;142:134;220:13;;238:33;220:13;238:33;;472:375;;;623:3;616:4;608:6;604:17;600:27;590:2;;641:1;638;631:12;590:2;-1:-1;661:20;;701:18;690:30;;687:2;;;733:1;730;723:12;687:2;767:4;759:6;755:17;743:29;;820:3;810:6;802;798:19;788:8;784:34;781:43;778:2;;;837:1;834;827:12;886:372;;;1036:3;1029:4;1021:6;1017:17;1013:27;1003:2;;1054:1;1051;1044:12;1003:2;-1:-1;1074:20;;1114:18;1103:30;;1100:2;;;1146:1;1143;1136:12;1100:2;1180:4;1172:6;1168:17;1156:29;;1231:3;1223:4;1215:6;1211:17;1201:8;1197:32;1194:41;1191:2;;;1248:1;1245;1238:12;1266:124;1330:20;;1355:30;1330:20;1355:30;;1397:128;1472:13;;1490:30;1472:13;1490:30;;1533:440;;1634:3;1627:4;1619:6;1615:17;1611:27;1601:2;;1652:1;1649;1642:12;1601:2;1689:6;1676:20;1711:64;1726:48;1767:6;1726:48;;;1711:64;;;1702:73;;1795:6;1788:5;1781:21;1831:4;1823:6;1819:17;1864:4;1857:5;1853:16;1899:3;1890:6;1885:3;1881:16;1878:25;1875:2;;;1916:1;1913;1906:12;1875:2;1926:41;1960:6;1955:3;1950;1926:41;;;1594:379;;;;;;;;2009:1398;;2121:6;2109:9;2104:3;2100:19;2096:32;2093:2;;;2141:1;2138;2131:12;2093:2;2159:22;2174:6;2159:22;;;2150:31;-1:-1;2235:1;2267:49;2312:3;2292:9;2267:49;;;2242:75;;-1:-1;2388:2;2421:49;2466:3;2442:22;;;2421:49;;;2414:4;2407:5;2403:16;2396:75;2338:144;2540:2;2573:49;2618:3;2609:6;2598:9;2594:22;2573:49;;;2566:4;2559:5;2555:16;2548:75;2492:142;2689:2;2722:49;2767:3;2758:6;2747:9;2743:22;2722:49;;;2715:4;2708:5;2704:16;2697:75;2644:139;2842:3;2876:49;2921:3;2912:6;2901:9;2897:22;2876:49;;;2869:4;2862:5;2858:16;2851:75;2793:144;2995:3;3029:49;3074:3;3065:6;3054:9;3050:22;3029:49;;;3022:4;3015:5;3011:16;3004:75;2947:143;3150:3;3184:49;3229:3;3220:6;3209:9;3205:22;3184:49;;;3177:4;3170:5;3166:16;3159:75;3100:145;3302:3;3336:49;3381:3;3372:6;3361:9;3357:22;3336:49;;;3329:4;3322:5;3318:16;3311:75;3255:142;2087:1320;;;;;3441:477;;3552:4;3540:9;3535:3;3531:19;3527:30;3524:2;;;3570:1;3567;3560:12;3524:2;3588:20;3603:4;3588:20;;;3579:29;-1:-1;3661:1;3693:49;3738:3;3718:9;3693:49;;;3668:75;;-1:-1;3814:2;3847:49;3892:3;3868:22;;;3847:49;;;3840:4;3833:5;3829:16;3822:75;3764:144;3518:400;;;;;3925:128;3991:20;;4016:32;3991:20;4016:32;;4060:130;4127:20;;4152:33;4127:20;4152:33;;4197:134;4275:13;;4293:33;4275:13;4293:33;;4338:241;;4442:2;4430:9;4421:7;4417:23;4413:32;4410:2;;;4458:1;4455;4448:12;4410:2;4493:1;4510:53;4555:7;4535:9;4510:53;;4586:263;;4701:2;4689:9;4680:7;4676:23;4672:32;4669:2;;;4717:1;4714;4707:12;4669:2;4752:1;4769:64;4825:7;4805:9;4769:64;;5142:366;;;5263:2;5251:9;5242:7;5238:23;5234:32;5231:2;;;5279:1;5276;5269:12;5231:2;5314:1;5331:53;5376:7;5356:9;5331:53;;;5321:63;;5293:97;5421:2;5439:53;5484:7;5475:6;5464:9;5460:22;5439:53;;;5429:63;;5400:98;5225:283;;;;;;5515:737;;;;;;5684:3;5672:9;5663:7;5659:23;5655:33;5652:2;;;5701:1;5698;5691:12;5652:2;5736:1;5753:53;5798:7;5778:9;5753:53;;;5743:63;;5715:97;5843:2;5861:53;5906:7;5897:6;5886:9;5882:22;5861:53;;;5851:63;;5822:98;5951:2;5969:52;6013:7;6004:6;5993:9;5989:22;5969:52;;;5959:62;;5930:97;6058:2;6076:52;6120:7;6111:6;6100:9;6096:22;6076:52;;;6066:62;;6037:97;6165:3;6184:52;6228:7;6219:6;6208:9;6204:22;6184:52;;;6174:62;;6144:98;5646:606;;;;;;;;;6259:721;;;;;6423:3;6411:9;6402:7;6398:23;6394:33;6391:2;;;6440:1;6437;6430:12;6391:2;6475:1;6492:53;6537:7;6517:9;6492:53;;;6482:63;;6454:97;6582:2;6600:53;6645:7;6636:6;6625:9;6621:22;6600:53;;;6590:63;;6561:98;6690:2;6708:53;6753:7;6744:6;6733:9;6729:22;6708:53;;;6698:63;;6669:98;6826:2;6815:9;6811:18;6798:32;6850:18;6842:6;6839:30;6836:2;;;6882:1;6879;6872:12;6836:2;6902:62;6956:7;6947:6;6936:9;6932:22;6902:62;;;6892:72;;6777:193;6385:595;;;;;;;;6987:366;;;7108:2;7096:9;7087:7;7083:23;7079:32;7076:2;;;7124:1;7121;7114:12;7076:2;7159:1;7176:53;7221:7;7201:9;7176:53;;;7166:63;;7138:97;7266:2;7284:53;7329:7;7320:6;7309:9;7305:22;7284:53;;7360:491;;;;7498:2;7486:9;7477:7;7473:23;7469:32;7466:2;;;7514:1;7511;7504:12;7466:2;7549:1;7566:53;7611:7;7591:9;7566:53;;;7556:63;;7528:97;7656:2;7674:53;7719:7;7710:6;7699:9;7695:22;7674:53;;;7664:63;;7635:98;7764:2;7782:53;7827:7;7818:6;7807:9;7803:22;7782:53;;;7772:63;;7743:98;7460:391;;;;;;7858:439;;;8018:2;8006:9;7997:7;7993:23;7989:32;7986:2;;;8034:1;8031;8024:12;7986:2;8069:31;;8120:18;8109:30;;8106:2;;;8152:1;8149;8142:12;8106:2;8180:101;8273:7;8264:6;8253:9;8249:22;8180:101;;;8170:111;;;;8048:239;7980:317;;;;;;8304:437;;;8463:2;8451:9;8442:7;8438:23;8434:32;8431:2;;;8479:1;8476;8469:12;8431:2;8514:31;;8565:18;8554:30;;8551:2;;;8597:1;8594;8587:12;8551:2;8625:100;8717:7;8708:6;8697:9;8693:22;8625:100;;8748:257;;8860:2;8848:9;8839:7;8835:23;8831:32;8828:2;;;8876:1;8873;8866:12;8828:2;8911:1;8928:61;8981:7;8961:9;8928:61;;9012:288;;9139:3;9127:9;9118:7;9114:23;9110:33;9107:2;;;9156:1;9153;9146:12;9107:2;9191:1;9208:76;9276:7;9256:9;9208:76;;9307:285;;9433:2;9421:9;9412:7;9408:23;9404:32;9401:2;;;9449:1;9446;9439:12;9401:2;9484:1;9501:75;9568:7;9548:9;9501:75;;9599:989;;;;;;;;9802:3;9790:9;9781:7;9777:23;9773:33;9770:2;;;9819:1;9816;9809:12;9770:2;9854:1;9871:52;9915:7;9895:9;9871:52;;;9861:62;;9833:96;9960:2;9978:52;10022:7;10013:6;10002:9;9998:22;9978:52;;;9968:62;;9939:97;10067:2;10085:52;10129:7;10120:6;10109:9;10105:22;10085:52;;;10075:62;;10046:97;10174:2;10192:53;10237:7;10228:6;10217:9;10213:22;10192:53;;;10182:63;;10153:98;10282:3;10301:53;10346:7;10337:6;10326:9;10322:22;10301:53;;;10291:63;;10261:99;10391:3;10410:53;10455:7;10446:6;10435:9;10431:22;10410:53;;;10400:63;;10370:99;10500:3;10519:53;10564:7;10555:6;10544:9;10540:22;10519:53;;;10509:63;;10479:99;9764:824;;;;;;;;;;;10595:241;;10699:2;10687:9;10678:7;10674:23;10670:32;10667:2;;;10715:1;10712;10705:12;10667:2;10750:1;10767:53;10812:7;10792:9;10767:53;;10843:263;;10958:2;10946:9;10937:7;10933:23;10929:32;10926:2;;;10974:1;10971;10964:12;10926:2;11009:1;11026:64;11082:7;11062:9;11026:64;;11113:366;;;11234:2;11222:9;11213:7;11209:23;11205:32;11202:2;;;11250:1;11247;11240:12;11202:2;11285:1;11302:53;11347:7;11327:9;11302:53;;11486:611;;;;;11638:3;11626:9;11617:7;11613:23;11609:33;11606:2;;;11655:1;11652;11645:12;11606:2;11690:1;11707:53;11752:7;11732:9;11707:53;;;11697:63;;11669:97;11797:2;11815:53;11860:7;11851:6;11840:9;11836:22;11815:53;;;11805:63;;11776:98;11905:2;11923:53;11968:7;11959:6;11948:9;11944:22;11923:53;;;11913:63;;11884:98;12013:2;12031:50;12073:7;12064:6;12053:9;12049:22;12031:50;;12104:617;;;;;12259:3;12247:9;12238:7;12234:23;12230:33;12227:2;;;12276:1;12273;12266:12;12227:2;12311:1;12328:53;12373:7;12353:9;12328:53;;;12318:63;;12290:97;12418:2;12436:53;12481:7;12472:6;12461:9;12457:22;12436:53;;;12426:63;;12397:98;12526:2;12544:53;12589:7;12580:6;12569:9;12565:22;12544:53;;;12534:63;;12505:98;12634:2;12652:53;12697:7;12688:6;12677:9;12673:22;12652:53;;12728:485;;;;12863:2;12851:9;12842:7;12838:23;12834:32;12831:2;;;12879:1;12876;12869:12;12831:2;12914:1;12931:53;12976:7;12956:9;12931:53;;;12921:63;;12893:97;13021:2;13039:53;13084:7;13075:6;13064:9;13060:22;13039:53;;;13029:63;;13000:98;13129:2;13147:50;13189:7;13180:6;13169:9;13165:22;13147:50;;13220:491;;;;13358:2;13346:9;13337:7;13333:23;13329:32;13326:2;;;13374:1;13371;13364:12;13326:2;13409:1;13426:53;13471:7;13451:9;13426:53;;;13416:63;;13388:97;13516:2;13534:53;13579:7;13570:6;13559:9;13555:22;13534:53;;;13524:63;;13495:98;13624:2;13642:53;13687:7;13678:6;13667:9;13663:22;13642:53;;13718:617;;;;;13873:3;13861:9;13852:7;13848:23;13844:33;13841:2;;;13890:1;13887;13880:12;13841:2;13925:1;13942:53;13987:7;13967:9;13942:53;;;13932:63;;13904:97;14032:2;14050:53;14095:7;14086:6;14075:9;14071:22;14050:53;;;14040:63;;14011:98;14140:2;14158:53;14203:7;14194:6;14183:9;14179:22;14158:53;;;14148:63;;14119:98;14248:2;14266:53;14311:7;14302:6;14291:9;14287:22;14266:53;;14342:1121;;;;;;;;;14565:3;14553:9;14544:7;14540:23;14536:33;14533:2;;;14582:1;14579;14572:12;14533:2;14617:1;14634:53;14679:7;14659:9;14634:53;;;14624:63;;14596:97;14724:2;14742:53;14787:7;14778:6;14767:9;14763:22;14742:53;;;14732:63;;14703:98;14832:2;14850:53;14895:7;14886:6;14875:9;14871:22;14850:53;;;14840:63;;14811:98;14940:2;14958:53;15003:7;14994:6;14983:9;14979:22;14958:53;;;14948:63;;14919:98;15048:3;15067:53;15112:7;15103:6;15092:9;15088:22;15067:53;;;15057:63;;15027:99;15157:3;15176:53;15221:7;15212:6;15201:9;15197:22;15176:53;;;15166:63;;15136:99;15266:3;15285:53;15330:7;15321:6;15310:9;15306:22;15285:53;;;15275:63;;15245:99;15375:3;15394:53;15439:7;15430:6;15419:9;15415:22;15394:53;;;15384:63;;15354:99;14527:936;;;;;;;;;;;;15471:173;;15558:46;15600:3;15592:6;15558:46;;;-1:-1;;15633:4;15624:14;;15551:93;15653:257;;15780:90;15866:3;15858:6;15780:90;;;-1:-1;;15899:4;15890:14;;15773:137;15918:142;16009:45;16048:5;16009:45;;;16004:3;15997:58;15991:69;;;16067:137;16166:32;16192:5;16166:32;;16718:654;;16849:50;16893:5;16849:50;;;16912:76;16981:6;16976:3;16912:76;;;16905:83;;17009:52;17055:5;17009:52;;;17081:7;17109:1;17094:256;17119:6;17116:1;17113:13;17094:256;;;17186:6;17180:13;17207:63;17266:3;17251:13;17207:63;;;17200:70;;17287:56;17336:6;17287:56;;;17277:66;-1:-1;;17141:1;17134:9;17094:256;;;-1:-1;17363:3;;16828:544;-1:-1;;;;;16828:544;17461:850;;17646:74;17714:5;17646:74;;;17733:106;17832:6;17827:3;17733:106;;;17726:113;;17860:76;17930:5;17860:76;;;17956:7;17984:1;17969:320;17994:6;17991:1;17988:13;17969:320;;;18061:6;18055:13;18082:103;18181:3;18166:13;18082:103;;;18075:110;;18202:80;18275:6;18202:80;;;18192:90;-1:-1;;18016:1;18009:9;17969:320;;18319:104;18396:21;18411:5;18396:21;;18430:110;18511:23;18528:5;18511:23;;18548:371;;18708:67;18772:2;18767:3;18708:67;;;18808:34;18788:55;;-1:-1;;;18872:2;18863:12;;18856:26;18910:2;18901:12;;18694:225;-1:-1;;18694:225;18928:388;;19088:67;19152:2;19147:3;19088:67;;;19188:34;19168:55;;19257:21;19252:2;19243:12;;19236:43;19307:2;19298:12;;19074:242;-1:-1;;19074:242;19325:328;;19485:67;19549:2;19544:3;19485:67;;;19585:30;19565:51;;19644:2;19635:12;;19471:182;-1:-1;;19471:182;19662:386;;19822:67;19886:2;19881:3;19822:67;;;19922:34;19902:55;;19991:19;19986:2;19977:12;;19970:41;20039:2;20030:12;;19808:240;-1:-1;;19808:240;20057:317;;20217:67;20281:2;20276:3;20217:67;;;20317:19;20297:40;;20365:2;20356:12;;20203:171;-1:-1;;20203:171;20383:319;;20543:67;20607:2;20602:3;20543:67;;;20643:21;20623:42;;20693:2;20684:12;;20529:173;-1:-1;;20529:173;20711:384;;20871:67;20935:2;20930:3;20871:67;;;20971:34;20951:55;;21040:17;21035:2;21026:12;;21019:39;21086:2;21077:12;;20857:238;-1:-1;;20857:238;21104:375;;21264:67;21328:2;21323:3;21264:67;;;21364:34;21344:55;;21433:8;21428:2;21419:12;;21412:30;21470:2;21461:12;;21250:229;-1:-1;;21250:229;21488:329;;21648:67;21712:2;21707:3;21648:67;;;21748:31;21728:52;;21808:2;21799:12;;21634:183;-1:-1;;21634:183;21826:315;;21986:67;22050:2;22045:3;21986:67;;;22086:17;22066:38;;22132:2;22123:12;;21972:169;-1:-1;;21972:169;22150:327;;22310:67;22374:2;22369:3;22310:67;;;22410:29;22390:50;;22468:2;22459:12;;22296:181;-1:-1;;22296:181;22486:372;;22646:67;22710:2;22705:3;22646:67;;;22746:34;22726:55;;-1:-1;;;22810:2;22801:12;;22794:27;22849:2;22840:12;;22632:226;-1:-1;;22632:226;22867:318;;23027:67;23091:2;23086:3;23027:67;;;23127:20;23107:41;;23176:2;23167:12;;23013:172;-1:-1;;23013:172;23194:319;;23354:67;23418:2;23413:3;23354:67;;;23454:21;23434:42;;23504:2;23495:12;;23340:173;-1:-1;;23340:173;23522:328;;23682:67;23746:2;23741:3;23682:67;;;23782:30;23762:51;;23841:2;23832:12;;23668:182;-1:-1;;23668:182;23859:320;;24019:67;24083:2;24078:3;24019:67;;;24119:22;24099:43;;24170:2;24161:12;;24005:174;-1:-1;;24005:174;24188:327;;24348:67;24412:2;24407:3;24348:67;;;24448:29;24428:50;;24506:2;24497:12;;24334:181;-1:-1;;24334:181;24524:332;;24684:67;24748:2;24743:3;24684:67;;;24784:34;24764:55;;24847:2;24838:12;;24670:186;-1:-1;;24670:186;24865:318;;25025:67;25089:2;25084:3;25025:67;;;25125:20;25105:41;;25174:2;25165:12;;25011:172;-1:-1;;25011:172;25192:373;;25352:67;25416:2;25411:3;25352:67;;;25452:34;25432:55;;-1:-1;;;25516:2;25507:12;;25500:28;25556:2;25547:12;;25338:227;-1:-1;;25338:227;25574:324;;25734:67;25798:2;25793:3;25734:67;;;25834:26;25814:47;;25889:2;25880:12;;25720:178;-1:-1;;25720:178;25907:322;;26067:67;26131:2;26126:3;26067:67;;;26167:24;26147:45;;26220:2;26211:12;;26053:176;-1:-1;;26053:176;26238:387;;26398:67;26462:2;26457:3;26398:67;;;26498:34;26478:55;;26567:20;26562:2;26553:12;;26546:42;26616:2;26607:12;;26384:241;-1:-1;;26384:241;26634:383;;26794:67;26858:2;26853:3;26794:67;;;26894:34;26874:55;;26963:16;26958:2;26949:12;;26942:38;27008:2;26999:12;;26780:237;-1:-1;;26780:237;27026:317;;27186:67;27250:2;27245:3;27186:67;;;27286:19;27266:40;;27334:2;27325:12;;27172:171;-1:-1;;27172:171;27426:507;27647:23;;27575:4;27566:14;;;27676:71;27570:3;27647:23;27676:71;;;27595:158;27829:4;27822:5;27818:16;27812:23;27841:71;27906:4;27901:3;27897:14;27883:12;27841:71;;28491:128;28596:18;;28590:29;28709:456;28939:23;;28872:4;28975:38;;;28709:456;;28863:14;;;;29028:99;28863:14;28939:23;29028:99;;;29020:107;28845:320;-1:-1;;;;;28845:320;29313:110;29394:23;29411:5;29394:23;;29430:103;29503:24;29521:5;29503:24;;29778:213;29896:2;29881:18;;29910:71;29885:9;29954:6;29910:71;;29998:340;30152:2;30137:18;;30166:79;30141:9;30218:6;30166:79;;;30256:72;30324:2;30313:9;30309:18;30300:6;30256:72;;;30123:215;;;;;;30345:467;30535:2;30520:18;;30549:79;30524:9;30601:6;30549:79;;;30639:80;30715:2;30704:9;30700:18;30691:6;30639:80;;;30730:72;30798:2;30787:9;30783:18;30774:6;30730:72;;30819:579;31037:3;31022:19;;31052:79;31026:9;31104:6;31052:79;;;31142:80;31218:2;31207:9;31203:18;31194:6;31142:80;;;31233:72;31301:2;31290:9;31286:18;31277:6;31233:72;;;31316;31384:2;31373:9;31369:18;31360:6;31316:72;;31405:451;31587:2;31572:18;;31601:79;31576:9;31653:6;31601:79;;;31691:72;31759:2;31748:9;31744:18;31735:6;31691:72;;31863:340;32017:2;32002:18;;32031:79;32006:9;32083:6;32031:79;;;32121:72;32189:2;32178:9;32174:18;32165:6;32121:72;;32210:1271;32606:3;32591:19;;32621:87;32595:9;32681:6;32621:87;;;32719:72;32787:2;32776:9;32772:18;32763:6;32719:72;;;32802:88;32886:2;32875:9;32871:18;32862:6;32802:88;;;32901:72;32969:2;32958:9;32954:18;32945:6;32901:72;;;32984:73;33052:3;33041:9;33037:19;33028:6;32984:73;;;33068;33136:3;33125:9;33121:19;33112:6;33068:73;;;33152:67;33214:3;33203:9;33199:19;33190:6;33152:67;;;33230:73;33298:3;33287:9;33283:19;33274:6;33230:73;;;33314;33382:3;33371:9;33367:19;33358:6;33314:73;;;33398;33466:3;33455:9;33451:19;33442:6;33398:73;;;32577:904;;;;;;;;;;;;;;33488:563;33698:3;33683:19;;33713:79;33687:9;33765:6;33713:79;;;33803:72;33871:2;33860:9;33856:18;33847:6;33803:72;;34058:451;34240:2;34225:18;;34254:71;34229:9;34298:6;34254:71;;34516:435;34690:2;34675:18;;34704:71;34679:9;34748:6;34704:71;;34958:324;35104:2;35089:18;;35118:71;35093:9;35162:6;35118:71;;35289:441;35497:2;35511:47;;;35482:18;;35572:148;35482:18;35706:6;35572:148;;35737:201;35849:2;35834:18;;35863:65;35838:9;35901:6;35863:65;;35945:209;36061:2;36046:18;;36075:69;36050:9;36117:6;36075:69;;36161:407;36352:2;36366:47;;;36337:18;;36427:131;36337:18;36427:131;;36575:407;36766:2;36780:47;;;36751:18;;36841:131;36751:18;36841:131;;36989:407;37180:2;37194:47;;;37165:18;;37255:131;37165:18;37255:131;;37403:407;37594:2;37608:47;;;37579:18;;37669:131;37579:18;37669:131;;37817:407;38008:2;38022:47;;;37993:18;;38083:131;37993:18;38083:131;;38231:407;38422:2;38436:47;;;38407:18;;38497:131;38407:18;38497:131;;38645:407;38836:2;38850:47;;;38821:18;;38911:131;38821:18;38911:131;;39059:407;39250:2;39264:47;;;39235:18;;39325:131;39235:18;39325:131;;39473:407;39664:2;39678:47;;;39649:18;;39739:131;39649:18;39739:131;;39887:407;40078:2;40092:47;;;40063:18;;40153:131;40063:18;40153:131;;40301:407;40492:2;40506:47;;;40477:18;;40567:131;40477:18;40567:131;;40715:407;40906:2;40920:47;;;40891:18;;40981:131;40891:18;40981:131;;41129:407;41320:2;41334:47;;;41305:18;;41395:131;41305:18;41395:131;;41543:407;41734:2;41748:47;;;41719:18;;41809:131;41719:18;41809:131;;41957:407;42148:2;42162:47;;;42133:18;;42223:131;42133:18;42223:131;;42371:407;42562:2;42576:47;;;42547:18;;42637:131;42547:18;42637:131;;42785:407;42976:2;42990:47;;;42961:18;;43051:131;42961:18;43051:131;;43199:407;43390:2;43404:47;;;43375:18;;43465:131;43375:18;43465:131;;43613:407;43804:2;43818:47;;;43789:18;;43879:131;43789:18;43879:131;;44027:407;44218:2;44232:47;;;44203:18;;44293:131;44203:18;44293:131;;44441:407;44632:2;44646:47;;;44617:18;;44707:131;44617:18;44707:131;;44855:407;45046:2;45060:47;;;45031:18;;45121:131;45031:18;45121:131;;45269:407;45460:2;45474:47;;;45445:18;;45535:131;45445:18;45535:131;;45683:407;45874:2;45888:47;;;45859:18;;45949:131;45859:18;45949:131;;46097:407;46288:2;46302:47;;;46273:18;;46363:131;46273:18;46363:131;;46511:496;46739:2;46724:18;;46753:105;46728:9;46831:6;46753:105;;;46869:128;46993:2;46982:9;46978:18;46969:6;46869:128;;47014:385;47194:2;47208:47;;;47179:18;;47269:120;47179:18;47375:6;47269:120;;47406:412;47592:2;47577:18;;47606:111;47581:9;47690:6;47606:111;;47825:209;47941:2;47926:18;;47955:69;47930:9;47997:6;47955:69;;48041:213;48159:2;48144:18;;48173:71;48148:9;48217:6;48173:71;;48261:324;48407:2;48392:18;;48421:71;48396:9;48465:6;48421:71;;48592:547;48794:3;48779:19;;48809:71;48783:9;48853:6;48809:71;;49146:647;49370:3;49355:19;;49385:71;49359:9;49429:6;49385:71;;;49467:72;49535:2;49524:9;49520:18;49511:6;49467:72;;;49550;49618:2;49607:9;49603:18;49594:6;49550:72;;;49633;49701:2;49690:9;49686:18;49677:6;49633:72;;;49716:67;49778:3;49767:9;49763:19;49754:6;49716:67;;;49341:452;;;;;;;;;49800:659;50030:3;50015:19;;50045:71;50019:9;50089:6;50045:71;;;50127:72;50195:2;50184:9;50180:18;50171:6;50127:72;;;50210;50278:2;50267:9;50263:18;50254:6;50210:72;;;50293;50361:2;50350:9;50346:18;50337:6;50293:72;;;50376:73;50444:3;50433:9;50429:19;50420:6;50376:73;;50466:256;50528:2;50522:9;50554:17;;;50629:18;50614:34;;50650:22;;;50611:62;50608:2;;;50686:1;50683;50676:12;50608:2;50702;50695:22;50506:216;;-1:-1;50506:216;50729:321;;50872:18;50864:6;50861:30;50858:2;;;50904:1;50901;50894:12;50858:2;-1:-1;51035:4;50971;50948:17;;;;-1:-1;;50944:33;51025:15;;50795:255;51057:147;51177:4;51168:14;;51125:79;51389:133;51488:12;;51459:63;51940:168;52048:19;;;52097:4;52088:14;;52041:67;52495:91;;52557:24;52575:5;52557:24;;52699:85;52765:13;52758:21;;52741:43;52791:144;52863:66;52852:78;;52835:100;52942:84;53014:6;53003:18;;52986:40;53033:121;-1:-1;;;;;53095:54;;53078:76;53240:129;;53327:37;53358:5;53376:121;53455:37;53486:5;53455:37;;53620:145;53701:6;53696:3;53691;53678:30;-1:-1;53757:1;53739:16;;53732:27;53671:94;53773:117;53842:24;53860:5;53842:24;;;53835:5;53832:35;53822:2;;53881:1;53878;53871:12;53822:2;53816:74;;54037:111;54103:21;54118:5;54103:21;;54155:115;54223:23;54240:5;54223:23;;54277:117;54346:24;54364:5;54346:24;

Swarm Source

bzzr://a6d3274aa9a9a8830400220ecf38acd9853a2327a0871601fa7cdcd0f1f40df6

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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