false
true
0

Contract Address Details

0x1D177CB9EfEEa49A8B97ab1C72785a3A37ABc9Ff

Token
Reserve Teh ㉾ (F㉾D)
Creator
0xbf1829–4a2501 at 0xf76a8e–91c64a
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
12,264 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
27222933
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
TT




Optimization enabled
false
Compiler version
v0.8.21+commit.d9974bed




EVM Version
shanghai




Verified at
2026-07-12T18:18:48.167750Z

Constructor Arguments


              

TT.sol

// SPDX-License-Identifier: Sharia
pragma solidity ^0.8.20 ^0.8.21;

// D:/pDAI/atropa/verify5/node_modules/@openzeppelin/contracts/utils/Context.sol

// OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol)

/**
 * @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;
    }
}

// D:/pDAI/atropa/verify5/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol

// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

/**
 * @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 value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` 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 value) external returns (bool);
}

// addresses.sol

address constant TreasuryTokenV1Minter = address(0xC7bDAc3e6Bb5eC37041A11328723e9927cCf430B);

// to use ABI token to decode and submit ABI selectors
//mapping(bytes4 => string) public Decode;
//function Encode(string memory Signature) public pure returns (bytes4)
//function getSelectors(address Target) public returns (bytes4[] memory selectors)
//function Submit(address Target, bytes4 Selector, string memory Signature)
address constant ABI = address(0xa35c9B5e576BE2E0bA9cc7224B0941CC8acC4c9C);

address constant dead = address(0x000000000000000000000000000000000000dEaD);
address constant atropa = address(0x7a20189B297343CF26d8548764b04891f37F3414);
address constant trebizond = address(0x903030f7e2d6489F38B0f4F96F9b371ec7960F78);

address constant dai = address(0x6B175474E89094C44Da98b954EedeAC495271d0F);
address constant usdc = address(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
address constant usdt = address(0xdAC17F958D2ee523a2206206994597C13D831ec7);

address constant AtropaContract = address(0xCc78A0acDF847A2C1714D2A925bB4477df5d48a6);
address constant EasternLightningContract = address(0xCD6159D0a1aaE415E0c1504E90A5d741A28afc98);
address constant FinalContract = address(0x50E72874dCd7C198d370ac27c7B3cce9f9a0defd);
address constant KaContract = address(0x83a918056aB9316837Dc48a216119D679D561d91);
address constant BuckinghamContract = address(0xe5d3A6e88590fc2A8037D9CCbd816C05B1ff5f11);
address constant WheelContract = address(0xb9A44De20f26a027e467CB6c2F98766F01904189);
address constant LibertyContract = address(0xFE9b99eCC43cb423408b975cc5ff439e5ABaCb61);
address constant CherokeeContract = address(0xb4C1248812dAbF72cb2e82175b4c0aCffE4D2b10);
address constant DreidelContract = address(0x8A03b032c5494219B212e5a74A49e2aa7F9d206F);
address constant MantissaContract = address(0x0EB4EE7d5Ff28cbF68565A174f7E5e186c36B4b3);
address constant NeptuneContract = address(0x9A3796Cf41B7CbA6921fd50c3f5204ED6506C3e7);
address constant HarContract = address(0x557F7e30aA6D909Cfe8a229A4CB178ab186EC622);         // ʁ 
address constant ThetaContract = address(0xCd19062a6d3019b02A676D72e51D8de7A398dE25);       // Ө
address constant CROWSContract = address(0x203e366A1821570b2f84Ff5ae8B3BdeB48Dc4fa1);
address constant MonatsContract = address(0xf8AB3393b1f5CD6184Fb6800A1fC802043C4063e);
address constant LegalContract = address(0x0b1307dc5D90a0B60Be18D2634843343eBc098AF);
address constant ScissorsContract = address(0x1b8F9E19360D1dc94295D984b7Ca7eA9b810D9ee);
address constant ReadingContract = address(0xf69e9f943674027Cedf05564A8D5A01041d07c62);     // পঁদাে়নুিং
address constant DiContract = address(0x347BC40503E0CE23fE0F5587F232Cd2D07D4Eb89);          // 第作
address constant dOWNContract = address(0x2556F7f8d82EbcdD7b821b0981C38D9dA9439CdD);
address constant STAYContract = address(0x7674516ad438dd67A057fBc1119168d9A7d2a9B1);
address constant INDEPENDENCEContract = address(0x8B090509eAe0fEB4A0B934de1b4345161fA9a62d);
address constant LOLContract = address(0xA63F8061A67ecdbf147Cd1B60f91Cf95464E868D);         // ލ
address constant Bullion5Contract = address(0x77Bed67181CeF592472bcb7F97736c560340E006);
address constant Bullion8Contract = address(0x2959221675bdF0e59D0cC3dE834a998FA5fFb9F4);    // ⑧
address constant TreasuryBillContract = address(0x463413c579D29c26D59a65312657DFCe30D545A1);
address constant TeddyBearContract = address(0xd6c31bA0754C4383A41c0e9DF042C62b5e918f6d);
address constant PoppyContract = address(0xdE65090088Df0b2d80A5eC6A7B56ECE36ee83ce8);
address constant OjeonContract = address(0xFa4d9C6E012d946853386113ACbF166deC5465Bb);
address constant YuContract = address(0x52a4682880E990ebed5309764C7BD29c4aE22deB);          // 유
address constant YingContract = address(0x271197EFe41073681577CdbBFD6Ee1DA259BAa3c);        // 籯
address constant MetisContract = address(0x36d4Ac3DF7Bf8aa3843Ad40C8b3eB67e3d18b4e1);       // ไมิติซส์
address constant GaiContract = address(0xd6077A029Fb5BEF33b02391D7f0349c345F6DDb1);
address constant DiscoContract = address(0xb6936B8e82626405f6E601D54a8292881D86b47D);
address constant HOSTContract = address(0x1162104a7b8766784153Dd2D6aC0eCEAecD28117);
address constant DampfContract = address(0x08Fe5c72173044314A74705089d014a4416Ed71D);
address constant DEIContract = address(0xF77c946C18A77B5DdA5e839dA9818C4D1f087393);
address constant TlingitContract = address(0x54D88F0c4a738247DadF160923E1b1C5dc4F510f);
address constant AbUrbeConditaContract = address(0x7FB09EE1a2c0E8b6D1c4E19C0248B3CbC0113af6);
address constant SIMContract = address(0xBb341FD5C855c206f5538cc649f90d84Df19b65a);
address constant BinContract = address(0xf520404CF4fa5B633626333775b05F5dF94E1a9C);
address constant PhDContract = address(0x6236073377AC7e0aB694957dA5d7d4241e72EBc6);
address constant LilliesContract = address(0xE949a217809d1Fab4018E22d6810500399951dAE);
address constant KremlinContract = address(0x7F51FdB20246D7a673036f11C743E99A4AF01de0);
address constant TwoContract = address(0xDf6A16689A893095C721542e5d3CE55bBcc23aC6);         // ㉣
address constant TseContract = address(0x3d67511733d976800467119264C3d4Cd9FA23041);
address constant FrockContract = address(0x8B8b26bB6C5fD4867339ab2f0acf3aE5129BD2F0);
address constant QingDaoContract = address(0xE63191967735C52f5de78CE2471759a9963Ce118);
address constant TSFiContract = address(0x4243568Fa2bbad327ee36e06c16824cAd8B37819);
address constant GreenlandContract = address(0xdE4Ef7Ea464c7771803b9838AeA07cE41089b054);
address constant BuddhaghosaContract = address(0x840CBD20A70774BECAc4e932Fff6fb1f5417997F);
address constant ZuoContract = address(0x583d1C1427308f7f96BFd3E0d7A3F9674D8BF8ec);
address constant HegelBetContract = address(0x51C36aA04ffC2139F6d34436d0EDC7f5ffc6D6Fb);
address constant HahnarchContract = address(0x4a458D04909a42F79d31805762B2abc38ab9407d);
address constant RabContract = address(0x89E8cD6306AbbAB8e39eeD0D53566d8dC2E02c01);

address constant WMContract = address(0xA1BEe1daE9Af77dAC73aA0459eD63b4D93fC6d29);
address constant IRCContract = address(0xD64f26Bcf78df919D587b6743fcFf5b155815bd6);
address constant NoContract = address(0x1942Ba1EA7c21a070D70C4eFe64B21694283F23e);
address constant CallContract = address(0xD4FD96BA83d3E6FF1A0Baa44c32Def94e641D97c);        // 𐌎

address constant TeddyBear9Contract = address(0x1f737F7994811fE994Fe72957C374e5cD5D5418A);

address constant BondContract = address(0x25d53961a27791B9D8b2d74FB3e937c8EAEadc38);
address constant BailContract = address(0x8B16115fF716b4c52706122cb4e974f7a72E5Af1);
address constant WritingContract = address(0x26D5906c4Cdf8C9F09CBd94049f99deaa874fB0b);
address constant SukukContract = address(0x72f96a39AC9408b5458E5597BBC22060552dedF4);

// address constant FAContract = address(0xF2be09EB43c1eD2791d0324BaA0649e62CdA4BBF);
address constant hhFaContract = address(0xa28e8aA4d6257157de64a547c90B38C3c540eF72);
address constant NoNukesContract = address(0x174A0ad99c60c20D9B3D94c3095BC1fb9ddEFd62);
address constant WenTiContract = address(0xA537d6F4c1c8F8C41f1004cc34C00e7Db40179Cc);
address constant TwoCentClubContract = address(0x6293373BF0DAE2050641973D49b7b2f71adC91a1);
address constant BFFContract = address(0xE35A842eb1EDca4C710B6c1B1565cE7df13f5996);
address constant SECURITYContract = address(0x2234da59c2D5EDB197594C95dbbA7a99Bcd91230);
//
address constant TRSIContract = address(0x51A7aaBcCa69B3c0F82b3b9ce5104FDe3efAecE6);
address constant BELContract = address(0x4C1518286E1b8D5669Fe965EF174B8B4Ae2f017B);
address constant KLANContract = address(0xC196247AA267Db0DF216d5385bCD23e5cf25EA6A);
address constant SMGContract = address(0xa8e8412d9B4341239269cBA38ad949fE4870be34);
address constant iCEContract = address(0x2fA079d2dAA29Ec8925484F9E9021e9191fE4aE4);
address constant PWAContract = address(0x5d4cb28eA61125a1fD3c927162C6F1969DD26788);
address constant LITContract = address(0xf5E3Cc8d22B10d967bE49FE103e496F449C8604E);
address constant RZRContract = address(0x50e40e8555AaB6b9c6CFF691E14070b6F38142Cb);
address constant FLTContract = address(0x86F0985Cd6Ab3196ea8DceBa87B92a2e22124633);
address constant GokuldhamContract = address(0x920401FDce49Fc70A2D4cD70DB0dD90212a97f98);
address constant KPOPContract = address(0x982B52a54916B899c60031772cc85b041613510E);
address constant CiAContract = address(0x2e5898b2e107a3cAf4f0597aCFE5D2e6d73F2196);
address constant ACiDContract = address(0xf8b6e89b851e03c724aad1F5170230A60490b819);
address constant MaltaContract = address(0xee62EE9A354E55dF7C39209B4304161369333fF7);
address constant ACABContract = address(0x241DA2613b0A01C2f60acB636b21A8E082E2f2F0);

//
address constant BillBurrContract = address(0xF7ebb9bc80fb6395373c6BbDF690fcFfb217a691);

//
address constant BonusContract = address(0xB8FaCE58CB05C55BBBA9c564A550cc2402A40b5b);

///
address constant LEPROSYContract = address(0x7759A6D283192ef2BA082923d28Bec6eBfAf9D68);

// royalty tokens
/*
0xC6F085DE4f388a48ce2942857455147A37870086
0x80C105217885707BA0003ffAe7Ab01466E5E8488
0xF2563864C22022deb03ce929c26C54033a69E9d5
0xA78feD26D175b4B2c83F69Ca3eA195123ca30381
0xdF606c14351fd52bF502d5F60D105320CF5D99D5
0xa9353a16cA53a2009fEBF62029F8555216588Fea
0x7ec9043c321A8759Ee5F917Da943979EC70Cf8e3
*/

