Contract 0x9973885595cf0c17accd7e46f96dbd937a7e627c

 
 
Txn Hash
Block
From
To
Value [Txn Fee]
0x9a16a22a175316fb1eb17a74f5d6bfe1cfc5111acae31622b6855974079a04c996063442021-07-30 16:08:301 day 2 hrs ago0x4b054f48e15f36f7c8caf8742f5949f6559f4c9f IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0xd0684d9eac05561906ef12780acce842564ecd6a414ea4df178dbd9fa411707694641072021-07-25 11:19:016 days 7 hrs ago0x9bb6d7be9dd7158097818a399f7356a77c48503e IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0x54bad8aa9f2088d40203805d33a4d79542f494a80a471ae40acca9e233c5868f93687462021-07-22 3:28:169 days 15 hrs ago0xf75b7cd82cd5732629739d1b8649c09aa552c5b3 IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0x8fad90ae1b4d9101a0c1212573252a5006b0a3699de12f020ca90b753bfbc84393644242021-07-21 23:52:109 days 18 hrs ago0x0401f1034aaf6832ec700cc5c0fdb834d17e43c7 IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0xc26e310adf168a56cca6c30d202987aa0c72afc190c1c82c145fdfe3734e1c8593437842021-07-21 6:39:3110 days 12 hrs ago0x8b086d0a3360e83865fca21fa78364c18155a3ec IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.00007286
0xa9fb475b9e9053838ef4fc8052bf7e6de1b99e757b37b1fde4cbe0bf77f5e30b93429862021-07-21 5:59:3710 days 12 hrs ago0x5ba9e8c0163d0435428498343856347a62fa0025 IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0x3eac6ad2b615383ba3ad67ea25d74079349056f41d6b04181e7a0c7f6b30bdab93066872021-07-19 23:43:4111 days 19 hrs ago0x05e2d23cc117fbe1cc0ac3996a4a02e8778f02e1 IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0xc57ee13a1b81f1b1a44ac6a4b8672fc1cef2428d77923d6d6fa0b756249cdef892253862021-07-17 3:55:1914 days 14 hrs ago0x49493b0a9a3ebc10bb92ec5d6487e4e2495e2177 IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0x595a5fd67700ff4387530ec9990fcb543a7d2629ed01b244c0e7f0c89e823c0492251512021-07-17 3:43:3414 days 15 hrs ago0x56107ba10cd7491f899214b581c572d7f379b278 IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0xcaf9c4706d06c9d7090e05a4f7f0858a20a89d67104c20db444920ed12396b6d92240272021-07-17 2:47:2214 days 15 hrs ago0x6e508ff254d7e69b296ae367c2fba8e0e41183ca IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0x4630ea15ba31e0409292a045a7421e704d07186d716800c1b5c77a28f45bef1d92189692021-07-16 22:34:2814 days 20 hrs ago0x86d2c9481b4a5fbcd1f9631cb86f60ceae2e6980 IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0x4f56ce8484756fbbf2847c74a3f00e5b9fcc26989800e55b205c22509e73fc0691827772021-07-15 16:24:1216 days 2 hrs ago0x37dc44fc1442e1c71333498f258c2f5787005d1a IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0xf02de27b2f7b1f1fcdd816684e47a7d918ab58d81693cb2670576dc01ba0e33391770492021-07-15 11:37:4816 days 7 hrs ago0x42823a72ea47c2fa78c39c0be64f2ba660205e96 IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0xedce7839684df91e3f26b122c2f62536252d7be197f1c557f50e8fbea83be1b891649212021-07-15 1:31:0016 days 17 hrs ago0xb87008977dc4106c3e45d4f063868d169b2a8459 IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0x5888c1eda397034039461e9d64a5f8dae4b52b5d0ef3c5de2b9d6bc63141126191026852021-07-12 21:38:1818 days 21 hrs ago0xe51ec6e3d65d1af64cb6637eae9184eb664bf1c8 IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0xe8c98941a826a4c38aa27239ddaed0ffe659d2739e80dca5f1ee3504eb8f7ce591002842021-07-12 19:38:1518 days 23 hrs ago0x0b4b828a696348ae54888f22d7b7baac535ee288 IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.00007286
0x9f2918f017f603cde2bb33f8b98f66e0bf8b70dbac55e16c6d44bddfb21e0eaf90998882021-07-12 19:18:2718 days 23 hrs ago0x0b4b828a696348ae54888f22d7b7baac535ee288 IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0x5ebc1f22292031e470b99b2193e45c21d39c23522681f9022f81eafb8905875190924602021-07-12 13:07:0219 days 5 hrs ago0xcdc9d3e4c77b8c70d99a45bae91d4ffbd6d506d3 IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0x8c3ae4fca4dd4e16e52444501ad3e620fa0f44f9da008e453f6daf2fbcc71a4f90802842021-07-12 2:58:1419 days 15 hrs ago0xb248551c60cd053b010daf30ec2800e1d0008c60 IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0x53f339f595f9abd8466ce397bccfb25d2225f05145ce3230811319af85915b8c90746092021-07-11 22:14:2919 days 20 hrs ago0x0c6b41fc09137aa189ab9ea0cb3d39e941329888 IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0x1ac37bc265d4cf49df14e54d98a59636a6e477f9d7a4cbb5e5bb22775b4141a090731612021-07-11 21:01:4819 days 21 hrs ago0xe313ae6c0cb38e90900e46b1277f891e2bf70de2 IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.00089054
0xcd60a5defd38747a3ee07d01ac7939e7b3d7eab7bc63181890c7014747ff396290631132021-07-11 12:39:2420 days 6 hrs ago0xa71ffaa17c1b112305118d7ca385776529fbb4ef IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0x586a921893427bec3d268bb2d91d749eac226ef04c4cd4b7d9172def4474be0789791202021-07-08 14:39:0623 days 4 hrs ago0x5c737822b4bfc16247d375bc503ec7e6aab24937 IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000126635
0xe96fe1621d98474d79de34dd12955ed515366a8ec325b5be552fb285295b9be589783062021-07-08 13:58:2423 days 4 hrs ago0x5c737822b4bfc16247d375bc503ec7e6aab24937 IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
0x9f77e07ff177c498d88beae4137c0df8a1a6c41b5331db0bc212b26b3560b03b89699502021-07-08 6:59:5323 days 11 hrs ago0x1579105cbe255b9aaf60bd0df95e0d21b79997a9 IN  0x9973885595cf0c17accd7e46f96dbd937a7e627c0 BNB0.000222635
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x7af3ddbfedca64f9ff35e7b7d50df45e5620156f23617a07d1941918ec563de996007562021-07-30 11:18:441 day 7 hrs ago 0x9973885595cf0c17accd7e46f96dbd937a7e627c PancakeSwap: Router v20.018988424956546213 BNB
0x7af3ddbfedca64f9ff35e7b7d50df45e5620156f23617a07d1941918ec563de996007562021-07-30 11:18:441 day 7 hrs ago PancakeSwap: Router v2 0x9973885595cf0c17accd7e46f96dbd937a7e627c0.018988424956546213 BNB
0x7af3ddbfedca64f9ff35e7b7d50df45e5620156f23617a07d1941918ec563de996007562021-07-30 11:18:441 day 7 hrs ago 0x9973885595cf0c17accd7e46f96dbd937a7e627c0x5cabbf2bed506783038b48f51569fe5b9283825b0.038130531200662953 BNB
0x7af3ddbfedca64f9ff35e7b7d50df45e5620156f23617a07d1941918ec563de996007562021-07-30 11:18:441 day 7 hrs ago PancakeSwap: Router v2 0x9973885595cf0c17accd7e46f96dbd937a7e627c0.038130531200662953 BNB
0x97ad28e4022ae53596f3bc28e00283810df742d6add830ff50fa20bd1b7763bc93429952021-07-21 6:00:0410 days 12 hrs ago 0x9973885595cf0c17accd7e46f96dbd937a7e627c PancakeSwap: Router v20.02085372168387058 BNB
0x97ad28e4022ae53596f3bc28e00283810df742d6add830ff50fa20bd1b7763bc93429952021-07-21 6:00:0410 days 12 hrs ago PancakeSwap: Router v2 0x9973885595cf0c17accd7e46f96dbd937a7e627c0.02085372168387058 BNB
0x97ad28e4022ae53596f3bc28e00283810df742d6add830ff50fa20bd1b7763bc93429952021-07-21 6:00:0410 days 12 hrs ago 0x9973885595cf0c17accd7e46f96dbd937a7e627c0x5cabbf2bed506783038b48f51569fe5b9283825b0.041884624562147782 BNB
0x97ad28e4022ae53596f3bc28e00283810df742d6add830ff50fa20bd1b7763bc93429952021-07-21 6:00:0410 days 12 hrs ago PancakeSwap: Router v2 0x9973885595cf0c17accd7e46f96dbd937a7e627c0.041884624562147782 BNB
0xf70a5ee71fe42bb4957a60b86fe57ee07eebae7ed0d4bcff08c31330d28aa58c92254092021-07-17 3:56:2814 days 14 hrs ago 0x9973885595cf0c17accd7e46f96dbd937a7e627c PancakeSwap: Router v20.025682707639654567 BNB
0xf70a5ee71fe42bb4957a60b86fe57ee07eebae7ed0d4bcff08c31330d28aa58c92254092021-07-17 3:56:2814 days 14 hrs ago PancakeSwap: Router v2 0x9973885595cf0c17accd7e46f96dbd937a7e627c0.025682707639654567 BNB
0xf70a5ee71fe42bb4957a60b86fe57ee07eebae7ed0d4bcff08c31330d28aa58c92254092021-07-17 3:56:2814 days 14 hrs ago 0x9973885595cf0c17accd7e46f96dbd937a7e627c0x5cabbf2bed506783038b48f51569fe5b9283825b0.051608082613640896 BNB
0xf70a5ee71fe42bb4957a60b86fe57ee07eebae7ed0d4bcff08c31330d28aa58c92254092021-07-17 3:56:2814 days 14 hrs ago PancakeSwap: Router v2 0x9973885595cf0c17accd7e46f96dbd937a7e627c0.051608082613640896 BNB
0x9983e1f21b1747ff22a2cc438992499e0f79401ca9386a67561bc5922fd23aea91552112021-07-14 17:24:3717 days 1 hr ago 0x9973885595cf0c17accd7e46f96dbd937a7e627c PancakeSwap: Router v20.031799938028530811 BNB
0x9983e1f21b1747ff22a2cc438992499e0f79401ca9386a67561bc5922fd23aea91552112021-07-14 17:24:3717 days 1 hr ago PancakeSwap: Router v2 0x9973885595cf0c17accd7e46f96dbd937a7e627c0.031799938028530811 BNB
0x9983e1f21b1747ff22a2cc438992499e0f79401ca9386a67561bc5922fd23aea91552112021-07-14 17:24:3717 days 1 hr ago 0x9973885595cf0c17accd7e46f96dbd937a7e627c0x5cabbf2bed506783038b48f51569fe5b9283825b0.063934997035996139 BNB
0x9983e1f21b1747ff22a2cc438992499e0f79401ca9386a67561bc5922fd23aea91552112021-07-14 17:24:3717 days 1 hr ago PancakeSwap: Router v2 0x9973885595cf0c17accd7e46f96dbd937a7e627c0.063934997035996139 BNB
0x777d3f42589f61a79de4b0dbb68662d695d1e27a81cf1cb9a6c1ab5807c0bda690746322021-07-11 22:15:3819 days 20 hrs ago 0x9973885595cf0c17accd7e46f96dbd937a7e627c PancakeSwap: Router v20.03129055263195522 BNB
0x777d3f42589f61a79de4b0dbb68662d695d1e27a81cf1cb9a6c1ab5807c0bda690746322021-07-11 22:15:3819 days 20 hrs ago PancakeSwap: Router v2 0x9973885595cf0c17accd7e46f96dbd937a7e627c0.03129055263195522 BNB
0x777d3f42589f61a79de4b0dbb68662d695d1e27a81cf1cb9a6c1ab5807c0bda690746322021-07-11 22:15:3819 days 20 hrs ago 0x9973885595cf0c17accd7e46f96dbd937a7e627c0x5cabbf2bed506783038b48f51569fe5b9283825b0.062907899660512641 BNB
0x777d3f42589f61a79de4b0dbb68662d695d1e27a81cf1cb9a6c1ab5807c0bda690746322021-07-11 22:15:3819 days 20 hrs ago PancakeSwap: Router v2 0x9973885595cf0c17accd7e46f96dbd937a7e627c0.062907899660512641 BNB
0xe965fb10a7e416fea90acb81b2e3efa1888c6968e16e4bd208525b5ff38d65f790746252021-07-11 22:15:1719 days 20 hrs ago 0x9973885595cf0c17accd7e46f96dbd937a7e627c PancakeSwap: Router v20.03129055263195522 BNB
0xe965fb10a7e416fea90acb81b2e3efa1888c6968e16e4bd208525b5ff38d65f790746252021-07-11 22:15:1719 days 20 hrs ago PancakeSwap: Router v2 0x9973885595cf0c17accd7e46f96dbd937a7e627c0.03129055263195522 BNB
0xe965fb10a7e416fea90acb81b2e3efa1888c6968e16e4bd208525b5ff38d65f790746252021-07-11 22:15:1719 days 20 hrs ago 0x9973885595cf0c17accd7e46f96dbd937a7e627c0x5cabbf2bed506783038b48f51569fe5b9283825b0.062907899660512641 BNB
0xe965fb10a7e416fea90acb81b2e3efa1888c6968e16e4bd208525b5ff38d65f790746252021-07-11 22:15:1719 days 20 hrs ago PancakeSwap: Router v2 0x9973885595cf0c17accd7e46f96dbd937a7e627c0.062907899660512641 BNB
0x0b63dda5448d43ee598f8de3292b916e2ee89d29724981957e2dd23897dcae7a90118922021-07-09 17:58:1622 days 47 mins ago 0x9973885595cf0c17accd7e46f96dbd937a7e627c PancakeSwap: Router v20.031350304530374791 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GEN2

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-06-11
*/

