DERO HE BlockChain Explorer(v1) Mainnet

hosted on

DERO Mining Node

Tx hash: 8fd908fb2976addec961c8c54c1369c319adf8b30f3f4117449818158f0c48e0 Type SC

Block: ea3866d5d03c375cdfe817a4412a822ff46d211c10eea706a1f7c14385a6edcc (VALID)
SCID current reserves
SCID Amount(in atomic units)
0000000000000000000000000000000000000000000000000000000000000000 0
SCID string variables
key value
C 2f2f2020436f7079726967687420323032342e20436976696c776172652e20416c6c207269676874732072657365727665642e0a2f2f202054454c4120446563656e7472616c697a65642057656220446f63756d656e74202854454c412d444f432d31290a46756e6374696f6e20496e697469616c697a655072697661746528292055696e7436340a313020494620696e69742829203d3d2030205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528226e616d65486472222c202261692e6a7322290a33312053544f524528226465736372486472222c202241492066696c6522290a33322053544f5245282269636f6e55524c486472222c202222290a33332053544f524528226455524c222c202261692e6a7322290a33342053544f52452822646f6354797065222c202254454c412d4a532d3122290a33352053544f52452822737562446972222c202222290a33362053544f5245282266696c65436865636b43222c202233336436336533643833356338623732393434363135356431663736393538333363663662373465663433333739336533333334646465393434663038353222290a33372053544f5245282266696c65436865636b53222c202264666134356632633834323663343331353736313539306665636435313032386638316138306461336532343135313936333035313238333736336532303222290a3130302052455455524e20300a456e642046756e6374696f6e0a0a46756e6374696f6e20696e697428292055696e7436340a31302049462045584953545328226f776e65722229203d3d2030205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528226f776e6572222c20616464726573732829290a35302053544f52452822646f6356657273696f6e222c2022312e302e3022290a36302053544f5245282268617368222c204845582854584944282929290a37302053544f524528226c696b6573222c2030290a38302053544f524528226469736c696b6573222c2030290a3130302052455455524e20300a456e642046756e6374696f6e0a0a46756e6374696f6e2061646472657373282920537472696e670a31302044494d207320617320537472696e670a3230204c45542073203d205349474e455228290a33302049462049535f414444524553535f56414c4944287329205448454e20474f544f2035300a34302052455455524e2022616e6f6e220a35302052455455524e20414444524553535f535452494e472873290a456e642046756e6374696f6e0a0a46756e6374696f6e205261746528722055696e743634292055696e7436340a31302044494d206164647220617320537472696e670a3135204c45542061646472203d206164647265737328290a31362049462072203c2031303020262620455849535453286164647229203d3d2030202626206164647220213d2022616e6f6e22205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528616464722c2022222b722b225f222b424c4f434b5f4845494748542829290a34302049462072203c203530205448454e20474f544f2037300a35302053544f524528226c696b6573222c204c4f414428226c696b657322292b31290a36302052455455524e20300a37302053544f524528226469736c696b6573222c204c4f414428226469736c696b657322292b31290a3130302052455455524e20300a456e642046756e6374696f6e0a0a2f2a2f2f2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a2f2f2055706461746520456e7469746965730a636f6e737420656e656d795369676874203d20313030303b0a66756e6374696f6e20757064617465456e656d79414928656e656d7929207b0a0a0969662028656e656d792e7374617465203d3d3d20226479696e6722207c7c2028656e656d792e7374617465203d3d3d2022646561642229292072657475726e3b090a0a0969662028656e656d792e7374756e203e203029207b0a0909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a0909656e656d792e6d6f76655374617465203d202269646c65223b0a0909726573657441747461636b7328656e656d79293b0a090972657475726e3b0a097d200a0a09636f6e7374206478203d2067616d652e706c617965722e78202d20656e656d792e783b0a09636f6e7374206479203d2067616d652e706c617965722e79202d20656e656d792e793b0a09636f6e73742064697374203d204d6174682e6879706f742864782c206479293b20090a0969662864697374203e20656e656d795369676874297b200a0909656e656d792e6d6f7665496e707574203d20303b0a0909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a0909656e656d792e6d6f76655374617465203d202269646c65223b0a0909726573657441747461636b7328656e656d79290a090972657475726e3b0a097d2020202020200a0a0969662028656e656d792e61747461636b436f6f6c646f776e203e20302920656e656d792e61747461636b436f6f6c646f776e202d3d2064742f313030303b0a0969662028656e656d792e6a756d70436f6f6c646f776e203e20302920656e656d792e6a756d70436f6f6c646f776e202d3d2064742f313030303b0a0969662028656e656d792e666163654c6f636b54696d6572203e20302920656e656d792e666163654c6f636b54696d6572202d3d2064742f313030303b0a0969662028656e656d792e666163654c6f636b54696d6572203c3d203029207b0a0909656e656d792e666163696e67203d20286478203c2030203f202d31203a2031293b0a097d090a0a09636f6e7374207b207365676d656e743a20706c617965725365676d656e742c20706c6174666f726d3a20706c61796572506c6174666f726d207d203d20676574506c6174666f726d556e6465722867616d652e706c61796572293b0a09636f6e7374207b207365676d656e743a20656e656d795365676d656e742c2020706c6174666f726d3a20656e656d79506c6174666f726d20207d203d20676574506c6174666f726d556e64657228656e656d79293b0a0a09636f6e737420706c6179657241626f7665203d2067616d652e706c617965722e79203c20656e656d792e79202d2034303b0a096c65742077616c6c536567203d206e756c6c3b0a0a092f2f202d2d2d20504c4154464f524d204e415649474154494f4e202d2d2d0a092f2f202d2d2d2044524f5020444f574e204c4f474943202d2d2d0a0969662028656e656d79506c6174666f726d297b0a09090a0909696628656e656d79506c6174666f726d2e696420213d20656e656d792e6f6e506c6174666f726d297b0a090909656e656d792e626c6f636b65645269676874203d2066616c73650a090909656e656d792e626c6f636b65644c656674203d2066616c73650a090909656e656d792e626c6f636b656450203d206e756c6c0a090909656e656d792e6f6e506c6174666f726d20203d20656e656d79506c6174666f726d2e69643b0a09097d0a090977616c6c536567203d2064657465637457616c6c416865616428656e656d7929090a0a09092f2f20526573657420616c6c20706c6174666f726d20656e656d79206c697374730a0909666f722028636f6e737420706c6174206f662067616d652e706c6174666f726d7329207b0a090909706c61742e656e656d6965732e6c656e677468203d20303b0a0909092f2f2041737369676e20656e656d69657320746f20746865697220706c6174666f726d206c697374730a090909666f722028636f6e73742065206f662067616d652e656e656d69657329207b0a0909090969662028652e6f6e506c6174666f726d203d3d3d20706c61742e696429207b0a0909090909706c61742e656e656d6965732e707573682865293b0a090909097d0a0909097d0909090a090909636f6e73742072616e6765203d2036303b202f2f206f72207768617465766572206665656c732072696768740a090909666f722028636f6e7374206f74686572206f6620706c61742e656e656d69657329207b0a09090909696620286f74686572203d3d3d20656e656d79207c2021656e656d792e6f6e47726f756e64207c20216f746865722e6f6e47726f756e64207c206f746865722e6f6e506c6174666f726d20213d3d20656e656d792e6f6e506c6174666f726d207c206f746865722e7374617465203d3d3d20226465616422207c206f746865722e7374617465203d3d3d20226479696e67222920636f6e74696e75653b0a0a09090909636f6e7374206478203d204d6174682e616273286f746865722e78202d20656e656d792e78293b0a09090909696620286478203c3d2072616e676529207b0a090909090969662028656e656d792e626c6f636b65644c656674297b20206f746865722e626c6f636b65644c65667420203d20747275653b206f746865722e626c6f636b6564526967687420203d2066616c73653b20656e656d792e626c6f636b656450203d20706c61742e69643b7d0a090909090969662028656e656d792e626c6f636b65645269676874297b20206f746865722e626c6f636b6564526967687420203d20747275653b206f746865722e626c6f636b65644c65667420203d2066616c73653b20656e656d792e626c6f636b656450203d20706c61742e69643b7d0a090909097d0a0909097d0a09097d0a0a0909636f6e737420706c6179657242656c6f77506c6174666f726d203d206973506c6179657242656c6f77506c6174666f726d28656e656d79506c6174666f726d29090a09090a0909696628656e656d792e7479706520213d3d20226772756e74222026262069734e65617245646765466163696e6728656e656d792c20656e656d79506c6174666f726d2c20313029297b0a09090909656e656d792e6d6f7665496e707574203d20303b0a09090909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a09090909656e656d792e6d6f76655374617465203d202269646c65223b0a09090909726573657441747461636b7328656e656d79293b0a0909090972657475726e3b200a0909097d0a09090a0a09090a09092f2f20696620706c617965722069732062656c6f772c206d6f7665206f666620636c6f7365737420656467650a090969662028706c6179657242656c6f77506c6174666f726d29207b0a090909636f6e7374206c6566744564676520203d20656e656d79506c6174666f726d2e6d696e583b0a090909636f6e737420726967687445646765203d20656e656d79506c6174666f726d2e6d6178583b0a0a090909636f6e73742064697374546f4c65667420203d204d6174682e6162732867616d652e706c617965722e78202d206c65667445646765293b0a090909636f6e73742064697374546f5269676874203d204d6174682e6162732867616d652e706c617965722e78202d20726967687445646765293b0a0a090909636f6e73742074617267657445646765203d202864697374546f4c656674203c2064697374546f526967687429203f206c65667445646765203a207269676874456467653b0a090909636f6e7374206d6f7665203d204d6174682e7369676e2874617267657445646765202d20656e656d792e78293b0a090909696628656e656d792e7479706520213d3d20226772756e742220297b0a090909096966286d6f766520213d3d204d6174682e7369676e2867616d652e706c617965722e78202d20656e656d792e78297c7c202169734e65617245646765466163696e6728656e656d792c20656e656d79506c6174666f726d2c2031302920297b2f2f2626204d6174682e616273286478293e3429636865636b2064697374616e6365206865726528666f7220736c6f706573290a090909090970757273756528656e656d792c2064782c20656e656d795365676d656e742c20706c61796572506c6174666f726d2c2077616c6c536567293b0a090909097d656c73657b0a09090909656e656d792e6d6f7665496e707574203d20303b0a09090909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a09090909656e656d792e6d6f76655374617465203d202269646c65223b0a090909097d0a09090909726573657441747461636b7328656e656d79293b0a0909090972657475726e3b200a0909097d656c73657b0a090909092f2f204d6f766520746f77617264207468617420656467650a09090909656e656d792e6d6f7665496e707574203d206d6f76653b0a09090909656e656d792e666163696e67203d20656e656d792e6d6f7665496e7075743b0a09090909696628646972656374696f6e426c6f636b656428656e656d7929297b0a0909090909656e656d792e666163696e67203d202d656e656d792e6d6f7665496e7075743b0a0909090909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e673b0a090909097d09090a090909090a090909092f2f20424f4f53543a20656e7375726520746865792061637475616c6c792066616c6c206f66660a090909096966202869734e656172506c6174666f726d4564676528656e656d792c20656e656d79506c6174666f726d2c2031302920262620697353616665546f44726f7028656e656d792929207b0a0909090909656e656d792e666163654c6f636b54696d6572203d202e37353b0a0909090909656e656d792e7678203d20656e656d792e666163696e67202a20656e656d792e7370656564202a20312e323b202f2f20736d616c6c20707573680a0909090909656e656d792e7679203d202d302e343b202f2f2074696e7920686f702075707761726420746f20627265616b20706c6174666f726d20676c75650a0909090909656e656d792e696e416972203d20747275653b0a0909090909656e656d792e6f6e47726f756e64203d2066616c73653b0a090909097d0a0909097d0a09090972657475726e3b0a0909090a09097d0a09090a090969662028706c6179657241626f76652920207b0a0909090a0909092f2f20646f6e277420676574206c6564206f66662074686520656467650a090909696628706c617965725365676d656e74297b0a090909092f2f206966206e65617220656467652c20636865636b2069662061626c6520746f206a756d702075702c206966206e6f742c2073746f700a090909090a0a090909096966202869734e65617245646765466163696e6728656e656d792c20656e656d79506c6174666f726d2c2031322929207b0909090a0909090909696620287472794a756d7041626f766528656e656d792c656e656d795365676d656e74292972657475726e3b090a090909090969662821697353616665546f44726f7028656e656d7929297b0a0909090909656e656d792e6d6f7665496e707574203d20303b0a0909090909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a0909090909656e656d792e6d6f76655374617465203d202269646c65223b0a090909090972657475726e3b0a09090909097d0a090909097d090909090a0909097d656c73657b0a090909092f2f6e6f20706c6179657220706c6174666f726d202f207365676d656e740a090909096966202869734e65617245646765466163696e6728656e656d792c20656e656d79506c6174666f726d2c20313229200a090909090929207b0a0909090909656e656d792e6d6f7665496e707574203d20303b0a0909090909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a0909090909656e656d792e6d6f76655374617465203d202269646c65223b0a090909090972657475726e3b0a090909097d0a0909090970757273756528656e656d792c2064782c20656e656d795365676d656e742c20706c61796572506c6174666f726d293b0a0909090972657475726e0a0909097d090a0909090a09097d0a09090a09090a09090a0a09092f2f2054727920746f2067657420746f20706c6179657220706c6174666f726d0a090969662028706c617965725365676d656e7420262620656e656d795365676d656e7420213d3d20706c617965725365676d656e742029207b0a0909096c6574207461726765743b0a090909696628656e656d79506c6174666f726d20213d20706c61796572506c6174666f726d297b0a09090909696628706c6179657241626f7665297b0a0909090909636f6e737420636c6f736573745365676d656e7473203d2066696e64436c6f736573745365676d656e74734265747765656e28656e656d79506c6174666f726d2c20706c61796572506c6174666f726d293b0a0909090909636f6e737420636c6f736573745365676d656e74734d6964506f696e74203d2066696e64436c6f736573745365676d656e74734265747765656e4d6964506f696e747328656e656d79506c6174666f726d2c20706c61796572506c6174666f726d293b09090a0909090909636f6e7374207365676d656e744f766572506c6174666f726d203d206765745365676d656e744f766572506c6174666f726d28656e656d79506c6174666f726d293b0a0909090909636f6e7374207365676d656e744f76657243757272656e745365676d656e74203d206765745365676d656e744f76657243757272656e7428656e656d795365676d656e74290a0909090909636f6e737420626573744a756d705365676d656e74203d2066696e64426573744a756d705365676d656e7428656e656d792c20656e656d79506c6174666f726d2c20706c61796572506c6174666f726d293b090a090909090a0909090909746172676574203d20636c6f736573745365676d656e74732e736567413b0a090909090969662874617267657420213d3d20656e656d795365676d656e74297b09090909090a0909090909090a090909090909696628636c6f736573745365676d656e74732e7365674120213d3d20636c6f736573745365676d656e74734d6964506f696e742e7365674120297b0a090909090909090a090909090909096966287365676d656e744f76657243757272656e745365676d656e74297b0a0909090909090909746172676574203d207365676d656e744f76657243757272656e745365676d656e743b0a090909090909097d656c7365206966287365676d656e744f766572506c6174666f726d297b090909090909090a0909090909090909746172676574203d207365676d656e744f766572506c6174666f726d3b0a090909090909097d0a0909090909097d0a0909090909090a090909090909696628706c6179657241626f766520262620746172676574297b0a090909090909096966202874727954617267657428656e656d792c656e656d795365676d656e742c746172676574292972657475726e3b090909090909090a0909090909097d0a0a0909090909096d6f7665546f776172645365676d656e7428656e656d792c20656e656d79506c6174666f726d2c207461726765742c2077616c6c536567290a09090909090961766f696457616c6c734f6e53616d65506c6174666f726d28656e656d792c2077616c6c536567290a09090909090972657475726e3b0a09090909097d0a09090909090a090909090a0909090909746172676574203d20626573744a756d705365676d656e743b0a09090909096966282174617267657420262620706c6179657241626f7665297b0a090909090909746172676574203d207365676d656e744f76657243757272656e745365676d656e743b0a09090909097d0a09090909096966282174617267657420262620706c6179657241626f7665297b0a090909090909746172676574203d207365676d656e744f766572506c6174666f726d3b0a09090909097d0a09090909090a09090909096966282174617267657420262620636c6f736573745365676d656e74732e73656741203d3d3d20656e656d795365676d656e74297b0a090909090909746172676574203d20636c6f736573745365676d656e74732e736567423b0a09090909097d0a09090909090a09090909096966282169735365676d656e7442656c6f77506c6174666f726d287461726765742c20706c61796572506c6174666f726d29297b0a090909090909746172676574203d20706c617965725365676d656e743b0a09090909097d0a0909090a0a090909090969662874617267657420297b0a090909090909696620287472794a756d7041626f766528656e656d792c656e656d795365676d656e74292972657475726e3b0a09090909090a09090909090969662820747970656f66207365676d656e744f766572506c6174666f726d20213d3d2022756e646566696e656422202626207365676d656e744f766572506c6174666f726d20213d3d6e756c6c297b0a090909090909096966287365676d656e744f766572506c6174666f726d2e706964203d3d3d20706c61796572506c6174666f726d2e6964297b09090909090909090a09090909090909096966286a756d70546f5365676d656e7428656e656d792c656e656d79506c6174666f726d2c7365676d656e744f766572506c6174666f726d2c77616c6c53656729297b0a09090909090909090961766f696457616c6c734f6e53616d65506c6174666f726d28656e656d792c656e656d79506c6174666f726d2c77616c6c53656729090a09090909090909090972657475726e3b0a09090909090909097d09090909090909090a090909090909097d0a0909090909097d0a0a090909090909696628216d6f7665546f776172645365676d656e7428656e656d792c20656e656d79506c6174666f726d2c207461726765742c2077616c6c5365672926267365676d656e744f766572506c6174666f726d297b0a090909090909096d6f7665546f776172645365676d656e7428656e656d792c20656e656d79506c6174666f726d2c207365676d656e744f766572506c6174666f726d2c2077616c6c536567290a0909090909090961766f696457616c6c734f6e53616d65506c6174666f726d28656e656d792c656e656d79506c6174666f726d2c77616c6c53656729090a0909090909090972657475726e0a0909090909097d0a0909090909090a0909090909096966202874727954617267657428656e656d792c656e656d795365676d656e742c746172676574292972657475726e3b0a09090909097d0a090909097d0a090909090a0909097d0a0a0909096966202863616e4a756d70546f5365676d656e7428656e656d792c20656e656d795365676d656e742c20706c617965725365676d656e74292626202169735365676d656e7442656c6f775365676d656e7428706c617965725365676d656e742c20656e656d795365676d656e7429297b2f2f0a09090909696628706c6174666f726d4a756d7028656e656d792c656e656d79506c6174666f726d29292072657475726e3b0a0909097d0a0909090a09090970757273756528656e656d792c2064782c20656e656d795365676d656e742c20706c61796572506c6174666f726d2c2077616c6c536567293b0a09090972657475726e3b0a09097d0a09090a09090a097d0a0a0969662821656e656d792e696e416972297b656e656d792e666163654c6f636b54696d6572203d20303b7d2f2f646f6e27742077616c6b206f66662065646765206966206a757374206c616e646564206f6e20706c6179657220706c6174666f726d0a092f2f2d2d2d2053414d4520504c4154464f524d3a204e4f524d414c2050555253554954202b2041545441434b202d2d2d0a096966202864697374203c20353029207b0a09092f2f2061747461636b206c6f6769632e2e2e0a09096c65742064656c6179203d20302e33202b204d6174682e72616e646f6d2829202a20302e373b202f2f20302e332d312e30207365630a0909696628656e656d792e74797065203d3d3d2022626f737322292064656c6179203d20302e353b0a09092f2f204f6e6c792070756e636820696620636f6f6c646f776e20697320646f6e650a090969662028656e656d792e61747461636b436f6f6c646f776e203c3d203029207b0a0909090a0909090a090909656e656d792e766572746963616c496e707574203d20303b0a090909656e656d792e61747461636b436f6f6c646f776e203d2064656c61793b0a090909696620284d6174682e72616e646f6d2829203c20302e3529207b090909090a09090909656e656d792e77616e7450756e6368203d20747275653b0a0909097d656c73657b0a09090909656e656d792e77616e744b69636b203d20747275653b0a0909097d0a0a0909090909090a0909096966282167616d652e706c617965722e696e4169722026262067616d652e706c617965722e766572746963616c496e707574203c2030297b0a09090909656e656d792e766572746963616c496e707574203d20303b0a0909097d656c736520696620284d6174682e72616e646f6d2829203c20302e35297b0a09090909656e656d792e766572746963616c496e707574203d20303b0a0909097d656c73657b0a09090909656e656d792e766572746963616c496e707574203d20313b0a0909097d0a09097d0a0909696628656e656d792e616e696d2e7374617465203d3d3d202277616c6b2220262620656e656d792e7479706520213d3d2022626f737322297b0a090909726573657441747461636b7328656e656d79290a09097d0a090969662028656e656d792e616e696d2e7374617465203d3d3d202270756e6368222020262620656e656d792e616e696d2e6672616d65203e2061747461636b4672616d65732e70756e63682e656e642029207b0a090909656e656d792e77616e7450756e6368203d2066616c73653b090909090a09097d0a090969662028656e656d792e616e696d2e7374617465203d3d3d20226869676850756e6368222020262620656e656d792e616e696d2e6672616d65203e2061747461636b4672616d65732e6869676850756e63682e656e642029207b0a090909656e656d792e77616e7450756e6368203d2066616c73653b090909090a09097d0a090969662028656e656d792e616e696d2e7374617465203d3d3d20226b69636b222020262620656e656d792e616e696d2e6672616d65203e2061747461636b4672616d65732e6b69636b2e656e642029207b0a090909656e656d792e77616e744b69636b203d2066616c73653b090909090a09097d0a090969662028656e656d792e616e696d2e7374617465203d3d3d2022686967684b69636b222020262620656e656d792e616e696d2e6672616d65203e2061747461636b4672616d65732e686967684b69636b2e656e642029207b0a090909656e656d792e77616e744b69636b203d2066616c73653b090909090a09097d0a09090a0909696628656e656d792e7479706520213d3d2022626f737322297b0a090909656e656d792e6d6f7665496e707574203d20303b0a09097d656c73657b0a09092f2f626f7373200a09090969662028656e656d792e616e696d2e7374617465203d3d3d202277616c6b50756e6368222020262620656e656d792e616e696d2e6672616d65203e2061747461636b4672616d65732e77616c6b50756e63682e656e642029207b0a09090909656e656d792e77616e7450756e6368203d2066616c73653b090909090a0909097d0a09090969662028656e656d792e616e696d2e7374617465203d3d3d202277616c6b4869676850756e6368222020262620656e656d792e616e696d2e6672616d65203e2061747461636b4672616d65732e77616c6b4869676850756e63682e656e642029207b0a09090909656e656d792e77616e7450756e6368203d2066616c73653b090909090a0909097d0a090909696628656e656d792e74797065203d3d3d2022626f7373222026262021656e656d792e77616e7450756e63682029207b200a09090909656e656d792e6d6f7665496e707574203d20303b0a09090909696628656e656d792e616e696d2e7374617465203d3d3d202277616c6b22297b0a0909090909726573657441747461636b7328656e656d79290a090909097d0a0909097d0a09097d0a09092f2f20666f7220617564696f0a0909636f6e73742061747461636b50726573736564203d2028656e656d792e77616e7450756e6368207c7c20656e656d792e77616e744b69636b292026262021656e656d792e7072657641747461636b3b0a0909656e656d792e7072657641747461636b203d20656e656d792e77616e7450756e6368207c7c20656e656d792e77616e744b69636b3b0a09096966202861747461636b5072657373656429207b0a09090973667848756828293b0a09090967616d652e706c617965722e70726576486974203d66616c73653b0a09097d090a097d20656c7365207b09090a090970757273756528656e656d792c2064782c20656e656d795365676d656e742c20706c61796572506c6174666f726d2c2077616c6c536567293b0a097d0a7d0a66756e6374696f6e2069735365676d656e7442656c6f77506c6174666f726d287365672c20706c6174297b0a09666f722028636f6e73742070736567206f6620706c61742e7365676d656e747329207b0a20202020202020202f2f204f7074696f6e616c3a206f6e6c7920747265617420666c6f6f722d74797065207365676d656e747320617320706c6174666f726d20737572666163650a202020202020202069662028707365672e697357616c6c29636f6e74696e75653b0a090969662869735365676d656e7442656c6f775365676d656e74287365672c7073656729292072657475726e20747275653b09090a097d0a0972657475726e2066616c73653b09090a7d0a0a0a0a66756e6374696f6e2070757273756528656e656d792c64782c20656e656d795365676d656e742c20706c61796572506c6174666f726d2c77616c6c536567297b0a096c65742077616c6c4a756d706564203d2066616c73653b0a0969662877616c6c536567297b0a09096966287472794a756d7057616c6c28656e656d792c77616c6c53656729297b0a090909726573657441747461636b7328656e656d79293b0a09090972657475726e0a09097d0a097d0a090a090a09696620286b656570456e656d7953706163696e6728656e656d792929207b0a090909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a090909656e656d792e6d6f76655374617465203d202269646c65223b0a090909656e656d792e6d6f7665496e707574203d20303b0a090972657475726e3b0a097d0a0a0969662028656e656d792e7479706520213d3d20226772756e742220262620656e656d795365676d656e74297b0a0909636f6e737420706c6174203d20676574506c6174666f726d4279496428656e656d792e6f6e506c6174666f726d290a0909696628747970656f6620706c617420213d3d2022756e646566696e656422297b0a09090969662869734e65617245646765466163696e6728656e656d792c706c6174202c20313029297b0a0909090920656e656d792e6d6f7665496e707574203d20303b0a09090909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a09090909656e656d792e6d6f76655374617465203d202269646c65223b090a09090909726573657441747461636b7328656e656d79293b0a0909090972657475726e0a0909097d0a09097d0a09090a097d0a09696628706c61796572506c6174666f726d20262620656e656d795365676d656e74297b0a090969662028706c61796572506c6174666f726d2e6964203d3d3d20656e656d792e6f6e506c6174666f726d297b0a090909636f6e737420626568696e64203d20636f756e74456e656d696573426568696e6428656e656d79293b0a09090969662028626568696e64203e3d203120262620636f756e74456e656d696573416865616428656e656d7929203c20626568696e64202626204d6174682e61627328647829203e3d203530202626204d6174682e61627328647829203c2031303029207b2f2f2626204d6174682e61627328647829203e3d2036350a0909090969662028656e656d792e6f6e47726f756e6420262620656e656d792e6a756d70436f6f6c646f776e203c3d203029207b0a0909090909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e673b0a09090909096a756d7028656e656d79293b0a0909090909656e656d792e6a756d70436f6f6c646f776e203d20312e30202b204d6174682e72616e646f6d2829202a20302e353b0a090909090972657475726e3b0a090909097d0a0909097d0a090909096966280a09090909706c617965724973546872656174656e696e672867616d652e706c617965722920262620656e656d792e6f6e47726f756e642026260a0909090928656e656d792e666163696e67203d3d3d20312026262067616d652e706c617965722e666163696e67203d3d3d202d31207c7c0a09090909656e656d792e666163696e67203d3d3d202d312026262067616d652e706c617965722e666163696e67203d3d3d2031290a0909090929207b0a09090909636f6e7374207361666544697374203d2037303b200a0a09090909696620284d6174682e61627328647829203c20736166654469737429207b0a0909090909656e656d792e6d6f7665496e707574203d20303b0a0909090909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a0909090909656e656d792e6d6f76655374617465203d202269646c65223b0a090909090972657475726e3b0a090909097d0a0909097d0a09097d090a097d0a090a09092f2f206e6f726d616c206d6f76656d656e740a09696620284d6174682e61627328647829203e20332029207b200a0909696628656e656d795365676d656e74202626204d6174682e61627328656e656d795365676d656e742e616e676c6529203e206d6178436c696d62416e676c65297b200a090909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e673b0a0909096a756d7028656e656d79293b0a090909656e656d792e6a756d70436f6f6c646f776e203d20312e30202b204d6174682e72616e646f6d2829202a20302e353b0a09097d656c73657b0a090909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e673b0a090909656e656d792e616e696d2e7374617465203d202277616c6b223b0a09097d0a09090a202020207d20656c736520696628706c61796572506c6174666f726d20262620656e656d795365676d656e74297b0a0909656e656d792e6d6f7665496e707574203d20303b0a0909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a0909656e656d792e6d6f76655374617465203d202269646c65223b090a202020207d09090a0961766f696457616c6c734f6e53616d65506c6174666f726d28656e656d792c2077616c6c536567290a09726573657441747461636b7328656e656d79290a0a7d0a0a0a66756e6374696f6e206d6f7665546f776172645365676d656e7428656e656d792c656e656d79506c6174666f726d2c7461726765742c2077616c6c536567297b0a090a092f2f2077616c6b20746f776172642069740a096c6574206c656674203d204d6174682e6d696e287461726765742e78312c207461726765742e7832293b0a096c6574207269676874203d204d6174682e6d6178287461726765742e78312c207461726765742e7832293b0a096c65742079746172676574203d204d6174682e6d696e287461726765742e79312c207461726765742e7932293b0a090a09636f6e737420656e656d79506c61744c656674203d204d6174682e6d696e28656e656d79506c6174666f726d2e78312c20656e656d79506c6174666f726d2e7832293b0a09636f6e737420656e656d79506c61745269676874203d204d6174682e6d617828656e656d79506c6174666f726d2e78312c20656e656d79506c6174666f726d2e7832293b0a090a092f2f74617267657420746865206c6f7765722065646765206966207468657265206973206f6e650a096966287461726765742e7931203e207461726765742e7932297b0a09096c656674203d207461726765742e78313b0a09097269676874203d207461726765742e7831202b20383b0a090979746172676574203d207461726765742e79313b0a097d656c7365206966287461726765742e7931203c207461726765742e7932297b0a09096c656674203d207461726765742e7832202d20383b0a09097269676874203d207461726765742e78323b0a090979746172676574203d207461726765742e79323b0a097d0a090a0969662028656e656d792e78203c206c656674202d3820297b2009090a0909656e656d792e6d6f7665496e707574203d20313b0a0909656e656d792e616e696d2e7374617465203d202277616c6b223b0a0909656e656d792e666163696e67203d20656e656d792e6d6f7665496e7075743b09090a09096966287472794a756d7057616c6c28656e656d792c77616c6c536567292972657475726e20747275653b0a097d0a09656c73652069662028656e656d792e78203e207269676874202b3829207b09090a090a0909656e656d792e6d6f7665496e707574203d202d313b0a0909656e656d792e616e696d2e7374617465203d202277616c6b223b0a0909656e656d792e666163696e67203d20656e656d792e6d6f7665496e7075743b090a09096966287472794a756d7057616c6c28656e656d792c77616c6c536567292972657475726e20747275653b09090a097d0a09656c736520696628656e656d792e79202d2079746172676574203c203132382026262021656e656d792e696e4169722026262028656e656d792e6f6e506c6174666f726d20213d3d207461726765742e70696429297b0a09092f2f206469726563746c7920756e646572206974206f7220636c6f736520746f2069742c206a756d70206e657874206368616e63650a09096a756d7028656e656d79293b0a0909656e656d792e6a756d70436f6f6c646f776e203d20312e30202b204d6174682e72616e646f6d2829202a20302e353b0a0909656e656d792e666163654c6f636b54696d6572203d202e353b0a097d656c73657b0a0909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e670a0a0909696628646972656374696f6e426c6f636b656428656e656d7929297b0a090909656e656d792e666163696e67203d202d656e656d792e6d6f7665496e7075743b0a090909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e673b0a09097d0a0909726573657441747461636b7328656e656d79290a090972657475726e2066616c73650a097d090a09726573657441747461636b7328656e656d79290a0972657475726e20747275650a7d0a090a0a0a0a66756e6374696f6e206a756d70546f5365676d656e7428656e656d792c656e656d79506c6174666f726d2c7461726765742c77616c6c536567297b0a096c6574206c656674203d204d6174682e6d696e287461726765742e78312c207461726765742e7832293b0a096c6574207269676874203d204d6174682e6d6178287461726765742e78312c207461726765742e7832293b0a0a092f2f74617267657420746865206c6f7765722065646765206966207468657265206973206f6e650a096966287461726765742e7931203e207461726765742e7932297b0a09096c656674203d207461726765742e78313b0a09097269676874203d207461726765742e7831202b20383b0a097d656c7365206966287461726765742e7931203c207461726765742e7932297b0a09096c656674203d207461726765742e7832202d20383b0a09097269676874203d207461726765742e78323b0a097d0a0a090a09696628656e656d792e79202d204d6174682e6d696e287461726765742e79312c207461726765742e793229203c20313238200a092626206973556e6465724f72466163696e675365676d656e7428656e656d792c2074617267657429297b200a09092f2f206469726563746c7920756e6465722069742c206a756d70206e657874206368616e63650a09096a756d7028656e656d79293b0a0909656e656d792e6a756d70436f6f6c646f776e203d20312e30202b204d6174682e72616e646f6d2829202a20302e353b0a0909656e656d792e666163654c6f636b54696d6572203d202e353b09090a090972657475726e20747275650a097d0a0972657475726e2066616c73650a7d0a0a66756e6374696f6e20706c6174666f726d4a756d7028656e656d792c656e656d79506c6174666f726d297b0a0969662869734e65617245646765466163696e6728656e656d792c20656e656d79506c6174666f726d2c20323029202026260a0909656e656d792e6a756d70436f6f6c646f776e203c3d20302026260a090921656e656d792e696e4169722026262021646972656374696f6e426c6f636b656428656e656d792929207b0a0909696628656e656d792e767820213d30297b0a090909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e673b0a09097d0a09096a756d7028656e656d79293b0a0909656e656d792e6a756d70436f6f6c646f776e203d20312e30202b204d6174682e72616e646f6d2829202a20302e353b0a090972657475726e20747275653b202f2f2020636f6d6d6974206a756d700a097d0a0972657475726e2066616c73653b0a7d0a090a66756e6374696f6e2074727954617267657428656e656d792c656e656d795365676d656e742c746172676574297b0a090a09696628656e656d792e79202d204d6174682e6d696e287461726765742e79312c207461726765742e793229203e203132382972657475726e2066616c73653b090a0a09636f6e7374206c656674203d204d6174682e6d696e287461726765742e78312c207461726765742e7832293b0a09636f6e7374207269676874203d204d6174682e6d6178287461726765742e78312c207461726765742e7832293b0a090a090a096c65742064697374546f546172676574203d2032353b200a0969662028656e656d792e78203c206c656674292064697374546f546172676574203d2028656e656d792e78202b20323529202d206c6566743b0a0969662028656e656d792e78203e207269676874292064697374546f546172676574203d20287269676874202b20323529202d20656e656d792e783b0a0964697374546f546172676574203d204d6174682e6d61782864697374546f5461726765742c203235290a0a096966202828656e656d792e666163696e67203d3d3d203120262620656e656d792e6d6f7665496e707574203d3d3d3120262620656e656d792e78203c206c656674202d203520262620656e656d792e78203e206c656674202d2064697374546f54617267657420297c7c202f2f206d69676874207472792072656c617469766520746f207269676874206d696e7573206c6566740a0928656e656d792e666163696e67203d3d3d202d3120262620656e656d792e6d6f7665496e707574203d3d3d202d3120262620656e656d792e78203e207269676874202b203520262620656e656d792e78203c207269676874202b2064697374546f5461726765742029297b20092f2f67657474696e67206e6561722c206a756d70206e6f7709200a09096a756d7028656e656d79293b0a0909656e656d792e6a756d70436f6f6c646f776e203d20312e30202b204d6174682e72616e646f6d2829202a20302e353b0a0909656e656d792e666163654c6f636b54696d6572203d202e353b0a090972657475726e20747275653b0a097d0a0a0972657475726e2066616c73653b0a7d0a0a0a0a66756e6374696f6e207472794a756d7041626f766528656e656d792c63757272656e74536567297b0a0a09636f6e737420746172676574203d206765745365676d656e744f76657243757272656e742863757272656e74536567293b2f2f676574206c6f7765737420706c6174666f726d206f7665722063757272656e7420706c6174666f726d0a0a09696628746172676574297b090a0909636f6e7374206c656674203d204d6174682e6d696e287461726765742e78312c207461726765742e7832293b0a0909636f6e7374207269676874203d204d6174682e6d6178287461726765742e78312c207461726765742e7832293b0a09090a09096966282163616e4a756d70546f5365676d656e7428656e656d792c63757272656e745365672c746172676574297c656e656d792e79202d204d6174682e6d696e287461726765742e79312c207461726765742e793229203e20313238297b0a09090972657475726e2066616c73650a09097d0a0909696628656e656d792e78203e206c65667420262620656e656d792e78203c207269676874297b0a0909092f2f206469726563746c7920756e6465722069742c206a756d70206e657874206368616e63650a0909096a756d7028656e656d79293b0a090909656e656d792e6a756d70436f6f6c646f776e203d20312e30202b204d6174682e72616e646f6d2829202a20302e353b0a090909656e656d792e666163654c6f636b54696d6572203d202e353b0a09090972657475726e20747275653b0a09097d20090a097d0a0972657475726e2066616c73653b0a7d0a0a66756e6374696f6e207472794a756d7057616c6c28656e656d792c77616c6c536567297b0a0969662877616c6c536567297b0a090969662828656e656d792e666163696e67203d3d3d203120262620656e656d792e626c6f636b6564526967687429207c7c2028656e656d792e666163696e67203d3d3d202d3120262620656e656d792e626c6f636b65644c65667429297b0a09090969662028616943616e4a756d704f76657228656e656d792c2077616c6c53656729297b0a09090909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e673b0a090909096a756d7028656e656d79293b0a09090909656e656d792e6a756d70436f6f6c646f776e203d20312e30202b204d6174682e72616e646f6d2829202a20302e353b0a09090909656e656d792e666163654c6f636b54696d6572203d202e353b0a09090909726573657441747461636b7328656e656d79290a0909090972657475726e20747275650a0909097d090909090a09097d09090a097d0a0972657475726e2066616c73653b0a7d0a2a2f
dURL 61692e6a73
descrHdr 41492066696c65
dislikes 0
docType 54454c412d4a532d31
docVersion 312e302e30
fileCheckC 333364363365336438333563386237323934343631353564316637363935383333636636623734656634333337393365333333346464653934346630383532
fileCheckS 646661343566326338343236633433313537363135393066656364353130323866383161383064613365323431353139363330353132383337363365323032
hash 38666439303866623239373661646465633936316338633534633133363963333139616466386233306633663431313734343938313831353866306334386530
iconURLHdr
likes 0
nameHdr 61692e6a73
owner 6465726f317179347966376335373777717a767a7134347833306c7967686135776a7a377772687736646e76356e337071346634643761716c75717133306d37616b
subDir
SCID uint64 variables
key value
built BLID : b75e5e7343d118783538d3557bb7052a215eb451d27fe818996d9b5789f52292
Tx RootHash: df392c09f6cf2adc3a4ec47051917012b1a1514a0f4a59d7869fb7c00e721c4c built height : 7241612
Timestamp: 1782424259817 Timestamp [UTC]: 2026-06-25 23:50:59 Age [y:d:h:m:s]: 2:41:14.467
Block: 7241616 Fee: 0.25603 Tx size: 18.271 kB
Tx version: 1 No of confirmations: 521 Signature type: DERO_HOMOMORPHIC
Extra:
DERO : 2 inputs/outputs (RING size) Fees 0.25603 Deposited to SC 0.00000
Sender : dero1qy4yf7c577wqzvzq44x30lygha5wjz7wrhw6dnv5n3pq4f4d7aqluqq30m7ak
address
dero1qykyta6ntpd27nl0yq4xtzaf4ls6p5e9pqu0k2x4x3pqq5xavjsdxqgny8270
dero1qy4yf7c577wqzvzq44x30lygha5wjz7wrhw6dnv5n3pq4f4d7aqluqq30m7ak
SC Balance: 0.00000 DERO
SC CODE:
  //  Copyright 2024. Civilware. All rights reserved.
