ETH Price: $2,494.28 (+0.01%)

Transaction Decoder

Block:
8763599 at Oct-18-2019 07:42:28 AM +UTC
Transaction Fee:
0.032355 ETH $80.70
Gas Used:
3,235,500 Gas / 10 Gwei

Account State Difference:

  Address   Before After State Difference Code
(zhizhu.top)
724.519563167495157783 Eth724.551918167495157783 Eth0.032355
0x44211537...8e20AA09c
(CardioCoin: Deployer)
0.25063879 Eth
Nonce: 98
0.21828379 Eth
Nonce: 99
0.032355
0x88160f65...4bc47B35C
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 1658869280694893033849345058670315544915963179779930240236083217195540609349298360418269582908324856996909726437485504332693489873602342733684027112523696323188509576999043714319859694043071419211757485920532819212522763037794117920177836117383443256538361834843743177261032999637080041919173269322565851510729140215563614345662975027087652629011474221587798116228291953199004405453859665167705434251435341773168683462762142299462108094483616832390871518564535673699677087315419672042443983123104084285145895918962612160251553897997995347832024940492785418663989686107744180533052415187250515295616838762195466139635291790619479172128226030394598801044181776585516352847056760344408409136379137850682797851215101173890019960512895651790244798665095044701788246250828586976367960505973520799903075022125071058727671267872488202604712350789620152506181572235296730147829798609754034915075497144413826346820029870746836570430669961839143157183842767025488029020115581886647640811578181637584457255814220533593875467444180165643023337828391122937053451265504916891798347260885275310706721651027089114785177225608138032821386550650263448237947278305690264846268609930503384610463143525437414289780115752457178260544935274126603187019682643380217039366705354147046361185804151755945522100137718790995626085822484879008181828942935234100438234955256944975329586958250951358225969677775520434069096872573415366364011372073824393277521223836599506778668668652364192185658636946892433680392034155544667978744784787594483305210944266049744875926768350770626754851848303428438522331474601190954086130734702855635420509582897949451339244832485346955035101985266862860868177758271123095701232000021574667925722541393734959812763111271876751380437738539510193869813010475392663425689998454355513218051869521600317521251728660070795638304933154439848637991860540415498747158850352465730997382998852887461847599784047142219965465611124727080150461499946926480560129909679337875964407192294158079668058115934001368820350167370031961352352316824121796075039890817918134878681377125992216004548138958331296011499540785096655288841811070366270018436017269194451481977026015324269322020263532875980149550083923564141276697478211582991163866621526045686483974576726556382881701698833866337466776984763962716263259917805149810644878735189643038652192236648012631837405173125750588279061174110137106470782981433705188174975668109559213018716890886871678625206810754906726863136277714990718626315999109634041844934775758396378788279571469102596041394843624991222437806649486957953015856693340726373036696974643620416918551070297772160250470365715329332455433287544416669344157369573978298974229041746695819320127113417162905612738981319471450041774718550850119144534354950006386862901634237670470793700388703332106163744889863922469631632310602583920023879070982695430684402842226204589745235376116687211605918871614409267069310435502096472348978305503317875120322432079333509984227659824492374047325253480035088854355983643875966473207248465879617643473762561299404915655266888843710919337296961397680799537737903835966534378247916467590362992840534401489136743469024251437532799273588154559965832009286316154822093440826874063220095787282679218021808176086622769634463370981798952018890920213847442080929035111404541092257482948166470391486152810335142902555943778970831820022716325847215266055245522432481096575279901084859374835891843857376462736234369486831479397696583120626312261993968453107918847611364465052569206290014032357389976683384494785046740826687394424470453900599571873536789031625886510346919952942396193811177358966787810314274726942989296899275896377082037014294623034867782974498989086368555422524367931185248254318190501825107508375723212404040259887361836198427860059832454717576911937727553070354732269908489374444649903733041237347746664946489382854794156516364417223637010350251532980658033033644870768310563604838707145611549840823831252927854885356972476865481542841596747876448458155539381381486983604706929410094460153427490752561807837503306475456998685761870535977467793422211304246381013772891987267379153991882462861055695152672963943098497899067217451700093110908316963446936405346157146421007334689432582144996655338677263711784588830385154079165763385438981361416377522700919570801278460626465890153306196560869204729126902615731451670815121097962917438804952598709561758088686629622100028237003348072950959104028456672352960418019649259984581646035432801431150077038714440048395652251429762294437934002479206559380189717849421836571031371881157276274403987567558326239523004186709381319112679333973846421302306973315292813731300589614397670740430628653642394579620590758431419695783045780204347110993780613917433484053517506587104389192067744464196503548706247705801041641447675584425345972019360605782469094667017435184960497717856941452256972367330975879233351728715859546367234103501748172830908192391325854562523485208936565783021072007603994273174898465311822071183160708272577921805222646149570432442035080703188866462244690154637635228625240747715645595031146397216953827172689531927707876514502943163628450801957171292143903743748168951585236709653741253297631285864778188334536622535996376361253767057237767282626966335527639472300249977425935214369826662676787329042703215500032704809376113227185884767410248127102393521622520042242726269683924221232820891430405216915873419979301932689451631602968509594497996964466725130431076258308440553648943081974454171445960013838566095731063849130622685846851189046771500117108032014447431202983949229178252371173743480359941199409330869540587126596465413276834638253425180161423253025926648413196245115192414184153620049117851124849268577014945934594049067197717896339675080969408513864059133198230596918510227813629548561188025298996643139971400009922217386127479585362315617795541710516215722342346620677647696132419314633409317942279001195159136420936014571471623883339110391211369221986302477725718119922497298045817057351646105525167319532279466295571902283112313202285108384636144338268955383663171022643241346169294261635573970416516056439407453390194890047168000752815522418706565253881957064004362026498499020353186077785718890876135985200351625973916487478194004936702014524341668594379560281204951524023735102121234222813964017296385770981704016548822266179913610365741302731524808653702865380353516112539797235177216575988859184258546380586898781263970394658031524436810663433639427777363658297459325475705634713421029356023019327890831771282832641608525040809756160330838933803408279730879428059814973662881036327962953621744865176227205714161065826101845801341703695195237275729611242417119399784407439283634889120576742667394882475496776347614342858423612963233229820830552254387434191749968472909937592278854916437137560503618636878909376360659537904790321002702421168526109455795776108121715001837988331833134638347894318654649767650712046684303425587385971722430728869651327099737636055245921989318227015806257547533071850701148332328458609115353962445222970157746178687765647742293798769581513257303560002200020871985048937440685284721798653067052242593970523375724623297172766941817346141332845193395061394345533080670736337586044222370217339197835383896000886634672602740299443581600804467905871537769273981523436798403064984696936877664943546869453111065247958544547019824884341496277586441622839052775732425120172606615639642122153955319670221449526087614414371278440024979394988676820612026851338475539263702627923529450745853404388960826269035108173399218370916896269450015811223308173968089794699187846619094321655385062369133868784315343841255658172410998409015670831794120938117911745950184065061135875165102636838208480944137840089963546490239559825583226352658390100871557312600137415539188265265664386524787525516414203237914744673322346472420941290044490896144042144603073134423726726467762814138166943956157165805541004251198776589176131979975804336639942689048526482211042772888996548682008408230880036076749741542878444647652585993904915643837490935486561738885531582916712203401594957570916000130839192556266711328124363339147066885182523134306348962521655906525819527863061407802414517273039994044851093963203555339663117442137267676481743245224432680428642181580292435871346008532841846046476291455290661200537528758736895850105209250229913345261953760986481307296700697508910197498516373435958670350085860375794088554448564682027822355856309240297447339573342400065466083752722832526399605730192214197830793159548130196125072817390638675606242439998197469041224982620944172033264922134539676094353786913903828590451870876362214716994983003413100258867568467306336665344676891585031241464448772440580992187800717764447281738259746642037645338217443577359018512026768645017681243577413395812498113978325589922179004802908432597595807902244257869558132451164996716223171886620364799456770382837936755423200429113148971035674122698551375256482610968178896437809469578535125154525375778157822127535853284857131233682849838087738925343044042297230645557444464306722521938145819353395629079233698123224047277350905940726152853209290291649966037679954233669291008143713372723411875212586553761463893383359478118297137395223835357148717054596359376621902129624970632544391047002102313495819581443031428759899949013179358003332331172855529932792236854761136203019059789301735024579904738554207052647123813419530377092038717941287699364718185018759103378910457200382332858813107053017668258834704350366599387755557530087919555766338100180793970595493985478497079224751372102773492336133056751716497955013494799214096687759964407574395294481015104404976070426352382555309417898708013030007163353973559713231531063980317829441169256349361605545526927396890461850852454495807660445930665335190980665024726788789115086630707572724393248814513274732568200234359851662774103693180766889758344482750049122858781794518630146323295908652670762224698930624565526968866335472960858007039153787702081244919099685124907810286398550025689589388722196333827665691508374859904824226340086176099458588740353263158981685313152855288343190111088876156784254344299292154801277489801726877108837991650300747884092451765462634251584201519902526130331221429226658334171725573744313990614406991611254568597691449453984488312893917432364584755604943761605507163914761147174056880651335460043341919623110524345042980310969619451393466751636541724356895896876931351953755153311582547343810237096755536306413665274814428500281168751125798257830889607166195896306057320608851499287399340816074780007064975800218896134362610290833677464629255942530659207931861006663051500599479897006360328197058224014381524479663157142969824411605462111843574776023593042851973682480761122052702037353687806237253618073893904263585089896784108801568752379702470969655986573915806636034590493499027161218871514336312086475472184649385111278168838751630450839684334389907551777922286029439432803463130911611060354497004918137112276251398450823024233113697970704150995194593773670029244920062941264521028378671466736057046874031851110955632227458363530800984164754598158555147203898157245037563457714801199977330701155068708552255112083656223260919997915394110715370920680042618368277158750426588622199933685757976690724110551206116375165678562030499223253926521361058607827601121586505370105061191979310458083464731446925419612318923311543955573643435772548060597918120173544101595904845667452336306695913745382697012799683638487154435195169248100865409590281597935614143288460329338753085040702550386539503017788545669723070971473353973755540877224757689234240046112146958769785987243872585737320786041837829402973639767235202365419173177399541499706127150262808588320551187336691262186237529487483068780338402552212701297895261185046991450754316428502595245870077402627448166853716234863448348825933033811801587174988893709468003811418947072826986573573286126099374540870471438688117749125510553440692780968061463633883527379878985289116827982516028450438590570404292666989884732850588517207664545400697942489917852831224280238507953325136919174792684457290120921854321856368336117542086074281210259140977777500789347690920143085090571127341403386250448801459757697381083581338296882582473225082031866201992893131371929940854563173863311390597667406616893543741984634067834668265834992566773480215315020970033223757623355862098045723520143766102168355188906217099817867924717028090164371820777126560660807753567035084629366372186325707054772661660427955532318849813005711427678008739950383185811911281668505854386285859319301390746803210369271549029445855639002619483532428017546659733937869961941422483619316675826299918587407886176584333283304074954289265567662893649649270452574788019990574009657478393332311805145988819739132932385812794147653233056606992164819462168075647560326880781239079032219923442494788182542940303461732434894737784509488030973321512305926643768859583770308429611737333396034030434732458161282395055148142574512339081548047108738564707365654498742771070417119676438783963971706703004407224506530489698096246087040406398775361117193786348764731441504070309684642348214112367557973852634996172235966742042411620096414187483678346978696036927910823991874708615065327146648120852489378211757682745730698557864020879888497468395117182274908533682221709965856344396885106210759984270691208727647999280215774581727054658741677858081319028169066446558741324177166902146430091507964685390447248866081538627670646388854875424641074772190303328745369137374993833481922093897498710085267202551664513250841496140312835660236095977476255031392076082338101803571548366112275863381036393733517494372247278580939431158172920894978350117391647343708482854856693590501060251390868469774921260471056929807869067171602323035135208935731586379067769359641679363435168534068699229117906866423782426256475998319066234350783717382443520827032979140353940980845911136238267317374340946278322101609112868685651484861069006345527157695678904723006459086471705439416607941036102299556070677469928525340448979401253291251109866796697874851184371906400958417447981023678624177298861317048281421258671129042356177512885442075559836500825066853868893590375473586504766153489542922561554544436607320358909667117664780695591297242463825048951241274256954411516728432301298148539954241129426380895681967817157932936419242759712389855560199267436933619075643350904926819753224597044924312670138324021865139539849513569045377195361594749610750758604274571477993995458828686792240263679689036791282850156311705450747119302120147077879146081493648740193639235158754244852290709574270301496438840942026604762287536296903741083480126561757464532737550390900228517053948157368059000607708740697526998015203295767434597428828058083063162027295281106536820808283745454208678799170413805668231888263234660692884611776380142137974933719950125655653588989456341536468817826237840307097662108181886084115323799086953961099746256057666246916521370692552175176586764406180267730649055084433884660896049320147087884561219039264715264738438028489110800810493701276444642869319394119269709088958475097197717721089894913176664128769423938223518286781564269136798914396604643086161556687132626528582351401525104747361672720300186324205998958400924296128092462199233540106852790002743530755140626713765186002547016243321651253983660438011482338791437510656224167022865456820817990490526004440849236799914049948111635678445848471568888263661146105410553293159116928238352386039734399902488962754117342109125389176767226541816751563685512818861834843200067209970176100721794231772350489371564469091118883704416500299476699782812164619588966616936291708564229877665797972480609582897023554963677577711182673617595777896071687040984492030194476656920011367516523136230630157180918930935128334765171175949728979668113978038335924916596183748272138313756762702232481958835148296392282073908157654700428682774046671073075235401508561030673995456218003049040383346634660587823397097255775697742981178544073634615315012095075820119627057527601395927493197522649879159567052549999647833617181386233732850687654697619853479702455343343957155886278739469295333169352629159566232054449658956072013077927291990187471417335084940472128726658604090408656067060624671212190380385621820136601431998458235623190334950505740201855223260910288700404207308797444013226582234822589447132098367851721205744241456098230977017843541613387118293269344171962178234758053530505208196284826373662733932228083661108257903769841200128090078911832447918725012060609798094618819032467175865830302058637964593653695246418928495566098823489708431914101838399142873264695376671184223606618460344573509027673260558063378529276375075715308328001847641673355627073809406808124747485560300172094512527668603227937954624670625987309710875671435856488804461442027891050885852897281477719636232923346817549388163553041690634825092323282120184062918546677067734384944439333899120374182631475842480169501166973368652679601824246589360791814452544978166797101976162665204579538332201249858332804597072155700820357896687537850789788029591402498600373038054397999014704149625491246405540063880166031047897511527638254689788176085753995003332868899683038251527660455794814365051625542049269166857411858643914958512191696240256605945783393522050505806121241145572027478012786279944855351076378753626022204529828001933833195114940767379058408382695900061000773332269162802643312249977136954756484823800012734661336304627808742213913238794159734732101382804789494830855133519247331616371994471785925171201966362404190103445509810479403639339005761617682957040704362735312541822981107057363270820873981146240060727208449603942310778320033396162397850403907746736610468751164639450815224280077297467005628613218643787091101113569965164425893069436549449779680325289460032296879820211773626605152850097581236515615316533791649601371895946766661758010518473157607101118233907767261610952660373128739635314848752751627498349986877634861207138851831078103895575467904665288314267686168046150220666247510242996628190350416540466431718015552412538265221541634587201908032178601252670942077789300799007823977484603174006923811239843899697186462990107213514718824432805802731409996909548683605240545489729735985041711768177261008847315200247374589635095816595852195400295962713161247466133250818610473125479041853100413614641485112716806610322225189256806212636361465466984655675229829750313690210873215558128790650572957414294451184070524248564891459546072261917400523263703252959883813274934351876113948466876091707035148161089096471125786640054177534689194747390143169611597553772914577123560071541628288279642535183718497243148999134219553434071952715520251741451148200724878845323920372322599855992725984959284986747740292648476359778213153015756879420338257404741009353291926715432271357625572526471222108130189323417900956755234137614582748260276495343718795962797243544229461694120541954878046947856289194951675302864278054581064853006660825131801688459234588458029505799124858418006721047134876388415455660877223203989831309440706149680938968183274190932840214206734157239804890568136061398333529764684828516738882023627289474281272728392324195739521217836777098705548368587934429757898250936972111664446976532169867179262994466293103525049450197517561451091767143435742895524669132816637136979829867783817784703335996047905053766441692705036138715459962624936191860917667234447938933897157896976363757936992249066135534456833788291332645627535628018967511290323009327017312246349734579001501797462752785291551996143001720097469841461593092375646189424998866848617776176177371255265134096527986066876621388344870655199854001330806498154256046577002597771769969825405079760815058454197915979602473458395037504153969159311800740669893312216074794659619852436802750826013433782554587528265023416410890133859939165488425197152589666204360978641845431554495756758181239370411738308025589614062048101677711473946114077952851830210516062983683508754578549504041496292460803694748943216740048177057424700979391933487002450951277505094158785520772137792570911390520971918615202648230423029719172315736503271749516598120196366253716835590064442909655240652548060978991919891827531843789641768454692347373587644221707280431370306730835253322254335761947130995035211006140929120431444248332572235953310350866406802760980171879731020533774840749394017819819177589354445683810659723647308983025200412217929938803332971396154315966301402936462632391299730956159689010532658352595840094511942294095335556901391473378339680595905799939320684904137877804916936092577266512528884555363474068019973907439640467546664308273637411144804702140500978506624997709356598171687427417033338680551250287467027901639412047840829370239843646368292205170108197685826144202878137663910878751109929512391424702484945996552540715243429506272839660165627882788966608885917625101330767121753683014932737338029271222731274820471749229166417287209544364325351798101152926017492101954266446650885651122215550906607470736181249263160138926025611156785037374769936905519237875607466368537112182103620197357360015770724435319509306604050788488337436807375609640902877079857302211325131361754739115682448472144958276614825066210634159016650904281345214129812408926845783249763642468825827173080344531194787253778939827323830841351276988390555487024413693302461069066517879823026004922002727839867617846110779091638182698435171209286830711620406489108881784291521874027069168399612303088581859647381957794521762856444040153379517720463515094594937264709367703549877734431421686157118910564966293336498982108824009043901512318962917749507451278615016552732705138501715949950367702212787836383376165485350977373902167075947544236567766130512375458790979944207788839723298517972522416058846927252086790597048594448514976921185149596482595791706963899796025696715661255156660203754282090706408635998987846103221144021959959165962687049736462854439310978546569326535641333766281798059445472976091554702442466223862470084827634844109254814068527594509478250656991114856818356357396383371256503277087588356685460144130898226476239281345983527861348020907610131779433681036592798534522470485108146202681002750914140086021253538010354392179543667517293866540822393506580231475585810438055892521845226672251678154229807010654549562075942999348079612221697945199146369045040094399407084906250365476970093747451581636346688736166690815502142184240331200348393649906774712712892011553729763820283836910895545205117410506517217304084260691936767585397776929844780757478373906670713734055943505394414080869873910737794065831492283503200872270904979083436090795569320685004717340427712999738655416184140386119298670211953499827264325301091618145036204296986470723020278148356850420198565070250323451642247108529545149008355921871693629709771029540631353466504277112144852996133396176597532493794836575380441676209271085511345765004512696671858989022954897780399460709525662053305402012096210311006809691472069588236791804466878866452351909501232643584632526744474129387611494896538563007708071617015500248538204960570612135240680659417425353713219931110065740748500791362228665064604757825016040441635322879204611822179693400678550229688937981109596878699182130983923360623891296744699980496819546432088570731093271413295579411308926320015620076212963935529212066711301551910255830471589887179340903279466693613817897070213049070458810748082321619561928951835218375476360093865688136869984388818891910245804125753304066499375745575019820940611905709298346551343766972773467443445296925436886230107947289572318145916631766151710507690831598061897485198284357394712956567433267936024600226281560420764124840387755532459233940488349973676990250847956897534056137355851997226428798862161830286649052168473611711875246015635285152656225309255642236161475932567142445089730803360878949420157123392403018747725017003625886874519219048621764382466606150355916147467113155067178025061431008493375798338121896070110419813300045184451970848509504503638092683604943450342149430749668690610225245528001606606205568762760243778887969310425580040364186868966954571507850980578602606451797076267989501711000901522302224174979778193665584206641405366896362362984634852266625877140132879264030719100116377031342006360821838797952600776074959144722195783523394563938648984128129144701064219341984071175097701754089572890624088242062179696942229498441029584537185949495911648561660614739070605338584412984890545370393627952002828574789104665516527418504914503569177532965111984799296092611255974585885246727200917753688684895954841764243635847608360674180816539867485179496220645595872430224086662996247400720075396956409502231669590768253684875749681095603291013314966427244884403371907297423536029282805507784691848671191723165815723597690012694605973310744742416203552935816267229943098032889741574034108274870207636896819647664098649452863695848224345030880802967688387882082817303680572379917095777257853170808275841785073098133556331578295490314100552873937195399109971547287580702217337691922412381958632314818908080428412986772633629105373183388489894651471871742797766680842710701956177617463397301556558756956952718976738730806318867213824677993238706519528849426316886749117443402909689213771202092943143540995874133098539740848375810015799929679491253689212179521719942258262613556460865086683634582683313992496806607835720440657480003988046072681462977105283373396246307753535117756350318980731491351919960020374364243331509702504554023807645574907870601601796381167217443477278648261284441791108945607322105211545907369525137313944999922540969508199233063283963202477696100945743744484997156873477150948696859599110199158959122100161426043252963044665487104967878666396281819546426718686284883008774869197823784949211187745174402752660065515882250464075810218853245251836481558416102846430376955843880261761126508287960594743630856030549437013351993897647436195056449918890446493277041725030798646191644775599420540317744371013855975896965165351271519569991025004826566799877725341581935504736651366127396386748002613763942147037579621870767047330060641939574266019553608116794437900680425284958386478138701349254339449402850323858056137813842344147655385213081955355663149240333737718117992680758274355797510492353816394608349622381248795788759054473984733105659183238891589229527791061994791320396043101809859169954616468873566943857037364378997540858894912475375502269004024952878184720101153614662145503909279635614675031653117862124828336864860890531446808600697085116534951088773251494047354931841467772426085070250405767714239516367934369957651394892254574050697991721870331218119827493318814451398408602632774531129640801919741845636095111353075270484828370712126867762610635443419809101960183143789377196460497337548516618988536686437704081146292822305491506607254521736490459841919583880683084952764367631245276243860302070637314775026713898604654722310808037359244829318305797757962459257680743817957334726643211090269009589522620272534120354177246645506424906647104503251099604013110099541515268741258807010935616163525484215783027621268678409157557531740533509676102536967595179811677156724124421469839878906247585324094353787528137794341247829744318089848465110661640765809716863408050729459962583241013709637065749100865261297515749065480142736814725125560245284316822178114659624091335263427584455511817050071074023126150353730006486635898248002123777381231529260838419970329004525312087655712066218149493282411224866677712030175228727875114463416617473994268785836556237593340056129262692768258526761641650943447103044070565138964385110371209185778643369813599416868095476499399211059608022925209434859221065532618683430165921017412373462191669087915379453164971957234585400596985297335433538182172161389079072876577164467856174958491304194786667578607507498491223635910049333289

