ETH Price: $2,993.50 (+6.41%)
Gas: 3 Gwei

Transaction Decoder

Block:
12621788 at Jun-12-2021 08:26:00 PM +UTC
Transaction Fee:
0.049643988 ETH $148.61
Gas Used:
4,136,999 Gas / 12 Gwei

Emitted Events:

Account State Difference:

  Address   Before After State Difference Code
0x492dd252...aE9D12A2a
(PussyCredit: Deployer)
9.071800616428782849 Eth
Nonce: 17
9.022156628428782849 Eth
Nonce: 18
0.049643988
(Ethermine)
761.500288381318578761 Eth761.549932369318578761 Eth0.049643988
0xf184CDf2...f4B65CE7b
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 493500119258690519337336285611633329626006909857628506417368191133960637030770257895660329694320012437547911602278808165438322541351190491703118760686887959549987216964206795042412181882127831587422456793051167728602696462801529102544143651878042987514367476855801878143780442823543135880145722262274823951807687253023100242588121895400503945543268390704530443686779737784416600887823181776364679233749409977217878438906313563276950952626391409294900493042337146170117899809020280232056170716209059838895740648721762961432970630660417588720041701251384317786828105249260249164126629148258392108342833493746376943014507916398713540364384279701710118199416295430958460762515290732643128104336499187129865441387273901320137877126266861427588764573268079140683145622084044920033909399850338386580894820934169962637994296152017418693765617120567461273054831570114352356267593977136967942377411479629752994065636495005750458824451319872034161638076981180573239122641821799740162430443504293138530061151068410139500010636408666676452243989946053346967024012794519236048303936487955298607289439295796274324346432363809234984716426459099216610561711729340386029865307779500741844742020173559083411510989490513973107607592529657059749310057029803399324247954760775714439272154466129458933930972537620262136152788721356747846646752031304974851072883849578427443455352901254231380743517700851405577005192186320331437647795999957713443708233567560043451643752813817387082443925335985634744305377968405891674856393533629163788236952247606410092354891353095548407932873604002032004567809413595548985204833226355024923006199012774155018451043870912730154732624539296082188903447622155596110159382752677679656210563338728317091901958697716818978691421800903758205119247590859766494155800991755803353050568686304643144079221050083438723936060490878420781215242246141370073416493067883627375794923194912396833299919497571008828244733479611233197180794695753936897140423471884301777299829573950798447569912412876755975754701687304254746007261306918117421438212644346399282726588837889406393695505547485914783588561214105320785948549524939599723276197591138597203415370682463956457153034371748145673946200777755526179827188425410127894802514821037979261901664980228877099373568202291315122678427742706025106724173942630725247829659795325887857175305311094857970927556802938875349954517023510916822870235365968188137077360648123898423334482933221059356281180992351381830320979552082770012833206429696511019225023213494029976351468295356602545856719508906550584471838192739288950663286544182428990494829107341905227579525197202843143548378870314701307095253570730367753110913747534918189068948910496882724835834945121174301245297737493888958305394521539360909679429855020555623587594111841331240042576625122506199368222423902293836422216520236003357077151107759444903235742624560191490718265260211270776747259713063802878541624426184523748503854699140364132409284288179962808471870441828997716387971487982198340837943700342729463681810773664959576301633631353949831429717769292081361306575514413997206570387927745833986272415254700145664536266268270690375030381157415413359712672512733828192408113443539283713627578145933411824311026908440628468212106084568144358261042318911159484187701093023502592199549319001373461324644629925791306817970899634618082309932274228584080179414169160893168444260855331752190959490856513062855445892435692652801223505003716173955601190223383261981298528825190686396013604101091614337565605596254895682025771102359525997867731567516829094012454783692518322244309135260635432496237740210420992248350135037150548287352939142204120251846307712403749662792848516021721760625027782180656360383788850067928509044252657126833941964964899962273128542013820108783539565918472001130663926701311360418844904724268268311209024471814710152168331247394617423547117912550907019291342281854798204137365269537567422664419014204705199397503905374187708740643127748258348988439123297291484037974794876846911001473968662345356172185320827490116889954603732095251003388058587246812801480713869193988612903840326769431525750846367860825721160100992461796815622282923451129605769107236848665690213915243353848964023250369457091353805465979076465805180506361293449533072577977108982850340578868843172660455074506407781437641729134318109066516489062038191432306423494689539721450664584098584573691649283656026684513378711299793426849230109810389652848501327270490470592252092874661092970058849932064250232660521644656729147967712375773943085165708214538295038821107198346095447065114970415158888646862532040901237611632389359558071083923721995668760544316891011453730287585212741428383878657412290478244292010306696324548207870216887978098308689652733096297374844937238280386859638293296453997957560209455280512359492188439099667631070940403084209202358947004221174856467409034100174187921103247385805493985253767943859972485042983696992437305432206711904582378488096153698401898495778247045803713850577426216489827694106616494432849866258531991265260677925765371996362027682504817384458833733013000440416676918310726177610166814668230331600282645962191470717272119457706901393882801313562423566037203549879017206009859113528211823473408837913208605458824384175897879155975591223277139057674779773582867143111721971427478356080455757328062369937250758365715652342414113048666658351436254613325624526438318698225311926891537223395549248607251654197687028033732175450571804852337855125449205553139742239496643292305045954193463026091624570337132626588704823938376123194448188674269320788010783354815207128838081007397401946402355701327250344121177454055329506902144704071783637360950266839694108660852113950821024814559160827830756320150807295833542240955288151009174972121904325395522594462713396294272038702458753731057071317388529606425480369310730692363868329744905217489521047583254202232942747868755753734279266539637462562170477168253420452036469420630123931894405701219452660302263912424667314616233620207069127263319967102018505906846999102054004374953641822840453831459394888651817941825331694977192733892902749932044470564404325932002563159602563755039737402062713812526017163308867053630872647574215944882122590065852031638596102288274536151562985289079081529873910301078593361400548630141953327614897303393585275557801708447089379777635352728373520564461111745231270325815103148764003793400695383414795717906638313408665986692420795238085485519442749020176815638829026988432903896756265075207917135455752330905062702016764184039666313948624547018095626760014332080900319692773927868716542112428782115530624634212026406569952243365954576031328791596060667837194145125190217093677211314010221603859311408384594701881114693273230328298272577389474840813181615737059791025094291007436588624125178333167076657915646551031143944480984583047030448821881985289628292998523406422615980347630481458509544449270210906013130346335948645641846898036403632500596701291702472066893940359727601855856008906049913047280112109500718769532915213235992676887513154759669208165203255100722528038745818166939111074135001661321164916402963164564594928787803849318673983066811742986535488291740102700376011586110575955566446786606651747431627682988045744980478304683365643827089908813924835311680636974475715918635048824215343664871233689584578961265490556419801420718862125650106239952054589685376254022123958007792596511218507511725899273596165786439644499297495588300023539789561266717520363080474167645699355863711555016114326133947778908088404201197769636968279977181566815629115178352424336048152433797881550688160949675154363750078551389059869099041363165662044969944616331287973105838130409162008278425035827160709910317032788400211893355520118022569402054911391978160199593130378818682153267852246808647570499542225177586098933356137325580899301267021009373935161282833591031955910607324027233226998590434050222747879886386838488733154398820665148578435939871421681997324292900494639924455580154209621129017228522494176290780795201720117824896299596414278587755918954283672084852130659519694151083103132797240547552226175030513873035332344854872495688683941532008468308819296617473009461929200329394462824574849816738627672136766583994875432490323652739184368413813592736729660086958547827171940353419516665709312606544152768554146686194672865454789673661737679498329794869877011893567743988297661603492747025911657852184770740304886661469363997172467448818863823691165031489204046334628999426414382916255184917191251826931752965281954601652201282850851298810037293172798312979885016756907747367359859055533921788918659026432461932980165208151292743765439849898782811456831726444136761773267252558842809372054423564312194398653992979350687705340298250406860820384008621743384012280740620133340920179230873939618816517893173849820686689418047941093093018502307706993643764674878047817171814438735209352813253926985881417174920008570528805638125167352556168181992290497872164082621355451823410530784348535648976810980736536558945474708293541457954801015521717812898248175083630410527314747965931226690476417787532839343628845838930140628828712799646570199887315252959293617463027263328179641528679664188916858638806770108209337967260802132676618584391114770564770745006783254310089337152930221905622465926659568868742755249715793129214336607738670498469088314917193867903736609299799120368020825940946678853546349465580335167950552868449267634938722757333325906342150846149099791003971092202594576559670955550863036877616161729555661950157602098301217053095905415254821102657474656786577169170851485154925322357404166895891361624586440042571758504931281152158362843640173056316779452987056848599260646508799718431749485858774177204237758041831745577669418360196949170098603531727230032015884653773160562734052307223872565504400156054459085555150190181702716793546639453751299669743949479098689862702702798166056015290690933755039933384584361558427842029894833836947589787545642287165191641163375602360483206618912966774051607131060406010274347079780926946108085992922471695435473004350856164331022799061042459259380835777456863049895701435960573598342519332591566686351156327113637925385199731715596633218580694103252485066693101962830191280602390033470045089912648611442096514740275926226013223279823111504462027160539857475559733094607481155382660441413158696508499694349632891492849285844496973663705194165274900078199518666831732767291229131355633448631404052276924155553630062752941076887234969176454548554096825019130826677808689185015479851241992528021296636859848301137126293785451983024869894246516494084211478660571695686738857173942331373561306155492029019010476285017059459202979554048616527456877633212054970473829892073707118625524664764494188931617592331950574070186453695616424006810187857030047502289783535859533643180758009809804206142292023427530606181912027250682159199461900427399928416013168560363031461337293042797513955259227324111394254322124050623325879267466147698280771133137278884526286936765585687584382116887879843311087658629785591985973389405784465261728487307347154561013369960554705810924497420756804336819342868666131693161213957652176508365369908469371597350522215463463085634538684823627166889476591196889696389101054006993263441279632792025942106557772816974934027564513270068279036911281009290669706429960878016655797529155001392346296834980485424875810957580439910285732598845791437420513404571489078341830162013058864573364400515850458113086039348888890132785790469991745077394092086614292451019158462249243198412320565672443842499583519861792116974273318448839437869153400876446273014378794472526937946933411127694359415511122445129386645729956223101013932401449089681418325473596588053189757319148358549194988796687243884228586912987645676500378466386902492349534878440709041090401687135806187839012026774682908018662515947307410838477299540204498629181310756780932637289846615403906350217844050735641769831835182474678808381347236230928884427486865980952732875224007639800086258597518268635009601422893715186131155700460255125133681152913272132729574761302179178667741848684480621386613396097105450798712592811481606552582004708824147183828422271595331029699960852401611576798339285374849153138784893578715608551388092487257790958901203338183002686820239347335546442488608278637314332740172950884374799207827386032351521147245455301244780399297943921668991476731520910532989766493187267726911667015406328871667091913364788193389884207006169901668454233729390086475157064637694911873858689381208607840489185756992106019986532715636746887269411913794818947373817632593213276598120174597823154030665705825238325885450127946637306373366520801109631499317436739336501578290219816296632470898757769178209118162313982976415237993182622643706217992188361155000723186858630487406029437781106648342600771873522557158747126490292266635676014304630091698414643856273320326176953549740773558394520844530049133787827595959622693329265297229593156688870048220756734739281344167999481160599515198886260039776957666826783119394531965581233501427604793280558658823435915338181545361946746193783761587787136188983158239079839879533026072313190205469260159355773089650544434544157059005455643751797888051674652088908364947230613854919524377378368619373260077484320253481933767532528625516592727367813689668562855876929168022750842164131301568692207081653364869814804901217858481642918741545865831175104719646430636729689852742790238562151148016813883935210666684236216022759019781965454984836065470998699586361034909348677398766436783504615797211099682161510237843201554198700775735041313640197506508673507909294929202784872900923495419626763377290261523822584740870750716635303592735693294576839332348421888814999863587142257949939431123533129961265857023400164819229476925056062190316971508847700332753671192489732838717808354684503498509396185223189802046017416417767424874813038404117520945417799795036117942667315097858675255440806212474733084193929202762985286386853496987285744267607886334899990537545733208645510357134636006119991888657997428353444868645762983030007357071523497704946616443692052388086245145445834875041778449997720127930279005502292808508979314809653932229929279556859244364922189964601819415811957628224834361766390980874779608274212317639185057030119915735605912658634807265599601237060850675613536458218749064379979620025583971173006106154877079010775347552624908041301771150846565171268460812950903650412662720276497289422179094970587539796790483202090690784777496698168518373509470402498969721069995110640797799663290276320546238780891194324199793565252045609493467767021587597190895164805992233846851244162997599859784912260087398715083654939000621061076551917946521040294105850406998980664831444679498020419932474467656764089043791568116594321929077192735317524499559858776341015471698953640930352527786208562953924733923553914752876452738221558275274105132550085559932836891219312634993487593620428892990666269385588989420379942217271865971835522763311665845775075671499232518759716287531592556386787496217929246007004108374866075755889421606405772315809704954655714814998882372747842054221957983290515545940499265851881563329283069475727674265595578388174190434100712338359985857848010369032652930933857305341581112603600534783760578515688593338791993771657073666610775551878838046484699939650157435130587512889277262662781715734922048011198016690395751872792231970374268040425503015704167767291326506266683172978188071640661639851428779968954747785892000539535690278322489567777796499051119980805197823963005616282037242785869417877714177486184500955408112507653065456808228590150137946721637706581018974245832686855185515014242344379677536587301112670667814036415449840108529618636292212118479430215205653826022072910447482205266802088210001228155209147696429155699655550629632038980013528332600038004059097165223184359257478813974379296595366640882853504644705479957637892788855541158110767711263143663843448992029052147400782928968109251519758277196756880561896607592729601618655840236210754327694633565184129553406016167683367384804125579181362734676766518383775211319122711680415028636211214093936881532033847401598386006315078493961663965794048188070148874006053768046857304713102513135273766137676183629871213142679797493596283667227762078365089511222977788211487337593967118576547272526592032552419982923874721517854842390844266668810507930695544722047125368227158319308171188281444269359125050109026756749325058083511375447476412440263724547177544146193321894284970975342712752271696243507306874195889701839399493980588355628365388056273193253120437516217644243214214735230196221428886344290456431309406619985282766828996408106820619851038492693721365781408855531137745439873055944324529481467908871336594206689390287348248356429204989446448081353854066746059053028684636882255241378882190329395907006583604987665838650418992159091855431699321557513471667114589847052235052979386286539369517539322767405022829089928581108541521771210680956931921805313671975635242004610594184252686198968869791081915524557216140799118079538699542201540935200488066640469497726683884155250107014139000548054249906635903403050547476775867750370930473254616407481642437327169555161611046877704644476518795603747285048584264167690173011770644036509891572240133598398566935183144313675281100736710507658827729902017897682814540223551328548026597676878452172105038484362874240252726650549460169653709518205529611375387224755145849623928758081767944323132245791196367467281975158468328700484925309243717412163724259001617259601774122579195721014989716819413985018831436542128640264132306351526289185883259920549599456541511919379502458385008112864634907657125986326805401040021831054953349905071251984226698184478140032369622548286455434798990967993776678141151970044194998681317372744983234214114320643193009259499856836696856103387037221468923127859428303895328440978499875856424112883946065915569353571116651653815368691473488075460271561888838225988143069728649286175976606964481238272894803003442513997178317096346338641699735797087976578018153872889481751473459650702751939334029462688951477459906881167458462707503780742263157063349494780346310587468495900177196204727491086740949834646545584190540324802398634825607669323005279524531591649440070320437962204499928899301865509547276372340017281738646667151833213250507744993765303073521522354103035302237254853572048056968277577044742680088708604547028748923968329552641028028994274265276903361260156774598478211738138209187897664307789788025943039743442884875206493839889804911205831710215728760627524169271554822120431562909978306353120455253042133168311528625498142121642998586079761467481959058491383005256989512376923110999530698342595597043040334873713967719352996971551603627101041721636400978085083304010757323258417829241864110969979310578092862206292621620387352938571581213785601957119640282604889499796232353028498089154723257700320656111911571627011677042048457429010068009382501845841718566503196387912229838143255328176479917680092356683956977543641103694361163866084550198949982877174819104129562761857824992115892573002577016480565231465947842308472550203292974592194347610261823258598314105854136056474956832109936115839329005190455229868680098763018625083480245591492258545008650971452470419275128999807973812626130011213864404424811887028164764235355178813596216685108096013415326258149798607725159601669760668050331528703981477201982055076662928118501187162335152454586979282396324003590196656609192196946337474932098770923157370241975139097351583259546553759472411590000228534399051078081468797000603481365088226845744784057231389950554731860367614932858611274238762096293834086385473693201273534337713571940729562136896632975400414329057214590667731210039316168368332522929429857381235240526128005462835921337100726794315049350553784500240952972441482476484462627105504977304060400281303004355534813819685867602572819948256149238547616253905807169200485151647682004751307203184437438772291108164623588227725747524741473378551082330252211752701806771271804823930885949713028279081403575287257920096664675330662104199666839863921104137894683312632738696068869045736996854661226969191776433323028508164593676634339229886327057851680911779320220539978331674190273282467628650723852782908764988340649469605008642590519036271311074686943492754635504909381354564414720795235650678462592998781995427838373999018205271028702405287683018719012637791002824772235995160924027822211719002352854650761043779686584332666013617529963093686166540668952465587423953698189434842043609878315831031181593602745849080455331530294587318564874618887266751182701391949725234327469675470598231138854574317533899732842134819482716628056630782225749052675626607472560107225625557178561097126827047406287425674467475679284158780074034233760133166791713509869490396752158975245615210499111854776578294160592826991884016248270266064913958801886353625604173164910459336613278563367680557564246885762222614261659185910289773392371210433319194430555999272982409798460241983339774484423650773815967734361081401872252297468503467777014890125257297748201414718073373173268302068292128296861517462952975719228510918488634160087172997895453735492833783770003806757747821982585593120648935084036640959655894000828327686532281273526441624664759295899808632006615135384649711303589158331519509692927688400825475569665534234176380686699207376602977973349827372566038496412055886177068238842816381159821386850102047210780481165272758484860430765599649452279254235331644375863612561304088472026934612692776764252421592552145276857846199530420496208156426390922632015736766119529511446577941222449928598403417469649719075712539661341877055972208038290861745416665376507196340584390973264986392195498164238795061136816633114049140868445930788301950814453888236177021508170759281173944629553525186454614716757754310217952516226738182058252764107576570718461668914553327333419961663503268474745522082502030332912508276120931617152739585072611634202136038795716038425650170196025957207058419226199758757494134211343481854649194956972126337403968460244207183498235556680112353362753879700463173968161839484257324309739131484636676822065756359321157332142026203014592762126724040859900342452438894796495586811014376176700373692560288225329846180877419260762982988115824343253429419700713486679568787603077209487596536390827202564373620967763418438237724086955357886497786393643484741875570617105643376042645761767824981599783892922997616598638471665811827725530392371070541579018222728170661498491511992126177890172452651699733172077968463454650162303270250262082686192858755849826013136294691062455801748138987202753513497556572185309461157332819668266705509989558976887804276297123807934229185757300715452828677858741480725591140254535103578232531692270636371933361528002500293356058007323227205034936501564339233759849287240877356135859087414497979693590739933375536660835454650774176656226169601463124462280219946949622321486520711068894610999070740327038513293217425094682245129718195722033310269081510626510394203119105751361805863901611535360700360945587441803705104218131591582422006920627174398473740716367827916188321427287644089487289988676612474398544446065190734551461506948423368090459874707679500497791155144814278132400873553326873656908202866539406380254727800355285581421905395111721527775491069699036720694785878392877289796910860304507221304899126578055697592351335438276107427903742326149676324156837576365379774527200076321986095946490697419106447992396198980387677890348493922549919078444361620818432331196270571541950404517781497446472278194079551735010232619091705845059046148393499762803420091391998134438950790945338691303821194485559653543945534060536849787409167964209904357241380917166028000862634148515116115700149360453072762546027874866751139614766336069523603359297364364091142070486649119193160416367029325165463077840559879570791988589572447569617726537679144330631844952209898081316119227185183948676563127653213409004424957719992650444650955883354199543033762102935415469864054989301009524457533317884112240255300952138031529752351774686933422719120172800516511993225989903440786764268119833687347959272578930628197210448898450736907144101170397222818656834716059224770167532769092082435663029273252801555030561812392162341540561899722476716956101698588137911421319937881632867226219506617084619975081758549658729331449580724897904306283912496315651911184858346824171272596308882794710630299250471882030491132522854733010836620793184273607652837408430529705668049368480140805438950609812788543439055832910112843013407199145289213300405080754364089751840475288337932154523613356842480936958704496009219574365887874527284949018007578910115134725580885537873377462030134481979213480804275647317220751910710748216448821958887840365565736921643108825004566207971448329570315235048814960707762774947803072952795358490627591577379092974440477640165205650990159152648517715240302065965421988960445642110621525295036387563568174837047591838985612255940781057771773855520120451764722286422041189579003585328907721845854427945353875986698524741297321333829198410959643314846572945763732785400013916398917529638152510264626542436194933099704889369330701184160460576322069898928181268507340281338882739601816489089790290203026438765035327386966002807882513611987236523881337060648440858259916955446482195626669311405488596881145037500826133168847385061204648503188524274656265966212936614595428885296796189905271003288650112753249514644021584416121517856225285098043169583128668292808966052377454969683669200052883232987330392811359227760478787022101907535102188490911352747847888734560822579243969254986918141428827581958475410461719671677981331389488683901502298556567709881536611467322637298467987042115784204706883055173758680127363631692173372038601456334907201587315263481576868981404147070847112143420977319118724363475926545833380818973587272314933079279513384717884622313260896834475884237696339916204125964192850722364019239838108435280761133799024155493901575632732016987374398130641538225716943233493873086152358775559082479602789181792938291470058184861845612747896693315703650994499619041302376703294793303684532073306778055798281571000711877524403558184686954907709109955684770137404673552152360839683352938849784156584847485283307221450763938189830529730475517882903941438760658734346984477624352264351623706962163743621324390938547755247300019926830025794258677002299748334510638914678776001511817037048453028018784405393929459136263054775963211794494356192484163975370266071258665990687652873441345337352648761134506131249807629977676737463784212727866198759061268628747938352303896897614206472096528642878534774784902635053599030793255948474878347590725738373197155688496439084856696735338390508594381157830411126092651607632799622754225448216315844522773594094185686367375069632390378221503756936798894670423204136176718041610310369808870957833800613601692922844665934254198114264696149218183859331029998558877719320210300334894379264910833472706028026996662512242794763659131460714874916821646130286664755335943270082224603725665723640677833238044501574916929530175344973200335914101255456323980068946137847991381365492280447654983493651765603030467515831708487350685798855292502234148561792575330978863903501975163591483324628478569057620911800618845995069526466343515166962656585876998829438479160586638743346951407491715718526907056225874812945713954984233506452033145753178328675346501407326987808395895457205551518158840320044710619668189730581944166100993698131988233444251789944469065596625898313514732785921870215679297488184351048338704837930815676217159952166471380539195718257627849966451073677325733945235565226421472730493903451720297721096146711882832088598650035535617062315446443846258983070151295122629649687725535535521036203027334998878257404086447897029320478958687896110916557254712432419833863918845808394546440723839374980326392137187408736469263620075338774433407771272243386028101061202558186288059792824105917582254980660982051104569869819354111135539554349539470259890748615261816111718435705366532377957866876181053725512566088838903029617741485928097313474024330635885022007503426014551850916211007313715937423338261762095794686807348764000632820168031391708407996326861315356000085095959861919377809620675688749200239319381077221691996142830735388575778421846099724566288166975557762989526890066752320493296373061455552275003826321002470066257312318503613630963694665444720828492187825631402112934500195454664349881327147865183172856721992091987935500634785887827005033885294137793582275114292691396423521730079166210104688789367400894352553977606832231851197813665975518924156038156543584949063574714704309819484679863082771712856243783636199022881160232717449559204395076682292031244350949167533500966582328921867233236334607967153880976515345327467783940463548385835135072263535895121441677590215837798968189700372555420465799613223810845328929324279066118507834147014081827311796793540523654537574730517138368661970657503381661954619467176583307993224059450963094009758721021938064791285797004087472897108333782606619407411799267399565819779646311933302568021290724786445085547733381505503389801896298121053542824061897761625798110372500688904142002756079387344065627187736475300386754850025779935838474725544502267280461340263570784208007287747288411205115289595747761960829627677754199491108264183530893266422678759198121605255697796973019097535232927385539176488823421642514798408773778354096370209290449045046299802341462171052824496291595368251060509528249993740489298518282610294465342193704638674553461510420446487112699516576172648622316687538328618200817920773243089178897062784872950221752475735728779996852535236090533738211164881394403763394622612681417345499907259144762228311195656180496315535249871080287082167894669391469665774499163124843204270619864449051983843098501006749006304497551948212291324365502183691589354679063819749937633038783239784425483444422020553421655695869968410399885886197248866841171725663568209322223346859209510956172107458451462955081437017617276701454556675017215101269994662233176988116141415881222867955802738347796325418850966173061395621370093657432205409785185830778004284175244199744978075616705834305611997564761796282996313833492471104239675271267465630192695930284710367666937352978861762244614346538153199875897510632482304298607646087216102041030240699578289795625169310282684666787262274652549067326275018917798064526241113901771106110353233575628839770948989462071838217325624521303112276154647418541408413280204010583647451299632328315040579960583259274808068147065315045039256528325535910287547994385867594482989237177665460911668595946979385538017685107210636945785617460770198982685116770689765238657603468272572344175297216647033658244715969417724921502033019065816564880662559246803922658312730659846768794391060281329763834640930217597515620955336173285584061204093016179171502423970492548075174781466617823937527901085435813558290057959529592040035839082845761317803119651545964586358754995161085081741744712607157549132756095414507518003989663464002117158193325866439173501145489421901521567301512072767912134299245043623114589716955661330257652145055766209199417794836829919844898214434897120743954972580766035377263811594273832613548783170034734219383950681188394222837252561843065654973630642270682411790148775053746014815498515763317410743912985070985092176721212775825729696664905007808615534391422934800136088236589878847445595702987638876466416240420834710462046915909861454436656956790096823743660391399241454686671095514501946436173761771921244507397281029063710577752999046319931749465766639956461959844479145647657375748007421894834610370752631375956114046793539803592883022324986891631386650608166292921833361338481208072620095842423708722558556523837957178195729143204619283893675585335994479854363340387741352924951750672527242018359642403899484780802576279103201431470186267836200466291766102680853094697025721053555007346504164537089184328123192250269895757973387187638730670528417458615400852553939344626094522579805346170523503740942544464124644012167692884877637263154750914047976618693483867430747884541573832409924757603088747086316291625737112259089013970004414653684820721601914148022718585901514149601101729056224247731646039306155561185711702658113856947955250481278758199291460345322083658324715431232123644198989554016962697866489104523338882273894829055295966116377038853974567719437564989908461742684878160364832231920512837236753343900698974604059004780230313826373692089361778571204485411122555453245171144428498104012174582048631274690904359890106012054819658010513549097984327758360853957739531578589861245057961537072038751576879908539681309584639426907845246001188353828770509812362575510366092340873201110183081109979797635539226907860095518575042929126059580478702671014467142471386763391576376116010088034116670509637121253224384806926917691578986515537880470143664335987131577722591020695495961631945831025518513863191067984904381116999053543331178931342077696459703806999477204256662359936507621502769688961808929181143126478311173818280617327473512288694758339252374180864738228363513483390225780802552337405145322030290974222932101011760120454697665449731295481247775349603152164297610768954378595329104848227165180558718347130162787364774186607324176381948734740596356771234798495363916888079807787524798408122184302075010789020399262081081679396980391102044039556215006323240643171168200322796185587371524773760557284106382753316862524528221893262683325028200029616121504406086654327170098688133902819777212387968036971684218660388885845742675049787316004729625209487054576146297239958300092725987930775102700216852072840607775618397671152440205767291926103626366101443979215410535304187256962043000722074109950092495885744016246102102200896958939741311946180694725256313020381954700592774246771322304903917909923141069030632450468158297415907992463421459410378228632615396064497107921810982853196868443942997528742638907591623834152991632568933999548295396357079041442983783455120983351253226774383752580787701841661808435663474182693506106011515605102130329366384325450592763423818886845670106702649154880501499191507860215475270651403161912611723752671341398607174618832248663289943018250568306422313311638961678884369968938155997931450397873654566363440362104314009018703029186757903789693738272915790535250582959225762392504655178333110732616233813276488880055601360665757498889064443873427576827821087488704129321083003688282721127673496112314962100285607037684134988609163901982265787600220326165739078500387576704372482993818882962122117199270468289907409330188355527793947134680322830496458092204646841761283041410107507784267634172281698913372562757887238066764868496562248962009718752731776689906028302304196857012254421200520990039602452642326774670975247758923675414971797450285069794560584302270087731573957308577592847700035606012940213161953130751869161644616679073817853443889199559293176140611199104901888786773320297132995086031011784087928421587229308353786357495467786380819844949675619581058075283405243790820199387924967178449239558772795359274717425095400504505089048127101237002854351488131600021199032055688946890168510575510600122407312990867391620084177498511424606266715710473887953403315157374159851601103836860870353115568896252262207929251690229850234510322537599926124380550132648821169870241842364234287536495046858739323287529205340924393530194023963050855289488737237787921625248417483236819691747663690860253768229538967555545065679586760890240362782378123726349981785426268558210426963819464558079354403684201282428891124569196361770662221808944042407778747880795598439486047420475488700255061541452089221248805088919623317985852746350793732745232173293655396318259171426209288492836921778798972802951029721123583712556474216261378921012902544349488407491897661862522116286690686556943569561991046021060780588369622820736527978163566380539573725440065240312734627709711777892207696866667110217508603602719408639872022297308614696098815758963044840019866923551484692602001571648351431841120425204425899683162025386572377472264629214093491423309287048430129053598270056901865351691293352042186830913126433561767921532023386767942246276766858227858343265504836415668526352299981104520986055316343696380463432780725798718225889691842758494197625090940602262959677412692835315011973888516434232053508188928564304677993026691104846617154884649770342947663709980030642744675506888510490476905679120800604875340312347653207073474532527241557637587137264317685815968498421572746875512557939613579894636255911954520968326827005598729855928136328980018081331834768757464349478876119410372441358713326880141770555885599509191136847491958030049581661758457806873780672250562739420628428702636964152571290301002982760399793643755629332783954628881014387325386040254768838674403589287479889349200330376433730738892896398177354305981243310836371453653926516580841282987466542225696336861296801290755426621640962470229569799400854248151884393966869234718784847280232955719100517855442368728381588216470565341269907153292371118466317750543380562362642146675245610941738018093897525643303878325519630616144328898504630173856973473287967464344295394698762429336820268534794431857069923288234338099311039309789399159300156524854799964791116514799355891603074423731275418881734856324281694326511826863895194019561873292380773848549207417373303196671420795725610074650222095380316249426821645514564563988316475794350604897924676007053436662226176650868597569715389925830892900133416465918088159121181571509594743534145779694885636482863558012324745940881049546793232835513999844908039366163601628749160059102814547119572454061274599686109492331581028784819225636822973583021943571274114007708594339646215842075476348751339109989165910489442316629414913087098981639601789773835121682769020911795216093491846992422250165763636657231808294315287076286227512746255820368477238475247229746449502217530124514789522541242906229106268503490974995478099158073294926129721816668288792211392730858734005044771778479859970674378988800811972914778147693547656596847145787369792906945192971895350633094089923356918673524013430375030480413240036332049595467167143413388036278808359590585958536205009333251657982426304220118698136932048064567530086302262662971698567182689761075510748245336213100791208291756658684804949432566922072469138124578014879777171734062747245297636091356441132915462110619930061693787256331465798411270767095813603948288442265938215147446083466832205081829673402409789678772020144803693862704513348149135886313732054429285850544709877763534640300582528239381294824193084874851337159654700606585722552123514010351010654301548560579678278698531744127191682044560206995820777435841339519911863001599851933193953122634838204998006835759211648250277087966287261415125365419731568748169484543235987779729227614814994391736933106768449364044890874421031438608033963741697831046912888759055105625341409262027351696064844897478220528846182596940142538341993324855989837716988904240325295614604205949857826507347713351545238917012101110916318883374702516106924509721958876767514247666045805782430705816554516046604219923225584851411185128130925902027826320670486688541794824191176403881300885972925428461418983857341558786425667016016939130318476198123149881983763231045722516395831097205000678727854238964712007889780375226185897560427730012868861968001407843492218038162166373790384152862269526741058786715483553557324656673011913099732317408523035571598034167572091324413901916845708439989428141815483360031202562536298976842578933362102529687343993578555023614931085031762414078418662638231305341524871800314313310635100942064880008381114550083529432564450545812769875041607003016274619123274586633665410460002954525829883889400257225423023410549811723835617978731412861105272606572899279054856230391436467143461676373639548242033083612680076745977857820394396606458719678449869747189427323395051777099165664835962484459857265001845331652234833496738883251168185552970758921648603072964494635469576052871864131315923799895704079887041860615920642940883689894619760101420706872584333214408972400308441316014914969948197832201392092624667479070033957400841038615238908361592822482364355937132571293241777231815597696987284338540917012191091209916912763674009152595156385827610038826073891016498586102603912875664448300701468666724403647416308440903518540856050862685984070091947697205031761606979124816760334944329561755423138304224955235700755769589316964921627188495218774094810736319312410349897537367524430898452952250614996881518798661140234099096367940929942806541808687082472070067359680506871325188349482610147624646741966582373223202497873255124446064055917546096421043817806804635342879305951844369108367112022445570959868323500219432708009582516151820587983490796110877949052828751082265773029245280174106246776208659581002836319315156399901979794315725114507970311094950232927254671130924155504586858654743655102965225112999982206318919043258894091633126251693259300334028573047772654140009419140524734885470582348833962224255680815701198169012331229497030819058807013885216203624362479572011148517800775505285289640896550621392320308050859718786400614549820086951858624286306755310229841717479942482600895905405364162118606882586460985797638355915855646731978409146328068342666761182728599034145640762884929517039317339906537429401525255844122954205023562751268381951117377260847461956166000333400263271986980991817995504695815465151693873053854065470845091097910253500490200265045720086003214864566696374787790963284949213194566962456487336949461438246973720696826320229123554359686747141081442085776566683494962826089756109685176019753860379871845834639399872621788412731160142233888895884167766777657981508972458155581705720911337115896729500540531352215526747091913217122994968603127648759239196489041515772853616508879466478768368042522645492515606556266316840597713215555403274096463231452547075502788181974789674035877885094447261174622584883