//  TELA Decentralized Web Document (TELA-DOC-1)
Function InitializePrivate() Uint64
10 IF init() == 0 THEN GOTO 30
20 RETURN 1
30 STORE("nameHdr", "ai.js")
31 STORE("descrHdr", "AI file")
32 STORE("iconURLHdr", "")
33 STORE("dURL", "ai.js")
34 STORE("docType", "TELA-JS-1")
35 STORE("subDir", "")
36 STORE("fileCheckC", "33d63e3d835c8b729446155d1f7695833cf6b74ef433793e3334dde944f0852")
37 STORE("fileCheckS", "dfa45f2c8426c4315761590fecd51028f81a80da3e24151963051283763e202")
100 RETURN 0
End Function

Function init() Uint64
10 IF EXISTS("owner") == 0 THEN GOTO 30
20 RETURN 1
30 STORE("owner", address())
50 STORE("docVersion", "1.0.0")
60 STORE("hash", HEX(TXID()))
70 STORE("likes", 0)
80 STORE("dislikes", 0)
100 RETURN 0
End Function

Function address() String
10 DIM s as String
20 LET s = SIGNER()
30 IF IS_ADDRESS_VALID(s) THEN GOTO 50
40 RETURN "anon"
50 RETURN ADDRESS_STRING(s)
End Function