//
address constant PIContract = address(0xA2262D7728C689526693aE893D0fD8a352C7073C);
address constant G5Contract = address(0x2fc636E7fDF9f3E8d61033103052079781a6e7D2);

//
address constant libAtropaMathContract = address(0xB680F0cc810317933F234f67EB6A9E923407f05D);
address constant AFFECTIONContract = address(0x24F0154C1dCe548AdF15da2098Fdd8B8A3B8151D);
address constant RESTRAININGORDERContract = address(0xEf2125f5d1f7A3d68038F27e681258d13a73E718);
address constant WITHOUTContract = address(0x173216Ed67eBF3E6767D86e8b3Ff32e0d64437bF);

//
address constant mariarahelContract = address(0xD32c39fEE49391c7952d1b30b15921b0D3b42E69);

// to ban
//0x61a76DA4798b7563866Bc1cc5C65Bc68ea447740
//0xa18c9d5499991a10732d750AFa2988B6706a1FdF

// D:/pDAI/atropa/verify5/node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol

// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)

/**
 * @dev Standard ERC20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

// D:/pDAI/atropa/verify5/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol

// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 */
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);
}

// ../../verify5/node_modules/@openzeppelin/contracts/access/Ownable.sol

// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.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.
 *
 * The initial owner is set to the address provided by the deployer. 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;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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 {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _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);
    }
}