Execution Trace

PussC.69d3c21b( )
// $PUSSC | PUSSY CREDIT
// Telegram: https://t.me/PussyCredit
// Envisioned and Designed by @1goonrich

// Fair Launch, no Dev Tokens. 98% LP.
// 2% of Supply to CryptoMessiah (@1goonrich)
// Snipers will be nuked.

// LP Lock immediately on launch.
// Ownership will be renounced 30 minutes after launch.

// Slippage Recommended: 12%+
// 2% Supply limit per TX for the first 5 minutes.
// Audit & Fair Launch handled by https://t.me/FairLaunchCalls

/**
 *     _.---.._             _.---...__
 *  .-'   /\   \          .'  /\     /
 *  `.   (  )   \        /   (  )   /
 *    `.  \/   .'\      /`.   \/  .'
 *      ``---''   )    (   ``---''
 *              .';.--.;`.
 *            .' /_...._\ `.
 *          .'   `.a  a.'   `.
 *         (        \/        )
 *          `.___..-'`-..___.'
 *             \          /
 *              `-.____.-'
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.6.12;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

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

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

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

    /**
    * @dev Emitted when `value` tokens are moved from one account (`from`) to
    * another (`to`).
    *
    * Note that `value` may be zero.
    */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

library SafeMath {
    /**
    * @dev Returns the addition of two unsigned integers, reverting on
    * overflow.
    *
    * Counterpart to Solidity's `+` operator.
    *
    * Requirements:
    *
    * - Addition cannot overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
    * @dev Returns the subtraction of two unsigned integers, reverting on
    * overflow (when the result is negative).
    *
    * Counterpart to Solidity's `-` operator.
    *
    * Requirements:
    *
    * - Subtraction cannot overflow.
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
    * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
    * overflow (when the result is negative).
    *
    * Counterpart to Solidity's `-` operator.
    *
    * Requirements:
    *
    * - Subtraction cannot overflow.
    */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Returns the multiplication of two unsigned integers, reverting on
    * overflow.
    *
    * Counterpart to Solidity's `*` operator.
    *
    * Requirements:
    *
    * - Multiplication cannot overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
    * @dev Returns the integer division of two unsigned integers. Reverts on
    * division by zero. The result is rounded towards zero.
    *
    * Counterpart to Solidity's `/` operator. Note: this function uses a
    * `revert` opcode (which leaves remaining gas untouched) while Solidity
    * uses an invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
    * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
    * division by zero. The result is rounded towards zero.
    *
    * Counterpart to Solidity's `/` operator. Note: this function uses a
    * `revert` opcode (which leaves remaining gas untouched) while Solidity
    * uses an invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
    * Reverts when dividing by zero.
    *
    * Counterpart to Solidity's `%` operator. This function uses a `revert`
    * opcode (which leaves remaining gas untouched) while Solidity uses an
    * invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
    * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
    * Reverts with custom message when dividing by zero.
    *
    * Counterpart to Solidity's `%` operator. This function uses a `revert`
    * opcode (which leaves remaining gas untouched) while Solidity uses an
    * invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {
    /**
    * @dev Returns true if `account` is a contract.
    *
    * [IMPORTANT]
    * ====
    * It is unsafe to assume that an address for which this function returns
    * false is an externally-owned account (EOA) and not a contract.
    *
    * Among others, `isContract` will return false for the following
    * types of addresses:
    *
    *  - an externally-owned account
    *  - a contract in construction
    *  - an address where a contract will be created
    *  - an address where a contract lived, but was destroyed
    * ====
    */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
    * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
    * `recipient`, forwarding all available gas and reverting on errors.
    *
    * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
    * of certain opcodes, possibly making contracts go over the 2300 gas limit
    * imposed by `transfer`, making them unable to receive funds via
    * `transfer`. {sendValue} removes this limitation.
    *
    * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
    *
    * IMPORTANT: because control is transferred to `recipient`, care must be
    * taken to not create reentrancy vulnerabilities. Consider using
    * {ReentrancyGuard} or the
    * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
    */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
    * @dev Performs a Solidity function call using a low level `call`. A
    * plain`call` is an unsafe replacement for a function call: use this
    * function instead.
    *
    * If `target` reverts with a revert reason, it is bubbled up by this
    * function (like regular Solidity function calls).
    *
    * Returns the raw returned data. To convert to the expected return value,
    * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
    *
    * Requirements:
    *
    * - `target` must be a contract.
    * - calling `target` with `data` must not revert.
    *
    * _Available since v3.1._
    */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
    * `errorMessage` as a fallback revert reason when `target` reverts.
    *
    * _Available since v3.1._
    */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
    * but also transferring `value` wei to `target`.
    *
    * Requirements:
    *
    * - the calling contract must have an ETH balance of at least `value`.
    * - the called Solidity function must be `payable`.
    *
    * _Available since v3.1._
    */
    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");
    }

    /**
    * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
    * with `errorMessage` as a fallback revert reason when `target` reverts.
    *
    * _Available since v3.1._
    */
    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");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    /**
    * @dev Initializes the contract setting the deployer as the initial owner.
    */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

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 implementation
contract PussC is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => uint256) private _lastTx;
    mapping (address => uint256) private _cooldownTradeAttempts;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    mapping (address => bool) private _isSniper;
    address[] private _confirmedSnipers;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000000000000000;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public launchTime;

    string private _name = 'PussyCredit | t.me/PussyCredit';
    string private _symbol = 'PUSSC \xF0\x9F\x92\xB9';
    uint8 private _decimals = 9;

    uint256 private _taxFee = 2;
    uint256 private _teamDev = 0;
    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousTeamDev = _teamDev;

    address payable private _teamDevAddress;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwap = false;
    bool public swapEnabled = true;
    bool public tradingOpen = false; //once switched on, can never be switched off.
    bool public cooldownEnabled = false; //cooldown time on transactions
    bool public uniswapOnly = false; //prevents users from tx'ing to other wallets to avoid cooldowns

    uint256 public _maxTxAmount = 20000000000000000000000;
    uint256 private _numOfTokensToExchangeForTeamDev = 5000000000000000000;
    bool _txLimitsEnabled = true;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapEnabledUpdated(bool enabled);

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () public {
        _rOwned[_msgSender()] = _rTotal;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function initContract() external onlyOwner() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // PCS2 for BSC
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        // Exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        // List of front-runner & sniper bots from t.me/FairLaunchCalls
        _isSniper[address(0x7589319ED0fD750017159fb4E4d96C63966173C1)] = true;
        _confirmedSnipers.push(address(0x7589319ED0fD750017159fb4E4d96C63966173C1));

        _isSniper[address(0x65A67DF75CCbF57828185c7C050e34De64d859d0)] = true;
        _confirmedSnipers.push(address(0x65A67DF75CCbF57828185c7C050e34De64d859d0));

        _isSniper[address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)] = true;
        _confirmedSnipers.push(address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce));

        _isSniper[address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)] = true;
        _confirmedSnipers.push(address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce));

        _isSniper[address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345)] = true;
        _confirmedSnipers.push(address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345));

        _isSniper[address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b)] = true;
        _confirmedSnipers.push(address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b));

        _isSniper[address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95)] = true;
        _confirmedSnipers.push(address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95));

        _isSniper[address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964)] = true;
        _confirmedSnipers.push(address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964));

        _isSniper[address(0xDC81a3450817A58D00f45C86d0368290088db848)] = true;
        _confirmedSnipers.push(address(0xDC81a3450817A58D00f45C86d0368290088db848));

        _isSniper[address(0x45fD07C63e5c316540F14b2002B085aEE78E3881)] = true;
        _confirmedSnipers.push(address(0x45fD07C63e5c316540F14b2002B085aEE78E3881));

        _isSniper[address(0x27F9Adb26D532a41D97e00206114e429ad58c679)] = true;
        _confirmedSnipers.push(address(0x27F9Adb26D532a41D97e00206114e429ad58c679));

        _isSniper[address(0x9282dc5c422FA91Ff2F6fF3a0b45B7BF97CF78E7)] = true;
        _confirmedSnipers.push(address(0x9282dc5c422FA91Ff2F6fF3a0b45B7BF97CF78E7));

        _isSniper[address(0xfad95B6089c53A0D1d861eabFaadd8901b0F8533)] = true;
        _confirmedSnipers.push(address(0xfad95B6089c53A0D1d861eabFaadd8901b0F8533));

        _isSniper[address(0x1d6E8BAC6EA3730825bde4B005ed7B2B39A2932d)] = true;
        _confirmedSnipers.push(address(0x1d6E8BAC6EA3730825bde4B005ed7B2B39A2932d));

        _isSniper[address(0x000000000000084e91743124a982076C59f10084)] = true;
        _confirmedSnipers.push(address(0x000000000000084e91743124a982076C59f10084));

        _isSniper[address(0x6dA4bEa09C3aA0761b09b19837D9105a52254303)] = true;
        _confirmedSnipers.push(address(0x6dA4bEa09C3aA0761b09b19837D9105a52254303));

        _isSniper[address(0x323b7F37d382A68B0195b873aF17CeA5B67cd595)] = true;
        _confirmedSnipers.push(address(0x323b7F37d382A68B0195b873aF17CeA5B67cd595));

        _isSniper[address(0x000000005804B22091aa9830E50459A15E7C9241)] = true;
        _confirmedSnipers.push(address(0x000000005804B22091aa9830E50459A15E7C9241));

        _isSniper[address(0xA3b0e79935815730d942A444A84d4Bd14A339553)] = true;
        _confirmedSnipers.push(address(0xA3b0e79935815730d942A444A84d4Bd14A339553));

        _isSniper[address(0xf6da21E95D74767009acCB145b96897aC3630BaD)] = true;
        _confirmedSnipers.push(address(0xf6da21E95D74767009acCB145b96897aC3630BaD));

        _isSniper[address(0x0000000000007673393729D5618DC555FD13f9aA)] = true;
        _confirmedSnipers.push(address(0x0000000000007673393729D5618DC555FD13f9aA));

        _isSniper[address(0x00000000000003441d59DdE9A90BFfb1CD3fABf1)] = true;
        _confirmedSnipers.push(address(0x00000000000003441d59DdE9A90BFfb1CD3fABf1));

        _isSniper[address(0x59903993Ae67Bf48F10832E9BE28935FEE04d6F6)] = true;
        _confirmedSnipers.push(address(0x59903993Ae67Bf48F10832E9BE28935FEE04d6F6));

        _isSniper[address(0x000000917de6037d52b1F0a306eeCD208405f7cd)] = true;
        _confirmedSnipers.push(address(0x000000917de6037d52b1F0a306eeCD208405f7cd));

        _isSniper[address(0x7100e690554B1c2FD01E8648db88bE235C1E6514)] = true;
        _confirmedSnipers.push(address(0x7100e690554B1c2FD01E8648db88bE235C1E6514));

        _isSniper[address(0x72b30cDc1583224381132D379A052A6B10725415)] = true;
        _confirmedSnipers.push(address(0x72b30cDc1583224381132D379A052A6B10725415));

        _isSniper[address(0x9eDD647D7d6Eceae6bB61D7785Ef66c5055A9bEE)] = true;
        _confirmedSnipers.push(address(0x9eDD647D7d6Eceae6bB61D7785Ef66c5055A9bEE));

        _isSniper[address(0xfe9d99ef02E905127239E85A611c29ad32c31c2F)] = true;
        _confirmedSnipers.push(address(0xfe9d99ef02E905127239E85A611c29ad32c31c2F));

        _isSniper[address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b)] = true;
        _confirmedSnipers.push(address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b));

        _isSniper[address(0xc496D84215d5018f6F53E7F6f12E45c9b5e8e8A9)] = true;
        _confirmedSnipers.push(address(0xc496D84215d5018f6F53E7F6f12E45c9b5e8e8A9));

        _isSniper[address(0x59341Bc6b4f3Ace878574b05914f43309dd678c7)] = true;
        _confirmedSnipers.push(address(0x59341Bc6b4f3Ace878574b05914f43309dd678c7));

        _isSniper[address(0xe986d48EfeE9ec1B8F66CD0b0aE8e3D18F091bDF)] = true;
        _confirmedSnipers.push(address(0xe986d48EfeE9ec1B8F66CD0b0aE8e3D18F091bDF));

        _isSniper[address(0x4aEB32e16DcaC00B092596ADc6CD4955EfdEE290)] = true;
        _confirmedSnipers.push(address(0x4aEB32e16DcaC00B092596ADc6CD4955EfdEE290));

        _isSniper[address(0x136F4B5b6A306091b280E3F251fa0E21b1280Cd5)] = true;
        _confirmedSnipers.push(address(0x136F4B5b6A306091b280E3F251fa0E21b1280Cd5));

        _isSniper[address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b)] = true;
        _confirmedSnipers.push(address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b));

        _isSniper[address(0x5B83A351500B631cc2a20a665ee17f0dC66e3dB7)] = true;
        _confirmedSnipers.push(address(0x5B83A351500B631cc2a20a665ee17f0dC66e3dB7));

        _isSniper[address(0xbCb05a3F85d34f0194C70d5914d5C4E28f11Cc02)] = true;
        _confirmedSnipers.push(address(0xbCb05a3F85d34f0194C70d5914d5C4E28f11Cc02));

        _isSniper[address(0x22246F9BCa9921Bfa9A3f8df5baBc5Bc8ee73850)] = true;
        _confirmedSnipers.push(address(0x22246F9BCa9921Bfa9A3f8df5baBc5Bc8ee73850));

        _isSniper[address(0x42d4C197036BD9984cA652303e07dD29fA6bdB37)] = true;
        _confirmedSnipers.push(address(0x42d4C197036BD9984cA652303e07dD29fA6bdB37));

        _isSniper[address(0x00000000003b3cc22aF3aE1EAc0440BcEe416B40)] = true;
        _confirmedSnipers.push(address(0x00000000003b3cc22aF3aE1EAc0440BcEe416B40));

        _isSniper[address(0x231DC6af3C66741f6Cf618884B953DF0e83C1A2A)] = true;
        _confirmedSnipers.push(address(0x231DC6af3C66741f6Cf618884B953DF0e83C1A2A));

        _isSniper[address(0xC6bF34596f74eb22e066a878848DfB9fC1CF4C65)] = true;
        _confirmedSnipers.push(address(0xC6bF34596f74eb22e066a878848DfB9fC1CF4C65));

        _isSniper[address(0x20f6fCd6B8813c4f98c0fFbD88C87c0255040Aa3)] = true;
        _confirmedSnipers.push(address(0x20f6fCd6B8813c4f98c0fFbD88C87c0255040Aa3));

        _isSniper[address(0xD334C5392eD4863C81576422B968C6FB90EE9f79)] = true;
        _confirmedSnipers.push(address(0xD334C5392eD4863C81576422B968C6FB90EE9f79));

        _isSniper[address(0xFFFFF6E70842330948Ca47254F2bE673B1cb0dB7)] = true;
        _confirmedSnipers.push(address(0xFFFFF6E70842330948Ca47254F2bE673B1cb0dB7));

        _isSniper[address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a)] = true;
        _confirmedSnipers.push(address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a));

        _isSniper[address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a)] = true;
        _confirmedSnipers.push(address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a));

        _teamDev = 9;
        _teamDevAddress = payable(0x4091e425D0CC258d8071A80362A99D9edB7E88D9);
    }

    function openTrading() external onlyOwner() {
        swapEnabled = true;
        cooldownEnabled = false;
        tradingOpen = true;
        launchTime = block.timestamp;
    }

    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 isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function isBlackListed(address account) public view returns (bool) {
        return _isSniper[account];
    }

    function setExcludeFromFee(address account, bool excluded) external onlyOwner() {
        _isExcludedFromFee[account] = excluded;
    }

    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 excludeAccount(address account) external 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 includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        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 RemoveSniper(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.');
        require(!_isSniper[account], "Account is already blacklisted");
        _isSniper[account] = true;
        _confirmedSnipers.push(account);
    }

    function amnestySniper(address account) external onlyOwner() {
        require(_isSniper[account], "Account is not blacklisted");
        for (uint256 i = 0; i < _confirmedSnipers.length; i++) {
            if (_confirmedSnipers[i] == account) {
                _confirmedSnipers[i] = _confirmedSnipers[_confirmedSnipers.length - 1];
                _isSniper[account] = false;
                _confirmedSnipers.pop();
                break;
            }
        }
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _teamDev == 0) return;

        _previousTaxFee = _taxFee;
        _previousTeamDev = _teamDev;

        _taxFee = 0;
        _teamDev = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _teamDev = _previousTeamDev;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

    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 sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isSniper[recipient], "You have no power here!");
        require(!_isSniper[msg.sender], "You have no power here!");

        if(sender != owner() && recipient != owner()) {

            if (!tradingOpen) {
                if (!(sender == address(this) || recipient == address(this)
                || sender == address(owner()) || recipient == address(owner()))) {
                    require(tradingOpen, "Trading is not enabled");
                }
            }

            if (cooldownEnabled) {
                if (_lastTx[sender] + 30 > block.timestamp
                    && sender != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
                    && sender != address(uniswapV2Pair)
                ) {
                    _lastTx[sender] = block.timestamp;
                } else {
                    require(!cooldownEnabled, "You're on cooldown! 30s between trades!");
                }
            }

            if (uniswapOnly) {
                if (
                    sender != address(this) &&
                    recipient != address(this) &&
                    sender != address(uniswapV2Router) &&
                    recipient != address(uniswapV2Router)
                ) {
                    require(
                        _msgSender() == address(uniswapV2Router) ||
                        _msgSender() == uniswapV2Pair,
                        "ERR: Pancakeswap only"
                    );
                }
            }

            if (block.timestamp < launchTime + 5 seconds) {
                if (sender != uniswapV2Pair
                && sender != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
                    && sender != address(uniswapV2Router)) {
                    _isSniper[sender] = true;
                    _confirmedSnipers.push(sender);
                }
            }


        }

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap?
        // also, don't get caught in a circular charity event.
        // also, don't swap if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinTokenBalance = contractTokenBalance >= _numOfTokensToExchangeForTeamDev;
        if (!inSwap && swapEnabled && overMinTokenBalance && sender != uniswapV2Pair) {
            // We need to swap the current tokens to ETH and send to the ext wallet
            swapTokensForEth(contractTokenBalance);

            uint256 contractETHBalance = address(this).balance;
            if(contractETHBalance > 0) {
                sendETHToTeamDev(address(this).balance);
            }
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            takeFee = false;
        }

        //transfer amount, it will take tax and fee

        _tokenTransfer(sender,recipient,amount,takeFee);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap{
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToTeamDev(uint256 amount) private {
        _teamDevAddress.transfer(amount.div(2));
    }

    // We are exposing these functions to be able to manual swap and send
    // in case the token is highly valued and 5M becomes too much
    function manualSwap() external onlyOwner() {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualSend() external onlyOwner() {
        uint256 contractETHBalance = address(this).balance;
        sendETHToTeamDev(contractETHBalance);
    }

    function setSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        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 tCharity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeCharity(tCharity);
        _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 tCharity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeCharity(tCharity);
        _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 tCharity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeCharity(tCharity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tCharity) = _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);
        _takeCharity(tCharity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeCharity(uint256 tCharity) private {
        uint256 currentRate =  _getRate();
        uint256 rCharity = tCharity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rCharity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tCharity);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tCharity) = _getTValues(tAmount, _taxFee, _teamDev);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tCharity);
    }

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 charityFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tCharity = tAmount.mul(charityFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tCharity);
        return (tTransferAmount, tFee, tCharity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        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 _getTaxFee() private view returns(uint256) {
        return _taxFee;
    }

    function _getMaxTxAmount() private view returns(uint256) {
        return _maxTxAmount;
    }

    function _getETHBalance() public view returns(uint256 balance) {
        return address(this).balance;
    }

    function _removeTxLimit() external onlyOwner() {
        _maxTxAmount = 1000000000000000000000000;
    }

    // Yes, there are here if I fucked up on the logic and need to disable them.
    function _removeDestLimit() external onlyOwner() {
        uniswapOnly = false;
    }

    function _disableCooldown() external onlyOwner() {
        cooldownEnabled = false;
    }

    function _enableCooldown() external onlyOwner() {
        cooldownEnabled = true;
    }

    function _setExtWallet(address payable teamDevAddress) external onlyOwner() {
        _teamDevAddress = teamDevAddress;
    }
}