Transaction Hash:
Block:
19126905 at Jan-31-2024 01:57:11 PM +UTC
Transaction Fee:
0.016889442897451488 ETH
$33.29
Gas Used:
598,702 Gas / 28.210099344 Gwei
Emitted Events:
| 219 |
MemoryPageFactRegistry.LogMemoryPageFactContinuous( factHash=7D845735A9FD71AF77D58389246F448E83A1A74CD986546F243D61F24D8A8D39, memoryHash=101723712305738203916977520991315460590872881264152734113510259321797553068252, prod=2025002734050954172387197055432346790109468006029032204922735481576930999856 )
|
Account State Difference:
| Address | Before | After | State Difference | ||
|---|---|---|---|---|---|
| 0x16D5783a...6B29589A4 | (SHARP Blockchain Writer) |
528.141778924261693144 Eth
Nonce: 1172421
|
528.124889481364241656 Eth
Nonce: 1172422
| 0.016889442897451488 | |
|
0x95222290...5CC4BAfe5
Miner
| (beaverbuild) | 7.615272181702505624 Eth | 7.615332051902505624 Eth | 0.0000598702 | |
| 0xFD14567e...1ca7fD1b4 | (StarkEx: SHARP) |
Execution Trace
MemoryPageFactRegistry.registerContinuousMemoryPage( startAddr=3614256, values=[156, 1, 1, 526128, 2210538765761804311057275754588240591677326667225506847390412687062018025646, 158098919692956613592021320609952044916245725306097615271255138786123, 47, 57321848708258753762699532355987194120594341263014364253153612609333346811, 15706576000393, 57321848708258753762699532355987194120594341263014364253153612609333346812, 891774453510820296055556330123884599517494, 57321848708258753762699532355987194120594341263014364253153612609333346813, 379079076371298015438392769649, 102741067074048282966020431376941747095959884914371959579056795507779093311, 46576088429459421146515835212986426, 184266443524849508033242877256071651054336017363158925351633891629234926398, 0, 184266443524849508033242877256071651054336017363158925351633891629234926399, 0, 184266443524849508033242877256071651054336017363158925351633891629234926400, 0, 217552604822548765295334653879570380514065004239040723366846423051398159912, 30923882403358767, 231841715399491596133732705670296825854754318898375551175236545519433777569, 20800815119642368563317778591011674268224, 345381334118464255126052493771507379815109476557698899710045454408725427272, 6933707108755519068851763596524842182589877815491257649666647317314225, 414866887935321357734805387665861587881263389925895348739872943848714568078, 3618502788666131213697322783095070105623107215331596699973077710009364682689, 431547474510769702155100159945148009395846458350141606592086115523815136618, 1194224632103101651, 443563281971824687994925845517672873684417272253987535195575962223782648585, 6174582699203732, 524407721653207298397470977691784323397621255760768160611852160098820380752, 6914206267992404385484980843123565993436252425273785360342631075389705, 548880653061499015695847890251085291989037205528165750054860715956880358975, 8796114877176508, 605243073001152007876068579716366530246622548662575992223883225562504988149, 6933699962702036249122008261419417541476128085923758775627554377844884, 738584320702999401723699386816631352154360184572960181827460827998227966373, 879133119810792, 754325299467043486227042239539871507200021214992947685244810492534834266723, 50053839623, 754325299467043486227042239539871507200021214992947685244810492534834266724, 9905249747131770789551405913368544211506820, 754325299467043486227042239539871507200021214992947685244810492534834266725, 4909997699434001880720419811962, 904086414537518869275591788091281117692152015474060052883166399037810579487, 13155103877113549, 932094275094176200152142308353941323241119895072920392146897026438776758849, 6683737675728221644025944730303633345251, 932094275094176200152142308353941323241119895072920392146897026438776758850, 16367850248639857019091224771292, 1027271231545753971167634236209311303863928496671337278985315423232047993822, 15708122069657, 1032221586282355109742886700389252439973954667591526942139984585106034690084, 6946150698646015862783818244410631195505660294137578972692563842053488, 1137924924856845340263669261069693007864233783723296325415570804789365292913, 3898912944692957, 1443536983929399591574739629063493339813182750601994289180142482723922844944, 3816184474572330, 1598517527953887394316481184661388972691461685726372190881087814721862180823, 1546069264, 1598517527953887394316481184661388972691461685726372190881087814721862180824, 891774453510820296055556330123884599517494, 1598517527953887394316481184661388972691461685726372190881087814721862180825, 379079076371298015438392769649, 1732511354661679051573327025602047229575756431419074880835070482330163087783, 15708122069657, 2004922447315646749776787158907471869035032036881535055405309500151155650373, 29977631840851193703268348875414118003153907954356501153814081557720203264, 2228587327193083716109407420185383142116024217638096218032987595692409626219, 65417123924049215787170960583484781256131, 2228587327193083716109407420185383142116024217638096218032987595692409626220, 124588032065501897363872554647939, 2278230394679200553695150422957187158694804525230172067357440550301096797530, 28133783596715304, 2333587412976397896739118680403385180959143253663919965610775706625129371731, 3554236935543064, 2361159753000145192279480897903177450795794519216303595840594519068392569249, 3618502788666131213697322783095070105623107215331596699973091857261629979601, 2567167086490708732593625795323433583896904294054099429851269006852281519815, 89425150966211, 2567167086490708732593625795323433583896904294054099429851269006852281519816, 3089076719248807901768690943414036106524, 2567167086490708732593625795323433583896904294054099429851269006852281519817, 7161368652536118968045195333360, 2594905608950705377623876155347701467849489819471024430924380785136241845093, 58213684689046035864283368961900061005343, 2665111713226122567540164235615738269347350660336120075823703169098965518184, 91861967893032137, 2893973036124908635514046514777215918450077829784141181586457408648830425546, 15156075139306936, 3108640272436783351484392241636473002400809043022034497267665943727644236147, 15708122069657, 3353415244406832375018238122910081710117377868244080158884447420085330476137, 3618502788666131213697322783095070105623107215331596699973088239951397448151, 3469565501339905626834840083814809345019144303168125191484117919638305639185, 3618502788666131213697322783095070105623107215331596699973092040427749950824, 3540784155146463892772734708271613933670179793548928383981963282521520094705, 18047699824, 5293806310018927568157218677963426290718888238089528602422201621117376783, 4, 603278275252936218847294002513349627170936020082667936993356353388973422646, 9798, 897868744067196459444713238095047397733308149757053445661773288302188123226, 1254568885964440109007611664194779237829671509247931180591996596533728469468, 2166871491991607154125125955486328026842291221373100360513187618732434600517, 1, 3485802409509789533600546178435486341483591350442639606658982599682588607484, 720921236364732369708811942719267217773340261296803662554771479078334318, 10793120943855616138834383946309824332115422568966044606102573776889757582, 3135946492530623774720, 81331379765043820485459764673520314129449726635255894173634904319902747880, 184467440737095516160, 82979151654111040813196011750923649219791494195102481712413521691060522816, 498062089990157893632, 131386913510327915525379269906329396503942724648188118618820390419263049246, 2379629985508532158464, 136382144990703609944286172122306583440001875359618521328217580722790704748, 4537899042132549697536, 139570278623849729361534321693651002815792705975965618132087307050835092184, 756316507022091616256, 228127240820201420112041055406192968922581942321662179607685569770048015434, 3, 827220861550361775567781794488524801583671955481509831981744502253130788360, 384669116099, 1121026663122074292954025390156984880740137156769698405534982448605919873660, 22645972, 2056412668049510940615103414180044371230942148893240032791745910809459502031, 1133595497, 255036465500934613475212564018865776164477057465701645235307549022675524872, 553402322211286548480, 261500682641375268283925660525072858536968211442499911093881899538523471217, 340282366920938463481821351505477763074, 1503674969618430350691055594857982840916829913946727233564517937756847150249, 440168123437330633874675177419976431975019168943402176995739208264668116428, 1374167106255892599010711965180388247554893597343032596700351269194389035468, 814079005391940027390129862062157285361348684878695833898695909074510122245, 2319419688806356863988905790973502048675673357088016922052946980069360248204, 269356002231178094961578900577905959898815647563345770150025550102965530192, 1033017668127734890496, 297943039348911596813842521504534533543987446593933111102108223796895101901, 221360928884514619392, 312810997861083273056404029584951029849958297143220512767429129405520951944, 3228180212899171532800, 334567323176743350814938405184817959456933652038450024694682486553213532532, 2066035336255469780992, 358810199151218248631742943895848912302453816508596486318701657214701944486, 2, 1449143547645090542063072844265667315741990491499711687374710081456680373748, 8903146, 1449143547645090542063072844265667315741990491499711687374710081456680373750, 1706697950, 385291772725090318157700937045086145273563247402457518748197066808155336371, 11, 98825239756614816983270276180368744138846281776833942936961586311426048972, 86633797362062574202740, 688149329449838679792104201760846970307074009897972536995239450280923821402, 10000, 828741600072935056912018748859828365669087383339426534225634880394113948667, 278892697715019836, 1025849087985554741230950830577801628443985397492264388438620449775789851114, 815217553236077, 1138102585933080762687588574951940568393916737061955149298889590431930889549, 115865152472341529167054, 1297713107789520337982513184691958288380927033924334369025906284470037001886, 238825405457189751256307, 2608774556694127651942696490097659432804167689395118468162794594360500596055, 0, 2763816973363381682365346759993680277119182802554999852954577373860295368987, 0, 3194216250225684087788455819249526328525393564277289365822456962354746648823, 10000, 3301057320382125766011011926152421972920545335146932524384467057140944104784, 10000, 3490545143558998883370498273209413554535332859630182278663381716338609741973, 261118097391628596952, 423379157050636838003671181213929905567421256912939538939632299491144000033, 608742554432415203328, 467359278613506166151492726487752216059557962335532790304583050955123345960, 6, 321751264442790402984935101055086840420519863546320125522244203922488951779, 91351419574920057044122, 321751264442790402984935101055086840420519863546320125522244203922488951782, 39377670683931643737, 1032717993920308306191823419406815870858725944687744986845677154805147281824, 293517871795676157759, 1032717993920308306191823419406815870858725944687744986845677154805147281827, 678285338203, 2634350125842331710357718647260408238529216884799793484642661491569594132641, 71492365462, 2634350125842331710357718647260408238529216884799793484642661491569594132644, 71662073433, 482876828289395875538132910579471976747156502741786274588755116050381611281, 3, 1023548229505677656203287193217489233849259240504126459756641548042885197554, 121323052405726885700389710791962296901, 1292290621201224603050985362954067224629957199302684301435986232339943058618, 1006059728096022965415543343040041323186098719388411207, 2916705591420403631775404502643531484211278946290767124504206763108368797871, 112839084676607497984006670945605, 484894096963245624860530558153508865019723968910589218309347656141215585837, 92233720368547758080, 517125115337780208081305629975956820263165114138824120841711207270231259977, 2, 251272874449195398991184948626511532882068975815043615588094357911685400898, 2199998043157357290371757, 2554048132850966824627836497675560070316672780668881499970266958672422453331, 21638490289453210603, 543070371795657669582407786211950424173954624569532058482089081251256871687, 3, 535371694090767855735413040307107190280433117329271593209461965843886164304, 30, 983188335381652216080252583939413514594406059106137348620003729727387772054, 7, 3482301820054723015560607622307825420941770248813740049934669539390507803648, 2926011317590264324571489778578188969693357287687188737681773794408502881085, 614581101226925741796534162380486905358917049687691236545095031696941778162, 479615345916448342016, 651359517418612346160172893618967480308146278932776472889528691837047327783, 1641760222560150093824, 654853132391025820652415439866563624195885960158169937065231847121896407298, 1106804644422573096960, 676028716993851673397918835131328481427799807821756534219643869301313604743, 6, 69036229591699849960932814930274583219423937176044869651883289380133062597, 128559941507868462473817846435345202139, 731009553143347574080655238666149040102619103132239422267183761870156583437, 87627330774887939918103694505739876872, 731009553143347574080655238666149040102619103132239422267183761870156583438, 1094594, 860370950108688216340004790080337058268427944294306403669698046952904826247, 86633797362062574202740, 1446821757104641781948757487033289620065803269090287896475220893178955257282, 1706697950, 1674354004849578474235843626904129035243166212275069178680248604364187730817, 37212931377904826438, 696874414332508171340203326495048792590195984046077186690868714040272913018, 2, 482148859801725464274198147480840119334382080162606228723774290742111978842, 31451328870, 1824430559245297509428664552692282899234137723098198389967041085501842100654, 12799787, 705594365055677257252903330720888308430725910606344598427992890950575932520, 1678653710707569197056, 773419650418337517107856101029931836850298774485466530128029681791734852785, 4, 827220861550361775567781794488524801583671955481509831981744502253130788360, 2398161470175236392645, 1256856695416233605850422909727915512169740498834940576649504142001753428505, 0, 1783118599267137294797979488240843856426458518323206552347787687083977808659, 644048200053316, 2056412668049510940615103414180044371230942148893240032791745910809459502031, 781474981824119111, 849518738979058508601645729816075345941091242548735954787339452514109922137, 848550227390639374336, 865999804950070619656029627394466907934856593357838101842585533012064415201, 2, 482148859801725464274198147480840119334382080162606228723774290742111978842, 60724763507, 2384631991471189276658372382192604507266582098253024269947558702058122328038, 0, 936418400693416451020333181155237289023054068917460419183904523462386714368, 682529530727253409792, 940170698758988601746116601189934633190282713424735662963354612978990434318, 340282366920938463463374607431768211461, 1632202553494731166606393538931476290734461844096193501966645854302959301568, 1129824149679130511366027367198317141461849150940783259490286781651149176553, 1, 1291733538736359639369788724363168038715478362665555413563889602837758036017, 1, 2877980202090402547392127075056603457775384205059908785116147743575598024238, 1, 2877980202090402547392127075056603457775384205059908785116147743575598024239, 828591536243089395488781916244512051322625412754295058158823630056516157055, 3347982312855416606261388143811551890947894423254715264595300462232722601621, 1, 1023610032774006386593060833100693891201954054204456461527286119765413909673, 2656331146614175432704, 1054584835292226453748404067673087883028204663903373140510195345131383966807, 1069911156275153993728, 1078136790257338742312521350871885100100927145326595522413200632647187651348, 534955578137576996864, 1078665239644083747735467964554272283630477390788250474286201850207184990461, 340282366920938464219691114453859827713, 747754797100332948667821850294777448537830572225381519032197321912236318723, 440168123437330633874675177419976431975019168943402176995739208264668116428, 0, 1086842126708057196464935401479488787898780180253540080452473792206678387721, 4, 603278275252936218847294002513349627170936020082667936993356353388973422646, 9985, 1009189551349217310762146903648755016769781369281429981690852103109868765191, 3087560405483842187938796461886986228341517668712594072278207831053984085833, 1112976010667184399558330712017379950736387200094769085815559749791815031786, 1, 1251911823207070431506568568880493016654800552149681388467718576051313185321, 720921236364732369708811942719267217773340261296803662554773678101589870, 1101903513038340916526240160424018926139135439790464837910766674936893408573, 682529530727253409792, 1131220077792935961907491705076491070846703099681255805495730125650238757075, 5441789501744317726720, 1136089058963364826749421581703642966459273314990262372998098251098063903557, 340282366920938463500268095579187314689, 747754797100332948667821850294777448537830572225381519032197321912236318723, 814079005391940027390129862062157285361348684878695833898695909074510122245, 2884664230098539929798315757410389448440439865361588083283770404065665119900, 1186187532145879581800854512131489948906697113675357444927468894636582855260, 405828369621610135552, 1197143388431040114790911901794163880153659505854277108850121064359404181775, 756316507022091616256, 1233108998134933370701280005178683984071017247694264976893617863414710516554, 2, 529673497007161459769296527159936870421102082294597430012751492861259828396, 15152, 827220861550361775567781794488524801583671955481509831981744502253130788360, 1000924159, 1234623900504217170803571915448349681742303845218950855759300684765608759158, 24312808689149189029888, 1254568885964440109007611664194779237829671509247931180591996596533728469468, 1254378597012249509888, 1257396513293106642403167304948778751537407549794517425972996329499337560552, 516508834063867445248, 1268489575338004305125865106450544562587015023059920199360988611711569913574, 424275113695319687168, 1330089659183766571080317269749789605444296307756810059891793182816583795787, 811656739243220271104, 1337752911489652203115196380937777268219919644444452694694004794123025101223, 3320413933267719290880, 1381193166409927555218212775691055713269801900810837423490784268850937367816, 405828369621610135552, 1395924738652934176809873898706496635876484964487389233565042344580599769284, 1106804644422573096960, 1399370870472090681244461211112365195450708522620604646169070916243454738421, 1069911156275153993728, 1448034831504484392883035676512170928937664423953619921321066379585500058225, 1088357900348863545344, 1451671255254086447632285994039808399187513610058872240579674657203701329050, 553402322211286548480, 1462923160874079123890683406599637212063686600534824431957468559535418862271, 756316507022091616256, 1469015109843918098477336928002006537996781614116235938617336651555266264026, 47666386686465481375744, 1470344116054432904155757930283083933998110563883473453654600835009341822918, 977677435906606235648, 1528277645207366432319530343137345932871946722249227153360549456392012982017, 2, 482148859801725464274198147480840119334382080162606228723774290742111978842, 42443905805, 573626898100370092484029577799205407210558772901379288068197999563714079081, 234165910, 1555068458258548575654090974669082006372415490444751263728946762261542892819, 350488137400481480704, 1555384445472633120000804024163153799000640334818919474623084176121351734863, 608742554432415203328, 1556499112744499565796108362006372864148735743418431439652874229653691291158, 737869762948382064640, 1628465972056401157777181455459275217935761873753595026877600745058405898332, 73786976294838206464, 1634961094496294704788854329143295886238527357799967943036376837316472720904, 387381625547900583936, 1643259635762822448459660201834866900626400807431107152255815709746067589674, 22185105887455308217843712, 1660040422635103268806276039381506473483313851178579700441199004489420202888, 516508834063867445248, 1670511707756420738353947971156695799518061381190091972380354751726836755816, 516508834063867445248, 1673412205027753730652054524293885233483753760431932192477922733301673940566, 627189298506124754944, 1696969018009250489985268009548625253329801370103725984942864277479541153687, 340282366920938464293478090748698034177, 747754797100332948667821850294777448537830572225381519032197321912236318723, 440168123437330633874675177419976431975019168943402176995739208264668116428, 0, 1712983161585480442696236185571560424134289867286078858009566618161281627203, 1051464412201444442112, 1748665376782394831465263991749594174539380953553784240176863405560580604322, 21822498239198399561728, 1760056002099808335289968929858545628946853351050941525089340442404809649153, 405828369621610135552, 1805013590707898055665801712917795821740113748043427127702125686855420408452, 534955578137576996864, 1806018566677800621296032626439935115720767031724401394291089442012247156652, 2, 1557004084459112997824749542614895278421960010079122453994546383358924652269, 903602430, 1628839295059103185717554443533050865129044743523144870753605944215717131807, 0, 1822001640285069140053894738788953929864193411604630329750333296877942462382, 1162144876643701751808, 1842841542420535892537382031394778676328786967449318169886639369311406561120, 1, 2884635598849378439319091671893174531922134007465336361124639430782867668900, 1, 1857276933585107136292587930024978080005168498487029216637792779870869593005, 3135946492530623774720, 1858227626998988223782105571296044683568524367915984337140932401493897716112, 92233720368547758080, 1880746347422395420245135903552659371915022721865233247274249303052773516134, 996124179980315787264, 1886212889629631188189497155848883534738756148921111726686756987927630157522, 4, 818845687534640103705918180586564863845701155501190074445821867669434351848, 10000, 1325297225352243442140160417585453193410507512692897536404900825634493373202, 10000, 1854170707309713262367801000047320964338390598434411418299303350840737846775, 10000, 2775617510047796309734174284496258369071794089673099817505548183865212470146, 10000, 1905642607628454180169995514251163557145271363457332882052427125929139203377, 166020696663385964544, 1937473718772360002232282590431067356857472720844839338056629354682521599307, 3, 1576285172786767655398273386716494926838737368851500220733416141431888230408, 7886490646740492642, 2950734026701959924664061447025637830484851477883449302997017835714387965197, 7886490646740492642, 3454246839089858383199579491775232639533948527851241203274051483017234101797, 940170698758988601746116601189934633190282713424735662963354612978990434318, 1941405713881637433210677163961529928251980115164245582160797884683624533994, 1014570924054025338880, 1957257877838915116496970724122436799495084173164252781402667496349619051651, 2, 176045670955942406168118529977267184029943313129022337478313252138225119151, 0, 482148859801725464274198147480840119334382080162606228723774290742111978842, 714787362506, 1976116259487849312492355695320380942153209908997880779234707344294669942230, 4, 155082539558689579094930820457537605560250202889383976768599028600060638458, 21212877274889220, 860370950108688216340004790080337058268427944294306403669698046952904826247, 122937797588082567174, 1450773348621475531073306325960351147940191236122574546481360435247650274113, 1706697950, 1674354004849578474235843626904129035243166212275069178680248604364187730817, 283669070792, 2028723285083874786050070283303263834450260348636043413570546636040649274312, 73786976294838206464, 2087021424722619777119509474943472645767659996348769578120564519014510906823, 135, 12829967639320683962918069202431386846267861593914795486447560587959373459, 3499845401704079, 22041474389343672518141030846809983727361405993517927682344427293761784256, 10307009289199254, 81491568789915097819654624283194349537744178444303459088439977590622532058, 954160233833576, 85964141259844670450810761073305309340836581389112515297024654087496553121, 10949504164058469, 152209615655427356928376686929447312922140132488817485089176010302250803001, 8812123576062530, 176045670955942406168118529977267184029943313129022337478313252138225119151, 3847576476510641, 210514589214614222387233545768474613665028567073778597355266491546355526890, 133891749320246682, 239311380860565779906764604763252860097025566528674614885992372320494894948, 7464965955405387, 239679300146537824776399017922928914272629869218952746676556866270465924480, 18929521546202264, 259623446352653427282047905273191062681856701929957193636211231472954151093, 4174870062597750, 290730746085466393458409306988240783924387360091644009237932893241705186780, 309738558856257768, 293212456946586780986249700679781712230289078064168663007206143439157020363, 2321611089930155, 300247039271864281392989157090194080091197058349002162440677847284294059132, 803576924101073, 353086361604617927661998401721216050580001559592568386303096772516662636707, 13514110285173755, 357043141641328260672673158856638960716500090501381373790393838401157206881, 2259912269434348, 359223312654540918286831764439271461098635346978829624491233889430560965022, 3866168478100297, 360080833461400827850807231054049085256682907838845799311896121484414046240, 1837026182879988, 402203818018003161230395989487321866767371283189591635162574585819009405729, 136068902630025281186, 416303285972442402574321176293892146980817784264525440309817949606072524089, 4962755589500710, 425396741582020198153917093454988641799736380789287134025198390395347378489, 2265872471676975, 431220149863294448586090336377599444713602086806377692227125243423721643229, 3197289247799389, 433546563139131924309146001720975869638826272096352368678699315861750511405, 205821007001554191, 456941308874111559911297997538737950014839084093851206687755412067440486002, 5501538043404852, 457274340166318017726475000361115819593443492114385810582750408943163842585, 613033149072506528, 516641245097902857292364619511962167079038598153700427225844165110702159666, 5954368229943691, 522613075025468805555922710193936430868039254473475717975012325492238688385, 33918614966141655, 556332530425122904878106608873249387587475926982114506109012193716520120534, 63000000000000001, 575722097460548263670481877734903631209948507760148476059357748070049185511, 1833898742575716, 585205623185273036175010917179074623132577709196335840296462050270615247391, 231486092388982025254, 602495197612546627985805350217745566682163315966092176762646345508491458378, 61939100004349158, 604940733126235918920145952615481610379683389289161991779198381774404729078, 691602764396727, 619307672702298854112597396920716792358501960021737932401464664795827829758, 2742018404343594544, 741466116393869576130409572556244665450341392424787306706829393312066959252, 3420501175535044, 780736843931428639752547526990306994577578835951223412039608078658029573332, 20019107430470403, 788639521345593269715618633559941258159662811071377183810804342862681245688, 84226740860478788, 802773621411081583324321756243475008293954950535698030291787021854740048090, 5738262525311306, 808864334187647174282332825143847708658889880088885627446027362505936099667, 36237188475589957, 811075221575708724634137059910916281373042515103762433050547166684697005737, 44448413819859177, 947663012803387868051214515736972667577193314890164562059222522362896696904, 4873477624507621, 953458885787918404571956200640028727642735241956930372415558768241830024325, 2029775249314419169386, 986947296818680137195937647262949341467445138040944064665404846173568128631, 12593665967848, 991037344052760971137566042596332441955065566966746543413110701186182393372, 100000000000000, 1013366406460032831498677996245926457783750883080871384010324271415715972213, 60900000000000001, 1041360834228470218804965192117797238189270136549454474912195545685365279329, 3860668358340076, 1086837548411768439670899985373876467561690431954571242682899487845451257412, 2187661654598709, 1099115792963919573584520629767327913569969577753866606768237228567334300590, 454496979636656, 1169221315147778883739347988306491140572581683362793806217398649907452367432, 19308364105478905, 1200855717400476132950957745051876650931627780652464952204275038354956384471, 3211703404862228, 1210461354887364015206327054768475485737684306132801531691722098455522797971, 4634059557546276, 1223298078352955118677491244312726985393297204122686963306132756734464545540, 427386769713343, 1251017300682966666860271308770381701062986987980081773129043832668696017245, 76485323235736246370, 1278158158752202737620589067404841042249545308099115288229890594038612118419, 6630984499680059, 1281494428886492422439904461235601792120008623003180794724836730182813023813, 10064091587507936, 1400173692169858884518139266423104850953848436283444659607914573542145889008, 81600000000000001, 1426780103707562604386845103170437037874115834273850456793813085490311474273, 11852846695962110, 1427536712405789629456669469957898457926344384712498845376667388353153473480, 4887140239962333, 1442025837542273436517683445132621889084344879266970654180283236817150109303, 732598410787812, 1469180663675311658778964902762968242167533721647405054810955232112883342632, 6489435974362182, 1510479441064549436388300674180830415557320150951484486205046701917835914538, 19220212068007849, 1512264112079886856438058343728783847774473851489275850788270448788426917113, 5293990102017028, 1544568893426019139600285188293347610108279277972064062696951016204311545957, 342294044737448, 1557004084459112997824749542614895278421960010079122453994546383358924652269, 1968174829823083826038, 1563155177259705273473082440591811128793634140211290145766028584717345536573, 21570941040590747, 1591180688241871585445700592312286607074862283743363804733504970105940514030, 5646955041555026, 1614864884043141804903851539574217649384219752360904558010470967436843633237, 2338239309311285, 1628839295059103185717554443533050865129044743523144870753605944215717131807, 569704207801213, 1656056070632518416004908693410978430553643804483006342638561416441934664774, 660501666454617796, 1691973682830901999687601715755233429946634456743218401740836715307946132685, 175594649581522, 1695865067494006611553705300070030041294431366341431283106061865949727481141, 6703554399049620, 1729220803268665156448281616279687094646086140140075388381377293150451931891, 4533278979909094, 1748382790409137663800284802243590047967569620216026801592314770339887875502, 1241557662056465, 1772756296637130420275303761395901299268384544993789601117967496952071631829, 38610758442977908, 1795880754963678295112431243899580903920390813218107531107134345012630654679, 1019748487315489, 1824430559245297509428664552692282899234137723098198389967041085501842100654, 3681462101656793, 1828840231564735271043940206919337117477298647503666867975675431989674940223, 528540024100750, 1860662451662504520777426389606647876950383288497525765731917894934136611964, 12217114304291271, 1862798830657143382970315621410886833795877679332331219826241041337203316924, 674781263825163, 1869183449907630245040210958691487898748360081632121647722561071007837959296, 2929902822600981, 1917342031117086631144352937694401598252140406199256531743804577680214854933, 523845811427771, 1919009528300487416898558168639787817852314761514939568475739027942176236393, 1771323957078102915184, 1919701352467863297205097614617051814418512886901762799534521321115618858249, 5998139722772800, 1952540234709303860794006365303859393032543029725298240218122839495005756085, 0, 1955230061211313915279260482164666249634928396214811816062467631082620921857, 12092509610667870, 1964899869009081993253772783747551793594819396565867169422591498606560062467, 8386021157643982, 1995966442774116870810152131529443014249002923341884009705538471323461345043, 531992101678444, 2037422434518407654542873360358794241554538513394550548061036139751720159538, 11972482259412254, 2069912081026075203807678298279896756222141755567472685243376726986185287735, 949699513737014344, 2071082862094835846964273996906158520870798735650815321343338408590206916173, 517568524225222, 2078029730484794465791303475338325188037205998347806398890580088230364260997, 8598620441986197, 2082332565896149669096986593843450666768575991251296089487018576539152871154, 576176814398003083936, 2172981027533725603936168985528472010231540329551741078092259012741757110415, 15162408672418216, 2203986336749436959095932989457517137361994750011289810980564423854349852225, 39545267508009925, 2221673772944140721680937034867793864927907270682489943766138827577752946166, 1557077171916465, 2231732618656979229528727704712811398852789090459932208288532523981053086422, 1290080461082461, 2261029703173667638959729730854395105953613462214588116831014590706108128094, 580717852547625, 2366549891430446519885834434741210865550084100481219887700067240967300799816, 0, 2384631991471189276658372382192604507266582098253024269947558702058122328038, 1153810668880352, 2391257774930840040377368641019581761981250012793463501307151573516264315546, 74059813211366648188, 2426947414996251737393000705736718395388237185134620431811657978563395096678, 1006319683384069, 2451155996118100033756195459689981607675785741245145624127606789444390398744, 6367144737743477, 2451890800428981510743632161824181479623226399304938527552764227737906533598, 5172015208971962, 2489169086017579589551186692928822544164557344431055760633070380545064640649, 590407649312653, 2495610482707446075226294134839812701701700842455355289779191293859231525526, 33853771346642914, 2606924078083668545332852312766931971365681978161513468729870440901872252985, 1981638740906492, 2630698349060210355781000001380518678826109920467751918480387094532784176574, 5276307035361155, 2632303580458048841040885852914425769305835780965999640920953345511236353392, 1070253964289456, 2647171883706611459828196913616529395897271705005406957619062637731254821248, 1142187120478681, 2652238539793219327667539103796063044420379384769845030471773102710548168268, 5503312799311694, 2691267388671929684225737358135459878856475067407546218504290314074817887463, 18804860323142246, 2704762506411853702489773421749434322725408716085627136554974245720964452337, 122937797588082567174, 2714478050270180765285614853269344007722384989253503678102794815405359354887, 4600000000000, 2738588460432939811977088954340822159305594482602977524187990556781923989538, 3037924799641110, 2792572081887978335347002276178009384481444417049688181003090816054478933512, 98084070130751670, 2795698053482163748707801416300321554713348844865378781845332766852552142898, 5000000000000000, 2811538518179575283137194631111789680000763541678031786146382428624072855754, 2869469653816618, 2922627619527297058264818474585044701981530752329246936432688032983280120939, 9999033698453436428740106, 2994750429346461186622607491701030386351838013846601830337280569388766852309, 37212931377904826438, 3037368138758278135660137555225493203168491415103275815844516148055135045305, 3269861261738615, 3055754756033986114692388645416006454342850754680583280164477619895703466533, 1247568906586981, 3073382956318868942349954296755363902208454949032303944802922230292000788783, 8721276069972399659, 3086627945844623912175657320975831003374941795881780825583133251320805755429, 2753583967653758, 3115750698701992464038104246139762020535800549459080500239924274021174244030, 707344915405017, 3150232331347394747921081930930796262521679353198432694516408200401711375260, 1391809344396223, 3182551837901990269538998624255991873690519598165346965439886053651773366932, 1069004377199065, 3183106515770645220281956892114093861372712793262776983344294308089184075270, 3848567411360611, 3265699717306139534080858355258327953428638596366381951125092529495828357488, 5806871956707826, 3301834345512281718805145368757706343311867109792703453026785911971384747746, 3603083123288117, 3317077682040712434000931760942598745014352485801610728855387938394787769450, 1996092860830138, 3352438015781942055940370880242257595142164185389232258095967799177772802087, 4961882353713228, 3373774706390847201883617109621122703151852502762277165340794870403068755385, 2089393349961476, 3432440609048298874736868033501463672531681854403687303904227505403225074148, 3491353741996853, 3447068656175583389698022547401745383979649793951508807496857142887202624432, 4426355563518980, 3449843172679514625278079311144058406718987820315667856745215451429226784030, 85280580763964597, 3487834721153593005234142105100557082120281653276949740986302841941228103993, 8383391783051697, 3594291875369283988083895978077065689415937112838793535477240718108909150956, 4695054197477397, 2098878038736653551571255924943323206208003299798841416860911328122150542519, 903890459611768029184, 2114664285053521307357191945291506560741033790296260064163991891912493279447, 645636042579834306560, 2149625499377050772775701191274921578103398273298955620360611655307104287237, 16, 35530040839412180733843431346412092748180046542144297720358836164242780254, 1, 1789340305022514556868961069266240009084182093271297189466242695057487573046, 1706697950, 1789340305022514556868961069266240009084182093271297189466242695057487573047, 1001806394275255209226521279, 1789340305022514556868961069266240009084182093271297189466242695057487573048, 1013287687262856469655432039, 1789340305022514556868961069266240009084182093271297189466242695057487573049, 4022256390888531123670258, 1789340305022514556868961069266240009084182093271297189466242695057487573050, 22249650343703156371445492, 2060004538396169651313621397383418198310978326934093217159479066329091952950, 1706697950, 2060004538396169651313621397383418198310978326934093217159479066329091952951, 1023168102677114034068866385, 2060004538396169651313621397383418198310978326934093217159479066329091952952, 1033435906414814286067754744, 2060004538396169651313621397383418198310978326934093217159479066329091952953, 26164766898747580063824901, 2060004538396169651313621397383418198310978326934093217159479066329091952954, 34101004806797493846401765, 3497355258858845713745264256090071678867016701734028114828810804196164149027, 1706697950, 3497355258858845713745264256090071678867016701734028114828810804196164149028, 1006455760014836819013248464, 3497355258858845713745264256090071678867016701734028114828810804196164149029, 1020883688066045233608115883, 3497355258858845713745264256090071678867016701734028114828810804196164149030, 1144483798159820965132420, 3497355258858845713745264256090071678867016701734028114828810804196164149031, 11101896294790742262765907, 2156118814656851122412536074984295766970926054534688422578859727852783711360, 184467440737095516160, 2200263162146084567031475356465083278984062938394408657047766884964915270928, 1069911156275153993728, 2250154203762954594066575092192953347480407318364000539162850045002830560120, 4, 82621402349920967303088532810587907896436585585727051646519264173258146623, 15500683206, 860370950108688216340004790080337058268427944294306403669698046952904826247, 85280580763964597, 1450773348621475531073306325960351147940191236122574546481360435247650274113, 1706697950, 1674354004849578474235843626904129035243166212275069178680248604364187730817, 188240078257399405671, 2252768050220351695742118582270473351431054648228134168834693685262553997708, 756316507022091616256, 2291388948868688262090574498044255568921213519605220977396695373972835265617, 368934881474191032320, 2358226942854527470780267713363001201157555566245392610664490044375856254935, 405828369621610135552, 2368576823837625528275935341135881659748932889268308403712618244410713532584, 36, 85389935320661260939549827431877721512802286198670082804412561698101581691, 10000, 152209615655427356928376686929447312922140132488817485089176010302250803001, 3000000, 169458831027484227249798408799124525143579489194841149478699131148808146211, 1, 239311380860565779906764604763252860097025566528674614885992372320494894948, 2146235597, 290730746085466393458409306988240783924387360091644009237932893241705186780, 171063053, 353086361604617927661998401721216050580001559592568386303096772516662636707, 33785213, 359223312654540918286831764439271461098635346978829624491233889430560965022, 12514956, 431220149863294448586090336377599444713602086806377692227125243423721643229, 0, 457274340166318017726475000361115819593443492114385810582750408943163842585, 149941188388, 516641245097902857292364619511962167079038598153700427225844165110702159666, 268187417, 585205623185273036175010917179074623132577709196335840296462050270615247391, 630750809490, 604940733126235918920145952615481610379683389289161991779198381774404729078, 111034, 619307672702298854112597396920716792358501960021737932401464664795827829758, 122602429092, 811075221575708724634137059910916281373042515103762433050547166684697005737, 94549088, 947663012803387868051214515736972667577193314890164562059222522362896696904, 0, 998127196302697304455989084899766901058948317774507441185236383023037548652, 10000, 1086837548411768439670899985373876467561690431954571242682899487845451257412, 38269755, 1200855717400476132950957745051876650931627780652464952204275038354956384471, 0, 1251017300682966666860271308770381701062986987980081773129043832668696017245, 176539736352, 1430199159950313123676670921240114697130438452759959295400722817409492913474, 41463674649, 1614864884043141804903851539574217649384219752360904558010470967436843633237, 0, 1748382790409137663800284802243590047967569620216026801592314770339887875502, 0, 1824430559245297509428664552692282899234137723098198389967041085501842100654, 0, 1869183449907630245040210958691487898748360081632121647722561071007837959296, 421236326, 1919009528300487416898558168639787817852314761514939568475739027942176236393, 3114575107892, 2069912081026075203807678298279896756222141755567472685243376726986185287735, 2838649847, 2082332565896149669096986593843450666768575991251296089487018576539152871154, 777646697671, 2384631991471189276658372382192604507266582098253024269947558702058122328038, 233359128, 2433026846523124914064645949209205276093260944365771580393365008417068052683, 10000, 2464750040859213762297640836635960469156151797340985954184235102462641138791, 16676600614, 2495610482707446075226294134839812701701700842455355289779191293859231525526, 574271000, 3055754756033986114692388645416006454342850754680583280164477619895703466533, 1, 3086627945844623912175657320975831003374941795881780825583133251320805755429, 2089633, 3324347670910979010094325332024451354588958587675959080680531874831367476431, 303252245463, 3373774706390847201883617109621122703151852502762277165340794870403068755385, 0, 3594291875369283988083895978077065689415937112838793535477240718108909150956, 0, 2393597322419064065751969227483195934606408369534759462990277173582540325281, 3984496719921263149059, 484198849406910540335730968979878952694280198321681144771220478786407482372, 0, 484198849406910540335730968979878952694280198321681144771220478786407482373, 0, 484198849406910540335730968979878952694280198321681144771220478786407482374, 0, 2409638779532370992166386606749093163663103189078939309177735523338940535891, 1, 3444082679982904665894122467605135065600459037982530291237182628463226869449, 88486993467093513127659044864, 2442864538026864088772349218703114116929603352592976771899245937691490207109, 3744689046963038978048, 2490685695666421990088928048569526377979054056963327525542016748433401416141, 1733993942928697851904, 2533809569153329601108721311792904400425320816396920126423176477252219701824, 645636042579834306560, 2534681784017457087083809392510965130335560357182539279475941175006939624703, 5, 731645540458113447062781455305104270841858482378826724625648160242575288795, 52597509707059497, 1005187625102687585338108841025268501351044842380437764213409101322326140577, 29048229287534288, 1069570898420651898287389367137729588155486495797520714381271985778355006655, 1706697950, 2081598817708643271686725089821809075740307306430682523287755148049769684164, 1005522483540275960, 2343228982621527529059612359904987239455171550185272080859514177074649496917, 1011130040513314532, 2542242362880806479742485214338229708028168818580431952510808527035249281261, 1051464412201444442112, 2567764094054417259221689907137212659471570393988781879701057422404736433051, 1125251388496282648576, 2595074129167286367545169338050943814997591998956338332298919145086971247048, 645636042579834306560, 2595315307988128446607153739801130674021315613253007582048780024167118469235, 1051464412201444442112, 2650041872375786387356098295345461303918671315832493531436339392722753333679, 15, 219185276928686172257890882763956409689362764476419141331789848575218315946, 716666375673872384, 633484750559108790805777912667193335614224018044937733395687658959093754982, 3600502093307887424545207952915270330930706731866790285384433209787814556061, 1099678196986840125319157141124862013445180244737902160556687135790807439372, 7, 1563740609673710125101284292472570108202226280247428442423129031608431358139, 3586275329066030791004284867579106230323500930524707389319348406871589107067, 1897326723475508123720595101580419466118404858147106607883118790609381186899, 3344662365413012717818732637518271827201391817997708353449773951692365623062, 2177942195934325699677484307748227217220720985515694925738140270467909452261, 2542242362880806479742485214338229708028168818580431952510808527035249281261, 2306759809238018006501550663605368086765442131593085242201942257621982712257, 1330089659183766571080317269749789605444296307756810059891793182816583795787, 2363515967061173008484413070821040064592647573866087911546037828117032702757, 2, 2414509066192412975960045133812213011938281953665463499422261545395332399626, 5, 2511068812372704659387785464871414967593948045499991916903400555967433269927, 5, 2576710914003800639620459644837930714443653102176663765131801574763129075082, 3, 2705829200140234155987149305754164724494629056279588767522920727543095421143, 3548231774259467581145069614562728803118866620797719371243281943143796248982, 2718200759214484764648082478345590885148513874254588969961787251041269299953, 3, 2775582331856318261066570019627673688327962525921337285280860565020496055615, 1556499112744499565796108362006372864148735743418431439652874229653691291158, 3271119001740903695555812942115817531247884777584619149112384958751047482686, 281783910021, 2659188720027246623420716358349499326501105488230996498749628289935654808460, 1014570924054025338880, 2684779351044579298266156468603164481381165938036371405527343093627708654870, 6, 110634761701793903304316202005339886070991139567702932820698280807737348553, 176539736352, 155082539558689579094930820457537605560250202889383976768599028600060638458, 337761887808404, 482148859801725464274198147480840119334382080162606228723774290742111978842, 3673628255352254, 886706308703720404979605056530655127719375211903115298816456855442092214253, 76485323235736246370, 1450773348621475531073306325960351147940191236122574546481360435247650274113, 1706697950, 3055754756033986114692388645416006454342850754680583280164477619895703466533, 360881119033, 2688800965551361651854815493529752946767366767137364982010442506630649022569, 2139822312550307987456, 2709348130678945264030301859935458162116257409588673126381856407604012660829, 682529530727253409792, 2719538941875649473066241917390041242063075648932603210586239226821223785381, 1, 1387944465229145557758564728920056466484656792384318304143034956887121406598, 8861055144116377071, 2723614570637910654941924916895835605239497627034752054520009779930931938488, 7, 15854287668358910725798429473384066246083962496949518686999715258335529084, 1451671255254086447632285994039808399187513610058872240579674657203701329050, 92448101134337248464772280348727018618939277168498615713457702990013345385, 255036465500934613475212564018865776164477057465701645235307549022675524872, 599701993105121659768631284890952404908563586232295928178174929072731350004, 4, 717511783135957835804591424268889957571779054553113058131386695908317410107, 853762, 975131354820319745691893990046926380071537072542664302029345496477619326066, 720921236364732369708807512587554656855046850883224269557133444960710510, 1573036048780106651822190140604224991928831985093106544504504272385327541767, 4, 2221690386117264646296851838620927986071149581178137968026351954463152113078, 720921236364732369708807512587554656855046850883224269557133444960710510, 2759429493685059715072586109965090017394751642556565734097575731886442968996, 2730118122909013639168, 2790237765264583409079867661998296618176899948630429368329143834796182504360, 4, 603278275252936218847294002513349627170936020082667936993356353388973422646, 12436, 1375337435315296938426742672803101975751242731757183289499506958885007399601, 1254568885964440109007611664194779237829671509247931180591996596533728469468, 2166871491991607154125125955486328026842291221373100360513187618732434600517, 1, 2232405480057205209579228138451630463670608653725833832435118857070461164722, 2816098579549735819175046651247137569427110395690639306861152692301678, 2798888469751058506218536871893321805868854397526126089023451953103191380718, 1457292781823054577664, 2816208668314482550529782664309808797092963934411831832601847897442869352156, 1051464412201444442112, 2843189593413595006933187338581692815340414449927542117682134829175830491938, 4002943463994972700672, 2854403335263102566101987222092073491208227679020786077279569404581140187143, 682529530727253409792, 2954765870369984152947516031002235964091500022068143336816542551094980079375, 2084482080329179332608, 2967174050445828070862061291903957281356339325911846264948421066253307482040, 20, 771083640874344086535825016699278150573461798891203551032898636331704275, 294181347621, 176045670955942406168118529977267184029943313129022337478313252138225119151, 8227165, 239311380860565779906764604763252860097025566528674614885992372320494894948, 0, 293212456946586780986249700679781712230289078064168663007206143439157020363, 4688, 359223312654540918286831764439271461098635346978829624491233889430560965022, 37612528, 602495197612546627985805350217745566682163315966092176762646345508491458378, 46017431, 1210461354887364015206327054768475485737684306132801531691722098455522797971, 0, 1346446300952445496278220074988990778620090302385772101910063841818303861150, 5016217228, 1557004084459112997824749542614895278421960010079122453994546383358924652269, 91597172092, 1620892259795782828439163671589640450286380568835369917308584148750156251881, 196958721, 1721597220826937541657887555997539805968887515245235100587638522340018194732, 22106355287, 1869183449907630245040210958691487898748360081632121647722561071007837959296, 10682855, 1919009528300487416898558168639787817852314761514939568475739027942176236393, 1033845986868, 2082332565896149669096986593843450666768575991251296089487018576539152871154, 240830200777, 2355286998759199233082368259248433697222272435342574188776809888434880373608, 340282366920938463463374607431693293434, 2384631991471189276658372382192604507266582098253024269947558702058122328038, 220379210, 2464750040859213762297640836635960469156151797340985954184235102462641138791, 18310767527, 2704762506411853702489773421749434322725408716085627136554974245720964452337, 283669070792, 3082536781056807567614065931565336034522228330490346129378123592781830153586, 0, 3324347670910979010094325332024451354588958587675959080680531874831367476431, 345637196519, 2997181825693567353242614091637022585541477264365138836312752559837601876432, 3, 482148859801725464274198147480840119334382080162606228723774290742111978842, 308818, 2426947414996251737393000705736718395388237185134620431811657978563395096678, 0, 3160775979253346422642013117760760457657459741208098720279383074751152339899, 1645504557321206042154969182557350505292220875454924932073390080, 3007333188603319932561624752105598833203569101952632328866908415814594364942, 5, 446127535987530822843443754568064058475455177152358443253709926349977944910, 15254396735207789, 1174987432824581858839632426818705946102296612739133317214367202361599722109, 16676600614, 1174987432824581858839632426818705946102296612739133317214367202361599722111, 18310767527, 1174987432824581858839632426818705946102296612739133317214367202361599722113, 1706697950, 1174987432824581858839632426818705946102296612739133317214367202361599722114, 1974192, 3040640125557489534049485547874403084636680725211536079107584815322688925590, 922337203685477580800, 3087560405483842187938796461886986228341517668712594072278207831053984085833, 2176715800697727090688, 3104278819075928456117270430559133132962741205572982774855614454590823887118, 2, 1449143547645090542063072844265667315741990491499711687374710081456680373748, 503412, 1449143547645090542063072844265667315741990491499711687374710081456680373750, 1706697950, 3113048269282467373460287469680709393129161048456514581907078181994160608573, 1162144876643701751808, 3123233640426758647082691550042917574460322438485491913697729372426134950877, 397398207579924870463488, 3175890858515114371478067245324161428028009461485418164718190959546796971367, 4, 82621402349920967303088532810587907896436585585727051646519264173258146623, 2778770004856200, 860370950108688216340004790080337058268427944294306403669698046952904826247, 8721276069972399659, 1450773348621475531073306325960351147940191236122574546481360435247650274113, 1706697950, 1674354004849578474235843626904129035243166212275069178680248604364187730817, 9780365676875567359320545747, 3184679645331683678361487436750389401945961028766822347718324796995863414444, 3, 1512264112079886856438058343728783847774473851489275850788270448788426917113, 13315922642356467294, 2069912081026075203807678298279896756222141755567472685243376726986185287735, 273494498971278281272, 3449843172679514625278079311144058406718987820315667856745215451429226784030, 188240078257399405671, 3185032595212152830887159044215730613151670305604402771876153991758629132743, 1, 1981083603153918432466379682196166718504010959760575456412840529156679275992, 133860032208, 3193174487877619414987905852737063305614804154172757160287640559701921192016, 737869762948382064640, 3215160598478413932405985463749245649836017001458601525612265607459708021852, 811656739243220271104, 3221620697391392161420864071324293639774590930005820773094050085281425731492, 1770887431076116955136, 3229483722199907868464858880803625032557325614975887349782189993982524517909, 1623313478486440542208, 3271852247312316183179652850176134789292272564320788109014284570677146788639, 885443715538058477568, 3338991203608847640324346895302962246182870799600403249470590298810381017457, 1033017668127734890496, 3344418993902103943213803882610643729473185051690660710027115090075944246862, 848550227390639374336, 3344662365413012717818732637518271827201391817997708353449773951692365623062, 48, 223613301213930451392056225172799142589218420391564686758423004371096586820, 27, 225082057334847644050735451979211875648903977892628133627132412749686224697, 269356002231178094961578900577905959898815647563345770150025550102965530192, 409880407520952583021065176835543954374182280351691910466115093251076711260, 1, 445431068414771959667580637819394231463504417359328102581764404216885597191, 1, 615403244985345635528175525666662892774726439841096640961418042407905728775, 22, 687151444257211220019437164528139650068633975657280971892028547106666779091, 2442864538026864088772349218703114116929603352592976771899245937691490207109, 691563590036591547587585875198774122560218265907910320097150438971072039409, 1, 747491406544631769036733787971589505034563070133795584956626446902422256332, 1, 755462354065958318340267699160456338089688375486256866325148473420387258827, 651359517418612346160172893618967480308146278932776472889528691837047327783, 883712879568518110063009081863836069456882563894479924436221830452817847015, 1470344116054432904155757930283083933998110563883473453654600835009341822918, 898194487259154524944012968658190938116947940055193454313686911649501899179, 1023610032774006386593060833100693891201954054204456461527286119765413909673, 947969676903621380927614165754165613557227051961109862644166486934332000158, 1, 964060567837441660482476223519055012891722997247491644406212588203172147722, 1, 1155946546090661508130976350987346264753136329934713790426657279833340672431, 26, 1258931020581430007347869362876907546279253992064743952575668439929626428013, 8, 1382436383894092620155430127701086117032546592735035184897583945162252854064, 1, 1450378610533654962611412151353285404781824380021611207069120527937128323515, 18, 1494201531915280251857139966294100012741672514964844231886751284492498633521, 1, 1530545585596177960404326877057098523461562181093112143316616244445498270574, 1, 1641512832952705140956338743305602662309920990508725464577293105830230270471, 1, 1665623897474980435810299265436625906891626736706484103790757178287196059189, 3229483722199907868464858880803625032557325614975887349782189993982524517909, 1897056861574881017810286973595345068995352101750856522962580485308721883414, 13, 1947014494603163278672978935866607067485169191954839368747248756180499554263, 1, 1968562310298971377359830831785070810207554908484718332141137300297522390644, 16, 2016448062103512971080935447014956306656731179978473670551641814400013685921, 2156118814656851122412536074984295766970926054534688422578859727852783711360, 2024221566166803730430086062932247947762400739650614260959863021663695994505, 136382144990703609944286172122306583440001875359618521328217580722790704748, 2095818941067466641981224146613218692162813464284115273420913826798313125158, 2843189593413595006933187338581692815340414449927542117682134829175830491938, 2101035809713984468166895817291312610349416894973590146062738779430624260914, 26, 2105114539246692278865434944570744984709510213135515315202246185959657261775, 1, 2123142448614597332059480292115921241839139571752044741494555931177958477292, 1, 2131869286549135907322770283376040825037857290970702619610057326350386260770, 1, 2172408394384592207454098660233406854346756178631448162216675373057610883627, 19, 2196131048217104013881409064976631917847275372191250665690086786086225983728, 22, 2198571388686202878240256323526188172991592008749586427774804647508817620741, 705594365055677257252903330720888308430725910606344598427992890950575932520, 2201357295255358259529074651742628426237280975529279843410321076820657294734, 22, 2395510820315617258994367021216301307870056875528433484645064953368663635307, 1337752911489652203115196380937777268219919644444452694694004794123025101223, 2417103053091107128617631187096498222998698804546259484859704542686767566803, 312810997861083273056404029584951029849958297143220512767429129405520951944, 2537485024898485796926097793983388411067900921769662378582245634745405669398, 2688800965551361651854815493529752946767366767137364982010442506630649022569, 2563062922690851070699434676730310533670475450147310546508327948100784510665, 2393597322419064065751969227483195934606408369534759462990277173582540325281, 2945362456745262372019577810558896062899983957293335981867113001556818222906, 1, 3054173781248764350021315136713686588297552421918565081665398874517042669953, 2028723285083874786050070283303263834450260348636043413570546636040649274312, 3115750472740774874674316387533678075847688891450695058887943469411127922446, 1, 3157996806695661352262713329413645213618049443725376173924420598249006586072, 1, 3252479837409891218161228905923484642643823994325069115267302305421457045188, 2, 3488336736434692795909831492153863439641784189278398709485474476355334560631, 3353536768148782529092933291434000625716346152700674848888693920995637846751, 3552407880264982631340532354140346289275450289936122440761464770657063824070, 10, 3593163622881549121978280456444673666625589107335635309244213429217663641940, 18, 3598901302602333813965835451750015227437096350408051852174804183217661916899, 24, 3351686678535890680839315381814260782409863269637315549616491099246191532936, 1881567895518374264832, 3353536768148782529092933291434000625716346152700674848888693920995637846751, 1660206966633859645440, 3360065070445620870794527027121179626749293571572686696001178353608711753898, 1, 1200089521301156283656932576716294785729940272654139413829440807927665172906, 37510965328, 3394619054697978729524377590869542161684786092271017943053896892118779333898, 166020696663385964544, 3426301380642678150422410502107458410329193796580707126914584020477534522516, 2, 1041360834228470218804965192117797238189270136549454474912195545685365279329, 0, 3073382956318868942349954296755363902208454949032303944802922230292000788783, 9780365676875567359320545747, 3444718864031319225184842160615200488155452832179286917671737451988730448344, 793209995169510719488, 3472229124341385854759490678509220898013213026528645111607823143650762225718, 5847617871365927862272, 3488796095165551003812490975976509991633322013578458084167226256699277019952, 9, 67537788973834576779958484969597861798868491372223503205741676033021406366, 1, 1084383620089229091727155234015365688647373068371481593296567020607678021822, 0, 1100888445177536173454585935572939465203289846862740451798183740695686376948, 10793120943855616138834383946309824332115422568966044606102573776889757582, 1204924672323742639977784086162820172392729600738423511995094141631922710158, 369082, 1479463377048435654206387633746663641598458453962454637308289562892460283625, 0, 2341928883422991505119269886309292580456536963806402837074386664156902772042, 2490685695666421990088928048569526377979054056963327525542016748433401416141, 2492688302961037316749256470444805493022050863531905792392903320642493835380, 10793120943855616138834383946309824332115422568966044606102573776889757582, 2554048132850966824627836497675560070316672780668881499970266958672422453331, 19, 2840433985197746032695209282645340569214758677605075721776373254770133220966, 10793120943855616138834383946309824332115422568966044606102573776889757582, 3531573890894924400865460246450296108386933607128947513796992875108120052684, 5, 446127535987530822843443754568064058475455177152358443253709926349977944910, 37655059343556285, 1174987432824581858839632426818705946102296612739133317214367202361599722109, 303252245463, 1174987432824581858839632426818705946102296612739133317214367202361599722111, 345637196519, 1174987432824581858839632426818705946102296612739133317214367202361599722113, 1706697950, 1174987432824581858839632426818705946102296612739133317214367202361599722114, 1857814, 3531939236751111636044031712169906043159762094094406920402017772334846136696, 516508834063867445248, 3535999247007099408993018001733215205389553596000966448792663223644602300607, 1, 1440396871522181129723347836694548448922333376320383353279685525251705333233, 1, 3548231774259467581145069614562728803118866620797719371243281943143796248982, 700976274800962961408, 3586275329066030791004284867579106230323500930524707389319348406871589107067, 682529530727253409792, 3600502093307887424545207952915270330930706731866790285384433209787814556061, 645636042579834306560, 0], z=2880954126080692367030181275982004688034320621340254141716333940061789816963, alpha=521975338065341192139598411038904612766908858801087755695028662747289858275, prime=3618502788666131213697322783095070105623107215331596699973092056135872020481 ) => ( factHash=7D845735A9FD71AF77D58389246F448E83A1A74CD986546F243D61F24D8A8D39, memoryHash=101723712305738203916977520991315460590872881264152734113510259321797553068252, prod=2025002734050954172387197055432346790109468006029032204922735481576930999856 )
registerContinuousMemoryPage[MemoryPageFactRegistry (ln:233)]
LogMemoryPageFactContinuous[MemoryPageFactRegistry (ln:347)]registerFact[MemoryPageFactRegistry (ln:348)]
/*
Copyright 2019-2022 StarkWare Industries Ltd.
Licensed under the Apache License, Version 2.0 (the "License").
You may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.starkware.co/open-source-license/
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions
and limitations under the License.
*/
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.12;
import "IQueryableFactRegistry.sol";
contract FactRegistry is IQueryableFactRegistry {
// Mapping: fact hash -> true.
mapping(bytes32 => bool) private verifiedFact;
// Indicates whether the Fact Registry has at least one fact registered.
bool anyFactRegistered = false;
/*
Checks if a fact has been verified.
*/
function isValid(bytes32 fact) external view override returns (bool) {
return _factCheck(fact);
}
/*
This is an internal method to check if the fact is already registered.
In current implementation of FactRegistry it's identical to isValid().
But the check is against the local fact registry,
So for a derived referral fact registry, it's not the same.
*/
function _factCheck(bytes32 fact) internal view returns (bool) {
return verifiedFact[fact];
}
function registerFact(bytes32 factHash) internal {
// This function stores the fact hash in the mapping.
verifiedFact[factHash] = true;
// Mark first time off.
if (!anyFactRegistered) {
anyFactRegistered = true;
}
}
/*
Indicates whether at least one fact was registered.
*/
function hasRegisteredFact() external view override returns (bool) {
return anyFactRegistered;
}
}
/*
Copyright 2019-2022 StarkWare Industries Ltd.
Licensed under the Apache License, Version 2.0 (the "License").
You may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.starkware.co/open-source-license/
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions
and limitations under the License.
*/
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.12;
/*
The Fact Registry design pattern is a way to separate cryptographic verification from the
business logic of the contract flow.
A fact registry holds a hash table of verified "facts" which are represented by a hash of claims
that the registry hash check and found valid. This table may be queried by accessing the
isValid() function of the registry with a given hash.
In addition, each fact registry exposes a registry specific function for submitting new claims
together with their proofs. The information submitted varies from one registry to the other
depending of the type of fact requiring verification.
For further reading on the Fact Registry design pattern see this
`StarkWare blog post <https://medium.com/starkware/the-fact-registry-a64aafb598b6>`_.
*/
interface IFactRegistry {
/*
Returns true if the given fact was previously registered in the contract.
*/
function isValid(bytes32 fact) external view returns (bool);
}
/*
Copyright 2019-2022 StarkWare Industries Ltd.
Licensed under the Apache License, Version 2.0 (the "License").
You may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.starkware.co/open-source-license/
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions
and limitations under the License.
*/
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.12;
import "IFactRegistry.sol";
/*
Extends the IFactRegistry interface with a query method that indicates
whether the fact registry has successfully registered any fact or is still empty of such facts.
*/
interface IQueryableFactRegistry is IFactRegistry {
/*
Returns true if at least one fact has been registered.
*/
function hasRegisteredFact() external view returns (bool);
}
/*
Copyright 2019-2022 StarkWare Industries Ltd.
Licensed under the Apache License, Version 2.0 (the "License").
You may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.starkware.co/open-source-license/
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions
and limitations under the License.
*/
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.12;
import "FactRegistry.sol";
contract MemoryPageFactRegistryConstants {
// A page based on a list of pairs (address, value).
// In this case, memoryHash = hash(address, value, address, value, address, value, ...).
uint256 internal constant REGULAR_PAGE = 0;
// A page based on adjacent memory cells, starting from a given address.
// In this case, memoryHash = hash(value, value, value, ...).
uint256 internal constant CONTINUOUS_PAGE = 1;
}
/*
A fact registry for the claim:
I know n pairs (addr, value) for which the hash of the pairs is memoryHash, and the cumulative
product: \\prod_i( z - (addr_i + alpha * value_i) ) is prod.
The exact format of the hash depends on the type of the page
(see MemoryPageFactRegistryConstants).
The fact consists of (pageType, prime, n, z, alpha, prod, memoryHash, address).
Note that address is only available for CONTINUOUS_PAGE, and otherwise it is 0.
*/
contract MemoryPageFactRegistry is FactRegistry, MemoryPageFactRegistryConstants {
event LogMemoryPageFactRegular(bytes32 factHash, uint256 memoryHash, uint256 prod);
event LogMemoryPageFactContinuous(bytes32 factHash, uint256 memoryHash, uint256 prod);
/*
Registers a fact based of the given memory (address, value) pairs (REGULAR_PAGE).
*/
function registerRegularMemoryPage(
uint256[] calldata memoryPairs,
uint256 z,
uint256 alpha,
uint256 prime
)
external
returns (
bytes32 factHash,
uint256 memoryHash,
uint256 prod
)
{
// Ensure 'memoryPairs.length' is bounded as a sanity check (the bound is somewhat arbitrary).
require(memoryPairs.length < 2**20, "Too many memory values.");
require(memoryPairs.length % 2 == 0, "Size of memoryPairs must be even.");
require(z < prime, "Invalid value of z.");
require(alpha < prime, "Invalid value of alpha.");
(factHash, memoryHash, prod) = computeFactHash(memoryPairs, z, alpha, prime);
emit LogMemoryPageFactRegular(factHash, memoryHash, prod);
registerFact(factHash);
}
function computeFactHash(
uint256[] memory memoryPairs,
uint256 z,
uint256 alpha,
uint256 prime
)
private
pure
returns (
bytes32 factHash,
uint256 memoryHash,
uint256 prod
)
{
uint256 memorySize = memoryPairs.length / 2; // NOLINT: divide-before-multiply.
prod = 1;
assembly {
let memoryPtr := add(memoryPairs, 0x20)
// Each value of memoryPairs is a pair: (address, value).
let lastPtr := add(memoryPtr, mul(memorySize, 0x40))
for {
let ptr := memoryPtr
} lt(ptr, lastPtr) {
ptr := add(ptr, 0x40)
} {
// Compute address + alpha * value.
let address_value_lin_comb := addmod(
// address=
mload(ptr),
mulmod(
// value=
mload(add(ptr, 0x20)),
alpha,
prime
),
prime
)
prod := mulmod(prod, add(z, sub(prime, address_value_lin_comb)), prime)
}
memoryHash := keccak256(
memoryPtr,
mul(
// 0x20 * 2.
0x40,
memorySize
)
)
}
factHash = keccak256(
abi.encodePacked(
REGULAR_PAGE,
prime,
memorySize,
z,
alpha,
prod,
memoryHash,
uint256(0)
)
);
}
/*
Registers a fact based on the given values, assuming continuous addresses.
values should be [value at startAddr, value at (startAddr + 1), ...].
*/
function registerContinuousMemoryPage(
// NOLINT: external-function.
uint256 startAddr,
uint256[] memory values,
uint256 z,
uint256 alpha,
uint256 prime
)
public
returns (
bytes32 factHash,
uint256 memoryHash,
uint256 prod
)
{
require(values.length < 2**20, "Too many memory values.");
require(prime < 2**254, "prime is too big for the optimizations in this function.");
require(z < prime, "Invalid value of z.");
require(alpha < prime, "Invalid value of alpha.");
// Ensure 'startAddr' less then prime and bounded as a sanity check (the bound is somewhat arbitrary).
require((startAddr < prime) && (startAddr < 2**64), "Invalid value of startAddr.");
uint256 nValues = values.length;
assembly {
// Initialize prod to 1.
prod := 1
// Initialize valuesPtr to point to the first value in the array.
let valuesPtr := add(values, 0x20)
let minus_z := mod(sub(prime, z), prime)
// Start by processing full batches of 8 cells, addr represents the last address in each
// batch.
let addr := add(startAddr, 7)
let lastAddr := add(startAddr, nValues)
for {
} lt(addr, lastAddr) {
addr := add(addr, 8)
} {
// Compute the product of (lin_comb - z) instead of (z - lin_comb), since we're
// doing an even number of iterations, the result is the same.
prod := mulmod(
prod,
mulmod(
add(add(sub(addr, 7), mulmod(mload(valuesPtr), alpha, prime)), minus_z),
add(
add(sub(addr, 6), mulmod(mload(add(valuesPtr, 0x20)), alpha, prime)),
minus_z
),
prime
),
prime
)
prod := mulmod(
prod,
mulmod(
add(
add(sub(addr, 5), mulmod(mload(add(valuesPtr, 0x40)), alpha, prime)),
minus_z
),
add(
add(sub(addr, 4), mulmod(mload(add(valuesPtr, 0x60)), alpha, prime)),
minus_z
),
prime
),
prime
)
prod := mulmod(
prod,
mulmod(
add(
add(sub(addr, 3), mulmod(mload(add(valuesPtr, 0x80)), alpha, prime)),
minus_z
),
add(
add(sub(addr, 2), mulmod(mload(add(valuesPtr, 0xa0)), alpha, prime)),
minus_z
),
prime
),
prime
)
prod := mulmod(
prod,
mulmod(
add(
add(sub(addr, 1), mulmod(mload(add(valuesPtr, 0xc0)), alpha, prime)),
minus_z
),
add(add(addr, mulmod(mload(add(valuesPtr, 0xe0)), alpha, prime)), minus_z),
prime
),
prime
)
valuesPtr := add(valuesPtr, 0x100)
}
// Handle leftover.
// Translate addr to the beginning of the last incomplete batch.
addr := sub(addr, 7)
for {
} lt(addr, lastAddr) {
addr := add(addr, 1)
} {
let address_value_lin_comb := addmod(
addr,
mulmod(mload(valuesPtr), alpha, prime),
prime
)
prod := mulmod(prod, add(z, sub(prime, address_value_lin_comb)), prime)
valuesPtr := add(valuesPtr, 0x20)
}
memoryHash := keccak256(add(values, 0x20), mul(0x20, nValues))
}
factHash = keccak256(
abi.encodePacked(CONTINUOUS_PAGE, prime, nValues, z, alpha, prod, memoryHash, startAddr)
);
emit LogMemoryPageFactContinuous(factHash, memoryHash, prod);
registerFact(factHash);
}
}