ETH Price: $3,161.32 (-1.02%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve216877722025-01-23 14:25:114 days ago1737642311IN
0x2dC8CEA4...21f2e2548
0 ETH0.000766316.45427682
Approve192311392024-02-15 5:06:35347 days ago1707973595IN
0x2dC8CEA4...21f2e2548
0 ETH0.0012472626.78152297
Approve176008582023-07-01 18:03:47576 days ago1688234627IN
0x2dC8CEA4...21f2e2548
0 ETH0.0007999517.17676614
Resurrect Hell P...168571202023-03-18 20:48:59681 days ago1679172539IN
0x2dC8CEA4...21f2e2548
0 ETH0.0022480913.42321361
Resurrect Hell P...168571182023-03-18 20:48:35681 days ago1679172515IN
0x2dC8CEA4...21f2e2548
0 ETH0.0024673713.87942703
Resurrect Hell P...168571152023-03-18 20:47:59681 days ago1679172479IN
0x2dC8CEA4...21f2e2548
0 ETH0.0025162214.15423531
Approve168381932023-03-16 4:59:47683 days ago1678942787IN
0x2dC8CEA4...21f2e2548
0 ETH0.0008700418.68171872
Self Resurrect H...166085722023-02-11 22:41:59716 days ago1676155319IN
0x2dC8CEA4...21f2e2548
0 ETH0.0016140516.18393336
Self Resurrect H...166085402023-02-11 22:35:23716 days ago1676154923IN
0x2dC8CEA4...21f2e2548
0 ETH0.0016274816.04509681
Transfer166085252023-02-11 22:32:23716 days ago1676154743IN
0x2dC8CEA4...21f2e2548
0 ETH0.0004930616.60217727
Transfer166085062023-02-11 22:28:35716 days ago1676154515IN
0x2dC8CEA4...21f2e2548
0 ETH0.0004541115.29045096
Transfer166084162023-02-11 22:10:23716 days ago1676153423IN
0x2dC8CEA4...21f2e2548
0 ETH0.0005562618.73022266
Transfer159927072022-11-17 22:25:23802 days ago1668723923IN
0x2dC8CEA4...21f2e2548
0 ETH0.0005943712.70394366
Resurrect Hell P...159605462022-11-13 10:36:23806 days ago1668335783IN
0x2dC8CEA4...21f2e2548
0 ETH0.0020718512.73592843
Resurrect Hell P...159605332022-11-13 10:33:47806 days ago1668335627IN
0x2dC8CEA4...21f2e2548
0 ETH0.002092113.48302428
Resurrect Hell P...159407412022-11-10 16:14:23809 days ago1668096863IN
0x2dC8CEA4...21f2e2548
0 ETH0.0050643134.31622571
Approve159043962022-11-05 14:24:59814 days ago1667658299IN
0x2dC8CEA4...21f2e2548
0 ETH0.000619613.28713089
Resurrect Hell P...157858472022-10-20 0:51:47831 days ago1666227107IN
0x2dC8CEA4...21f2e2548
0 ETH0.0044699927.82064541
Claim Airdrop154104762022-08-25 17:44:59886 days ago1661449499IN
0x2dC8CEA4...21f2e2548
0 ETH0.0006207323.61002763
Approve152854232022-08-05 23:56:07906 days ago1659743767IN
0x2dC8CEA4...21f2e2548
0 ETH0.0005351611.47644079
Approve152853862022-08-05 23:49:27906 days ago1659743367IN
0x2dC8CEA4...21f2e2548
0 ETH0.0005776812.38806013
Approve152853772022-08-05 23:46:55906 days ago1659743215IN
0x2dC8CEA4...21f2e2548
0 ETH0.0005698112.21938178
Approve152853712022-08-05 23:45:22906 days ago1659743122IN
0x2dC8CEA4...21f2e2548
0 ETH0.000558911.98535433
Approve152853582022-08-05 23:41:58906 days ago1659742918IN
0x2dC8CEA4...21f2e2548
0 ETH0.0004854810.41105448
Approve152853412022-08-05 23:38:06906 days ago1659742686IN
0x2dC8CEA4...21f2e2548
0 ETH0.000409318.77747463
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WAS

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion
File 1 of 8 : WAS.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
import "./Airdrop.sol";

interface IWASNFT {
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    function ownerOf(uint256 tokenId) external returns (address);
}

contract WAS is ERC20, Airdrop, Ownable, IERC721Receiver {
    //Master switch
    bool private _isContractActive;

    //Max supply control
    uint256 private _maxSupply;
    uint256 private _totalSupply;
    uint256 private _claimedTokens;
    
    //Airdrop status & related settings
    bool private _airdropEnabled;
    bool private _airdropExpired;
    address private _communityLiquidityAddress;

    //Hell - Resurrection
    bool private _selfHellResurrectionStatus;
    bool private _hellResurrectionStatus;
    uint256 _publicResurrectionCost; //Cost of public resurrection in WAS utility tokens
    uint256 _selftResurrectionCost; //Cost of self-resurrection
    
    // Mapping of all Satoshis currently in hell / heaven - where the unit index is the satoshi #
    mapping(uint256 => bool) private _satoshisInHell;
    mapping(uint256 => bool) private _hellVersionSatoshis;
    mapping(uint256 => bool) private _heavenVersionSatoshis;
    mapping(uint256 => bool) private _restrictedSatoshis; //Unique and Flying satoshis can not be resurrected
    uint256[] private _resurrectedSatoshisHell; //Simple array holding all WAS NFT Ids ever resurrected in Hell State
    uint256[] private _resurrectedSatoshisHeaven; //Simple array holding all WAS NFT Ids ever resurrected in Heaven State


    //Fires when a genesis Satoshi is turned into Hell version Satoshi
    event SatoshiHellResurrection(uint256 satoshiId, address newOwner);

    //Fires when a genesis Satoshi is turned into Heaven version Satoshi
    event SatoshiHeavenResurrection(uint256 satoshiId, address newOwner);

    //Fires when a new genesis Satoshi is added to hell and is now available for public resurrection
    event SatoshiAddedToHell(uint256 satoshiId);

    //Fires on public resurrections
    event PublicResurrection(uint256 satoshiId, address resurrectorAddress);

    //Control events fired on reciving a new NFT
    event incomingNftOperator(address operatorAddress);
    event incomingNftFrom(address fromAddress);
    event incomingNftId(uint256 nftId);
    event incomingNftOwner(address nftOwnerAddress);

    //WAS NFT Smart contract and OS Satoshi Hell address
    address private _wasNFTSmartContract;
    address private _satoshiHellOSAddress;

    IWASNFT wasNFTContract = IWASNFT(_wasNFTSmartContract);

    constructor(uint256 maxTokenSupply, address wasNftScAddress, address satoshisHellOsAddress, address communityLiquidityAddress) ERC20("WAS Utility Token", "WAS") public {
        _isContractActive = true;
        _maxSupply = maxTokenSupply * 1000000000000000000;
        _claimedTokens = 0;
        _airdropEnabled = true;
        _airdropExpired = false;
        _communityLiquidityAddress = communityLiquidityAddress;
        _selfHellResurrectionStatus = true;
        _hellResurrectionStatus = true;
        _publicResurrectionCost = 25000000000000000000000;
        _selftResurrectionCost = 100000000000000000000000;
        _wasNFTSmartContract = wasNftScAddress;
        _satoshiHellOSAddress = satoshisHellOsAddress;
        
        // Set restricted satoshis
        _restrictedSatoshis[1] = true;
        _restrictedSatoshis[4] = true;
        _restrictedSatoshis[191] = true;
        _restrictedSatoshis[350] = true;
        _restrictedSatoshis[587] = true;
        _restrictedSatoshis[78] = true;
        _restrictedSatoshis[989] = true;
        _restrictedSatoshis[204] = true;
        _restrictedSatoshis[570] = true;
        _restrictedSatoshis[122] = true;
        _restrictedSatoshis[923] = true;
    }

    // Airdrop methods
    function claimAirdrop(address to)
    public
    {
        require(_isContractActive, "We'll be back in 5. (Contract is not active at this moment)");

        uint256 claimableAmount = getAirdropAmount(to);
        require(claimableAmount > 0,"This address is not eligible for WAS utility token airdrop.");
        require(_airdropEnabled, "Sorry, WAS utility token airdrop claiming is not enabled at the moment.");
        require(_airdropExpired == false, "Sorry, WAS utility airdrop claiming window has expired.");
        require(_maxSupply >= (_claimedTokens + claimableAmount),"Invalid claim operation would exceed max token supply limit.");
        invalidateAirdrop(to);
        _claimedTokens = _claimedTokens + claimableAmount;
        _mint(to, claimableAmount);
        if (_claimedTokens == _maxSupply) {
            _airdropExpired = true;
            _airdropEnabled = false;
        }
    }

    function getClaimableTokensAmount(address to)
    public
    view
    returns (uint256)
    {
        uint256 claimableAmount = 0;
        if (_airdropExpired == false && _airdropEnabled) {
            claimableAmount = getAirdropAmount(to);
        }
        return claimableAmount;
    }

    /**
    * Resurrection methods
    */

    //This method is called by users to buy and resurrect Satoshis that are currently in hell
    function resurrectHellPublic(uint256 satoshiId)
    public
    {
        require(_isContractActive, "We'll be back in 5. (Contract is not active at this moment)");
        require(_heavenVersionSatoshis[satoshiId] == false,"Can not turn a heaven Satoshi into hell Satoshi.");
        require(_restrictedSatoshis[satoshiId] == false, "Resurrection of this Satoshi is restricted.");
        require(_satoshisInHell[satoshiId],"This Satoshi is not in Hell and it can not be resurrected.");
        require(_hellVersionSatoshis[satoshiId] == false, "This Satoshi is already a hell version.");
        require(balanceOf(msg.sender) >= _publicResurrectionCost, "You do not have enough tokens to resurrect this Satoshi");

        _burn(msg.sender, _publicResurrectionCost);

        delete _satoshisInHell[satoshiId];
        _hellVersionSatoshis[satoshiId] = true;
        _resurrectedSatoshisHell.push(satoshiId); //Record this Satoshi as Hell Version resurrection occured
        IWASNFT(_wasNFTSmartContract).safeTransferFrom(address(this), msg.sender, satoshiId);
        emit SatoshiHellResurrection(satoshiId,msg.sender);
        emit PublicResurrection(satoshiId,msg.sender);
    }

    //This method is called by users to self-resurrect Satoshis they own
    //This method should check if the sender owns the Satoshi being resurrected
    function selfResurrectHell(uint256 satoshiId)
    public
    {
        require(_isContractActive, "We'll be back in 5. (Contract is not active at this moment)");

        //You can not turn heaven Satoshis into hell Satoshis
        require(_heavenVersionSatoshis[satoshiId] == false,"Can not turn a heaven Satoshi into hell Satoshi.");
        //You can not turn unique and super rare satoshis into hell Satoshis
        require(_restrictedSatoshis[satoshiId] == false, "Resurrection of this Satoshi is restricted.");
        //You can not turn hell Satoshis into hell Satoshis
        require(_hellVersionSatoshis[satoshiId] == false, "This Satoshi is already a hell version");
        //You need to have enough WAS tokens to resurrect a Satoshi
        require(balanceOf(msg.sender) >= _selftResurrectionCost, "You do not have enough tokens to resurrect this Satoshi.");
        //You must own this Satoshi
        require(IWASNFT(_wasNFTSmartContract).ownerOf(satoshiId) == msg.sender, "You must own the Satoshi you wish to resurrect.");
        
        
        // Burn utility tokens for the resurrection
        _burn(msg.sender, _selftResurrectionCost);

        //Add this Satoshi to the map of hell version Satoshis
        _hellVersionSatoshis[satoshiId] = true;
        
        //Make a public record of this resurrection (needed for metadarta conversion)
        _resurrectedSatoshisHell.push(satoshiId);

        //Resurrection completed, emit the event
        emit SatoshiHellResurrection(satoshiId,msg.sender);
    }

    // Heaven resurrection methods
    function resurrectHeavenPublic(uint256 satoshiId)
    public
    {
        require(_isContractActive, "We'll be back in 5. (Contract is not active at this moment)");

        //You can not turn unique and super rare satoshis into heaven Satoshis
        require(_restrictedSatoshis[satoshiId] == false, "Resurrection of this Satoshi is restricted.");

        //You can only turn hell Satoshi into heaven Satoshis
        require(_hellVersionSatoshis[satoshiId] == true, "Satoshi must be a hell version before turning it to heaven version");
        
        //You can not turn heaven Satoshis into heaven Satoshis
        require(_heavenVersionSatoshis[satoshiId] == false,"Can not turn a heaven Satoshi into heaven Satoshi.");
        
        //Is satoshi in hell / available for resurrection?
        require(_satoshisInHell[satoshiId] == true,"This Satoshi is not in Hell and it can not be resurrected.");
        
        //Does sender have enough funds to resurrect this Satoshi?
        require(balanceOf(msg.sender) >= _publicResurrectionCost, "You do not have enough tokens to resurrect this Satoshi");

        // Burn the resurrection payment
        _burn(msg.sender, _publicResurrectionCost);

        //Remove Satoshi from hell and list of hell version Satoshis
        delete _satoshisInHell[satoshiId];
        delete _hellVersionSatoshis[satoshiId];

        //Move satoshi to the list of heaven version satoshis
        _heavenVersionSatoshis[satoshiId] = true;
        _resurrectedSatoshisHeaven.push(satoshiId);

        //Transfer the resurrected Satoshi to the resurrector
        IWASNFT(_wasNFTSmartContract).safeTransferFrom(address(this), msg.sender, satoshiId);
        
        //Notify the world about this resurrection
        emit SatoshiHeavenResurrection(satoshiId,msg.sender);
        emit PublicResurrection(satoshiId,msg.sender);
    }

    function selfResurrectHeaven(uint256 satoshiId)
    public
    {
        require(_isContractActive, "We'll be back in 5. (Contract is not active at this moment)");

        //You can not turn unique and super rare satoshis into heaven Satoshis
        require(_restrictedSatoshis[satoshiId] == false, "Resurrection of this Satoshi is restricted.");

        //You can only turn hell Satoshis into heaven Satoshis
        require(_hellVersionSatoshis[satoshiId] == true, "Satoshi must be a hell version before turning it to heaven version");
        
        //You can not turn heaven Satoshis into heaven Satoshis
        require(_heavenVersionSatoshis[satoshiId] == false,"Can not turn a heaven Satoshi into heaven Satoshi.");

        //Does sender have enough funds to resurrect this Satoshi?
        require(balanceOf(msg.sender) >= _selftResurrectionCost, "You do not have enough tokens to resurrect this Satoshi");

        //You must own this Satoshi
        require(IWASNFT(_wasNFTSmartContract).ownerOf(satoshiId) == msg.sender, "You must own the Satoshi you wish to resurrect.");
        

        // Burn the resurrection payment
        _burn(msg.sender, _selftResurrectionCost);

        //Remove Satoshi from the list of hell version satoshis
        delete _hellVersionSatoshis[satoshiId];

        //Move satoshi to the list of heaven version satoshis
        _heavenVersionSatoshis[satoshiId] = true;
        _resurrectedSatoshisHeaven.push(satoshiId);
        
        //Notify the world about this resurrection
        emit SatoshiHeavenResurrection(satoshiId,msg.sender);
    }

    function _addSatoshiToHell(uint256 satoshiId)
    internal 
    {
        require(_isContractActive, "We'll be back in 5. (Contract is not active at this moment)");
        require(satoshiId <= 1024,"Satoshi outside of the NFT collection size.");
        require(satoshiId > 0,"Satoshi outside of the NFT collection size.");
        require(_satoshisInHell[satoshiId] == false,"Satoshi already in hell.");
        require(_restrictedSatoshis[satoshiId] == false, "Resurrection of this Satoshi is restricted.");
        require(_heavenVersionSatoshis[satoshiId] == false,"Can not add heaven Satoshis to hell.");
         
        _satoshisInHell[satoshiId] = true;
        emit SatoshiAddedToHell(satoshiId);
    }

    //Only accept satoshis from WAS OS Satoshi Hell wallet
    function onERC721Received(address operator, address from, uint256 satoshiId, bytes memory)
    public
    virtual
    override
    returns (bytes4) {
        require(_isContractActive, "We'll be back in 5. (Contract is not active at this moment)");
        require(from == _satoshiHellOSAddress, "No thank you, I am not sure this is a WAS NFT.");
        require(IWASNFT(_wasNFTSmartContract).ownerOf(satoshiId) == address(this), "This Satoshi does not belong to this smart contract.");
       
        if (from == _satoshiHellOSAddress) {
            _addSatoshiToHell(satoshiId);
            emit incomingNftOperator(operator);
            emit incomingNftFrom(from);
            emit incomingNftId(satoshiId);
            return this.onERC721Received.selector;
        }
    }


    /**
    * Setters
    * The methods below are ownerOnly methods used to configure various properties of the smart contract.
    * These methods are also used to control various states of the contract.
    */
    function manualAddSatoshiToHell(uint256 satoshiId)
    public
    onlyOwner 
    {
        require(IWASNFT(_wasNFTSmartContract).ownerOf(satoshiId) == address(this), "This Satoshi does not belong to this smart contract.");
        _addSatoshiToHell(satoshiId);
    }

    function setSelfResurrectionPrice(uint256 newPrice)
    public
    onlyOwner
    {
        _selftResurrectionCost = newPrice * 1000000000000000000;
    }

    function setPublicResurrectionPrice(uint256 newPrice)
    public
    onlyOwner 
    {
        _publicResurrectionCost = newPrice * 1000000000000000000;
    }

    function toggleContract()
    public
    onlyOwner
    {
        _isContractActive = !_isContractActive;
    }

    function toggleAirdrop()
    public
    onlyOwner
    {
        _airdropEnabled = !_airdropEnabled;
    }

    // Mint all utility tokens that were not claimed during the airdrop and transer them to the community wallet.
    function expireAirdrop()
    public
    onlyOwner
    {
        require(_airdropEnabled == false, "Can not expire the airdrop while its enabled.");
        require(_airdropExpired == false, "Airdrop already expired. Can not expire the airdrop again.");
        _airdropExpired = true;

        uint256 remainingTokens = _maxSupply - _claimedTokens;
        if (remainingTokens > 0) {
            _mint(_communityLiquidityAddress, remainingTokens);
            _claimedTokens = _claimedTokens + remainingTokens;
        }
    }

    function setCommunityLiquidityAddress(address newCommunityAddress)
    public
    onlyOwner
    {
        _communityLiquidityAddress = newCommunityAddress;
    }
    //If needed, to change the interfacing address for WAS NFT smart contract
    function setWasSmartContractAddress(address newSCAddress)
    public
    onlyOwner
    {
        _wasNFTSmartContract = newSCAddress;
    }

    function setSatoshisHellOsAddress(address newSatoshisHellOsAddresss)
    public
    onlyOwner 
    {
        _satoshiHellOSAddress = newSatoshisHellOsAddresss;
    }






    // Public getters
    /**
    * The methods below are used to get/read various internal vars/information from the contract.
    */
    function isSatoshiInHell(uint256 satoshiId)
    public
    view
    returns (bool)
    {
        return _satoshisInHell[satoshiId];
    }

    function getResurrectedSatoshisHell()
    external
    view
    returns(uint256[] memory) {
        return _resurrectedSatoshisHell;
    }

    function getResurrectedSatoshisHeaven()
    external
    view
    returns(uint256[] memory) {
        return _resurrectedSatoshisHeaven;
    }

    function isSatoshiHellVersion(uint256 satoshiId)
    public
    view
    returns (bool)
    {
        return _hellVersionSatoshis[satoshiId];
    }

    function isSatoshiHeavenVersion(uint256 satoshiId)
    public
    view
    returns (bool)
    {
        return _heavenVersionSatoshis[satoshiId];
    }

    function getMaxSupply()
    public
    view
    returns (uint256) {
        return _maxSupply;
    }

    function getTotalTokensClaimed()
    public
    view
    returns(uint256)
    {
        return _claimedTokens;
    }

    //How many tokens left?
    function getRemainingTokens()
    public
    view
    returns (uint256)
    {
        uint256 remainingTokens = _maxSupply - _claimedTokens;
        return remainingTokens;
    }

    function getAirdropStatus()
    public
    view
    returns (bool)
    {
        return _airdropEnabled;
    }

    function getPublicResurrectionCost()
    public
    view
    returns(uint256) {
        return _publicResurrectionCost;
    }

    function getSelfResurrectionCost()
    public
    view
    returns(uint256) {
        return _selftResurrectionCost;
    }

    function getWASNftContract()
    public
    view
    returns(address) {
        return _wasNFTSmartContract;
    }

    function getWasCommunityWallet()
    public
    view
    returns(address)
    {
        return _communityLiquidityAddress;
    }

    function getWasOsHellAddress()
    public
    view
    returns(address)
    {
        return _satoshiHellOSAddress;
    }

    function getContractState()
    public
    view
    returns(bool)
    {
        return _isContractActive;
    }
}

File 2 of 8 : ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 3 of 8 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @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.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * 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.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 4 of 8 : IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 5 of 8 : Airdrop.sol
//Contract based on https://docs.openzeppelin.com/contracts/3.x/erc721
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.9;
contract Airdrop {
    mapping(address => uint256) private _airdrop;
	constructor() {
        _airdrop[0x48E0Bb3A663529887982B94787E9E6C7fc497449] = 30000000000000000000000;
        _airdrop[0x6DFaEA023567DF25E4b1f0E05EF5443aC5C26Ed9] = 50000000000000000000000;
        _airdrop[0x204Ce9E684DdCEADaEfbBB0d5A4bC7eb481b57E4] = 50000000000000000000000;
        _airdrop[0x63EE9d3BF50bD5315E53Cd2C723719e6Cf0e3C96] = 30000000000000000000000;
        _airdrop[0x7358B3dD144332377c14D8A47844E05A1b6f50aC] = 10000000000000000000000;
        _airdrop[0x615dd68D8254a0D29b212A5Be73b00674D540c02] = 10000000000000000000000;
        _airdrop[0xDf3759cc2277aDcDB0a97b8AC1469a6EddBC6A8d] = 10000000000000000000000;
        _airdrop[0x64C9fb6C978f0f5dd46CB36325b56c04243bAB75] = 30000000000000000000000;
        _airdrop[0xa4D26fC0814a8dacef55A79166291DD0898a8194] = 20000000000000000000000;
        _airdrop[0xA4f6F09F546e2B0E160906564DD8e396c891318F] = 40000000000000000000000;
        _airdrop[0xb9C5878a4891942C43A20b11C53a76961426bAD2] = 50000000000000000000000;
        _airdrop[0xA23A702Df9d7a2b5C7c2Aa87Df295F85A4CE3ac3] = 10000000000000000000000;
        _airdrop[0xcAC21e79De5FAc9FcA03fbe3cE050B9116689eB2] = 90000000000000000000000;
        _airdrop[0x1e27F3175a52877CC8C4e3115B2669037381DeDc] = 50000000000000000000000;
        _airdrop[0x017395053f29De984F0bB008C20A99365CD9172c] = 10000000000000000000000;
        _airdrop[0xF0ba012eC6090369E623eE5EE8a3D3A99e2977b2] = 20000000000000000000000;
        _airdrop[0xF2E81438e26FcE88cC8deBf8C178b80A506cE435] = 50000000000000000000000;
        _airdrop[0xb1D610fB451b5cdee4eADcA4538816122ad40E1d] = 70000000000000000000000;
        _airdrop[0x2d907A917Dc848843Cc3397D4a9d3B10023fDeE4] = 10000000000000000000000;
        _airdrop[0x8cD0E99c9ED5D40cE84737Bf9C9969C6b7c13a53] = 10000000000000000000000;
        _airdrop[0x4384293860C81Dc6a8A248a648B6dCa35fF3aA33] = 70000000000000000000000;
        _airdrop[0xBD513191C04051fC789BC0274095b8137ec2C790] = 20000000000000000000000;
        _airdrop[0x4e1b83Dbc5F77faF3B3d450c2ea30BCD441d67b2] = 90000000000000000000000;
        _airdrop[0xD53B7F0bf1f1ccd199B46BE2fE79087154EFcdDA] = 10000000000000000000000;
        _airdrop[0x3052Dd6cFC8A09611D4d3d2430Ff5d8F43B2A22b] = 30000000000000000000000;
        _airdrop[0x0E862E0F9dFc849F95a0B5D64D5f16295373ff92] = 10000000000000000000000;
        _airdrop[0x2476c7F826339679dD3CfAFCaD72fA2fFa700b9d] = 60000000000000000000000;
        _airdrop[0x405EB35A58a0C88d9E193D4cB7e61c4Adf2fbcdF] = 30000000000000000000000;
        _airdrop[0xa214c5d496e7Dfa5c4DD3df5F6500b00aD746E96] = 20000000000000000000000;
        _airdrop[0x97874cf634457f07E7f1888C5C47D70DFAA542cb] = 80000000000000000000000;
        _airdrop[0x2e76E93931238E2eDFc245f16BD96f8779e21B51] = 80000000000000000000000;
        _airdrop[0x72a0726Ae7a9054476a8C7E759962A4dA667175F] = 30000000000000000000000;
        _airdrop[0x45BB3A3f57061f590Fa8AB7170D60f0C95Ce6eeB] = 10000000000000000000000;
        _airdrop[0xE008C844625CE7Eb4528d5E17fC2B6D782582cA7] = 10000000000000000000000;
        _airdrop[0xA219F044dc6d726f61249c7279EcFa457D6Aaea2] = 20000000000000000000000;
        _airdrop[0xA7bD22BcFC1eAE5f9944978d81ff71Bd5f5eAF42] = 20000000000000000000000;
        _airdrop[0xFD8E43431Bcdc2b42a28A95818077af7924c8F83] = 70000000000000000000000;
        _airdrop[0x6cb603c1967a32bb7b0726EcbCbB8c3A16b1c299] = 60000000000000000000000;
        _airdrop[0x5c4668d494C6Af375a20782727Ec2084605DDB64] = 30000000000000000000000;
        _airdrop[0x034B76cb6539F40be7853FD3F76aeb69E6A62677] = 30000000000000000000000;
        _airdrop[0x81083379a8c41501B39986D5C74428Dd618EB440] = 30000000000000000000000;
        _airdrop[0x7F2a2d2B16e889f954C79ec67CD42c2d4A1524Ee] = 30000000000000000000000;
        _airdrop[0xBa94281fC202399b77daC078722548Bd0faDB530] = 100000000000000000000000;
        _airdrop[0x59DC8eE69a7e57b42D25cd13C0Cd8d6665Aa70B2] = 100000000000000000000000;
        _airdrop[0x8951A87Adf50b555034B47D103875A1613B003B6] = 10000000000000000000000;
        _airdrop[0xf4015e422b95255671F4338B0a0819cfcDFC3517] = 10000000000000000000000;
        _airdrop[0x4bb74e3F27A41f0cC58A1696D61EFd4E4A754eD7] = 180000000000000000000000;
        _airdrop[0x197d43E5E7A3F662FEFF43119654AF1d6C7852E0] = 10000000000000000000000;
        _airdrop[0xBFc007C6D7dEb895643bf457060519137BbD2C8C] = 30000000000000000000000;
        _airdrop[0x3D75392bF1aC7C0617e639DCb5F58a156BE74fF8] = 10000000000000000000000;
        _airdrop[0x537DB9f04E5Be41dDE98d2684E0576638de3bF3D] = 10000000000000000000000;
        _airdrop[0xaEabe7513BB61325E22c0D7Fd7B2804b3e2C9C28] = 20000000000000000000000;
        _airdrop[0x7cA7Db1299e7Da45aBB55d274A18ec6eA53d66b8] = 60000000000000000000000;
        _airdrop[0xb87E63c791568E2ebE4b6E2DdB8a078F5B0B6BA5] = 100000000000000000000000;
        _airdrop[0x8093dda1fEdAC34a23540D6E75831800Dd9ea77A] = 60000000000000000000000;
        _airdrop[0x38aB518405bF4F84Add1508819d3beEe005976dB] = 50000000000000000000000;
        _airdrop[0x369DCD945f2ec96EFC489D9541b47cCa9594E9Fc] = 10000000000000000000000;
        _airdrop[0x2C42E8F3dBA3C17E765702FbC6918DeFeb76cd5f] = 10000000000000000000000;
        _airdrop[0x38c05b9B18f8B512CFDCE9bCFD0e57030344f602] = 20000000000000000000000;
        _airdrop[0xf98a9aCC1aAd53Abe8fD91A9BeB4537845960C76] = 40000000000000000000000;
        _airdrop[0xB0B7aBccD78a560955eaD86a34eae2F0B6f0199E] = 20000000000000000000000;
        _airdrop[0xdc90C6705c148e28970b108Efd1b5d4B5DAa0e46] = 10000000000000000000000;
        _airdrop[0x9309F2Ed55De312FDf51368593db75dE39369173] = 20000000000000000000000;
        _airdrop[0x72988B423c86afed473278E8d19a79456C404995] = 70000000000000000000000;
        _airdrop[0xA14B8d5E0687e63F9991E85DC17287f17d858731] = 10000000000000000000000;
        _airdrop[0x75AbF28b9CAe8edb0c1209efF172f9420CC63549] = 30000000000000000000000;
        _airdrop[0x5aDa65374aeF473fdD122feB78a17f4be5688ED0] = 130000000000000000000000;
        _airdrop[0xE037e26E4eB6ed3FE6d1383bc24217B461C82FA5] = 80000000000000000000000;
        _airdrop[0xF193B488B0384708ec4F0a1c6be3eD9BefC1Ee86] = 60000000000000000000000;
        _airdrop[0x6F14AFA784Ff0c764ecCB5F7A133403D5b7a4D34] = 80000000000000000000000;
        _airdrop[0x004196E84C7320EbB2e90e8dC4e0a766d3aaC8Db] = 20000000000000000000000;
        _airdrop[0xC649195a06E36041a394aEB3f3dF5F381724fFC8] = 20000000000000000000000;
        _airdrop[0x4e96CA2FC750520d508FadeD30C8B4bb479eE5BB] = 10000000000000000000000;
        _airdrop[0x60F444A38d8792EeD42E6E091E64216F93ceEeb8] = 20000000000000000000000;
        _airdrop[0xb261F055621fb3D19b86CD87d499b5aD9a561115] = 20000000000000000000000;
        _airdrop[0x85D3c6be944F7fF76968C79Fa7CE409F0a3734B6] = 30000000000000000000000;
        _airdrop[0x995418c315Ff98763dCe8e57695f1C05548b4eF5] = 20000000000000000000000;
        _airdrop[0x2CD99E5F701aEBE4E44e64c8062afad53F290BD3] = 10000000000000000000000;
        _airdrop[0xC93e7FEc09E54ECbbAE66754159989E44FB12aD2] = 20000000000000000000000;
        _airdrop[0xeBC5258E2810d9f1CE9e545930E5b931D2706191] = 20000000000000000000000;
        _airdrop[0x4C7688fB4Dc24F34E837ee6D5D25EB2Fa2B07235] = 40000000000000000000000;
        _airdrop[0x1C163b72D5a6bCA2Fc0535A1df2Bbc39fBaed2F5] = 10000000000000000000000;
        _airdrop[0x0e0bDf28A0324dD3639520Cd189983F194132825] = 30000000000000000000000;
        _airdrop[0x1aFF55f3BAfE7b83BE9Fbc82237a95Fb8d557e60] = 30000000000000000000000;
        _airdrop[0xd9a83959B85F191a5A9FFEf6B4A99b27d1edF40D] = 30000000000000000000000;
        _airdrop[0x2628d76a52ef36CD1E440f061D81D155907c500b] = 10000000000000000000000;
        _airdrop[0x01C9a2bbb109a24E86535bB41007cd15a0177C11] = 50000000000000000000000;
        _airdrop[0xE18bB67496ee8d43D1dd63d63ff0cBF672a65fef] = 10000000000000000000000;
        _airdrop[0xbda1825F4DD9B737e4719812f278F354433A6c4E] = 110000000000000000000000;
        _airdrop[0xe0d9A11C43079a6fd38d4F0F9D27282AbB8c71Cd] = 10000000000000000000000;
        _airdrop[0x82072FDB7EB0CCB624fd2914A4e8a712C782FA8f] = 20000000000000000000000;
        _airdrop[0x5Ae546E442355e4F3c7b48fFe575FD40dFcbFa4a] = 10000000000000000000000;
        _airdrop[0xEd62B641dB277c9C6A2bA6D7246A1d76E483C11C] = 20000000000000000000000;
        _airdrop[0x07142d97b560Bf6B630f8B74747e707C4B139fb0] = 20000000000000000000000;
        _airdrop[0xefc90868fB7397D13Bf542eda85D03FEbDDe28BB] = 80000000000000000000000;
        _airdrop[0x2A17068BC37705fA1710dC8bFd1EE49Bc0b432b0] = 50000000000000000000000;
        _airdrop[0x3061E89523544f002D49cDff2e4825eC05e574C7] = 10000000000000000000000;
        _airdrop[0x835feEBEbe8b607eFf3ca85a4E22Bf712f19ed21] = 20000000000000000000000;
        _airdrop[0x5A6bdC17B9F89Cb52b38dad319dF293b037a43d4] = 30000000000000000000000;
        _airdrop[0x66aB275551Fa8f0E3F823858ED744F74fd9067bD] = 10000000000000000000000;
        _airdrop[0x208Eff61de4d585bf1983fdaA5eE9E6c0A92D938] = 40000000000000000000000;
        _airdrop[0x35d50ceB03933Da0e3d0D970aBCAfA32F269181d] = 250000000000000000000000;
        _airdrop[0x4a8A003acC8a2c0329286e46650bE18dfe2cb12d] = 50000000000000000000000;
        _airdrop[0x682ae71bae517bcc4179a1d66223fcDfFb186581] = 50000000000000000000000;
        _airdrop[0xCb7566fd2C7F63794C31E63Bc261e437F0ccCb28] = 20000000000000000000000;
        _airdrop[0xd469CD19CEFA18e4eb9112e57A47e09398d98766] = 20000000000000000000000;
        _airdrop[0xe8F7B0F38c288D49D19857e96Ec88cDd7eb9A2B9] = 20000000000000000000000;
        _airdrop[0x6dDa282E7d11C38eb06e1cBad60c0767be39a3F6] = 20000000000000000000000;
        _airdrop[0x4d140380DE92396cE3Fa583393257a7024a2b653] = 100000000000000000000000;
        _airdrop[0x4B9fC228C687f8Ae3C7889579c9723b65882Ebd9] = 40000000000000000000000;
        _airdrop[0x87689C4e28200de1f0313A98080B4428490F7285] = 10000000000000000000000;
        _airdrop[0x1d4eb3b64Cee406B087591C5d8933005E5145e4a] = 30000000000000000000000;
        _airdrop[0xE96Db1b8ea6432E692a1CaA9dCf07662610AC04D] = 10000000000000000000000;
        _airdrop[0xD77D92f3C97B5ce6430560bd1Ab298E82ed4E058] = 30000000000000000000000;
        _airdrop[0x6955e29a59BF3748F62C2e8b8877A36d503D6d45] = 10000000000000000000000;
        _airdrop[0xa94c5f196a8C76c869AA712253d35102d1EAd6D5] = 10000000000000000000000;
        _airdrop[0xb78D0133b00Cb701887D5b009a9e9BD92459D46f] = 10000000000000000000000;
        _airdrop[0xC15f55d4381473A51830196d0307c2987e9A39d9] = 30000000000000000000000;
        _airdrop[0x822166Dc6A1ADc21ae1B7fbA3b700167cf0f0a6c] = 40000000000000000000000;
        _airdrop[0xdDafB7c4fEd00D11080f53b9EfaAA0CB1aB5cEf8] = 20000000000000000000000;
        _airdrop[0x2BEa720a5fe5e7738d775e8BfD3a37Fa072Cd46c] = 10000000000000000000000;
        _airdrop[0xCb46d80af2FCbC442E644fC360593d6abF4d3258] = 20000000000000000000000;
        _airdrop[0xaA4ba5752ED40b31BDDcD450b17649D88994dE2b] = 30000000000000000000000;
        _airdrop[0x13bCF25E17a633FAE7cfb62bfe92b53F227d722f] = 30000000000000000000000;
        _airdrop[0x087e269f123F479aE3Cf441657A8739236d36aEe] = 20000000000000000000000;
        _airdrop[0x876b32129a32B21d86c82b0630fb3c6DDBB0e7B8] = 20000000000000000000000;
        _airdrop[0x3C132E2d16f7452bdfAEFaE6C37b81e0FF83e749] = 70000000000000000000000;
        _airdrop[0x2c1a74debC7f797972EdbdA51554BE887594008F] = 20000000000000000000000;
        _airdrop[0x2F3282c956B65641E9d6D5F70262724FD32d2513] = 120000000000000000000000;
        _airdrop[0x635123F0a1e192B03F69b3d082e79C969A5eE9b0] = 150000000000000000000000;
        _airdrop[0xe4125A48C86C4281E8c02d71F5073516684da9dA] = 20000000000000000000000;
        _airdrop[0xE495C36e756Ba677D5Ae8fb868f8c8A41cc51611] = 50000000000000000000000;
        _airdrop[0x7d48f0AD0b2187C30Bb1cc6e930fB960161d3d6c] = 10000000000000000000000;
        _airdrop[0x42Ba24C0E282cB2F2732D305960ede5eDC3a6896] = 10000000000000000000000;
        _airdrop[0x69AE208ea38d55649dc6a49431557393a72149e9] = 10000000000000000000000;
        _airdrop[0xf6152a61dd9E41bc4b1DE9563fEe3b4162e6AdEE] = 140000000000000000000000;
        _airdrop[0xfd04340F02398520296bE10f785e6Ee1f0F36b85] = 50000000000000000000000;
        _airdrop[0x70Eb382597C564c6eAbFbf2971Cb48bD98A4bEdb] = 30000000000000000000000;
        _airdrop[0x2eea4706F85b9A2D5DD9e9ff007F27C07443EAB1] = 30000000000000000000000;
        _airdrop[0x2B7cD3Fec35fb21eFc8913E7383639adb088384B] = 20000000000000000000000;
        _airdrop[0x3f6a989786FD0FDAE539F356d99944e5aA4fBae1] = 20000000000000000000000;
        _airdrop[0xcD79853e46082e521E20f31c39Aff11adE79b8c6] = 10000000000000000000000;
        _airdrop[0x5Ee580933a9579c21Ef9187Bf485A4C8F35D3a92] = 20000000000000000000000;
        _airdrop[0x1D33BBe15f7CBe45676F3663340Ae6e8B2Bc5DE4] = 20000000000000000000000;
        _airdrop[0x215867219e590352f50f5c3B8cE2587236138494] = 20000000000000000000000;
        _airdrop[0x9c8bd5847971f024491b893063bE77b31E091117] = 10000000000000000000000;
        _airdrop[0x8bc3A620F67C4e0039AAD661Ed069C2E6Ad5faa3] = 20000000000000000000000;
        _airdrop[0x1877e5A2B21dBC2EB73eC1b8838461e080932A9f] = 20000000000000000000000;
        _airdrop[0xedE6D8113CF88bbA583a905241abdf23089b312D] = 20000000000000000000000;
        _airdrop[0xd8BD12bcdbDbf8F216127640F2590942b5E2F336] = 30000000000000000000000;
        _airdrop[0xc8c626980f06e95825cf2e12F762D2eaB8CA7b46] = 30000000000000000000000;
        _airdrop[0xA47603B00307Bf81A2f49176BBfbf600322Dc2a1] = 20000000000000000000000;
        _airdrop[0xcE9135ab7aEBe4a1Ff175e0bE2f9a25a0fb78a83] = 10000000000000000000000;
        _airdrop[0x399190C47dD486A553dEDCbD5465f811ab15C32B] = 50000000000000000000000;
        _airdrop[0x131E8fbB001DaFb01d96B87B2bb58Aa524c6BdA5] = 10000000000000000000000;
        _airdrop[0xC992c764a5dD14dd5Bd6F662a14377E1Cf7e31df] = 50000000000000000000000;
        _airdrop[0x4A90601B49605B3998A5339833763931D9BD4918] = 20000000000000000000000;
        _airdrop[0x7705cCfC1E1aAf09d24070F17e6eb64629e0F361] = 10000000000000000000000;
        _airdrop[0x140Eef04d2392C72403C046509555A779aF40957] = 10000000000000000000000;
        _airdrop[0xDCC15c04963095154aBa0131462C5F4b5284b7c0] = 30000000000000000000000;
        _airdrop[0xc4dFEa5E0D1DDAABca605E86Cc57ab7df9665a0a] = 20000000000000000000000;
        _airdrop[0x7fc0aB0667981a5F8cd18306360327386e217310] = 80000000000000000000000;
        _airdrop[0xBa6A7deF11Cc2d880D9cB3663350F6D571878af2] = 10000000000000000000000;
        _airdrop[0xa7BFc3Fb947Bd41B85Cf759900012456B0d39090] = 20000000000000000000000;
        _airdrop[0xd8FA256F9Fa47De1091441CD7D50644CE7CF5C50] = 10000000000000000000000;
        _airdrop[0x5AC15cF56DFFc5240Fa9e559FAEfE9cD31aDFDAC] = 10000000000000000000000;
        _airdrop[0x3723DDeC18A8F59CFC2bED4AEDe5e5Bebdf21712] = 20000000000000000000000;
        _airdrop[0x6dF83e206951f9C421e6ef9d2dC7BE0b5112D031] = 10000000000000000000000;
        _airdrop[0xE4E83eF0AA0e22506cf920434A3b1d9685DBD171] = 20000000000000000000000;
        _airdrop[0xFA9E14bAf401253e478Cb2378b911A76A535e697] = 20000000000000000000000;
        _airdrop[0xf64980B3f3EA14b1235f248B9BCA6853F0356F7F] = 50000000000000000000000;
        _airdrop[0xc564D44045a70646BeEf777469E7Aa4E4B6e692A] = 20000000000000000000000;
        _airdrop[0x81b4EA3D93f36506c0Ab3559a2401fe6698D5FdA] = 20000000000000000000000;
        _airdrop[0x632Ba722F95008963Be23dcd37CbaC3598182dAE] = 20000000000000000000000;
        _airdrop[0x06Df3F02E84F7034CF70f52cdf5Cdc0Ab02F6Fea] = 50000000000000000000000;
        _airdrop[0x8a9dF68963A68379Ad48245377eE172CbA56b92E] = 10000000000000000000000;
        _airdrop[0xb6ddE9a985c77d7bC62B171582819D995a51C3bf] = 30000000000000000000000;
        _airdrop[0xEF815e51fdf1Dc91877933bEF8B55375Aa3c34C6] = 10000000000000000000000;
        _airdrop[0x386c2f5aAB7392F86e5aF3de097673b7BFc4aE64] = 10000000000000000000000;
        _airdrop[0x22a6C7EAE21e6197d2F180673B8f939e0B2fAe8B] = 10000000000000000000000;
        _airdrop[0xE4324E43Ae3e8a611E927dF10795D3A20152aE4a] = 10000000000000000000000;
        _airdrop[0xb7153a50412beAebA3E9384460B75A7abcBF7d15] = 10000000000000000000000;
        _airdrop[0xF8f18ff9969aB94299e763e038902262002341CD] = 20000000000000000000000;
        _airdrop[0x4624865DAE01e0A152155e853b6cABBBe9eD24b9] = 80000000000000000000000;
        _airdrop[0x3f632222501F1342DCE8dE9D50d58E979bae5e2f] = 10000000000000000000000;
        _airdrop[0xDbfBc6B71CD26A88aaC7eBf01806614592d046d5] = 10000000000000000000000;
        _airdrop[0x9Fe658b1487E392b778B9d256020D532a3Cc19c2] = 10000000000000000000000;
        _airdrop[0x2711831f3EbCc36541aAc7cA4B0dDfaC56D0E2e0] = 30000000000000000000000;
        _airdrop[0x3908176C1802C43Cf5F481f53243145AcaA76bcc] = 20000000000000000000000;
        _airdrop[0xeFf626B4beBBd3f26cbA77b47e9ae6C9326cfebB] = 50000000000000000000000;
        _airdrop[0xE057B08e0D2DEda77BAFe0B7797bb0bb8d174E11] = 100000000000000000000000;
        _airdrop[0xd42F1B8778811aD583dc82ebe2814B3CC21192DF] = 20000000000000000000000;
        _airdrop[0x8Bf52d54578d06724A989906D47c7B021612E502] = 20000000000000000000000;
        _airdrop[0xC27e35f8AeE69c978d3360d30f973e798a1702Ef] = 20000000000000000000000;
        _airdrop[0x8A808Ac0a317E1a76C82831037204C9d3D9F9f3F] = 40000000000000000000000;
        _airdrop[0x9DB99D5FDedC50F333f3d128b91c435584D55cFC] = 10000000000000000000000;
        _airdrop[0xe4EBad58c7B418ACDBb4910cB29cB366DC6B31f8] = 10000000000000000000000;
        _airdrop[0xCf13EF0C1C77593902d76701d683141D26fcaB29] = 10000000000000000000000;
        _airdrop[0x9dC4568fC6ee6F6c2A00E1C392b23A8E7a401359] = 10000000000000000000000;
        _airdrop[0x461B5DD073BE81CaD6752bFcc355d5A252b8E910] = 50000000000000000000000;
        _airdrop[0xDA44F55C5ed083E579F0D343DDc97B473bAd9977] = 20000000000000000000000;
        _airdrop[0x86C0Cc4EF96577A2B2fAFc6eC62C26Fa30D8c735] = 20000000000000000000000;
        _airdrop[0x1c7B307CC027ec9163B1D4AE9d771c16F65598c2] = 10000000000000000000000;
        _airdrop[0xcCc487e0b99647d0D699C1FAfD1AEe16f2512fA6] = 10000000000000000000000;
        _airdrop[0x6B354c4505F30aDB4B70643a7a3e3Bc375194AA0] = 20000000000000000000000;
        _airdrop[0xA613e95408dbEfc3aeCB4630BDE04E757Bc46fD8] = 10000000000000000000000;
        _airdrop[0x6424094AaF8D7131C48e865Ad7a9F0A96E9b1329] = 10000000000000000000000;
        _airdrop[0xb0B56557092d87DE2A9648Cd9ab1c9B28a4A2B43] = 10000000000000000000000;
        _airdrop[0x7515a84722Be2eaACc7308892E21fae8B8D136d8] = 10000000000000000000000;
        _airdrop[0xA11c38BD820Ae3e3236e2EE750Ec2A6577173C49] = 10000000000000000000000;
        _airdrop[0x3D352A5063eAcfCc67187Db69080dFc219C553eA] = 10000000000000000000000;
        _airdrop[0xED114f78CbACf13E33450170162f341277292d54] = 10000000000000000000000;
        _airdrop[0x589a22fd4011d46B95891D1610aeBb25A39A1A9B] = 20000000000000000000000;
        _airdrop[0x050f062FA14B9da77C12b555656DE1C05dfC8Ab8] = 20000000000000000000000;
        _airdrop[0x86161076B6B234B6A56644a03c29aDd03e23eB91] = 10000000000000000000000;
        _airdrop[0xFf5772aD26453CD2c5Af595313435Cb825426Fc9] = 10000000000000000000000;
        _airdrop[0x96C075f295431C5D9fce55593902579b80fAF4A0] = 20000000000000000000000;
        _airdrop[0xB64614e28ccE4eC769c38fB979493016278ce440] = 30000000000000000000000;
        _airdrop[0xd968c650d86B6d576B746e31944016773E074f4a] = 10000000000000000000000;
        _airdrop[0xcDa8bec81F5090EE74509606FEDaF533148d0b26] = 20000000000000000000000;
        _airdrop[0x3090Ae063988b205b7d265121687ff1537c68F1D] = 10000000000000000000000;
        _airdrop[0xba4Ac4Db0EbA3da64Aba5D968CDf74CDfd2a6b9a] = 30000000000000000000000;
        _airdrop[0xE543F7311d4f97ed2d67Be409cfa353127D7F42B] = 30000000000000000000000;
        _airdrop[0xA96329580a8d31d47D2C083DB97066754188dd51] = 20000000000000000000000;
        _airdrop[0x0d6E832e8188c308904DE51EA62B43920FE1da46] = 20000000000000000000000;
        _airdrop[0x3c0EDd62018cb3c0E4044E3909c58d64CACB8dc3] = 30000000000000000000000;
        _airdrop[0x71D645C3CDe10912f98933c7BbA2cd971485A8c0] = 10000000000000000000000;
        _airdrop[0x2eE88422FBC9Ed5C4689089b05154887d737d76B] = 30000000000000000000000;
        _airdrop[0x27174e4cd394801D6fC316831dEfC16F43a07f55] = 10000000000000000000000;
        _airdrop[0xB35Abb65F67fd942fbD0a9fB96Eb2db8791357B2] = 10000000000000000000000;
        _airdrop[0x59164085e872594CB33F198C24a3485329dd09D5] = 10000000000000000000000;
        _airdrop[0x66B471Cf3ED57Cf8BDA6948ec1B412CFe7c4c266] = 10000000000000000000000;
        _airdrop[0x828cDcDc2a006E5EBCA06EEd673BFa8DF897852D] = 50000000000000000000000;
        _airdrop[0xA0ac4824CB006EeC9Ee510aac84cF9BB983c9494] = 10000000000000000000000;
        _airdrop[0xec7dA9b90713B119969a8309607197e5A8606493] = 20000000000000000000000;
        _airdrop[0xFEE8f55463e64b8E252269EF105F31B164619958] = 20000000000000000000000;
        _airdrop[0xB7f3045e4EF29D45C0AEbC9E93Ff3053882c5DC9] = 10000000000000000000000;
        _airdrop[0x1d2290Ed86055F96526AFB0ff8Fbe201C4eFce39] = 10000000000000000000000;
        _airdrop[0x1FC9aD1d4b2Ec8D78CfDA9FC35Cf729b9B49E7B6] = 20000000000000000000000;
        _airdrop[0x0E10CCf2995AD7a77908984F134778243D1052A5] = 10000000000000000000000;
        _airdrop[0x500bB12d7D453c8a8D16b4167946F11C98F5Aa5E] = 10000000000000000000000;
        _airdrop[0x8bfb27fe31e39959Bcc3Ec14ED5031f4F75b6041] = 10000000000000000000000;
        _airdrop[0x175F02F6473EcD2E87d450Ef33400C4eE673C387] = 20000000000000000000000;
        _airdrop[0xdc9121d70FDb1d997821F8B6146B41f347798dE0] = 40000000000000000000000;
        _airdrop[0x8aA2d6C90a402491B325B0cf7d93Ef582754a99e] = 20000000000000000000000;
        _airdrop[0xB7752f329b72E71a6066c7d944b0B69fEE970e4d] = 30000000000000000000000;
        _airdrop[0x5c5D1c68957EF6E9e46303e3CB02a0e3AecE1678] = 30000000000000000000000;
        _airdrop[0x6B4ee11d28ebeee4B933E17865F66d810D14297D] = 10000000000000000000000;
        _airdrop[0x5f0Fa6E54B9296622235CC146E02aaEaC667325a] = 70000000000000000000000;
        _airdrop[0x015732d3b7cda5826Ae3177a5A16ca0e271eA13F] = 20000000000000000000000;
        _airdrop[0xc7Cc0b1e40116574E1750Bc3FbA54f12c97F2319] = 10000000000000000000000;
        _airdrop[0xA01481b6fBE54BE00661290f1cE49e14E3Af82Ef] = 50000000000000000000000;
        _airdrop[0x8aF0B9A9B751E086122bC340188Bd9d99b8C7ec1] = 60000000000000000000000;
        _airdrop[0x826ae03F697BbD3dAD37E9b34e7a8989d9317fc4] = 30000000000000000000000;
        _airdrop[0x1105bF50bE63cdaD34Ff7ac9425C1645e6275E1e] = 20000000000000000000000;
        _airdrop[0x0e45305f2203f0a4E430ca046C49Cf1e278a9013] = 10000000000000000000000;
        _airdrop[0xd7382dE5A85485Da6a79885E6757B108EBebc758] = 10000000000000000000000;
        _airdrop[0xDAFB6e907fC8589894F7d9d44D02c3fb50ffCE31] = 10000000000000000000000;
        _airdrop[0x53D881C09448da0112A2FEA60c954D4495B20e71] = 10000000000000000000000;
        _airdrop[0xfeAaB37506558E5cF3120A86E597943F89E8B8bE] = 20000000000000000000000;
        _airdrop[0xC709ACBD5531E461e39D04A28E36B81F4f6b995d] = 20000000000000000000000;
        _airdrop[0x2e47814BaA1Dd59F1e604f26E113Aa37B83276E5] = 20000000000000000000000;
        _airdrop[0x2F44B0D306B302edbef4DA019ae4e1005D58De35] = 30000000000000000000000;
        _airdrop[0x828B5Fa560a19D8aB8fAf05DE6E3F403e8D5AF21] = 10000000000000000000000;
        _airdrop[0xCBF8168418E618C57ea52a6128CDdbC096D3DB37] = 10000000000000000000000;
        _airdrop[0xE8d6001443d83E152FDf56d71a79E87B1c55b41b] = 10000000000000000000000;
        _airdrop[0xE95B8E7Ba16A19EFE3Ed3eD53fB47aa2319837e2] = 10000000000000000000000;
        _airdrop[0xD8eBaD35a992d5A460254383d7e5e5556516e4dA] = 10000000000000000000000;
        _airdrop[0x7ac34ed389d1D23BD85eC5edcBABA7C7eB2CD4Ac] = 80000000000000000000000;
        _airdrop[0x2b3a7d2b25Cc976F299080cD6A56eb3DB84C55b6] = 10000000000000000000000;
        _airdrop[0x7dA052e64fFA097A9819E7cc5F0e2b78f152e145] = 10000000000000000000000;
        _airdrop[0xe0debbB1A8b830B0D7A3Fe45A42A7dAd85B21f80] = 50000000000000000000000;
        _airdrop[0x206A95f8f2b60ea9D6642b5116e6D46aaa19CBB0] = 10000000000000000000000;
        _airdrop[0xC26990939740aAA4a8f4EF7eb212EcD6c31b4C06] = 90000000000000000000000;
        _airdrop[0x71a650C9bfF9D83a48Cf6d857D188Ba39C19bB01] = 20000000000000000000000;
        _airdrop[0x7403BDD9283EBd871630Fb5deB07cc427A67B3f9] = 10000000000000000000000;
        _airdrop[0xFf78bef83d6916b7d4f026C9EFd1E40099031A8B] = 10000000000000000000000;
        _airdrop[0x91115D501BC84d9CAf2f09AA3eDe863483FBA19A] = 20000000000000000000000;
        _airdrop[0x84FbB28e368946Ec4488fC74aB9E5d3BDfA6fEC2] = 10000000000000000000000;
        _airdrop[0x11f1908a8b6DbbDcEd43E920E21B78D9e32e3493] = 50000000000000000000000;
        _airdrop[0xe3863A499B65350BB13FB88BdF97Cbbe117cc0a3] = 10000000000000000000000;
        _airdrop[0xb08458E7bb184C0a0206d8c0Ce124D331983C1f9] = 10000000000000000000000;
        _airdrop[0x057E3520e130d62344C7AfF216568B3d78B89CD0] = 20000000000000000000000;
        _airdrop[0x80f3EEe5De1F656369860506d927533210077C5B] = 10000000000000000000000;
        _airdrop[0xb994bA33eaB3744020454a843b6FD5008Cea29c0] = 10000000000000000000000;
        _airdrop[0x0f15E698556f2c96e8Ed8f0964318dff378eA17f] = 30000000000000000000000;
        _airdrop[0x37F12bC1974843aA9657Fd1614a3eF9b08427E51] = 80000000000000000000000;
        _airdrop[0xC9793E1129322e28D657c803ac3354e4D9bFaf3E] = 50000000000000000000000;
        _airdrop[0xE0cc67a04705D0C7E946C9C5FFBb5a427bC24545] = 10000000000000000000000;
        _airdrop[0xcA8A7EFc165a9f31fc46eA7f3A85902bfb478CBD] = 10000000000000000000000;
        _airdrop[0xf508cDD187CFEb8Ec46E5430bfaEA449C82698Fe] = 20000000000000000000000;
        _airdrop[0xfe8129f030A205eAf338af2dDd34c306B769c090] = 10000000000000000000000;
        _airdrop[0x9E688a25aCaA94f4172Cc89B56DD06f4ea22Ff77] = 10000000000000000000000;
        _airdrop[0xD7cA49f6E3C90864BC7475a3B2e1B20377D6D820] = 20000000000000000000000;
        _airdrop[0x1Cda38092C37cC0D4008f69Da364FcA7E858CE78] = 30000000000000000000000;
        _airdrop[0xC4b4f3d707CC2A9C023E2e83fd87D39075f44f05] = 110000000000000000000000;
        _airdrop[0x5F4C5ef5Be53Db7631d5257348BBcD354159269A] = 10000000000000000000000;
        _airdrop[0xF02068333cB17993CEc1948f42A2244c5Dc5bdd0] = 10000000000000000000000;
        _airdrop[0x9945F42389497071Bd0d284B8819D57a2f88D312] = 10000000000000000000000;
        _airdrop[0xAC85BCE64Fcf6420a767fD438c9A20c9dBABc2D8] = 10000000000000000000000;
        _airdrop[0x46c48a7f5459aC749a1A4AbccED7796e112Da005] = 10000000000000000000000;
        _airdrop[0x79B3A621E3e0ce4F240763130C56eAd96f10565E] = 10000000000000000000000;
        _airdrop[0x0eaB7c25146423e9CA921D608aC3D436892183AB] = 10000000000000000000000;
        _airdrop[0xF3ebaD21AE3f6D5882d097F8EB1D0deAC2C66D00] = 10000000000000000000000;
        _airdrop[0x507b621DA61CB0F3581EEC2898E041275E9e4c61] = 10000000000000000000000;
        _airdrop[0xf040E96b19B385EEAFDD48487cAec748e80D15f9] = 10000000000000000000000;
        _airdrop[0x347E694f5e396924f8Ca8558E9d6600A27c00A07] = 10000000000000000000000;
        _airdrop[0x2121287C008f0b52D79d9FC9e9Db0F9F059Fdc49] = 10000000000000000000000;
        _airdrop[0xb2D1272E1169497A5d941490FDF0bC6328F5C13e] = 10000000000000000000000;
        _airdrop[0x9E750599aFD252b38f5bFF6cb223195346A03592] = 10000000000000000000000;
        _airdrop[0x445b34aaab922Ef104eD195D396dA020AFf432Cf] = 10000000000000000000000;
        _airdrop[0x18B1146573cEbdF82D8Ce7D7698D172499C95755] = 20000000000000000000000;
        _airdrop[0xCC9dA06FCE4750728806a1F324D2bDd2eA84eBe0] = 20000000000000000000000;
        _airdrop[0x100cC7048A3290bF5d94dAe865d308fBDdf332CC] = 10000000000000000000000;
        _airdrop[0x16dde7bDf083a0A41b6617237a2Af27034cb79eA] = 10000000000000000000000;
        _airdrop[0x2758DF847b870e2eD2B343d0c5d2437dDAc70A38] = 10000000000000000000000;
        _airdrop[0xe91d95bA259C6D8001a06DeaF02F811baA3e2DFA] = 10000000000000000000000;
        _airdrop[0x0045770bbA2805E1631631E7DDc917BA9D4Fc523] = 10000000000000000000000;
        _airdrop[0x1Adc7C20666167F49Bc2d1C80C73D157804b6F69] = 20000000000000000000000;
        _airdrop[0xC7A7A0c0F1B6b47703792D82185B0624cC3E79A2] = 10000000000000000000000;
        _airdrop[0x7F37e41b3C4aBF5500f2c5226A526FC99cCFeE61] = 10000000000000000000000;
        _airdrop[0x8B18824aA942bD4cd8410c561Fa4d05B6a0a5f4A] = 10000000000000000000000;
        _airdrop[0x3cA33bCcbA02Af638857bE53C18A4e5E622BC406] = 10000000000000000000000;
        _airdrop[0x898929d50566138bed1dEB1688919b52AB80aE63] = 10000000000000000000000;
        _airdrop[0x4C0D1Ea8a7F7BC2d74ca4E6cCBeFC97CAED8A2f5] = 20000000000000000000000;
        _airdrop[0x6b867Ed44Fd4042202156848D9824F9dA255fa43] = 20000000000000000000000;
        _airdrop[0x63847477f40C2C1125c3FaCb961A9Fc5a4eD51Db] = 10000000000000000000000;
        _airdrop[0xa84a906da6e3EDF1e320fc5e55163738b8B5Dd5F] = 110000000000000000000000;
        _airdrop[0xffB20706Ad48Bce88F119C9662364c02078C0280] = 10000000000000000000000;
        _airdrop[0xa51d3bEFE1bAF4A0128282163E7A7f3816aDC6B6] = 10000000000000000000000;
        _airdrop[0x8D0E10138a1B59D0b47f3ec149715509a21fAc87] = 10000000000000000000000;
        _airdrop[0x97843e39b6D0Db171568Bf472C59F75BdD32180f] = 10000000000000000000000;
        _airdrop[0x3b6DE55766c443475eE99AFffa42866d845793Ef] = 10000000000000000000000;
        _airdrop[0x0Ff987DF044265c19fbDe9586974902279a88FeC] = 10000000000000000000000;
        _airdrop[0xb8758CE976308464062C107C264D57dc1a744C69] = 10000000000000000000000;
        _airdrop[0xF17f0fE554559441f64Cf2427b8d508cc8D39782] = 10000000000000000000000;
        _airdrop[0xCb2544047e2965650df1D12CE1aAcB8E304245a6] = 10000000000000000000000;
        _airdrop[0x377fC3b608A46eFC254A21D4B665D1eAc990d08c] = 20000000000000000000000;
        _airdrop[0x55c254fe3eC4e8a5d4AA51044359fa0571cDa0db] = 10000000000000000000000;
        _airdrop[0xFfa246C39083704ED6b6e82A5a03E3Ed658E3d83] = 860000000000000000000000;
	}

    function invalidateAirdrop(address airdropAddress) 
    internal
    {
        delete _airdrop[airdropAddress];
    }

    function getAirdropAmount(address to)
    internal
    view
    returns (uint256)
    {
        return _airdrop[to];
    }

}

File 6 of 8 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

File 7 of 8 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

File 8 of 8 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"maxTokenSupply","type":"uint256"},{"internalType":"address","name":"wasNftScAddress","type":"address"},{"internalType":"address","name":"satoshisHellOsAddress","type":"address"},{"internalType":"address","name":"communityLiquidityAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"satoshiId","type":"uint256"},{"indexed":false,"internalType":"address","name":"resurrectorAddress","type":"address"}],"name":"PublicResurrection","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"satoshiId","type":"uint256"}],"name":"SatoshiAddedToHell","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"satoshiId","type":"uint256"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"SatoshiHeavenResurrection","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"satoshiId","type":"uint256"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"SatoshiHellResurrection","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"fromAddress","type":"address"}],"name":"incomingNftFrom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"incomingNftId","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operatorAddress","type":"address"}],"name":"incomingNftOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"nftOwnerAddress","type":"address"}],"name":"incomingNftOwner","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"claimAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"expireAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAirdropStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"getClaimableTokensAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPublicResurrectionCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRemainingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getResurrectedSatoshisHeaven","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getResurrectedSatoshisHell","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSelfResurrectionCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalTokensClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWASNftContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWasCommunityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWasOsHellAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"satoshiId","type":"uint256"}],"name":"isSatoshiHeavenVersion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"satoshiId","type":"uint256"}],"name":"isSatoshiHellVersion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"satoshiId","type":"uint256"}],"name":"isSatoshiInHell","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"satoshiId","type":"uint256"}],"name":"manualAddSatoshiToHell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"satoshiId","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"satoshiId","type":"uint256"}],"name":"resurrectHeavenPublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"satoshiId","type":"uint256"}],"name":"resurrectHellPublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"satoshiId","type":"uint256"}],"name":"selfResurrectHeaven","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"satoshiId","type":"uint256"}],"name":"selfResurrectHell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newCommunityAddress","type":"address"}],"name":"setCommunityLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPublicResurrectionPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSatoshisHellOsAddresss","type":"address"}],"name":"setSatoshisHellOsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setSelfResurrectionPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSCAddress","type":"address"}],"name":"setWasSmartContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052601354601580546001600160a01b0319166001600160a01b039092169190911790553480156200003357600080fd5b5060405162006a8a38038062006a8a83398101604081905262000056916200351e565b604051806040016040528060118152602001702ba0a9902aba34b634ba3c902a37b5b2b760791b8152506040518060400160405280600381526020016257415360e81b8152508160039080519060200190620000b49291906200345b565b508051620000ca9060049060208401906200345b565b505060056020525069065a4da25d3016c000007fb14946b27e7b2d730d56396aebc80a2dc1807b7ef2c12fb1f25557b78eb5ac4c819055690a968163f0a57b4000007f71f7745243370b8018600f452800a2f0adba10c997e7f4cc895308e806e5ae6c8190557f20774d49ce09ce47566f253e636562c9dca190be0258a44df10053876e17402f8190557ff0908f6a3f70dc8ceeaa09fb5cf1f611e56da6164658da37f6540b81c510f15d82905569021e19e0c9bab24000007f371e3f5b7fa970de4428f5faf864cba6fc2254c9d0b45fa72fde276d753226668190557fe5bb8ae0c46ac20c1a474bb6c383f3f186683539a9c4a09e8ef15c7c49f200098190557ffdeacb6af2bef772c6c2f5fd87d7f34f44cf7d81bb785551d3b7a1725ee5952f8190557f317150c206d5327fd29052886afdc54384767544b6226534c2c3b71730bc845283905569043c33c19375648000007f972026570b6136df6221a7a37f5092b8046bd179deed4dc7f2b6e0167755ce91819055690878678326eac90000007fb51a07ea85b4e911193ec63dba5eb70fda572cbac27e07565dff4045b7b824df8190557fa9cd126ec8a0a6c893eb65bf569d5e2d52fbb0fc21d95b9baa9c44ce647b76c38490557fa4de1e9f7fac742d57971c8509bd2c841a0f5f8d52fdb6779719e49d84a789d783905569130ee8e71790444000007fa085b30ea09b35694739413d9507862948b67b790ac18b5cf0f34190dd2fc0848190557ff3a480844fe5dc89353983c7a92583f1904259063dd1802ac0bdf9883ffb8c0c8590557f69098b90b5f13309740a81c86f8709a053dc62bf3e122915066d318f8ca28c548490557f90179a36641f452c345c6157ca0531abde523837f92346317fddbe743064657e8390557f475d56584df4b7a9ce2ef891d1859b8ddc4ee21a4eddb460774f0c1f3b22a67c859055690ed2b525841adfc000007f07a4d4384ad9aefc2a5230808c1fec63c419665e7275e1d63df85630c7358f9c8190557fd50b2e74cca8e1f24dbcbe2f804e02f457890aba5f8aac7489bcda87926953e88590557fd1621bad564c3e9beb0b2d009a337b75f7f0d75108f18fcf865a1b705f983bdc8590557f397c5c267ba6ae4fea5dde287b183bc9ad1d45be745f5fcdb148f5a0a4caa8e68190557f508f98af7bdc18d49fa58fabc4ddbd0a375fd001d575e0a93164656685a1dae38490557f6fffac84f3f4c4de1928d52aff80ac98f2277f48caa5ecf971d79fb5a60be5c38290557fcdac855c8ec7f7bc401bfc4d377279d8916eef29bd059b80586b539dfbb381278590557f5bb4fc49a19ac3f245c888e810878f906b862a5dd5b9ba47f23321c1736da87d8790557fac44f08bb447e3f9a632a323de512502db14932492e0de9fdf8d93454a4abb83859055690cb49b44ba602d8000007f3c7280b2076b2bdd890cd64f1312c45a750527db09825ae6f2818240849243568190557f4205bb7a24f042b44666f7dd9f14c95dbf4e300359964b81fa22e3b9e461326e8890557f97daaba4f9a8b55453569642f082e900896dc9fb6eabf56fb2dd973c8ad3db918590556910f0cf064dd5920000007f28b2f0a392c46b97385e60b23201622dcd30d8c295c252e445572970429cd8888190557f85e1900dbc2bde9d60d2b6168dd7699695891ed44f6da2189ec9cef96916ee088190557fc33a11e63b81bd2b503df737eac5e2850d20779945acabc3cfeaa67ae279afff8990557fbdf419764fdd3294910c7b0b5504ccd2d25877632575296a0d024ab540eae0af8790557f22baf98b65e01d7420392a4d03898c812a7a7af52fbf78fae325b5d8d963e6c58790557f964943f17b5652c727a7a4c87d82470409aad152de6b580418ccf9e8b15cbfc68690557ffffa31ada26afa1e126777115cf872d6c45c50e296d23e12c2cf737a9da6706e8690557f16dd0508ea3edd192c8577d576da543338b77fac6ea7b1d1e117185bcd5a6c8e8390557f903c41cbd73befcb34c8d8b78050d431fc4f3bfe46c5a00477b6e71ec15c4da18290557f899a0ae635ca2c96d06a32921ebc9034a6c8caf61f2783d5bf9b256a6c0ef42f8990557f9cae892707b5dab4d488f94a5800c4e5356750ceddab2b37ce557ca8abcee8758990557f296b528ac32184ca72502723ce9f719dcf2c49cc49109bc4ed522e0f5e59f5ae8990557f11fd9771e2ad4a29467b50c9de9f3de7028a1623a46d448b02d5e0b400c52e3089905569152d02c7e14af68000007f0385b637c15cd67b58e8d746a3ff7b6c5e0fbe6936863b61d21db1db05a27d968190557fcaa3d2c5f5e15f48a9f9076d4305a3f9ab92f7b5a8487ab843806b9b09f7cb4e8190557ffe634e09f80788c3b69b9ddb2a400311ba19ba25fd1831e7dd6cf57ff086bccc8890557f5eb2dee42abcf7e70ef7657fcc1bbc4fb7e3ec91942887ab34a7951596f3851d88905569261dd1ce2f20888000007fffc33c673f445968ad611474d6abdb750b38f6119ccfe3ce5a8e21611e4ec8f7557f6049065a9d3a343a4904d43d6246ec3d79d3aeefc50d0a7612f5199b63a68eeb8890557f21bef5c387d368cb9c364961c16da6a6f5f108ea8fdc4e7f3b43e62d702ec18e8a90557fb17137aa31739cdb924f7b451b8707d7aac460081bab1bb46f13e18c9ec2f2388890557f95e1223335de1c1e2a6c4ee276ee7e3d43f8f6e4e597f6f21a234cf59881ec018890557f47adb86934e37764b97eb8e2f99c2a2bef0c649569d0c537b0a1f992a69c5a668790557ff89ee9b4efcc020e4b0c6ca8b5de1b83e55900a22a5f063eac918af0ca2973398390557ffd394a714516e8bc101a7499a8c32ec01d1e7ee0f6d67f1f26399e5975b6337c8190557f698e2a654ef09aebc9c441b85cb6bd55ebcd8de7a053c5e8b21257d0beff73ce8390557fc55a9f321d798ce6e1833be9af79508810efa5600958156953c943fd315238158990557f83621b28b00b0e461701887334a0fb0cc6a0de2691aceebf63d2dfc817272bf08890557f7843fd6df2e777d3e803f5fa8db00094cedb5208625b0b1170e90c5f879e54d48890557f08f5b01adc4778a297d7eae67106f1bd12f01d43d0ad2a43966280e2e2b340778790557f773abd6cf6242bb1a35972e2abfd70017e6630810fc2edb2408927b789cf1dcb8690557fa1795b1ba152f5471c0dc572b750a85735380829906b20ade79b5af33ec382d78790557f6e83a0afc99faba0b02bff8b1c370567976c4d18d86cfb3423e3e7428615f44b8890557fed415ec07860e47c8a913e4b98a0b64571641b27924fbbeef4bf451b9e7bff1b8790557fa4cf4b546a2b464ec6db1b64b00653f33fe4d0801bd2fd22fe636dfe66d45e7a8490557f08852996d2ca9f82b39969e02c47fea90c794a24ed2d9f37e586555c4c0c3b008890557fc25c16a2f2dece6a7479102eb72ddbebca51b795c1dd99e5492729e5611666f18a9055691b87506a3e7b0d4000007f96c5e1bca8e9f8dec052647881b5f8b98f93429757c6ad2c741b80853cf56c3a557f3bbe5d5e0109bb3b05d3305490333f59a60f362cbcea3d0e6fb6ce0d60048f858290557fb5573a95a1511ffa720c1e7805e82c72aa1b21ab56bb6bbc3eed0220ec11ed1e8390557fdbf4aab9efa2696223d45e310298c055f4baceb996f81cf6ebb34ce51bbf42bb8290557fe1760f85081250927a4cc4a2deb8ed6f1dd776bc127d9dcf776cd201a0d6ec8d8790557fcd190b5830e65a79ffb1646b407b75daaf237c42a6a05dae66c687cbfc989d858790557f076c9c1d08e04f72bbe6d68656507fc3199b4a0494edfb1b83292eb8f0278e548890557fcfbd7e4d80c9ab2596d147d49f18eea7d16305b62c1d5f4ffefc672206c937c08790557f5ee096bcfc070de685f87c06ad1957313c8f252468b88a31f4cd3ed9b13856278790557f5a055402230da25ad59e2363c03759bf5ef3f922a17591aaf1b68c5309dd3ad18a90557ffa86b1e06e88fdcd758201cd9b5963face8bd3d71db2f60f39fdea9e8c66016d8790557ff139938bc37a58f67a18bab660b7b37f92dab0f46f4b702cdde58041851138278890557f5cf648b8f7278b3e258ccb87d42fd7a0b8b8b1d29fdf52f90e9c9c4d74067e8b8790557f5a512dfff241648148b998c4e3acf27ec9758e3db429e4a90cc63913b4299fc78790557fd591097167d64905b8fb935beaca78ca6231de255ceecfeaabd0e7015fd918ed8690557fa3d14582409b4d333f049417e805f9caa187135b87c8c0d879b163d2110210078890557f7988682cdab270914831f004f059dc5b0549648e51cfe5f27002c2fa9989757c8a90557fca48278ae819ebf9b5442f4cd6b03acc89fdd272c962e71359ae4ad25e243df08a90557f6a9716c7e66ea877ce516d11546f9bbec9ab5a28563aae0b7046717c5420385f8a90557fd9db4703ed034e4ca9e580ef89a9ac9510cba4da9efa2b233facdfc9b82713138890557f69d1e342750c5523317ca8bb8fb3c043cab45e69fe8e6cc751d97abcf5a1e06e8990557ff611616a1c559bb8f2293fdf3d1fc6c3a77988f5520af60b32062620e640c3ed88905569174b1ca8ab05a8c000007f1528b5c1f293312e88c16a41d95947067fc4803c32fafb6eafee295f222cc9928190557fd08ecdb615ba0821388f48fe9ac21d02001aa0ee576b37c77443d57a51493de18990557f5ec51b5d7c9e7ea3add7bdc8744bc8a31106c4e547b354c40f1e79835ce673958890557f05d3bcedddcc39c9e0e62a5a6a8d13e75578e4746a3e46b9fae6a7c5ecae5bd48990557f8d1127c8662aca53e80d0e245c18eba8efaf5627711848eb3a1be7e8be03917d8890557fc3dc7f3c9e1c08ece5df79ad1e5d7b4bd2517c0ee2c593bbc3993194dd821f558890557fb80f8deed586fe6ffb5ed60d7b825a1147c88dec3a835e3c8b6d48b14be1a2488390557fbc5eb8b9848561d2990363ee7ffbe7f61adbb8f15801dfa75f476c60c5bd7f288a90557fbb1a7660d679ee4bb1adf84e7fa2ef3ec97bc85a66d52dac10427a9062231bad8990557f33c438116948b4381257ef472eb8cac2b9d321fcd00740ca437b602a7af6fc4a8890557f3d9c89c86e7121772452546f3b34264b5af11c5f33188101a890ed8f754bb91c8b90557f883ececd9fc7129a97b0629c4b46a9a3c855cd3e5be26c48809c570029f3ed948990557f1619c6e55950c02c860905b1f8979a5054a11182cd6b6ea711b0d7bcb69827ea8790556934f086f3b33b684000007f61db88c7ce3396940403abf93ff9a8f5d2f0adad5cf48908f6bc95e8e57b5c70557f69877ca1264a11bcf921826a091d75e05f159663e1b4a5c86c7675aaa41c14ac8a90557f1d359e46b98960fb6ce51b7a4543262b80d4aa3c704dc1fb765b80a4511ada558a90557feddf70be2c859e4daa5894aeb209cc0bb4c56fb6d78e66169290eb854030d8c88890557f9f5ed48d556499c0822eec2a2052213b0e82cda7f4ebaff23220b87083740a258890557f58693f299436e51db0c1560e6c19e3306e3657a174d93f3defedc74e530d31d48890557f7b445d42976489e47052434b430d629c3c4a1d1e7c179eb63407583440e6378c8890557f9757db429060654b3c7e81ae3c9c598a0955fc8e04929a887a407ba56d88a9858290557fe1f515a55bde7fb722512edad407d200a6268dc445873fb1d478acf24b6725f58790557fba806ad2f7e41a874e0c96b2e82a37f3e3a44ff93dc1e8d0cea30ec5962d4ea58990557fdc5e56a8e261c5048c6a531e205458f19366af01e0c5774577cf9ab6b397731a8b90557f0fad6805848e5b1a0e739c58135234da0588657124ff581b58c54d77eae0fd4e8990557f65fab62271aef2ed1f74446b8c259ce50072220e58e0346d7dea6126583fc9038b90557fec344c11533bb39c8b01fef75a3ad410ef7c63489814c381a07b9a7978a5313f8990557f0b718f15011b44c9a45aa858b90a5dd25cb53546fcf75c310d85461bfff827738990557faf7c0638dfaaae7baa980e08a0189e743cf3e4f2a9d6f71b7411e58cdbd185648990557fb8bffa67620e170b09c0ba960e73dbe441e74eb463e9b22c04d916ac9655e3a88b90557fc35eee2e80a508d39c16d3c7854c11737c35eb34540ad7484ba79c3d5cbc87ae8790557fff8679a93cca9caab42d9fecd24c4e7c23d343c38513b828980412ef7d4090c98890557fa0dc052d8fd73dce64d876879c04a819580e674319a91c4cf29925daba1c5ef08990557f229f03347fdf4f849583b24af4b76f52c87cafe58bc95e62a750a8d7e5ef13578890557fb28089e80200a19676f700e9ee4717fc82b0353b07011de417a41d3852fbf30d8b90557f0242a9295ac4729b6a57d64670e05e37ef3efd5ee2257925bd39d635a95027c68b90557f883181f22ba3f8f60af29baf46c49b8d6d75fdc8819d92c55ae35eec77e8b2648890557f54c62fea7921c037c507149ac150424859319d7afed15cecad0d0b9644c2ed948890557f47e99dcfbd2c276352535e08cae8f3864a0f2db60658feab692ed78a1bdce3278590557fac99bce93e979a5d030edd3fef110b9311cbfc4105fb89cd4a2ddef5c6fb67d4889055691969368974c05b0000007f7a76ea45455cd28ea039b9b99a359df55f3f21987eed65ada3a6879f196d934c55691fc3842bd1f071c000007ffbe1fa8d17907bff65dc45693727bc700ea501c6163fc6909620abc325b1874f557fdb4cface10e5c72abb4e474bcec85754fa653adfd8278afc71629cb885fd59ab8890557f2b7fb2986af6ed19c80eff682fc7d43aebf9d127b82b223d6a1102e62ac8de318a90557f790b221ccca48a26916a503a6cf7c7ee07a3b7b0681d1f773a0472a2ff35bcc18990557f0c51a4a36df7f1f052599ea46eac44414091e1438c2fd1b635bcd65a7c5cee508990557f0ba852cd4968e8266181ab0c4463385489acb8add63a8a2c7a9d79e5ee75ce85899055691da56a4b0835bf8000007fc66087a623ebc27547c52c7617ad5ae88a2a8a1e9b4f879cc8e02d93a4c9fe3f557f80af19cf9e809005a7ead07d9cc5b4e6534807b93ae284798a99a3f4dba4b4238a90557fd0ed9ac0512923eaa85937bb2f455489be6c5475e9081d00389b20034b0797dc8b90557f6792bd6f26dcde80592e04d9e2ec6bf3d60a0c178556518aedb99a1166459f318b90557f18ce3031e55c6ef0a31ccd778c6fea0db8e79812fa65222fa0a192cb1278fbd48890557f9a0ebf54748fa77ed2fec3f8bf15a42aa8404a9acd74c767dd4b5e3ce11a380b8890557f34661701f691b802b54e616f34555b43c8546de110b57dcb7207bc1527c7fab58990557f4219dad2d71ce932ff1cdc2914d43e3448cf7c4ef1b0e3dc0bd868ba09b2b08f8890557f135edf311f85edbe70d7b32285cf2a0e9af5a9eeb955f1df501f79d35f805bd78890557fbffd707586cab03deb325c8df8b7b7ad509e934b5bb7df52a91e893ec0e3b0e18890557fc56757c4a668cc2dc071fb7058dde51c7054c2b9457c35ad2448cc85e8f67d0a8990557fa504af1f268c11d585cc15e2a49cbc7a24f63a0821cb062dd5be4dff329001098890557f0edcf415f41542ec253339b3e47440b44b3c7dc029eb580728174965e98bbbff8890557f451ac07dfff7950c5e30e8b7c73d186e4e730a477053ee416b43abe72a97973f8890557f7c7e6b7d7af00b8444b9c786a4a38ec1beefa190efb542782b7d9f11f9e9f1048b90557ffbfec58fd3427a434218f8cf23c68dcf864117f09366f3f6b41f72cc56c508e28b90557f5a83d952c20f45450ba7a9e9c944c95fbcbd2fe32fa11210fc5f2c28e157dd008890557f0718b8a2e426bd79dad736ea8a198339ecaedc086d211f5f746eb02fbc6479058990557fc2451058aea17da69abd713b9ea42a41aef28156d11466adcfe9bb35e9e8cd278a90557f6e49f6ed44c1b2d8f1e241655fef74f2f4d8b4eb7fd2d4dfa0623fe98473d56c8990557f21fec90214e17ce1ed800d559d1172ec82556e9a7066bb2dded03fa378eb6c3e8a90557f05872401d5044f9ff0c70f2ff7131b1f374a2589e8c50b5769ea90342c3453508890557f1d66441c8157bf89ae4f0a768c97a1236505fe50dfb3a39aaa46bfadc21e1a3e8990557f2c13840dfa5263bcebe2cca1d3dc2c9f4eabe95d143ada84c1f0d3f8f80117018990557f9e96d8e845356860dab3406f99d1711b379fd374c1c7d891c0e3592a69039a758b90557f5650f34d87bba716cf8395dfdba12971b650de3a28538ef68d59f58f9e36d7468890557f8e95a31b1f6848d8fbdd98d7a47048d1d9505a6b26ad4769316da5456210e7838390557f711b6add213c0004a6c7562e28070ab783982ab778547896f3eb84429d29b2f18990557f11c009cee77a68f12fc33896091e46d5dae76cd7887e676241224ccaca7c0dec8890557f0f1a18c383903213feabfb8948ca30a341923a9eda7ada14afda467982e030c98990557ff7d99ed55d9adb0ff7483e0471e35e84e67207447c2fd0a541cc9b0873937b2d8990557fdfe3201c1a657c9dee8a655561800aab8fd125a47b810606860e689b7dc425a28890557f8a163838b3d4983c8b1677e5da1541cafc560b8577d890ac492f5e63bea3e8d28990557f313f43fcbb2ca55235c350776a38fa572a153989c3e797c36b47034feb318a8f8890557f87cc00614cf2f76d4b49fab31547e201a6e08a69146084c5f0c6b4e8c3453b388890557fedb53bc685a6b7f71db5e07568d455a6ef29e3161999df0410412acbdb39490e8a90557f6871941c7eb22f47e734bf56a58428ae7dbe9ed067b8a1b24d0ceb85ea7c972e8890557f7aa7f89bf8d4fbf41db127c7c2f71b8f7fd0a1c4c0dceae73e8f7ef4fe8a340d8890557ff1bbb9d07c7d26cc8f8cc2c781019354e3ac05ef8911df3332c847ca360cadd18890557f9aa753626703188317f5365849fa04186e27f9356c0978a5355ec2e0bfefa6798a90557f86d52b134de089d528952fe82186564837cde6af307944a5b63ab71f467940788990557fa5f299fa637e7aed54c6f088bbe1826e7c14142f1c3fd144eabc6da76f26be7e8b90557f2358450780eb855d20f9d703af9bf7aa3fcf617663a685837c4c31da555c9c0e8990557f5415fc5afc7cb655c5c09a25752b9ec0a4fc910b23240e0594ac19ebd0df712a8990557faf7de6012db29de13fa9d15e82d8512bfd71614bd644593cb354b276f3d88a988990557f98a312b0460069451ad64f006fa175c4285faabb06c0605c3f9edd8ccf3cb8648990557f2f32c71e663b689371f89ff14f1971c903bc2e4eb5895ddc466d5e74c0dd0c598990557fb6f6f6b5bda85be64a83eb73a1176a2998033c509976735ecf26e0a2defb20348890557ff11f1a0ebd6a6ddedcbd79149ecf98eca9c96fee762209842ed5a5897c5251678390557f68e8bf9c2bf83325ba15e0254008f86a237f79f887614487deedb9ebdb8d12298990557f1d5e1672229d41df061287e93e14417a37536ebbfdb60153335024d4360a55b98990557f6ea234965747ec2071c86060f7aa27e2d65a6eeb40b53316794e8f6bfd02ed8a8990557f4fe219354796b8bd05c038161c501ed6355c4ae75f333d4c1f598e6c168f9a5c8b90557fcc2fdba3bb3318afec05489e1ab1732cbd09cb227dc6e7b189f3e4ba3246efde8890557f8667adf76dd3b94b301cee38370b741c1c55d3e3be5f7595b7f1cd08bebc15558a90557fd1274fd1d3373bb8e459c4ddd5005cb9d1ed7c25688fb60389af180db56b4807919091557fccb8e4c1e68ec94e6b66ef21e1bb6e57379dbc1a47105a8f5557f765ec2b042f8790557f9bc56526bfc227599a642240d380a98ff9205436ce3fbbb3a8de163254dfba5e8790557fc0df57233faed5f6583bd6fef348e97bb3be7aba1c942d7edc3f455c0615de4f8790557f948fc27c4ecf5d969ff606982fb5d5cc68292b7db423eb992e3a21c433dcab238690557f33145719e99be09cd68e62dc71483289426e50b1744eda2441ccfcb4302a38308890557f60fe7d800d5705dedca53e83b698dbcdcf577a7d1b2db161ed71a588b9b76acf8890557fbc1268a65651f15bf15ab0287f1df6aa38c4f96da02359374ddd91034918605c8890557f05f96e620f7582ca4540fc4e6c7af8d03fc099b6c3f328631959a29786df726e8890557ff274c00877dd24db52dae0fb59804224dfee5feccf74b21d8d52b7db24af8d768990557f04fc6c26114295e4fedcdd2cbf22f123c594ed0acb7bdcd1afb01054d848df528790557f5fb55d8b97605e631ecfe158507ca077aa5710797bee8473907d3f20be0781aa8790557fdab8b54ae307477778878cb6aab890fc9eada02bc1e0df0fae9b91cf601fd7778890557f8db62c4f988e7ac174646ec04c493b4b92b5b962a49eac211fd8c9dfff705fdf8890557ff01f2414fb176cfbf9f9b92b9d0b306ca665fa75ddd0144c24bfab8446140ea38790557fd0819fdadcab530847dab15a967a259886fe8a98fcf9f69c84025202b62421258890557f2984beeba37c3ca1cb1b98bf525a97ac8d1bde835604f68c2b89af529e09fd378890557fe05959a850d76f15922810435bd1007209aa61f4ce73fb12d0240c30e947e7098890557fc495aeacdf33f0fe53363a8f58e563d30d42e2a92fe4968eb9a38f85bfd6179e8890557ffbee1a412bbdf0f78f67d36555da2c5f4f7354e3cc3e4dd56079bb37a74ef4338890557fc0160d78cc804d2a886accd74aed61e3491f4a1ba1109842e83754c6b227531c8890557fd3eb06c057843b5dfdb061f72304ad384555956277ce3ff954a45d1ff631d8a78890557f93c0e8050b329aed985883f86aaa9e0f8cac4d45adc8cff4bb1e8ca5144970028790557f7047c2be91cd36afec15f19a05334a5737157bcd2c3c2a8249c6e8c84322c6428790557f8607b439767a7a575f11022c31b89323433eb365c1a57c608ef462c3d3640a888890557f6827191865cec7deb498463730164fd6491a92d4108f113ef41e99f10f2689358890557f8794f75d85b210f97fb40df8b885484e0dacf95a3da55b33a58957005721f32e8790557ff10e048c749e94cc6a1a5da3909b2630494dd551363b55c24b0e630ecc9590258a90557f7f34cdb2c3e924905311cd1e1254c92d05aa5a09db019387ebd78f5bdf9ab3788890557fdaa7d7693193a674a1f398eb34deaf222800005990d4693b8941708f05d277448790557f8f7e6fecbb22fe6d5093b28b6a93c7d82d9e6ef1cc349bd2999888c6269eefde8890557fdca12e1306bb1023cb8c5bdeccb2fd5140af7e652ebf510b2b2e84c4f2bfbcb08a90557f3f1a23e96c10bda9639eba0cdcf5b30080e4b2c291bc64ebd6fca1f42750c50a8a90557f2c55c2c966d3d1a1274bf4caa3ab990acd24f993ec4132bd7e81d48d11e9fb998790557f114720c91a4eb04769295f0dfe150709f5b8da975ed359f436c7b092152c00548790557f50b11c6b9342051a7de649a24d4789a6c78b58a2a40677f217af795ff87dc12f8a90557fd36c266fe08a268b39f807ffbf8ca5d5d9e788605aea28ca92d1b833281a15e48890557f90c2ffd3ef09f00f3ceac6b97e3ecf180bfe1ad1cf0bd9cef78df5a4156d918c8a90557f6357c602cd64d385e3eb326ef74f3a90c84ad59881fa908832104c2a39a477798890557f3a87c899997bcf306216d4d35943637f430e0c102e67aad2b2628f8322164f4f8890557fbff7a57f112a0bd8642a0d8f306f2369a20c25d93cd43aa49f2a3841ca057a2d8890557f01637958e8016694f430f1ca0ac0def0e73e2eb7b7e861d41d5ab4460a80a9088890557f8af238e35dad60b9d44534f9e0bf5881daf6b7c0b08d69c87988945c92155b818990557e41a77e9be927f90e90e1d286ecd8874ba530efa3bb1780d2281dbd4423b5c38890557fa6419fd9d1ca0c45dc6879a51560291960b87d01266a035787348e165243140c8790557f7b52485f7b043d964d9a460bf1be9922bf0c5c22913cdd3c0c54571fdb86d6568790557f2dc77eb9077169a81cf6cc8e95679c44720f168926db571c2c2392fa4cb037568890557fd6f06967f6e87b3715df8ce49d2b6b674e502487d22ce56992dfcdaa7db1953b8890557f51ca4d856a9e32f807c755885fcedb461f0a19f5f4811779c77185d54d1336f78790557f25edc1a20f3a76bd6812057b44bb5f60eef83cc4825a60dfa7481f0f3b806f5c8890557f4fc86bc57c1b153bdf5e5bbbc63409d3416052103ba6debe3867b7dab51461b38890557fff19f8bfc561f74af6459d671b3489cfa50b53f79c3d241caf4b8bc5922a2d4c8890557fc8bb072d5d9e0494d85331d24ce3aa49770ff473726bfab786c3f90a5e54df028790557f82e4086291113c99d8615dbe0736d49b2c753d65968c419c1ee9dad76805e7e4959095557ff74e39445b5aecf4eccbbeb8fdc3ebe0d1a6004591c6f49ba2af36b20409dbb08690557ffc2908b7d88910b6311c0f9491db701d20ac47b5beb9a2e37517e3b20f64aae78990557f3658877e0f1c07d02f4a053fc8eb59b4981ee7440f9b57ed4b42ca57e87c8dff8990557f2c91973fa15807781fd4b0183aaa9a22335636afeb3ef0a0b22c284b3f1f6a3c8790557ffee8e7f386ada22c7999b93113f95ca2648f0ee16b5e9ed303519d05b83e507d929092557fe7b8d8f4d532692e1bdde21a4ac26fc2142410e0b85a828e56f7e46cb860b8ab8590557f41325f250da19f8ec746878e7a49391043d19cd061c307c429013b60addca2748690557fbc965cf44be2ba7b44c780b46a13944b135264551e18ab1c828e90238e7be6dc8790557fc67f2b0b213e8fa4876f3682578c3e8419f0aa4c9107e89aa659b9a196a11d76557f19c12eb04036c18729db402bda549288f4d69194c40e6638859500502f9f89b28790557f82491f4529b152a5111da043dfd7eca9d6e6dc366b1ea406ec3af73ce033ab898490557f4d2ddeb4858881a03058d96bbf2d4a2682ae68379493b2e70619ded591b66fba8590557f13c6832eff00c739a5bd7153865822455f59111bfc783f915501f163c63a054b8590557f36b33f9abbc3ee644d13095ee26d0e9c70acfa99645cada0d51a476ca13cd1e88590557f4f9d93880b87ef863d740244a0cac7a3530326720e06ecc5139068298630c5548590557fd1cd76eee45f9153cdcafb5d358377719fbd8ff8c1a16bf5289c00333b4661d48490557fd85746fcdcc514ddd129eea01fdeaa428922bfcb4807611d8df4d217c7860b498490557f6d959280a56f5b92be45b78269c1f6ff1d9319786e1643eda94f58fffef5b77f8490557fee71b1dfbf4cc782dc1cf5eea388edbef40ccde6bee470b7bbecf3be0ba6754f8790557f2d202ba7beb1444b115bc2db175c6b683a9092db792203dbff83e35e7e4bc85f8590557f56ece165d39e188d50b92029865b3f9df9bb4c1e6658b14555dbfab2af266d338590557fdf01dd731abfb7e6604c1d94b722afb0d9fe53e26e006ad274ab92e98aff67838590557f1ebdcd3b2993d16c48a0d9eeab0744b9496a5a857ea8c2deaa992e26066cc7b18590557f6e0077aeedb928f93e91f3c4881a3429e5f86db2ad265baddf012c81cfbe53fc8590557f52beb2d1ae108bb7ec2a9ff28d79abc1d81804abe0c1f8ac072ce5c6d3c885e98190557f31da7d3ad11945c9cb5fe65a70e0876c3bfd2152436f4253ab7e983f1a8fc8858590557f7511a0e49d666d8f25c29d4c0ce19f9726f0be7d8acaae590d1c506fc8f449d98590557fe681098752762b737691d076b0e2995fc3f468cacfc740aeda0fa6470369cdd98690557fd43990273ec41532bce1a74d8fad63d6ee0cfb5adf4d38e6e6f06fc58c49141d8590557f63f6bc3ca40d124c9243ea7beeb8a16c010cd33e661a6d48cc4b5d3bdc0280a6919091557fa9ffd383f81820f7ea93d0f9ade1d6d08468d5246b9cc86977288999c7f779da8390557f867f4187550d0773030476643454b6565f5a3e15a9abc4d923b8e25165a150618490557f755b462a2d3cab796e2221599ef1f21d5b3bfcc149e7f9aa161823500ef139bd8490557f70aa3125f171534fe5202d546db520a48510c4d03f5b09c2d073121151e741598390557f8d957541044dc26221c0e6d1d742aba67f7c175b55193e7c22a9ba0417e4d77a8490557ff156938d6c8f6850c79e8f99d6f8ee318f4c0dded45318411318f4dc75f13a538590557f5b136f2f265817d2e577e3dd76378e90f53ed1e5883e9eecb82611e05f38743e8490557f4b7e728564779329a525ca3ac35bd156e38e351cf7a06b2190ca88b6a938abdd8490557f4324be41a36334e9eced82903bbbfa46c39af0b6b251dc9702b5776381c84c5d8390557fa5fb91070dd3f5edbecb7a6252aaabbfdf24c2d88cbb6e41867a0d03e07fda058490557ff0a17ef8f11080bf19778ae48b0d82b45c1f57bd2a19a7d94a2c0f8dee1b488c8490557fa72a6d773e6f7f7abc379fec8e6b05a392deaf19cc3ac5176808e9326c5021ad8690557f2c2fcfbda3fdc8289e8b36b3f3575722669e904d553fac048f989413cb04f8d8557ff17fc20f9b53d39064c701c334f003963c064bbd4631392d1c17c0e8bd0afa08939093557f8e66eda5a2be1810df626459d5b1f990badfcbb8f11776fd0c41fe46418783638290557f846f1164cca10c97ea9150855913e69439780590d24ba5c5aea3e7d2f719b9448290557f9dd724c70164354fe05247924cad5b8664b1fce44c4ee311116da5092850b2528190557f7e9c4219ccf8d66979274677392643f54de95ca9fb656be2dd8da8d05c2ee65b8290557fc21fbd664509975d5e960188be98603d13ef81c7c1c549412d8c943b0e7e94ff8290557fe847c922e21b6f66352b40062153f626e1a6b02c8d00c39f0e08fe38f94c98528190557f68c49b99c7c84357b6bb83fc1dde78415d8e5c40936c797392b2c11f26308125939093557f8a38f17a8d853c14598aded2291fbd2b59ee7a2a05472ee245af4396124565958290557ff334ccb803ab3c7c5bd9c202b5632bbe71217f6a9f0c21e7381a5c78d7648a3f8190557fb4bd008d72254516ff954b15c44ca1f5ac42d37ba0cf1b2ebc527c54572740298190557f847b48d657439dd26c3591139c67a391de28c3a72dcba141ac35085ff9739b3a8190557ff8500d801cad18f10734b8e452956f8ed0003f51fdb04670a039b0444efcdde08190557f1f7de52054f39b97d405ffcd828da75fee181c7b5b81c37d3305457b007708578190557fcf9c8ca9bc1617d25b7e8c950768e4e7eb0089b7cef186f2cd8057ffff91a9b48190557f66d9683a8921e8f88d4ef61aa12fa8bed89d27b0ec75efb4ce109b6dc2b07b588190557fbf533dcd207c0b5f583e19e5069bfd6e81fa904a87407011584affa76be02c988190557fc18a2a3033efc43341ea52ce8291347e0c2efd2bed69b4f6f231ad04901759a28190557fb648f93a24f428f22d33505fbd47b2fe42e1c669460b0796c1c2c1e41ba451038190557f1a3c2beb621560e211e65925064f3c5e6d65eb7d6673d4ff97384755d3544ca88190557fb3d699117a1bed28e206b2c9dc6726af3748087c52e15be7c19ff1d23c1a0b3d8190557f84652066718815ab85df024c98ef69e80965e7efd57437396b2494a8605c1b1c8190557f39a9bfa2236973959b4433f29ee6c809ffd719dcbbf296204618eb072181bfdf8190557f50e7eea531a76a8760a1242e943fd684206090932a2e04a60dc19ca74f898e6e8190557f448cff943ba3d7df305a8d05b28f2027114efbd7ee5ae4dcb142e1577d3bac268390557fce6d71828f23801f96e980bd5dc437171a12c57ce64314b4197385b44558676b8390557f95badf4d00dcf36efb5bd228b73b544fff6280a6a679445b72d57da92d8214608190557f281084a7def4c097a4996147c61c8a0801bdf3b72976fd940bd88824c6fe532a8190557f81f903279a82cccc1e7d34eccdd696719862a44c372bb6064ae6b1acb14585c48190557f8f98e64defd692f236e6243cc8a4bd4f9fb1526fa2cd8ee0a0afc7e72026bb318190557f193468ce49d399f90b77a70bd7774f265a82d9bbc34c57716fa57355933aed2e8190557fbbae40e713d6a834ab954b063e53253a959c6b085c32eca4ed97a791ad66042d8390557fa49320ea2e96c7750cb6c4346f2c647359c3766e9338b4b1b1cac31452266f1c8190557f1f15dd49326413a6c0c415c04b91d9605d9ec7bd3c794250cbc2d8e02ad010248190557f4e2e63a54ed4b9f54a57fba676c489acc200faf982a31d1c7b5a57b3b8ddb14f8190557fbed00b327ab664619561736c00061d248626c4b288a82adb7be034790f54252e8190557f49061b31c4e59730d8b9c6e2dfdcbc0637ccdd631ad2c7a30487322f08948d9d8190557f629d72d68fb8397e7862bbeecc3fb316974b14e2f8306654118f7b163c9ab72f8390557faf651deb0e17dabe376e5712e0c6247b8262434fcc0eaf3116ee30b729847ccd8390557f1ca8c9efd702001eec1039871ff4a0c541a5b1a549886873e46fc699725142a18190557f06440e9ea3a0da16f2f2d6f1b169a0e8d6866b24491ee3496be1d04035ee70c3919091557f09c5ed39cf095758a965674311dc7872cd15616c21e6a5cf3116eb2ae8c21cec8190557f521de0ebe787f124a3089d68c50e51d50f25fcd6e2d0b012992a66b0d2a35b518190557f56e566f8d4bc4d3bda9d4af10dc695b6b4f7dad008641748eb7330024f62ee0f8190557f0a4e1687ac321a19c7775bc3d0381f00b05869fe326f15386d4a9d654c7805138190557f193c0a303a2cb483cc084d5f6e5d940510ffc4f54315c04349767f3cf9ba847d8190557fa6ec9d0b2fa83d6d2ce62cd2ef6028d6c8d7c2835495529da03f15bb393b6bc78190557f2a909f612e6cd1bb0c094b25cd9deb624ff93d4c6477e1101f2c019e7141747a8190557fba83c2b61cc51278b759cf63a35ca5038b7d2b6e05de8b11737db6ca4a0139698190557fe3c65177cea60f6f318bf968a3627b0315af0a39be4e3cedea8be5691cf4ecc88190557f1c03c10cfabb01a1a900092c65d288262110a0c8f67f6acad2da30ec0ec9d0a9919091557feadeaa6a03d0724f2a7600e8ec7b07f7e76e61b37dc116b30371abf99d5243a15573ffa246c39083704ed6b6e82a5a03e3ed658e3d8360005269b61cb183c4b7e18000007f8d364a51b5f1d4418b8f9e0935a0481203d567cb17beefe536c34f8223615292556200317e3362003409565b6006805460ff60a01b1916600160a01b179055620031a584670de0b6b3a764000062003572565b60075560006009819055600a805460016001600160b01b0319909116620100006001600160a01b039586160217811761ffff60b01b191661010160b01b1790915569054b40b1f852bda00000600b5569152d02c7e14af6800000600c55601380546001600160a01b031990811696851696909617905560148054909516939092169290921790925560106020527f8c6065603763fec3f5742441d3833f3f43b982453612d76adb39a885e3006b5f805460ff1990811684179091557f1588ac671d87f82adc0e6ae8ab009c0de98f92a20243897597e566bc59b9c12680548216841790557f833091f6b2f2169a11dc85976a38a6644a30a22fdcfc04b30a8e66c767edfc6980548216841790557f56c45abe21a60c7112ad193abb7f7e08af0bab4fb4abe32f215ff95d845ba02f80548216841790557fdbc85ba371676233866c1e69483771997e5fd77834efa4bfb159ed05b7916e0380548216841790557fafe8286a0918321b5c3152eaf28d8eceed221c301fb8280e6f16138e30c7a20d80548216841790557f71b26ee831a1dcfc9b8d63b95e304df9e5b4d940d89e9dbadf408b57d31b208480548216841790557f4a84e98941d1b79c15450d58ed22fe417fda6dea62b3ec37c17c76acbefbfbf180548216841790557fbac1553e63f734bc0e47dc4166a9e6477a49c9f35b2e4e9bea62d279c353697a80548216841790557fbf4ba92a89c1705127fec6236e1e13c5c5613ed890995582f4c9e787d12d6314805482168417905561039b9091527fa42bc37e6114df3d6501ec10eaf43943f13d01569d406d1b8eefc4b78b3d834f8054909116909117905550620035dd565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200346990620035a0565b90600052602060002090601f0160209004810192826200348d5760008555620034d8565b82601f10620034a857805160ff1916838001178555620034d8565b82800160010185558215620034d8579182015b82811115620034d8578251825591602001919060010190620034bb565b50620034e6929150620034ea565b5090565b5b80821115620034e65760008155600101620034eb565b80516001600160a01b03811681146200351957600080fd5b919050565b600080600080608085870312156200353557600080fd5b84519350620035476020860162003501565b9250620035576040860162003501565b9150620035676060860162003501565b905092959194509250565b60008160001904831182151516156200359b57634e487b7160e01b600052601160045260246000fd5b500290565b600181811c90821680620035b557607f821691505b60208210811415620035d757634e487b7160e01b600052602260045260246000fd5b50919050565b61349d80620035ed6000396000f3fe608060405234801561001057600080fd5b50600436106102ff5760003560e01c8063953d22f61161019c578063c18e6c4a116100ee578063cf36d96c11610097578063edd1820a11610071578063edd1820a14610676578063f2fde38b1461067e578063f3ac5cfb1461069157600080fd5b8063cf36d96c14610617578063d7676bbc1461062a578063dd62ed3e1461063d57600080fd5b8063ca8f8899116100c8578063ca8f8899146105e5578063cbd9e504146105fc578063cd911f681461060f57600080fd5b8063c18e6c4a146105ca578063c7df9f37146105d2578063c9dd3d6d146105da57600080fd5b80639efe6ba611610150578063a9059cbb1161012a578063a9059cbb146105a7578063ad7963a0146105ba578063af35ae27146105c257600080fd5b80639efe6ba61461056e578063a457c2d714610581578063a76f798e1461059457600080fd5b80639b07ad71116101815780639b07ad71146105205780639c3f391f146105435780639df900281461056657600080fd5b8063953d22f61461050557806395d89b411461051857600080fd5b80634c0f38c2116102555780637a3da25a116102095780637f4e4849116101e35780637f4e4849146104cf5780638d97f591146104e15780638da5cb5b146104f457600080fd5b80637a3da25a146104945780637aa39b86146104a75780637d38b533146104bc57600080fd5b806370a082311161023a57806370a0823114610450578063715018a6146104795780637222015f1461048157600080fd5b80634c0f38c21461043557806365f8c6c51461043d57600080fd5b806318160ddd116102b7578063313ce56711610291578063313ce567146103ee57806336556873146103fd578063395093511461042257600080fd5b806318160ddd146103b65780631df95606146103c857806323b872dd146103db57600080fd5b80630dcd3b34116102e85780630dcd3b3414610345578063150b7a0214610368578063174709a6146103ac57600080fd5b806306fdde0314610304578063095ea7b314610322575b600080fd5b61030c6106a2565b6040516103199190613104565b60405180910390f35b61033561033036600461316e565b610734565b6040519015158152602001610319565b61033561035336600461319a565b6000908152600d602052604090205460ff1690565b61037b6103763660046131c9565b61074c565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610319565b6103b4610a45565b005b6002545b604051908152602001610319565b6103ba6103d63660046132a9565b610bde565b6103356103e93660046132cd565b610c23565b60405160128152602001610319565b6013546001600160a01b03165b6040516001600160a01b039091168152602001610319565b61033561043036600461316e565b610c47565b6007546103ba565b6103b461044b3660046132a9565b610c86565b6103ba61045e3660046132a9565b6001600160a01b031660009081526020819052604090205490565b6103b4610f8b565b6103b461048f3660046132a9565b610fdf565b6103b46104a236600461319a565b611067565b6104af6111b2565b604051610319919061330e565b6103b46104ca36600461319a565b611209565b600654600160a01b900460ff16610335565b6103b46104ef36600461319a565b611269565b6006546001600160a01b031661040a565b6103b461051336600461319a565b6116a0565b61030c611aed565b61033561052e36600461319a565b6000908152600e602052604090205460ff1690565b61033561055136600461319a565b6000908152600f602052604090205460ff1690565b6103b4611afc565b6103b461057c36600461319a565b611b80565b61033561058f36600461316e565b611f90565b6103b46105a236600461319a565b61203a565b6103356105b536600461316e565b61209a565b6103b46120a8565b6103ba612104565b600c546103ba565b600b546103ba565b600a5460ff16610335565b600a546201000090046001600160a01b031661040a565b6103b461060a36600461319a565b612117565b6104af61254c565b6103b46106253660046132a9565b6125a2565b6103b46106383660046132a9565b612619565b6103ba61064b366004613352565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6009546103ba565b6103b461068c3660046132a9565b612690565b6014546001600160a01b031661040a565b6060600380546106b19061338b565b80601f01602080910402602001604051908101604052809291908181526020018280546106dd9061338b565b801561072a5780601f106106ff5761010080835404028352916020019161072a565b820191906000526020600020905b81548152906001019060200180831161070d57829003601f168201915b5050505050905090565b60003361074281858561275d565b5060019392505050565b600654600090600160a01b900460ff166107d35760405162461bcd60e51b815260206004820152603b60248201527f5765276c6c206265206261636b20696e20352e2028436f6e747261637420697360448201527f206e6f74206163746976652061742074686973206d6f6d656e7429000000000060648201526084015b60405180910390fd5b6014546001600160a01b038581169116146108565760405162461bcd60e51b815260206004820152602e60248201527f4e6f207468616e6b20796f752c204920616d206e6f742073757265207468697360448201527f206973206120574153204e46542e00000000000000000000000000000000000060648201526084016107ca565b6013546040516331a9108f60e11b81526004810185905230916001600160a01b031690636352211e90602401602060405180830381600087803b15801561089c57600080fd5b505af11580156108b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d491906133c6565b6001600160a01b0316146109505760405162461bcd60e51b815260206004820152603460248201527f54686973205361746f73686920646f6573206e6f742062656c6f6e6720746f2060448201527f7468697320736d61727420636f6e74726163742e00000000000000000000000060648201526084016107ca565b6014546001600160a01b0385811691161415610a3d5761096f836128b6565b6040516001600160a01b03861681527fd045be8d33b2dae75a2c2b660351d8306589a2885a4adc6ff26af3e2d3a3292c9060200160405180910390a16040516001600160a01b03851681527f7456d08763235cc7605c7a1dd5fe2d0928241e679f857076c1c5e990f449cf4b9060200160405180910390a16040518381527fd376dbdcc691a9a07b027848266fa916fb2ce10d40a720967c084d1aa01290499060200160405180910390a1507f150b7a02000000000000000000000000000000000000000000000000000000005b949350505050565b6006546001600160a01b03163314610a8d5760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b600a5460ff1615610b065760405162461bcd60e51b815260206004820152602d60248201527f43616e206e6f7420657870697265207468652061697264726f70207768696c6560448201527f2069747320656e61626c65642e0000000000000000000000000000000000000060648201526084016107ca565b600a54610100900460ff1615610b845760405162461bcd60e51b815260206004820152603a60248201527f41697264726f7020616c726561647920657870697265642e2043616e206e6f7460448201527f20657870697265207468652061697264726f7020616761696e2e00000000000060648201526084016107ca565b600a805461ff001916610100179055600954600754600091610ba5916133f9565b90508015610bdb57600a54610bc9906201000090046001600160a01b031682612ba0565b80600954610bd79190613410565b6009555b50565b600a546000908190610100900460ff16158015610bfd5750600a5460ff165b15610c1d57506001600160a01b0382166000908152600560205260409020545b92915050565b600033610c31858285612c7f565b610c3c858585612d11565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906107429082908690610c81908790613410565b61275d565b600654600160a01b900460ff16610d055760405162461bcd60e51b815260206004820152603b60248201527f5765276c6c206265206261636b20696e20352e2028436f6e747261637420697360448201527f206e6f74206163746976652061742074686973206d6f6d656e7429000000000060648201526084016107ca565b6001600160a01b03811660009081526005602052604090205480610d915760405162461bcd60e51b815260206004820152603b60248201527f546869732061646472657373206973206e6f7420656c696769626c6520666f7260448201527f20574153207574696c69747920746f6b656e2061697264726f702e000000000060648201526084016107ca565b600a5460ff16610e2f5760405162461bcd60e51b815260206004820152604760248201527f536f7272792c20574153207574696c69747920746f6b656e2061697264726f7060448201527f20636c61696d696e67206973206e6f7420656e61626c6564206174207468652060648201527f6d6f6d656e742e00000000000000000000000000000000000000000000000000608482015260a4016107ca565b600a54610100900460ff1615610ead5760405162461bcd60e51b815260206004820152603760248201527f536f7272792c20574153207574696c6974792061697264726f7020636c61696d60448201527f696e672077696e646f772068617320657870697265642e00000000000000000060648201526084016107ca565b80600954610ebb9190613410565b6007541015610f325760405162461bcd60e51b815260206004820152603c60248201527f496e76616c696420636c61696d206f7065726174696f6e20776f756c6420657860448201527f63656564206d617820746f6b656e20737570706c79206c696d69742e0000000060648201526084016107ca565b610f50826001600160a01b0316600090815260056020526040812055565b80600954610f5e9190613410565b600955610f6b8282612ba0565b6007546009541415610f8757600a805461ffff19166101001790555b5050565b6006546001600160a01b03163314610fd35760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b610fdd6000612f28565b565b6006546001600160a01b031633146110275760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b600a80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6006546001600160a01b031633146110af5760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b6013546040516331a9108f60e11b81526004810183905230916001600160a01b031690636352211e90602401602060405180830381600087803b1580156110f557600080fd5b505af1158015611109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112d91906133c6565b6001600160a01b0316146111a95760405162461bcd60e51b815260206004820152603460248201527f54686973205361746f73686920646f6573206e6f742062656c6f6e6720746f2060448201527f7468697320736d61727420636f6e74726163742e00000000000000000000000060648201526084016107ca565b610bdb816128b6565b6060601280548060200260200160405190810160405280929190818152602001828054801561072a57602002820191906000526020600020905b8154815260200190600101908083116111ec575050505050905090565b6006546001600160a01b031633146112515760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b61126381670de0b6b3a7640000613428565b600b5550565b600654600160a01b900460ff166112e85760405162461bcd60e51b815260206004820152603b60248201527f5765276c6c206265206261636b20696e20352e2028436f6e747261637420697360448201527f206e6f74206163746976652061742074686973206d6f6d656e7429000000000060648201526084016107ca565b60008181526010602052604090205460ff161561135b5760405162461bcd60e51b815260206004820152602b60248201527f526573757272656374696f6e206f662074686973205361746f7368692069732060448201526a3932b9ba3934b1ba32b21760a91b60648201526084016107ca565b6000818152600e602052604090205460ff1615156001146113ef5760405162461bcd60e51b815260206004820152604260248201527f5361746f736869206d75737420626520612068656c6c2076657273696f6e206260448201527f65666f7265207475726e696e6720697420746f2068656176656e20766572736960648201526137b760f11b608482015260a4016107ca565b6000818152600f602052604090205460ff16156114745760405162461bcd60e51b815260206004820152603260248201527f43616e206e6f74207475726e20612068656176656e205361746f73686920696e60448201527f746f2068656176656e205361746f7368692e000000000000000000000000000060648201526084016107ca565b600c543360009081526020819052604090205410156114fb5760405162461bcd60e51b815260206004820152603760248201527f596f7520646f206e6f74206861766520656e6f75676820746f6b656e7320746f60448201527f207265737572726563742074686973205361746f73686900000000000000000060648201526084016107ca565b6013546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381600087803b15801561154157600080fd5b505af1158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906133c6565b6001600160a01b0316146115f55760405162461bcd60e51b815260206004820152602f60248201527f596f75206d757374206f776e20746865205361746f73686920796f752077697360448201527f6820746f207265737572726563742e000000000000000000000000000000000060648201526084016107ca565b61160133600c54612f87565b6000818152600e60209081526040808320805460ff19908116909155600f8352818420805490911660019081179091556012805491820181559093527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444909201839055815183815233918101919091527f2013ed67f09a326a670ec17b8d4df6482faa62060ef6d08bb9184216c5f6c40891015b60405180910390a150565b600654600160a01b900460ff1661171f5760405162461bcd60e51b815260206004820152603b60248201527f5765276c6c206265206261636b20696e20352e2028436f6e747261637420697360448201527f206e6f74206163746976652061742074686973206d6f6d656e7429000000000060648201526084016107ca565b6000818152600f602052604090205460ff16156117a45760405162461bcd60e51b815260206004820152603060248201527f43616e206e6f74207475726e20612068656176656e205361746f73686920696e60448201527f746f2068656c6c205361746f7368692e0000000000000000000000000000000060648201526084016107ca565b60008181526010602052604090205460ff16156118175760405162461bcd60e51b815260206004820152602b60248201527f526573757272656374696f6e206f662074686973205361746f7368692069732060448201526a3932b9ba3934b1ba32b21760a91b60648201526084016107ca565b6000818152600d602052604090205460ff1661189b5760405162461bcd60e51b815260206004820152603a60248201527f54686973205361746f736869206973206e6f7420696e2048656c6c20616e642060448201527f69742063616e206e6f742062652072657375727265637465642e00000000000060648201526084016107ca565b6000818152600e602052604090205460ff16156119205760405162461bcd60e51b815260206004820152602760248201527f54686973205361746f73686920697320616c726561647920612068656c6c207660448201527f657273696f6e2e0000000000000000000000000000000000000000000000000060648201526084016107ca565b600b543360009081526020819052604090205410156119a75760405162461bcd60e51b815260206004820152603760248201527f596f7520646f206e6f74206861766520656e6f75676820746f6b656e7320746f60448201527f207265737572726563742074686973205361746f73686900000000000000000060648201526084016107ca565b6119b333600b54612f87565b6000818152600d60209081526040808320805460ff19908116909155600e909252808320805490921660019081179092556011805492830181559092527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68018290556013549051632142170760e11b8152306004820152336024820152604481018390526001600160a01b03909116906342842e0e90606401600060405180830381600087803b158015611a6657600080fd5b505af1158015611a7a573d6000803e3d6000fd5b5050604080518481523360208201527faf6d787642d6493798935435d685983b9c27fca87275588a2591c37dbf94a99b93500190505b60405180910390a1604080518281523360208201527fb824a77d4a82c53d069faf81638492d6ef1b857c3f64f05455b197dc7c1e0de79101611695565b6060600480546106b19061338b565b6006546001600160a01b03163314611b445760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b600680547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8116600160a01b9182900460ff1615909102179055565b600654600160a01b900460ff16611bff5760405162461bcd60e51b815260206004820152603b60248201527f5765276c6c206265206261636b20696e20352e2028436f6e747261637420697360448201527f206e6f74206163746976652061742074686973206d6f6d656e7429000000000060648201526084016107ca565b6000818152600f602052604090205460ff1615611c845760405162461bcd60e51b815260206004820152603060248201527f43616e206e6f74207475726e20612068656176656e205361746f73686920696e60448201527f746f2068656c6c205361746f7368692e0000000000000000000000000000000060648201526084016107ca565b60008181526010602052604090205460ff1615611cf75760405162461bcd60e51b815260206004820152602b60248201527f526573757272656374696f6e206f662074686973205361746f7368692069732060448201526a3932b9ba3934b1ba32b21760a91b60648201526084016107ca565b6000818152600e602052604090205460ff1615611d7c5760405162461bcd60e51b815260206004820152602660248201527f54686973205361746f73686920697320616c726561647920612068656c6c207660448201527f657273696f6e000000000000000000000000000000000000000000000000000060648201526084016107ca565b600c54336000908152602081905260409020541015611e035760405162461bcd60e51b815260206004820152603860248201527f596f7520646f206e6f74206861766520656e6f75676820746f6b656e7320746f60448201527f207265737572726563742074686973205361746f7368692e000000000000000060648201526084016107ca565b6013546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381600087803b158015611e4957600080fd5b505af1158015611e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8191906133c6565b6001600160a01b031614611efd5760405162461bcd60e51b815260206004820152602f60248201527f596f75206d757374206f776e20746865205361746f73686920796f752077697360448201527f6820746f207265737572726563742e000000000000000000000000000000000060648201526084016107ca565b611f0933600c54612f87565b6000818152600e60209081526040808320805460ff191660019081179091556011805491820181559093527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68909201839055815183815233918101919091527faf6d787642d6493798935435d685983b9c27fca87275588a2591c37dbf94a99b9101611695565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091908381101561202d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016107ca565b610c3c828686840361275d565b6006546001600160a01b031633146120825760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b61209481670de0b6b3a7640000613428565b600c5550565b600033610742818585612d11565b6006546001600160a01b031633146120f05760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b600a805460ff19811660ff90911615179055565b600080600954600754610c1d91906133f9565b600654600160a01b900460ff166121965760405162461bcd60e51b815260206004820152603b60248201527f5765276c6c206265206261636b20696e20352e2028436f6e747261637420697360448201527f206e6f74206163746976652061742074686973206d6f6d656e7429000000000060648201526084016107ca565b60008181526010602052604090205460ff16156122095760405162461bcd60e51b815260206004820152602b60248201527f526573757272656374696f6e206f662074686973205361746f7368692069732060448201526a3932b9ba3934b1ba32b21760a91b60648201526084016107ca565b6000818152600e602052604090205460ff16151560011461229d5760405162461bcd60e51b815260206004820152604260248201527f5361746f736869206d75737420626520612068656c6c2076657273696f6e206260448201527f65666f7265207475726e696e6720697420746f2068656176656e20766572736960648201526137b760f11b608482015260a4016107ca565b6000818152600f602052604090205460ff16156123225760405162461bcd60e51b815260206004820152603260248201527f43616e206e6f74207475726e20612068656176656e205361746f73686920696e60448201527f746f2068656176656e205361746f7368692e000000000000000000000000000060648201526084016107ca565b6000818152600d602052604090205460ff1615156001146123ab5760405162461bcd60e51b815260206004820152603a60248201527f54686973205361746f736869206973206e6f7420696e2048656c6c20616e642060448201527f69742063616e206e6f742062652072657375727265637465642e00000000000060648201526084016107ca565b600b543360009081526020819052604090205410156124325760405162461bcd60e51b815260206004820152603760248201527f596f7520646f206e6f74206861766520656e6f75676820746f6b656e7320746f60448201527f207265737572726563742074686973205361746f73686900000000000000000060648201526084016107ca565b61243e33600b54612f87565b6000818152600d60209081526040808320805460ff19908116909155600e8352818420805482169055600f909252808320805490921660019081179092556012805492830181559092527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444018290556013549051632142170760e11b8152306004820152336024820152604481018390526001600160a01b03909116906342842e0e90606401600060405180830381600087803b1580156124fe57600080fd5b505af1158015612512573d6000803e3d6000fd5b5050604080518481523360208201527f2013ed67f09a326a670ec17b8d4df6482faa62060ef6d08bb9184216c5f6c4089350019050611ab0565b6060601180548060200260200160405190810160405280929190818152602001828054801561072a57602002820191906000526020600020908154815260200190600101908083116111ec575050505050905090565b6006546001600160a01b031633146125ea5760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b6013805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6006546001600160a01b031633146126615760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b6014805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6006546001600160a01b031633146126d85760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b6001600160a01b0381166127545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107ca565b610bdb81612f28565b6001600160a01b0383166127d85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016107ca565b6001600160a01b0382166128545760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016107ca565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600654600160a01b900460ff166129355760405162461bcd60e51b815260206004820152603b60248201527f5765276c6c206265206261636b20696e20352e2028436f6e747261637420697360448201527f206e6f74206163746976652061742074686973206d6f6d656e7429000000000060648201526084016107ca565b61040081111561299b5760405162461bcd60e51b815260206004820152602b60248201527f5361746f736869206f757473696465206f6620746865204e465420636f6c6c6560448201526a31ba34b7b71039b4bd329760a91b60648201526084016107ca565b600081116129ff5760405162461bcd60e51b815260206004820152602b60248201527f5361746f736869206f757473696465206f6620746865204e465420636f6c6c6560448201526a31ba34b7b71039b4bd329760a91b60648201526084016107ca565b6000818152600d602052604090205460ff1615612a5e5760405162461bcd60e51b815260206004820152601860248201527f5361746f73686920616c726561647920696e2068656c6c2e000000000000000060448201526064016107ca565b60008181526010602052604090205460ff1615612ad15760405162461bcd60e51b815260206004820152602b60248201527f526573757272656374696f6e206f662074686973205361746f7368692069732060448201526a3932b9ba3934b1ba32b21760a91b60648201526084016107ca565b6000818152600f602052604090205460ff1615612b555760405162461bcd60e51b8152602060048201526024808201527f43616e206e6f74206164642068656176656e205361746f7368697320746f206860448201527f656c6c2e0000000000000000000000000000000000000000000000000000000060648201526084016107ca565b6000818152600d602052604090819020805460ff19166001179055517f702e2b7d04dac334aa5be9be1b51fbc1e7d1281576e28a3beaab4fcf74f555c5906116959083815260200190565b6001600160a01b038216612bf65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016107ca565b8060026000828254612c089190613410565b90915550506001600160a01b03821660009081526020819052604081208054839290612c35908490613410565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114612d0b5781811015612cfe5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107ca565b612d0b848484840361275d565b50505050565b6001600160a01b038316612d8d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016107ca565b6001600160a01b038216612e095760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016107ca565b6001600160a01b03831660009081526020819052604090205481811015612e985760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016107ca565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612ecf908490613410565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f1b91815260200190565b60405180910390a3612d0b565b600680546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166130035760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016107ca565b6001600160a01b038216600090815260208190526040902054818110156130925760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016107ca565b6001600160a01b03831660009081526020819052604081208383039055600280548492906130c19084906133f9565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016128a9565b600060208083528351808285015260005b8181101561313157858101830151858201604001528201613115565b81811115613143576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610bdb57600080fd5b6000806040838503121561318157600080fd5b823561318c81613159565b946020939093013593505050565b6000602082840312156131ac57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156131df57600080fd5b84356131ea81613159565b935060208501356131fa81613159565b925060408501359150606085013567ffffffffffffffff8082111561321e57600080fd5b818701915087601f83011261323257600080fd5b813581811115613244576132446131b3565b604051601f8201601f19908116603f0116810190838211818310171561326c5761326c6131b3565b816040528281528a602084870101111561328557600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000602082840312156132bb57600080fd5b81356132c681613159565b9392505050565b6000806000606084860312156132e257600080fd5b83356132ed81613159565b925060208401356132fd81613159565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b818110156133465783518352928401929184019160010161332a565b50909695505050505050565b6000806040838503121561336557600080fd5b823561337081613159565b9150602083013561338081613159565b809150509250929050565b600181811c9082168061339f57607f821691505b602082108114156133c057634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156133d857600080fd5b81516132c681613159565b634e487b7160e01b600052601160045260246000fd5b60008282101561340b5761340b6133e3565b500390565b60008219821115613423576134236133e3565b500190565b6000816000190483118215151615613442576134426133e3565b50029056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212206a8864ac7ae091a255c9e52e941219ad41498fd8c41f168036b09406d0495fc564736f6c6343000809003300000000000000000000000000000000000000000000000000000000009c4000000000000000000000000000e543f7311d4f97ed2d67be409cfa353127d7f42b0000000000000000000000004bb74e3f27a41f0cc58a1696d61efd4e4a754ed7000000000000000000000000ffa246c39083704ed6b6e82a5a03e3ed658e3d83

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102ff5760003560e01c8063953d22f61161019c578063c18e6c4a116100ee578063cf36d96c11610097578063edd1820a11610071578063edd1820a14610676578063f2fde38b1461067e578063f3ac5cfb1461069157600080fd5b8063cf36d96c14610617578063d7676bbc1461062a578063dd62ed3e1461063d57600080fd5b8063ca8f8899116100c8578063ca8f8899146105e5578063cbd9e504146105fc578063cd911f681461060f57600080fd5b8063c18e6c4a146105ca578063c7df9f37146105d2578063c9dd3d6d146105da57600080fd5b80639efe6ba611610150578063a9059cbb1161012a578063a9059cbb146105a7578063ad7963a0146105ba578063af35ae27146105c257600080fd5b80639efe6ba61461056e578063a457c2d714610581578063a76f798e1461059457600080fd5b80639b07ad71116101815780639b07ad71146105205780639c3f391f146105435780639df900281461056657600080fd5b8063953d22f61461050557806395d89b411461051857600080fd5b80634c0f38c2116102555780637a3da25a116102095780637f4e4849116101e35780637f4e4849146104cf5780638d97f591146104e15780638da5cb5b146104f457600080fd5b80637a3da25a146104945780637aa39b86146104a75780637d38b533146104bc57600080fd5b806370a082311161023a57806370a0823114610450578063715018a6146104795780637222015f1461048157600080fd5b80634c0f38c21461043557806365f8c6c51461043d57600080fd5b806318160ddd116102b7578063313ce56711610291578063313ce567146103ee57806336556873146103fd578063395093511461042257600080fd5b806318160ddd146103b65780631df95606146103c857806323b872dd146103db57600080fd5b80630dcd3b34116102e85780630dcd3b3414610345578063150b7a0214610368578063174709a6146103ac57600080fd5b806306fdde0314610304578063095ea7b314610322575b600080fd5b61030c6106a2565b6040516103199190613104565b60405180910390f35b61033561033036600461316e565b610734565b6040519015158152602001610319565b61033561035336600461319a565b6000908152600d602052604090205460ff1690565b61037b6103763660046131c9565b61074c565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610319565b6103b4610a45565b005b6002545b604051908152602001610319565b6103ba6103d63660046132a9565b610bde565b6103356103e93660046132cd565b610c23565b60405160128152602001610319565b6013546001600160a01b03165b6040516001600160a01b039091168152602001610319565b61033561043036600461316e565b610c47565b6007546103ba565b6103b461044b3660046132a9565b610c86565b6103ba61045e3660046132a9565b6001600160a01b031660009081526020819052604090205490565b6103b4610f8b565b6103b461048f3660046132a9565b610fdf565b6103b46104a236600461319a565b611067565b6104af6111b2565b604051610319919061330e565b6103b46104ca36600461319a565b611209565b600654600160a01b900460ff16610335565b6103b46104ef36600461319a565b611269565b6006546001600160a01b031661040a565b6103b461051336600461319a565b6116a0565b61030c611aed565b61033561052e36600461319a565b6000908152600e602052604090205460ff1690565b61033561055136600461319a565b6000908152600f602052604090205460ff1690565b6103b4611afc565b6103b461057c36600461319a565b611b80565b61033561058f36600461316e565b611f90565b6103b46105a236600461319a565b61203a565b6103356105b536600461316e565b61209a565b6103b46120a8565b6103ba612104565b600c546103ba565b600b546103ba565b600a5460ff16610335565b600a546201000090046001600160a01b031661040a565b6103b461060a36600461319a565b612117565b6104af61254c565b6103b46106253660046132a9565b6125a2565b6103b46106383660046132a9565b612619565b6103ba61064b366004613352565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6009546103ba565b6103b461068c3660046132a9565b612690565b6014546001600160a01b031661040a565b6060600380546106b19061338b565b80601f01602080910402602001604051908101604052809291908181526020018280546106dd9061338b565b801561072a5780601f106106ff5761010080835404028352916020019161072a565b820191906000526020600020905b81548152906001019060200180831161070d57829003601f168201915b5050505050905090565b60003361074281858561275d565b5060019392505050565b600654600090600160a01b900460ff166107d35760405162461bcd60e51b815260206004820152603b60248201527f5765276c6c206265206261636b20696e20352e2028436f6e747261637420697360448201527f206e6f74206163746976652061742074686973206d6f6d656e7429000000000060648201526084015b60405180910390fd5b6014546001600160a01b038581169116146108565760405162461bcd60e51b815260206004820152602e60248201527f4e6f207468616e6b20796f752c204920616d206e6f742073757265207468697360448201527f206973206120574153204e46542e00000000000000000000000000000000000060648201526084016107ca565b6013546040516331a9108f60e11b81526004810185905230916001600160a01b031690636352211e90602401602060405180830381600087803b15801561089c57600080fd5b505af11580156108b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d491906133c6565b6001600160a01b0316146109505760405162461bcd60e51b815260206004820152603460248201527f54686973205361746f73686920646f6573206e6f742062656c6f6e6720746f2060448201527f7468697320736d61727420636f6e74726163742e00000000000000000000000060648201526084016107ca565b6014546001600160a01b0385811691161415610a3d5761096f836128b6565b6040516001600160a01b03861681527fd045be8d33b2dae75a2c2b660351d8306589a2885a4adc6ff26af3e2d3a3292c9060200160405180910390a16040516001600160a01b03851681527f7456d08763235cc7605c7a1dd5fe2d0928241e679f857076c1c5e990f449cf4b9060200160405180910390a16040518381527fd376dbdcc691a9a07b027848266fa916fb2ce10d40a720967c084d1aa01290499060200160405180910390a1507f150b7a02000000000000000000000000000000000000000000000000000000005b949350505050565b6006546001600160a01b03163314610a8d5760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b600a5460ff1615610b065760405162461bcd60e51b815260206004820152602d60248201527f43616e206e6f7420657870697265207468652061697264726f70207768696c6560448201527f2069747320656e61626c65642e0000000000000000000000000000000000000060648201526084016107ca565b600a54610100900460ff1615610b845760405162461bcd60e51b815260206004820152603a60248201527f41697264726f7020616c726561647920657870697265642e2043616e206e6f7460448201527f20657870697265207468652061697264726f7020616761696e2e00000000000060648201526084016107ca565b600a805461ff001916610100179055600954600754600091610ba5916133f9565b90508015610bdb57600a54610bc9906201000090046001600160a01b031682612ba0565b80600954610bd79190613410565b6009555b50565b600a546000908190610100900460ff16158015610bfd5750600a5460ff165b15610c1d57506001600160a01b0382166000908152600560205260409020545b92915050565b600033610c31858285612c7f565b610c3c858585612d11565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906107429082908690610c81908790613410565b61275d565b600654600160a01b900460ff16610d055760405162461bcd60e51b815260206004820152603b60248201527f5765276c6c206265206261636b20696e20352e2028436f6e747261637420697360448201527f206e6f74206163746976652061742074686973206d6f6d656e7429000000000060648201526084016107ca565b6001600160a01b03811660009081526005602052604090205480610d915760405162461bcd60e51b815260206004820152603b60248201527f546869732061646472657373206973206e6f7420656c696769626c6520666f7260448201527f20574153207574696c69747920746f6b656e2061697264726f702e000000000060648201526084016107ca565b600a5460ff16610e2f5760405162461bcd60e51b815260206004820152604760248201527f536f7272792c20574153207574696c69747920746f6b656e2061697264726f7060448201527f20636c61696d696e67206973206e6f7420656e61626c6564206174207468652060648201527f6d6f6d656e742e00000000000000000000000000000000000000000000000000608482015260a4016107ca565b600a54610100900460ff1615610ead5760405162461bcd60e51b815260206004820152603760248201527f536f7272792c20574153207574696c6974792061697264726f7020636c61696d60448201527f696e672077696e646f772068617320657870697265642e00000000000000000060648201526084016107ca565b80600954610ebb9190613410565b6007541015610f325760405162461bcd60e51b815260206004820152603c60248201527f496e76616c696420636c61696d206f7065726174696f6e20776f756c6420657860448201527f63656564206d617820746f6b656e20737570706c79206c696d69742e0000000060648201526084016107ca565b610f50826001600160a01b0316600090815260056020526040812055565b80600954610f5e9190613410565b600955610f6b8282612ba0565b6007546009541415610f8757600a805461ffff19166101001790555b5050565b6006546001600160a01b03163314610fd35760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b610fdd6000612f28565b565b6006546001600160a01b031633146110275760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b600a80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6006546001600160a01b031633146110af5760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b6013546040516331a9108f60e11b81526004810183905230916001600160a01b031690636352211e90602401602060405180830381600087803b1580156110f557600080fd5b505af1158015611109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112d91906133c6565b6001600160a01b0316146111a95760405162461bcd60e51b815260206004820152603460248201527f54686973205361746f73686920646f6573206e6f742062656c6f6e6720746f2060448201527f7468697320736d61727420636f6e74726163742e00000000000000000000000060648201526084016107ca565b610bdb816128b6565b6060601280548060200260200160405190810160405280929190818152602001828054801561072a57602002820191906000526020600020905b8154815260200190600101908083116111ec575050505050905090565b6006546001600160a01b031633146112515760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b61126381670de0b6b3a7640000613428565b600b5550565b600654600160a01b900460ff166112e85760405162461bcd60e51b815260206004820152603b60248201527f5765276c6c206265206261636b20696e20352e2028436f6e747261637420697360448201527f206e6f74206163746976652061742074686973206d6f6d656e7429000000000060648201526084016107ca565b60008181526010602052604090205460ff161561135b5760405162461bcd60e51b815260206004820152602b60248201527f526573757272656374696f6e206f662074686973205361746f7368692069732060448201526a3932b9ba3934b1ba32b21760a91b60648201526084016107ca565b6000818152600e602052604090205460ff1615156001146113ef5760405162461bcd60e51b815260206004820152604260248201527f5361746f736869206d75737420626520612068656c6c2076657273696f6e206260448201527f65666f7265207475726e696e6720697420746f2068656176656e20766572736960648201526137b760f11b608482015260a4016107ca565b6000818152600f602052604090205460ff16156114745760405162461bcd60e51b815260206004820152603260248201527f43616e206e6f74207475726e20612068656176656e205361746f73686920696e60448201527f746f2068656176656e205361746f7368692e000000000000000000000000000060648201526084016107ca565b600c543360009081526020819052604090205410156114fb5760405162461bcd60e51b815260206004820152603760248201527f596f7520646f206e6f74206861766520656e6f75676820746f6b656e7320746f60448201527f207265737572726563742074686973205361746f73686900000000000000000060648201526084016107ca565b6013546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381600087803b15801561154157600080fd5b505af1158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906133c6565b6001600160a01b0316146115f55760405162461bcd60e51b815260206004820152602f60248201527f596f75206d757374206f776e20746865205361746f73686920796f752077697360448201527f6820746f207265737572726563742e000000000000000000000000000000000060648201526084016107ca565b61160133600c54612f87565b6000818152600e60209081526040808320805460ff19908116909155600f8352818420805490911660019081179091556012805491820181559093527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444909201839055815183815233918101919091527f2013ed67f09a326a670ec17b8d4df6482faa62060ef6d08bb9184216c5f6c40891015b60405180910390a150565b600654600160a01b900460ff1661171f5760405162461bcd60e51b815260206004820152603b60248201527f5765276c6c206265206261636b20696e20352e2028436f6e747261637420697360448201527f206e6f74206163746976652061742074686973206d6f6d656e7429000000000060648201526084016107ca565b6000818152600f602052604090205460ff16156117a45760405162461bcd60e51b815260206004820152603060248201527f43616e206e6f74207475726e20612068656176656e205361746f73686920696e60448201527f746f2068656c6c205361746f7368692e0000000000000000000000000000000060648201526084016107ca565b60008181526010602052604090205460ff16156118175760405162461bcd60e51b815260206004820152602b60248201527f526573757272656374696f6e206f662074686973205361746f7368692069732060448201526a3932b9ba3934b1ba32b21760a91b60648201526084016107ca565b6000818152600d602052604090205460ff1661189b5760405162461bcd60e51b815260206004820152603a60248201527f54686973205361746f736869206973206e6f7420696e2048656c6c20616e642060448201527f69742063616e206e6f742062652072657375727265637465642e00000000000060648201526084016107ca565b6000818152600e602052604090205460ff16156119205760405162461bcd60e51b815260206004820152602760248201527f54686973205361746f73686920697320616c726561647920612068656c6c207660448201527f657273696f6e2e0000000000000000000000000000000000000000000000000060648201526084016107ca565b600b543360009081526020819052604090205410156119a75760405162461bcd60e51b815260206004820152603760248201527f596f7520646f206e6f74206861766520656e6f75676820746f6b656e7320746f60448201527f207265737572726563742074686973205361746f73686900000000000000000060648201526084016107ca565b6119b333600b54612f87565b6000818152600d60209081526040808320805460ff19908116909155600e909252808320805490921660019081179092556011805492830181559092527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68018290556013549051632142170760e11b8152306004820152336024820152604481018390526001600160a01b03909116906342842e0e90606401600060405180830381600087803b158015611a6657600080fd5b505af1158015611a7a573d6000803e3d6000fd5b5050604080518481523360208201527faf6d787642d6493798935435d685983b9c27fca87275588a2591c37dbf94a99b93500190505b60405180910390a1604080518281523360208201527fb824a77d4a82c53d069faf81638492d6ef1b857c3f64f05455b197dc7c1e0de79101611695565b6060600480546106b19061338b565b6006546001600160a01b03163314611b445760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b600680547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8116600160a01b9182900460ff1615909102179055565b600654600160a01b900460ff16611bff5760405162461bcd60e51b815260206004820152603b60248201527f5765276c6c206265206261636b20696e20352e2028436f6e747261637420697360448201527f206e6f74206163746976652061742074686973206d6f6d656e7429000000000060648201526084016107ca565b6000818152600f602052604090205460ff1615611c845760405162461bcd60e51b815260206004820152603060248201527f43616e206e6f74207475726e20612068656176656e205361746f73686920696e60448201527f746f2068656c6c205361746f7368692e0000000000000000000000000000000060648201526084016107ca565b60008181526010602052604090205460ff1615611cf75760405162461bcd60e51b815260206004820152602b60248201527f526573757272656374696f6e206f662074686973205361746f7368692069732060448201526a3932b9ba3934b1ba32b21760a91b60648201526084016107ca565b6000818152600e602052604090205460ff1615611d7c5760405162461bcd60e51b815260206004820152602660248201527f54686973205361746f73686920697320616c726561647920612068656c6c207660448201527f657273696f6e000000000000000000000000000000000000000000000000000060648201526084016107ca565b600c54336000908152602081905260409020541015611e035760405162461bcd60e51b815260206004820152603860248201527f596f7520646f206e6f74206861766520656e6f75676820746f6b656e7320746f60448201527f207265737572726563742074686973205361746f7368692e000000000000000060648201526084016107ca565b6013546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381600087803b158015611e4957600080fd5b505af1158015611e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8191906133c6565b6001600160a01b031614611efd5760405162461bcd60e51b815260206004820152602f60248201527f596f75206d757374206f776e20746865205361746f73686920796f752077697360448201527f6820746f207265737572726563742e000000000000000000000000000000000060648201526084016107ca565b611f0933600c54612f87565b6000818152600e60209081526040808320805460ff191660019081179091556011805491820181559093527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68909201839055815183815233918101919091527faf6d787642d6493798935435d685983b9c27fca87275588a2591c37dbf94a99b9101611695565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091908381101561202d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016107ca565b610c3c828686840361275d565b6006546001600160a01b031633146120825760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b61209481670de0b6b3a7640000613428565b600c5550565b600033610742818585612d11565b6006546001600160a01b031633146120f05760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b600a805460ff19811660ff90911615179055565b600080600954600754610c1d91906133f9565b600654600160a01b900460ff166121965760405162461bcd60e51b815260206004820152603b60248201527f5765276c6c206265206261636b20696e20352e2028436f6e747261637420697360448201527f206e6f74206163746976652061742074686973206d6f6d656e7429000000000060648201526084016107ca565b60008181526010602052604090205460ff16156122095760405162461bcd60e51b815260206004820152602b60248201527f526573757272656374696f6e206f662074686973205361746f7368692069732060448201526a3932b9ba3934b1ba32b21760a91b60648201526084016107ca565b6000818152600e602052604090205460ff16151560011461229d5760405162461bcd60e51b815260206004820152604260248201527f5361746f736869206d75737420626520612068656c6c2076657273696f6e206260448201527f65666f7265207475726e696e6720697420746f2068656176656e20766572736960648201526137b760f11b608482015260a4016107ca565b6000818152600f602052604090205460ff16156123225760405162461bcd60e51b815260206004820152603260248201527f43616e206e6f74207475726e20612068656176656e205361746f73686920696e60448201527f746f2068656176656e205361746f7368692e000000000000000000000000000060648201526084016107ca565b6000818152600d602052604090205460ff1615156001146123ab5760405162461bcd60e51b815260206004820152603a60248201527f54686973205361746f736869206973206e6f7420696e2048656c6c20616e642060448201527f69742063616e206e6f742062652072657375727265637465642e00000000000060648201526084016107ca565b600b543360009081526020819052604090205410156124325760405162461bcd60e51b815260206004820152603760248201527f596f7520646f206e6f74206861766520656e6f75676820746f6b656e7320746f60448201527f207265737572726563742074686973205361746f73686900000000000000000060648201526084016107ca565b61243e33600b54612f87565b6000818152600d60209081526040808320805460ff19908116909155600e8352818420805482169055600f909252808320805490921660019081179092556012805492830181559092527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444018290556013549051632142170760e11b8152306004820152336024820152604481018390526001600160a01b03909116906342842e0e90606401600060405180830381600087803b1580156124fe57600080fd5b505af1158015612512573d6000803e3d6000fd5b5050604080518481523360208201527f2013ed67f09a326a670ec17b8d4df6482faa62060ef6d08bb9184216c5f6c4089350019050611ab0565b6060601180548060200260200160405190810160405280929190818152602001828054801561072a57602002820191906000526020600020908154815260200190600101908083116111ec575050505050905090565b6006546001600160a01b031633146125ea5760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b6013805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6006546001600160a01b031633146126615760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b6014805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6006546001600160a01b031633146126d85760405162461bcd60e51b8152602060048201819052602482015260008051602061344883398151915260448201526064016107ca565b6001600160a01b0381166127545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107ca565b610bdb81612f28565b6001600160a01b0383166127d85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016107ca565b6001600160a01b0382166128545760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016107ca565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600654600160a01b900460ff166129355760405162461bcd60e51b815260206004820152603b60248201527f5765276c6c206265206261636b20696e20352e2028436f6e747261637420697360448201527f206e6f74206163746976652061742074686973206d6f6d656e7429000000000060648201526084016107ca565b61040081111561299b5760405162461bcd60e51b815260206004820152602b60248201527f5361746f736869206f757473696465206f6620746865204e465420636f6c6c6560448201526a31ba34b7b71039b4bd329760a91b60648201526084016107ca565b600081116129ff5760405162461bcd60e51b815260206004820152602b60248201527f5361746f736869206f757473696465206f6620746865204e465420636f6c6c6560448201526a31ba34b7b71039b4bd329760a91b60648201526084016107ca565b6000818152600d602052604090205460ff1615612a5e5760405162461bcd60e51b815260206004820152601860248201527f5361746f73686920616c726561647920696e2068656c6c2e000000000000000060448201526064016107ca565b60008181526010602052604090205460ff1615612ad15760405162461bcd60e51b815260206004820152602b60248201527f526573757272656374696f6e206f662074686973205361746f7368692069732060448201526a3932b9ba3934b1ba32b21760a91b60648201526084016107ca565b6000818152600f602052604090205460ff1615612b555760405162461bcd60e51b8152602060048201526024808201527f43616e206e6f74206164642068656176656e205361746f7368697320746f206860448201527f656c6c2e0000000000000000000000000000000000000000000000000000000060648201526084016107ca565b6000818152600d602052604090819020805460ff19166001179055517f702e2b7d04dac334aa5be9be1b51fbc1e7d1281576e28a3beaab4fcf74f555c5906116959083815260200190565b6001600160a01b038216612bf65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016107ca565b8060026000828254612c089190613410565b90915550506001600160a01b03821660009081526020819052604081208054839290612c35908490613410565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114612d0b5781811015612cfe5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107ca565b612d0b848484840361275d565b50505050565b6001600160a01b038316612d8d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016107ca565b6001600160a01b038216612e095760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016107ca565b6001600160a01b03831660009081526020819052604090205481811015612e985760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016107ca565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612ecf908490613410565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f1b91815260200190565b60405180910390a3612d0b565b600680546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166130035760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016107ca565b6001600160a01b038216600090815260208190526040902054818110156130925760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016107ca565b6001600160a01b03831660009081526020819052604081208383039055600280548492906130c19084906133f9565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016128a9565b600060208083528351808285015260005b8181101561313157858101830151858201604001528201613115565b81811115613143576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610bdb57600080fd5b6000806040838503121561318157600080fd5b823561318c81613159565b946020939093013593505050565b6000602082840312156131ac57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156131df57600080fd5b84356131ea81613159565b935060208501356131fa81613159565b925060408501359150606085013567ffffffffffffffff8082111561321e57600080fd5b818701915087601f83011261323257600080fd5b813581811115613244576132446131b3565b604051601f8201601f19908116603f0116810190838211818310171561326c5761326c6131b3565b816040528281528a602084870101111561328557600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000602082840312156132bb57600080fd5b81356132c681613159565b9392505050565b6000806000606084860312156132e257600080fd5b83356132ed81613159565b925060208401356132fd81613159565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b818110156133465783518352928401929184019160010161332a565b50909695505050505050565b6000806040838503121561336557600080fd5b823561337081613159565b9150602083013561338081613159565b809150509250929050565b600181811c9082168061339f57607f821691505b602082108114156133c057634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156133d857600080fd5b81516132c681613159565b634e487b7160e01b600052601160045260246000fd5b60008282101561340b5761340b6133e3565b500390565b60008219821115613423576134236133e3565b500190565b6000816000190483118215151615613442576134426133e3565b50029056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212206a8864ac7ae091a255c9e52e941219ad41498fd8c41f168036b09406d0495fc564736f6c63430008090033

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

00000000000000000000000000000000000000000000000000000000009c4000000000000000000000000000e543f7311d4f97ed2d67be409cfa353127d7f42b0000000000000000000000004bb74e3f27a41f0cc58a1696d61efd4e4a754ed7000000000000000000000000ffa246c39083704ed6b6e82a5a03e3ed658e3d83

-----Decoded View---------------
Arg [0] : maxTokenSupply (uint256): 10240000
Arg [1] : wasNftScAddress (address): 0xE543F7311d4f97ed2d67Be409cfa353127D7F42B
Arg [2] : satoshisHellOsAddress (address): 0x4bb74e3F27A41f0cC58A1696D61EFd4E4A754eD7
Arg [3] : communityLiquidityAddress (address): 0xFfa246C39083704ED6b6e82A5a03E3Ed658E3d83

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000009c4000
Arg [1] : 000000000000000000000000e543f7311d4f97ed2d67be409cfa353127d7f42b
Arg [2] : 0000000000000000000000004bb74e3f27a41f0cc58a1696d61efd4e4a754ed7
Arg [3] : 000000000000000000000000ffa246c39083704ed6b6e82a5a03e3ed658e3d83


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  ]

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.