Address Details
contract

0x0d94F6119982Ee3A85f99cD5e24901e8319aCad3

Creator
0x4f476c–6a49a1 at 0x2422b1–0eed1d
Balance
0 CELO ( )
Locked CELO Balance
0.00 CELO
Voting CELO Balance
0.00 CELO
Pending Unlocked Gold
0.00 CELO
Tokens
Fetching tokens...
Transactions
1 Transactions
Transfers
11 Transfers
Gas Used
125,284
Last Balance Update
11736349
This contract has been verified via Sourcify. View contract in Sourcify repository
Contract name:
OpenBiSeaAuction




Optimization enabled
true
Compiler version
v0.6.8+commit.0bbfe453




Optimization runs
200
EVM Version
byzantium




Verified at
2021-10-23T08:19:45.843551Z

/Users/alex/Desktop/repos/CRAD-DeFi/v2.0/poolRegistry/contracts/OpenBiSeaAuction.sol

// SPDX-License-Identifier: UNLICENSED
// (c) Oleksii Vynogradov 2021, All rights reserved, contact alex@cfc.io if you like to use code
pragma solidity ^0.6.8;
import "./access/TeamRole.sol";
import "./utils/EnumerableUintSet.sol";
import "./utils/EnumerableSet.sol";
import "./math/SafeMath.sol";
import "./interface/IERC721.sol";
import "./interface/IERC1155.sol";
import "./interface/IERC721Receiver.sol";
import "./interface/IERC1155Receiver.sol";
import "./interface/IERC20.sol";
import "./interface/IPoolRegistry.sol";