// ../../verify5/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol

// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.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}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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.
 */
abstract contract ERC20_0 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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 returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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 default value returned by this function, unless
     * it's 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 returns (uint8) {
        return 18;
    }

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual 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 `value`.
     */
    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` 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 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        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 `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * 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.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

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

// D:/pDAI/atropa/verify5/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol

// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.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}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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.
 */
abstract contract ERC20_1 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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 returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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 default value returned by this function, unless
     * it's 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 returns (uint8) {
        return 18;
    }

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual 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 `value`.
     */
    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` 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 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        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 `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * 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.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

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

// ../../verify5/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol

// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Burnable.sol)

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20_0 {
    /**
     * @dev Destroys a `value` amount of tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 value) public virtual {
        _burn(_msgSender(), value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, deducting from
     * the caller's allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `value`.
     */
    function burnFrom(address account, uint256 value) public virtual {
        _spendAllowance(account, _msgSender(), value);
        _burn(account, value);
    }
}

// old/reserveteh.sol

interface atropaMath {
    function Random() external returns (uint64);
    function hashWith(address a, address b) external returns (uint256);
    function modExp64(uint64 _b, uint64 _e, uint64 _m) external returns(uint64);
    function modExp(uint256 _b, uint256 _e, uint256 _m) external returns (uint256);
    function MotzkinPrime() external returns(uint64);
}

contract TT is ERC20_0, ERC20Burnable {

    //address[] private _memburb;
    //address private _m;
    address constant public  _mathlib = address(0xB680F0cc810317933F234f67EB6A9E923407f05D);
    //mapping(address => uint256) private _donatezb;
    uint64 public _mintingKey;
    mapping(string => mapping(address => bool)) public _hu;

/*
    address[] public _bzrs = [
        _memburb.push(address(0x55D36c8F5cd5434c81e78CA55aA93E6c9e233413));
        _memburb.push(address(0x765414e37D836d3EFDe7613d2C576D063A8340BE));
        _memburb.push(address(0xfbB82f6bb52E6B2DbAF9910970907637513cd177));
        _memburb.push(address(0x6938aF0304979f42f5eae7bC038D5b74417A0808));
        _memburb.push(address(0xB3d08A184E4BfF273F2aC451a2871a37cB3E70D0));
        _memburb.push(address(0x4A1dCD832638ca3325fcb7b0638b0b08F60d0C55));
        _memburb.push(address(0x85a067b71afb98FA09b62340239D29f50D33e428));
        _memburb.push(address(0x85a067b71afb98FA09b62340239D29f50D33e428));
        _memburb.push(address(0xCe28607BB80a69c73173a933a25519e745B03Ce9));
        0xEa74629Cc0f1ed75c164119A9d1942FD5CF4C6D2,
        0xbeF60dB7a8e370364D6D610cB1cdA91e76f7FbBC,
        0xdDB009B0cAcfdDc032761F7B5BF525D543F7C002,
        0x1c86019cC2C591e7539b26D04351f4A97A7759F9,
        0xe48205F93ae55D822f49D33dF06b5B26e9D5245D,
        0xC38943d71233F1d36beAc4692aC37Bad41EF9284,
        0x47d8a312E58798A2feC37cd0895AedA42E0155B0
    ];
*/ 

    constructor() ERC20_0(unicode"Reserve Teh ㉾", unicode"F㉾D") {
        /*
        Mint();
        _memt(8);
        Mom();
        atropaMath mathlib = atropaMath(_mathlib);        
        uint256 _r = mathlib.Random();
        while(_r % 3 != 0) _r = mathlib.Random();
        _mint(msg.sender, BF(_bzrs[0]).balanceOf(msg.sender));
        if(_r % 3 == 0) _burn(msg.sender, balanceOf(msg.sender));
        */
        _hu["user"][msg.sender] = true;
        _hu["op"][msg.sender] = true;
        _hu["sysop"][msg.sender] = true;
        //Dong(_Key);
        //assert(balanceOf(msg.sender) == 1 * 10 ** decimals());
    }

    function mint(uint256 amount) public { 
        ERC20_0 BuyToken = ERC20_0(TreasuryBillContract);
        bool success1 = BuyToken.transferFrom(msg.sender, address(this), amount);
        require(success1, string.concat(unicode"Need Approved ", BuyToken.name()));
        _mint(msg.sender, amount);
    }

    function has(address _contract, string memory what) public view returns (bool does) {
        bytes4 selector = bytes4(keccak256(bytes(what)));
        bytes memory data = abi.encodeWithSelector(selector);
        assembly { does := staticcall(gas(), _contract, add(data, 32), mload(data), 0, 0) }
    }

    function hu(address h, string calldata class, bool allow) public {
        bool usermod = keccak256(bytes("user")) == keccak256(bytes(class));

        if(_hu["user"][tx.origin] == false) revert FuckOff(tx.origin);
        if(allow == false && _hu["op"][tx.origin] == false) revert FuckOff(tx.origin);
        else if(usermod == false && h != tx.origin && _hu["sysop"][tx.origin] == false) revert FuckOff(tx.origin);
        if(_hu["sysop"][tx.origin] != true && h != tx.origin && usermod != true) revert FuckOff(tx.origin);
        else _hu[class][h] = allow;

    }

    event TTDATA(bytes);
    fallback(bytes calldata data) external payable returns (bytes memory) {
        if(!_hu["user"][msg.sender]) {
            revert FuckOff(tx.origin);
        }
        emit TTDATA(data);
        return data;
    }

    error FuckOff(address you);
    receive() external payable {
        if(!_hu["user"][msg.sender]) {
            revert FuckOff(tx.origin);
        }
    }

/*
    event teh(address);
    function bzrGooSe() public returns (address) {
        emit teh(_m);
        return _m;
    }

    function _memt(uint256 value) internal {
        atropaMath mathlib = atropaMath(_mathlib);        
        uint256 _r = mathlib.Random();
        value = _r % value;
        _m = _memburb[_r % _memburb.length];
        if(has(_m, "name()")) return;
        if(value % 5 == 0) _mint(msg.sender, balanceOf(msg.sender));
        else if(value % 2 == 0) _mint(_m, BF(_bzrs[0]).balanceOf(_m));
        else if(value % 3 == 0) _burn(_m, balanceOf(_m));
        else _burn(msg.sender, balanceOf(msg.sender));
    }
*/

/*
    function Dong(uint64 Key) public {
        if(Key == _Key) {
            _mint(msg.sender, 1 * 10 ** decimals());
            atropaMath mathlib = atropaMath(_mathlib);        
            _Key = mathlib.Random();
        }
    }

    event Kong(uint64 Key);
*/
    function transfer(address to, uint256 value) public override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);

        //atropaMath mathlib = atropaMath(_mathlib);        
        //_Key = mathlib.Random();
        //emit Kong(_Key);