Function Rate(r Uint64) Uint64
10 DIM addr as String
15 LET addr = address()
16 IF r < 100 && EXISTS(addr) == 0 && addr != "anon" THEN GOTO 30
20 RETURN 1
30 STORE(addr, ""+r+"_"+BLOCK_HEIGHT())
40 IF r < 50 THEN GOTO 70
50 STORE("likes", LOAD("likes")+1)
60 RETURN 0
70 STORE("dislikes", LOAD("dislikes")+1)
100 RETURN 0
End Function

/*//----------------
// Update Entities
const enemySight = 1000;
function updateEnemyAI(enemy) {

	if (enemy.state === "dying" || (enemy.state === "dead")) return;	

	if (enemy.stun > 0) {
		enemy.anim.state = "none";
		enemy.moveState = "idle";
		resetAttacks(enemy);
		return;
	} 

	const dx = game.player.x - enemy.x;
	const dy = game.player.y - enemy.y;
	const dist = Math.hypot(dx, dy); 	
	if(dist > enemySight){ 
		enemy.moveInput = 0;
		enemy.anim.state = "none";
		enemy.moveState = "idle";
		resetAttacks(enemy)
		return;
	}      

	if (enemy.attackCooldown > 0) enemy.attackCooldown -= dt/1000;
	if (enemy.jumpCooldown > 0) enemy.jumpCooldown -= dt/1000;
	if (enemy.faceLockTimer > 0) enemy.faceLockTimer -= dt/1000;
	if (enemy.faceLockTimer <= 0) {
		enemy.facing = (dx < 0 ? -1 : 1);
	}	

	const { segment: playerSegment, platform: playerPlatform } = getPlatformUnder(game.player);
	const { segment: enemySegment,  platform: enemyPlatform  } = getPlatformUnder(enemy);

	const playerAbove = game.player.y < enemy.y - 40;
	let wallSeg = null;

	// --- PLATFORM NAVIGATION ---
	// --- DROP DOWN LOGIC ---
	if (enemyPlatform){
		
		if(enemyPlatform.id != enemy.onPlatform){
			enemy.blockedRight = false
			enemy.blockedLeft = false
			enemy.blockedP = null
			enemy.onPlatform  = enemyPlatform.id;
		}
		wallSeg = detectWallAhead(enemy)	

		// Reset all platform enemy lists
		for (const plat of game.platforms) {
			plat.enemies.length = 0;
			// Assign enemies to their platform lists
			for (const e of game.enemies) {
				if (e.onPlatform === plat.id) {
					plat.enemies.push(e);
				}
			}			
			const range = 60; // or whatever feels right
			for (const other of plat.enemies) {
				if (other === enemy | !enemy.onGround | !other.onGround | other.onPlatform !== enemy.onPlatform | other.state === "dead" | other.state === "dying") continue;

				const dx = Math.abs(other.x - enemy.x);
				if (dx <= range) {
					if (enemy.blockedLeft){  other.blockedLeft  = true; other.blockedRight  = false; enemy.blockedP = plat.id;}
					if (enemy.blockedRight){  other.blockedRight  = true; other.blockedLeft  = false; enemy.blockedP = plat.id;}
				}
			}
		}

		const playerBelowPlatform = isPlayerBelowPlatform(enemyPlatform)	
		
		if(enemy.type !== "grunt" && isNearEdgeFacing(enemy, enemyPlatform, 10)){
				enemy.moveInput = 0;
				enemy.anim.state = "none";
				enemy.moveState = "idle";
				resetAttacks(enemy);
				return; 
			}
		

		
		// if player is below, move off closest edge
		if (playerBelowPlatform) {
			const leftEdge  = enemyPlatform.minX;
			const rightEdge = enemyPlatform.maxX;

			const distToLeft  = Math.abs(game.player.x - leftEdge);
			const distToRight = Math.abs(game.player.x - rightEdge);

			const targetEdge = (distToLeft < distToRight) ? leftEdge : rightEdge;
			const move = Math.sign(targetEdge - enemy.x);
			if(enemy.type !== "grunt" ){
				if(move !== Math.sign(game.player.x - enemy.x)|| !isNearEdgeFacing(enemy, enemyPlatform, 10) ){//&& Math.abs(dx)>4)check distance here(for slopes)
					pursue(enemy, dx, enemySegment, playerPlatform, wallSeg);
				}else{
				enemy.moveInput = 0;
				enemy.anim.state = "none";
				enemy.moveState = "idle";
				}
				resetAttacks(enemy);
				return; 
			}else{
				// Move toward that edge
				enemy.moveInput = move;
				enemy.facing = enemy.moveInput;
				if(directionBlocked(enemy)){
					enemy.facing = -enemy.moveInput;
					enemy.moveInput = enemy.facing;
				}		
				
				// BOOST: ensure they actually fall off
				if (isNearPlatformEdge(enemy, enemyPlatform, 10) && isSafeToDrop(enemy)) {
					enemy.faceLockTimer = .75;
					enemy.vx = enemy.facing * enemy.speed * 1.2; // small push
					enemy.vy = -0.4; // tiny hop upward to break platform glue
					enemy.inAir = true;
					enemy.onGround = false;
				}
			}
			return;
			
		}
		
		if (playerAbove)  {
			
			// don't get led off the edge
			if(playerSegment){
				// if near edge, check if able to jump up, if not, stop
				

				if (isNearEdgeFacing(enemy, enemyPlatform, 12)) {			
					if (tryJumpAbove(enemy,enemySegment))return;	
					if(!isSafeToDrop(enemy)){
					enemy.moveInput = 0;
					enemy.anim.state = "none";
					enemy.moveState = "idle";
					return;
					}
				}				
			}else{
				//no player platform / segment
				if (isNearEdgeFacing(enemy, enemyPlatform, 12) 
					) {
					enemy.moveInput = 0;
					enemy.anim.state = "none";
					enemy.moveState = "idle";
					return;
				}
				pursue(enemy, dx, enemySegment, playerPlatform);
				return
			}	
			
		}
		
		
		

		// Try to get to player platform
		if (playerSegment && enemySegment !== playerSegment ) {
			let target;
			if(enemyPlatform != playerPlatform){
				if(playerAbove){
					const closestSegments = findClosestSegmentsBetween(enemyPlatform, playerPlatform);
					const closestSegmentsMidPoint = findClosestSegmentsBetweenMidPoints(enemyPlatform, playerPlatform);		
					const segmentOverPlatform = getSegmentOverPlatform(enemyPlatform);
					const segmentOverCurrentSegment = getSegmentOverCurrent(enemySegment)
					const bestJumpSegment = findBestJumpSegment(enemy, enemyPlatform, playerPlatform);	
				
					target = closestSegments.segA;
					if(target !== enemySegment){					
						
						if(closestSegments.segA !== closestSegmentsMidPoint.segA ){
							
							if(segmentOverCurrentSegment){
								target = segmentOverCurrentSegment;
							}else if(segmentOverPlatform){							
								target = segmentOverPlatform;
							}
						}
						
						if(playerAbove && target){
							if (tryTarget(enemy,enemySegment,target))return;							
						}

						moveTowardSegment(enemy, enemyPlatform, target, wallSeg)
						avoidWallsOnSamePlatform(enemy, wallSeg)
						return;
					}
					
				
					target = bestJumpSegment;
					if(!target && playerAbove){
						target = segmentOverCurrentSegment;
					}
					if(!target && playerAbove){
						target = segmentOverPlatform;
					}
					
					if(!target && closestSegments.segA === enemySegment){
						target = closestSegments.segB;
					}
					
					if(!isSegmentBelowPlatform(target, playerPlatform)){
						target = playerSegment;
					}
			

					if(target ){
						if (tryJumpAbove(enemy,enemySegment))return;
					
						if( typeof segmentOverPlatform !== "undefined" && segmentOverPlatform !==null){
							if(segmentOverPlatform.pid === playerPlatform.id){								
								if(jumpToSegment(enemy,enemyPlatform,segmentOverPlatform,wallSeg)){
									avoidWallsOnSamePlatform(enemy,enemyPlatform,wallSeg)	
									return;
								}								
							}
						}

						if(!moveTowardSegment(enemy, enemyPlatform, target, wallSeg)&&segmentOverPlatform){
							moveTowardSegment(enemy, enemyPlatform, segmentOverPlatform, wallSeg)
							avoidWallsOnSamePlatform(enemy,enemyPlatform,wallSeg)	
							return
						}
						
						if (tryTarget(enemy,enemySegment,target))return;
					}
				}
				
			}

			if (canJumpToSegment(enemy, enemySegment, playerSegment)&& !isSegmentBelowSegment(playerSegment, enemySegment)){//
				if(platformJump(enemy,enemyPlatform)) return;
			}
			
			pursue(enemy, dx, enemySegment, playerPlatform, wallSeg);
			return;
		}
		
		
	}

	if(!enemy.inAir){enemy.faceLockTimer = 0;}//don't walk off edge if just landed on player platform
	//--- SAME PLATFORM: NORMAL PURSUIT + ATTACK ---
	if (dist < 50) {
		// attack logic...
		let delay = 0.3 + Math.random() * 0.7; // 0.3-1.0 sec
		if(enemy.type === "boss") delay = 0.5;
		// Only punch if cooldown is done
		if (enemy.attackCooldown <= 0) {
			
			
			enemy.verticalInput = 0;
			enemy.attackCooldown = delay;
			if (Math.random() < 0.5) {				
				enemy.wantPunch = true;
			}else{
				enemy.wantKick = true;
			}

						
			if(!game.player.inAir && game.player.verticalInput < 0){
				enemy.verticalInput = 0;
			}else if (Math.random() < 0.5){
				enemy.verticalInput = 0;
			}else{
				enemy.verticalInput = 1;
			}
		}
		if(enemy.anim.state === "walk" && enemy.type !== "boss"){
			resetAttacks(enemy)
		}
		if (enemy.anim.state === "punch"  && enemy.anim.frame > attackFrames.punch.end ) {
			enemy.wantPunch = false;				
		}
		if (enemy.anim.state === "highPunch"  && enemy.anim.frame > attackFrames.highPunch.end ) {
			enemy.wantPunch = false;				
		}
		if (enemy.anim.state === "kick"  && enemy.anim.frame > attackFrames.kick.end ) {
			enemy.wantKick = false;				
		}
		if (enemy.anim.state === "highKick"  && enemy.anim.frame > attackFrames.highKick.end ) {
			enemy.wantKick = false;				
		}
		
		if(enemy.type !== "boss"){
			enemy.moveInput = 0;
		}else{
		//boss 
			if (enemy.anim.state === "walkPunch"  && enemy.anim.frame > attackFrames.walkPunch.end ) {
				enemy.wantPunch = false;				
			}
			if (enemy.anim.state === "walkHighPunch"  && enemy.anim.frame > attackFrames.walkHighPunch.end ) {
				enemy.wantPunch = false;				
			}
			if(enemy.type === "boss" && !enemy.wantPunch ) { 
				enemy.moveInput = 0;
				if(enemy.anim.state === "walk"){
					resetAttacks(enemy)
				}
			}
		}
		// for audio
		const attackPressed = (enemy.wantPunch || enemy.wantKick) && !enemy.prevAttack;
		enemy.prevAttack = enemy.wantPunch || enemy.wantKick;
		if (attackPressed) {
			sfxHuh();
			game.player.prevHit =false;
		}	
	} else {		
		pursue(enemy, dx, enemySegment, playerPlatform, wallSeg);
	}
}
function isSegmentBelowPlatform(seg, plat){
	for (const pseg of plat.segments) {
        // Optional: only treat floor-type segments as platform surface
        if (pseg.isWall)continue;
		if(isSegmentBelowSegment(seg,pseg)) return true;		
	}
	return false;		
}



function pursue(enemy,dx, enemySegment, playerPlatform,wallSeg){
	let wallJumped = false;
	if(wallSeg){
		if(tryJumpWall(enemy,wallSeg)){
			resetAttacks(enemy);
			return
		}
	}
	
	
	if (keepEnemySpacing(enemy)) {
			enemy.anim.state = "none";
			enemy.moveState = "idle";
			enemy.moveInput = 0;
		return;
	}

	if (enemy.type !== "grunt" && enemySegment){
		const plat = getPlatformById(enemy.onPlatform)
		if(typeof plat !== "undefined"){
			if(isNearEdgeFacing(enemy,plat , 10)){
				 enemy.moveInput = 0;
				enemy.anim.state = "none";
				enemy.moveState = "idle";	
				resetAttacks(enemy);
				return
			}
		}
		
	}
	if(playerPlatform && enemySegment){
		if (playerPlatform.id === enemy.onPlatform){
			const behind = countEnemiesBehind(enemy);
			if (behind >= 1 && countEnemiesAhead(enemy) < behind && Math.abs(dx) >= 50 && Math.abs(dx) < 100) {//&& Math.abs(dx) >= 65
				if (enemy.onGround && enemy.jumpCooldown <= 0) {
					enemy.moveInput = enemy.facing;
					jump(enemy);
					enemy.jumpCooldown = 1.0 + Math.random() * 0.5;
					return;
				}
			}
				if(
				playerIsThreatening(game.player) && enemy.onGround &&
				(enemy.facing === 1 && game.player.facing === -1 ||
				enemy.facing === -1 && game.player.facing === 1)
				) {
				const safeDist = 70; 

				if (Math.abs(dx) < safeDist) {
					enemy.moveInput = 0;
					enemy.anim.state = "none";
					enemy.moveState = "idle";
					return;
				}
			}
		}	
	}
	
		// normal movement
	if (Math.abs(dx) > 3 ) { 
		if(enemySegment && Math.abs(enemySegment.angle) > maxClimbAngle){ 
			enemy.moveInput = enemy.facing;
			jump(enemy);
			enemy.jumpCooldown = 1.0 + Math.random() * 0.5;
		}else{
			enemy.moveInput = enemy.facing;
			enemy.anim.state = "walk";
		}
		
    } else if(playerPlatform && enemySegment){
		enemy.moveInput = 0;
		enemy.anim.state = "none";
		enemy.moveState = "idle";	
    }		
	avoidWallsOnSamePlatform(enemy, wallSeg)
	resetAttacks(enemy)

}


function moveTowardSegment(enemy,enemyPlatform,target, wallSeg){
	
	// walk toward it
	let left = Math.min(target.x1, target.x2);
	let right = Math.max(target.x1, target.x2);
	let ytarget = Math.min(target.y1, target.y2);
	
	const enemyPlatLeft = Math.min(enemyPlatform.x1, enemyPlatform.x2);
	const enemyPlatRight = Math.max(enemyPlatform.x1, enemyPlatform.x2);
	
	//target the lower edge if there is one
	if(target.y1 > target.y2){
		left = target.x1;
		right = target.x1 + 8;
		ytarget = target.y1;
	}else if(target.y1 < target.y2){
		left = target.x2 - 8;
		right = target.x2;
		ytarget = target.y2;
	}
	
	if (enemy.x < left -8 ){ 		
		enemy.moveInput = 1;
		enemy.anim.state = "walk";
		enemy.facing = enemy.moveInput;		
		if(tryJumpWall(enemy,wallSeg))return true;
	}
	else if (enemy.x > right +8) {		
	
		enemy.moveInput = -1;
		enemy.anim.state = "walk";
		enemy.facing = enemy.moveInput;	
		if(tryJumpWall(enemy,wallSeg))return true;		
	}
	else if(enemy.y - ytarget < 128 && !enemy.inAir && (enemy.onPlatform !== target.pid)){
		// directly under it or close to it, jump next chance
		jump(enemy);
		enemy.jumpCooldown = 1.0 + Math.random() * 0.5;
		enemy.faceLockTimer = .5;
	}else{
		enemy.moveInput = enemy.facing

		if(directionBlocked(enemy)){
			enemy.facing = -enemy.moveInput;
			enemy.moveInput = enemy.facing;
		}
		resetAttacks(enemy)
		return false
	}	
	resetAttacks(enemy)
	return true
}
	



function jumpToSegment(enemy,enemyPlatform,target,wallSeg){
	let left = Math.min(target.x1, target.x2);
	let right = Math.max(target.x1, target.x2);

	//target the lower edge if there is one
	if(target.y1 > target.y2){
		left = target.x1;
		right = target.x1 + 8;
	}else if(target.y1 < target.y2){
		left = target.x2 - 8;
		right = target.x2;
	}

	
	if(enemy.y - Math.min(target.y1, target.y2) < 128 
	&& isUnderOrFacingSegment(enemy, target)){ 
		// directly under it, jump next chance
		jump(enemy);
		enemy.jumpCooldown = 1.0 + Math.random() * 0.5;
		enemy.faceLockTimer = .5;		
		return true
	}
	return false
}

function platformJump(enemy,enemyPlatform){
	if(isNearEdgeFacing(enemy, enemyPlatform, 20)  &&
		enemy.jumpCooldown <= 0 &&
		!enemy.inAir && !directionBlocked(enemy)) {
		if(enemy.vx !=0){
			enemy.moveInput = enemy.facing;
		}
		jump(enemy);
		enemy.jumpCooldown = 1.0 + Math.random() * 0.5;
		return true; //  commit jump
	}
	return false;
}
	
function tryTarget(enemy,enemySegment,target){
	
	if(enemy.y - Math.min(target.y1, target.y2) > 128)return false;	

	const left = Math.min(target.x1, target.x2);
	const right = Math.max(target.x1, target.x2);
	
	
	let distToTarget = 25; 
	if (enemy.x < left) distToTarget = (enemy.x + 25) - left;
	if (enemy.x > right) distToTarget = (right + 25) - enemy.x;
	distToTarget = Math.max(distToTarget, 25)

	if ((enemy.facing === 1 && enemy.moveInput ===1 && enemy.x < left - 5 && enemy.x > left - distToTarget )|| // might try relative to right minus left
	(enemy.facing === -1 && enemy.moveInput === -1 && enemy.x > right + 5 && enemy.x < right + distToTarget )){ 	//getting near, jump now	 
		jump(enemy);
		enemy.jumpCooldown = 1.0 + Math.random() * 0.5;
		enemy.faceLockTimer = .5;
		return true;
	}

	return false;
}



function tryJumpAbove(enemy,currentSeg){

	const target = getSegmentOverCurrent(currentSeg);//get lowest platform over current platform

	if(target){	
		const left = Math.min(target.x1, target.x2);
		const right = Math.max(target.x1, target.x2);
		
		if(!canJumpToSegment(enemy,currentSeg,target)|enemy.y - Math.min(target.y1, target.y2) > 128){
			return false
		}
		if(enemy.x > left && enemy.x < right){
			// directly under it, jump next chance
			jump(enemy);
			enemy.jumpCooldown = 1.0 + Math.random() * 0.5;
			enemy.faceLockTimer = .5;
			return true;
		} 	
	}
	return false;
}

function tryJumpWall(enemy,wallSeg){
	if(wallSeg){
		if((enemy.facing === 1 && enemy.blockedRight) || (enemy.facing === -1 && enemy.blockedLeft)){
			if (aiCanJumpOver(enemy, wallSeg)){
				enemy.moveInput = enemy.facing;
				jump(enemy);
				enemy.jumpCooldown = 1.0 + Math.random() * 0.5;
				enemy.faceLockTimer = .5;
				resetAttacks(enemy)
				return true
			}				
		}		
	}
	return false;
}
*/
SC Arguments: [Name:SC_ACTION Type:uint64 Value:'1' Name:SC_CODE Type:string Value:'// Copyright 2024. Civilware. All rights reserved. // TELA Decentralized Web Document (TELA-DOC-1) Function InitializePrivate() Uint64 10 IF init() == 0 THEN GOTO 30 20 RETURN 1 30 STORE("nameHdr", "ai.js") 31 STORE("descrHdr", "AI file") 32 STORE("iconURLHdr", "") 33 STORE("dURL", "ai.js") 34 STORE("docType", "TELA-JS-1") 35 STORE("subDir", "") 36 STORE("fileCheckC", "33d63e3d835c8b729446155d1f7695833cf6b74ef433793e3334dde944f0852") 37 STORE("fileCheckS", "dfa45f2c8426c4315761590fecd51028f81a80da3e24151963051283763e202") 100 RETURN 0 End Function Function init() Uint64 10 IF EXISTS("owner") == 0 THEN GOTO 30 20 RETURN 1 30 STORE("owner", address()) 50 STORE("docVersion", "1.0.0") 60 STORE("hash", HEX(TXID())) 70 STORE("likes", 0) 80 STORE("dislikes", 0) 100 RETURN 0 End Function Function address() String 10 DIM s as String 20 LET s = SIGNER() 30 IF IS_ADDRESS_VALID(s) THEN GOTO 50 40 RETURN "anon" 50 RETURN ADDRESS_STRING(s) End Function Function Rate(r Uint64) Uint64 10 DIM addr as String 15 LET addr = address() 16 IF r < 100 && EXISTS(addr) == 0 && addr != "anon" THEN GOTO 30 20 RETURN 1 30 STORE(addr, ""+r+"_"+BLOCK_HEIGHT()) 40 IF r < 50 THEN GOTO 70 50 STORE("likes", LOAD("likes")+1) 60 RETURN 0 70 STORE("dislikes", LOAD("dislikes")+1) 100 RETURN 0 End Function /*//---------------- // Update Entities const enemySight = 1000; function updateEnemyAI(enemy) { if (enemy.state === "dying" || (enemy.state === "dead")) return; if (enemy.stun > 0) { enemy.anim.state = "none"; enemy.moveState = "idle"; resetAttacks(enemy); return; } const dx = game.player.x - enemy.x; const dy = game.player.y - enemy.y; const dist = Math.hypot(dx, dy); if(dist > enemySight){ enemy.moveInput = 0; enemy.anim.state = "none"; enemy.moveState = "idle"; resetAttacks(enemy) return; } if (enemy.attackCooldown > 0) enemy.attackCooldown -= dt/1000; if (enemy.jumpCooldown > 0) enemy.jumpCooldown -= dt/1000; if (enemy.faceLockTimer > 0) enemy.faceLockTimer -= dt/1000; if (enemy.faceLockTimer <= 0) { enemy.facing = (dx < 0 ? -1 : 1); } const { segment: playerSegment, platform: playerPlatform } = getPlatformUnder(game.player); const { segment: enemySegment, platform: enemyPlatform } = getPlatformUnder(enemy); const playerAbove = game.player.y < enemy.y - 40; let wallSeg = null; // --- PLATFORM NAVIGATION --- // --- DROP DOWN LOGIC --- if (enemyPlatform){ if(enemyPlatform.id != enemy.onPlatform){ enemy.blockedRight = false enemy.blockedLeft = false enemy.blockedP = null enemy.onPlatform = enemyPlatform.id; } wallSeg = detectWallAhead(enemy) // Reset all platform enemy lists for (const plat of game.platforms) { plat.enemies.length = 0; // Assign enemies to their platform lists for (const e of game.enemies) { if (e.onPlatform === plat.id) { plat.enemies.push(e); } } const range = 60; // or whatever feels right for (const other of plat.enemies) { if (other === enemy | !enemy.onGround | !other.onGround | other.onPlatform !== enemy.onPlatform | other.state === "dead" | other.state === "dying") continue; const dx = Math.abs(other.x - enemy.x); if (dx <= range) { if (enemy.blockedLeft){ other.blockedLeft = true; other.blockedRight = false; enemy.blockedP = plat.id;} if (enemy.blockedRight){ other.blockedRight = true; other.blockedLeft = false; enemy.blockedP = plat.id;} } } } const playerBelowPlatform = isPlayerBelowPlatform(enemyPlatform) if(enemy.type !== "grunt" && isNearEdgeFacing(enemy, enemyPlatform, 10)){ enemy.moveInput = 0; enemy.anim.state = "none"; enemy.moveState = "idle"; resetAttacks(enemy); return; } // if player is below, move off closest edge if (playerBelowPlatform) { const leftEdge = enemyPlatform.minX; const rightEdge = enemyPlatform.maxX; const distToLeft = Math.abs(game.player.x - leftEdge); const distToRight = Math.abs(game.player.x - rightEdge); const targetEdge = (distToLeft < distToRight) ? leftEdge : rightEdge; const move = Math.sign(targetEdge - enemy.x); if(enemy.type !== "grunt" ){ if(move !== Math.sign(game.player.x - enemy.x)|| !isNearEdgeFacing(enemy, enemyPlatform, 10) ){//&& Math.abs(dx)>4)check distance here(for slopes) pursue(enemy, dx, enemySegment, playerPlatform, wallSeg); }else{ enemy.moveInput = 0; enemy.anim.state = "none"; enemy.moveState = "idle"; } resetAttacks(enemy); return; }else{ // Move toward that edge enemy.moveInput = move; enemy.facing = enemy.moveInput; if(directionBlocked(enemy)){ enemy.facing = -enemy.moveInput; enemy.moveInput = enemy.facing; } // BOOST: ensure they actually fall off if (isNearPlatformEdge(enemy, enemyPlatform, 10) && isSafeToDrop(enemy)) { enemy.faceLockTimer = .75; enemy.vx = enemy.facing * enemy.speed * 1.2; // small push enemy.vy = -0.4; // tiny hop upward to break platform glue enemy.inAir = true; enemy.onGround = false; } } return; } if (playerAbove) { // don't get led off the edge if(playerSegment){ // if near edge, check if able to jump up, if not, stop if (isNearEdgeFacing(enemy, enemyPlatform, 12)) { if (tryJumpAbove(enemy,enemySegment))return; if(!isSafeToDrop(enemy)){ enemy.moveInput = 0; enemy.anim.state = "none"; enemy.moveState = "idle"; return; } } }else{ //no player platform / segment if (isNearEdgeFacing(enemy, enemyPlatform, 12) ) { enemy.moveInput = 0; enemy.anim.state = "none"; enemy.moveState = "idle"; return; } pursue(enemy, dx, enemySegment, playerPlatform); return } } // Try to get to player platform if (playerSegment && enemySegment !== playerSegment ) { let target; if(enemyPlatform != playerPlatform){ if(playerAbove){ const closestSegments = findClosestSegmentsBetween(enemyPlatform, playerPlatform); const closestSegmentsMidPoint = findClosestSegmentsBetweenMidPoints(enemyPlatform, playerPlatform); const segmentOverPlatform = getSegmentOverPlatform(enemyPlatform); const segmentOverCurrentSegment = getSegmentOverCurrent(enemySegment) const bestJumpSegment = findBestJumpSegment(enemy, enemyPlatform, playerPlatform); target = closestSegments.segA; if(target !== enemySegment){ if(closestSegments.segA !== closestSegmentsMidPoint.segA ){ if(segmentOverCurrentSegment){ target = segmentOverCurrentSegment; }else if(segmentOverPlatform){ target = segmentOverPlatform; } } if(playerAbove && target){ if (tryTarget(enemy,enemySegment,target))return; } moveTowardSegment(enemy, enemyPlatform, target, wallSeg) avoidWallsOnSamePlatform(enemy, wallSeg) return; } target = bestJumpSegment; if(!target && playerAbove){ target = segmentOverCurrentSegment; } if(!target && playerAbove){ target = segmentOverPlatform; } if(!target && closestSegments.segA === enemySegment){ target = closestSegments.segB; } if(!isSegmentBelowPlatform(target, playerPlatform)){ target = playerSegment; } if(target ){ if (tryJumpAbove(enemy,enemySegment))return; if( typeof segmentOverPlatform !== "undefined" && segmentOverPlatform !==null){ if(segmentOverPlatform.pid === playerPlatform.id){ if(jumpToSegment(enemy,enemyPlatform,segmentOverPlatform,wallSeg)){ avoidWallsOnSamePlatform(enemy,enemyPlatform,wallSeg) return; } } } if(!moveTowardSegment(enemy, enemyPlatform, target, wallSeg)&&segmentOverPlatform){ moveTowardSegment(enemy, enemyPlatform, segmentOverPlatform, wallSeg) avoidWallsOnSamePlatform(enemy,enemyPlatform,wallSeg) return } if (tryTarget(enemy,enemySegment,target))return; } } } if (canJumpToSegment(enemy, enemySegment, playerSegment)&& !isSegmentBelowSegment(playerSegment, enemySegment)){// if(platformJump(enemy,enemyPlatform)) return; } pursue(enemy, dx, enemySegment, playerPlatform, wallSeg); return; } } if(!enemy.inAir){enemy.faceLockTimer = 0;}//don't walk off edge if just landed on player platform //--- SAME PLATFORM: NORMAL PURSUIT + ATTACK --- if (dist < 50) { // attack logic... let delay = 0.3 + Math.random() * 0.7; // 0.3-1.0 sec if(enemy.type === "boss") delay = 0.5; // Only punch if cooldown is done if (enemy.attackCooldown <= 0) { enemy.verticalInput = 0; enemy.attackCooldown = delay; if (Math.random() < 0.5) { enemy.wantPunch = true; }else{ enemy.wantKick = true; } if(!game.player.inAir && game.player.verticalInput < 0){ enemy.verticalInput = 0; }else if (Math.random() < 0.5){ enemy.verticalInput = 0; }else{ enemy.verticalInput = 1; } } if(enemy.anim.state === "walk" && enemy.type !== "boss"){ resetAttacks(enemy) } if (enemy.anim.state === "punch" && enemy.anim.frame > attackFrames.punch.end ) { enemy.wantPunch = false; } if (enemy.anim.state === "highPunch" && enemy.anim.frame > attackFrames.highPunch.end ) { enemy.wantPunch = false; } if (enemy.anim.state === "kick" && enemy.anim.frame > attackFrames.kick.end ) { enemy.wantKick = false; } if (enemy.anim.state === "highKick" && enemy.anim.frame > attackFrames.highKick.end ) { enemy.wantKick = false; } if(enemy.type !== "boss"){ enemy.moveInput = 0; }else{ //boss if (enemy.anim.state === "walkPunch" && enemy.anim.frame > attackFrames.walkPunch.end ) { enemy.wantPunch = false; } if (enemy.anim.state === "walkHighPunch" && enemy.anim.frame > attackFrames.walkHighPunch.end ) { enemy.wantPunch = false; } if(enemy.type === "boss" && !enemy.wantPunch ) { enemy.moveInput = 0; if(enemy.anim.state === "walk"){ resetAttacks(enemy) } } } // for audio const attackPressed = (enemy.wantPunch || enemy.wantKick) && !enemy.prevAttack; enemy.prevAttack = enemy.wantPunch || enemy.wantKick; if (attackPressed) { sfxHuh(); game.player.prevHit =false; } } else { pursue(enemy, dx, enemySegment, playerPlatform, wallSeg); } } function isSegmentBelowPlatform(seg, plat){ for (const pseg of plat.segments) { // Optional: only treat floor-type segments as platform surface if (pseg.isWall)continue; if(isSegmentBelowSegment(seg,pseg)) return true; } return false; } function pursue(enemy,dx, enemySegment, playerPlatform,wallSeg){ let wallJumped = false; if(wallSeg){ if(tryJumpWall(enemy,wallSeg)){ resetAttacks(enemy); return } } if (keepEnemySpacing(enemy)) { enemy.anim.state = "none"; enemy.moveState = "idle"; enemy.moveInput = 0; return; } if (enemy.type !== "grunt" && enemySegment){ const plat = getPlatformById(enemy.onPlatform) if(typeof plat !== "undefined"){ if(isNearEdgeFacing(enemy,plat , 10)){ enemy.moveInput = 0; enemy.anim.state = "none"; enemy.moveState = "idle"; resetAttacks(enemy); return } } } if(playerPlatform && enemySegment){ if (playerPlatform.id === enemy.onPlatform){ const behind = countEnemiesBehind(enemy); if (behind >= 1 && countEnemiesAhead(enemy) < behind && Math.abs(dx) >= 50 && Math.abs(dx) < 100) {//&& Math.abs(dx) >= 65 if (enemy.onGround && enemy.jumpCooldown <= 0) { enemy.moveInput = enemy.facing; jump(enemy); enemy.jumpCooldown = 1.0 + Math.random() * 0.5; return; } } if( playerIsThreatening(game.player) && enemy.onGround && (enemy.facing === 1 && game.player.facing === -1 || enemy.facing === -1 && game.player.facing === 1) ) { const safeDist = 70; if (Math.abs(dx) < safeDist) { enemy.moveInput = 0; enemy.anim.state = "none"; enemy.moveState = "idle"; return; } } } } // normal movement if (Math.abs(dx) > 3 ) { if(enemySegment && Math.abs(enemySegment.angle) > maxClimbAngle){ enemy.moveInput = enemy.facing; jump(enemy); enemy.jumpCooldown = 1.0 + Math.random() * 0.5; }else{ enemy.moveInput = enemy.facing; enemy.anim.state = "walk"; } } else if(playerPlatform && enemySegment){ enemy.moveInput = 0; enemy.anim.state = "none"; enemy.moveState = "idle"; } avoidWallsOnSamePlatform(enemy, wallSeg) resetAttacks(enemy) } function moveTowardSegment(enemy,enemyPlatform,target, wallSeg){ // walk toward it let left = Math.min(target.x1, target.x2); let right = Math.max(target.x1, target.x2); let ytarget = Math.min(target.y1, target.y2); const enemyPlatLeft = Math.min(enemyPlatform.x1, enemyPlatform.x2); const enemyPlatRight = Math.max(enemyPlatform.x1, enemyPlatform.x2); //target the lower edge if there is one if(target.y1 > target.y2){ left = target.x1; right = target.x1 + 8; ytarget = target.y1; }else if(target.y1 < target.y2){ left = target.x2 - 8; right = target.x2; ytarget = target.y2; } if (enemy.x < left -8 ){ enemy.moveInput = 1; enemy.anim.state = "walk"; enemy.facing = enemy.moveInput; if(tryJumpWall(enemy,wallSeg))return true; } else if (enemy.x > right +8) { enemy.moveInput = -1; enemy.anim.state = "walk"; enemy.facing = enemy.moveInput; if(tryJumpWall(enemy,wallSeg))return true; } else if(enemy.y - ytarget < 128 && !enemy.inAir && (enemy.onPlatform !== target.pid)){ // directly under it or close to it, jump next chance jump(enemy); enemy.jumpCooldown = 1.0 + Math.random() * 0.5; enemy.faceLockTimer = .5; }else{ enemy.moveInput = enemy.facing if(directionBlocked(enemy)){ enemy.facing = -enemy.moveInput; enemy.moveInput = enemy.facing; } resetAttacks(enemy) return false } resetAttacks(enemy) return true } function jumpToSegment(enemy,enemyPlatform,target,wallSeg){ let left = Math.min(target.x1, target.x2); let right = Math.max(target.x1, target.x2); //target the lower edge if there is one if(target.y1 > target.y2){ left = target.x1; right = target.x1 + 8; }else if(target.y1 < target.y2){ left = target.x2 - 8; right = target.x2; } if(enemy.y - Math.min(target.y1, target.y2) < 128 && isUnderOrFacingSegment(enemy, target)){ // directly under it, jump next chance jump(enemy); enemy.jumpCooldown = 1.0 + Math.random() * 0.5; enemy.faceLockTimer = .5; return true } return false } function platformJump(enemy,enemyPlatform){ if(isNearEdgeFacing(enemy, enemyPlatform, 20) && enemy.jumpCooldown <= 0 && !enemy.inAir && !directionBlocked(enemy)) { if(enemy.vx !=0){ enemy.moveInput = enemy.facing; } jump(enemy); enemy.jumpCooldown = 1.0 + Math.random() * 0.5; return true; // commit jump } return false; } function tryTarget(enemy,enemySegment,target){ if(enemy.y - Math.min(target.y1, target.y2) > 128)return false; const left = Math.min(target.x1, target.x2); const right = Math.max(target.x1, target.x2); let distToTarget = 25; if (enemy.x < left) distToTarget = (enemy.x + 25) - left; if (enemy.x > right) distToTarget = (right + 25) - enemy.x; distToTarget = Math.max(distToTarget, 25) if ((enemy.facing === 1 && enemy.moveInput ===1 && enemy.x < left - 5 && enemy.x > left - distToTarget )|| // might try relative to right minus left (enemy.facing === -1 && enemy.moveInput === -1 && enemy.x > right + 5 && enemy.x < right + distToTarget )){ //getting near, jump now jump(enemy); enemy.jumpCooldown = 1.0 + Math.random() * 0.5; enemy.faceLockTimer = .5; return true; } return false; } function tryJumpAbove(enemy,currentSeg){ const target = getSegmentOverCurrent(currentSeg);//get lowest platform over current platform if(target){ const left = Math.min(target.x1, target.x2); const right = Math.max(target.x1, target.x2); if(!canJumpToSegment(enemy,currentSeg,target)|enemy.y - Math.min(target.y1, target.y2) > 128){ return false } if(enemy.x > left && enemy.x < right){ // directly under it, jump next chance jump(enemy); enemy.jumpCooldown = 1.0 + Math.random() * 0.5; enemy.faceLockTimer = .5; return true; } } return false; } function tryJumpWall(enemy,wallSeg){ if(wallSeg){ if((enemy.facing === 1 && enemy.blockedRight) || (enemy.facing === -1 && enemy.blockedLeft)){ if (aiCanJumpOver(enemy, wallSeg)){ enemy.moveInput = enemy.facing; jump(enemy); enemy.jumpCooldown = 1.0 + Math.random() * 0.5; enemy.faceLockTimer = .5; resetAttacks(enemy) return true } } } return false; } */']


Prove to someone that you have sent them DERO in this transaction

proof can be obtained using wallet command in dero-wallet-cli or from the statement
Note: proof is sent to the server, as the calculations are done on the server side


TX hex bytes
01000005008cffb903b75e5e7343d118783538d3557bb7052a215eb451d27fe818996d9b5789f522920100000000000000000000000000000000000000000000000000000000000000000001134f6285ff2a720beb9ab6b0f751db9099f6d24d849b1cf86d95589a40dbbf1c0096df170698aa98e5a282eb86e24a35a564c7676bb7588175a1b0c537fcacd7f312cd0ca06e70841d1de7a79681339bed7465f43f03d61e6d22742e1eaa46f1e8dcea8a3c491e444beb2784045f1855af474778179f3fa5caaeb12f60979824cc86d4e553d8f57709e0cf8ae3dc26ed5c010a83c801147a1cee82d982172645e680765fe834635ae4deb7fcc46bde127e80f6e4c15400635d6e4e24829b4249fe0652cc4b757b86bfc9672b89b2d330ff0a92feb2a02e78a9b7f3fed71caf95bc64c2b55c010ad32bbea30120e62d43020fcc665e1bd05c79750ec70ccf6c26efe67beca752fef0d89b172001df392c09f6cf2adc3a4ec47051917012b1a1514a0f4a59d7869fb7c00e721c4cdd8401a26853435f434f4445537942442f2f2020436f7079726967687420323032342e20436976696c776172652e20416c6c207269676874732072657365727665642e0a2f2f202054454c4120446563656e7472616c697a65642057656220446f63756d656e74202854454c412d444f432d31290a46756e6374696f6e20496e697469616c697a655072697661746528292055696e7436340a313020494620696e69742829203d3d2030205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528226e616d65486472222c202261692e6a7322290a33312053544f524528226465736372486472222c202241492066696c6522290a33322053544f5245282269636f6e55524c486472222c202222290a33332053544f524528226455524c222c202261692e6a7322290a33342053544f52452822646f6354797065222c202254454c412d4a532d3122290a33352053544f52452822737562446972222c202222290a33362053544f5245282266696c65436865636b43222c202233336436336533643833356338623732393434363135356431663736393538333363663662373465663433333739336533333334646465393434663038353222290a33372053544f5245282266696c65436865636b53222c202264666134356632633834323663343331353736313539306665636435313032386638316138306461336532343135313936333035313238333736336532303222290a3130302052455455524e20300a456e642046756e6374696f6e0a0a46756e6374696f6e20696e697428292055696e7436340a31302049462045584953545328226f776e65722229203d3d2030205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528226f776e6572222c20616464726573732829290a35302053544f52452822646f6356657273696f6e222c2022312e302e3022290a36302053544f5245282268617368222c204845582854584944282929290a37302053544f524528226c696b6573222c2030290a38302053544f524528226469736c696b6573222c2030290a3130302052455455524e20300a456e642046756e6374696f6e0a0a46756e6374696f6e2061646472657373282920537472696e670a31302044494d207320617320537472696e670a3230204c45542073203d205349474e455228290a33302049462049535f414444524553535f56414c4944287329205448454e20474f544f2035300a34302052455455524e2022616e6f6e220a35302052455455524e20414444524553535f535452494e472873290a456e642046756e6374696f6e0a0a46756e6374696f6e205261746528722055696e743634292055696e7436340a31302044494d206164647220617320537472696e670a3135204c45542061646472203d206164647265737328290a31362049462072203c2031303020262620455849535453286164647229203d3d2030202626206164647220213d2022616e6f6e22205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528616464722c2022222b722b225f222b424c4f434b5f4845494748542829290a34302049462072203c203530205448454e20474f544f2037300a35302053544f524528226c696b6573222c204c4f414428226c696b657322292b31290a36302052455455524e20300a37302053544f524528226469736c696b6573222c204c4f414428226469736c696b657322292b31290a3130302052455455524e20300a456e642046756e6374696f6e0a0a2f2a2f2f2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a2f2f2055706461746520456e7469746965730a636f6e737420656e656d795369676874203d20313030303b0a66756e6374696f6e20757064617465456e656d79414928656e656d7929207b0a0a0969662028656e656d792e7374617465203d3d3d20226479696e6722207c7c2028656e656d792e7374617465203d3d3d2022646561642229292072657475726e3b090a0a0969662028656e656d792e7374756e203e203029207b0a0909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a0909656e656d792e6d6f76655374617465203d202269646c65223b0a0909726573657441747461636b7328656e656d79293b0a090972657475726e3b0a097d200a0a09636f6e7374206478203d2067616d652e706c617965722e78202d20656e656d792e783b0a09636f6e7374206479203d2067616d652e706c617965722e79202d20656e656d792e793b0a09636f6e73742064697374203d204d6174682e6879706f742864782c206479293b20090a0969662864697374203e20656e656d795369676874297b200a0909656e656d792e6d6f7665496e707574203d20303b0a0909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a0909656e656d792e6d6f76655374617465203d202269646c65223b0a0909726573657441747461636b7328656e656d79290a090972657475726e3b0a097d2020202020200a0a0969662028656e656d792e61747461636b436f6f6c646f776e203e20302920656e656d792e61747461636b436f6f6c646f776e202d3d2064742f313030303b0a0969662028656e656d792e6a756d70436f6f6c646f776e203e20302920656e656d792e6a756d70436f6f6c646f776e202d3d2064742f313030303b0a0969662028656e656d792e666163654c6f636b54696d6572203e20302920656e656d792e666163654c6f636b54696d6572202d3d2064742f313030303b0a0969662028656e656d792e666163654c6f636b54696d6572203c3d203029207b0a0909656e656d792e666163696e67203d20286478203c2030203f202d31203a2031293b0a097d090a0a09636f6e7374207b207365676d656e743a20706c617965725365676d656e742c20706c6174666f726d3a20706c61796572506c6174666f726d207d203d20676574506c6174666f726d556e6465722867616d652e706c61796572293b0a09636f6e7374207b207365676d656e743a20656e656d795365676d656e742c2020706c6174666f726d3a20656e656d79506c6174666f726d20207d203d20676574506c6174666f726d556e64657228656e656d79293b0a0a09636f6e737420706c6179657241626f7665203d2067616d652e706c617965722e79203c20656e656d792e79202d2034303b0a096c65742077616c6c536567203d206e756c6c3b0a0a092f2f202d2d2d20504c4154464f524d204e415649474154494f4e202d2d2d0a092f2f202d2d2d2044524f5020444f574e204c4f474943202d2d2d0a0969662028656e656d79506c6174666f726d297b0a09090a0909696628656e656d79506c6174666f726d2e696420213d20656e656d792e6f6e506c6174666f726d297b0a090909656e656d792e626c6f636b65645269676874203d2066616c73650a090909656e656d792e626c6f636b65644c656674203d2066616c73650a090909656e656d792e626c6f636b656450203d206e756c6c0a090909656e656d792e6f6e506c6174666f726d20203d20656e656d79506c6174666f726d2e69643b0a09097d0a090977616c6c536567203d2064657465637457616c6c416865616428656e656d7929090a0a09092f2f20526573657420616c6c20706c6174666f726d20656e656d79206c697374730a0909666f722028636f6e737420706c6174206f662067616d652e706c6174666f726d7329207b0a090909706c61742e656e656d6965732e6c656e677468203d20303b0a0909092f2f2041737369676e20656e656d69657320746f20746865697220706c6174666f726d206c697374730a090909666f722028636f6e73742065206f662067616d652e656e656d69657329207b0a0909090969662028652e6f6e506c6174666f726d203d3d3d20706c61742e696429207b0a0909090909706c61742e656e656d6965732e707573682865293b0a090909097d0a0909097d0909090a090909636f6e73742072616e6765203d2036303b202f2f206f72207768617465766572206665656c732072696768740a090909666f722028636f6e7374206f74686572206f6620706c61742e656e656d69657329207b0a09090909696620286f74686572203d3d3d20656e656d79207c2021656e656d792e6f6e47726f756e64207c20216f746865722e6f6e47726f756e64207c206f746865722e6f6e506c6174666f726d20213d3d20656e656d792e6f6e506c6174666f726d207c206f746865722e7374617465203d3d3d20226465616422207c206f746865722e7374617465203d3d3d20226479696e67222920636f6e74696e75653b0a0a09090909636f6e7374206478203d204d6174682e616273286f746865722e78202d20656e656d792e78293b0a09090909696620286478203c3d2072616e676529207b0a090909090969662028656e656d792e626c6f636b65644c656674297b20206f746865722e626c6f636b65644c65667420203d20747275653b206f746865722e626c6f636b6564526967687420203d2066616c73653b20656e656d792e626c6f636b656450203d20706c61742e69643b7d0a090909090969662028656e656d792e626c6f636b65645269676874297b20206f746865722e626c6f636b6564526967687420203d20747275653b206f746865722e626c6f636b65644c65667420203d2066616c73653b20656e656d792e626c6f636b656450203d20706c61742e69643b7d0a090909097d0a0909097d0a09097d0a0a0909636f6e737420706c6179657242656c6f77506c6174666f726d203d206973506c6179657242656c6f77506c6174666f726d28656e656d79506c6174666f726d29090a09090a0909696628656e656d792e7479706520213d3d20226772756e74222026262069734e65617245646765466163696e6728656e656d792c20656e656d79506c6174666f726d2c20313029297b0a09090909656e656d792e6d6f7665496e707574203d20303b0a09090909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a09090909656e656d792e6d6f76655374617465203d202269646c65223b0a09090909726573657441747461636b7328656e656d79293b0a0909090972657475726e3b200a0909097d0a09090a0a09090a09092f2f20696620706c617965722069732062656c6f772c206d6f7665206f666620636c6f7365737420656467650a090969662028706c6179657242656c6f77506c6174666f726d29207b0a090909636f6e7374206c6566744564676520203d20656e656d79506c6174666f726d2e6d696e583b0a090909636f6e737420726967687445646765203d20656e656d79506c6174666f726d2e6d6178583b0a0a090909636f6e73742064697374546f4c65667420203d204d6174682e6162732867616d652e706c617965722e78202d206c65667445646765293b0a090909636f6e73742064697374546f5269676874203d204d6174682e6162732867616d652e706c617965722e78202d20726967687445646765293b0a0a090909636f6e73742074617267657445646765203d202864697374546f4c656674203c2064697374546f526967687429203f206c65667445646765203a207269676874456467653b0a090909636f6e7374206d6f7665203d204d6174682e7369676e2874617267657445646765202d20656e656d792e78293b0a090909696628656e656d792e7479706520213d3d20226772756e742220297b0a090909096966286d6f766520213d3d204d6174682e7369676e2867616d652e706c617965722e78202d20656e656d792e78297c7c202169734e65617245646765466163696e6728656e656d792c20656e656d79506c6174666f726d2c2031302920297b2f2f2626204d6174682e616273286478293e3429636865636b2064697374616e6365206865726528666f7220736c6f706573290a090909090970757273756528656e656d792c2064782c20656e656d795365676d656e742c20706c61796572506c6174666f726d2c2077616c6c536567293b0a090909097d656c73657b0a09090909656e656d792e6d6f7665496e707574203d20303b0a09090909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a09090909656e656d792e6d6f76655374617465203d202269646c65223b0a090909097d0a09090909726573657441747461636b7328656e656d79293b0a0909090972657475726e3b200a0909097d656c73657b0a090909092f2f204d6f766520746f77617264207468617420656467650a09090909656e656d792e6d6f7665496e707574203d206d6f76653b0a09090909656e656d792e666163696e67203d20656e656d792e6d6f7665496e7075743b0a09090909696628646972656374696f6e426c6f636b656428656e656d7929297b0a0909090909656e656d792e666163696e67203d202d656e656d792e6d6f7665496e7075743b0a0909090909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e673b0a090909097d09090a090909090a090909092f2f20424f4f53543a20656e7375726520746865792061637475616c6c792066616c6c206f66660a090909096966202869734e656172506c6174666f726d4564676528656e656d792c20656e656d79506c6174666f726d2c2031302920262620697353616665546f44726f7028656e656d792929207b0a0909090909656e656d792e666163654c6f636b54696d6572203d202e37353b0a0909090909656e656d792e7678203d20656e656d792e666163696e67202a20656e656d792e7370656564202a20312e323b202f2f20736d616c6c20707573680a0909090909656e656d792e7679203d202d302e343b202f2f2074696e7920686f702075707761726420746f20627265616b20706c6174666f726d20676c75650a0909090909656e656d792e696e416972203d20747275653b0a0909090909656e656d792e6f6e47726f756e64203d2066616c73653b0a090909097d0a0909097d0a09090972657475726e3b0a0909090a09097d0a09090a090969662028706c6179657241626f76652920207b0a0909090a0909092f2f20646f6e277420676574206c6564206f66662074686520656467650a090909696628706c617965725365676d656e74297b0a090909092f2f206966206e65617220656467652c20636865636b2069662061626c6520746f206a756d702075702c206966206e6f742c2073746f700a090909090a0a090909096966202869734e65617245646765466163696e6728656e656d792c20656e656d79506c6174666f726d2c2031322929207b0909090a0909090909696620287472794a756d7041626f766528656e656d792c656e656d795365676d656e74292972657475726e3b090a090909090969662821697353616665546f44726f7028656e656d7929297b0a0909090909656e656d792e6d6f7665496e707574203d20303b0a0909090909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a0909090909656e656d792e6d6f76655374617465203d202269646c65223b0a090909090972657475726e3b0a09090909097d0a090909097d090909090a0909097d656c73657b0a090909092f2f6e6f20706c6179657220706c6174666f726d202f207365676d656e740a090909096966202869734e65617245646765466163696e6728656e656d792c20656e656d79506c6174666f726d2c20313229200a090909090929207b0a0909090909656e656d792e6d6f7665496e707574203d20303b0a0909090909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a0909090909656e656d792e6d6f76655374617465203d202269646c65223b0a090909090972657475726e3b0a090909097d0a0909090970757273756528656e656d792c2064782c20656e656d795365676d656e742c20706c61796572506c6174666f726d293b0a0909090972657475726e0a0909097d090a0909090a09097d0a09090a09090a09090a0a09092f2f2054727920746f2067657420746f20706c6179657220706c6174666f726d0a090969662028706c617965725365676d656e7420262620656e656d795365676d656e7420213d3d20706c617965725365676d656e742029207b0a0909096c6574207461726765743b0a090909696628656e656d79506c6174666f726d20213d20706c61796572506c6174666f726d297b0a09090909696628706c6179657241626f7665297b0a0909090909636f6e737420636c6f736573745365676d656e7473203d2066696e64436c6f736573745365676d656e74734265747765656e28656e656d79506c6174666f726d2c20706c61796572506c6174666f726d293b0a0909090909636f6e737420636c6f736573745365676d656e74734d6964506f696e74203d2066696e64436c6f736573745365676d656e74734265747765656e4d6964506f696e747328656e656d79506c6174666f726d2c20706c61796572506c6174666f726d293b09090a0909090909636f6e7374207365676d656e744f766572506c6174666f726d203d206765745365676d656e744f766572506c6174666f726d28656e656d79506c6174666f726d293b0a0909090909636f6e7374207365676d656e744f76657243757272656e745365676d656e74203d206765745365676d656e744f76657243757272656e7428656e656d795365676d656e74290a0909090909636f6e737420626573744a756d705365676d656e74203d2066696e64426573744a756d705365676d656e7428656e656d792c20656e656d79506c6174666f726d2c20706c61796572506c6174666f726d293b090a090909090a0909090909746172676574203d20636c6f736573745365676d656e74732e736567413b0a090909090969662874617267657420213d3d20656e656d795365676d656e74297b09090909090a0909090909090a090909090909696628636c6f736573745365676d656e74732e7365674120213d3d20636c6f736573745365676d656e74734d6964506f696e742e7365674120297b0a090909090909090a090909090909096966287365676d656e744f76657243757272656e745365676d656e74297b0a0909090909090909746172676574203d207365676d656e744f76657243757272656e745365676d656e743b0a090909090909097d656c7365206966287365676d656e744f766572506c6174666f726d297b090909090909090a0909090909090909746172676574203d207365676d656e744f766572506c6174666f726d3b0a090909090909097d0a0909090909097d0a0909090909090a090909090909696628706c6179657241626f766520262620746172676574297b0a090909090909096966202874727954617267657428656e656d792c656e656d795365676d656e742c746172676574292972657475726e3b090909090909090a0909090909097d0a0a0909090909096d6f7665546f776172645365676d656e7428656e656d792c20656e656d79506c6174666f726d2c207461726765742c2077616c6c536567290a09090909090961766f696457616c6c734f6e53616d65506c6174666f726d28656e656d792c2077616c6c536567290a09090909090972657475726e3b0a09090909097d0a09090909090a090909090a0909090909746172676574203d20626573744a756d705365676d656e743b0a09090909096966282174617267657420262620706c6179657241626f7665297b0a090909090909746172676574203d207365676d656e744f76657243757272656e745365676d656e743b0a09090909097d0a09090909096966282174617267657420262620706c6179657241626f7665297b0a090909090909746172676574203d207365676d656e744f766572506c6174666f726d3b0a09090909097d0a09090909090a09090909096966282174617267657420262620636c6f736573745365676d656e74732e73656741203d3d3d20656e656d795365676d656e74297b0a090909090909746172676574203d20636c6f736573745365676d656e74732e736567423b0a09090909097d0a09090909090a09090909096966282169735365676d656e7442656c6f77506c6174666f726d287461726765742c20706c61796572506c6174666f726d29297b0a090909090909746172676574203d20706c617965725365676d656e743b0a09090909097d0a0909090a0a090909090969662874617267657420297b0a090909090909696620287472794a756d7041626f766528656e656d792c656e656d795365676d656e74292972657475726e3b0a09090909090a09090909090969662820747970656f66207365676d656e744f766572506c6174666f726d20213d3d2022756e646566696e656422202626207365676d656e744f766572506c6174666f726d20213d3d6e756c6c297b0a090909090909096966287365676d656e744f766572506c6174666f726d2e706964203d3d3d20706c61796572506c6174666f726d2e6964297b09090909090909090a09090909090909096966286a756d70546f5365676d656e7428656e656d792c656e656d79506c6174666f726d2c7365676d656e744f766572506c6174666f726d2c77616c6c53656729297b0a09090909090909090961766f696457616c6c734f6e53616d65506c6174666f726d28656e656d792c656e656d79506c6174666f726d2c77616c6c53656729090a09090909090909090972657475726e3b0a09090909090909097d09090909090909090a090909090909097d0a0909090909097d0a0a090909090909696628216d6f7665546f776172645365676d656e7428656e656d792c20656e656d79506c6174666f726d2c207461726765742c2077616c6c5365672926267365676d656e744f766572506c6174666f726d297b0a090909090909096d6f7665546f776172645365676d656e7428656e656d792c20656e656d79506c6174666f726d2c207365676d656e744f766572506c6174666f726d2c2077616c6c536567290a0909090909090961766f696457616c6c734f6e53616d65506c6174666f726d28656e656d792c656e656d79506c6174666f726d2c77616c6c53656729090a0909090909090972657475726e0a0909090909097d0a0909090909090a0909090909096966202874727954617267657428656e656d792c656e656d795365676d656e742c746172676574292972657475726e3b0a09090909097d0a090909097d0a090909090a0909097d0a0a0909096966202863616e4a756d70546f5365676d656e7428656e656d792c20656e656d795365676d656e742c20706c617965725365676d656e74292626202169735365676d656e7442656c6f775365676d656e7428706c617965725365676d656e742c20656e656d795365676d656e7429297b2f2f0a09090909696628706c6174666f726d4a756d7028656e656d792c656e656d79506c6174666f726d29292072657475726e3b0a0909097d0a0909090a09090970757273756528656e656d792c2064782c20656e656d795365676d656e742c20706c61796572506c6174666f726d2c2077616c6c536567293b0a09090972657475726e3b0a09097d0a09090a09090a097d0a0a0969662821656e656d792e696e416972297b656e656d792e666163654c6f636b54696d6572203d20303b7d2f2f646f6e27742077616c6b206f66662065646765206966206a757374206c616e646564206f6e20706c6179657220706c6174666f726d0a092f2f2d2d2d2053414d4520504c4154464f524d3a204e4f524d414c2050555253554954202b2041545441434b202d2d2d0a096966202864697374203c20353029207b0a09092f2f2061747461636b206c6f6769632e2e2e0a09096c65742064656c6179203d20302e33202b204d6174682e72616e646f6d2829202a20302e373b202f2f20302e332d312e30207365630a0909696628656e656d792e74797065203d3d3d2022626f737322292064656c6179203d20302e353b0a09092f2f204f6e6c792070756e636820696620636f6f6c646f776e20697320646f6e650a090969662028656e656d792e61747461636b436f6f6c646f776e203c3d203029207b0a0909090a0909090a090909656e656d792e766572746963616c496e707574203d20303b0a090909656e656d792e61747461636b436f6f6c646f776e203d2064656c61793b0a090909696620284d6174682e72616e646f6d2829203c20302e3529207b090909090a09090909656e656d792e77616e7450756e6368203d20747275653b0a0909097d656c73657b0a09090909656e656d792e77616e744b69636b203d20747275653b0a0909097d0a0a0909090909090a0909096966282167616d652e706c617965722e696e4169722026262067616d652e706c617965722e766572746963616c496e707574203c2030297b0a09090909656e656d792e766572746963616c496e707574203d20303b0a0909097d656c736520696620284d6174682e72616e646f6d2829203c20302e35297b0a09090909656e656d792e766572746963616c496e707574203d20303b0a0909097d656c73657b0a09090909656e656d792e766572746963616c496e707574203d20313b0a0909097d0a09097d0a0909696628656e656d792e616e696d2e7374617465203d3d3d202277616c6b2220262620656e656d792e7479706520213d3d2022626f737322297b0a090909726573657441747461636b7328656e656d79290a09097d0a090969662028656e656d792e616e696d2e7374617465203d3d3d202270756e6368222020262620656e656d792e616e696d2e6672616d65203e2061747461636b4672616d65732e70756e63682e656e642029207b0a090909656e656d792e77616e7450756e6368203d2066616c73653b090909090a09097d0a090969662028656e656d792e616e696d2e7374617465203d3d3d20226869676850756e6368222020262620656e656d792e616e696d2e6672616d65203e2061747461636b4672616d65732e6869676850756e63682e656e642029207b0a090909656e656d792e77616e7450756e6368203d2066616c73653b090909090a09097d0a090969662028656e656d792e616e696d2e7374617465203d3d3d20226b69636b222020262620656e656d792e616e696d2e6672616d65203e2061747461636b4672616d65732e6b69636b2e656e642029207b0a090909656e656d792e77616e744b69636b203d2066616c73653b090909090a09097d0a090969662028656e656d792e616e696d2e7374617465203d3d3d2022686967684b69636b222020262620656e656d792e616e696d2e6672616d65203e2061747461636b4672616d65732e686967684b69636b2e656e642029207b0a090909656e656d792e77616e744b69636b203d2066616c73653b090909090a09097d0a09090a0909696628656e656d792e7479706520213d3d2022626f737322297b0a090909656e656d792e6d6f7665496e707574203d20303b0a09097d656c73657b0a09092f2f626f7373200a09090969662028656e656d792e616e696d2e7374617465203d3d3d202277616c6b50756e6368222020262620656e656d792e616e696d2e6672616d65203e2061747461636b4672616d65732e77616c6b50756e63682e656e642029207b0a09090909656e656d792e77616e7450756e6368203d2066616c73653b090909090a0909097d0a09090969662028656e656d792e616e696d2e7374617465203d3d3d202277616c6b4869676850756e6368222020262620656e656d792e616e696d2e6672616d65203e2061747461636b4672616d65732e77616c6b4869676850756e63682e656e642029207b0a09090909656e656d792e77616e7450756e6368203d2066616c73653b090909090a0909097d0a090909696628656e656d792e74797065203d3d3d2022626f7373222026262021656e656d792e77616e7450756e63682029207b200a09090909656e656d792e6d6f7665496e707574203d20303b0a09090909696628656e656d792e616e696d2e7374617465203d3d3d202277616c6b22297b0a0909090909726573657441747461636b7328656e656d79290a090909097d0a0909097d0a09097d0a09092f2f20666f7220617564696f0a0909636f6e73742061747461636b50726573736564203d2028656e656d792e77616e7450756e6368207c7c20656e656d792e77616e744b69636b292026262021656e656d792e7072657641747461636b3b0a0909656e656d792e7072657641747461636b203d20656e656d792e77616e7450756e6368207c7c20656e656d792e77616e744b69636b3b0a09096966202861747461636b5072657373656429207b0a09090973667848756828293b0a09090967616d652e706c617965722e70726576486974203d66616c73653b0a09097d090a097d20656c7365207b09090a090970757273756528656e656d792c2064782c20656e656d795365676d656e742c20706c61796572506c6174666f726d2c2077616c6c536567293b0a097d0a7d0a66756e6374696f6e2069735365676d656e7442656c6f77506c6174666f726d287365672c20706c6174297b0a09666f722028636f6e73742070736567206f6620706c61742e7365676d656e747329207b0a20202020202020202f2f204f7074696f6e616c3a206f6e6c7920747265617420666c6f6f722d74797065207365676d656e747320617320706c6174666f726d20737572666163650a202020202020202069662028707365672e697357616c6c29636f6e74696e75653b0a090969662869735365676d656e7442656c6f775365676d656e74287365672c7073656729292072657475726e20747275653b09090a097d0a0972657475726e2066616c73653b09090a7d0a0a0a0a66756e6374696f6e2070757273756528656e656d792c64782c20656e656d795365676d656e742c20706c61796572506c6174666f726d2c77616c6c536567297b0a096c65742077616c6c4a756d706564203d2066616c73653b0a0969662877616c6c536567297b0a09096966287472794a756d7057616c6c28656e656d792c77616c6c53656729297b0a090909726573657441747461636b7328656e656d79293b0a09090972657475726e0a09097d0a097d0a090a090a09696620286b656570456e656d7953706163696e6728656e656d792929207b0a090909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a090909656e656d792e6d6f76655374617465203d202269646c65223b0a090909656e656d792e6d6f7665496e707574203d20303b0a090972657475726e3b0a097d0a0a0969662028656e656d792e7479706520213d3d20226772756e742220262620656e656d795365676d656e74297b0a0909636f6e737420706c6174203d20676574506c6174666f726d4279496428656e656d792e6f6e506c6174666f726d290a0909696628747970656f6620706c617420213d3d2022756e646566696e656422297b0a09090969662869734e65617245646765466163696e6728656e656d792c706c6174202c20313029297b0a0909090920656e656d792e6d6f7665496e707574203d20303b0a09090909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a09090909656e656d792e6d6f76655374617465203d202269646c65223b090a09090909726573657441747461636b7328656e656d79293b0a0909090972657475726e0a0909097d0a09097d0a09090a097d0a09696628706c61796572506c6174666f726d20262620656e656d795365676d656e74297b0a090969662028706c61796572506c6174666f726d2e6964203d3d3d20656e656d792e6f6e506c6174666f726d297b0a090909636f6e737420626568696e64203d20636f756e74456e656d696573426568696e6428656e656d79293b0a09090969662028626568696e64203e3d203120262620636f756e74456e656d696573416865616428656e656d7929203c20626568696e64202626204d6174682e61627328647829203e3d203530202626204d6174682e61627328647829203c2031303029207b2f2f2626204d6174682e61627328647829203e3d2036350a0909090969662028656e656d792e6f6e47726f756e6420262620656e656d792e6a756d70436f6f6c646f776e203c3d203029207b0a0909090909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e673b0a09090909096a756d7028656e656d79293b0a0909090909656e656d792e6a756d70436f6f6c646f776e203d20312e30202b204d6174682e72616e646f6d2829202a20302e353b0a090909090972657475726e3b0a090909097d0a0909097d0a090909096966280a09090909706c617965724973546872656174656e696e672867616d652e706c617965722920262620656e656d792e6f6e47726f756e642026260a0909090928656e656d792e666163696e67203d3d3d20312026262067616d652e706c617965722e666163696e67203d3d3d202d31207c7c0a09090909656e656d792e666163696e67203d3d3d202d312026262067616d652e706c617965722e666163696e67203d3d3d2031290a0909090929207b0a09090909636f6e7374207361666544697374203d2037303b200a0a09090909696620284d6174682e61627328647829203c20736166654469737429207b0a0909090909656e656d792e6d6f7665496e707574203d20303b0a0909090909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a0909090909656e656d792e6d6f76655374617465203d202269646c65223b0a090909090972657475726e3b0a090909097d0a0909097d0a09097d090a097d0a090a09092f2f206e6f726d616c206d6f76656d656e740a09696620284d6174682e61627328647829203e20332029207b200a0909696628656e656d795365676d656e74202626204d6174682e61627328656e656d795365676d656e742e616e676c6529203e206d6178436c696d62416e676c65297b200a090909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e673b0a0909096a756d7028656e656d79293b0a090909656e656d792e6a756d70436f6f6c646f776e203d20312e30202b204d6174682e72616e646f6d2829202a20302e353b0a09097d656c73657b0a090909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e673b0a090909656e656d792e616e696d2e7374617465203d202277616c6b223b0a09097d0a09090a202020207d20656c736520696628706c61796572506c6174666f726d20262620656e656d795365676d656e74297b0a0909656e656d792e6d6f7665496e707574203d20303b0a0909656e656d792e616e696d2e7374617465203d20226e6f6e65223b0a0909656e656d792e6d6f76655374617465203d202269646c65223b090a202020207d09090a0961766f696457616c6c734f6e53616d65506c6174666f726d28656e656d792c2077616c6c536567290a09726573657441747461636b7328656e656d79290a0a7d0a0a0a66756e6374696f6e206d6f7665546f776172645365676d656e7428656e656d792c656e656d79506c6174666f726d2c7461726765742c2077616c6c536567297b0a090a092f2f2077616c6b20746f776172642069740a096c6574206c656674203d204d6174682e6d696e287461726765742e78312c207461726765742e7832293b0a096c6574207269676874203d204d6174682e6d6178287461726765742e78312c207461726765742e7832293b0a096c65742079746172676574203d204d6174682e6d696e287461726765742e79312c207461726765742e7932293b0a090a09636f6e737420656e656d79506c61744c656674203d204d6174682e6d696e28656e656d79506c6174666f726d2e78312c20656e656d79506c6174666f726d2e7832293b0a09636f6e737420656e656d79506c61745269676874203d204d6174682e6d617828656e656d79506c6174666f726d2e78312c20656e656d79506c6174666f726d2e7832293b0a090a092f2f74617267657420746865206c6f7765722065646765206966207468657265206973206f6e650a096966287461726765742e7931203e207461726765742e7932297b0a09096c656674203d207461726765742e78313b0a09097269676874203d207461726765742e7831202b20383b0a090979746172676574203d207461726765742e79313b0a097d656c7365206966287461726765742e7931203c207461726765742e7932297b0a09096c656674203d207461726765742e7832202d20383b0a09097269676874203d207461726765742e78323b0a090979746172676574203d207461726765742e79323b0a097d0a090a0969662028656e656d792e78203c206c656674202d3820297b2009090a0909656e656d792e6d6f7665496e707574203d20313b0a0909656e656d792e616e696d2e7374617465203d202277616c6b223b0a0909656e656d792e666163696e67203d20656e656d792e6d6f7665496e7075743b09090a09096966287472794a756d7057616c6c28656e656d792c77616c6c536567292972657475726e20747275653b0a097d0a09656c73652069662028656e656d792e78203e207269676874202b3829207b09090a090a0909656e656d792e6d6f7665496e707574203d202d313b0a0909656e656d792e616e696d2e7374617465203d202277616c6b223b0a0909656e656d792e666163696e67203d20656e656d792e6d6f7665496e7075743b090a09096966287472794a756d7057616c6c28656e656d792c77616c6c536567292972657475726e20747275653b09090a097d0a09656c736520696628656e656d792e79202d2079746172676574203c203132382026262021656e656d792e696e4169722026262028656e656d792e6f6e506c6174666f726d20213d3d207461726765742e70696429297b0a09092f2f206469726563746c7920756e646572206974206f7220636c6f736520746f2069742c206a756d70206e657874206368616e63650a09096a756d7028656e656d79293b0a0909656e656d792e6a756d70436f6f6c646f776e203d20312e30202b204d6174682e72616e646f6d2829202a20302e353b0a0909656e656d792e666163654c6f636b54696d6572203d202e353b0a097d656c73657b0a0909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e670a0a0909696628646972656374696f6e426c6f636b656428656e656d7929297b0a090909656e656d792e666163696e67203d202d656e656d792e6d6f7665496e7075743b0a090909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e673b0a09097d0a0909726573657441747461636b7328656e656d79290a090972657475726e2066616c73650a097d090a09726573657441747461636b7328656e656d79290a0972657475726e20747275650a7d0a090a0a0a0a66756e6374696f6e206a756d70546f5365676d656e7428656e656d792c656e656d79506c6174666f726d2c7461726765742c77616c6c536567297b0a096c6574206c656674203d204d6174682e6d696e287461726765742e78312c207461726765742e7832293b0a096c6574207269676874203d204d6174682e6d6178287461726765742e78312c207461726765742e7832293b0a0a092f2f74617267657420746865206c6f7765722065646765206966207468657265206973206f6e650a096966287461726765742e7931203e207461726765742e7932297b0a09096c656674203d207461726765742e78313b0a09097269676874203d207461726765742e7831202b20383b0a097d656c7365206966287461726765742e7931203c207461726765742e7932297b0a09096c656674203d207461726765742e7832202d20383b0a09097269676874203d207461726765742e78323b0a097d0a0a090a09696628656e656d792e79202d204d6174682e6d696e287461726765742e79312c207461726765742e793229203c20313238200a092626206973556e6465724f72466163696e675365676d656e7428656e656d792c2074617267657429297b200a09092f2f206469726563746c7920756e6465722069742c206a756d70206e657874206368616e63650a09096a756d7028656e656d79293b0a0909656e656d792e6a756d70436f6f6c646f776e203d20312e30202b204d6174682e72616e646f6d2829202a20302e353b0a0909656e656d792e666163654c6f636b54696d6572203d202e353b09090a090972657475726e20747275650a097d0a0972657475726e2066616c73650a7d0a0a66756e6374696f6e20706c6174666f726d4a756d7028656e656d792c656e656d79506c6174666f726d297b0a0969662869734e65617245646765466163696e6728656e656d792c20656e656d79506c6174666f726d2c20323029202026260a0909656e656d792e6a756d70436f6f6c646f776e203c3d20302026260a090921656e656d792e696e4169722026262021646972656374696f6e426c6f636b656428656e656d792929207b0a0909696628656e656d792e767820213d30297b0a090909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e673b0a09097d0a09096a756d7028656e656d79293b0a0909656e656d792e6a756d70436f6f6c646f776e203d20312e30202b204d6174682e72616e646f6d2829202a20302e353b0a090972657475726e20747275653b202f2f2020636f6d6d6974206a756d700a097d0a0972657475726e2066616c73653b0a7d0a090a66756e6374696f6e2074727954617267657428656e656d792c656e656d795365676d656e742c746172676574297b0a090a09696628656e656d792e79202d204d6174682e6d696e287461726765742e79312c207461726765742e793229203e203132382972657475726e2066616c73653b090a0a09636f6e7374206c656674203d204d6174682e6d696e287461726765742e78312c207461726765742e7832293b0a09636f6e7374207269676874203d204d6174682e6d6178287461726765742e78312c207461726765742e7832293b0a090a090a096c65742064697374546f546172676574203d2032353b200a0969662028656e656d792e78203c206c656674292064697374546f546172676574203d2028656e656d792e78202b20323529202d206c6566743b0a0969662028656e656d792e78203e207269676874292064697374546f546172676574203d20287269676874202b20323529202d20656e656d792e783b0a0964697374546f546172676574203d204d6174682e6d61782864697374546f5461726765742c203235290a0a096966202828656e656d792e666163696e67203d3d3d203120262620656e656d792e6d6f7665496e707574203d3d3d3120262620656e656d792e78203c206c656674202d203520262620656e656d792e78203e206c656674202d2064697374546f54617267657420297c7c202f2f206d69676874207472792072656c617469766520746f207269676874206d696e7573206c6566740a0928656e656d792e666163696e67203d3d3d202d3120262620656e656d792e6d6f7665496e707574203d3d3d202d3120262620656e656d792e78203e207269676874202b203520262620656e656d792e78203c207269676874202b2064697374546f5461726765742029297b20092f2f67657474696e67206e6561722c206a756d70206e6f7709200a09096a756d7028656e656d79293b0a0909656e656d792e6a756d70436f6f6c646f776e203d20312e30202b204d6174682e72616e646f6d2829202a20302e353b0a0909656e656d792e666163654c6f636b54696d6572203d202e353b0a090972657475726e20747275653b0a097d0a0a0972657475726e2066616c73653b0a7d0a0a0a0a66756e6374696f6e207472794a756d7041626f766528656e656d792c63757272656e74536567297b0a0a09636f6e737420746172676574203d206765745365676d656e744f76657243757272656e742863757272656e74536567293b2f2f676574206c6f7765737420706c6174666f726d206f7665722063757272656e7420706c6174666f726d0a0a09696628746172676574297b090a0909636f6e7374206c656674203d204d6174682e6d696e287461726765742e78312c207461726765742e7832293b0a0909636f6e7374207269676874203d204d6174682e6d6178287461726765742e78312c207461726765742e7832293b0a09090a09096966282163616e4a756d70546f5365676d656e7428656e656d792c63757272656e745365672c746172676574297c656e656d792e79202d204d6174682e6d696e287461726765742e79312c207461726765742e793229203e20313238297b0a09090972657475726e2066616c73650a09097d0a0909696628656e656d792e78203e206c65667420262620656e656d792e78203c207269676874297b0a0909092f2f206469726563746c7920756e6465722069742c206a756d70206e657874206368616e63650a0909096a756d7028656e656d79293b0a090909656e656d792e6a756d70436f6f6c646f776e203d20312e30202b204d6174682e72616e646f6d2829202a20302e353b0a090909656e656d792e666163654c6f636b54696d6572203d202e353b0a09090972657475726e20747275653b0a09097d20090a097d0a0972657475726e2066616c73653b0a7d0a0a66756e6374696f6e207472794a756d7057616c6c28656e656d792c77616c6c536567297b0a0969662877616c6c536567297b0a090969662828656e656d792e666163696e67203d3d3d203120262620656e656d792e626c6f636b6564526967687429207c7c2028656e656d792e666163696e67203d3d3d202d3120262620656e656d792e626c6f636b65644c65667429297b0a09090969662028616943616e4a756d704f76657228656e656d792c2077616c6c53656729297b0a09090909656e656d792e6d6f7665496e707574203d20656e656d792e666163696e673b0a090909096a756d7028656e656d79293b0a09090909656e656d792e6a756d70436f6f6c646f776e203d20312e30202b204d6174682e72616e646f6d2829202a20302e353b0a09090909656e656d792e666163654c6f636b54696d6572203d202e353b0a09090909726573657441747461636b7328656e656d79290a0909090972657475726e20747275650a0909097d090909090a09097d09090a097d0a0972657475726e2066616c73653b0a7d0a2a2f6a53435f414354494f4e55012251763fedb5d6df721b080897bcfbdaecaf843644cb8ebb87071e26410a580a01084dffa9fcab358cbdfb48f40c3c500de5d2c7005f5bfdc9250a889075100eb901197331772979036e43eed55ea33752fe2336d862739f24a66870794098422b83002c3b1b0d45cd9701ba878d342be837bd8f51625549b5bbf17b3fde4a6fdccd7b000c952f3e91af787e96bc0bcf45bdb5d2e8b57cddb23cecfab3540ccfad8f019f0004d0be3c0f8d206515d50b50fb62a8a13ca1c98cccfe07161117f814668b7ba8002fda87d631694919a2a89da1f496aaab46f0143f0df4db6cb5a0aa976262485b0003f668b839ea1a5da6d7007305ddb7f327e3b74a7ef387287b54b0c0d857ab0b001492e1fdfcfbe0213ba0cb82fd98be48e483a0c5afae03d1ab30cf4965e19a22002635dcf215b7629d5151ea8fa3f8502b2ab28c8e8cbe082c5d177c99bf5978e4000100a0fe037dedcbaa66f484e2c81900068b3d19fdc0e5bc4d950e21cee1d3140011f212c37b675f6a36c6851d99abc799cb4895faffb7e5c6f828beeefb7248ac0114d002d891c48fd99bbc60581feb4416c9518dd2001ca6909243d9d6e6b187b301285f409e5ffc4151f4d0ea7f01098b50f73f5b7f505ea57d059fb4a0704e7a230000000000000000000000000000000000000000000000000000000000000000197623b12696fe80fdf649e343a0cc9d59dd778b79dcbd31a6c8c024e9d04645002ea730925d00ef1f82a30cda80736a2d14fdf943ce15d6847396505befae9d010abff59c02746bb39ca947ea8ff72368fd6ecc37b72e10073ec5dcbffb99d73d00293c5cf5fdeaabeeb8d496850cf4483e0bbc7de75abda82826bf390a7c85c9cf25fdcaf2e84d4ecb56b116c07d541f417e583d60daa58f3966779311fa55b2c426c72402cd2369787449eb92a79084edc555a783d73fe0c9bca1318c19e22b7c0e063a42e635d2c1e5b3793dcecb728a078c231ade870fea60fc057c0a51a6a214de3ac2c7d0c6a319d0455d19b5db24bd1ebf3c47c3a66a9391bf0d4387ccf928cf9ab246fc4addb2adc762da30bbdedb250d42761d7697c1ef79efcee8a4bb2f98c3643f64def9175042eab374323201a971c88ef29caa65b522a20211cf9705d40b94825e0da02268aab53f8d1cf2c2ddd51ba91668000c2f4976aa52a34f1e3d657fe6496a2fc6c3866d10ef44a335d0b5c437ed5d9f071cedcfbbb07ab70d5051c1725a427b07a383e5b46db3201fbd5a26ec26e35036df9f364bd4d5cc01074161b3dd7fbd80e10fc74fa008637a5b411b32ea7f9146cc92ca20212a19b600297ea7cea71f124939e4ec5a129f9e3f81b231d7bbc25dd74d3c478db47a6b6700280ec7c1dba425cb4df2af74cb1db830ff6664ea857744065e00a141c3f23e6b0115d99e48faad99344a89aa8d3131013ca1eddf3431efa46a76f58b6ebc5a8e3801180bc43b286b80dfe2e09ce864edc0399d20c2d860e9144b8cf0444f1fd80b9800113afdd1ff8fec790b1f8dee5a68191161c8604ea4b34d6feca28c294fedfd540002523932ffa859cbe3f44e5341b2ddaeee971adff3d496b9a4aba66502b2ed68000640acfc32c4a3fe6edb215ab886a7231881a33cf3fdec8306a6ecf7c6ebcca8002be63d2a7266de5e7e57030672985dbbc62a33556ab56650799198469a54aa7301196df5f4d4482b5c01428b6336ae1cfdb5088990d916d6e88dfa65b66e1dbf94010554e06406ef148116e2e704674c3957c8a0fdfb6acf3da2b47956cd6c9d25e6011e3a2272db9dc7ea3aa63970bb2ae01e4a7523eaf14092b68054ef9ba9d9e780002767b66b7a860d0ff62c50d49d85a03dc14154cc53a583f654bfcf7551e37b7101
DERO explorer source code | explorer version (api): under development (1.0) | dero version: golang pre-alpha | Copyright 2017-2022 Dero Project