contract OpenBiSeaAuction is TeamRole,IERC721Receiver,IERC1155Receiver {

    uint256 private _totalIncomeNFT;
    uint256 private _initialPriceInt;
    uint256 private _auctionCreationFeeMultiplier;
    uint256 private _auctionContractFeeMultiplier;
    address private _tokenForTokensale;
    address private _openBiSeaMainContract;
    address private _busdContract;
    IPoolRegistry private _poolRegistry;

    constructor (
        uint256 initialPriceInt,
        uint256 auctionCreationFeeMultiplier,
        uint256 auctionContractFeeMultiplier,
        address tokenForTokensale,
        address openBiSeaMainContract,
        address busdContract,
        address poolRegistry
    ) public {
        _initialPriceInt = initialPriceInt;
        _auctionCreationFeeMultiplier = auctionCreationFeeMultiplier;
        _auctionContractFeeMultiplier = auctionContractFeeMultiplier;
        _tokenForTokensale = tokenForTokensale;
        _openBiSeaMainContract = openBiSeaMainContract;
        _busdContract = busdContract;
        _poolRegistry = IPoolRegistry(poolRegistry);
    }

    mapping(address => uint256) private _consumersRevenueAmount;

    using SafeMath for uint256;

    using EnumerableUintSet for EnumerableUintSet.UintSet;
    using EnumerableSet for EnumerableSet.AddressSet;

    EnumerableSet.AddressSet private _contractsWhitelisted;
    event ContractNFTWhitelisted(address indexed contractNFT);
    event ContractNFTDeWhitelisted(address indexed contractNFT);

    function isContractNFTWhitelisted( address _contractNFT ) public view returns (bool) {
        return _contractsWhitelisted.contains(_contractNFT);
    }
    function contractsNFTWhitelisted() public view returns (address[] memory) {
        return _contractsWhitelisted.collection();
    }

    function whitelistContractAdmin( address _contractNFT ) public onlyTeam {
        _contractsWhitelisted.add(_contractNFT);
        emit ContractNFTWhitelisted(_contractNFT);
    }
    function deWhitelistContractAdmin( address _contractNFT ) public onlyTeam {
        _contractsWhitelisted.remove(_contractNFT);
        emit ContractNFTDeWhitelisted(_contractNFT);
    }

    function setAuctionCreationFeeMultiplierAdmin( uint256 auctionCreationFeeMultiplier ) public onlyTeam {
        _auctionCreationFeeMultiplier = auctionCreationFeeMultiplier;
    }

    function whitelistContractCreator( address _contractNFT, uint256 fee ) public  {
        require(msg.sender == _openBiSeaMainContract, "OpenBiSea: only main contract can send it");
        _totalIncomeNFT = _totalIncomeNFT.add(fee);
        _contractsWhitelisted.add(_contractNFT);
        emit ContractNFTWhitelisted(_contractNFT);
    }

    function whitelistContractCreatorTokens( address _contractNFT, uint256 fee ) public {
        require(msg.sender == _openBiSeaMainContract, "OpenBiSea: only main contract can send it");
        _totalIncomeNFT = _totalIncomeNFT.add(fee);
        _contractsWhitelisted.add(_contractNFT);
        emit ContractNFTWhitelisted(_contractNFT);
    }

    struct Auction {
        address seller;
        address latestBidder;
        uint256 latestBidTime;
        uint256 deadline;
        uint256 price;
        bool isUSD;
    }

    mapping(uint256 => Auction) private _contractsPlusTokenIdsAuction;
    mapping(address => EnumerableUintSet.UintSet) private _contractsTokenIdsList;
    mapping(address => uint256) private _consumersDealFirstDate;
    mapping(uint256 => address) private _auctionIDtoSellerAddress;

    function getNFTsAuctionList( address _contractNFT) public view returns (uint256[] memory) {
        return _contractsTokenIdsList[_contractNFT].collection();
    }
    function sellerAddressFor( uint256 _auctionID) public view returns (address) {
        return _auctionIDtoSellerAddress[_auctionID];
    }

    function revenueFor( address _consumer) public view returns (uint256) {
        return _consumersRevenueAmount[_consumer];
    }
    function getAuction(
        address _contractNFT,
        uint256 _tokenId
    ) public view returns
    (
        address seller,
        address latestBidder,
        uint256 latestBidTime,
        uint256 deadline,
        uint price,
        bool isUSD
    ) {
        uint256 index = uint256(_contractNFT).add(_tokenId);
        return (
        _contractsPlusTokenIdsAuction[index].seller,
        _contractsPlusTokenIdsAuction[index].latestBidder,
        _contractsPlusTokenIdsAuction[index].latestBidTime,
        _contractsPlusTokenIdsAuction[index].deadline,
        _contractsPlusTokenIdsAuction[index].price,
        _contractsPlusTokenIdsAuction[index].isUSD);
    }

    event AuctionNFTCreated(address indexed contractNFT, uint256 tokenId,uint256 price,uint256 deadline, bool isERC1155,address seller, bool isUSD);

    function createAuction( address _contractNFT, uint256 _tokenId, uint256 _price, uint256 _deadline, bool _isERC1155, address _sender, bool _isUSD ) public {
        require(msg.sender == _openBiSeaMainContract, "OpenBiSea: only main contract can send it");
        require(_contractsWhitelisted.contains(_contractNFT), "OpenBiSea: contract must be whitelisted");
        require(!_contractsTokenIdsList[_contractNFT].contains(uint256(_sender).add(_tokenId)), "OpenBiSea: auction is already created");
        require(IERC20(_tokenForTokensale).balanceOf(_sender) >= (10 ** uint256(18)).mul(_auctionCreationFeeMultiplier).div(10000), "OpenBiSea: you must have 1 OBS on account to start");
        if (_isERC1155) {
            IERC1155(_contractNFT).safeTransferFrom( _sender, address(this), _tokenId,1, "0x0");
        } else {
            IERC721(_contractNFT).safeTransferFrom( _sender, address(this), _tokenId);
        }
        Auction memory _auction = Auction({
            seller: _sender,
            latestBidder: address(0),
            latestBidTime: 0,
            deadline: _deadline,
            price:_price,
            isUSD:_isUSD
        });
        _contractsPlusTokenIdsAuction[uint256(_contractNFT).add(_tokenId)] = _auction;
        _auctionIDtoSellerAddress[uint256(_sender).add(_tokenId)] = _sender;
        _contractsTokenIdsList[_contractNFT].add(uint256(_sender).add(_tokenId));
        emit AuctionNFTCreated( _contractNFT, _tokenId, _price, _deadline, _isERC1155, _sender, _isUSD);
    }
    function updateFirstDateAndValue(address buyer, address seller, uint256 value, bool isUSD) private {
        uint256 valueFinal = value;
        if (isUSD) {
            uint256 priceMainToUSD;
            uint8 decimals;
            (priceMainToUSD,decimals) = _poolRegistry.getOracleContract().getLatestPrice();
            uint256 tokensToPay;
            valueFinal = value.div((priceMainToUSD).div(10 ** uint256(decimals)));
        }
        _totalIncomeNFT = _totalIncomeNFT.add(valueFinal);
        _consumersRevenueAmount[buyer] = _consumersRevenueAmount[buyer].add(value);
        _consumersRevenueAmount[seller] = _consumersRevenueAmount[seller].add(value);
        if (_consumersDealFirstDate[buyer] == 0) {
            _consumersDealFirstDate[buyer] = now;
        }
        if (_consumersDealFirstDate[seller] == 0) {
            _consumersDealFirstDate[seller] = now;
        }
    }
    event AuctionNFTBid(address indexed contractNFT, uint256 tokenId,uint256 price,uint256 deadline, bool isERC1155,address buyer,address seller, bool isDeal, bool isUSD);

    function _bidWin (
        bool _isERC1155,
        address _contractNFT,
        address _sender,
        uint256 _tokenId,
        address _auctionSeller,
        uint256 _price,
        bool _auctionIsUSD,
        uint256 _deadline

    ) private  {
        if (_isERC1155) {
            IERC1155(_contractNFT).safeTransferFrom( address(this), _sender, _tokenId, 1, "0x0");
        } else {
            IERC721(_contractNFT).safeTransferFrom( address(this), _sender, _tokenId);
        }
        updateFirstDateAndValue(_sender, _auctionSeller, _price, _auctionIsUSD);
        emit AuctionNFTBid(_contractNFT,_tokenId,_price,_deadline,_isERC1155,_sender,_auctionSeller, true, _auctionIsUSD);
        delete _contractsPlusTokenIdsAuction[ uint256(_contractNFT).add(_tokenId)];
        delete _auctionIDtoSellerAddress[uint256(_auctionSeller).add(_tokenId)];
        _contractsTokenIdsList[_contractNFT].remove(uint256(_auctionSeller).add(_tokenId));
    }
    function bid( address _contractNFT,uint256 _tokenId, uint256 _price, bool _isERC1155, address _sender ) public returns (bool, uint256, address, bool) {
        require(msg.sender == _openBiSeaMainContract, "OpenBiSea: only main contract can send it");
        require(_contractsWhitelisted.contains(_contractNFT), "OpenBiSea: contract must be whitelisted");
        Auction storage auction = _contractsPlusTokenIdsAuction[uint256(_contractNFT).add(_tokenId)];
        require(auction.seller != address(0), "OpenBiSea: wrong seller address");
        require(_contractsTokenIdsList[_contractNFT].contains(uint256(auction.seller).add(_tokenId)), "OpenBiSea: auction is not created"); // ERC1155 can have more than 1 auction with same ID and , need mix tokenId with seller address
        require(_price >= auction.price, "OpenBiSea: price must be more than previous bid");

        if (block.timestamp > auction.deadline) {
            address auctionSeller = address(auction.seller);
            bool auctionIsUSD = bool(auction.isUSD);
            _bidWin(
                _isERC1155,
                _contractNFT,
                _sender,
                _tokenId,
                auctionSeller,
                _price,
                auctionIsUSD,
                auction.deadline
            );
            return (true,0,auctionSeller,auctionIsUSD);
        } else {
            auction.price = _price;
            auction.latestBidder = _sender;
            auction.latestBidTime = block.timestamp;
            emit AuctionNFTBid(_contractNFT,_tokenId,_price,auction.deadline,_isERC1155,_sender,auction.seller, false, auction.isUSD);
            if (auction.latestBidder != address(0)) {
                return (false,auction.price,auction.latestBidder,auction.isUSD);
            }
        }
        return (false,0, address(0),false);
    }
    event AuctionNFTCanceled(address indexed contractNFT, uint256 tokenId,uint256 price,uint256 deadline, bool isERC1155,address seller);

    function _cancelAuction( address _contractNFT, uint256 _tokenId, address _sender, bool _isERC1155, bool _isAdmin ) private {
        uint256 index = uint256(_contractNFT).add(_tokenId);

        Auction storage auction = _contractsPlusTokenIdsAuction[index];
        if (!_isAdmin) require(auction.seller == _sender, "OpenBiSea: only seller can cancel");
        if (_isERC1155) {
            IERC1155(_contractNFT).safeTransferFrom(address(this),auction.seller, _tokenId,1,"0x0");
        } else {
            IERC721(_contractNFT).safeTransferFrom(address(this),auction.seller, _tokenId);
        }
        address auctionSeller = address(auction.seller);
        emit AuctionNFTCanceled(_contractNFT,_tokenId,auction.price,auction.deadline,_isERC1155,auction.seller);
        delete _contractsPlusTokenIdsAuction[index];
        delete _auctionIDtoSellerAddress[uint256(auctionSeller).add(_tokenId)];
        _contractsTokenIdsList[_contractNFT].remove(uint256(auctionSeller).add(_tokenId));
    }

    function cancelAuction( address _contractNFT, uint256 _tokenId, address _sender , bool _isERC1155 ) public {
        require(msg.sender == _openBiSeaMainContract, "OpenBiSea: only main contract can send it");
        require(_contractsWhitelisted.contains(_contractNFT), "OpenBiSea: contract must be whitelisted");
        require(_contractsTokenIdsList[_contractNFT].contains(uint256(_sender).add(_tokenId)), "OpenBiSea: auction is not created");
        _cancelAuction( _contractNFT, _tokenId, _sender, _isERC1155, false );
    }
    function cancelAuctionAdmin( address _contractNFT, uint256 _tokenId, bool _isERC1155 ) public onlyTeam {
        _cancelAuction( _contractNFT, _tokenId, address(0) , _isERC1155, true );
    }
    mapping(address => uint256) private _consumersReceivedMainTokenLatestDate;
    uint256 minimalTotalIncome1 = 10000;
    uint256 minimalTotalIncome2 = 500000;
    uint256 minimalTotalIncome3 = 5000000;
    function _tokensToDistribute(uint256 amountTotalUSDwei, uint256 priceMainToUSD, bool newInvestor) private view returns (uint256,uint256) {
        uint256 balanceLeavedOnThisContractProjectTokens = IERC20(_tokenForTokensale).balanceOf(_openBiSeaMainContract);/* if total sales > $10k and < $500k, balanceLeavedOnThisContractProjectTokens = balanceLeavedOnThisContractProjectTokens * 0.1%   if total sales >  $500k and total sales < $5M, balanceLeavedOnThisContractProjectTokens = balanceLeavedOnThisContractProjectTokens * 1% if total sales >  $5M, balanceLeavedOnThisContractProjectTokens = balanceLeavedOnThisContractProjectTokens * 10% */
        uint256 totalIncomeUSDwei = _totalIncomeNFT.mul(priceMainToUSD);
        if (totalIncomeUSDwei < minimalTotalIncome1.mul(10 ** uint256(18))) {
            balanceLeavedOnThisContractProjectTokens = balanceLeavedOnThisContractProjectTokens.div(10000); // balanceLeavedOnThisContractProjectTokens = 0;
        } else if (totalIncomeUSDwei < minimalTotalIncome2.mul(10 ** uint256(18))) {
            balanceLeavedOnThisContractProjectTokens = balanceLeavedOnThisContractProjectTokens.div(1000);
        } else if (totalIncomeUSDwei < minimalTotalIncome3.mul(10 ** uint256(18))) {
            balanceLeavedOnThisContractProjectTokens = balanceLeavedOnThisContractProjectTokens.div(30);
        } else {
            balanceLeavedOnThisContractProjectTokens = balanceLeavedOnThisContractProjectTokens.div(10);
        } /*  amountTotalUSD / TAV - his percent of TAV balanceLeavedOnThisContractProjectTokens * his percent of pool = amount of tokens to pay if (newInvestor) amount of tokens to pay = amount of tokens to pay * 1.1 _investorsReceivedMainToken[msg.sender][time] = amount of tokens to pay*/
        uint256 percentOfSales = amountTotalUSDwei.mul(10000).div(totalIncomeUSDwei);
        if (newInvestor) {
            return (balanceLeavedOnThisContractProjectTokens.mul(percentOfSales).div(10000).mul(11).div(10),percentOfSales);
        } else {
            return (balanceLeavedOnThisContractProjectTokens.mul(percentOfSales).div(10000),percentOfSales);
        }
    }

    function checkTokensForClaim( address customer, uint256 priceMainToUSD) public view returns (uint256,uint256,uint256,bool) {
        uint256 amountTotalUSDwei = _consumersRevenueAmount[customer].mul(priceMainToUSD);
        if (amountTotalUSDwei == 0) {
            return (0,0,0,false);
        }
        uint256 tokensForClaim;
        uint256 percentOfSales;
        bool newCustomer = ((now.sub(_consumersDealFirstDate[customer])) < 4 weeks);
        if (_consumersReceivedMainTokenLatestDate[customer] > now.sub(4 weeks)) {
            return (tokensForClaim,amountTotalUSDwei,percentOfSales,newCustomer);// already receive reward 4 weeks ago
        }
        (tokensForClaim, percentOfSales) = _tokensToDistribute(amountTotalUSDwei,priceMainToUSD,newCustomer);
        return (tokensForClaim,amountTotalUSDwei,percentOfSales,newCustomer);
    }
    function setConsumersReceivedMainTokenLatestDate(address _sender) public {
        require(msg.sender == _openBiSeaMainContract, "OpenBiSea: only main contract can send it");
        _consumersReceivedMainTokenLatestDate[_sender] = now;
    }

    /**
     * Always returns `IERC721Receiver.onERC721Received.selector`.
    */
    function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {
        return this.onERC721Received.selector;
    }

    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    )
    external
    override
    returns(bytes4)
    {
        return this.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    )
    external
    override
    returns(bytes4)
    {
        return this.onERC1155BatchReceived.selector;
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return this.supportsInterface(interfaceId);
    }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"uint256","name":"initialPriceInt","internalType":"uint256"},{"type":"uint256","name":"auctionCreationFeeMultiplier","internalType":"uint256"},{"type":"uint256","name":"auctionContractFeeMultiplier","internalType":"uint256"},{"type":"address","name":"tokenForTokensale","internalType":"address"},{"type":"address","name":"openBiSeaMainContract","internalType":"address"},{"type":"address","name":"busdContract","internalType":"address"},{"type":"address","name":"poolRegistry","internalType":"address"}]},{"type":"event","name":"AuctionNFTBid","inputs":[{"type":"address","name":"contractNFT","internalType":"address","indexed":true},{"type":"uint256","name":"tokenId","internalType":"uint256","indexed":false},{"type":"uint256","name":"price","internalType":"uint256","indexed":false},{"type":"uint256","name":"deadline","internalType":"uint256","indexed":false},{"type":"bool","name":"isERC1155","internalType":"bool","indexed":false},{"type":"address","name":"buyer","internalType":"address","indexed":false},{"type":"address","name":"seller","internalType":"address","indexed":false},{"type":"bool","name":"isDeal","internalType":"bool","indexed":false},{"type":"bool","name":"isUSD","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"AuctionNFTCanceled","inputs":[{"type":"address","name":"contractNFT","internalType":"address","indexed":true},{"type":"uint256","name":"tokenId","internalType":"uint256","indexed":false},{"type":"uint256","name":"price","internalType":"uint256","indexed":false},{"type":"uint256","name":"deadline","internalType":"uint256","indexed":false},{"type":"bool","name":"isERC1155","internalType":"bool","indexed":false},{"type":"address","name":"seller","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"AuctionNFTCreated","inputs":[{"type":"address","name":"contractNFT","internalType":"address","indexed":true},{"type":"uint256","name":"tokenId","internalType":"uint256","indexed":false},{"type":"uint256","name":"price","internalType":"uint256","indexed":false},{"type":"uint256","name":"deadline","internalType":"uint256","indexed":false},{"type":"bool","name":"isERC1155","internalType":"bool","indexed":false},{"type":"address","name":"seller","internalType":"address","indexed":false},{"type":"bool","name":"isUSD","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"ContractNFTDeWhitelisted","inputs":[{"type":"address","name":"contractNFT","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"ContractNFTWhitelisted","inputs":[{"type":"address","name":"contractNFT","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"OracleAdded","inputs":[{"type":"address","name":"account","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"OracleRemoved","inputs":[{"type":"address","name":"account","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"TeamAdded","inputs":[{"type":"address","name":"account","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"TeamRemoved","inputs":[{"type":"address","name":"account","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addOracle","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addTeam","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"},{"type":"uint256","name":"","internalType":"uint256"},{"type":"address","name":"","internalType":"address"},{"type":"bool","name":"","internalType":"bool"}],"name":"bid","inputs":[{"type":"address","name":"_contractNFT","internalType":"address"},{"type":"uint256","name":"_tokenId","internalType":"uint256"},{"type":"uint256","name":"_price","internalType":"uint256"},{"type":"bool","name":"_isERC1155","internalType":"bool"},{"type":"address","name":"_sender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"cancelAuction","inputs":[{"type":"address","name":"_contractNFT","internalType":"address"},{"type":"uint256","name":"_tokenId","internalType":"uint256"},{"type":"address","name":"_sender","internalType":"address"},{"type":"bool","name":"_isERC1155","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"cancelAuctionAdmin","inputs":[{"type":"address","name":"_contractNFT","internalType":"address"},{"type":"uint256","name":"_tokenId","internalType":"uint256"},{"type":"bool","name":"_isERC1155","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"},{"type":"uint256","name":"","internalType":"uint256"},{"type":"uint256","name":"","internalType":"uint256"},{"type":"bool","name":"","internalType":"bool"}],"name":"checkTokensForClaim","inputs":[{"type":"address","name":"customer","internalType":"address"},{"type":"uint256","name":"priceMainToUSD","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address[]","name":"","internalType":"address[]"}],"name":"contractsNFTWhitelisted","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"createAuction","inputs":[{"type":"address","name":"_contractNFT","internalType":"address"},{"type":"uint256","name":"_tokenId","internalType":"uint256"},{"type":"uint256","name":"_price","internalType":"uint256"},{"type":"uint256","name":"_deadline","internalType":"uint256"},{"type":"bool","name":"_isERC1155","internalType":"bool"},{"type":"address","name":"_sender","internalType":"address"},{"type":"bool","name":"_isUSD","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deWhitelistContractAdmin","inputs":[{"type":"address","name":"_contractNFT","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"seller","internalType":"address"},{"type":"address","name":"latestBidder","internalType":"address"},{"type":"uint256","name":"latestBidTime","internalType":"uint256"},{"type":"uint256","name":"deadline","internalType":"uint256"},{"type":"uint256","name":"price","internalType":"uint256"},{"type":"bool","name":"isUSD","internalType":"bool"}],"name":"getAuction","inputs":[{"type":"address","name":"_contractNFT","internalType":"address"},{"type":"uint256","name":"_tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"","internalType":"uint256[]"}],"name":"getNFTsAuctionList","inputs":[{"type":"address","name":"_contractNFT","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address[]","name":"","internalType":"address[]"}],"name":"getOracleAddresses","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address[]","name":"","internalType":"address[]"}],"name":"getTeamAddresses","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isContractNFTWhitelisted","inputs":[{"type":"address","name":"_contractNFT","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOracle","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isTeam","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bytes4","name":"","internalType":"bytes4"}],"name":"onERC1155BatchReceived","inputs":[{"type":"address","name":"operator","internalType":"address"},{"type":"address","name":"from","internalType":"address"},{"type":"uint256[]","name":"ids","internalType":"uint256[]"},{"type":"uint256[]","name":"values","internalType":"uint256[]"},{"type":"bytes","name":"data","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bytes4","name":"","internalType":"bytes4"}],"name":"onERC1155Received","inputs":[{"type":"address","name":"operator","internalType":"address"},{"type":"address","name":"from","internalType":"address"},{"type":"uint256","name":"id","internalType":"uint256"},{"type":"uint256","name":"value","internalType":"uint256"},{"type":"bytes","name":"data","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bytes4","name":"","internalType":"bytes4"}],"name":"onERC721Received","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"address","name":"","internalType":"address"},{"type":"uint256","name":"","internalType":"uint256"},{"type":"bytes","name":"","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOracle","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceTeam","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"revenueFor","inputs":[{"type":"address","name":"_consumer","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"sellerAddressFor","inputs":[{"type":"uint256","name":"_auctionID","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setAuctionCreationFeeMultiplierAdmin","inputs":[{"type":"uint256","name":"auctionCreationFeeMultiplier","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setConsumersReceivedMainTokenLatestDate","inputs":[{"type":"address","name":"_sender","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"supportsInterface","inputs":[{"type":"bytes4","name":"interfaceId","internalType":"bytes4"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"whitelistContractAdmin","inputs":[{"type":"address","name":"_contractNFT","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"whitelistContractCreator","inputs":[{"type":"address","name":"_contractNFT","internalType":"address"},{"type":"uint256","name":"fee","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"whitelistContractCreatorTokens","inputs":[{"type":"address","name":"_contractNFT","internalType":"address"},{"type":"uint256","name":"fee","internalType":"uint256"}]}]
              

Contract Creation Code

0x60806040526127106017556207a120601855624c4b406019553480156200002557600080fd5b506040516200347a3803806200347a833981810160405260e08110156200004b57600080fd5b508051602082015160408301516060840151608085015160a086015160c09096015194959394929391929091906200008c33640100000000620000f1810204565b600796909655600894909455600992909255600a8054600160a060020a0319908116600160a060020a0393841617909155600b8054821693831693909317909255600c8054831693821693909317909255600d805490911691909216179055620002a6565b6200010c60008264010000000062001b1f6200014382021704565b604051600160a060020a038216907f3f5f1db80208f0d453083a86e16909cecc1e95e2618d5d927c93ace22b8200fc90600090a250565b62000158828264010000000062000220810204565b15620001c557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b600160a060020a03166000818152600183810160209081526040808420805460ff191684179055855492830186558584528184209092018054600160a060020a03191685179055845493835260029094019093529190912055565b6000600160a060020a03821662000283576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180620034586022913960400191505060405180910390fd5b50600160a060020a03166000908152600191909101602052604090205460ff1690565b6131a280620002b66000396000f3fe608060405234801561001057600080fd5b50600436106101ec576000357c01000000000000000000000000000000000000000000000000000000009004806389e5277111610121578063bb759806116100bf578063df5dd1a51161008e578063df5dd1a514610877578063eb3b1ac21461089d578063f23a6e61146108c3578063f4c33b7014610958576101ec565b8063bb759806146106ff578063bc197c8114610725578063c8a151b414610852578063d9a431b31461086f576101ec565b8063a97e5c93116100fb578063a97e5c9314610654578063ade6a8141461067a578063b463a75c146106b3578063b68f9a6c146106d9576101ec565b806389e52771146105bc5780639b58a9a8146105c45780639f2ac7f814610600576101ec565b80634f63d3ce1161018e5780637653b556116101685780637653b556146104f65780637661892e1461052a5780637837efdc14610562578063854fe7ac1461056a576101ec565b80634f63d3ce146104535780637330aba214610481578063762a66a214610489576101ec565b806315b60639116101ca57806315b606391461039157806324851914146104075780634d3d626a1461042d5780634f580e4014610453576101ec565b806301ffc9a7146101f1578063052c09fd14610241578063150b7a0214610299575b600080fd5b61022d6004803603602081101561020757600080fd5b50357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191661097e565b604080519115158252519081900360200190f35b610249610a29565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561028557818101518382015260200161026d565b505050509050019250505060405180910390f35b61035f600480360360808110156102af57600080fd5b600160a060020a038235811692602081013590911691604082013591908101906080810160608201356401000000008111156102ea57600080fd5b8201836020820111156102fc57600080fd5b8035906020019184600183028401116401000000008311171561031e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a3a945050505050565b604080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff199092168252519081900360200190f35b6103d5600480360360a08110156103a757600080fd5b50600160a060020a038135811691602081013591604082013591606081013515159160809091013516610a63565b6040805194151585526020850193909352600160a060020a039091168383015215156060830152519081900360800190f35b61022d6004803603602081101561041d57600080fd5b5035600160a060020a0316610dca565b6102496004803603602081101561044357600080fd5b5035600160a060020a0316610de2565b61047f6004803603604081101561046957600080fd5b50600160a060020a038135169060200135610e06565b005b610249610eb2565b6104b56004803603604081101561049f57600080fd5b50600160a060020a038135169060200135610f17565b60408051600160a060020a0397881681529590961660208601528486019390935260608401919091526080830152151560a082015290519081900360c00190f35b61047f6004803603606081101561050c57600080fd5b50600160a060020a0381351690602081013590604001351515610f8a565b6105506004803603602081101561054057600080fd5b5035600160a060020a0316610fe5565b60408051918252519081900360200190f35b61047f611000565b61047f600480360360e081101561058057600080fd5b50600160a060020a038135811691602081013591604082013591606081013591608082013515159160a08101359091169060c00135151561100b565b61024961154a565b61047f600480360360808110156105da57600080fd5b50600160a060020a038135811691602081013591604082013516906060013515156115ac565b61062c6004803603604081101561061657600080fd5b50600160a060020a0381351690602001356116d9565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b61022d6004803603602081101561066a57600080fd5b5035600160a060020a03166117bf565b6106976004803603602081101561069057600080fd5b50356117d2565b60408051600160a060020a039092168252519081900360200190f35b61047f600480360360208110156106c957600080fd5b5035600160a060020a03166117ed565b61022d600480360360208110156106ef57600080fd5b5035600160a060020a0316611840565b61047f6004803603602081101561071557600080fd5b5035600160a060020a0316611853565b61035f600480360360a081101561073b57600080fd5b600160a060020a03823581169260208101359091169181019060608101604082013564010000000081111561076f57600080fd5b82018360208201111561078157600080fd5b803590602001918460208302840111640100000000831117156107a357600080fd5b9193909290916020810190356401000000008111156107c157600080fd5b8201836020820111156107d357600080fd5b803590602001918460208302840111640100000000831117156107f557600080fd5b91939092909160208101903564010000000081111561081357600080fd5b82018360208201111561082557600080fd5b8035906020019184600183028401116401000000008311171561084757600080fd5b5090925090506118bb565b61047f6004803603602081101561086857600080fd5b50356118e8565b61047f611934565b61047f6004803603602081101561088d57600080fd5b5035600160a060020a0316611984565b61047f600480360360208110156108b357600080fd5b5035600160a060020a03166119d4565b61035f600480360360a08110156108d957600080fd5b600160a060020a03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561091957600080fd5b82018360208201111561092b57600080fd5b8035906020019184600183028401116401000000008311171561094d57600080fd5b509092509050611a64565b61047f6004803603602081101561096e57600080fd5b5035600160a060020a0316611a8f565b604080517f01ffc9a70000000000000000000000000000000000000000000000000000000081527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1983166004820152905160009130916301ffc9a791602480820192602092909190829003018186803b1580156109f757600080fd5b505afa158015610a0b573d6000803e3d6000fd5b505050506040513d6020811015610a2157600080fd5b505192915050565b6060610a35600f611bd9565b905090565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b600b54600090819081908190600160a060020a03163314610ab85760405160e560020a62461bcd028152600401808060200182810382526029815260200180612fc56029913960400191505060405180910390fd5b610ac9600f8a63ffffffff611be416565b610b075760405160e560020a62461bcd0281526004018080602001828103825260278152602001806130b66027913960400191505060405180910390fd5b6000601281610b25600160a060020a038d168c63ffffffff611c0016565b815260208101919091526040016000208054909150600160a060020a0316610b97576040805160e560020a62461bcd02815260206004820152601f60248201527f4f70656e42695365613a2077726f6e672073656c6c6572206164647265737300604482015290519081900360640190fd5b8054610bda90610bb690600160a060020a03168b63ffffffff611c0016565b600160a060020a038c1660009081526013602052604090209063ffffffff611c5d16565b610c185760405160e560020a62461bcd0281526004018080602001828103825260218152602001806131206021913960400191505060405180910390fd5b8060040154881015610c5e5760405160e560020a62461bcd02815260040180806020018281038252602f815260200180613087602f913960400191505060405180910390fd5b8060030154421115610cc45760008160000160009054906101000a9004600160a060020a0316905060008260050160009054906101000a900460ff169050610cb0898d8a8e868f878a60030154611c69565b60019650600095509093509150610dbe9050565b60048101889055600181018054600160a060020a03808916600160a060020a03199092168217909255426002840155600383015483546005850154604080518f8152602081018f9052808201949094528c15156060850152608084019490945290841660a0830152600060c083015260ff16151560e08201529051918c16917fe3d4bf61d078da5e663f7903e9655ec8cf344746ccd5b94a9990738446c46656918190036101000190a26001810154600160a060020a031615610daf576004810154600182015460059092015460009650909450600160a060020a03909116925060ff169050610dbe565b50600093508392508291508190505b95509550955095915050565b6000610ddc818363ffffffff611f3116565b92915050565b600160a060020a0381166000908152601360205260409020606090610ddc90611f9e565b600b54600160a060020a03163314610e525760405160e560020a62461bcd028152600401808060200182810382526029815260200180612fc56029913960400191505060405180910390fd5b600654610e65908263ffffffff611c0016565b600655610e79600f8363ffffffff611fa916565b50604051600160a060020a038316907fdff3fafa91c4ae82a17b9359b81e51f5f24dc774a225d99f97cfa4d429c45ce290600090a25050565b60606003600001805480602002602001604051908101604052809291908181526020018280548015610f0d57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610eef575b5050505050905090565b6000808080808080610f38600160a060020a038a168963ffffffff611c0016565b600090815260126020526040902080546001820154600283015460038401546004850154600590950154600160a060020a039485169f949093169d50909b50995091975060ff90911695509350505050565b610f9333610dca565b610fd15760405160e560020a62461bcd02815260040180806020018281038252602c815260200180613141602c913960400191505060405180910390fd5b610fe083836000846001611fbf565b505050565b600160a060020a03166000908152600e602052604090205490565b611009336122cc565b565b600b54600160a060020a031633146110575760405160e560020a62461bcd028152600401808060200182810382526029815260200180612fc56029913960400191505060405180910390fd5b611068600f8863ffffffff611be416565b6110a65760405160e560020a62461bcd0281526004018080602001828103825260278152602001806130b66027913960400191505060405180910390fd5b6110e66110c2600160a060020a0384168863ffffffff611c0016565b600160a060020a03891660009081526013602052604090209063ffffffff611c5d16565b156111255760405160e560020a62461bcd028152600401808060200182810382526025815260200180612fee6025913960400191505060405180910390fd5b600854611155906127109061114990670de0b6b3a76400009063ffffffff61231416565b9063ffffffff61237016565b600a54604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152915191909216916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b505110156112275760405160e560020a62461bcd0281526004018080602001828103825260328152602001806130346032913960400191505060405180910390fd5b82156112f657604080517ff242432a000000000000000000000000000000000000000000000000000000008152600160a060020a038481166004830152306024830152604482018990526001606483015260a06084830152600360a48301527f307830000000000000000000000000000000000000000000000000000000000060c483015291519189169163f242432a9160e48082019260009290919082900301818387803b1580156112d957600080fd5b505af11580156112ed573d6000803e3d6000fd5b50505050611380565b604080517f42842e0e000000000000000000000000000000000000000000000000000000008152600160a060020a038481166004830152306024830152604482018990529151918916916342842e0e9160648082019260009290919082900301818387803b15801561136757600080fd5b505af115801561137b573d6000803e3d6000fd5b505050505b611388612f7a565b6040518060c0016040528084600160a060020a031681526020016000600160a060020a0316815260200160008152602001868152602001878152602001831515815250905080601260006113ee8a8c600160a060020a0316611c0090919063ffffffff16565b81526020808201929092526040908101600090812084518154600160a060020a0319908116600160a060020a039283161783559486015160018301805490961690821617909455918401516002830155606084015160038301556080840151600483015560a0909301516005909101805460ff1916911515919091179055849160159161147d9084168b611c00565b815260208101919091526040016000208054600160a060020a031916600160a060020a039283161790556114db906114b790851689611c00565b600160a060020a038a1660009081526013602052604090209063ffffffff6123b216565b5060408051888152602081018890528082018790528515156060820152600160a060020a03858116608083015284151560a08301529151918a16917f1a0c83d7cab3b048aa0717666809666a5ec6f4a945ebcb95b13cc9b1b9d2ff609181900360c00190a25050505050505050565b606060008001805480602002602001604051908101604052809291908181526020018280548015610f0d57602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610eef575050505050905090565b600b54600160a060020a031633146115f85760405160e560020a62461bcd028152600401808060200182810382526029815260200180612fc56029913960400191505060405180910390fd5b611609600f8563ffffffff611be416565b6116475760405160e560020a62461bcd0281526004018080602001828103825260278152602001806130b66027913960400191505060405180910390fd5b611687611663600160a060020a0384168563ffffffff611c0016565b600160a060020a03861660009081526013602052604090209063ffffffff611c5d16565b6116c55760405160e560020a62461bcd0281526004018080602001828103825260218152602001806131206021913960400191505060405180910390fd5b6116d3848484846000611fbf565b50505050565b600160a060020a0382166000908152600e6020526040812054819081908190819061170a908763ffffffff61231416565b9050806117245750600093508392508291508190506117b6565b600160a060020a038716600090815260146020526040812054819081906224ea009061175790429063ffffffff6123bf16565b10905061176d426224ea0063ffffffff6123bf16565b600160a060020a038b16600090815260166020526040902054111561179c5791965091945090925090506117b6565b6117a7848a83612401565b90985093965092945091925050505b92959194509250565b6000610ddc60038363ffffffff611f3116565b600090815260156020526040902054600160a060020a031690565b6117f633610dca565b6118345760405160e560020a62461bcd02815260040180806020018281038252602c815260200180613141602c913960400191505060405180910390fd5b61183d816125e2565b50565b6000610ddc600f8363ffffffff611be416565b600b54600160a060020a0316331461189f5760405160e560020a62461bcd028152600401808060200182810382526029815260200180612fc56029913960400191505060405180910390fd5b600160a060020a03166000908152601660205260409020429055565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b6118f133610dca565b61192f5760405160e560020a62461bcd02815260040180806020018281038252602c815260200180613141602c913960400191505060405180910390fd5b600855565b61193d33610dca565b61197b5760405160e560020a62461bcd02815260040180806020018281038252602c815260200180613141602c913960400191505060405180910390fd5b6110093361262a565b61198d33610dca565b6119cb5760405160e560020a62461bcd02815260040180806020018281038252602c815260200180613141602c913960400191505060405180910390fd5b61183d81612672565b6119dd33610dca565b611a1b5760405160e560020a62461bcd02815260040180806020018281038252602c815260200180613141602c913960400191505060405180910390fd5b611a2c600f8263ffffffff611fa916565b50604051600160a060020a038216907fdff3fafa91c4ae82a17b9359b81e51f5f24dc774a225d99f97cfa4d429c45ce290600090a250565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b611a9833610dca565b611ad65760405160e560020a62461bcd02815260040180806020018281038252602c815260200180613141602c913960400191505060405180910390fd5b611ae7600f8263ffffffff6126b916565b50604051600160a060020a038216907f6b4fd386a2a256d0a61a637ccbf0378dd594ac406e282dce5ba5104ccfdef84190600090a250565b611b298282611f31565b15611b7e576040805160e560020a62461bcd02815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b600160a060020a03166000818152600183810160209081526040808420805460ff191684179055855492830186558584528184209092018054600160a060020a03191685179055845493835260029094019093529190912055565b6060610ddc826126ce565b6000611bf983600160a060020a038416612734565b9392505050565b600082820183811015611bf9576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000611bf98383612734565b8715611d3857604080517ff242432a000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a038881166024830152604482018890526001606483015260a06084830152600360a48301527f307830000000000000000000000000000000000000000000000000000000000060c483015291519189169163f242432a9160e48082019260009290919082900301818387803b158015611d1b57600080fd5b505af1158015611d2f573d6000803e3d6000fd5b50505050611dc2565b604080517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a038881166024830152604482018890529151918916916342842e0e9160648082019260009290919082900301818387803b158015611da957600080fd5b505af1158015611dbd573d6000803e3d6000fd5b505050505b611dce8685858561274c565b60408051868152602081018590528082018390528915156060820152600160a060020a03888116608083015286811660a0830152600160c083015284151560e08301529151918916917fe3d4bf61d078da5e663f7903e9655ec8cf344746ccd5b94a9990738446c46656918190036101000190a260126000611e5f600160a060020a038a168863ffffffff611c0016565b8152602081019190915260400160009081208054600160a060020a031990811682556001820180549091169055600281018290556003810182905560048101829055600501805460ff19169055601590611ec8600160a060020a0387168863ffffffff611c0016565b815260208101919091526040016000208054600160a060020a0319169055611f26611f02600160a060020a0386168763ffffffff611c0016565b600160a060020a03891660009081526013602052604090209063ffffffff6129aa16565b505050505050505050565b6000600160a060020a038216611f7b5760405160e560020a62461bcd0281526004018080602001828103825260228152602001806130fe6022913960400191505060405180910390fd5b50600160a060020a03166000908152600191909101602052604090205460ff1690565b6060610ddc826129b6565b6000611bf983600160a060020a03841684612a11565b6000611fda600160a060020a0387168663ffffffff611c0016565b60008181526012602052604090209091508261203e578054600160a060020a0386811691161461203e5760405160e560020a62461bcd0281526004018080602001828103825260218152602001806130136021913960400191505060405180910390fd5b831561210f578054604080517ff242432a000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a039283166024820152604481018990526001606482015260a06084820152600360a48201527f307830000000000000000000000000000000000000000000000000000000000060c482015290519189169163f242432a9160e48082019260009290919082900301818387803b1580156120f257600080fd5b505af1158015612106573d6000803e3d6000fd5b5050505061219b565b8054604080517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a039283166024820152604481018990529051918916916342842e0e9160648082019260009290919082900301818387803b15801561218257600080fd5b505af1158015612196573d6000803e3d6000fd5b505050505b805460048201546003830154604080518a81526020810193909352828101919091528615156060830152600160a060020a0392831660808301819052905190928a16917f59c07ddb806e4f8958f0b5fbe93551e544398f76b776a98a29473f28c3bf8d93919081900360a00190a260008381526012602052604081208054600160a060020a031990811682556001820180549091169055600281018290556003810182905560048101829055600501805460ff1916905560159061226e600160a060020a0384168a63ffffffff611c0016565b815260208101919091526040016000208054600160a060020a0319169055611f266122a8600160a060020a0383168963ffffffff611c0016565b600160a060020a038a1660009081526013602052604090209063ffffffff6129aa16565b6122dd60038263ffffffff612a8816565b604051600160a060020a038216907f9c8e7d83025bef8a04c664b2f753f64b8814bdb7e27291d7e50935f18cc3c71290600090a250565b60008261232357506000610ddc565b8282028284828161233057fe5b0414611bf95760405160e560020a62461bcd0281526004018080602001828103825260218152602001806130dd6021913960400191505060405180910390fd5b6000611bf983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bd0565b6000611bf9838380612c75565b6000611bf983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ccc565b600a54600b54604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529051600093849384939116916370a0823191602480820192602092909190829003018186803b15801561247057600080fd5b505afa158015612484573d6000803e3d6000fd5b505050506040513d602081101561249a57600080fd5b50516006549091506000906124b5908763ffffffff61231416565b6017549091506124d390670de0b6b3a764000063ffffffff61231416565b8110156124f3576124ec8261271063ffffffff61237016565b915061256e565b60185461250e90670de0b6b3a764000063ffffffff61231416565b811015612527576124ec826103e863ffffffff61237016565b60195461254290670de0b6b3a764000063ffffffff61231416565b81101561255a576124ec82601e63ffffffff61237016565b61256b82600a63ffffffff61237016565b91505b6000612586826111498a61271063ffffffff61231416565b905085156125c4576125b8600a611149600b6125ac61271083898863ffffffff61231416565b9063ffffffff61231416565b945092506125da915050565b6125b8612710611149858463ffffffff61231416565b935093915050565b6125f360008263ffffffff611b1f16565b604051600160a060020a038216907f3f5f1db80208f0d453083a86e16909cecc1e95e2618d5d927c93ace22b8200fc90600090a250565b61263b60008263ffffffff612a8816565b604051600160a060020a038216907f26b6063d78aefcf96f02ff06bc9822b5a623278253add7fffa5fb453db39981090600090a250565b61268360038263ffffffff611b1f16565b604051600160a060020a038216907e47706786c922d17b39285dc59d696bafea72c0b003d3841ae1202076f4c2e490600090a250565b6000611bf983600160a060020a038416612d29565b60608160010180548060200260200160405190810160405280929190818152602001828054801561272857602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161270a575b50505050509050919050565b60009081526002919091016020526040902054151590565b8181156128aa57600080600d60009054906101000a9004600160a060020a0316600160a060020a031663e3bbb5656040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156127c057600080fd5b505afa1580156127d4573d6000803e3d6000fd5b505050506040513d60208110156127ea57600080fd5b5051604080517f8e15f4730000000000000000000000000000000000000000000000000000000081528151600160a060020a0390931692638e15f47392600480840193919291829003018186803b15801561284457600080fd5b505afa158015612858573d6000803e3d6000fd5b505050506040513d604081101561286e57600080fd5b508051602090910151909250905060006128a46128978460ff8516600a0a63ffffffff61237016565b879063ffffffff61237016565b93505050505b6006546128bd908263ffffffff611c0016565b600655600160a060020a0385166000908152600e60205260409020546128e9908463ffffffff611c0016565b600160a060020a038087166000908152600e6020526040808220939093559086168152205461291e908463ffffffff611c0016565b600160a060020a038086166000908152600e602090815260408083209490945591881681526014909152205461296a57600160a060020a03851660009081526014602052604090204290555b600160a060020a0384166000908152601460205260409020546129a357600160a060020a03841660009081526014602052604090204290555b5050505050565b6000611bf98383612e74565b60608160010180548060200260200160405190810160405280929190818152602001828054801561272857602002820191906000526020600020905b8154815260200190600101908083116129f25750505050509050919050565b6000612a1d8484612734565b612a7e57508254600180820185556000858152602080822090930185905581860180548084018255908252838220018054600160a060020a031916600160a060020a0386161790558554858252600287019093526040902091909155611bf9565b5060009392505050565b612a928282611f31565b612ad05760405160e560020a62461bcd0281526004018080602001828103825260218152602001806130666021913960400191505060405180910390fd5b600160a060020a03811660009081526002830160205260409020548015612bab5782546000198083019190810190600090869083908110612b0d57fe5b6000918252602090912001548654600160a060020a0390911691508190879085908110612b3657fe5b60009182526020909120018054600160a060020a031916600160a060020a03929092169190911790558554869080612b6a57fe5b6000828152602080822083016000199081018054600160a060020a0319169055909201909255600160a060020a038716825260028801905260408120555050505b50600160a060020a03166000908152600190910160205260409020805460ff19169055565b60008183612c5f5760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612c24578181015183820152602001612c0c565b50505050905090810190601f168015612c515780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612c6b57fe5b0495945050505050565b6000612c818484612734565b612a7e57508254600181810185556000858152602080822090930185905581860180548084018255908252838220018490558554858252600287019093526040902091909155611bf9565b60008184841115612d215760405160e560020a62461bcd028152602060048201818152835160248401528351909283926044909101919085019080838360008315612c24578181015183820152602001612c0c565b505050900390565b60008181526002830160205260408120548015612e6a5783546000198083019190810190600090879083908110612d5c57fe5b9060005260206000200154905080876000018481548110612d7957fe5b6000918252602090912001558654879080612d9057fe5b600190038181906000526020600020016000905590556000876001018381548110612db757fe5b600091825260209091200154600189018054600160a060020a039092169250829186908110612de257fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a0316021790555087600101805480612e1d57fe5b6000828152602080822083016000199081018054600160a060020a03191690559092019092559281526002890190925250604080822060019485019055868252812055509150610ddc9050565b6000915050610ddc565b60008181526002830160205260408120548015612e6a5783546000198083019190810190600090879083908110612ea757fe5b9060005260206000200154905080876000018481548110612ec457fe5b6000918252602090912001558654879080612edb57fe5b600190038181906000526020600020016000905590556000876001018381548110612f0257fe5b9060005260206000200154905080886001018581548110612f1f57fe5b60009182526020909120015560018801805480612f3857fe5b6000828152602080822083016000199081018390559092019092559281526002890190925250604080822060019485019055868252812055509150610ddc9050565b6040518060c001604052806000600160a060020a031681526020016000600160a060020a03168152602001600081526020016000815260200160008152602001600015158152509056fe4f70656e42695365613a206f6e6c79206d61696e20636f6e74726163742063616e2073656e642069744f70656e42695365613a2061756374696f6e20697320616c726561647920637265617465644f70656e42695365613a206f6e6c792073656c6c65722063616e2063616e63656c4f70656e42695365613a20796f75206d75737420686176652031204f4253206f6e206163636f756e7420746f207374617274526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c654f70656e42695365613a207072696365206d757374206265206d6f7265207468616e2070726576696f7573206269644f70656e42695365613a20636f6e7472616374206d7573742062652077686974656c6973746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77526f6c65733a206163636f756e7420697320746865207a65726f20616464726573734f70656e42695365613a2061756374696f6e206973206e6f7420637265617465645465616d526f6c653a2063616c6c657220646f6573206e6f74206861766520746865205465616d20726f6c65a26469706673582212204f05722b3e41e4df21493b6c4a0559280718a49597e21162e9cdb707924367b464736f6c63430006080033526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373000000000000000000000000000000000000000000000000013b7b21280e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000003db648a8173abaf27a5705c079a0bf951ff284320000000000000000000000001a12b63b14b52020be0831c3b708793ae4f920d5000000000000000000000000765de816845861e75a25fca122bb6898b8b1282a000000000000000000000000cd74bd3d38c0a91cee6e3337b00aca9eda08afe8

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101ec576000357c01000000000000000000000000000000000000000000000000000000009004806389e5277111610121578063bb759806116100bf578063df5dd1a51161008e578063df5dd1a514610877578063eb3b1ac21461089d578063f23a6e61146108c3578063f4c33b7014610958576101ec565b8063bb759806146106ff578063bc197c8114610725578063c8a151b414610852578063d9a431b31461086f576101ec565b8063a97e5c93116100fb578063a97e5c9314610654578063ade6a8141461067a578063b463a75c146106b3578063b68f9a6c146106d9576101ec565b806389e52771146105bc5780639b58a9a8146105c45780639f2ac7f814610600576101ec565b80634f63d3ce1161018e5780637653b556116101685780637653b556146104f65780637661892e1461052a5780637837efdc14610562578063854fe7ac1461056a576101ec565b80634f63d3ce146104535780637330aba214610481578063762a66a214610489576101ec565b806315b60639116101ca57806315b606391461039157806324851914146104075780634d3d626a1461042d5780634f580e4014610453576101ec565b806301ffc9a7146101f1578063052c09fd14610241578063150b7a0214610299575b600080fd5b61022d6004803603602081101561020757600080fd5b50357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191661097e565b604080519115158252519081900360200190f35b610249610a29565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561028557818101518382015260200161026d565b505050509050019250505060405180910390f35b61035f600480360360808110156102af57600080fd5b600160a060020a038235811692602081013590911691604082013591908101906080810160608201356401000000008111156102ea57600080fd5b8201836020820111156102fc57600080fd5b8035906020019184600183028401116401000000008311171561031e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a3a945050505050565b604080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff199092168252519081900360200190f35b6103d5600480360360a08110156103a757600080fd5b50600160a060020a038135811691602081013591604082013591606081013515159160809091013516610a63565b6040805194151585526020850193909352600160a060020a039091168383015215156060830152519081900360800190f35b61022d6004803603602081101561041d57600080fd5b5035600160a060020a0316610dca565b6102496004803603602081101561044357600080fd5b5035600160a060020a0316610de2565b61047f6004803603604081101561046957600080fd5b50600160a060020a038135169060200135610e06565b005b610249610eb2565b6104b56004803603604081101561049f57600080fd5b50600160a060020a038135169060200135610f17565b60408051600160a060020a0397881681529590961660208601528486019390935260608401919091526080830152151560a082015290519081900360c00190f35b61047f6004803603606081101561050c57600080fd5b50600160a060020a0381351690602081013590604001351515610f8a565b6105506004803603602081101561054057600080fd5b5035600160a060020a0316610fe5565b60408051918252519081900360200190f35b61047f611000565b61047f600480360360e081101561058057600080fd5b50600160a060020a038135811691602081013591604082013591606081013591608082013515159160a08101359091169060c00135151561100b565b61024961154a565b61047f600480360360808110156105da57600080fd5b50600160a060020a038135811691602081013591604082013516906060013515156115ac565b61062c6004803603604081101561061657600080fd5b50600160a060020a0381351690602001356116d9565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b61022d6004803603602081101561066a57600080fd5b5035600160a060020a03166117bf565b6106976004803603602081101561069057600080fd5b50356117d2565b60408051600160a060020a039092168252519081900360200190f35b61047f600480360360208110156106c957600080fd5b5035600160a060020a03166117ed565b61022d600480360360208110156106ef57600080fd5b5035600160a060020a0316611840565b61047f6004803603602081101561071557600080fd5b5035600160a060020a0316611853565b61035f600480360360a081101561073b57600080fd5b600160a060020a03823581169260208101359091169181019060608101604082013564010000000081111561076f57600080fd5b82018360208201111561078157600080fd5b803590602001918460208302840111640100000000831117156107a357600080fd5b9193909290916020810190356401000000008111156107c157600080fd5b8201836020820111156107d357600080fd5b803590602001918460208302840111640100000000831117156107f557600080fd5b91939092909160208101903564010000000081111561081357600080fd5b82018360208201111561082557600080fd5b8035906020019184600183028401116401000000008311171561084757600080fd5b5090925090506118bb565b61047f6004803603602081101561086857600080fd5b50356118e8565b61047f611934565b61047f6004803603602081101561088d57600080fd5b5035600160a060020a0316611984565b61047f600480360360208110156108b357600080fd5b5035600160a060020a03166119d4565b61035f600480360360a08110156108d957600080fd5b600160a060020a03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561091957600080fd5b82018360208201111561092b57600080fd5b8035906020019184600183028401116401000000008311171561094d57600080fd5b509092509050611a64565b61047f6004803603602081101561096e57600080fd5b5035600160a060020a0316611a8f565b604080517f01ffc9a70000000000000000000000000000000000000000000000000000000081527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1983166004820152905160009130916301ffc9a791602480820192602092909190829003018186803b1580156109f757600080fd5b505afa158015610a0b573d6000803e3d6000fd5b505050506040513d6020811015610a2157600080fd5b505192915050565b6060610a35600f611bd9565b905090565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b600b54600090819081908190600160a060020a03163314610ab85760405160e560020a62461bcd028152600401808060200182810382526029815260200180612fc56029913960400191505060405180910390fd5b610ac9600f8a63ffffffff611be416565b610b075760405160e560020a62461bcd0281526004018080602001828103825260278152602001806130b66027913960400191505060405180910390fd5b6000601281610b25600160a060020a038d168c63ffffffff611c0016565b815260208101919091526040016000208054909150600160a060020a0316610b97576040805160e560020a62461bcd02815260206004820152601f60248201527f4f70656e42695365613a2077726f6e672073656c6c6572206164647265737300604482015290519081900360640190fd5b8054610bda90610bb690600160a060020a03168b63ffffffff611c0016565b600160a060020a038c1660009081526013602052604090209063ffffffff611c5d16565b610c185760405160e560020a62461bcd0281526004018080602001828103825260218152602001806131206021913960400191505060405180910390fd5b8060040154881015610c5e5760405160e560020a62461bcd02815260040180806020018281038252602f815260200180613087602f913960400191505060405180910390fd5b8060030154421115610cc45760008160000160009054906101000a9004600160a060020a0316905060008260050160009054906101000a900460ff169050610cb0898d8a8e868f878a60030154611c69565b60019650600095509093509150610dbe9050565b60048101889055600181018054600160a060020a03808916600160a060020a03199092168217909255426002840155600383015483546005850154604080518f8152602081018f9052808201949094528c15156060850152608084019490945290841660a0830152600060c083015260ff16151560e08201529051918c16917fe3d4bf61d078da5e663f7903e9655ec8cf344746ccd5b94a9990738446c46656918190036101000190a26001810154600160a060020a031615610daf576004810154600182015460059092015460009650909450600160a060020a03909116925060ff169050610dbe565b50600093508392508291508190505b95509550955095915050565b6000610ddc818363ffffffff611f3116565b92915050565b600160a060020a0381166000908152601360205260409020606090610ddc90611f9e565b600b54600160a060020a03163314610e525760405160e560020a62461bcd028152600401808060200182810382526029815260200180612fc56029913960400191505060405180910390fd5b600654610e65908263ffffffff611c0016565b600655610e79600f8363ffffffff611fa916565b50604051600160a060020a038316907fdff3fafa91c4ae82a17b9359b81e51f5f24dc774a225d99f97cfa4d429c45ce290600090a25050565b60606003600001805480602002602001604051908101604052809291908181526020018280548015610f0d57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610eef575b5050505050905090565b6000808080808080610f38600160a060020a038a168963ffffffff611c0016565b600090815260126020526040902080546001820154600283015460038401546004850154600590950154600160a060020a039485169f949093169d50909b50995091975060ff90911695509350505050565b610f9333610dca565b610fd15760405160e560020a62461bcd02815260040180806020018281038252602c815260200180613141602c913960400191505060405180910390fd5b610fe083836000846001611fbf565b505050565b600160a060020a03166000908152600e602052604090205490565b611009336122cc565b565b600b54600160a060020a031633146110575760405160e560020a62461bcd028152600401808060200182810382526029815260200180612fc56029913960400191505060405180910390fd5b611068600f8863ffffffff611be416565b6110a65760405160e560020a62461bcd0281526004018080602001828103825260278152602001806130b66027913960400191505060405180910390fd5b6110e66110c2600160a060020a0384168863ffffffff611c0016565b600160a060020a03891660009081526013602052604090209063ffffffff611c5d16565b156111255760405160e560020a62461bcd028152600401808060200182810382526025815260200180612fee6025913960400191505060405180910390fd5b600854611155906127109061114990670de0b6b3a76400009063ffffffff61231416565b9063ffffffff61237016565b600a54604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152915191909216916370a08231916024808301926020929190829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b505110156112275760405160e560020a62461bcd0281526004018080602001828103825260328152602001806130346032913960400191505060405180910390fd5b82156112f657604080517ff242432a000000000000000000000000000000000000000000000000000000008152600160a060020a038481166004830152306024830152604482018990526001606483015260a06084830152600360a48301527f307830000000000000000000000000000000000000000000000000000000000060c483015291519189169163f242432a9160e48082019260009290919082900301818387803b1580156112d957600080fd5b505af11580156112ed573d6000803e3d6000fd5b50505050611380565b604080517f42842e0e000000000000000000000000000000000000000000000000000000008152600160a060020a038481166004830152306024830152604482018990529151918916916342842e0e9160648082019260009290919082900301818387803b15801561136757600080fd5b505af115801561137b573d6000803e3d6000fd5b505050505b611388612f7a565b6040518060c0016040528084600160a060020a031681526020016000600160a060020a0316815260200160008152602001868152602001878152602001831515815250905080601260006113ee8a8c600160a060020a0316611c0090919063ffffffff16565b81526020808201929092526040908101600090812084518154600160a060020a0319908116600160a060020a039283161783559486015160018301805490961690821617909455918401516002830155606084015160038301556080840151600483015560a0909301516005909101805460ff1916911515919091179055849160159161147d9084168b611c00565b815260208101919091526040016000208054600160a060020a031916600160a060020a039283161790556114db906114b790851689611c00565b600160a060020a038a1660009081526013602052604090209063ffffffff6123b216565b5060408051888152602081018890528082018790528515156060820152600160a060020a03858116608083015284151560a08301529151918a16917f1a0c83d7cab3b048aa0717666809666a5ec6f4a945ebcb95b13cc9b1b9d2ff609181900360c00190a25050505050505050565b606060008001805480602002602001604051908101604052809291908181526020018280548015610f0d57602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610eef575050505050905090565b600b54600160a060020a031633146115f85760405160e560020a62461bcd028152600401808060200182810382526029815260200180612fc56029913960400191505060405180910390fd5b611609600f8563ffffffff611be416565b6116475760405160e560020a62461bcd0281526004018080602001828103825260278152602001806130b66027913960400191505060405180910390fd5b611687611663600160a060020a0384168563ffffffff611c0016565b600160a060020a03861660009081526013602052604090209063ffffffff611c5d16565b6116c55760405160e560020a62461bcd0281526004018080602001828103825260218152602001806131206021913960400191505060405180910390fd5b6116d3848484846000611fbf565b50505050565b600160a060020a0382166000908152600e6020526040812054819081908190819061170a908763ffffffff61231416565b9050806117245750600093508392508291508190506117b6565b600160a060020a038716600090815260146020526040812054819081906224ea009061175790429063ffffffff6123bf16565b10905061176d426224ea0063ffffffff6123bf16565b600160a060020a038b16600090815260166020526040902054111561179c5791965091945090925090506117b6565b6117a7848a83612401565b90985093965092945091925050505b92959194509250565b6000610ddc60038363ffffffff611f3116565b600090815260156020526040902054600160a060020a031690565b6117f633610dca565b6118345760405160e560020a62461bcd02815260040180806020018281038252602c815260200180613141602c913960400191505060405180910390fd5b61183d816125e2565b50565b6000610ddc600f8363ffffffff611be416565b600b54600160a060020a0316331461189f5760405160e560020a62461bcd028152600401808060200182810382526029815260200180612fc56029913960400191505060405180910390fd5b600160a060020a03166000908152601660205260409020429055565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b6118f133610dca565b61192f5760405160e560020a62461bcd02815260040180806020018281038252602c815260200180613141602c913960400191505060405180910390fd5b600855565b61193d33610dca565b61197b5760405160e560020a62461bcd02815260040180806020018281038252602c815260200180613141602c913960400191505060405180910390fd5b6110093361262a565b61198d33610dca565b6119cb5760405160e560020a62461bcd02815260040180806020018281038252602c815260200180613141602c913960400191505060405180910390fd5b61183d81612672565b6119dd33610dca565b611a1b5760405160e560020a62461bcd02815260040180806020018281038252602c815260200180613141602c913960400191505060405180910390fd5b611a2c600f8263ffffffff611fa916565b50604051600160a060020a038216907fdff3fafa91c4ae82a17b9359b81e51f5f24dc774a225d99f97cfa4d429c45ce290600090a250565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b611a9833610dca565b611ad65760405160e560020a62461bcd02815260040180806020018281038252602c815260200180613141602c913960400191505060405180910390fd5b611ae7600f8263ffffffff6126b916565b50604051600160a060020a038216907f6b4fd386a2a256d0a61a637ccbf0378dd594ac406e282dce5ba5104ccfdef84190600090a250565b611b298282611f31565b15611b7e576040805160e560020a62461bcd02815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b600160a060020a03166000818152600183810160209081526040808420805460ff191684179055855492830186558584528184209092018054600160a060020a03191685179055845493835260029094019093529190912055565b6060610ddc826126ce565b6000611bf983600160a060020a038416612734565b9392505050565b600082820183811015611bf9576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000611bf98383612734565b8715611d3857604080517ff242432a000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a038881166024830152604482018890526001606483015260a06084830152600360a48301527f307830000000000000000000000000000000000000000000000000000000000060c483015291519189169163f242432a9160e48082019260009290919082900301818387803b158015611d1b57600080fd5b505af1158015611d2f573d6000803e3d6000fd5b50505050611dc2565b604080517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a038881166024830152604482018890529151918916916342842e0e9160648082019260009290919082900301818387803b158015611da957600080fd5b505af1158015611dbd573d6000803e3d6000fd5b505050505b611dce8685858561274c565b60408051868152602081018590528082018390528915156060820152600160a060020a03888116608083015286811660a0830152600160c083015284151560e08301529151918916917fe3d4bf61d078da5e663f7903e9655ec8cf344746ccd5b94a9990738446c46656918190036101000190a260126000611e5f600160a060020a038a168863ffffffff611c0016565b8152602081019190915260400160009081208054600160a060020a031990811682556001820180549091169055600281018290556003810182905560048101829055600501805460ff19169055601590611ec8600160a060020a0387168863ffffffff611c0016565b815260208101919091526040016000208054600160a060020a0319169055611f26611f02600160a060020a0386168763ffffffff611c0016565b600160a060020a03891660009081526013602052604090209063ffffffff6129aa16565b505050505050505050565b6000600160a060020a038216611f7b5760405160e560020a62461bcd0281526004018080602001828103825260228152602001806130fe6022913960400191505060405180910390fd5b50600160a060020a03166000908152600191909101602052604090205460ff1690565b6060610ddc826129b6565b6000611bf983600160a060020a03841684612a11565b6000611fda600160a060020a0387168663ffffffff611c0016565b60008181526012602052604090209091508261203e578054600160a060020a0386811691161461203e5760405160e560020a62461bcd0281526004018080602001828103825260218152602001806130136021913960400191505060405180910390fd5b831561210f578054604080517ff242432a000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a039283166024820152604481018990526001606482015260a06084820152600360a48201527f307830000000000000000000000000000000000000000000000000000000000060c482015290519189169163f242432a9160e48082019260009290919082900301818387803b1580156120f257600080fd5b505af1158015612106573d6000803e3d6000fd5b5050505061219b565b8054604080517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a039283166024820152604481018990529051918916916342842e0e9160648082019260009290919082900301818387803b15801561218257600080fd5b505af1158015612196573d6000803e3d6000fd5b505050505b805460048201546003830154604080518a81526020810193909352828101919091528615156060830152600160a060020a0392831660808301819052905190928a16917f59c07ddb806e4f8958f0b5fbe93551e544398f76b776a98a29473f28c3bf8d93919081900360a00190a260008381526012602052604081208054600160a060020a031990811682556001820180549091169055600281018290556003810182905560048101829055600501805460ff1916905560159061226e600160a060020a0384168a63ffffffff611c0016565b815260208101919091526040016000208054600160a060020a0319169055611f266122a8600160a060020a0383168963ffffffff611c0016565b600160a060020a038a1660009081526013602052604090209063ffffffff6129aa16565b6122dd60038263ffffffff612a8816565b604051600160a060020a038216907f9c8e7d83025bef8a04c664b2f753f64b8814bdb7e27291d7e50935f18cc3c71290600090a250565b60008261232357506000610ddc565b8282028284828161233057fe5b0414611bf95760405160e560020a62461bcd0281526004018080602001828103825260218152602001806130dd6021913960400191505060405180910390fd5b6000611bf983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bd0565b6000611bf9838380612c75565b6000611bf983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ccc565b600a54600b54604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529051600093849384939116916370a0823191602480820192602092909190829003018186803b15801561247057600080fd5b505afa158015612484573d6000803e3d6000fd5b505050506040513d602081101561249a57600080fd5b50516006549091506000906124b5908763ffffffff61231416565b6017549091506124d390670de0b6b3a764000063ffffffff61231416565b8110156124f3576124ec8261271063ffffffff61237016565b915061256e565b60185461250e90670de0b6b3a764000063ffffffff61231416565b811015612527576124ec826103e863ffffffff61237016565b60195461254290670de0b6b3a764000063ffffffff61231416565b81101561255a576124ec82601e63ffffffff61237016565b61256b82600a63ffffffff61237016565b91505b6000612586826111498a61271063ffffffff61231416565b905085156125c4576125b8600a611149600b6125ac61271083898863ffffffff61231416565b9063ffffffff61231416565b945092506125da915050565b6125b8612710611149858463ffffffff61231416565b935093915050565b6125f360008263ffffffff611b1f16565b604051600160a060020a038216907f3f5f1db80208f0d453083a86e16909cecc1e95e2618d5d927c93ace22b8200fc90600090a250565b61263b60008263ffffffff612a8816565b604051600160a060020a038216907f26b6063d78aefcf96f02ff06bc9822b5a623278253add7fffa5fb453db39981090600090a250565b61268360038263ffffffff611b1f16565b604051600160a060020a038216907e47706786c922d17b39285dc59d696bafea72c0b003d3841ae1202076f4c2e490600090a250565b6000611bf983600160a060020a038416612d29565b60608160010180548060200260200160405190810160405280929190818152602001828054801561272857602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161270a575b50505050509050919050565b60009081526002919091016020526040902054151590565b8181156128aa57600080600d60009054906101000a9004600160a060020a0316600160a060020a031663e3bbb5656040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156127c057600080fd5b505afa1580156127d4573d6000803e3d6000fd5b505050506040513d60208110156127ea57600080fd5b5051604080517f8e15f4730000000000000000000000000000000000000000000000000000000081528151600160a060020a0390931692638e15f47392600480840193919291829003018186803b15801561284457600080fd5b505afa158015612858573d6000803e3d6000fd5b505050506040513d604081101561286e57600080fd5b508051602090910151909250905060006128a46128978460ff8516600a0a63ffffffff61237016565b879063ffffffff61237016565b93505050505b6006546128bd908263ffffffff611c0016565b600655600160a060020a0385166000908152600e60205260409020546128e9908463ffffffff611c0016565b600160a060020a038087166000908152600e6020526040808220939093559086168152205461291e908463ffffffff611c0016565b600160a060020a038086166000908152600e602090815260408083209490945591881681526014909152205461296a57600160a060020a03851660009081526014602052604090204290555b600160a060020a0384166000908152601460205260409020546129a357600160a060020a03841660009081526014602052604090204290555b5050505050565b6000611bf98383612e74565b60608160010180548060200260200160405190810160405280929190818152602001828054801561272857602002820191906000526020600020905b8154815260200190600101908083116129f25750505050509050919050565b6000612a1d8484612734565b612a7e57508254600180820185556000858152602080822090930185905581860180548084018255908252838220018054600160a060020a031916600160a060020a0386161790558554858252600287019093526040902091909155611bf9565b5060009392505050565b612a928282611f31565b612ad05760405160e560020a62461bcd0281526004018080602001828103825260218152602001806130666021913960400191505060405180910390fd5b600160a060020a03811660009081526002830160205260409020548015612bab5782546000198083019190810190600090869083908110612b0d57fe5b6000918252602090912001548654600160a060020a0390911691508190879085908110612b3657fe5b60009182526020909120018054600160a060020a031916600160a060020a03929092169190911790558554869080612b6a57fe5b6000828152602080822083016000199081018054600160a060020a0319169055909201909255600160a060020a038716825260028801905260408120555050505b50600160a060020a03166000908152600190910160205260409020805460ff19169055565b60008183612c5f5760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612c24578181015183820152602001612c0c565b50505050905090810190601f168015612c515780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612c6b57fe5b0495945050505050565b6000612c818484612734565b612a7e57508254600181810185556000858152602080822090930185905581860180548084018255908252838220018490558554858252600287019093526040902091909155611bf9565b60008184841115612d215760405160e560020a62461bcd028152602060048201818152835160248401528351909283926044909101919085019080838360008315612c24578181015183820152602001612c0c565b505050900390565b60008181526002830160205260408120548015612e6a5783546000198083019190810190600090879083908110612d5c57fe5b9060005260206000200154905080876000018481548110612d7957fe5b6000918252602090912001558654879080612d9057fe5b600190038181906000526020600020016000905590556000876001018381548110612db757fe5b600091825260209091200154600189018054600160a060020a039092169250829186908110612de257fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a0316021790555087600101805480612e1d57fe5b6000828152602080822083016000199081018054600160a060020a03191690559092019092559281526002890190925250604080822060019485019055868252812055509150610ddc9050565b6000915050610ddc565b60008181526002830160205260408120548015612e6a5783546000198083019190810190600090879083908110612ea757fe5b9060005260206000200154905080876000018481548110612ec457fe5b6000918252602090912001558654879080612edb57fe5b600190038181906000526020600020016000905590556000876001018381548110612f0257fe5b9060005260206000200154905080886001018581548110612f1f57fe5b60009182526020909120015560018801805480612f3857fe5b6000828152602080822083016000199081018390559092019092559281526002890190925250604080822060019485019055868252812055509150610ddc9050565b6040518060c001604052806000600160a060020a031681526020016000600160a060020a03168152602001600081526020016000815260200160008152602001600015158152509056fe4f70656e42695365613a206f6e6c79206d61696e20636f6e74726163742063616e2073656e642069744f70656e42695365613a2061756374696f6e20697320616c726561647920637265617465644f70656e42695365613a206f6e6c792073656c6c65722063616e2063616e63656c4f70656e42695365613a20796f75206d75737420686176652031204f4253206f6e206163636f756e7420746f207374617274526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c654f70656e42695365613a207072696365206d757374206265206d6f7265207468616e2070726576696f7573206269644f70656e42695365613a20636f6e7472616374206d7573742062652077686974656c6973746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77526f6c65733a206163636f756e7420697320746865207a65726f20616464726573734f70656e42695365613a2061756374696f6e206973206e6f7420637265617465645465616d526f6c653a2063616c6c657220646f6573206e6f74206861766520746865205465616d20726f6c65a26469706673582212204f05722b3e41e4df21493b6c4a0559280718a49597e21162e9cdb707924367b464736f6c63430006080033