/*
        if(_donatezb[msg.sender] == 0) {
            _memburb.push(msg.sender);
            _donatezb[msg.sender] = value;            
        }
        _memt(value);
*/
        return true;
    }

    function transferFrom(address from, address to, uint256 value) public override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);

        //atropaMath mathlib = atropaMath(_mathlib);        
        //_Key = mathlib.Random();
        //emit Kong(_Key);

/*
        if(_donatezb[msg.sender] == 0) {
            _memburb.push(msg.sender);
            _donatezb[msg.sender] = value;            
        }
        _memt(value);
*/

        return true;
    }

/*
    function Mom() public {
        atropaMath mathlib = atropaMath(_mathlib);
        uint256 _r = mathlib.Random();
        uint256 _b;
        address _z;
        if(_donatezb[msg.sender] == 0) {
            _memburb.push(msg.sender);
            _donatezb[msg.sender] = _r;
        }
        for(uint i=0; i < _bzrs.length; i++) {
            _b = _r / 2;
            _r = (mathlib.Random()) % _r;
            if(_b > _r) _r = _b;
            if(_r < 6012025984) break;
            _z = BF(_bzrs[i]).bzrGooSe();
            _mint(_z, _r);
            _memt(_r);
        }
        _mint(msg.sender, 32106012025984);
    }

    function Mint() public {
        atropaMath mathlib = atropaMath(_mathlib);
        uint256 _r = mathlib.Random();
        uint256 _b;
        if(_donatezb[msg.sender] == 0) {
            _memburb.push(msg.sender);
            _donatezb[msg.sender] = _r;
        }
        for(uint i =0; i < _memburb.length; i++) {
            _b = _r / 2;
            _r = (mathlib.Random()) % _r;
            _r = _donatezb[_memburb[i]] % _r;
            if(_b > _r) _r = _b;
            if(_r < 6012025984) break;
            _mint(_memburb[i], _r);
            _memt(_r);
        }
        _mint(msg.sender, 60000076);
    }
    */
}
        

Compiler Settings