Execution Trace

CardioCoin.60806040( )
{"CardioCoin.sol":{"content":"pragma solidity \u003e= 0.5.0;\n\nimport \"./Ownable.sol\";\nimport \"./SafeMath.sol\";\nimport \"./ERC20.sol\";\n\ncontract CardioCoin is ERC20, Ownable {\n    using SafeMath for uint256;\n\n    uint public constant UNLOCK_PERIOD = 30 days;\n    uint public constant UNLOCK_TIME = 1572566400;    // 11월 1일 0시\n\n    string public constant name = \"CardioCoin\";\n    string public constant symbol = \"CRDC\";\n\n    uint8 public constant decimals = 18;\n\n    uint256 internal totalSupply_ = 12000000000 * (10 ** uint256(decimals));\n\n    struct balance {\n        uint256 available;\n        uint256 lockedUp;\n    }\n\n    struct lockUp {\n        uint256 amount;\n        uint unlockTimestamp;\n        uint unlockCount;\n    }\n\n    struct locker {\n        bool isLocker;\n        string role;\n        uint lockUpPeriod;\n        uint unlockCount;\n        bool useFixedTime;\n    }\n\n    mapping(address =\u003e balance) internal _balances;\n    mapping(address =\u003e lockUp[]) internal _lockUps;\n    mapping(address =\u003e locker) internal _lockerList;\n\n    event Burn(address indexed burner, uint256 value);\n    event AddToLocker(address indexed owner, string role, uint lockUpPeriod, uint unlockCount);\n    event TokenLocked(address indexed owner, uint256 amount);\n    event TokenUnlocked(address indexed owner, uint256 amount);\n\n    constructor() public Ownable() {\n        balance memory b;\n\n        b.available = totalSupply_;\n        _balances[msg.sender] = b;\n        emit Transfer(address(0), msg.sender, totalSupply_);\n    }\n\n    //Getter Functions\n    function lockerInfo(address _operator)public view returns(bool isLocker, string memory role, uint lockUpPeriod, uint unlockCount) {\n        locker memory l = _lockerList[_operator];\n        isLocker = l.isLocker;\n        role = l.role;\n        lockUpPeriod = l.lockUpPeriod;\n        unlockCount = l.unlockCount;\n    }\n\n    function balanceInfo(address user) view public returns(uint256 available, uint256 lockedUp) {\n        balance memory b = _balances[user];\n        available = b.available;\n        lockedUp = b.lockedUp;\n    }\n\n    function lockUpInfo(address user, uint256 index) view public returns (uint256 amount, uint256 unlockTimestamp, uint256 unlockCount) {\n        lockUp memory l = _lockUps[user][index];\n        amount = l.amount;\n        unlockTimestamp = l.unlockTimestamp;\n        unlockCount = l.unlockCount;\n    }\n\n    function lockUpLength(address user) view public returns (uint256) {\n        lockUp[] memory l = _lockUps[user];\n        return l.length;\n    }\n\n    // ERC20 Custom\n    function totalSupply() public view returns (uint256) {\n        return totalSupply_;\n    }\n\n    function _transfer(address from, address to, uint256 value) internal {\n        locker storage l = _lockerList[from];\n\n        this.unlockAll(from);\n        require(value \u003c= _balances[from].available);\n        require(to != address(0));\n        _balances[from].available = _balances[from].available.sub(value);\n        if (l.isLocker) {\n            if (l.useFixedTime) {\n                if (UNLOCK_TIME \u003c= now) {\n                    uint elapsedPeriod = (now - UNLOCK_TIME) / UNLOCK_PERIOD + 1;\n\n                    if (elapsedPeriod \u003c l.unlockCount) {\n                        uint unlockedAmount = (value / l.unlockCount).mul(elapsedPeriod);\n\n                        _balances[to].available = _balances[to].available.add(unlockedAmount);\n                        addLockedUpTokens(to, value.sub(unlockedAmount), UNLOCK_TIME + UNLOCK_PERIOD * elapsedPeriod - now, l.unlockCount - elapsedPeriod);\n                    } else {\n                        l.isLocker = false;\n                        _balances[to].available = _balances[to].available.add(value);\n                    }\n                } else {\n                    addLockedUpTokens(to, value, UNLOCK_TIME - now, l.unlockCount);\n                }\n            } else {\n                addLockedUpTokens(to, value, l.lockUpPeriod, l.unlockCount);\n            }\n        } else {\n            _balances[to].available = _balances[to].available.add(value);\n        }\n        emit Transfer(from, to, value);\n    }\n\n    function balanceOf(address _owner) public view returns (uint256) {\n        return _balances[_owner].available.add(_balances[_owner].lockedUp);\n    }\n\n    // Burnable\n    function burn(uint256 _value) public {\n        _burn(msg.sender, _value);\n    }\n\n    function _burn(address _who, uint256 _value) internal {\n        require(_value \u003c= _balances[_who].available);\n\n        _balances[_who].available = _balances[_who].available.sub(_value);\n        totalSupply_ = totalSupply_.sub(_value);\n        emit Burn(_who, _value);\n        emit Transfer(_who, address(0), _value);\n    }\n\n    // Lockup\n    function addAddressToLockerList(address _operator, string memory role, uint lockUpPeriod, uint unlockCount, bool useFixedTime)\n    public\n    onlyOwner {\n        locker memory lockerData = _lockerList[_operator];\n\n        require(!lockerData.isLocker);\n        require(unlockCount \u003e 0);\n        lockerData.isLocker = true;\n        lockerData.role = role;\n        lockerData.lockUpPeriod = lockUpPeriod;\n        lockerData.unlockCount = unlockCount;\n        lockerData.useFixedTime = useFixedTime;\n        _lockerList[_operator] = lockerData;\n        emit AddToLocker(_operator, role, lockUpPeriod, unlockCount);\n    }\n\n    function lockedUpBalanceOf(address _owner) public view returns (uint256) {\n        lockUp[] memory lockups = _lockUps[_owner];\n        balance memory b = _balances[_owner];\n        uint256 lockedUpBalance = b.lockedUp;\n\n        for (uint i = 0; i \u003c lockups.length; i++) {\n            lockUp memory l = lockups[i];\n\n            uint count = calculateUnlockCount(l.unlockTimestamp, l.unlockCount);\n            uint256 unlockedAmount = l.amount.mul(count).div(l.unlockCount);\n            lockedUpBalance = lockedUpBalance.sub(unlockedAmount);\n        }\n\n        return lockedUpBalance;\n    }\n\n    function addLockedUpTokens(address _owner, uint256 amount, uint lockUpPeriod, uint unlockCount)\n    internal {\n        lockUp[] storage lockups = _lockUps[_owner];\n        lockups.length += 1;\n        lockUp storage l = lockups[lockups.length - 1];\n        l.amount = amount;\n        l.unlockTimestamp = now.add(lockUpPeriod);\n        l.unlockCount = unlockCount;\n\n        balance storage b = _balances[_owner];\n        b.lockedUp = b.lockedUp.add(amount);\n        emit TokenLocked(_owner, amount);\n    }\n\n    function unlockAll(address _owner) external returns (bool success) {\n        balance storage b = _balances[_owner];\n        lockUp[] storage lockupList = _lockUps[_owner];\n        uint256 unlocked = 0;\n        for (uint i = 0; i \u003c lockupList.length; i++){\n            uint256 unlocked_i = _unlock(_owner,i);\n            unlocked = unlocked.add(unlocked_i);\n            //when fullyUnlocked\n            if(lockupList[i].unlockCount == 0) {\n                //remove\n                lockUp storage temp = lockupList[lockupList.length.sub(1)];\n                lockupList[i] = temp;\n                lockupList.length--;\n                i--;\n            }\n        }\n        //add unlocked to available\n        b.available = b.available.add(unlocked);\n        //sub unlocked from lockedUp\n        b.lockedUp = b.lockedUp.sub(unlocked);\n\n        success = true;\n\n        emit TokenUnlocked(_owner, unlocked);\n    }\n\n    function _unlock(address _owner, uint256 index) internal returns(uint256 unlocked) {\n        lockUp storage l = _lockUps[_owner][index];\n\n        uint count = calculateUnlockCount(l.unlockTimestamp, l.unlockCount);\n        if( count == 0 ){\n            return 0;\n        }\n        // if fully unlocked, unlocked amount will match l.amount\n        unlocked = l.amount.mul(count).div(l.unlockCount);\n\n        l.unlockTimestamp = l.unlockTimestamp.add(UNLOCK_PERIOD * count);\n        l.amount = l.amount.sub(unlocked);\n        l.unlockCount = l.unlockCount.sub(count);\n    }\n\n\n    function calculateUnlockCount(uint timestamp, uint unlockCount) view internal returns (uint) {\n        if (now \u003c timestamp) {\n            return 0;\n        }\n        uint256 timeCount = (now.sub(timestamp)).div(UNLOCK_PERIOD).add(1);\n        if (timeCount \u003e unlockCount){\n            return unlockCount;\n        }\n        else {\n            return timeCount;\n        }\n    }\n}"},"ERC20.sol":{"content":"pragma solidity ^0.5.0;\n\nimport \"./IERC20.sol\";\nimport \"./SafeMath.sol\";\n\n/**\n * @title Standard ERC20 token\n *\n * @dev Implementation of the basic standard token.\n * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md\n * Originally based on code by FirstBlood:\n * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol\n *\n * This implementation emits additional Approval events, allowing applications to reconstruct the allowance status for\n * all accounts just by listening to said events. Note that this isn\u0027t required by the specification, and other\n * compliant implementations may not do it.\n */\ncontract ERC20 is IERC20 {\n    using SafeMath for uint256;\n\n    mapping (address =\u003e uint256) private _balances;\n\n    mapping (address =\u003e mapping (address =\u003e uint256)) private _allowed;\n\n    uint256 private _totalSupply;\n\n    /**\n    * @dev Total number of tokens in existence\n    */\n    function totalSupply() public view returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n    * @dev Gets the balance of the specified address.\n    * @param owner The address to query the balance of.\n    * @return An uint256 representing the amount owned by the passed address.\n    */\n    function balanceOf(address owner) public view returns (uint256) {\n        return _balances[owner];\n    }\n\n    /**\n     * @dev Function to check the amount of tokens that an owner allowed to a spender.\n     * @param owner address The address which owns the funds.\n     * @param spender address The address which will spend the funds.\n     * @return A uint256 specifying the amount of tokens still available for the spender.\n     */\n    function allowance(address owner, address spender) public view returns (uint256) {\n        return _allowed[owner][spender];\n    }\n\n    /**\n    * @dev Transfer token for a specified address\n    * @param to The address to transfer to.\n    * @param value The amount to be transferred.\n    */\n    function transfer(address to, uint256 value) public returns (bool) {\n        _transfer(msg.sender, to, value);\n        return true;\n    }\n\n    /**\n     * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.\n     * Beware that changing an allowance with this method brings the risk that someone may use both the old\n     * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this\n     * race condition is to first reduce the spender\u0027s allowance to 0 and set the desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     * @param spender The address which will spend the funds.\n     * @param value The amount of tokens to be spent.\n     */\n    function approve(address spender, uint256 value) public returns (bool) {\n        require(spender != address(0));\n\n        _allowed[msg.sender][spender] = value;\n        emit Approval(msg.sender, spender, value);\n        return true;\n    }\n\n    /**\n     * @dev Transfer tokens from one address to another.\n     * Note that while this function emits an Approval event, this is not required as per the specification,\n     * and other compliant implementations may not emit the event.\n     * @param from address The address which you want to send tokens from\n     * @param to address The address which you want to transfer to\n     * @param value uint256 the amount of tokens to be transferred\n     */\n    function transferFrom(address from, address to, uint256 value) public returns (bool) {\n        _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value);\n        _transfer(from, to, value);\n        emit Approval(from, msg.sender, _allowed[from][msg.sender]);\n        return true;\n    }\n\n    /**\n     * @dev Increase the amount of tokens that an owner allowed to a spender.\n     * approve should be called when allowed_[_spender] == 0. To increment\n     * allowed value is better to use this function to avoid 2 calls (and wait until\n     * the first transaction is mined)\n     * From MonolithDAO Token.sol\n     * Emits an Approval event.\n     * @param spender The address which will spend the funds.\n     * @param addedValue The amount of tokens to increase the allowance by.\n     */\n    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {\n        require(spender != address(0));\n\n        _allowed[msg.sender][spender] = _allowed[msg.sender][spender].add(addedValue);\n        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);\n        return true;\n    }\n\n    /**\n     * @dev Decrease the amount of tokens that an owner allowed to a spender.\n     * approve should be called when allowed_[_spender] == 0. To decrement\n     * allowed value is better to use this function to avoid 2 calls (and wait until\n     * the first transaction is mined)\n     * From MonolithDAO Token.sol\n     * Emits an Approval event.\n     * @param spender The address which will spend the funds.\n     * @param subtractedValue The amount of tokens to decrease the allowance by.\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {\n        require(spender != address(0));\n\n        _allowed[msg.sender][spender] = _allowed[msg.sender][spender].sub(subtractedValue);\n        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);\n        return true;\n    }\n\n    /**\n    * @dev Transfer token for a specified addresses\n    * @param from The address to transfer from.\n    * @param to The address to transfer to.\n    * @param value The amount to be transferred.\n    */\n    function _transfer(address from, address to, uint256 value) internal {\n        require(to != address(0));\n\n        _balances[from] = _balances[from].sub(value);\n        _balances[to] = _balances[to].add(value);\n        emit Transfer(from, to, value);\n    }\n\n    /**\n     * @dev Internal function that mints an amount of the token and assigns it to\n     * an account. This encapsulates the modification of balances such that the\n     * proper events are emitted.\n     * @param account The account that will receive the created tokens.\n     * @param value The amount that will be created.\n     */\n    function _mint(address account, uint256 value) internal {\n        require(account != address(0));\n\n        _totalSupply = _totalSupply.add(value);\n        _balances[account] = _balances[account].add(value);\n        emit Transfer(address(0), account, value);\n    }\n\n    /**\n     * @dev Internal function that burns an amount of the token of a given\n     * account.\n     * @param account The account whose tokens will be burnt.\n     * @param value The amount that will be burnt.\n     */\n    function _burn(address account, uint256 value) internal {\n        require(account != address(0));\n\n        _totalSupply = _totalSupply.sub(value);\n        _balances[account] = _balances[account].sub(value);\n        emit Transfer(account, address(0), value);\n    }\n\n    /**\n     * @dev Internal function that burns an amount of the token of a given\n     * account, deducting from the sender\u0027s allowance for said account. Uses the\n     * internal burn function.\n     * Emits an Approval event (reflecting the reduced allowance).\n     * @param account The account whose tokens will be burnt.\n     * @param value The amount that will be burnt.\n     */\n    function _burnFrom(address account, uint256 value) internal {\n        _allowed[account][msg.sender] = _allowed[account][msg.sender].sub(value);\n        _burn(account, value);\n        emit Approval(account, msg.sender, _allowed[account][msg.sender]);\n    }\n}\n"},"IERC20.sol":{"content":"pragma solidity ^0.5.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n    function transfer(address to, uint256 value) external returns (bool);\n\n    function approve(address spender, uint256 value) external returns (bool);\n\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\n\n    function totalSupply() external view returns (uint256);\n\n    function balanceOf(address who) external view returns (uint256);\n\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n"},"Ownable.sol":{"content":"pragma solidity ^0.5.0;\n\n/**\n * @title Ownable\n * @dev The Ownable contract has an owner address, and provides basic authorization control\n * functions, this simplifies the implementation of \"user permissions\".\n */\ncontract Ownable {\n    address private _owner;\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev The Ownable constructor sets the original `owner` of the contract to the sender\n     * account.\n     */\n    constructor () internal {\n        _owner = msg.sender;\n        emit OwnershipTransferred(address(0), _owner);\n    }\n\n    /**\n     * @return the address of the owner.\n     */\n    function owner() public view returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        require(isOwner());\n        _;\n    }\n\n    /**\n     * @return true if `msg.sender` is the owner of the contract.\n     */\n    function isOwner() public view returns (bool) {\n        return msg.sender == _owner;\n    }\n\n    /**\n     * @dev Allows the current owner to relinquish control of the contract.\n     * @notice Renouncing to ownership will leave the contract without an owner.\n     * It will not be possible to call the functions with the `onlyOwner`\n     * modifier anymore.\n     */\n    function renounceOwnership() public onlyOwner {\n        emit OwnershipTransferred(_owner, address(0));\n        _owner = address(0);\n    }\n\n    /**\n     * @dev Allows the current owner to transfer control of the contract to a newOwner.\n     * @param newOwner The address to transfer ownership to.\n     */\n    function transferOwnership(address newOwner) public onlyOwner {\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers control of the contract to a newOwner.\n     * @param newOwner The address to transfer ownership to.\n     */\n    function _transferOwnership(address newOwner) internal {\n        require(newOwner != address(0));\n        emit OwnershipTransferred(_owner, newOwner);\n        _owner = newOwner;\n    }\n}\n"},"SafeMath.sol":{"content":"pragma solidity ^0.5.0;\n\n/**\n * @title SafeMath\n * @dev Unsigned math operations with safety checks that revert on error\n */\nlibrary SafeMath {\n    /**\n    * @dev Multiplies two unsigned integers, reverts on overflow.\n    */\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n        // Gas optimization: this is cheaper than requiring \u0027a\u0027 not being zero, but the\n        // benefit is lost if \u0027b\u0027 is also tested.\n        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522\n        if (a == 0) {\n            return 0;\n        }\n\n        uint256 c = a * b;\n        require(c / a == b);\n\n        return c;\n    }\n\n    /**\n    * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.\n    */\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\n        // Solidity only automatically asserts when dividing by 0\n        require(b \u003e 0);\n        uint256 c = a / b;\n        // assert(a == b * c + a % b); // There is no case in which this doesn\u0027t hold\n\n        return c;\n    }\n\n    /**\n    * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).\n    */\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n        require(b \u003c= a);\n        uint256 c = a - b;\n\n        return c;\n    }\n\n    /**\n    * @dev Adds two unsigned integers, reverts on overflow.\n    */\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\n        uint256 c = a + b;\n        require(c \u003e= a);\n\n        return c;\n    }\n\n    /**\n    * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),\n    * reverts when dividing by zero.\n    */\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n        require(b != 0);\n        return a % b;\n    }\n}\n"}}