// SPDX-License-Identifier: Unlicensed

/*

    GGGGGGGGGGG  EEEEEEEEEEE  NNN     NNN  22222222222
    GGGGGGGGGGG  EEEEEEEEEEE  NNN     NNN  22222222222
    GGG          EEE          NNNN    NNN          222
    GGG  GGGGGG  EEEEEEEE     NNN NN  NNN  22222222222
    GGG  GGGGGG  EEEEEEEE     NNN NN  NNN  22222222222
    GGG     GGG  EEE          NNN  NN NNN  222
    GGG     GGG  EEE          NNN    NNNN  222
    GGGGGGGGGGG  EEEEEEEEEEE  NNN     NNN  22222222222
    GGGGGGGGGGG  EEEEEEEEEEE  NNN     NNN  22222222222
    
    Welcome to GEN2
    The Official Token for the GenTokens Community!
    

    Telegram Group: https://t.me/GenTokensShill (Tokens!)
    Telegram Group: https://t.me/GenTokens (Community Chat)
    YouTube: https://www.youtube.com/gentokens
    Reddit: https://www.reddit.com/r/GenTokens/
    Website: https://gentokens.com/
    Twitter: https://twitter.com/GenTokens
    
    What is GEN2?
    
    We have two official GEN tokens. This one (GEN2)
    and also the original GEN (0xd4294c0f64eba74089315d4b0278698f7181037e)
    
    They both provide holders with the same benefit.
    If you hold GEN OR GEN2 you will have early access 
    to all future tokens that are released via our LaunchPad.
    
    More on that later... but why GEN2?
    
    GEN (1) is renounced. I cannot micro-manage the tokenomics and it does not 
    provide any money for marketing.
    
    GEN2 will never be renounced! So I can adjust the tokenomics and micro-manage its 
    growth. It also has a marketing wallet that pays in BNB. Which will provide us 
    with plenty of money for promoting GEN and GEN2 going forward. 
    
    This puts us in a very unique position. We have 2 tokens, that give you 
    the same benefit for holding... but you get to choose, renounced or micro-managed! 
    
    So let's talk about the benefits of holding GEN or GEN2....
    
    The GenTokens Launch Pad!
    
    Have you ever watched the APE tool on poocoin? When a token pops up, if you buy
    first you could make a fortune! But... it's probably a scam, so you can't just 
    APE in, you have to do some checks first. 
    
    Checks take time.... and while you do your due diligence the price is going up! 
    Add even worse, after you've done all of your checks, the coin can still RUG!
    
    I'd guess that 95% of tokens that you see on the APE tool are scams. Maybe more.
    
    Imagine if you could just buy the token the moment it launches, knowing with 100% 
    confidence that it is safe...
    
    Well that's the GenTokens LaunchPad!
    
    We provide tokens that are guaranteed to be safe. You don't have to do any checks
    at all, you can APE in with total confidence and buy immediately after launch. 
    
    Our LaunchPad deploys tokens in 4 stages... 
    
    Stage 1
    
    Members of our 'Approved Community' buy first. Nobody else! No bots! No Strangers! No Risk! 
    How do you get to become a member of this elite community? Members are handpicked and added 
    personally by me, or a member of my very trusted team. We watch our community at GEN very 
    carefully, if we see that you are helping out, answering questions, offering support and 
    guidance to other members of the community we invite you in. 
    
    Oh, and there is one last very important check....
    
    My heart. 
    
    I trust my heart over EVERYTHING. If I get a bad feeling about you, you will not get in!
    My heart always has the final say. I am extremely intuitive and it has never let me down. 
    
    If you're a good, wholesome person, my heart will like you ;) 
    
    This inner core of members are people I trust completely. However, I still need to protect 
    non-members, so Stage 1 has a very strict holder limit. Nobody can buy more than 
    2% of a token supply, avoiding the risk of a whale wallet from within the community.
    
    As well as being hand picked for the 'Approved Community' all members must hold GEN or GEN2 
    in order to be able to buy.
    
    Stage 2 
    
    The next people that get to buy are the main GEN community members. These are the people in our 
    Telegram group, When it is time for them to buy I will announce the new token to the group and 
    anybody that wants to buy needs to send me their wallet address, so I can add it to the approved list. 
    
    Only wallets that I personally approve can buy. Again... no bots can touch us. And these people must
    hold GEN or GEN2 to be able to buy. 
    
    Stage 3 
    
    At stage 3 we open up to the entire GEN community. At this stage all people holding GEN or GEN2 can buy.
    But nobody else. I am aware that a bot user can hold GEN or GEN2 and potential buy at this stage. I personally 
    scrutinise all sales very carefully. Anybody using a bot will be blacklisted, and their tokens locked.
    
    Stage 4 
    
    We open up to the public. Anybody can buy... and we watch the transactions very carefully. If necessary, we 
    pause the contract to blacklist bots! 
    
    We take these measures to ensure a safe launch. We want to protect our community from the bots, and from 
    each other! So no whale wallets, and no bots! By restricting our launches to good people that we trust we
    give our tokens the very best start.
    
    Our launches are discreet for a reason. We are not trying to create hype to get a 1000x token seconds after launch.
    This activity attracts a lot of attention from bot users! We deploy discreetly to a community we trust, and slowly 
    open up to a larger community at each stage.
    
    By the time bots can buy, they don't want to buy! They are only interested in getting in first. And that simply is
    not possible due to the way we deploy our contracts.
    
    Then we promote. 
    
    A final word on bots....
    
    If you use bots, then expect your wallet to be blacklisted. I use several ways of discreetly
    detecting bots (none of which are revealed in this contract) if I detect that you are using a bot 
    (on ANY contract, not just GEN or GEN2) I will blacklist your wallet. 
    
    This brings us on to our....
    
    TERMS OF SALE 
    
    If you use bots, you are not permitted to purchase GEN, GEN2 or any future token that launches via the
    GenTokens LaunchPad. Any purchase that you make will be considered a 100% donation to the GEN community.
    Your account will be locked and you will not be able to sell or swap your tokens. 
    
    We do not permit bots at all. Of ANY kind. If you use them, do not attempt to buy GEN or GEN2. You will 
    lose your money. 
    
    So... hopefully we only have the good, wholesome, and honest people left. 
    
    ....Hello Guys!!! :)
    
    So what is this LaunchPad thing???? 
    
    Well, you already know how the deployment works, but what about the tokens? 
    
    We use our LaunchPad to launch safe community and charity tokens that we hand over 
    to other people to promote and manage. This could be you! 
    
    Each token goes through the same strict deployment stages to ensure its safety before 
    you adopt it as your own. 
    
    We also support other teams by creating "use purpose", lottery, and giveaway tokens. 
    
    Full details of how the GenTokens LaunchPad works, and how you can have your very own 
    token launch safely using our system are provided on our website. 
    
    Now lets chat about GEN2
    
    Our tokenomics....
    
    Redistribution to Holders (Reflection)
    
    We have a redistribution fee of 3% on all transactions. 
    To get more GEN2, just buy and hold. Every transaction puts more GEN2 in your wallet 
    completely automatically 
    
    Auto-Liquidity 
    
    We have a 3% fee on all transactions that is added to the liquidity pool for GEN2
    
    Burned Liquidity 
    
    Our initial Liquidity is not locked... it is burned. We can never remove it. The auto 
    liquidity is also burned. Of course, GEN2 holders can add liquidity if they wish,
    but everything we add is burned! 
    
    Giveaways and Manual Burns 
    
    We have a 2% fee on all transactions that pays in GEN2 tokens into a very special wallet 
    We NEVER sell the tokens in this wallet! 
    
    We use them in 2 very clever ways.... 
    
    1. We use them for Giveaways, that we run via the Gleam.io platform
    live on YouTube, this helps to promote GEN and GEN2
    
    2. If the price of GEN2 drops, due to people selling or general market conditions, we 
    manually burn some tokens from this wallet to recover the $ value on GEN2
    
    When this wallet is holding more tokens than we need, we lower the fee to 0% and we 
    move the 2% to other places where it can be used most effectively. Either to the 
    Auto-Liquidity, the marketing wallet or to boost the redistribution to holders. 
    
    Finally, we have the marketing wallet. This takes a 3% fee on all transactions, it 
    is paid directly to the wallet in BNB and is used to cover all of our expenses and 
    pay for marketing of GEN and GEN2
    
    The initial Burn (What some people refer to as the Black Hole!) 
    
    The total supply of GEN2 at launch is 1000000000 * 10**6 * 10**9 
    We will burn 10% of the initial supply. This means that the burn wallet is counted as 
    a holder of GEN2, and is included in the redistribution reward. So every transaction
    some tokens are automatically burned. Burning tokens lowers the total supply,
    which increase the value of all remaining tokens... which you hold! 
    
    Transaction Limits 
    
    We have max transaction limits and max token holding limits.
    
    At launch, the max transaction limit is 1% of the total supply, and the 
    max holding limit is 2% of the total supply. These will be micro-managed as needed
    as GEN2 holders grow.
    
    All of our decisions have been made to make GEN, GEN2 and the GenTokens LaunchPad
    as safe, and profitable as possible for you.
    
    We are overwhelmed by the amazing support and goodness that we see within our 
    community. You are all really great people, and it is my wish that what we are
    doing will make you all very very rich! 
    
    Or at the very least.... recover any money you have ever lost in this crazy 
    world of crypto and ensure that you never lose any again! 
    
    Thank you for being a part of our community and making GenTokens Great! 
    
    GEN
    10th June 2021... in the middle of the night with some tea and biscuits.


 */

pragma solidity ^0.8.3;

interface IERC20 {
    
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }


    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }


    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }


    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}




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


library Address {
    
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }


    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                 assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}



abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        _owner = 0x627C95B6fD9026E00Ab2c373FB08CC47E02629a0;
        emit OwnershipTransferred(address(0), _owner);
    }
    
    function owner() public view virtual returns (address) {
        return _owner;
    }
    
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }


    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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 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 Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    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 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 GEN2 is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    
    //_isCommunity = Can Buy at Launch! <-----for community 
    //_isBlacklisted = Can not buy or sell or transfer tokens at all <-----for bots! 
    mapping (address => bool) public _isCommunity;
    mapping (address => bool) public _isBlacklisted;
    
    //private launch - Only approved people can buy! 
    //need to add uniswapV2Pair address to communiity list in order to add liquidity 
    bool public onlyCommunity = true;
    
    address[] private _excluded;
    address payable private _promotionsWalletAddress = payable(0x5CAbbF2Bed506783038B48f51569Fe5b9283825b);
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    string private _name = "GenTokens.com";
    string private _symbol = "GEN2";
    uint8 private _decimals = 9;
    
    //refection fee
    uint256 public _reflectionFee = 3;
    uint256 private _previousReflectionFee = _reflectionFee;
    
    //token wallet fee for burns and giveaways
    uint256 public _tokenGiveawayFee = 2;
    uint256 private _previousTokenGiveawayFee = _tokenGiveawayFee;
    
    //setting the fees for auto LP and marketing wallet - Also need to change ratio if not 50/50
    uint256 public _liquidityFee = 3;
    uint256 public _promoFee = 3;
   
    //fee for the auto LP and the marketing wallet 
    uint256 private _liquidityAndPromoFee = _liquidityFee+_promoFee;
    uint256 private _previousLiquidityAndPromoFee = _liquidityAndPromoFee;
    
    //divide the token balance by this number to calculate the amount to swap for promo vs liquidity 
    //2 = 50/50, 3 = 1/3 to promo, 4 = 1/4 to promo 
    uint256 private _liqToPromoFraction = 2;
    
    //max wallet holding 20000000 * 10**6 * 10**9 is 2% of 1000000000 * 10**6 * 10**9 (total supply)
    uint256 public _maxWalletToken = 20000000 * 10**6 * 10**9;
                                     
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    //this is the maximum transaction amount (in tokens) at launch this is set to 1% of total supply
    uint256 public _maxTxAmount = 10000000 * 10**6 * 10**9;

    //this is the number of tokens to accumulate before adding liquidity or taking the promotion fee
    //amount (in tokens) at launch set to 0.5% of total supply
    uint256 public _numTokensSellToAddToLiquidity = 5000000 * 10**6 * 10**9;
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
        
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[owner()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(0x000000000000000000000000000000000000dEaD)] = true;
        _isExcludedFromFee[address(0x5CAbbF2Bed506783038B48f51569Fe5b9283825b)] = true;
        
        //other wallets are added to the communtiy list maually post launch
        _isCommunity[address(0x000000000000000000000000000000000000dEaD)] = true;
        _isCommunity[address(0x5CAbbF2Bed506783038B48f51569Fe5b9283825b)] = true;
        _isCommunity[address(0x10ED43C718714eb63d5aA57B78B54704E256024E)] = true;
        _isCommunity[address(0x627C95B6fD9026E00Ab2c373FB08CC47E02629a0)] = true;
        
        
        
        
        emit Transfer(address(0), owner(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

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

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already included");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
        function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _takeDev(tDev);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
   
    //set Only Community Members 
    function setOnlyCommunity(bool _enabled) public onlyOwner {
        onlyCommunity = _enabled;
    }
    
    
    //set a wallet address so that it does not have to pay transaction fees
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    //set a wallet address so that it has to pay transaction fees
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    //set the number of tokens required to activate auto-liquidity and promotion wallet payout
    function setNumTokensSellToAddToLiquidityt(uint256 numTokensSellToAddToLiquidity) external onlyOwner() {
        _numTokensSellToAddToLiquidity = numTokensSellToAddToLiquidity;
    }
    
    //set the fee that is automatically distributed to all holders (reflection) 
    function setFeeReflectionPercent(uint256 reflectionFee) external onlyOwner() {
        _reflectionFee = reflectionFee;
    }
    
    //ratio to split the token balance before the swap to BNB for auto liquidty and promotion wallet
    //eg. (2 = split 50/50) (3 = 1/3 is sent to promo and 2/3 to liquidity)
    //not the best solution but provides enough flexibility - solidity math is terrible! 
    function setFeeLiquidityToPromoFraction(uint256 liqToPromoFraction) external onlyOwner() {
        _liqToPromoFraction = liqToPromoFraction;
    }
    
    
    //set fee for the giveaway and manual burn wallet 
    function setFeeTokenGiveawayPercent(uint256 tokenGiveawayFee) external onlyOwner() {
        _tokenGiveawayFee = tokenGiveawayFee;
    }
    
    //set fee for auto liquidity
    function setFeeLiquidityPercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
    
    //set fee for the marketing (BNB) wallet 
    function setFeePromoPercent(uint256 promoFee) external onlyOwner() {
        _promoFee = promoFee;
    }
   
    //set the Max transaction amount (percent of total supply)
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }
    
    //set the Max transaction amount (in tokens)
     function setMaxTxTokens(uint256 maxTxTokens) external onlyOwner() {
        _maxTxAmount = maxTxTokens;
    }
    
    
    
    //settting the maximum permitted wallet holding (percent of total supply)
     function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner() {
        _maxWalletToken = _tTotal.mul(maxWallPercent).div(
            10**2
        );
    }
    
    //settting the maximum permitted wallet holding (in tokens)
     function setMaxWalletTokens(uint256 maxWallTokens) external onlyOwner() {
        _maxWalletToken = maxWallTokens;
    }
    
    
    
    //toggle on and off to activate auto liquidity and the promo wallet 
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    //receive BNB from PancakeSwap Router
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }
    
    
    //Remove from Community 
    function removeFromCommunity(address account) external onlyOwner {
        _isCommunity[account] = false;
    }
    
    //Remove from Blacklist 
    function removeFromBlackList(address account) external onlyOwner {
        _isBlacklisted[account] = false;
    }
    
    
    //adding people to the GEN Community approved list - these people are the only ones that will be able to buy at launch! 
    function addToCommunity(address[] calldata addresses) external onlyOwner {
      for (uint256 i; i < addresses.length; ++i) {
        _isCommunity[addresses[i]] = true;
      }
    }
    
    //adding multiple addresses to the blacklist - Used to manually block known bots and scammers
    function addToBlackList(address[] calldata addresses) external onlyOwner {
      for (uint256 i; i < addresses.length; ++i) {
        _isBlacklisted[addresses[i]] = true;
      }
    }
    
    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tDev, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tDev);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateReflectionFee(tAmount);
        uint256 tLiquidity = calculateLiquidityAndPromoFee(tAmount);
        uint256 tDev = calculateTokenGiveawayFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tDev);
        return (tTransferAmount, tFee, tLiquidity, tDev);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rDev = tDev.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rDev);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function _takeDev(uint256 tDev) private {
        uint256 currentRate =  _getRate();
        uint256 rDev = tDev.mul(currentRate);
        _rOwned[_promotionsWalletAddress] = _rOwned[_promotionsWalletAddress].add(rDev);
        if(_isExcluded[_promotionsWalletAddress])
            _tOwned[_promotionsWalletAddress] = _tOwned[_promotionsWalletAddress].add(tDev);
    }
    
    function calculateReflectionFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_reflectionFee).div(
            10**2
        );
    }

    function calculateTokenGiveawayFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_tokenGiveawayFee).div(
            10**2
        );
    }

    function calculateLiquidityAndPromoFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityAndPromoFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_reflectionFee == 0 && _liquidityAndPromoFee == 0) return;
        
        _previousReflectionFee = _reflectionFee;
        _previousTokenGiveawayFee = _tokenGiveawayFee;
        _previousLiquidityAndPromoFee = _liquidityAndPromoFee;
        
        _reflectionFee = 0;
        _tokenGiveawayFee = 0;
        _liquidityAndPromoFee = 0;
    }
    
    function restoreAllFee() private {
        _reflectionFee = _previousReflectionFee;
        _tokenGiveawayFee = _previousTokenGiveawayFee;
        _liquidityAndPromoFee = _previousLiquidityAndPromoFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        
        
        //limits the amount of tokens that each person can buy - launch limit is 2% of total supply!
        if (to != owner() && to != address(this)  && to != address(0x000000000000000000000000000000000000dEaD) && to != uniswapV2Pair && to != _promotionsWalletAddress){
            uint256 heldTokens = balanceOf(to);
            require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");}
        
        //if onlyCommunity is set to true, then only people that have been approved as part of the GEN community can buy 
        if (onlyCommunity){
        require(_isCommunity[to], "Only Community Can Buy!");}

        //blacklisted addreses can not buy! If you have ever used a bot, or scammed anybody, then you're wallet address will probably be blacklisted
        require(!_isBlacklisted[from] && !_isBlacklisted[to], "This address is blacklisted");
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        //limit the maximum number of tokens that can be bought or sold in one transaction
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= _numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = _numTokensSellToAddToLiquidity;
            swapAndLiquify(contractTokenBalance);
        }
        
        bool takeFee = true;
        
       
         require(to != address(0), "ERC20: transfer to the zero address");
         
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }
    
     function sendToPromoWallet(uint256 amount) private {
            _promotionsWalletAddress.transfer(amount);
        }

     function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        
       
        uint256 promoTok = contractTokenBalance.div(_liqToPromoFraction);
        uint256 nonPromoTok = contractTokenBalance.sub(promoTok);
        
        swapTokensForEth(promoTok);
        if(address(this).balance > 0) sendToPromoWallet(address(this).balance);
        
        
        //Get new balance, split into two and liquify 
        
        uint256 half = nonPromoTok.div(2);
        uint256 otherHalf = nonPromoTok.sub(half);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half); 
        uint256 newBalance = address(this).balance.sub(initialBalance);
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        
        require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "To/from address is blacklisted!");
        
        
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getValues(tAmount);
        
        
         
         require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "To/from address is blacklisted!");
        
        
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeDev(tDev);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getValues(tAmount);
        
        require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "To/from address is blacklisted!");
        
        
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _takeDev(tDev);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getValues(tAmount);
       
       require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "To/from address is blacklisted!");
        
       
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _takeDev(tDev);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isCommunity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_promoFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenGiveawayFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToCommunity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyCommunity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromCommunity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setFeeLiquidityPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liqToPromoFraction","type":"uint256"}],"name":"setFeeLiquidityToPromoFraction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"promoFee","type":"uint256"}],"name":"setFeePromoPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectionFee","type":"uint256"}],"name":"setFeeReflectionPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenGiveawayFee","type":"uint256"}],"name":"setFeeTokenGiveawayPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxTokens","type":"uint256"}],"name":"setMaxTxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallTokens","type":"uint256"}],"name":"setMaxWalletTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokensSellToAddToLiquidity","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidityt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setOnlyCommunity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526008805460ff19166001179055600a80546001600160a01b031916735cabbf2bed506783038b48f51569fe5b9283825b17905569d3c21bcecceda1000000600b8190556200005590600019620006b9565b620000639060001962000662565b600c5560408051808201909152600d8082526c47656e546f6b656e732e636f6d60981b60209092019182526200009c91600e9162000571565b506040805180820190915260048082526323a2a71960e11b6020909201918252620000ca91600f9162000571565b506010805460ff19166009179055600360118190556012819055600260138190556014556015819055601681905562000104908062000647565b6017819055601855600260195569043c33c1937564800000601a55601b805461ff00191661010017905569021e19e0c9bab2400000601c5569010f0cf064dd59200000601d553480156200015757600080fd5b50600080546001600160a01b03191673627c95b6fd9026e00ab2c373fb08cc47e02629a090811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600c5460016000620001c56000546001600160a01b031690565b6001600160a01b03166001600160a01b031681526020019081526020016000208190555060007310ed43c718714eb63d5aa57b78b54704e256024e9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023c57600080fd5b505afa15801562000251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000277919062000617565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002c057600080fd5b505afa158015620002d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fb919062000617565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200034457600080fd5b505af115801562000359573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037f919062000617565b6001600160601b0319606091821b811660a0529082901b16608052600160046000620003b36000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600483529081208054841660019081179091557f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd80548516821790557ffc125ba32ea9f8511004fdf7a138640f9de91c41c852a6c0bb7628128ce27000805485168217905560069092527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548416831790557fe886ab9009e584aed4642d7f450f8f6c18cd95c5d90456fca309919cc06d54d780548416831790557facb6cf0e98bf236cb816d9908b3017a117e132006173790335f83194b2003986805484168317905573627c95b6fd9026e00ab2c373fb08cc47e02629a090527fbc41556f5f9f25b458ff1f12783514cabf1b44a7c5fd6fd3647a704f2a0f1d4b80549092161790556200051a6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200056291815260200190565b60405180910390a350620006f0565b8280546200057f906200067c565b90600052602060002090601f016020900481019282620005a35760008555620005ee565b82601f10620005be57805160ff1916838001178555620005ee565b82800160010185558215620005ee579182015b82811115620005ee578251825591602001919060010190620005d1565b50620005fc92915062000600565b5090565b5b80821115620005fc576000815560010162000601565b60006020828403121562000629578081fd5b81516001600160a01b038116811462000640578182fd5b9392505050565b600082198211156200065d576200065d620006da565b500190565b600082821015620006775762000677620006da565b500390565b600181811c908216806200069157607f821691505b60208210811415620006b357634e487b7160e01b600052602260045260246000fd5b50919050565b600082620006d557634e487b7160e01b81526012600452602481fd5b500690565b634e487b7160e01b600052601160045260246000fd5b60805160601c60a05160601c6136786200074d6000396000818161061701528181611cd501526120f3015260008181610458015281816128a80152818161297e015281816129d301528181612a7f0152612aa601526136786000f3fe60806040526004361061034e5760003560e01c80635ce9bb33116101bb5780639521cff5116100f7578063dd62ed3e11610095578063f0f0681c1161006f578063f0f0681c146109e6578063f2fde38b14610a00578063f5e22efd14610a20578063ff89757014610a4057600080fd5b8063dd62ed3e14610960578063e6039f92146109a6578063ea2f0b37146109c657600080fd5b8063a9059cbb116100d1578063a9059cbb146108ea578063b3f22ce31461090a578063c49b9a8014610920578063d543dbeb1461094057600080fd5b80639521cff51461089557806395d89b41146108b5578063a457c2d7146108ca57600080fd5b806378109e541161016457806382bf293c1161013e57806382bf293c146107fe57806388f820201461081e5780638da5cb5b146108575780638eeb380e1461087557600080fd5b806378109e54146107b25780637d1db4a5146107c85780638097e697146107de57600080fd5b80636bc87c3a116101955780636bc87c3a1461076757806370a082311461077d578063715018a61461079d57600080fd5b80635ce9bb33146107115780635cfd7df41461073157806365606e851461075157600080fd5b80633685d4191161028a57806349bd5a5e116102335780634cdc83cb1161020d5780634cdc83cb1461067857806352390c02146106985780635342acb4146106b857806356df6d84146106f157600080fd5b806349bd5a5e146106055780634a49ac4c146106395780634a74bb021461065957600080fd5b80633e417a76116102645780633e417a76146105af578063437823ec146105c55780634549b039146105e557600080fd5b80633685d4191461054f578063395093511461056f5780633bd5d1731461058f57600080fd5b80631694505e116102f757806323b872dd116102d157806323b872dd146104d75780632d838119146104f7578063313ce567146105175780633206b4aa1461053957600080fd5b80631694505e1461044657806318160ddd146104925780631cdd3be3146104a757600080fd5b80630fec5dd0116103285780630fec5dd0146103e557806312ff68881461040757806313114a9d1461042757600080fd5b806306fdde031461035a578063095ea7b3146103855780630f285aee146103b557600080fd5b3661035557005b600080fd5b34801561036657600080fd5b5061036f610a60565b60405161037c9190613420565b60405180910390f35b34801561039157600080fd5b506103a56103a03660046132fb565b610af2565b604051901515815260200161037c565b3480156103c157600080fd5b506103a56103d036600461324b565b60066020526000908152604090205460ff1681565b3480156103f157600080fd5b506104056104003660046133b0565b610b09565b005b34801561041357600080fd5b506104056104223660046133b0565b610b5b565b34801561043357600080fd5b50600d545b60405190815260200161037c565b34801561045257600080fd5b5061047a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161037c565b34801561049e57600080fd5b50600b54610438565b3480156104b357600080fd5b506103a56104c236600461324b565b60076020526000908152604090205460ff1681565b3480156104e357600080fd5b506103a56104f23660046132bb565b610ba8565b34801561050357600080fd5b506104386105123660046133b0565b610c11565b34801561052357600080fd5b5060105460405160ff909116815260200161037c565b34801561054557600080fd5b5061043860115481565b34801561055b57600080fd5b5061040561056a36600461324b565b610ca8565b34801561057b57600080fd5b506103a561058a3660046132fb565b610eb5565b34801561059b57600080fd5b506104056105aa3660046133b0565b610eeb565b3480156105bb57600080fd5b5061043860165481565b3480156105d157600080fd5b506104056105e036600461324b565b610fe8565b3480156105f157600080fd5b506104386106003660046133c8565b611054565b34801561061157600080fd5b5061047a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064557600080fd5b5061040561065436600461324b565b6110e3565b34801561066557600080fd5b50601b546103a590610100900460ff1681565b34801561068457600080fd5b506104056106933660046133b0565b61114c565b3480156106a457600080fd5b506104056106b336600461324b565b611199565b3480156106c457600080fd5b506103a56106d336600461324b565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156106fd57600080fd5b5061040561070c3660046133b0565b61130a565b34801561071d57600080fd5b5061040561072c3660046133b0565b611357565b34801561073d57600080fd5b5061040561074c3660046133b0565b6113a4565b34801561075d57600080fd5b5061043860135481565b34801561077357600080fd5b5061043860155481565b34801561078957600080fd5b5061043861079836600461324b565b6113f1565b3480156107a957600080fd5b50610405611450565b3480156107be57600080fd5b50610438601a5481565b3480156107d457600080fd5b50610438601c5481565b3480156107ea57600080fd5b506104056107f93660046133b0565b6114e2565b34801561080a57600080fd5b506104056108193660046133b0565b61152f565b34801561082a57600080fd5b506103a561083936600461324b565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561086357600080fd5b506000546001600160a01b031661047a565b34801561088157600080fd5b50610405610890366004613396565b61159d565b3480156108a157600080fd5b506104056108b036600461324b565b6115f8565b3480156108c157600080fd5b5061036f611661565b3480156108d657600080fd5b506103a56108e53660046132fb565b611670565b3480156108f657600080fd5b506103a56109053660046132fb565b6116bf565b34801561091657600080fd5b50610438601d5481565b34801561092c57600080fd5b5061040561093b366004613396565b6116cc565b34801561094c57600080fd5b5061040561095b3660046133b0565b611768565b34801561096c57600080fd5b5061043861097b366004613283565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156109b257600080fd5b506104056109c13660046133b0565b6117d0565b3480156109d257600080fd5b506104056109e136600461324b565b61181d565b3480156109f257600080fd5b506008546103a59060ff1681565b348015610a0c57600080fd5b50610405610a1b36600461324b565b611886565b348015610a2c57600080fd5b50610405610a3b366004613326565b6119a5565b348015610a4c57600080fd5b50610405610a5b366004613326565b611a70565b6060600e8054610a6f90613551565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9b90613551565b8015610ae85780601f10610abd57610100808354040283529160200191610ae8565b820191906000526020600020905b815481529060010190602001808311610acb57829003601f168201915b5050505050905090565b6000610aff338484611b36565b5060015b92915050565b6000546001600160a01b03163314610b565760405162461bcd60e51b815260206004820181905260248201526000805160206135fe83398151915260448201526064015b60405180910390fd5b601a55565b6000546001600160a01b03163314610ba35760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b601155565b6000610bb5848484611c8e565b610c078433610c02856040518060600160405280602881526020016135d6602891396001600160a01b038a166000908152600360209081526040808320338452909152902054919061220e565b611b36565b5060019392505050565b6000600c54821115610c8b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610b4d565b6000610c9561223a565b9050610ca1838261225d565b9392505050565b6000546001600160a01b03163314610cf05760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b6001600160a01b03811660009081526005602052604090205460ff16610d585760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610b4d565b60005b600954811015610eb157816001600160a01b031660098281548110610d9057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610e9f5760098054610dbb9060019061353a565b81548110610dd957634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600980546001600160a01b039092169183908110610e1357634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556009805480610e7957634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610ea98161358c565b915050610d5b565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610aff918590610c029086612269565b3360008181526005602052604090205460ff1615610f715760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201527f6869732066756e6374696f6e00000000000000000000000000000000000000006064820152608401610b4d565b6000610f7c83612275565b5050506001600160a01b038616600090815260016020526040902054939450610faa939250849150506122d0565b6001600160a01b038316600090815260016020526040902055600c54610fd090826122d0565b600c55600d54610fe09084612269565b600d55505050565b6000546001600160a01b031633146110305760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600b548311156110a85760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b4d565b816110c85760006110b884612275565b50949650610b0395505050505050565b60006110d384612275565b50939650610b0395505050505050565b6000546001600160a01b0316331461112b5760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146111945760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b601955565b6000546001600160a01b031633146111e15760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b6001600160a01b03811660009081526005602052604090205460ff161561124a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b4d565b6001600160a01b038116600090815260016020526040902054156112a4576001600160a01b03811660009081526001602052604090205461128a90610c11565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6000546001600160a01b031633146113525760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b601655565b6000546001600160a01b0316331461139f5760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b601355565b6000546001600160a01b031633146113ec5760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b601c55565b6001600160a01b03811660009081526005602052604081205460ff161561142e57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610b0390610c11565b6000546001600160a01b031633146114985760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461152a5760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b601d55565b6000546001600160a01b031633146115775760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b611597606461159183600b546122dc90919063ffffffff16565b9061225d565b601a5550565b6000546001600160a01b031633146115e55760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b6008805460ff1916911515919091179055565b6000546001600160a01b031633146116405760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6060600f8054610a6f90613551565b6000610aff3384610c028560405180606001604052806025815260200161361e602591393360009081526003602090815260408083206001600160a01b038d168452909152902054919061220e565b6000610aff338484611c8e565b6000546001600160a01b031633146117145760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b601b80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061175d90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146117b05760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b6117ca606461159183600b546122dc90919063ffffffff16565b601c5550565b6000546001600160a01b031633146118185760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b601555565b6000546001600160a01b031633146118655760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146118ce5760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b6001600160a01b03811661194a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b4d565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119ed5760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b60005b81811015611a6b57600160066000858585818110611a1e57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611a33919061324b565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611a648161358c565b90506119f0565b505050565b6000546001600160a01b03163314611ab85760405162461bcd60e51b815260206004820181905260248201526000805160206135fe8339815191526044820152606401610b4d565b60005b81811015611a6b57600160076000858585818110611ae957634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611afe919061324b565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611b2f8161358c565b9050611abb565b6001600160a01b038316611bb15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610b4d565b6001600160a01b038216611c2d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610b4d565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b03838116911614801590611cb557506001600160a01b0382163014155b8015611ccc57506001600160a01b03821661dead14155b8015611d0a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611d245750600a546001600160a01b03838116911614155b15611dba576000611d34836113f1565b601a54909150611d4483836134e3565b1115611db85760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b4d565b505b60085460ff1615611e2d576001600160a01b03821660009081526006602052604090205460ff16611e2d5760405162461bcd60e51b815260206004820152601760248201527f4f6e6c7920436f6d6d756e6974792043616e20427579210000000000000000006044820152606401610b4d565b6001600160a01b03831660009081526007602052604090205460ff16158015611e6f57506001600160a01b03821660009081526007602052604090205460ff16155b611ebb5760405162461bcd60e51b815260206004820152601b60248201527f54686973206164647265737320697320626c61636b6c697374656400000000006044820152606401610b4d565b6001600160a01b038316611f375760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b4d565b6001600160a01b038216611f995760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b4d565b6000811161200f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610b4d565b6000546001600160a01b0384811691161480159061203b57506000546001600160a01b03838116911614155b156120b857601c548111156120b85760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610b4d565b60006120c3306113f1565b9050601c5481106120d35750601c545b601d54811080159081906120ea5750601b5460ff16155b801561212857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b801561213b5750601b54610100900460ff165b1561214e57601d54915061214e826122e8565b60016001600160a01b0385166121b25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b4d565b6001600160a01b03861660009081526004602052604090205460ff16806121f157506001600160a01b03851660009081526004602052604090205460ff165b156121fa575060005b612206868686846123c1565b505050505050565b600081848411156122325760405162461bcd60e51b8152600401610b4d9190613420565b505050900390565b60008060006122476125d2565b9092509050612256828261225d565b9250505090565b6000610ca182846134fb565b6000610ca182846134e3565b600080600080600080600080600080600061228f8c61278c565b935093509350935060008060006122b08f8787876122ab61223a565b6127e1565b919f509d509b509599509397509195509350505050919395979092949650565b6000610ca1828461353a565b6000610ca1828461351b565b601b805460ff1916600117905560195460009061230690839061225d565b9050600061231483836122d0565b905061231f82612843565b471561232e5761232e47612a3f565b600061233b82600261225d565b9050600061234983836122d0565b90504761235583612843565b600061236147836122d0565b905061236d8382612a79565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601b805460ff191690555050505050565b6001600160a01b03841660009081526007602052604090205460ff1615801561240357506001600160a01b03831660009081526007602052604090205460ff16155b61244f5760405162461bcd60e51b815260206004820152601f60248201527f546f2f66726f6d206164647265737320697320626c61636b6c697374656421006044820152606401610b4d565b8061245c5761245c612ba6565b6001600160a01b03841660009081526005602052604090205460ff16801561249d57506001600160a01b03831660009081526005602052604090205460ff16155b156124b2576124ad848484612bdf565b6125b0565b6001600160a01b03841660009081526005602052604090205460ff161580156124f357506001600160a01b03831660009081526005602052604090205460ff165b15612503576124ad848484612db5565b6001600160a01b03841660009081526005602052604090205460ff1615801561254557506001600160a01b03831660009081526005602052604090205460ff16155b15612555576124ad848484612f04565b6001600160a01b03841660009081526005602052604090205460ff16801561259557506001600160a01b03831660009081526005602052604090205460ff165b156125a5576124ad848484612fee565b6125b0848484612f04565b806125cc576125cc601254601155601454601355601854601755565b50505050565b600c54600b546000918291825b60095481101561275c5782600160006009848154811061260f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612688575081600260006009848154811061266157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561269e57600c54600b54945094505050509091565b6126f260016000600984815481106126c657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122d0565b9250612748600260006009848154811061271c57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122d0565b9150806127548161358c565b9150506125df565b50600b54600c5461276c9161225d565b82101561278357600c54600b549350935050509091565b90939092509050565b600080600080600061279d86613077565b905060006127aa87613093565b905060006127b7886130af565b905060006127d1826127cb85818d896122d0565b906122d0565b9993985091965094509092505050565b60008080806127f089866122dc565b905060006127fe89876122dc565b9050600061280c89886122dc565b9050600061281a89896122dc565b9050600061282e826127cb858189896122d0565b949d949c50929a509298505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061288657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156128ff57600080fd5b505afa158015612913573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129379190613267565b8160018151811061295857634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250506129a3307f000000000000000000000000000000000000000000000000000000000000000084611b36565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612a11908590600090869030904290600401613473565b600060405180830381600087803b158015612a2b57600080fd5b505af1158015612206573d6000803e3d6000fd5b600a546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610eb1573d6000803e3d6000fd5b612aa4307f000000000000000000000000000000000000000000000000000000000000000084611b36565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719823085600080612aeb6000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612b6657600080fd5b505af1158015612b7a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b9f91906133f3565b5050505050565b601154158015612bb65750601754155b15612bbd57565b6011805460125560138054601455601780546018556000928390559082905555565b6000806000806000806000612bf388612275565b9650965096509650965096509650600760008b6001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900460ff16158015612c5a57506001600160a01b03891660009081526007602052604090205460ff16155b612ca65760405162461bcd60e51b815260206004820152601f60248201527f546f2f66726f6d206164647265737320697320626c61636b6c697374656421006044820152606401610b4d565b6001600160a01b038a16600090815260026020526040902054612cc990896122d0565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612cf890886122d0565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054612d279087612269565b6001600160a01b038a16600090815260016020526040902055612d49826130cb565b612d5281613153565b612d5c8584613212565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612da191815260200190565b60405180910390a350505050505050505050565b6000806000806000806000612dc988612275565b9650965096509650965096509650600760008b6001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900460ff16158015612e3057506001600160a01b03891660009081526007602052604090205460ff16155b612e7c5760405162461bcd60e51b815260206004820152601f60248201527f546f2f66726f6d206164647265737320697320626c61636b6c697374656421006044820152606401610b4d565b6001600160a01b038a16600090815260016020526040902054612e9f90886122d0565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054612ed59085612269565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612d279087612269565b6000806000806000806000612f1888612275565b9650965096509650965096509650600760008b6001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900460ff16158015612f7f57506001600160a01b03891660009081526007602052604090205460ff16155b612fcb5760405162461bcd60e51b815260206004820152601f60248201527f546f2f66726f6d206164647265737320697320626c61636b6c697374656421006044820152606401610b4d565b6001600160a01b038a16600090815260016020526040902054612cf890886122d0565b600080600080600080600061300288612275565b965096509650965096509650965061304888600260008d6001600160a01b03166001600160a01b03168152602001908152602001600020546122d090919063ffffffff16565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612e9f90886122d0565b6000610b036064611591601154856122dc90919063ffffffff16565b6000610b036064611591601754856122dc90919063ffffffff16565b6000610b036064611591601354856122dc90919063ffffffff16565b60006130d561223a565b905060006130e383836122dc565b306000908152600160205260409020549091506131009082612269565b3060009081526001602090815260408083209390935560059052205460ff1615611a6b573060009081526002602052604090205461313e9084612269565b30600090815260026020526040902055505050565b600061315d61223a565b9050600061316b83836122dc565b600a546001600160a01b03166000908152600160205260409020549091506131939082612269565b600a80546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff1615611a6b57600a546001600160a01b03166000908152600260205260409020546131f29084612269565b600a546001600160a01b0316600090815260026020526040902055505050565b600c5461321f90836122d0565b600c55600d5461322f9082612269565b600d555050565b8035801515811461324657600080fd5b919050565b60006020828403121561325c578081fd5b8135610ca1816135bd565b600060208284031215613278578081fd5b8151610ca1816135bd565b60008060408385031215613295578081fd5b82356132a0816135bd565b915060208301356132b0816135bd565b809150509250929050565b6000806000606084860312156132cf578081fd5b83356132da816135bd565b925060208401356132ea816135bd565b929592945050506040919091013590565b6000806040838503121561330d578182fd5b8235613318816135bd565b946020939093013593505050565b60008060208385031215613338578182fd5b823567ffffffffffffffff8082111561334f578384fd5b818501915085601f830112613362578384fd5b813581811115613370578485fd5b8660208260051b8501011115613384578485fd5b60209290920196919550909350505050565b6000602082840312156133a7578081fd5b610ca182613236565b6000602082840312156133c1578081fd5b5035919050565b600080604083850312156133da578182fd5b823591506133ea60208401613236565b90509250929050565b600080600060608486031215613407578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b8181101561344c57858101830151858201604001528201613430565b8181111561345d5783604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156134c25784516001600160a01b03168352938301939183019160010161349d565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156134f6576134f66135a7565b500190565b60008261351657634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615613535576135356135a7565b500290565b60008282101561354c5761354c6135a7565b500390565b600181811c9082168061356557607f821691505b6020821081141561358657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156135a0576135a06135a7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146135d257600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122002583e33345c95f51773d06ca96859a372457597fa76c376c6fd0a6906f6ac7264736f6c63430008040033