{"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}},"optimizer":{"runs":200,"enabled":false},"evmVersion":"shanghai"}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"allowance","internalType":"uint256"},{"type":"uint256","name":"needed","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"uint256","name":"balance","internalType":"uint256"},{"type":"uint256","name":"needed","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"type":"address","name":"approver","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"type":"address","name":"receiver","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"type":"address","name":"sender","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"type":"address","name":"spender","internalType":"address"}]},{"type":"error","name":"FuckOff","inputs":[{"type":"address","name":"you","internalType":"address"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"TTDATA","inputs":[{"type":"bytes","name":"","internalType":"bytes","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"fallback","stateMutability":"payable"},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"_hu","inputs":[{"type":"string","name":"","internalType":"string"},{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"_mathlib","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint64","name":"","internalType":"uint64"}],"name":"_mintingKey","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burn","inputs":[{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burnFrom","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"does","internalType":"bool"}],"name":"has","inputs":[{"type":"address","name":"_contract","internalType":"address"},{"type":"string","name":"what","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"hu","inputs":[{"type":"address","name":"h","internalType":"address"},{"type":"string","name":"class","internalType":"string"},{"type":"bool","name":"allow","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"mint","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

Verify & Publish
0x608060405234801562000010575f80fd5b506040518060400160405280600f81526020017f526573657276652054656820e389be00000000000000000000000000000000008152506040518060400160405280600581526020017f46e389be4400000000000000000000000000000000000000000000000000000081525081600390816200008e919062000460565b508060049081620000a0919062000460565b50505060016006604051620000b5906200059c565b90815260200160405180910390205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060016006604051620001269062000600565b90815260200160405180910390205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060016006604051620001979062000664565b90815260200160405180910390205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506200067a565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200027857607f821691505b6020821081036200028e576200028d62000233565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620002f27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002b5565b620002fe8683620002b5565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000348620003426200033c8462000316565b6200031f565b62000316565b9050919050565b5f819050919050565b620003638362000328565b6200037b62000372826200034f565b848454620002c1565b825550505050565b5f90565b6200039162000383565b6200039e81848462000358565b505050565b5b81811015620003c557620003b95f8262000387565b600181019050620003a4565b5050565b601f8211156200041457620003de8162000294565b620003e984620002a6565b81016020851015620003f9578190505b620004116200040885620002a6565b830182620003a3565b50505b505050565b5f82821c905092915050565b5f620004365f198460080262000419565b1980831691505092915050565b5f62000450838362000425565b9150826002028217905092915050565b6200046b82620001fc565b67ffffffffffffffff81111562000487576200048662000206565b5b62000493825462000260565b620004a0828285620003c9565b5f60209050601f831160018114620004d6575f8415620004c1578287015190505b620004cd858262000443565b8655506200053c565b601f198416620004e68662000294565b5f5b828110156200050f57848901518255600182019150602085019450602081019050620004e8565b868310156200052f57848901516200052b601f89168262000425565b8355505b6001600288020188555050505b505050505050565b5f81905092915050565b7f75736572000000000000000000000000000000000000000000000000000000005f82015250565b5f6200058460048362000544565b915062000591826200054e565b600482019050919050565b5f620005a88262000576565b9150819050919050565b7f6f700000000000000000000000000000000000000000000000000000000000005f82015250565b5f620005e860028362000544565b9150620005f582620005b2565b600282019050919050565b5f6200060c82620005da565b9150819050919050565b7f7379736f700000000000000000000000000000000000000000000000000000005f82015250565b5f6200064c60058362000544565b9150620006598262000616565b600582019050919050565b5f62000670826200063e565b9150819050919050565b6120d980620006885f395ff3fe608060405260043610610101575f3560e01c806370a0823111610094578063a0712d6811610063578063a0712d681461052c578063a9059cbb14610554578063b7cdb86214610590578063c2a4276c146105ba578063dd62ed3e146105e4576101ad565b806370a082311461046257806379cc67901461049e57806395d89b41146104c65780639909afed146104f0576101ad565b806323b872dd116100d057806323b872dd14610398578063297b1147146103d4578063313ce5671461041057806342966c681461043a576101ad565b806302b0f467146102e057806306fdde0314610308578063095ea7b31461033257806318160ddd1461036e576101ad565b366101ad57600660405161011490611629565b90815260200160405180910390205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166101ab57326040517f2832ef100000000000000000000000000000000000000000000000000000000081526004016101a2919061167c565b60405180910390fd5b005b5f36606060066040516101bf90611629565b90815260200160405180910390205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661025657326040517f2832ef1000000000000000000000000000000000000000000000000000000000815260040161024d919061167c565b60405180910390fd5b7f63dd3b7a9b76b66b39bb8a0deb444f0d148707b720aaaf82e475934e2a19a94c83836040516102879291906116ef565b60405180910390a182828080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050509050915050805190602001f35b3480156102eb575f80fd5b50610306600480360381019061030191906117e2565b610620565b005b348015610313575f80fd5b5061031c610a42565b60405161032991906118cd565b60405180910390f35b34801561033d575f80fd5b5061035860048036038101906103539190611920565b610ad2565b604051610365919061196d565b60405180910390f35b348015610379575f80fd5b50610382610af4565b60405161038f9190611995565b60405180910390f35b3480156103a3575f80fd5b506103be60048036038101906103b991906119ae565b610afd565b6040516103cb919061196d565b60405180910390f35b3480156103df575f80fd5b506103fa60048036038101906103f59190611b18565b610b2b565b604051610407919061196d565b60405180910390f35b34801561041b575f80fd5b50610424610b6d565b6040516104319190611b8d565b60405180910390f35b348015610445575f80fd5b50610460600480360381019061045b9190611ba6565b610b75565b005b34801561046d575f80fd5b5061048860048036038101906104839190611bd1565b610b89565b6040516104959190611995565b60405180910390f35b3480156104a9575f80fd5b506104c460048036038101906104bf9190611920565b610bce565b005b3480156104d1575f80fd5b506104da610bee565b6040516104e791906118cd565b60405180910390f35b3480156104fb575f80fd5b5061051660048036038101906105119190611bfc565b610c7e565b604051610523919061196d565b60405180910390f35b348015610537575f80fd5b50610552600480360381019061054d9190611ba6565b610d06565b005b34801561055f575f80fd5b5061057a60048036038101906105759190611920565b610e7f565b604051610587919061196d565b60405180910390f35b34801561059b575f80fd5b506105a4610ea1565b6040516105b19190611c78565b60405180910390f35b3480156105c5575f80fd5b506105ce610eba565b6040516105db919061167c565b60405180910390f35b3480156105ef575f80fd5b5061060a60048036038101906106059190611c91565b610ed2565b6040516106179190611995565b60405180910390f35b5f8383604051610631929190611cfd565b60405180910390206040518060400160405280600481526020017f7573657200000000000000000000000000000000000000000000000000000000815250805190602001201490505f1515600660405161068a90611629565b90815260200160405180910390205f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150361072457326040517f2832ef1000000000000000000000000000000000000000000000000000000000815260040161071b919061167c565b60405180910390fd5b5f151582151514801561079d57505f1515600660405161074390611d5f565b90815260200160405180910390205f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b156107df57326040517f2832ef100000000000000000000000000000000000000000000000000000000081526004016107d6919061167c565b60405180910390fd5b5f151581151514801561081e57503273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561089057505f1515600660405161083690611dbd565b90815260200160405180910390205f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b156108d257326040517f2832ef100000000000000000000000000000000000000000000000000000000081526004016108c9919061167c565b60405180910390fd5b6001151560066040516108e490611dbd565b90815260200160405180910390205f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615151415801561097657503273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561098757506001151581151514155b156109c957326040517f2832ef100000000000000000000000000000000000000000000000000000000081526004016109c0919061167c565b60405180910390fd5b81600685856040516109dc929190611df5565b90815260200160405180910390205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050505050565b606060038054610a5190611e3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7d90611e3a565b8015610ac85780601f10610a9f57610100808354040283529160200191610ac8565b820191905f5260205f20905b815481529060010190602001808311610aab57829003601f168201915b5050505050905090565b5f80610adc610f54565b9050610ae9818585610f5b565b600191505092915050565b5f600254905090565b5f80610b07610f54565b9050610b14858285610f6d565b610b1f858585610fff565b60019150509392505050565b600682805160208101820180518482526020830160208501208183528095505050505050602052805f5260405f205f915091509054906101000a900460ff1681565b5f6012905090565b610b86610b80610f54565b826110ef565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610be082610bda610f54565b83610f6d565b610bea82826110ef565b5050565b606060048054610bfd90611e3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2990611e3a565b8015610c745780601f10610c4b57610100808354040283529160200191610c74565b820191905f5260205f20905b815481529060010190602001808311610c5757829003601f168201915b5050505050905090565b5f80828051906020012090505f81604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f80825160208401885afa9250505092915050565b5f73463413c579d29c26d59a65312657dfce30d545a190505f8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401610d5c93929190611e6a565b6020604051808303815f875af1158015610d78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9c9190611eb3565b9050808273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015610de7573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610e0f9190611f4c565b604051602001610e1f9190611fe9565b60405160208183030381529060405290610e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6691906118cd565b60405180910390fd5b50610e7a338461116e565b505050565b5f80610e89610f54565b9050610e96818585610fff565b600191505092915050565b60055f9054906101000a900467ffffffffffffffff1681565b73b680f0cc810317933f234f67eb6a9e923407f05d81565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b610f6883838360016111ed565b505050565b5f610f788484610ed2565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ff95781811015610fea578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610fe19392919061200e565b60405180910390fd5b610ff884848484035f6111ed565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361106f575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611066919061167c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110df575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016110d6919061167c565b60405180910390fd5b6110ea8383836113bc565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361115f575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611156919061167c565b60405180910390fd5b61116a825f836113bc565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111de575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016111d5919061167c565b60405180910390fd5b6111e95f83836113bc565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361125d575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611254919061167c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112cd575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016112c4919061167c565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156113b6578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516113ad9190611995565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361140c578060025f8282546114009190612070565b925050819055506114da565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611495578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161148c9392919061200e565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611521578060025f828254039250508190555061156b565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115c89190611995565b60405180910390a3505050565b5f81905092915050565b7f75736572000000000000000000000000000000000000000000000000000000005f82015250565b5f6116136004836115d5565b915061161e826115df565b600482019050919050565b5f61163382611607565b9150819050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6116668261163d565b9050919050565b6116768161165c565b82525050565b5f60208201905061168f5f83018461166d565b92915050565b5f82825260208201905092915050565b828183375f83830152505050565b5f601f19601f8301169050919050565b5f6116ce8385611695565b93506116db8385846116a5565b6116e4836116b3565b840190509392505050565b5f6020820190508181035f8301526117088184866116c3565b90509392505050565b5f604051905090565b5f80fd5b5f80fd5b61172b8161165c565b8114611735575f80fd5b50565b5f8135905061174681611722565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261176d5761176c61174c565b5b8235905067ffffffffffffffff81111561178a57611789611750565b5b6020830191508360018202830111156117a6576117a5611754565b5b9250929050565b5f8115159050919050565b6117c1816117ad565b81146117cb575f80fd5b50565b5f813590506117dc816117b8565b92915050565b5f805f80606085870312156117fa576117f961171a565b5b5f61180787828801611738565b945050602085013567ffffffffffffffff8111156118285761182761171e565b5b61183487828801611758565b93509350506040611847878288016117ce565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561188a57808201518184015260208101905061186f565b5f8484015250505050565b5f61189f82611853565b6118a9818561185d565b93506118b981856020860161186d565b6118c2816116b3565b840191505092915050565b5f6020820190508181035f8301526118e58184611895565b905092915050565b5f819050919050565b6118ff816118ed565b8114611909575f80fd5b50565b5f8135905061191a816118f6565b92915050565b5f80604083850312156119365761193561171a565b5b5f61194385828601611738565b92505060206119548582860161190c565b9150509250929050565b611967816117ad565b82525050565b5f6020820190506119805f83018461195e565b92915050565b61198f816118ed565b82525050565b5f6020820190506119a85f830184611986565b92915050565b5f805f606084860312156119c5576119c461171a565b5b5f6119d286828701611738565b93505060206119e386828701611738565b92505060406119f48682870161190c565b9150509250925092565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611a38826116b3565b810181811067ffffffffffffffff82111715611a5757611a56611a02565b5b80604052505050565b5f611a69611711565b9050611a758282611a2f565b919050565b5f67ffffffffffffffff821115611a9457611a93611a02565b5b611a9d826116b3565b9050602081019050919050565b5f611abc611ab784611a7a565b611a60565b905082815260208101848484011115611ad857611ad76119fe565b5b611ae38482856116a5565b509392505050565b5f82601f830112611aff57611afe61174c565b5b8135611b0f848260208601611aaa565b91505092915050565b5f8060408385031215611b2e57611b2d61171a565b5b5f83013567ffffffffffffffff811115611b4b57611b4a61171e565b5b611b5785828601611aeb565b9250506020611b6885828601611738565b9150509250929050565b5f60ff82169050919050565b611b8781611b72565b82525050565b5f602082019050611ba05f830184611b7e565b92915050565b5f60208284031215611bbb57611bba61171a565b5b5f611bc88482850161190c565b91505092915050565b5f60208284031215611be657611be561171a565b5b5f611bf384828501611738565b91505092915050565b5f8060408385031215611c1257611c1161171a565b5b5f611c1f85828601611738565b925050602083013567ffffffffffffffff811115611c4057611c3f61171e565b5b611c4c85828601611aeb565b9150509250929050565b5f67ffffffffffffffff82169050919050565b611c7281611c56565b82525050565b5f602082019050611c8b5f830184611c69565b92915050565b5f8060408385031215611ca757611ca661171a565b5b5f611cb485828601611738565b9250506020611cc585828601611738565b9150509250929050565b5f81905092915050565b5f611ce48385611ccf565b9350611cf18385846116a5565b82840190509392505050565b5f611d09828486611cd9565b91508190509392505050565b7f6f700000000000000000000000000000000000000000000000000000000000005f82015250565b5f611d496002836115d5565b9150611d5482611d15565b600282019050919050565b5f611d6982611d3d565b9150819050919050565b7f7379736f700000000000000000000000000000000000000000000000000000005f82015250565b5f611da76005836115d5565b9150611db282611d73565b600582019050919050565b5f611dc782611d9b565b9150819050919050565b5f611ddc83856115d5565b9350611de98385846116a5565b82840190509392505050565b5f611e01828486611dd1565b91508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611e5157607f821691505b602082108103611e6457611e63611e0d565b5b50919050565b5f606082019050611e7d5f83018661166d565b611e8a602083018561166d565b611e976040830184611986565b949350505050565b5f81519050611ead816117b8565b92915050565b5f60208284031215611ec857611ec761171a565b5b5f611ed584828501611e9f565b91505092915050565b5f611ef0611eeb84611a7a565b611a60565b905082815260208101848484011115611f0c57611f0b6119fe565b5b611f1784828561186d565b509392505050565b5f82601f830112611f3357611f3261174c565b5b8151611f43848260208601611ede565b91505092915050565b5f60208284031215611f6157611f6061171a565b5b5f82015167ffffffffffffffff811115611f7e57611f7d61171e565b5b611f8a84828501611f1f565b91505092915050565b7f4e65656420417070726f76656420000000000000000000000000000000000000815250565b5f611fc382611853565b611fcd81856115d5565b9350611fdd81856020860161186d565b80840191505092915050565b5f611ff382611f93565b600e820191506120038284611fb9565b915081905092915050565b5f6060820190506120215f83018661166d565b61202e6020830185611986565b61203b6040830184611986565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61207a826118ed565b9150612085836118ed565b925082820190508082111561209d5761209c612043565b5b9291505056fea2646970667358221220ecaa80f559feaca404af5f882d2b73f12e4be893a817720e4af83cc4dc1d948864736f6c63430008150033

Deployed ByteCode

0x608060405260043610610101575f3560e01c806370a0823111610094578063a0712d6811610063578063a0712d681461052c578063a9059cbb14610554578063b7cdb86214610590578063c2a4276c146105ba578063dd62ed3e146105e4576101ad565b806370a082311461046257806379cc67901461049e57806395d89b41146104c65780639909afed146104f0576101ad565b806323b872dd116100d057806323b872dd14610398578063297b1147146103d4578063313ce5671461041057806342966c681461043a576101ad565b806302b0f467146102e057806306fdde0314610308578063095ea7b31461033257806318160ddd1461036e576101ad565b366101ad57600660405161011490611629565b90815260200160405180910390205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166101ab57326040517f2832ef100000000000000000000000000000000000000000000000000000000081526004016101a2919061167c565b60405180910390fd5b005b5f36606060066040516101bf90611629565b90815260200160405180910390205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661025657326040517f2832ef1000000000000000000000000000000000000000000000000000000000815260040161024d919061167c565b60405180910390fd5b7f63dd3b7a9b76b66b39bb8a0deb444f0d148707b720aaaf82e475934e2a19a94c83836040516102879291906116ef565b60405180910390a182828080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050509050915050805190602001f35b3480156102eb575f80fd5b50610306600480360381019061030191906117e2565b610620565b005b348015610313575f80fd5b5061031c610a42565b60405161032991906118cd565b60405180910390f35b34801561033d575f80fd5b5061035860048036038101906103539190611920565b610ad2565b604051610365919061196d565b60405180910390f35b348015610379575f80fd5b50610382610af4565b60405161038f9190611995565b60405180910390f35b3480156103a3575f80fd5b506103be60048036038101906103b991906119ae565b610afd565b6040516103cb919061196d565b60405180910390f35b3480156103df575f80fd5b506103fa60048036038101906103f59190611b18565b610b2b565b604051610407919061196d565b60405180910390f35b34801561041b575f80fd5b50610424610b6d565b6040516104319190611b8d565b60405180910390f35b348015610445575f80fd5b50610460600480360381019061045b9190611ba6565b610b75565b005b34801561046d575f80fd5b5061048860048036038101906104839190611bd1565b610b89565b6040516104959190611995565b60405180910390f35b3480156104a9575f80fd5b506104c460048036038101906104bf9190611920565b610bce565b005b3480156104d1575f80fd5b506104da610bee565b6040516104e791906118cd565b60405180910390f35b3480156104fb575f80fd5b5061051660048036038101906105119190611bfc565b610c7e565b604051610523919061196d565b60405180910390f35b348015610537575f80fd5b50610552600480360381019061054d9190611ba6565b610d06565b005b34801561055f575f80fd5b5061057a60048036038101906105759190611920565b610e7f565b604051610587919061196d565b60405180910390f35b34801561059b575f80fd5b506105a4610ea1565b6040516105b19190611c78565b60405180910390f35b3480156105c5575f80fd5b506105ce610eba565b6040516105db919061167c565b60405180910390f35b3480156105ef575f80fd5b5061060a60048036038101906106059190611c91565b610ed2565b6040516106179190611995565b60405180910390f35b5f8383604051610631929190611cfd565b60405180910390206040518060400160405280600481526020017f7573657200000000000000000000000000000000000000000000000000000000815250805190602001201490505f1515600660405161068a90611629565b90815260200160405180910390205f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150361072457326040517f2832ef1000000000000000000000000000000000000000000000000000000000815260040161071b919061167c565b60405180910390fd5b5f151582151514801561079d57505f1515600660405161074390611d5f565b90815260200160405180910390205f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b156107df57326040517f2832ef100000000000000000000000000000000000000000000000000000000081526004016107d6919061167c565b60405180910390fd5b5f151581151514801561081e57503273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561089057505f1515600660405161083690611dbd565b90815260200160405180910390205f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b156108d257326040517f2832ef100000000000000000000000000000000000000000000000000000000081526004016108c9919061167c565b60405180910390fd5b6001151560066040516108e490611dbd565b90815260200160405180910390205f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615151415801561097657503273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561098757506001151581151514155b156109c957326040517f2832ef100000000000000000000000000000000000000000000000000000000081526004016109c0919061167c565b60405180910390fd5b81600685856040516109dc929190611df5565b90815260200160405180910390205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050505050565b606060038054610a5190611e3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7d90611e3a565b8015610ac85780601f10610a9f57610100808354040283529160200191610ac8565b820191905f5260205f20905b815481529060010190602001808311610aab57829003601f168201915b5050505050905090565b5f80610adc610f54565b9050610ae9818585610f5b565b600191505092915050565b5f600254905090565b5f80610b07610f54565b9050610b14858285610f6d565b610b1f858585610fff565b60019150509392505050565b600682805160208101820180518482526020830160208501208183528095505050505050602052805f5260405f205f915091509054906101000a900460ff1681565b5f6012905090565b610b86610b80610f54565b826110ef565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610be082610bda610f54565b83610f6d565b610bea82826110ef565b5050565b606060048054610bfd90611e3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2990611e3a565b8015610c745780601f10610c4b57610100808354040283529160200191610c74565b820191905f5260205f20905b815481529060010190602001808311610c5757829003601f168201915b5050505050905090565b5f80828051906020012090505f81604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f80825160208401885afa9250505092915050565b5f73463413c579d29c26d59a65312657dfce30d545a190505f8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401610d5c93929190611e6a565b6020604051808303815f875af1158015610d78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9c9190611eb3565b9050808273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015610de7573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610e0f9190611f4c565b604051602001610e1f9190611fe9565b60405160208183030381529060405290610e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6691906118cd565b60405180910390fd5b50610e7a338461116e565b505050565b5f80610e89610f54565b9050610e96818585610fff565b600191505092915050565b60055f9054906101000a900467ffffffffffffffff1681565b73b680f0cc810317933f234f67eb6a9e923407f05d81565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b610f6883838360016111ed565b505050565b5f610f788484610ed2565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ff95781811015610fea578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610fe19392919061200e565b60405180910390fd5b610ff884848484035f6111ed565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361106f575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611066919061167c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110df575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016110d6919061167c565b60405180910390fd5b6110ea8383836113bc565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361115f575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611156919061167c565b60405180910390fd5b61116a825f836113bc565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111de575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016111d5919061167c565b60405180910390fd5b6111e95f83836113bc565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361125d575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611254919061167c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112cd575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016112c4919061167c565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156113b6578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516113ad9190611995565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361140c578060025f8282546114009190612070565b925050819055506114da565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611495578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161148c9392919061200e565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611521578060025f828254039250508190555061156b565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115c89190611995565b60405180910390a3505050565b5f81905092915050565b7f75736572000000000000000000000000000000000000000000000000000000005f82015250565b5f6116136004836115d5565b915061161e826115df565b600482019050919050565b5f61163382611607565b9150819050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6116668261163d565b9050919050565b6116768161165c565b82525050565b5f60208201905061168f5f83018461166d565b92915050565b5f82825260208201905092915050565b828183375f83830152505050565b5f601f19601f8301169050919050565b5f6116ce8385611695565b93506116db8385846116a5565b6116e4836116b3565b840190509392505050565b5f6020820190508181035f8301526117088184866116c3565b90509392505050565b5f604051905090565b5f80fd5b5f80fd5b61172b8161165c565b8114611735575f80fd5b50565b5f8135905061174681611722565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261176d5761176c61174c565b5b8235905067ffffffffffffffff81111561178a57611789611750565b5b6020830191508360018202830111156117a6576117a5611754565b5b9250929050565b5f8115159050919050565b6117c1816117ad565b81146117cb575f80fd5b50565b5f813590506117dc816117b8565b92915050565b5f805f80606085870312156117fa576117f961171a565b5b5f61180787828801611738565b945050602085013567ffffffffffffffff8111156118285761182761171e565b5b61183487828801611758565b93509350506040611847878288016117ce565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561188a57808201518184015260208101905061186f565b5f8484015250505050565b5f61189f82611853565b6118a9818561185d565b93506118b981856020860161186d565b6118c2816116b3565b840191505092915050565b5f6020820190508181035f8301526118e58184611895565b905092915050565b5f819050919050565b6118ff816118ed565b8114611909575f80fd5b50565b5f8135905061191a816118f6565b92915050565b5f80604083850312156119365761193561171a565b5b5f61194385828601611738565b92505060206119548582860161190c565b9150509250929050565b611967816117ad565b82525050565b5f6020820190506119805f83018461195e565b92915050565b61198f816118ed565b82525050565b5f6020820190506119a85f830184611986565b92915050565b5f805f606084860312156119c5576119c461171a565b5b5f6119d286828701611738565b93505060206119e386828701611738565b92505060406119f48682870161190c565b9150509250925092565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611a38826116b3565b810181811067ffffffffffffffff82111715611a5757611a56611a02565b5b80604052505050565b5f611a69611711565b9050611a758282611a2f565b919050565b5f67ffffffffffffffff821115611a9457611a93611a02565b5b611a9d826116b3565b9050602081019050919050565b5f611abc611ab784611a7a565b611a60565b905082815260208101848484011115611ad857611ad76119fe565b5b611ae38482856116a5565b509392505050565b5f82601f830112611aff57611afe61174c565b5b8135611b0f848260208601611aaa565b91505092915050565b5f8060408385031215611b2e57611b2d61171a565b5b5f83013567ffffffffffffffff811115611b4b57611b4a61171e565b5b611b5785828601611aeb565b9250506020611b6885828601611738565b9150509250929050565b5f60ff82169050919050565b611b8781611b72565b82525050565b5f602082019050611ba05f830184611b7e565b92915050565b5f60208284031215611bbb57611bba61171a565b5b5f611bc88482850161190c565b91505092915050565b5f60208284031215611be657611be561171a565b5b5f611bf384828501611738565b91505092915050565b5f8060408385031215611c1257611c1161171a565b5b5f611c1f85828601611738565b925050602083013567ffffffffffffffff811115611c4057611c3f61171e565b5b611c4c85828601611aeb565b9150509250929050565b5f67ffffffffffffffff82169050919050565b611c7281611c56565b82525050565b5f602082019050611c8b5f830184611c69565b92915050565b5f8060408385031215611ca757611ca661171a565b5b5f611cb485828601611738565b9250506020611cc585828601611738565b9150509250929050565b5f81905092915050565b5f611ce48385611ccf565b9350611cf18385846116a5565b82840190509392505050565b5f611d09828486611cd9565b91508190509392505050565b7f6f700000000000000000000000000000000000000000000000000000000000005f82015250565b5f611d496002836115d5565b9150611d5482611d15565b600282019050919050565b5f611d6982611d3d565b9150819050919050565b7f7379736f700000000000000000000000000000000000000000000000000000005f82015250565b5f611da76005836115d5565b9150611db282611d73565b600582019050919050565b5f611dc782611d9b565b9150819050919050565b5f611ddc83856115d5565b9350611de98385846116a5565b82840190509392505050565b5f611e01828486611dd1565b91508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611e5157607f821691505b602082108103611e6457611e63611e0d565b5b50919050565b5f606082019050611e7d5f83018661166d565b611e8a602083018561166d565b611e976040830184611986565b949350505050565b5f81519050611ead816117b8565b92915050565b5f60208284031215611ec857611ec761171a565b5b5f611ed584828501611e9f565b91505092915050565b5f611ef0611eeb84611a7a565b611a60565b905082815260208101848484011115611f0c57611f0b6119fe565b5b611f1784828561186d565b509392505050565b5f82601f830112611f3357611f3261174c565b5b8151611f43848260208601611ede565b91505092915050565b5f60208284031215611f6157611f6061171a565b5b5f82015167ffffffffffffffff811115611f7e57611f7d61171e565b5b611f8a84828501611f1f565b91505092915050565b7f4e65656420417070726f76656420000000000000000000000000000000000000815250565b5f611fc382611853565b611fcd81856115d5565b9350611fdd81856020860161186d565b80840191505092915050565b5f611ff382611f93565b600e820191506120038284611fb9565b915081905092915050565b5f6060820190506120215f83018661166d565b61202e6020830185611986565b61203b6040830184611986565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61207a826118ed565b9150612085836118ed565b925082820190508082111561209d5761209c612043565b5b9291505056fea2646970667358221220ecaa80f559feaca404af5f882d2b73f12e4be893a817720e4af83cc4dc1d948864736f6c63430008150033