Deployed ByteCode Sourcemap

26724:25900:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31281:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32193:161;;;;;;;;;;-1:-1:-1;32193:161:0;;;;;:::i;:::-;;:::i;:::-;;;4586:14:1;;4579:22;4561:41;;4549:2;4534:18;32193:161:0;4516:92:1;27284:45:0;;;;;;;;;;-1:-1:-1;27284:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;38928:122;;;;;;;;;;-1:-1:-1;38928:122:0;;;;;:::i;:::-;;:::i;:::-;;37061:126;;;;;;;;;;-1:-1:-1;37061:126:0;;;;;:::i;:::-;;:::i;33314:87::-;;;;;;;;;;-1:-1:-1;33383:10:0;;33314:87;;;12225:25:1;;;12213:2;12198:18;33314:87:0;12180:76:1;29136:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3719:55:1;;;3701:74;;3689:2;3674:18;29136:51:0;3656:125:1;31558:95:0;;;;;;;;;;-1:-1:-1;31638:7:0;;31558:95;;27336:47;;;;;;;;;;-1:-1:-1;27336:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32362:313;;;;;;;;;;-1:-1:-1;32362:313:0;;;;;:::i;:::-;;:::i;34241:253::-;;;;;;;;;;-1:-1:-1;34241:253:0;;;;;:::i;:::-;;:::i;31467:83::-;;;;;;;;;;-1:-1:-1;31533:9:0;;31467:83;;31533:9;;;;13761:36:1;;13749:2;13734:18;31467:83:0;13716:87:1;28067:33:0;;;;;;;;;;;;;;;;34957:479;;;;;;;;;;-1:-1:-1;34957:479:0;;;;;:::i;:::-;;:::i;32683:218::-;;;;;;;;;;-1:-1:-1;32683:218:0;;;;;:::i;:::-;;:::i;33409:378::-;;;;;;;;;;-1:-1:-1;33409:378:0;;;;;:::i;:::-;;:::i;28477:28::-;;;;;;;;;;;;;;;;36375:111;;;;;;;;;;-1:-1:-1;36375:111:0;;;;;:::i;:::-;;:::i;33795:438::-;;;;;;;;;;-1:-1:-1;33795:438:0;;;;;:::i;:::-;;:::i;29194:38::-;;;;;;;;;;;;;;;39761:115;;;;;;;;;;-1:-1:-1;39761:115:0;;;;;:::i;:::-;;:::i;29267:40::-;;;;;;;;;;-1:-1:-1;29267:40:0;;;;;;;;;;;37469:148;;;;;;;;;;-1:-1:-1;37469:148:0;;;;;:::i;:::-;;:::i;34502:447::-;;;;;;;;;;-1:-1:-1;34502:447:0;;;;;:::i;:::-;;:::i;44607:123::-;;;;;;;;;;-1:-1:-1;44607:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;44695:27:0;44671:4;44695:27;;;:18;:27;;;;;;;;;44607:123;38056:106;;;;;;;;;;-1:-1:-1;38056:106:0;;;;;:::i;:::-;;:::i;37691:138::-;;;;;;;;;;-1:-1:-1;37691:138:0;;;;;:::i;:::-;;:::i;38462:111::-;;;;;;;;;;-1:-1:-1;38462:111:0;;;;;:::i;:::-;;:::i;28223:36::-;;;;;;;;;;;;;;;;28438:32;;;;;;;;;;;;;;;;31661:198;;;;;;;;;;-1:-1:-1;31661:198:0;;;;;:::i;:::-;;:::i;18378:148::-;;;;;;;;;;;;;:::i;29033:57::-;;;;;;;;;;;;;;;;29422:54;;;;;;;;;;;;;;;;36783:184;;;;;;;;;;-1:-1:-1;36783:184:0;;;;;:::i;:::-;;:::i;38677:173::-;;;;;;;;;;-1:-1:-1;38677:173:0;;;;;:::i;:::-;;:::i;33186:120::-;;;;;;;;;;-1:-1:-1;33186:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;33278:20:0;33254:4;33278:20;;;:11;:20;;;;;;;;;33186:120;18147:87;;;;;;;;;;-1:-1:-1;18193:7:0;18220:6;-1:-1:-1;;;;;18220:6:0;18147:87;;36179:101;;;;;;;;;;-1:-1:-1;36179:101:0;;;;;:::i;:::-;;:::i;39606:113::-;;;;;;;;;;-1:-1:-1;39606:113:0;;;;;:::i;:::-;;:::i;31372:87::-;;;;;;;;;;;;;:::i;32909:269::-;;;;;;;;;;-1:-1:-1;32909:269:0;;;;;:::i;:::-;;:::i;31867:167::-;;;;;;;;;;-1:-1:-1;31867:167:0;;;;;:::i;:::-;;:::i;29651:71::-;;;;;;;;;;;;;;;;39148:171;;;;;;;;;;-1:-1:-1;39148:171:0;;;;;:::i;:::-;;:::i;38237:162::-;;;;;;;;;;-1:-1:-1;38237:162:0;;;;;:::i;:::-;;:::i;32042:143::-;;;;;;;;;;-1:-1:-1;32042:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;32150:18:0;;;32123:7;32150:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;32042:143;37875:122;;;;;;;;;;-1:-1:-1;37875:122:0;;;;;:::i;:::-;;:::i;36565:110::-;;;;;;;;;;-1:-1:-1;36565:110:0;;;;;:::i;:::-;;:::i;27538:32::-;;;;;;;;;;-1:-1:-1;27538:32:0;;;;;;;;18536:244;;;;;;;;;;-1:-1:-1;18536:244:0;;;;;:::i;:::-;;:::i;40020:186::-;;;;;;;;;;-1:-1:-1;40020:186:0;;;;;:::i;:::-;;:::i;40317:188::-;;;;;;;;;;-1:-1:-1;40317:188:0;;;;;:::i;:::-;;:::i;31281:83::-;31318:13;31351:5;31344:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31281:83;:::o;32193:161::-;32268:4;32285:39;14220:10;32308:7;32317:6;32285:8;:39::i;:::-;-1:-1:-1;32342:4:0;32193:161;;;;;:::o;38928:122::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;;;;;;;;;39011:15:::1;:31:::0;38928:122::o;37061:126::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;37149:14:::1;:30:::0;37061:126::o;32362:313::-;32460:4;32477:36;32487:6;32495:9;32506:6;32477:9;:36::i;:::-;32524:121;32533:6;14220:10;32555:89;32593:6;32555:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32555:19:0;;;;;;:11;:19;;;;;;;;14220:10;32555:33;;;;;;;;;;:37;:89::i;:::-;32524:8;:121::i;:::-;-1:-1:-1;32663:4:0;32362:313;;;;;:::o;34241:253::-;34307:7;34346;;34335;:18;;34327:73;;;;-1:-1:-1;;;34327:73:0;;6085:2:1;34327:73:0;;;6067:21:1;6124:2;6104:18;;;6097:30;6163:34;6143:18;;;6136:62;6234:12;6214:18;;;6207:40;6264:19;;34327:73:0;6057:232:1;34327:73:0;34411:19;34434:10;:8;:10::i;:::-;34411:33;-1:-1:-1;34462:24:0;:7;34411:33;34462:11;:24::i;:::-;34455:31;34241:253;-1:-1:-1;;;34241:253:0:o;34957:479::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;-1:-1:-1;;;;;35039:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;35031:60;;;::::0;-1:-1:-1;;;35031:60:0;;8378:2:1;35031:60:0::1;::::0;::::1;8360:21:1::0;8417:2;8397:18;;;8390:30;8456:29;8436:18;;;8429:57;8503:18;;35031:60:0::1;8350:177:1::0;35031:60:0::1;35107:9;35102:327;35126:9;:16:::0;35122:20;::::1;35102:327;;;35184:7;-1:-1:-1::0;;;;;35168:23:0::1;:9;35178:1;35168:12;;;;;;-1:-1:-1::0;;;35168:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;35168:12:0::1;:23;35164:254;;;35227:9;35237:16:::0;;:20:::1;::::0;35256:1:::1;::::0;35237:20:::1;:::i;:::-;35227:31;;;;;;-1:-1:-1::0;;;35227:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;35212:9:::1;:12:::0;;-1:-1:-1;;;;;35227:31:0;;::::1;::::0;35222:1;;35212:12;::::1;;;-1:-1:-1::0;;;35212:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;35212:46:0::1;-1:-1:-1::0;;;;;35212:46:0;;::::1;;::::0;;35277:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;35316:11:::1;:20:::0;;;;:28;;-1:-1:-1;;35316:28:0::1;::::0;;35363:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;35363:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;35363:15:0;;;;;-1:-1:-1;;;;;;35363:15:0::1;::::0;;;;;35102:327:::1;34957:479:::0;:::o;35164:254::-:1;35144:3:::0;::::1;::::0;::::1;:::i;:::-;;;;35102:327;;;;34957:479:::0;:::o;32683:218::-;14220:10;32771:4;32820:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;32820:34:0;;;;;;;;;;32771:4;;32788:83;;32811:7;;32820:50;;32859:10;32820:38;:50::i;33409:378::-;14220:10;33461:14;33510:19;;;:11;:19;;;;;;;;33509:20;33501:77;;;;-1:-1:-1;;;33501:77:0;;11868:2:1;33501:77:0;;;11850:21:1;11907:2;11887:18;;;11880:30;11946:34;11926:18;;;11919:62;12017:14;11997:18;;;11990:42;12049:19;;33501:77:0;11840:234:1;33501:77:0;33590:15;33615:19;33626:7;33615:10;:19::i;:::-;-1:-1:-1;;;;;;;;33663:15:0;;;;;;:7;:15;;;;;;33589:45;;-1:-1:-1;33663:28:0;;:15;-1:-1:-1;33589:45:0;;-1:-1:-1;;33663:19:0;:28::i;:::-;-1:-1:-1;;;;;33645:15:0;;;;;;:7;:15;;;;;:46;33712:7;;:20;;33724:7;33712:11;:20::i;:::-;33702:7;:30;33756:10;;:23;;33771:7;33756:14;:23::i;:::-;33743:10;:36;-1:-1:-1;;;33409:378:0:o;36375:111::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;-1:-1:-1;;;;;36444:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;36444:34:0::1;36474:4;36444:34;::::0;;36375:111::o;33795:438::-;33885:7;33924;;33913;:18;;33905:62;;;;-1:-1:-1;;;33905:62:0;;8734:2:1;33905:62:0;;;8716:21:1;8773:2;8753:18;;;8746:30;8812:33;8792:18;;;8785:61;8863:18;;33905:62:0;8706:181:1;33905:62:0;33983:17;33978:248;;34018:15;34043:19;34054:7;34043:10;:19::i;:::-;-1:-1:-1;34017:45:0;;-1:-1:-1;34077:14:0;;-1:-1:-1;;;;;;34077:14:0;33978:248;34126:23;34158:19;34169:7;34158:10;:19::i;:::-;-1:-1:-1;34124:53:0;;-1:-1:-1;34192:22:0;;-1:-1:-1;;;;;;34192:22:0;39761:115;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;-1:-1:-1;;;;;39837:23:0::1;39863:5;39837:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;39837:31:0::1;::::0;;39761:115::o;37469:148::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;37569:19:::1;:40:::0;37469:148::o;34502:447::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;-1:-1:-1;;;;;34699:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;34698:21;34690:61;;;::::0;-1:-1:-1;;;34690:61:0;;7666:2:1;34690:61:0::1;::::0;::::1;7648:21:1::0;7705:2;7685:18;;;7678:30;7744:29;7724:18;;;7717:57;7791:18;;34690:61:0::1;7638:177:1::0;34690:61:0::1;-1:-1:-1::0;;;;;34765:16:0;::::1;34784:1;34765:16:::0;;;:7:::1;:16;::::0;;;;;:20;34762:108:::1;;-1:-1:-1::0;;;;;34841:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;34821:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;34802:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;34762:108:::1;-1:-1:-1::0;;;;;34880:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;34880:27:0::1;34903:4;34880:27:::0;;::::1;::::0;;;34918:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;34918:23:0::1;::::0;;::::1;::::0;;34502:447::o;38056:106::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;38134:9:::1;:20:::0;38056:106::o;37691:138::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;37785:17:::1;:36:::0;37691:138::o;38462:111::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;38539:12:::1;:26:::0;38462:111::o;31661:198::-;-1:-1:-1;;;;;31751:20:0;;31727:7;31751:20;;;:11;:20;;;;;;;;31747:49;;;-1:-1:-1;;;;;;31780:16:0;;;;;:7;:16;;;;;;;31661:198::o;31747:49::-;-1:-1:-1;;;;;31834:16:0;;;;;;:7;:16;;;;;;31814:37;;:19;:37::i;18378:148::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;18485:1:::1;18469:6:::0;;18448:40:::1;::::0;-1:-1:-1;;;;;18469:6:0;;::::1;::::0;18448:40:::1;::::0;18485:1;;18448:40:::1;18516:1;18499:19:::0;;-1:-1:-1;;;;;;18499:19:0::1;::::0;;18378:148::o;36783:184::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;36897:30:::1;:62:::0;36783:184::o;38677:173::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;38780:62:::1;38826:5;38780:27;38792:14;38780:7;;:11;;:27;;;;:::i;:::-;:31:::0;::::1;:62::i;:::-;38762:15;:80:::0;-1:-1:-1;38677:173:0:o;36179:101::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;36248:13:::1;:24:::0;;-1:-1:-1;;36248:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36179:101::o;39606:113::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;-1:-1:-1;;;;;39682:21:0::1;39706:5;39682:21:::0;;;:12:::1;:21;::::0;;;;:29;;-1:-1:-1;;39682:29:0::1;::::0;;39606:113::o;31372:87::-;31411:13;31444:7;31437:14;;;;;:::i;32909:269::-;33002:4;33019:129;14220:10;33042:7;33051:96;33090:15;33051:96;;;;;;;;;;;;;;;;;14220:10;33051:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;33051:34:0;;;;;;;;;;;;:38;:96::i;31867:167::-;31945:4;31962:42;14220:10;31986:9;31997:6;31962:9;:42::i;39148:171::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;39225:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;39225:32:0;;::::1;;::::0;;39273:38:::1;::::0;::::1;::::0;::::1;::::0;39249:8;4586:14:1;4579:22;4561:41;;4549:2;4534:18;;4516:92;39273:38:0::1;;;;;;;;39148:171:::0;:::o;38237:162::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;38331:60:::1;38375:5;38331:25;38343:12;38331:7;;:11;;:25;;;;:::i;:60::-;38316:12;:75:::0;-1:-1:-1;38237:162:0:o;37875:122::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;37961:13:::1;:28:::0;37875:122::o;36565:110::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;-1:-1:-1;;;;;36632:27:0::1;36662:5;36632:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;36632:35:0::1;::::0;;36565:110::o;18536:244::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;-1:-1:-1;;;;;18625:22:0;::::1;18617:73;;;::::0;-1:-1:-1;;;18617:73:0;;6496:2:1;18617:73:0::1;::::0;::::1;6478:21:1::0;6535:2;6515:18;;;6508:30;6574:34;6554:18;;;6547:62;6645:8;6625:18;;;6618:36;6671:19;;18617:73:0::1;6468:228:1::0;18617:73:0::1;18727:6;::::0;;18706:38:::1;::::0;-1:-1:-1;;;;;18706:38:0;;::::1;::::0;18727:6;::::1;::::0;18706:38:::1;::::0;::::1;18755:6;:17:::0;;-1:-1:-1;;;;;;18755:17:0::1;-1:-1:-1::0;;;;;18755:17:0;;;::::1;::::0;;;::::1;::::0;;18536:244::o;40020:186::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;40107:9:::1;40102:97;40118:20:::0;;::::1;40102:97;;;40185:4;40156:12;:26;40169:9;;40179:1;40169:12;;;;;-1:-1:-1::0;;;40169:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40156:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;40156:26:0;:33;;-1:-1:-1;;40156:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40140:3:::1;::::0;::::1;:::i;:::-;;;40102:97;;;;40020:186:::0;;:::o;40317:188::-;18193:7;18220:6;-1:-1:-1;;;;;18220:6:0;14220:10;18286:23;18278:68;;;;-1:-1:-1;;;18278:68:0;;9855:2:1;18278:68:0;;;9837:21:1;;;9874:18;;;9867:30;-1:-1:-1;;;;;;;;;;;9913:18:1;;;9906:62;9985:18;;18278:68:0;9827:182:1;18278:68:0;40404:9:::1;40399:99;40415:20:::0;;::::1;40399:99;;;40484:4;40453:14;:28;40468:9;;40478:1;40468:12;;;;;-1:-1:-1::0;;;40468:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40453:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;40453:28:0;:35;;-1:-1:-1;;40453:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40437:3:::1;::::0;::::1;:::i;:::-;;;40399:99;;44738:337:::0;-1:-1:-1;;;;;44831:19:0;;44823:68;;;;-1:-1:-1;;;44823:68:0;;11463:2:1;44823:68:0;;;11445:21:1;11502:2;11482:18;;;11475:30;11541:34;11521:18;;;11514:62;11612:6;11592:18;;;11585:34;11636:19;;44823:68:0;11435:226:1;44823:68:0;-1:-1:-1;;;;;44910:21:0;;44902:68;;;;-1:-1:-1;;;44902:68:0;;6903:2:1;44902:68:0;;;6885:21:1;6942:2;6922:18;;;6915:30;6981:34;6961:18;;;6954:62;7052:4;7032:18;;;7025:32;7074:19;;44902:68:0;6875:224:1;44902:68:0;-1:-1:-1;;;;;44983:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;45035:32;;12225:25:1;;;45035:32:0;;12198:18:1;45035:32:0;;;;;;;44738:337;;;:::o;45083:2436::-;18193:7;18220:6;-1:-1:-1;;;;;45323:13:0;;;18220:6;;45323:13;;;;:36;;-1:-1:-1;;;;;;45340:19:0;;45354:4;45340:19;;45323:36;:98;;;;-1:-1:-1;;;;;;45364:57:0;;45378:42;45364:57;;45323:98;:121;;;;;45431:13;-1:-1:-1;;;;;45425:19:0;:2;-1:-1:-1;;;;;45425:19:0;;;45323:121;:155;;;;-1:-1:-1;45454:24:0;;-1:-1:-1;;;;;45448:30:0;;;45454:24;;45448:30;;45323:155;45319:340;;;45494:18;45515:13;45525:2;45515:9;:13::i;:::-;45576:15;;45494:34;;-1:-1:-1;45552:19:0;45565:6;45494:34;45552:19;:::i;:::-;45551:40;;45543:114;;;;-1:-1:-1;;;45543:114:0;;10626:2:1;45543:114:0;;;10608:21:1;10665:2;10645:18;;;10638:30;10704:34;10684:18;;;10677:62;10775:32;10755:18;;;10748:60;10825:19;;45543:114:0;10598:252:1;45543:114:0;45319:340;;45806:13;;;;45802:83;;;-1:-1:-1;;;;;45839:16:0;;;;;;:12;:16;;;;;;;;45831:52;;;;-1:-1:-1;;;45831:52:0;;9503:2:1;45831:52:0;;;9485:21:1;9542:2;9522:18;;;9515:30;9581:25;9561:18;;;9554:53;9624:18;;45831:52:0;9475:173:1;45831:52:0;-1:-1:-1;;;;;46056:20:0;;;;;;:14;:20;;;;;;;;46055:21;:44;;;;-1:-1:-1;;;;;;46081:18:0;;;;;;:14;:18;;;;;;;;46080:19;46055:44;46047:84;;;;-1:-1:-1;;;46047:84:0;;8022:2:1;46047:84:0;;;8004:21:1;8061:2;8041:18;;;8034:30;8100:29;8080:18;;;8073:57;8147:18;;46047:84:0;7994:177:1;46047:84:0;-1:-1:-1;;;;;46150:18:0;;46142:68;;;;-1:-1:-1;;;46142:68:0;;11057:2:1;46142:68:0;;;11039:21:1;11096:2;11076:18;;;11069:30;11135:34;11115:18;;;11108:62;11206:7;11186:18;;;11179:35;11231:19;;46142:68:0;11029:227:1;46142:68:0;-1:-1:-1;;;;;46229:16:0;;46221:64;;;;-1:-1:-1;;;46221:64:0;;5681:2:1;46221:64:0;;;5663:21:1;5720:2;5700:18;;;5693:30;5759:34;5739:18;;;5732:62;-1:-1:-1;;;5810:18:1;;;5803:33;5853:19;;46221:64:0;5653:225:1;46221:64:0;46313:1;46304:6;:10;46296:64;;;;-1:-1:-1;;;46296:64:0;;10216:2:1;46296:64:0;;;10198:21:1;10255:2;10235:18;;;10228:30;10294:34;10274:18;;;10267:62;10365:11;10345:18;;;10338:39;10394:19;;46296:64:0;10188:231:1;46296:64:0;18193:7;18220:6;-1:-1:-1;;;;;46476:15:0;;;18220:6;;46476:15;;;;:32;;-1:-1:-1;18193:7:0;18220:6;-1:-1:-1;;;;;46495:13:0;;;18220:6;;46495:13;;46476:32;46473:125;;;46541:12;;46531:6;:22;;46523:75;;;;-1:-1:-1;;;46523:75:0;;9094:2:1;46523:75:0;;;9076:21:1;9133:2;9113:18;;;9106:30;9172:34;9152:18;;;9145:62;9243:10;9223:18;;;9216:38;9271:19;;46523:75:0;9066:230:1;46523:75:0;46611:28;46642:24;46660:4;46642:9;:24::i;:::-;46611:55;;46714:12;;46690:20;:36;46687:112;;-1:-1:-1;46775:12:0;;46687:112;46870:30;;46846:54;;;;;;;46929:53;;-1:-1:-1;46966:16:0;;;;46965:17;46929:53;:91;;;;;47007:13;-1:-1:-1;;;;;46999:21:0;:4;-1:-1:-1;;;;;46999:21:0;;;46929:91;:129;;;;-1:-1:-1;47037:21:0;;;;;;;46929:129;46911:290;;;47108:30;;47085:53;;47153:36;47168:20;47153:14;:36::i;:::-;47236:4;-1:-1:-1;;;;;47279:16:0;;47271:64;;;;-1:-1:-1;;;47271:64:0;;5681:2:1;47271:64:0;;;5663:21:1;5720:2;5700:18;;;5693:30;5759:34;5739:18;;;5732:62;-1:-1:-1;;;5810:18:1;;;5803:33;5853:19;;47271:64:0;5653:225:1;47271:64:0;-1:-1:-1;;;;;47360:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;47388:22:0;;;;;;:18;:22;;;;;;;;47360:50;47357:96;;;-1:-1:-1;47436:5:0;47357:96;47473:38;47488:4;47493:2;47496:6;47503:7;47473:14;:38::i;:::-;45083:2436;;;;;;:::o;13454:206::-;13540:7;13601:12;13593:6;;;;13585:29;;;;-1:-1:-1;;;13585:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;13636:5:0;;;13454:206::o;41925:163::-;41966:7;41987:15;42004;42023:19;:17;:19::i;:::-;41986:56;;-1:-1:-1;41986:56:0;-1:-1:-1;42060:20:0;41986:56;;42060:11;:20::i;:::-;42053:27;;;;41925:163;:::o;13236:98::-;13294:7;13321:5;13325:1;13321;:5;:::i;12910:98::-;12968:7;12995:5;12999:1;12995;:5;:::i;40517:454::-;40576:7;40585;40594;40603;40612;40621;40630;40651:23;40676:12;40690:18;40710:12;40726:20;40738:7;40726:11;:20::i;:::-;40650:96;;;;;;;;40758:15;40775:23;40800:12;40816:56;40828:7;40837:4;40843:10;40855:4;40861:10;:8;:10::i;:::-;40816:11;:56::i;:::-;40757:115;;-1:-1:-1;40757:115:0;-1:-1:-1;40757:115:0;-1:-1:-1;40923:15:0;;-1:-1:-1;40940:4:0;;-1:-1:-1;40946:10:0;;-1:-1:-1;40958:4:0;-1:-1:-1;;;;40517:454:0;;;;;;;;;:::o;13018:98::-;13076:7;13103:5;13107:1;13103;:5;:::i;13126:98::-;13184:7;13211:5;13215:1;13211;:5;:::i;47660:822::-;30033:16;:23;;-1:-1:-1;;30033:23:0;30052:4;30033:23;;;47808:19:::1;::::0;30033:16;;47783:45:::1;::::0;:20;;:24:::1;:45::i;:::-;47764:64:::0;-1:-1:-1;47839:19:0::1;47861:34;:20:::0;47764:64;47861:24:::1;:34::i;:::-;47839:56;;47916:26;47933:8;47916:16;:26::i;:::-;47956:21;:25:::0;47953:70:::1;;47983:40;48001:21;47983:17;:40::i;:::-;48120:12;48135:18;:11:::0;48151:1:::1;48135:15;:18::i;:::-;48120:33:::0;-1:-1:-1;48164:17:0::1;48184:21;:11:::0;48120:33;48184:15:::1;:21::i;:::-;48164:41:::0;-1:-1:-1;48241:21:0::1;48273:22;48290:4:::0;48273:16:::1;:22::i;:::-;48307:18;48328:41;:21;48354:14:::0;48328:25:::1;:41::i;:::-;48307:62;;48380:35;48393:9;48404:10;48380:12;:35::i;:::-;48431:43;::::0;;13497:25:1;;;13553:2;13538:18;;13531:34;;;13581:18;;;13574:34;;;48431:43:0::1;::::0;13485:2:1;13470:18;48431:43:0::1;;;;;;;-1:-1:-1::0;;30079:16:0;:24;;-1:-1:-1;;30079:24:0;;;-1:-1:-1;;;;;47660:822:0:o;49419:972::-;-1:-1:-1;;;;;49545:22:0;;;;;;:14;:22;;;;;;;;49544:23;:53;;;;-1:-1:-1;;;;;;49572:25:0;;;;;;:14;:25;;;;;;;;49571:26;49544:53;49536:97;;;;-1:-1:-1;;;49536:97:0;;7306:2:1;49536:97:0;;;7288:21:1;7345:2;7325:18;;;7318:30;7384:33;7364:18;;;7357:61;7435:18;;49536:97:0;7278:181:1;49536:97:0;49668:7;49664:40;;49690:14;:12;:14::i;:::-;-1:-1:-1;;;;;49729:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;49753:22:0;;;;;;:11;:22;;;;;;;;49752:23;49729:46;49725:597;;;49792:48;49814:6;49822:9;49833:6;49792:21;:48::i;:::-;49725:597;;;-1:-1:-1;;;;;49863:19:0;;;;;;:11;:19;;;;;;;;49862:20;:46;;;;-1:-1:-1;;;;;;49886:22:0;;;;;;:11;:22;;;;;;;;49862:46;49858:464;;;49925:46;49945:6;49953:9;49964:6;49925:19;:46::i;49858:464::-;-1:-1:-1;;;;;49994:19:0;;;;;;:11;:19;;;;;;;;49993:20;:47;;;;-1:-1:-1;;;;;;50018:22:0;;;;;;:11;:22;;;;;;;;50017:23;49993:47;49989:333;;;50057:44;50075:6;50083:9;50094:6;50057:17;:44::i;49989:333::-;-1:-1:-1;;;;;50123:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;50146:22:0;;;;;;:11;:22;;;;;;;;50123:45;50119:203;;;50185:48;50207:6;50215:9;50226:6;50185:21;:48::i;50119:203::-;50266:44;50284:6;50292:9;50303:6;50266:17;:44::i;:::-;50346:7;50342:41;;50368:15;44445:22;;44428:14;:39;44498:25;;44478:17;:45;44558:29;;44534:21;:53;44384:211;50368:15;49419:972;;;;:::o;42096:561::-;42193:7;;42229;;42146;;;;;42253:289;42277:9;:16;42273:20;;42253:289;;;42343:7;42319;:21;42327:9;42337:1;42327:12;;;;;;-1:-1:-1;;;42327:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42327:12:0;42319:21;;;;;;;;;;;;;:31;;:66;;;42378:7;42354;:21;42362:9;42372:1;42362:12;;;;;;-1:-1:-1;;;42362:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42362:12:0;42354:21;;;;;;;;;;;;;:31;42319:66;42315:97;;;42395:7;;42404;;42387:25;;;;;;;42096:561;;:::o;42315:97::-;42437:34;42449:7;:21;42457:9;42467:1;42457:12;;;;;;-1:-1:-1;;;42457:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42457:12:0;42449:21;;;;;;;;;;;;;42437:7;;:11;:34::i;:::-;42427:44;;42496:34;42508:7;:21;42516:9;42526:1;42516:12;;;;;;-1:-1:-1;;;42516:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42516:12:0;42508:21;;;;;;;;;;;;;42496:7;;:11;:34::i;:::-;42486:44;-1:-1:-1;42295:3:0;;;;:::i;:::-;;;;42253:289;;;-1:-1:-1;42578:7:0;;42566;;:20;;:11;:20::i;:::-;42556:7;:30;42552:61;;;42596:7;;42605;;42588:25;;;;;;42096:561;;:::o;42552:61::-;42632:7;;42641;;-1:-1:-1;42096:561:0;-1:-1:-1;42096:561:0:o;40979:430::-;41039:7;41048;41057;41066;41086:12;41101:31;41124:7;41101:22;:31::i;:::-;41086:46;;41143:18;41164:38;41194:7;41164:29;:38::i;:::-;41143:59;;41213:12;41228:34;41254:7;41228:25;:34::i;:::-;41213:49;-1:-1:-1;41273:23:0;41299:43;41213:49;41299:33;41321:10;41299:33;:7;41311:4;41299:11;:17::i;:::-;:21;;:33::i;:43::-;41273:69;41378:4;;-1:-1:-1;41384:10:0;;-1:-1:-1;41384:10:0;-1:-1:-1;40979:430:0;;-1:-1:-1;;;40979:430:0:o;41417:500::-;41546:7;;;;41602:24;:7;41614:11;41602;:24::i;:::-;41584:42;-1:-1:-1;41637:12:0;41652:21;:4;41661:11;41652:8;:21::i;:::-;41637:36;-1:-1:-1;41684:18:0;41705:27;:10;41720:11;41705:14;:27::i;:::-;41684:48;-1:-1:-1;41743:12:0;41758:21;:4;41767:11;41758:8;:21::i;:::-;41743:36;-1:-1:-1;41790:23:0;41816:43;41743:36;41816:33;41838:10;41816:33;:7;41828:4;41816:11;:17::i;:43::-;41878:7;;;;-1:-1:-1;41904:4:0;;-1:-1:-1;41417:500:0;;-1:-1:-1;;;;;;;;;41417:500:0:o;48490:499::-;48580:16;;;48594:1;48580:16;;;;;;;;48556:21;;48580:16;;;;;;;;;;-1:-1:-1;48580:16:0;48556:40;;48625:4;48607;48612:1;48607:7;;;;;;-1:-1:-1;;;48607:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;48607:23:0;;;-1:-1:-1;;;;;48607:23:0;;;;;48651:15;-1:-1:-1;;;;;48651:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48641:4;48646:1;48641:7;;;;;;-1:-1:-1;;;48641:7:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;;48641:32:0;;;-1:-1:-1;;;;;48641:32:0;;;;;48684:62;48701:4;48716:15;48734:11;48684:8;:62::i;:::-;48757:224;;;;;-1:-1:-1;;;;;48757:15:0;:66;;;;:224;;48838:11;;48864:1;;48908:4;;48935;;48955:15;;48757:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47532:119;47598:24;;:41;;-1:-1:-1;;;;;47598:24:0;;;;:41;;;;;47632:6;;47598:24;:41;:24;:41;47632:6;47598:24;:41;;;;;;;;;;;;;;;;;;;48997:414;49078:62;49095:4;49110:15;49128:11;49078:8;:62::i;:::-;49151:15;-1:-1:-1;;;;;49151:31:0;;49190:9;49223:4;49243:11;49269:1;49312;49355:7;18193;18220:6;-1:-1:-1;;;;;18220:6:0;;18147:87;49355:7;49151:252;;;;;;;;;;-1:-1:-1;;;;;4168:15:1;;;49151:252:0;;;4150:34:1;4200:18;;;4193:34;;;;4243:18;;;4236:34;;;;4286:18;;;4279:34;4350:15;;;4329:19;;;4322:44;49377:15:0;4382:19:1;;;4375:35;4061:19;;49151:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48997:414;;:::o;43974:398::-;44020:14;;:19;:49;;;;-1:-1:-1;44043:21:0;;:26;44020:49;44017:61;;;43974:398::o;44017:61::-;44123:14;;;44098:22;:39;44176:17;;;44148:25;:45;44236:21;;;44204:29;:53;-1:-1:-1;44278:18:0;;;;44307:21;;;;44339:25;43974:398::o;51879:740::-;51982:15;51999:23;52024:12;52038:23;52063:12;52077:18;52097:12;52113:19;52124:7;52113:10;:19::i;:::-;51981:151;;;;;;;;;;;;;;52160:14;:22;52175:6;-1:-1:-1;;;;;52160:22:0;-1:-1:-1;;;;;52160:22:0;;;;;;;;;;;;;;;;;;;;;;52159:23;:53;;;;-1:-1:-1;;;;;;52187:25:0;;;;;;:14;:25;;;;;;;;52186:26;52159:53;52151:97;;;;-1:-1:-1;;;52151:97:0;;7306:2:1;52151:97:0;;;7288:21:1;7345:2;7325:18;;;7318:30;7384:33;7364:18;;;7357:61;7435:18;;52151:97:0;7278:181:1;52151:97:0;-1:-1:-1;;;;;52296:15:0;;;;;;:7;:15;;;;;;:28;;52316:7;52296:19;:28::i;:::-;-1:-1:-1;;;;;52278:15:0;;;;;;:7;:15;;;;;;;;:46;;;;52353:7;:15;;;;:28;;52373:7;52353:19;:28::i;:::-;-1:-1:-1;;;;;52335:15:0;;;;;;;:7;:15;;;;;;:46;;;;52413:18;;;;;;;:39;;52436:15;52413:22;:39::i;:::-;-1:-1:-1;;;;;52392:18:0;;;;;;:7;:18;;;;;:60;52466:26;52481:10;52466:14;:26::i;:::-;52503:14;52512:4;52503:8;:14::i;:::-;52528:23;52540:4;52546;52528:11;:23::i;:::-;52584:9;-1:-1:-1;;;;;52567:44:0;52576:6;-1:-1:-1;;;;;52567:44:0;;52595:15;52567:44;;;;12225:25:1;;12213:2;12198:18;;12180:76;52567:44:0;;;;;;;;51879:740;;;;;;;;;;:::o;51108:763::-;51209:15;51226:23;51251:12;51265:23;51290:12;51304:18;51324:12;51340:19;51351:7;51340:10;:19::i;:::-;51208:151;;;;;;;;;;;;;;51389:14;:22;51404:6;-1:-1:-1;;;;;51389:22:0;-1:-1:-1;;;;;51389:22:0;;;;;;;;;;;;;;;;;;;;;;51388:23;:53;;;;-1:-1:-1;;;;;;51416:25:0;;;;;;:14;:25;;;;;;;;51415:26;51388:53;51380:97;;;;-1:-1:-1;;;51380:97:0;;7306:2:1;51380:97:0;;;7288:21:1;7345:2;7325:18;;;7318:30;7384:33;7364:18;;;7357:61;7435:18;;51380:97:0;7278:181:1;51380:97:0;-1:-1:-1;;;;;51526:15:0;;;;;;:7;:15;;;;;;:28;;51546:7;51526:19;:28::i;:::-;-1:-1:-1;;;;;51508:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;51586:18;;;;;:7;:18;;;;;:39;;51609:15;51586:22;:39::i;:::-;-1:-1:-1;;;;;51565:18:0;;;;;;:7;:18;;;;;;;;:60;;;;51657:7;:18;;;;:39;;51680:15;51657:22;:39::i;50399:701::-;50498:15;50515:23;50540:12;50554:23;50579:12;50593:18;50613:12;50629:19;50640:7;50629:10;:19::i;:::-;50497:151;;;;;;;;;;;;;;50700:14;:22;50715:6;-1:-1:-1;;;;;50700:22:0;-1:-1:-1;;;;;50700:22:0;;;;;;;;;;;;;;;;;;;;;;50699:23;:53;;;;-1:-1:-1;;;;;;50727:25:0;;;;;;:14;:25;;;;;;;;50726:26;50699:53;50691:97;;;;-1:-1:-1;;;50691:97:0;;7306:2:1;50691:97:0;;;7288:21:1;7345:2;7325:18;;;7318:30;7384:33;7364:18;;;7357:61;7435:18;;50691:97:0;7278:181:1;50691:97:0;-1:-1:-1;;;;;50837:15:0;;;;;;:7;:15;;;;;;:28;;50857:7;50837:19;:28::i;35446:681::-;35549:15;35566:23;35591:12;35605:23;35630:12;35644:18;35664:12;35680:19;35691:7;35680:10;:19::i;:::-;35548:151;;;;;;;;;;;;;;35728:28;35748:7;35728;:15;35736:6;-1:-1:-1;;;;;35728:15:0;-1:-1:-1;;;;;35728:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;35710:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35785:7;:15;;;;:28;;35805:7;35785:19;:28::i;43422:168::-;43493:7;43520:62;43566:5;43520:27;43532:14;;43520:7;:11;;:27;;;;:::i;43780:182::-;43858:7;43885:69;43938:5;43885:34;43897:21;;43885:7;:11;;:34;;;;:::i;43598:174::-;43672:7;43699:65;43748:5;43699:30;43711:17;;43699:7;:11;;:30;;;;:::i;42669:355::-;42732:19;42755:10;:8;:10::i;:::-;42732:33;-1:-1:-1;42776:18:0;42797:27;:10;42732:33;42797:14;:27::i;:::-;42876:4;42860:22;;;;:7;:22;;;;;;42776:48;;-1:-1:-1;42860:38:0;;42776:48;42860:26;:38::i;:::-;42851:4;42835:22;;;;:7;:22;;;;;;;;:63;;;;42912:11;:26;;;;;;42909:107;;;42994:4;42978:22;;;;:7;:22;;;;;;:38;;43005:10;42978:26;:38::i;:::-;42969:4;42953:22;;;;:7;:22;;;;;:63;42669:355;;;:::o;43036:374::-;43087:19;43110:10;:8;:10::i;:::-;43087:33;-1:-1:-1;43131:12:0;43146:21;:4;43087:33;43146:8;:21::i;:::-;43222:24;;-1:-1:-1;;;;;43222:24:0;43214:33;;;;:7;:33;;;;;;43131:36;;-1:-1:-1;43214:43:0;;43131:36;43214:37;:43::i;:::-;43186:24;;;-1:-1:-1;;;;;43186:24:0;;;43178:33;;;;:7;:33;;;;;;;;:79;;;;43283:24;;;;;43271:37;;:11;:37;;;;;;;43268:134;;;43367:24;;-1:-1:-1;;;;;43367:24:0;43359:33;;;;:7;:33;;;;;;:43;;43397:4;43359:37;:43::i;:::-;43331:24;;-1:-1:-1;;;;;43331:24:0;43323:33;;;;:7;:33;;;;;:79;43036:374;;;:::o;39411:147::-;39489:7;;:17;;39501:4;39489:11;:17::i;:::-;39479:7;:27;39530:10;;:20;;39545:4;39530:14;:20::i;:::-;39517:10;:33;-1:-1:-1;;39411:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:257::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;312:6;304;297:22;259:2;356:9;343:23;375:31;400:5;375:31;:::i;441:261::-;511:6;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:31;666:5;641:31;:::i;707:398::-;775:6;783;836:2;824:9;815:7;811:23;807:32;804:2;;;857:6;849;842:22;804:2;901:9;888:23;920:31;945:5;920:31;:::i;:::-;970:5;-1:-1:-1;1027:2:1;1012:18;;999:32;1040:33;999:32;1040:33;:::i;:::-;1092:7;1082:17;;;794:311;;;;;:::o;1110:466::-;1187:6;1195;1203;1256:2;1244:9;1235:7;1231:23;1227:32;1224:2;;;1277:6;1269;1262:22;1224:2;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;-1:-1:-1;1447:2:1;1432:18;;1419:32;1460:33;1419:32;1460:33;:::i;:::-;1214:362;;1512:7;;-1:-1:-1;;;1566:2:1;1551:18;;;;1538:32;;1214:362::o;1581:325::-;1649:6;1657;1710:2;1698:9;1689:7;1685:23;1681:32;1678:2;;;1731:6;1723;1716:22;1678:2;1775:9;1762:23;1794:31;1819:5;1794:31;:::i;:::-;1844:5;1896:2;1881:18;;;;1868:32;;-1:-1:-1;;;1668:238:1:o;1911:665::-;1997:6;2005;2058:2;2046:9;2037:7;2033:23;2029:32;2026:2;;;2079:6;2071;2064:22;2026:2;2124:9;2111:23;2153:18;2194:2;2186:6;2183:14;2180:2;;;2215:6;2207;2200:22;2180:2;2258:6;2247:9;2243:22;2233:32;;2303:7;2296:4;2292:2;2288:13;2284:27;2274:2;;2330:6;2322;2315:22;2274:2;2375;2362:16;2401:2;2393:6;2390:14;2387:2;;;2422:6;2414;2407:22;2387:2;2480:7;2475:2;2465:6;2462:1;2458:14;2454:2;2450:23;2446:32;2443:45;2440:2;;;2506:6;2498;2491:22;2440:2;2542;2534:11;;;;;2564:6;;-1:-1:-1;2016:560:1;;-1:-1:-1;;;;2016:560:1:o;2581:190::-;2637:6;2690:2;2678:9;2669:7;2665:23;2661:32;2658:2;;;2711:6;2703;2696:22;2658:2;2739:26;2755:9;2739:26;:::i;2776:190::-;2835:6;2888:2;2876:9;2867:7;2863:23;2859:32;2856:2;;;2909:6;2901;2894:22;2856:2;-1:-1:-1;2937:23:1;;2846:120;-1:-1:-1;2846:120:1:o;2971:258::-;3036:6;3044;3097:2;3085:9;3076:7;3072:23;3068:32;3065:2;;;3118:6;3110;3103:22;3065:2;3159:9;3146:23;3136:33;;3188:35;3219:2;3208:9;3204:18;3188:35;:::i;:::-;3178:45;;3055:174;;;;;:::o;3234:316::-;3322:6;3330;3338;3391:2;3379:9;3370:7;3366:23;3362:32;3359:2;;;3412:6;3404;3397:22;3359:2;3446:9;3440:16;3430:26;;3496:2;3485:9;3481:18;3475:25;3465:35;;3540:2;3529:9;3525:18;3519:25;3509:35;;3349:201;;;;;:::o;4871:603::-;4983:4;5012:2;5041;5030:9;5023:21;5073:6;5067:13;5116:6;5111:2;5100:9;5096:18;5089:34;5141:4;5154:140;5168:6;5165:1;5162:13;5154:140;;;5263:14;;;5259:23;;5253:30;5229:17;;;5248:2;5225:26;5218:66;5183:10;;5154:140;;;5312:6;5309:1;5306:13;5303:2;;;5382:4;5377:2;5368:6;5357:9;5353:22;5349:31;5342:45;5303:2;-1:-1:-1;5458:2:1;5437:15;-1:-1:-1;;5433:29:1;5418:45;;;;5465:2;5414:54;;4992:482;-1:-1:-1;;;4992:482:1:o;12261:1029::-;12523:4;12571:3;12560:9;12556:19;12602:6;12591:9;12584:25;12628:2;12666:6;12661:2;12650:9;12646:18;12639:34;12709:3;12704:2;12693:9;12689:18;12682:31;12733:6;12768;12762:13;12799:6;12791;12784:22;12837:3;12826:9;12822:19;12815:26;;12876:2;12868:6;12864:15;12850:29;;12897:4;12910:218;12924:6;12921:1;12918:13;12910:218;;;12989:13;;-1:-1:-1;;;;;12985:62:1;12973:75;;13103:15;;;;13068:12;;;;12946:1;12939:9;12910:218;;;-1:-1:-1;;;;;;;13184:55:1;;;;13179:2;13164:18;;13157:83;-1:-1:-1;;;13271:3:1;13256:19;13249:35;13145:3;12532:758;-1:-1:-1;;;12532:758:1:o;13808:128::-;13848:3;13879:1;13875:6;13872:1;13869:13;13866:2;;;13885:18;;:::i;:::-;-1:-1:-1;13921:9:1;;13856:80::o;13941:274::-;13981:1;14007;13997:2;;-1:-1:-1;;;14039:1:1;14032:88;14143:4;14140:1;14133:15;14171:4;14168:1;14161:15;13997:2;-1:-1:-1;14200:9:1;;13987:228::o;14220:168::-;14260:7;14326:1;14322;14318:6;14314:14;14311:1;14308:21;14303:1;14296:9;14289:17;14285:45;14282:2;;;14333:18;;:::i;:::-;-1:-1:-1;14373:9:1;;14272:116::o;14393:125::-;14433:4;14461:1;14458;14455:8;14452:2;;;14466:18;;:::i;:::-;-1:-1:-1;14503:9:1;;14442:76::o;14523:437::-;14602:1;14598:12;;;;14645;;;14666:2;;14720:4;14712:6;14708:17;14698:27;;14666:2;14773;14765:6;14762:14;14742:18;14739:38;14736:2;;;-1:-1:-1;;;14807:1:1;14800:88;14911:4;14908:1;14901:15;14939:4;14936:1;14929:15;14736:2;;14578:382;;;:::o;14965:135::-;15004:3;-1:-1:-1;;15025:17:1;;15022:2;;;15045:18;;:::i;:::-;-1:-1:-1;15092:1:1;15081:13;;15012:88::o;15105:184::-;-1:-1:-1;;;15154:1:1;15147:88;15254:4;15251:1;15244:15;15278:4;15275:1;15268:15;15294:154;-1:-1:-1;;;;;15373:5:1;15369:54;15362:5;15359:65;15349:2;;15438:1;15435;15428:12;15349:2;15339:109;:::o

Swarm Source

ipfs://02583e33345c95f51773d06ca96859a372457597fa76c376c6fd0a6906f6ac72
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.