37397440-b316-4f0a-852b-52ac16b6f89e
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 30452 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 103571 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 103572 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 103573 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 103574 | capability.graph | complete | 1 / 3 | 1 week ago |
| 103575 | detector.run | complete | 1 / 3 | 1 week ago |
| 103576 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:1185006] OpenAI Codex v0.77.0 (research preview)
[codex:1185006] --------
[codex:1185006] workdir: /tmp/codex-multi-qmdb0_vy
[codex:1185006] model: gpt-5.2-codex
[codex:1185006] provider: openai
[codex:1185006] approval: never
[codex:1185006] sandbox: read-only
[codex:1185006] reasoning effort: xhigh
[codex:1185006] reasoning summaries: auto
[codex:1185006] session id: 019b68d4-dcdd-7712-8021-72ab541277e2
[codex:1185006] --------
[codex:1185006] user
[codex:1185006] You are a security auditor. You are given EVM runtime bytecode (and possibly a disassembly) for a contract with NO verified source.
[codex:1185006] This is best-effort. Do not hallucinate: only flag issues when there's a concrete, explainable angle from bytecode/disasm patterns.
[codex:1185006]
[codex:1185006] You MUST read the full `BYTECODE_BUNDLE.txt` before concluding.
[codex:1185006]
[codex:1185006] Output MUST be valid JSON matching the provided schema.
[codex:1185006] - If you cannot identify a concrete issue from bytecode/disasm alone: set no_findings=true and findings=[].
[codex:1185006] - Otherwise: include findings with severity/category/title/evidence and point locations to BYTECODE_BUNDLE.txt line ranges when possible.
[codex:1185006]
[codex:1185006] Output constraints (IMPORTANT):
[codex:1185006] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1185006] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1185006] mcp startup: no servers
[codex:1185006]
[codex:1185006] thinking
[codex:1185006] **Reading file contents**
[codex:1185006] exec
[codex:1185006] /bin/bash -lc ls in /tmp/codex-multi-qmdb0_vy succeeded in 5ms:
[codex:1185006] BYTECODE_BUNDLE.txt
[codex:1185006] codex-output-schema.json
[codex:1185006] exec
[codex:1185006] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-qmdb0_vy succeeded in 5ms:
[codex:1185006] Runtime bytecode bundle for best-effort auditing.
[codex:1185006] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:1185006]
[codex:1185006] FILE: runtime_bytecode.hex
[codex:1185006] 0x6080604052600436101561001d575b366111595761001b612047565b005b60003560e01c806306fdde031461019d5780630b3dc35414610198578063150b7a02146101935780631626ba7e1461018e57806329f8b17414610189578063333daf921461018457806334fcd5be1461017f5780633659cfe61461017a5780633a871cdd146101755780633e1b08121461017057806351166ba01461016b578063519454471461016657806354fd4d501461016157806355b14f501461015c57806357b750471461015757806384b0196e1461015257806388e7fd061461014d578063b0d691fe14610148578063b68df16d14610143578063bc197c811461013e578063d087d28814610139578063d1f5789414610134578063d54162211461012f5763f23a6e610361000e576110c7565b611035565b610f99565b610f1a565b610e8b565b610dae565b610d69565b610d34565b610c8c565b610c55565b610b6f565b610b1b565b610a16565b61094d565b610889565b610847565b6107a1565b6106be565b610639565b610491565b61043e565b6103b1565b610332565b6102fe565b60009103126101ad57565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101db57604052565b6101b2565b606081019081106001600160401b038211176101db57604052565b608081019081106001600160401b038211176101db57604052565b604081019081106001600160401b038211176101db57604052565b60c081019081106001600160401b038211176101db57604052565b90601f801991011681019081106001600160401b038211176101db57604052565b6040519061027a826101fb565b565b6040519061016082018281106001600160401b038211176101db57604052565b604051906102a982610216565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b8481106102ea575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016102c9565b346101ad5760003660031901126101ad5761032e61031a61029c565b6040519182916020835260208301906102be565b0390f35b346101ad5760003660031901126101ad5760206000805160206121718339815191525460501c6040519060018060a01b03168152f35b6001600160a01b038116036101ad57565b359061027a82610368565b9181601f840112156101ad578235916001600160401b0383116101ad57602083818601950101116101ad57565b346101ad5760803660031901126101ad576103cd600435610368565b6103d8602435610368565b6064356001600160401b0381116101ad576103f7903690600401610384565b5050604051630a85bd0160e11b8152602090f35b9060406003198301126101ad5760043591602435906001600160401b0382116101ad5761043a91600401610384565b9091565b346101ad5760206104576104513661040b565b91611c33565b6040516001600160e01b03199091168152f35b600435906001600160e01b0319821682036101ad57565b65ffffffffffff8116036101ad57565b60c03660031901126101ad576104a561046a565b602435906104b282610368565b604435906104bf82610368565b6064356104cb81610481565b608435936104d885610481565b60a4356001600160401b0381116101ad576104f7903690600401610384565b9590946001600160a01b0393337f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789861614158061062f575b61061d5784926105646105909261055561054761026d565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261058b87611121565b611803565b1693843b156101ad576040519063064acaab60e11b825281806105ba6000998a94600484016118b6565b038183895af18015610618576105ff575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060c610612926101c8565b806101a2565b386105cb565b61154d565b604051637046c88d60e01b8152600490fd5b503033141561052f565b346101ad57602061065261064c3661040b565b91611f8c565b604051908152f35b9291926001600160401b0382116101db5760405191610683601f8201601f19166020018461024c565b8294818452818301116101ad578281602093846000960137010152565b9080601f830112156101ad578160206106bb9335910161065a565b90565b6020806003193601126101ad576001600160401b036004358181116101ad57366023820112156101ad578060040135918083116101db578260051b9060409081519461070c8785018761024c565b85528585019160248094860101943686116101ad57848101935b8685106107365761001b8861121c565b84358481116101ad578201606060231982360301126101ad5783519161075b836101e0565b8782013561076881610368565b835260448201358b8401526064820135928684116101ad576107928c94938a8695369201016106a0565b86820152815201940193610726565b60203660031901126101ad576004356107b981610368565b6001600160a01b0390337f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789831614158061083d575b61061d57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b50303314156107ee565b6003196060368201126101ad57600435906001600160401b0382116101ad576101609082360301126101ad576106526020916044359060243590600401611559565b346101ad5760203660031901126101ad576004356001600160c01b038116908190036101ad57604051631aab3f0d60e11b815230600482015260248101919091526020816044817f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27896001600160a01b03165afa80156106185761032e9160009161091f575b506040519081529081906020820190565b610940915060203d8111610946575b610938818361024c565b81019061146e565b3861090e565b503d61092e565b346101ad5760203660031901126101ad5761032e61099261096c61046a565b6000606060405161097c816101fb565b8281528260208201528260408201520152611121565b6040519061099f826101fb565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b60803660031901126101ad57600435610a2e81610368565b6044356001600160401b0381116101ad57610a4d9036906004016106a0565b9060643560028110156101ad57337f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27896001600160a01b0316141580610af0575b80610adb575b61061d57610aa0816111d2565b610ac9576000828193926020839451920190602435905af13d82803e15610ac5573d90f35b3d90fd5b6040516367ce775960e01b8152600490fd5b50610aeb610ae7611d8c565b1590565b610a93565b5030331415610a8d565b60405190610b0782610216565b6005825264302e322e3360d81b6020830152565b346101ad5760003660031901126101ad5761032e61031a610afa565b9060406003198301126101ad57600435610b5081610368565b91602435906001600160401b0382116101ad5761043a91600401610384565b610b7836610b37565b90916001600160a01b03337f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27898216141580610c4b575b61061d57806000805160206121718339815191525460501c1691610bd181612078565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c47578385610c25819593829463064acaab60e11b8452600484016118b6565b03925af1801561061857610c37575080f35b8061060c610c44926101c8565b80f35b8380fd5b5030331415610bae565b346101ad5760003660031901126101ad5760206000805160206121718339815191525460e01b6040519063ffffffff60e01b168152f35b346101ad5760003660031901126101ad57610ce2610ca861029c565b610cb0610afa565b90604051928392600f60f81b8452610cd460209360e08587015260e08601906102be565b9084820360408601526102be565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d1d57505050500390f35b835185528695509381019392810192600101610d0e565b346101ad5760003660031901126101ad5760206000805160206121718339815191525465ffffffffffff60405191831c168152f35b346101ad5760003660031901126101ad576040517f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27896001600160a01b03168152602090f35b60403660031901126101ad57600435610dc681610368565b6024356001600160401b0381116101ad57610de59036906004016106a0565b90337f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27896001600160a01b0316141580610e51575b80610e40575b61061d5760008281939260208394519201905af43d82803e15610ac5573d90f35b50610e4c610ae7611d8c565b610e1f565b5030331415610e19565b9181601f840112156101ad578235916001600160401b0383116101ad576020808501948460051b0101116101ad57565b346101ad5760a03660031901126101ad57610ea7600435610368565b610eb2602435610368565b6001600160401b036044358181116101ad57610ed2903690600401610e5b565b50506064358181116101ad57610eec903690600401610e5b565b50506084359081116101ad57610f06903690600401610384565b505060405163bc197c8160e01b8152602090f35b346101ad5760003660031901126101ad57604051631aab3f0d60e11b8152306004820152600060248201526020816044817f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27896001600160a01b03165afa80156106185761032e9160009161091f57506040519081529081906020820190565b610fa236610b37565b60008051602061217183398151915254919290916001600160a01b03919060501c821661102457610fd281612078565b1691823b156101ad57611007926000928360405180968195829463064acaab60e11b8452602060048501526024840191611895565b03925af180156106185761101757005b8061060c61001b926101c8565b60405162dc149f60e41b8152600490fd5b60203660031901126101ad5761104961046a565b337f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27896001600160a01b03161415806110bd575b61061d5760008051602061217183398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b503033141561107c565b346101ad5760a03660031901126101ad576110e3600435610368565b6110ee602435610368565b6084356001600160401b0381116101ad5761110d903690600401610384565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061116f81356001600160e01b031916611121565b5460601c337f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27896001600160a01b03161415806111c3575b61061d57818091368280378136915af43d82803e15610ac5573d90f35b506111cc611d8c565b156111a6565b600211156111dc57565b634e487b7160e01b600052602160045260246000fd5b80518210156112065760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b337f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27896001600160a01b03161415806112a9575b61061d5780519060005b82811061126557505050565b60008061127283856111f2565b5180516001600160a01b03166020916040838201519101519283519301915af13d6000803e156112a457600101611259565b3d6000fd5b506112b5610ae7611d8c565b61124f565b906004116101ad5790600490565b90929192836004116101ad5783116101ad57600401916003190190565b906024116101ad5760100190601490565b906058116101ad5760380190602090565b906024116101ad5760040190602090565b906038116101ad5760240190601490565b90600a116101ad5760040190600690565b906010116101ad57600a0190600690565b909392938483116101ad5784116101ad578101920390565b6001600160e01b0319903581811693926004811061138057505050565b60040360031b82901b16169150565b9190610160838203126101ad576113a461027c565b926113ae81610379565b8452602081013560208501526040810135916001600160401b03928381116101ad57816113dc9184016106a0565b604086015260608201358381116101ad57816113f99184016106a0565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e08601526101008083013590860152610120808301358481116101ad578261144b9185016106a0565b9086015261014092838301359081116101ad5761146892016106a0565b90830152565b908160209103126101ad575190565b606080825282516001600160a01b031690820152919392916040916115439060208101516080840152838101516114c2610160918260a08701526101c08601906102be565b906115306114e2606085015193605f1994858983030160c08a01526102be565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b01528701519089015285015184888303016101808901526102be565b92015190848303016101a08501526102be565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b039392917f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d278985163303611777576004948535928361014481013501918760248401930135946115b86115b287866112ba565b90611363565b926001600160e01b0319808516918215611754576115d790369061138f565b946115f16000805160206121718339815191525460e01b90565b1616156116095760405163fc2f51c560e01b81528a90fd5b97989697600160e01b8103611703575090602095966116936116616116486116436115b287606460009901350160248782013591016112ba565b611121565b6001810154909a9081906001600160a01b0316986112c8565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617995b8b6116f5575b369161065a565b6101408501526116b7604051998a9788968794633a871cdd60e01b8652850161147d565b0393165af1908115610618576106bb926000926116d5575b506120ee565b6116ee91925060203d811161094657610938818361024c565b90386116cf565b348080808f335af15061168c565b9095939190600160e11b036117475761173d611693946000936117386115b28a606460209c01350160248d82013591016112ba565b6118c7565b9199929691611686565b5050505050505050600190565b9697505050505050506106bb9394508215611ec0573434343486335af150611ec0565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff1990358181169392601481106117ab57505050565b60140360031b82901b16169150565b3590602081106117c8575090565b6000199060200360031b1b1690565b6001600160d01b031990358181169392600681106117f457505050565b60060360031b82901b16169150565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b90602091808252806000848401376000828201840152601f01601f1916010190565b908060209392818452848401376000828201840152601f01601f1916010190565b9160206106bb938181520191611895565b91906118d382826112e5565b6118dc91611789565b60601c936118ea83836112f6565b6118f3916117ba565b60588301607882019485836058019061190d91838861134b565b611916916117ba565b6119208287611307565b611929916117ba565b6119338388611318565b61193c91611789565b60601c61194a36878761065a565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641769381019384526001600160e01b03198e169181019190915260608101949094526001600160a01b0392909216608084015260a080840192909252908252906119c060c08261024c565b5190206119cc90611b1f565b90840196607888016119df91848961134b565b906119e992611f8c565b6119f38287611307565b6001600160a01b031991611a0791906117ba565b16611a11916120ee565b966078868801019682036077190195611a2a8382611329565b611a33916117d7565b60d01c92611a41818361133a565b611a4a916117d7565b60d01c91611a588282611318565b611a6191611789565b60601c91611a6e916112e5565b611a7791611789565b60601c91611a8361026d565b65ffffffffffff909516855265ffffffffffff1660208501526001600160a01b031660408401526001600160a01b03166060830152611ac190611121565b90611acb91611803565b6001600160a01b03871691823b156101ad57611b01926000928360405180968195829463064acaab60e11b8452600484016118b6565b03925af1801561061857611b125750565b8061060c61027a926101c8565b7f470bb15be946f544f872ed597995173a7016edfe194aac72bd042df5455e97697f000000000000000000000000d3f582f6b4814e989ee8e96bc3175320b5a540ab30147f000000000000000000000000000000000000000000000000000000000000000146141615611bac575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f32ba20807d2fff2dbb34e0bcfa82982565bef566d4c0c633dc57b700b81c342760208201527f3524473bf9d21abe45b7f656e2f1380e9335b9d346503f037e8275c56c697796604082015246606082015230608082015220611b8d565b91611cf291611cf793611cdc611cea611c4a61029c565b611c52610afa565b906020815191012090602081519101206040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152611cb181610231565b51902092604051928391602083019586909160429261190160f01b8352600283015260228201520190565b03601f19810183528261024c565b519020611f8c565b6120c5565b9065ffffffffffff928342911611159283611d44575b505081611d32575b5015611d2657630b135d3f60e11b90565b6001600160e01b031990565b6001600160a01b031615905038611d15565b429116101591503880611d0d565b908160209103126101ad575180151581036101ad5790565b6001600160a01b0390911681526040602082018190526106bb92910190611873565b611d963633611ff4565b611ebb57611daf6000356001600160e01b031916611121565b6001810154611dce906001600160a01b03165b6001600160a01b031690565b906001600160a01b03821615908115611e7f575b8115611e54575b5015611df55750600090565b60206040518092639ea9bd5960e01b82528180611e16363360048401611d6a565b03915afa90811561061857600091611e2c575090565b6106bb915060203d8111611e4d575b611e45818361024c565b810190611d52565b503d611e3b565b54611e6e915065ffffffffffff165b65ffffffffffff1690565b65ffffffffffff4291161138611de9565b905065ffffffffffff611e9f611e63835465ffffffffffff9060301c1690565b168015159081611eb1575b5090611de2565b9050421138611eaa565b600190565b9091611ecc368361138f565b610140928381013590601e19813603018212156101ad5701938435946001600160401b0386116101ad576020019385360385136101ad57611f1661168c87611f5e986020986112c8565b908301526000611f40611dc26000805160206121718339815191525460501c60018060a01b031690565b9260405196879586948593633a871cdd60e01b85526004850161147d565b03925af190811561061857600091611f74575090565b6106bb915060203d811161094657610938818361024c565b600080516020612171833981519152546040805163199ed7c960e11b8152600481019390935260248301529092602092849260501c6001600160a01b03169183918291611fde91604484019190611895565b03915afa90811561061857600091611f74575090565b6000805160206121718339815191525460408051639ea9bd5960e01b81526001600160a01b039384166004820152602481019190915292602092849260501c169082908190611e16906044830190611873565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b60008051602061217183398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c169283156001146120e6575b5060d01c92565b9250386120df565b8082186001600160a01b031615600114612109575050600190565b65ffffffffffff60a01b8181169265ffffffffffff60a01b1992831692811691908415612167575b81168015612160575b848110908518028085189414612158575b5081811190821802181790565b92503861214b565b508061213a565b9350809361213156fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9
[codex:1185006]
[codex:1185006] thinking
[codex:1185006] **Analyzing bytecode for vulnerabilities**
[codex:1185006] exec
[codex:1185006] /bin/bash -lc 'nl -ba BYTECODE_BUNDLE.txt' in /tmp/codex-multi-qmdb0_vy succeeded in 6ms:
[codex:1185006] 1 Runtime bytecode bundle for best-effort auditing.
[codex:1185006] 2 Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:1185006] 3
[codex:1185006] 4 FILE: runtime_bytecode.hex
[codex:1185006] 5 0x6080604052600436101561001d575b366111595761001b612047565b005b60003560e01c806306fdde031461019d5780630b3dc35414610198578063150b7a02146101935780631626ba7e1461018e57806329f8b17414610189578063333daf921461018457806334fcd5be1461017f5780633659cfe61461017a5780633a871cdd146101755780633e1b08121461017057806351166ba01461016b578063519454471461016657806354fd4d501461016157806355b14f501461015c57806357b750471461015757806384b0196e1461015257806388e7fd061461014d578063b0d691fe14610148578063b68df16d14610143578063bc197c811461013e578063d087d28814610139578063d1f5789414610134578063d54162211461012f5763f23a6e610361000e576110c7565b611035565b610f99565b610f1a565b610e8b565b610dae565b610d69565b610d34565b610c8c565b610c55565b610b6f565b610b1b565b610a16565b61094d565b610889565b610847565b6107a1565b6106be565b610639565b610491565b61043e565b6103b1565b610332565b6102fe565b60009103126101ad57565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101db57604052565b6101b2565b606081019081106001600160401b038211176101db57604052565b608081019081106001600160401b038211176101db57604052565b604081019081106001600160401b038211176101db57604052565b60c081019081106001600160401b038211176101db57604052565b90601f801991011681019081106001600160401b038211176101db57604052565b6040519061027a826101fb565b565b6040519061016082018281106001600160401b038211176101db57604052565b604051906102a982610216565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b8481106102ea575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016102c9565b346101ad5760003660031901126101ad5761032e61031a61029c565b6040519182916020835260208301906102be565b0390f35b346101ad5760003660031901126101ad5760206000805160206121718339815191525460501c6040519060018060a01b03168152f35b6001600160a01b038116036101ad57565b359061027a82610368565b9181601f840112156101ad578235916001600160401b0383116101ad57602083818601950101116101ad57565b346101ad5760803660031901126101ad576103cd600435610368565b6103d8602435610368565b6064356001600160401b0381116101ad576103f7903690600401610384565b5050604051630a85bd0160e11b8152602090f35b9060406003198301126101ad5760043591602435906001600160401b0382116101ad5761043a91600401610384565b9091565b346101ad5760206104576104513661040b565b91611c33565b6040516001600160e01b03199091168152f35b600435906001600160e01b0319821682036101ad57565b65ffffffffffff8116036101ad57565b60c03660031901126101ad576104a561046a565b602435906104b282610368565b604435906104bf82610368565b6064356104cb81610481565b608435936104d885610481565b60a4356001600160401b0381116101ad576104f7903690600401610384565b9590946001600160a01b0393337f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789861614158061062f575b61061d5784926105646105909261055561054761026d565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261058b87611121565b611803565b1693843b156101ad576040519063064acaab60e11b825281806105ba6000998a94600484016118b6565b038183895af18015610618576105ff575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060c610612926101c8565b806101a2565b386105cb565b61154d565b604051637046c88d60e01b8152600490fd5b503033141561052f565b346101ad57602061065261064c3661040b565b91611f8c565b604051908152f35b9291926001600160401b0382116101db5760405191610683601f8201601f19166020018461024c565b8294818452818301116101ad578281602093846000960137010152565b9080601f830112156101ad578160206106bb9335910161065a565b90565b6020806003193601126101ad576001600160401b036004358181116101ad57366023820112156101ad578060040135918083116101db578260051b9060409081519461070c8785018761024c565b85528585019160248094860101943686116101ad57848101935b8685106107365761001b8861121c565b84358481116101ad578201606060231982360301126101ad5783519161075b836101e0565b8782013561076881610368565b835260448201358b8401526064820135928684116101ad576107928c94938a8695369201016106a0565b86820152815201940193610726565b60203660031901126101ad576004356107b981610368565b6001600160a01b0390337f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789831614158061083d575b61061d57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b50303314156107ee565b6003196060368201126101ad57600435906001600160401b0382116101ad576101609082360301126101ad576106526020916044359060243590600401611559565b346101ad5760203660031901126101ad576004356001600160c01b038116908190036101ad57604051631aab3f0d60e11b815230600482015260248101919091526020816044817f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27896001600160a01b03165afa80156106185761032e9160009161091f575b506040519081529081906020820190565b610940915060203d8111610946575b610938818361024c565b81019061146e565b3861090e565b503d61092e565b346101ad5760203660031901126101ad5761032e61099261096c61046a565b6000606060405161097c816101fb565b8281528260208201528260408201520152611121565b6040519061099f826101fb565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b60803660031901126101ad57600435610a2e81610368565b6044356001600160401b0381116101ad57610a4d9036906004016106a0565b9060643560028110156101ad57337f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27896001600160a01b0316141580610af0575b80610adb575b61061d57610aa0816111d2565b610ac9576000828193926020839451920190602435905af13d82803e15610ac5573d90f35b3d90fd5b6040516367ce775960e01b8152600490fd5b50610aeb610ae7611d8c565b1590565b610a93565b5030331415610a8d565b60405190610b0782610216565b6005825264302e322e3360d81b6020830152565b346101ad5760003660031901126101ad5761032e61031a610afa565b9060406003198301126101ad57600435610b5081610368565b91602435906001600160401b0382116101ad5761043a91600401610384565b610b7836610b37565b90916001600160a01b03337f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27898216141580610c4b575b61061d57806000805160206121718339815191525460501c1691610bd181612078565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c47578385610c25819593829463064acaab60e11b8452600484016118b6565b03925af1801561061857610c37575080f35b8061060c610c44926101c8565b80f35b8380fd5b5030331415610bae565b346101ad5760003660031901126101ad5760206000805160206121718339815191525460e01b6040519063ffffffff60e01b168152f35b346101ad5760003660031901126101ad57610ce2610ca861029c565b610cb0610afa565b90604051928392600f60f81b8452610cd460209360e08587015260e08601906102be565b9084820360408601526102be565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d1d57505050500390f35b835185528695509381019392810192600101610d0e565b346101ad5760003660031901126101ad5760206000805160206121718339815191525465ffffffffffff60405191831c168152f35b346101ad5760003660031901126101ad576040517f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27896001600160a01b03168152602090f35b60403660031901126101ad57600435610dc681610368565b6024356001600160401b0381116101ad57610de59036906004016106a0565b90337f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27896001600160a01b0316141580610e51575b80610e40575b61061d5760008281939260208394519201905af43d82803e15610ac5573d90f35b50610e4c610ae7611d8c565b610e1f565b5030331415610e19565b9181601f840112156101ad578235916001600160401b0383116101ad576020808501948460051b0101116101ad57565b346101ad5760a03660031901126101ad57610ea7600435610368565b610eb2602435610368565b6001600160401b036044358181116101ad57610ed2903690600401610e5b565b50506064358181116101ad57610eec903690600401610e5b565b50506084359081116101ad57610f06903690600401610384565b505060405163bc197c8160e01b8152602090f35b346101ad5760003660031901126101ad57604051631aab3f0d60e11b8152306004820152600060248201526020816044817f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27896001600160a01b03165afa80156106185761032e9160009161091f57506040519081529081906020820190565b610fa236610b37565b60008051602061217183398151915254919290916001600160a01b03919060501c821661102457610fd281612078565b1691823b156101ad57611007926000928360405180968195829463064acaab60e11b8452602060048501526024840191611895565b03925af180156106185761101757005b8061060c61001b926101c8565b60405162dc149f60e41b8152600490fd5b60203660031901126101ad5761104961046a565b337f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27896001600160a01b03161415806110bd575b61061d5760008051602061217183398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b503033141561107c565b346101ad5760a03660031901126101ad576110e3600435610368565b6110ee602435610368565b6084356001600160401b0381116101ad5761110d903690600401610384565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061116f81356001600160e01b031916611121565b5460601c337f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27896001600160a01b03161415806111c3575b61061d57818091368280378136915af43d82803e15610ac5573d90f35b506111cc611d8c565b156111a6565b600211156111dc57565b634e487b7160e01b600052602160045260246000fd5b80518210156112065760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b337f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27896001600160a01b03161415806112a9575b61061d5780519060005b82811061126557505050565b60008061127283856111f2565b5180516001600160a01b03166020916040838201519101519283519301915af13d6000803e156112a457600101611259565b3d6000fd5b506112b5610ae7611d8c565b61124f565b906004116101ad5790600490565b90929192836004116101ad5783116101ad57600401916003190190565b906024116101ad5760100190601490565b906058116101ad5760380190602090565b906024116101ad5760040190602090565b906038116101ad5760240190601490565b90600a116101ad5760040190600690565b906010116101ad57600a0190600690565b909392938483116101ad5784116101ad578101920390565b6001600160e01b0319903581811693926004811061138057505050565b60040360031b82901b16169150565b9190610160838203126101ad576113a461027c565b926113ae81610379565b8452602081013560208501526040810135916001600160401b03928381116101ad57816113dc9184016106a0565b604086015260608201358381116101ad57816113f99184016106a0565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e08601526101008083013590860152610120808301358481116101ad578261144b9185016106a0565b9086015261014092838301359081116101ad5761146892016106a0565b90830152565b908160209103126101ad575190565b606080825282516001600160a01b031690820152919392916040916115439060208101516080840152838101516114c2610160918260a08701526101c08601906102be565b906115306114e2606085015193605f1994858983030160c08a01526102be565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b01528701519089015285015184888303016101808901526102be565b92015190848303016101a08501526102be565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b039392917f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d278985163303611777576004948535928361014481013501918760248401930135946115b86115b287866112ba565b90611363565b926001600160e01b0319808516918215611754576115d790369061138f565b946115f16000805160206121718339815191525460e01b90565b1616156116095760405163fc2f51c560e01b81528a90fd5b97989697600160e01b8103611703575090602095966116936116616116486116436115b287606460009901350160248782013591016112ba565b611121565b6001810154909a9081906001600160a01b0316986112c8565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617995b8b6116f5575b369161065a565b6101408501526116b7604051998a9788968794633a871cdd60e01b8652850161147d565b0393165af1908115610618576106bb926000926116d5575b506120ee565b6116ee91925060203d811161094657610938818361024c565b90386116cf565b348080808f335af15061168c565b9095939190600160e11b036117475761173d611693946000936117386115b28a606460209c01350160248d82013591016112ba565b6118c7565b9199929691611686565b5050505050505050600190565b9697505050505050506106bb9394508215611ec0573434343486335af150611ec0565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff1990358181169392601481106117ab57505050565b60140360031b82901b16169150565b3590602081106117c8575090565b6000199060200360031b1b1690565b6001600160d01b031990358181169392600681106117f457505050565b60060360031b82901b16169150565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b90602091808252806000848401376000828201840152601f01601f1916010190565b908060209392818452848401376000828201840152601f01601f1916010190565b9160206106bb938181520191611895565b91906118d382826112e5565b6118dc91611789565b60601c936118ea83836112f6565b6118f3916117ba565b60588301607882019485836058019061190d91838861134b565b611916916117ba565b6119208287611307565b611929916117ba565b6119338388611318565b61193c91611789565b60601c61194a36878761065a565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641769381019384526001600160e01b03198e169181019190915260608101949094526001600160a01b0392909216608084015260a080840192909252908252906119c060c08261024c565b5190206119cc90611b1f565b90840196607888016119df91848961134b565b906119e992611f8c565b6119f38287611307565b6001600160a01b031991611a0791906117ba565b16611a11916120ee565b966078868801019682036077190195611a2a8382611329565b611a33916117d7565b60d01c92611a41818361133a565b611a4a916117d7565b60d01c91611a588282611318565b611a6191611789565b60601c91611a6e916112e5565b611a7791611789565b60601c91611a8361026d565b65ffffffffffff909516855265ffffffffffff1660208501526001600160a01b031660408401526001600160a01b03166060830152611ac190611121565b90611acb91611803565b6001600160a01b03871691823b156101ad57611b01926000928360405180968195829463064acaab60e11b8452600484016118b6565b03925af1801561061857611b125750565b8061060c61027a926101c8565b7f470bb15be946f544f872ed597995173a7016edfe194aac72bd042df5455e97697f000000000000000000000000d3f582f6b4814e989ee8e96bc3175320b5a540ab30147f000000000000000000000000000000000000000000000000000000000000000146141615611bac575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f32ba20807d2fff2dbb34e0bcfa82982565bef566d4c0c633dc57b700b81c342760208201527f3524473bf9d21abe45b7f656e2f1380e9335b9d346503f037e8275c56c697796604082015246606082015230608082015220611b8d565b91611cf291611cf793611cdc611cea611c4a61029c565b611c52610afa565b906020815191012090602081519101206040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152611cb181610231565b51902092604051928391602083019586909160429261190160f01b8352600283015260228201520190565b03601f19810183528261024c565b519020611f8c565b6120c5565b9065ffffffffffff928342911611159283611d44575b505081611d32575b5015611d2657630b135d3f60e11b90565b6001600160e01b031990565b6001600160a01b031615905038611d15565b429116101591503880611d0d565b908160209103126101ad575180151581036101ad5790565b6001600160a01b0390911681526040602082018190526106bb92910190611873565b611d963633611ff4565b611ebb57611daf6000356001600160e01b031916611121565b6001810154611dce906001600160a01b03165b6001600160a01b031690565b906001600160a01b03821615908115611e7f575b8115611e54575b5015611df55750600090565b60206040518092639ea9bd5960e01b82528180611e16363360048401611d6a565b03915afa90811561061857600091611e2c575090565b6106bb915060203d8111611e4d575b611e45818361024c565b810190611d52565b503d611e3b565b54611e6e915065ffffffffffff165b65ffffffffffff1690565b65ffffffffffff4291161138611de9565b905065ffffffffffff611e9f611e63835465ffffffffffff9060301c1690565b168015159081611eb1575b5090611de2565b9050421138611eaa565b600190565b9091611ecc368361138f565b610140928381013590601e19813603018212156101ad5701938435946001600160401b0386116101ad576020019385360385136101ad57611f1661168c87611f5e986020986112c8565b908301526000611f40611dc26000805160206121718339815191525460501c60018060a01b031690565b9260405196879586948593633a871cdd60e01b85526004850161147d565b03925af190811561061857600091611f74575090565b6106bb915060203d811161094657610938818361024c565b600080516020612171833981519152546040805163199ed7c960e11b8152600481019390935260248301529092602092849260501c6001600160a01b03169183918291611fde91604484019190611895565b03915afa90811561061857600091611f74575090565b6000805160206121718339815191525460408051639ea9bd5960e01b81526001600160a01b039384166004820152602481019190915292602092849260501c169082908190611e16906044830190611873565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b60008051602061217183398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c169283156001146120e6575b5060d01c92565b9250386120df565b8082186001600160a01b031615600114612109575050600190565b65ffffffffffff60a01b8181169265ffffffffffff60a01b1992831692811691908415612167575b81168015612160575b848110908518028085189414612158575b5081811190821802181790565b92503861214b565b508061213a565b9350809361213156fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9
[codex:1185006]
[codex:1185006] thinking
[codex:1185006] **Analyzing upgradeable contract bytecode**
[codex:1185006]
[codex:1185006] I'm parsing the bytecode to identify function selectors, especially UUPS upgrade functions like `upgradeTo`, and examining if access control checks like `CALLER == owner` are present around upgrade logic; I'll disassemble from function offsets to look for concrete security issues while avoiding guesses.
[codex:1185006] exec
[codex:1185006] /bin/bash -lc "python - <<'PY'
[codex:1185006] from binascii import unhexlify
[codex:1185006] import sys
[codex:1185006] hexdata = open('/tmp/codex-multi-qmdb0_vy/BYTECODE_BUNDLE.txt').read().split('0x',1)[1].strip()
[codex:1185006] # remove trailing newline maybe, but there might be other text? ensure only hex at last line
[codex:1185006] hexdata = ''.join(ch for ch in hexdata if ch.strip())
[codex:1185006] # keep only hex chars
[codex:1185006] hexdata = ''.join([c for c in hexdata if c in '0123456789abcdefABCDEF'])
[codex:1185006] code = bytes.fromhex(hexdata)
[codex:1185006]
[codex:1185006] # opcode map
[codex:1185006] opmap = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1185006] for i, name in [
[codex:1185006] (0x00,'STOP'),(0x01,'ADD'),(0x02,'MUL'),(0x03,'SUB'),(0x04,'DIV'),(0x05,'SDIV'),(0x06,'MOD'),(0x07,'SMOD'),(0x08,'ADDMOD'),(0x09,'MULMOD'),(0x0a,'EXP'),(0x0b,'SIGNEXTEND'),
[codex:1185006] (0x10,'LT'),(0x11,'GT'),(0x12,'SLT'),(0x13,'SGT'),(0x14,'EQ'),(0x15,'ISZERO'),(0x16,'AND'),(0x17,'OR'),(0x18,'XOR'),(0x19,'NOT'),(0x1a,'BYTE'),(0x1b,'SHL'),(0x1c,'SHR'),(0x1d,'SAR'),
[codex:1185006] (0x20,'SHA3'),
[codex:1185006] (0x30,'ADDRESS'),(0x31,'BALANCE'),(0x32,'ORIGIN'),(0x33,'CALLER'),(0x34,'CALLVALUE'),(0x35,'CALLDATALOAD'),(0x36,'CALLDATASIZE'),(0x37,'CALLDATACOPY'),(0x38,'CODESIZE'),(0x39,'CODECOPY'),(0x3a,'GASPRICE'),(0x3b,'EXTCODESIZE'),(0x3c,'EXTCODECOPY'),(0x3d,'RETURNDATASIZE'),(0x3e,'RETURNDATACOPY'),(0x3f,'EXTCODEHASH'),
[codex:1185006] (0x40,'BLOCKHASH'),(0x41,'COINBASE'),(0x42,'TIMESTAMP'),(0x43,'NUMBER'),(0x44,'DIFFICULTY'),(0x45,'GASLIMIT'),(0x46,'CHAINID'),(0x47,'SELFBALANCE'),(0x48,'BASEFEE'),
[codex:1185006] (0x50,'POP'),(0x51,'MLOAD'),(0x52,'MSTORE'),(0x53,'MSTORE8'),(0x54,'SLOAD'),(0x55,'SSTORE'),(0x56,'JUMP'),(0x57,'JUMPI'),(0x58,'PC'),(0x59,'MSIZE'),(0x5a,'GAS'),(0x5b,'JUMPDEST'),
[codex:1185006] (0x60,'PUSH1'),
[codex:1185006] (0x80,'DUP1'),(0x81,'DUP2'),(0x82,'DUP3'),(0x83,'DUP4'),(0x84,'DUP5'),(0x85,'DUP6'),(0x86,'DUP7'),(0x87,'DUP8'),(0x88,'DUP9'),(0x89,'DUP10'),(0x8a,'DUP11'),(0x8b,'DUP12'),(0x8c,'DUP13'),(0x8d,'DUP14'),(0x8e,'DUP15'),(0x8f,'DUP16'),
[codex:1185006] (0x90,'SWAP1'),(0x91,'SWAP2'),(0x92,'SWAP3'),(0x93,'SWAP4'),(0x94,'SWAP5'),(0x95,'SWAP6'),(0x96,'SWAP7'),(0x97,'SWAP8'),(0x98,'SWAP9'),(0x99,'SWAP10'),(0x9a,'SWAP11'),(0x9b,'SWAP12'),(0x9c,'SWAP13'),(0x9d,'SWAP14'),(0x9e,'SWAP15'),(0x9f,'SWAP16'),
[codex:1185006] (0xa0,'LOG0'),(0xa1,'LOG1'),(0xa2,'LOG2'),(0xa3,'LOG3'),(0xa4,'LOG4'),
[codex:1185006] (0xf0,'CREATE'),(0xf1,'CALL'),(0xf2,'CALLCODE'),(0xf3,'RETURN'),(0xf4,'DELEGATECALL'),(0xf5,'CREATE2'),(0xfa,'STATICCALL'),(0xfd,'REVERT'),(0xfe,'INVALID'),(0xff,'SELFDESTRUCT'),
[codex:1185006] ]:
[codex:1185006] opmap[i]=name
[codex:1185006]
[codex:1185006] # disasm with addresses
[codex:1185006] ops=[]
[codex:1185006] i=0
[codex:1185006] while i<len(code):
[codex:1185006] op=code[i]
[codex:1185006] name=opmap.get(op, f'OP_{op:02x}')
[codex:1185006] if 0x60<=op<=0x7f:
[codex:1185006] n=op-0x5f
[codex:1185006] data=code[i+1:i+1+n]
[codex:1185006] ops.append((i,name,data))
[codex:1185006] i+=1+n
[codex:1185006] else:
[codex:1185006] ops.append((i,name,None))
[codex:1185006] i+=1
[codex:1185006]
[codex:1185006] # helper to print around a target offset
[codex:1185006]
[codex:1185006] def show(start, count=80):
[codex:1185006] # find index of op at or before start
[codex:1185006] idx=0
[codex:1185006] for j,(pc,_,__) in enumerate(ops):
[codex:1185006] if pc>=start:
[codex:1185006] idx=j
[codex:1185006] break
[codex:1185006] for pc,name,data in ops[idx:idx+count]:
[codex:1185006] if data is None:
[codex:1185006] print(f\"{pc:04x}: {name}\")
[codex:1185006] else:
[codex:1185006] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:1185006]
[codex:1185006] # show around function at 0x017a (upgradeTo selector jump dest?)
[codex:1185006] show(0x0170, 80)
[codex:1185006] print('---')
[codex:1185006] # show around location with impl slot constant (search for 0x360894...)
[codex:1185006] const = bytes.fromhex('360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc')
[codex:1185006] idx = code.find(const)
[codex:1185006] print('impl slot at', hex(idx))
[codex:1185006] show(idx-20, 80)
[codex:1185006]
[codex:1185006] PY" in /tmp/codex-multi-qmdb0_vy succeeded in 41ms:
[codex:1185006] 0170: JUMPDEST
[codex:1185006] 0171: PUSH2 0x0889
[codex:1185006] 0174: JUMP
[codex:1185006] 0175: JUMPDEST
[codex:1185006] 0176: PUSH2 0x0847
[codex:1185006] 0179: JUMP
[codex:1185006] 017a: JUMPDEST
[codex:1185006] 017b: PUSH2 0x07a1
[codex:1185006] 017e: JUMP
[codex:1185006] 017f: JUMPDEST
[codex:1185006] 0180: PUSH2 0x06be
[codex:1185006] 0183: JUMP
[codex:1185006] 0184: JUMPDEST
[codex:1185006] 0185: PUSH2 0x0639
[codex:1185006] 0188: JUMP
[codex:1185006] 0189: JUMPDEST
[codex:1185006] 018a: PUSH2 0x0491
[codex:1185006] 018d: JUMP
[codex:1185006] 018e: JUMPDEST
[codex:1185006] 018f: PUSH2 0x043e
[codex:1185006]
[codex:1185006] thinking
[codex:1185006] **Examining upgrade access control logic**
[codex:1185006]
[codex:1185006] I'm analyzing the disassembly around the implementation slot store and noticing a complex conditional jump sequence that seems to check caller identity, possibly related to UUPS proxy's `onlyProxy` modifier. The check involves comparing the caller's address to the contract's address in a way that’s not typical, so I want to understand how it enforces upgrade permissions by disassembling more code around 0x07a1 to 0x08a0.
[codex:1185006] exec
[codex:1185006] /bin/bash -lc "python - <<'PY'
[codex:1185006] from binascii import unhexlify
[codex:1185006] hexdata = open('/tmp/codex-multi-qmdb0_vy/BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:1185006] hexdata = ''.join(c for c in hexdata if c in '0123456789abcdefABCDEF')
[codex:1185006] code=bytes.fromhex(hexdata)
[codex:1185006]
[codex:1185006] opmap={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1185006] for i,name in [(0x00,'STOP'),(0x01,'ADD'),(0x02,'MUL'),(0x03,'SUB'),(0x04,'DIV'),(0x05,'SDIV'),(0x06,'MOD'),(0x07,'SMOD'),(0x08,'ADDMOD'),(0x09,'MULMOD'),(0x0a,'EXP'),(0x0b,'SIGNEXTEND'),(0x10,'LT'),(0x11,'GT'),(0x12,'SLT'),(0x13,'SGT'),(0x14,'EQ'),(0x15,'ISZERO'),(0x16,'AND'),(0x17,'OR'),(0x18,'XOR'),(0x19,'NOT'),(0x1a,'BYTE'),(0x1b,'SHL'),(0x1c,'SHR'),(0x1d,'SAR'),(0x20,'SHA3'),(0x30,'ADDRESS'),(0x31,'BALANCE'),(0x32,'ORIGIN'),(0x33,'CALLER'),(0x34,'CALLVALUE'),(0x35,'CALLDATALOAD'),(0x36,'CALLDATASIZE'),(0x37,'CALLDATACOPY'),(0x38,'CODESIZE'),(0x39,'CODECOPY'),(0x3a,'GASPRICE'),(0x3b,'EXTCODESIZE'),(0x3c,'EXTCODECOPY'),(0x3d,'RETURNDATASIZE'),(0x3e,'RETURNDATACOPY'),(0x3f,'EXTCODEHASH'),(0x40,'BLOCKHASH'),(0x41,'COINBASE'),(0x42,'TIMESTAMP'),(0x43,'NUMBER'),(0x44,'DIFFICULTY'),(0x45,'GASLIMIT'),(0x46,'CHAINID'),(0x47,'SELFBALANCE'),(0x48,'BASEFEE'),(0x50,'POP'),(0x51,'MLOAD'),(0x52,'MSTORE'),(0x53,'MSTORE8'),(0x54,'SLOAD'),(0x55,'SSTORE'),(0x56,'JUMP'),(0x57,'JUMPI'),(0x58,'PC'),(0x59,'MSIZE'),(0x5a,'GAS'),(0x5b,'JUMPDEST'),(0x60,'PUSH1'),(0x80,'DUP1'),(0x81,'DUP2'),(0x82,'DUP3'),(0x83,'DUP4'),(0x84,'DUP5'),(0x85,'DUP6'),(0x86,'DUP7'),(0x87,'DUP8'),(0x88,'DUP9'),(0x89,'DUP10'),(0x8a,'DUP11'),(0x8b,'DUP12'),(0x8c,'DUP13'),(0x8d,'DUP14'),(0x8e,'DUP15'),(0x8f,'DUP16'),(0x90,'SWAP1'),(0x91,'SWAP2'),(0x92,'SWAP3'),(0x93,'SWAP4'),(0x94,'SWAP5'),(0x95,'SWAP6'),(0x96,'SWAP7'),(0x97,'SWAP8'),(0x98,'SWAP9'),(0x99,'SWAP10'),(0x9a,'SWAP11'),(0x9b,'SWAP12'),(0x9c,'SWAP13'),(0x9d,'SWAP14'),(0x9e,'SWAP15'),(0x9f,'SWAP16'),(0xa0,'LOG0'),(0xa1,'LOG1'),(0xa2,'LOG2'),(0xa3,'LOG3'),(0xa4,'LOG4'),(0xf0,'CREATE'),(0xf1,'CALL'),(0xf2,'CALLCODE'),(0xf3,'RETURN'),(0xf4,'DELEGATECALL'),(0xf5,'CREATE2'),(0xfa,'STATICCALL'),(0xfd,'REVERT'),(0xfe,'INVALID'),(0xff,'SELFDESTRUCT')]
[codex:1185006] for i,n in list(opmap.items()):
[codex:1185006] pass
[codex:1185006]
[codex:1185006] ops=[]
[codex:1185006] i=0
[codex:1185006] while i<len(code):
[codex:1185006] op=code[i]
[codex:1185006] name=opmap.get(op, f'OP_{op:02x}')
[codex:1185006] if 0x60<=op<=0x7f:
[codex:1185006] n=op-0x5f
[codex:1185006] data=code[i+1:i+1+n]
[codex:1185006] ops.append((i,name,data))
[codex:1185006] i+=1+n
[codex:1185006] else:
[codex:1185006] ops.append((i,name,None))
[codex:1185006] i+=1
[codex:1185006]
[codex:1185006]
[codex:1185006] def show(start, end):
[codex:1185006] for pc,name,data in ops:
[codex:1185006] if start<=pc<=end:
[codex:1185006] if data is None:
[codex:1185006] print(f\"{pc:04x}: {name}\")
[codex:1185006] else:
[codex:1185006] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:1185006]
[codex:1185006] show(0x0780,0x08a5)
[codex:1185006] PY" in /tmp/codex-multi-qmdb0_vy exited 1 in 33ms:
[codex:1185006] File "<stdin>", line 7
[codex:1185006] for i,name in [(0x00,'STOP'),(0x01,'ADD'),(0x02,'MUL'),(0x03,'SUB'),(0x04,'DIV'),(0x05,'SDIV'),(0x06,'MOD'),(0x07,'SMOD'),(0x08,'ADDMOD'),(0x09,'MULMOD'),(0x0a,'EXP'),(0x0b,'SIGNEXTEND'),(0x10,'LT'),(0x11,'GT'),(0x12,'SLT'),(0x13,'SGT'),(0x14,'EQ'),(0x15,'ISZERO'),(0x16,'AND'),(0x17,'OR'),(0x18,'XOR'),(0x19,'NOT'),(0x1a,'BYTE'),(0x1b,'SHL'),(0x1c,'SHR'),(0x1d,'SAR'),(0x20,'SHA3'),(0x30,'ADDRESS'),(0x31,'BALANCE'),(0x32,'ORIGIN'),(0x33,'CALLER'),(0x34,'CALLVALUE'),(0x35,'CALLDATALOAD'),(0x36,'CALLDATASIZE'),(0x37,'CALLDATACOPY'),(0x38,'CODESIZE'),(0x39,'CODECOPY'),(0x3a,'GASPRICE'),(0x3b,'EXTCODESIZE'),(0x3c,'EXTCODECOPY'),(0x3d,'RETURNDATASIZE'),(0x3e,'RETURNDATACOPY'),(0x3f,'EXTCODEHASH'),(0x40,'BLOCKHASH'),(0x41,'COINBASE'),(0x42,'TIMESTAMP'),(0x43,'NUMBER'),(0x44,'DIFFICULTY'),(0x45,'GASLIMIT'),(0x46,'CHAINID'),(0x47,'SELFBALANCE'),(0x48,'BASEFEE'),(0x50,'POP'),(0x51,'MLOAD'),(0x52,'MSTORE'),(0x53,'MSTORE8'),(0x54,'SLOAD'),(0x55,'SSTORE'),(0x56,'JUMP'),(0x57,'JUMPI'),(0x58,'PC'),(0x59,'MSIZE'),(0x5a,'GAS'),(0x5b,'JUMPDEST'),(0x60,'PUSH1'),(0x80,'DUP1'),(0x81,'DUP2'),(0x82,'DUP3'),(0x83,'DUP4'),(0x84,'DUP5'),(0x85,'DUP6'),(0x86,'DUP7'),(0x87,'DUP8'),(0x88,'DUP9'),(0x89,'DUP10'),(0x8a,'DUP11'),(0x8b,'DUP12'),(0x8c,'DUP13'),(0x8d,'DUP14'),(0x8e,'DUP15'),(0x8f,'DUP16'),(0x90,'SWAP1'),(0x91,'SWAP2'),(0x92,'SWAP3'),(0x93,'SWAP4'),(0x94,'SWAP5'),(0x95,'SWAP6'),(0x96,'SWAP7'),(0x97,'SWAP8'),(0x98,'SWAP9'),(0x99,'SWAP10'),(0x9a,'SWAP11'),(0x9b,'SWAP12'),(0x9c,'SWAP13'),(0x9d,'SWAP14'),(0x9e,'SWAP15'),(0x9f,'SWAP16'),(0xa0,'LOG0'),(0xa1,'LOG1'),(0xa2,'LOG2'),(0xa3,'LOG3'),(0xa4,'LOG4'),(0xf0,'CREATE'),(0xf1,'CALL'),(0xf2,'CALLCODE'),(0xf3,'RETURN'),(0xf4,'DELEGATECALL'),(0xf5,'CREATE2'),(0xfa,'STATICCALL'),(0xfd,'REVERT'),(0xfe,'INVALID'),(0xff,'SELFDESTRUCT')]
[codex:1185006] ^
[codex:1185006] SyntaxError: expected ':'
[codex:1185006]
[codex:1185006] thinking
[codex:1185006] **Correcting the mapping approach**
[codex:1185006] exec
[codex:1185006] /bin/bash -lc "python - <<'PY'
[codex:1185006] hexdata = open('/tmp/codex-multi-qmdb0_vy/BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:1185006] hexdata = ''.join(c for c in hexdata if c in '0123456789abcdefABCDEF')
[codex:1185006] code=bytes.fromhex(hexdata)
[codex:1185006]
[codex:1185006] # opcode mapping
[codex:1185006] opmap={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1185006] ops_list=[
[codex:1185006] (0x00,'STOP'),(0x01,'ADD'),(0x02,'MUL'),(0x03,'SUB'),(0x04,'DIV'),(0x05,'SDIV'),(0x06,'MOD'),(0x07,'SMOD'),(0x08,'ADDMOD'),(0x09,'MULMOD'),(0x0a,'EXP'),(0x0b,'SIGNEXTEND'),
[codex:1185006] (0x10,'LT'),(0x11,'GT'),(0x12,'SLT'),(0x13,'SGT'),(0x14,'EQ'),(0x15,'ISZERO'),(0x16,'AND'),(0x17,'OR'),(0x18,'XOR'),(0x19,'NOT'),(0x1a,'BYTE'),(0x1b,'SHL'),(0x1c,'SHR'),(0x1d,'SAR'),
[codex:1185006] (0x20,'SHA3'),
[codex:1185006] (0x30,'ADDRESS'),(0x31,'BALANCE'),(0x32,'ORIGIN'),(0x33,'CALLER'),(0x34,'CALLVALUE'),(0x35,'CALLDATALOAD'),(0x36,'CALLDATASIZE'),(0x37,'CALLDATACOPY'),(0x38,'CODESIZE'),(0x39,'CODECOPY'),(0x3a,'GASPRICE'),(0x3b,'EXTCODESIZE'),(0x3c,'EXTCODECOPY'),(0x3d,'RETURNDATASIZE'),(0x3e,'RETURNDATACOPY'),(0x3f,'EXTCODEHASH'),
[codex:1185006] (0x40,'BLOCKHASH'),(0x41,'COINBASE'),(0x42,'TIMESTAMP'),(0x43,'NUMBER'),(0x44,'DIFFICULTY'),(0x45,'GASLIMIT'),(0x46,'CHAINID'),(0x47,'SELFBALANCE'),(0x48,'BASEFEE'),
[codex:1185006] (0x50,'POP'),(0x51,'MLOAD'),(0x52,'MSTORE'),(0x53,'MSTORE8'),(0x54,'SLOAD'),(0x55,'SSTORE'),(0x56,'JUMP'),(0x57,'JUMPI'),(0x58,'PC'),(0x59,'MSIZE'),(0x5a,'GAS'),(0x5b,'JUMPDEST'),
[codex:1185006] (0x80,'DUP1'),(0x81,'DUP2'),(0x82,'DUP3'),(0x83,'DUP4'),(0x84,'DUP5'),(0x85,'DUP6'),(0x86,'DUP7'),(0x87,'DUP8'),(0x88,'DUP9'),(0x89,'DUP10'),(0x8a,'DUP11'),(0x8b,'DUP12'),(0x8c,'DUP13'),(0x8d,'DUP14'),(0x8e,'DUP15'),(0x8f,'DUP16'),
[codex:1185006] (0x90,'SWAP1'),(0x91,'SWAP2'),(0x92,'SWAP3'),(0x93,'SWAP4'),(0x94,'SWAP5'),(0x95,'SWAP6'),(0x96,'SWAP7'),(0x97,'SWAP8'),(0x98,'SWAP9'),(0x99,'SWAP10'),(0x9a,'SWAP11'),(0x9b,'SWAP12'),(0x9c,'SWAP13'),(0x9d,'SWAP14'),(0x9e,'SWAP15'),(0x9f,'SWAP16'),
[codex:1185006] (0xa0,'LOG0'),(0xa1,'LOG1'),(0xa2,'LOG2'),(0xa3,'LOG3'),(0xa4,'LOG4'),
[codex:1185006] (0xf0,'CREATE'),(0xf1,'CALL'),(0xf2,'CALLCODE'),(0xf3,'RETURN'),(0xf4,'DELEGATECALL'),(0xf5,'CREATE2'),(0xfa,'STATICCALL'),(0xfd,'REVERT'),(0xfe,'INVALID'),(0xff,'SELFDESTRUCT'),
[codex:1185006] ]
[codex:1185006] for k,v in ops_list:
[codex:1185006] opmap[k]=v
[codex:1185006]
[codex:1185006] ops=[]
[codex:1185006] i=0
[codex:1185006] while i<len(code):
[codex:1185006] op=code[i]
[codex:1185006] name=opmap.get(op, f'OP_{op:02x}')
[codex:1185006] if 0x60<=op<=0x7f:
[codex:1185006] n=op-0x5f
[codex:1185006] data=code[i+1:i+1+n]
[codex:1185006] ops.append((i,name,data))
[codex:1185006] i+=1+n
[codex:1185006] else:
[codex:1185006] ops.append((i,name,None))
[codex:1185006] i+=1
[codex:1185006]
[codex:1185006]
[codex:1185006] def show(start, end):
[codex:1185006] for pc,name,data in ops:
[codex:1185006] if start<=pc<=end:
[codex:1185006] if data is None:
[codex:1185006] print(f\"{pc:04x}: {name}\")
[codex:1185006] else:
[codex:1185006] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:1185006]
[codex:1185006] show(0x0790,0x08a5)
[codex:1185006] PY" in /tmp/codex-multi-qmdb0_vy succeeded in 33ms:
[codex:1185006] 0791: JUMP
[codex:1185006] 0792: JUMPDEST
[codex:1185006] 0793: DUP7
[codex:1185006] 0794: DUP3
[codex:1185006] 0795: ADD
[codex:1185006] 0796: MSTORE
[codex:1185006] 0797: DUP2
[codex:1185006] 0798: MSTORE
[codex:1185006] 0799: ADD
[codex:1185006] 079a: SWAP5
[codex:1185006] 079b: ADD
[codex:1185006] 079c: SWAP4
[codex:1185006] 079d: PUSH2 0x0726
[codex:1185006] 07a0: JUMP
[codex:1185006] 07a1: JUMPDEST
[codex:1185006] 07a2: PUSH1 0x20
[codex:1185006] 07a4: CALLDATASIZE
[codex:1185006] 07a5: PUSH1 0x03
[codex:1185006] 07a7: NOT
[codex:1185006] 07a8: ADD
[codex:1185006]
[codex:1185006] thinking
[codex:1185006] **Analyzing upgradeTo access control logic**
[codex:1185006] exec
[codex:1185006] /bin/bash -lc "python - <<'PY'
[codex:1185006] hexdata = open('/tmp/codex-multi-qmdb0_vy/BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:1185006] hexdata=''.join(c for c in hexdata if c in '0123456789abcdefABCDEF')
[codex:1185006] code=bytes.fromhex(hexdata)
[codex:1185006] # same opmap as before
[codex:1185006] opmap={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1185006] ops_list=[(0x00,'STOP'),(0x01,'ADD'),(0x02,'MUL'),(0x03,'SUB'),(0x04,'DIV'),(0x05,'SDIV'),(0x06,'MOD'),(0x07,'SMOD'),(0x08,'ADDMOD'),(0x09,'MULMOD'),(0x0a,'EXP'),(0x0b,'SIGNEXTEND'),(0x10,'LT'),(0x11,'GT'),(0x12,'SLT'),(0x13,'SGT'),(0x14,'EQ'),(0x15,'ISZERO'),(0x16,'AND'),(0x17,'OR'),(0x18,'XOR'),(0x19,'NOT'),(0x1a,'BYTE'),(0x1b,'SHL'),(0x1c,'SHR'),(0x1d,'SAR'),(0x20,'SHA3'),(0x30,'ADDRESS'),(0x31,'BALANCE'),(0x32,'ORIGIN'),(0x33,'CALLER'),(0x34,'CALLVALUE'),(0x35,'CALLDATALOAD'),(0x36,'CALLDATASIZE'),(0x37,'CALLDATACOPY'),(0x38,'CODESIZE'),(0x39,'CODECOPY'),(0x3a,'GASPRICE'),(0x3b,'EXTCODESIZE'),(0x3c,'EXTCODECOPY'),(0x3d,'RETURNDATASIZE'),(0x3e,'RETURNDATACOPY'),(0x3f,'EXTCODEHASH'),(0x40,'BLOCKHASH'),(0x41,'COINBASE'),(0x42,'TIMESTAMP'),(0x43,'NUMBER'),(0x44,'DIFFICULTY'),(0x45,'GASLIMIT'),(0x46,'CHAINID'),(0x47,'SELFBALANCE'),(0x48,'BASEFEE'),(0x50,'POP'),(0x51,'MLOAD'),(0x52,'MSTORE'),(0x53,'MSTORE8'),(0x54,'SLOAD'),(0x55,'SSTORE'),(0x56,'JUMP'),(0x57,'JUMPI'),(0x58,'PC'),(0x59,'MSIZE'),(0x5a,'GAS'),(0x5b,'JUMPDEST'),(0x80,'DUP1'),(0x81,'DUP2'),(0x82,'DUP3'),(0x83,'DUP4'),(0x84,'DUP5'),(0x85,'DUP6'),(0x86,'DUP7'),(0x87,'DUP8'),(0x88,'DUP9'),(0x89,'DUP10'),(0x8a,'DUP11'),(0x8b,'DUP12'),(0x8c,'DUP13'),(0x8d,'DUP14'),(0x8e,'DUP15'),(0x8f,'DUP16'),(0x90,'SWAP1'),(0x91,'SWAP2'),(0x92,'SWAP3'),(0x93,'SWAP4'),(0x94,'SWAP5'),(0x95,'SWAP6'),(0x96,'SWAP7'),(0x97,'SWAP8'),(0x98,'SWAP9'),(0x99,'SWAP10'),(0x9a,'SWAP11'),(0x9b,'SWAP12'),(0x9c,'SWAP13'),(0x9d,'SWAP14'),(0x9e,'SWAP15'),(0x9f,'SWAP16'),(0xa0,'LOG0'),(0xa1,'LOG1'),(0xa2,'LOG2'),(0xa3,'LOG3'),(0xa4,'LOG4'),(0xf0,'CREATE'),(0xf1,'CALL'),(0xf2,'CALLCODE'),(0xf3,'RETURN'),(0xf4,'DELEGATECALL'),(0xf5,'CREATE2'),(0xfa,'STATICCALL'),(0xfd,'REVERT'),(0xfe,'INVALID'),(0xff,'SELFDESTRUCT')]
[codex:1185006] for k,v in ops_list:
[codex:1185006] opmap[k]=v
[codex:1185006]
[codex:1185006] ops=[]
[codex:1185006] i=0
[codex:1185006] while i<len(code):
[codex:1185006] op=code[i]
[codex:1185006] name=opmap.get(op, f'OP_{op:02x}')
[codex:1185006] if 0x60<=op<=0x7f:
[codex:1185006] n=op-0x5f
[codex:1185006] data=code[i+1:i+1+n]
[codex:1185006] ops.append((i,name,data))
[codex:1185006] i+=1+n
[codex:1185006] else:
[codex:1185006] ops.append((i,name,None))
[codex:1185006] i+=1
[codex:1185006]
[codex:1185006]
[codex:1185006] def show(start, end):
[codex:1185006] for pc,name,data in ops:
[codex:1185006] if start<=pc<=end:
[codex:1185006] if data is None:
[codex:1185006] print(f\"{pc:04x}: {name}\")
[codex:1185006] else:
[codex:1185006] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:1185006]
[codex:1185006] show(0x0340,0x03b0)
[codex:1185006] PY" in /tmp/codex-multi-qmdb0_vy succeeded in 26ms:
[codex:1185006] 0340: PUSH2 0x01ad
[codex:1185006] 0343: JUMPI
[codex:1185006] 0344: PUSH1 0x20
[codex:1185006] 0346: PUSH1 0x00
[codex:1185006] 0348: DUP1
[codex:1185006] 0349: MLOAD
[codex:1185006] 034a: PUSH1 0x20
[codex:1185006] 034c: PUSH2 0x2171
[codex:1185006] 034f: DUP4
[codex:1185006] 0350: CODECOPY
[codex:1185006] 0351: DUP2
[codex:1185006] 0352: MLOAD
[codex:1185006] 0353: SWAP2
[codex:1185006] 0354: MSTORE
[codex:1185006] 0355: SLOAD
[codex:1185006] 0356: PUSH1 0x50
[codex:1185006] 0358: SHR
[codex:1185006] 0359: PUSH1 0x40
[codex:1185006] 035b: MLOAD
[codex:1185006] 035c: SWAP1
[codex:1185006]
[codex:1185006] thinking
[codex:1185006] **Analyzing address sanitization and caller checks**
[codex:1185006] exec
[codex:1185006] /bin/bash -lc "python - <<'PY'
[codex:1185006] hexdata = open('/tmp/codex-multi-qmdb0_vy/BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:1185006] hexdata=''.join(c for c in hexdata if c in '0123456789abcdefABCDEF')
[codex:1185006] code=bytes.fromhex(hexdata)
[codex:1185006] # opmap
[codex:1185006] opmap={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1185006] ops_list=[(0x00,'STOP'),(0x01,'ADD'),(0x02,'MUL'),(0x03,'SUB'),(0x04,'DIV'),(0x05,'SDIV'),(0x06,'MOD'),(0x07,'SMOD'),(0x08,'ADDMOD'),(0x09,'MULMOD'),(0x0a,'EXP'),(0x0b,'SIGNEXTEND'),(0x10,'LT'),(0x11,'GT'),(0x12,'SLT'),(0x13,'SGT'),(0x14,'EQ'),(0x15,'ISZERO'),(0x16,'AND'),(0x17,'OR'),(0x18,'XOR'),(0x19,'NOT'),(0x1a,'BYTE'),(0x1b,'SHL'),(0x1c,'SHR'),(0x1d,'SAR'),(0x20,'SHA3'),(0x30,'ADDRESS'),(0x31,'BALANCE'),(0x32,'ORIGIN'),(0x33,'CALLER'),(0x34,'CALLVALUE'),(0x35,'CALLDATALOAD'),(0x36,'CALLDATASIZE'),(0x37,'CALLDATACOPY'),(0x38,'CODESIZE'),(0x39,'CODECOPY'),(0x3a,'GASPRICE'),(0x3b,'EXTCODESIZE'),(0x3c,'EXTCODECOPY'),(0x3d,'RETURNDATASIZE'),(0x3e,'RETURNDATACOPY'),(0x3f,'EXTCODEHASH'),(0x40,'BLOCKHASH'),(0x41,'COINBASE'),(0x42,'TIMESTAMP'),(0x43,'NUMBER'),(0x44,'DIFFICULTY'),(0x45,'GASLIMIT'),(0x46,'CHAINID'),(0x47,'SELFBALANCE'),(0x48,'BASEFEE'),(0x50,'POP'),(0x51,'MLOAD'),(0x52,'MSTORE'),(0x53,'MSTORE8'),(0x54,'SLOAD'),(0x55,'SSTORE'),(0x56,'JUMP'),(0x57,'JUMPI'),(0x58,'PC'),(0x59,'MSIZE'),(0x5a,'GAS'),(0x5b,'JUMPDEST'),(0x80,'DUP1'),(0x81,'DUP2'),(0x82,'DUP3'),(0x83,'DUP4'),(0x84,'DUP5'),(0x85,'DUP6'),(0x86,'DUP7'),(0x87,'DUP8'),(0x88,'DUP9'),(0x89,'DUP10'),(0x8a,'DUP11'),(0x8b,'DUP12'),(0x8c,'DUP13'),(0x8d,'DUP14'),(0x8e,'DUP15'),(0x8f,'DUP16'),(0x90,'SWAP1'),(0x91,'SWAP2'),(0x92,'SWAP3'),(0x93,'SWAP4'),(0x94,'SWAP5'),(0x95,'SWAP6'),(0x96,'SWAP7'),(0x97,'SWAP8'),(0x98,'SWAP9'),(0x99,'SWAP10'),(0x9a,'SWAP11'),(0x9b,'SWAP12'),(0x9c,'SWAP13'),(0x9d,'SWAP14'),(0x9e,'SWAP15'),(0x9f,'SWAP16'),(0xa0,'LOG0'),(0xa1,'LOG1'),(0xa2,'LOG2'),(0xa3,'LOG3'),(0xa4,'LOG4'),(0xf0,'CREATE'),(0xf1,'CALL'),(0xf2,'CALLCODE'),(0xf3,'RETURN'),(0xf4,'DELEGATECALL'),(0xf5,'CREATE2'),(0xfa,'STATICCALL'),(0xfd,'REVERT'),(0xfe,'INVALID'),(0xff,'SELFDESTRUCT')]
[codex:1185006] for k,v in ops_list:
[codex:1185006] opmap[k]=v
[codex:1185006]
[codex:1185006] ops=[]
[codex:1185006] i=0
[codex:1185006] while i<len(code):
[codex:1185006] op=code[i]
[codex:1185006] name=opmap.get(op, f'OP_{op:02x}')
[codex:1185006] if 0x60<=op<=0x7f:
[codex:1185006] n=op-0x5f
[codex:1185006] data=code[i+1:i+1+n]
[codex:1185006] ops.append((i,name,data))
[codex:1185006] i+=1+n
[codex:1185006] else:
[codex:1185006] ops.append((i,name,None))
[codex:1185006] i+=1
[codex:1185006]
[codex:1185006]
[codex:1185006] def show(start, end):
[codex:1185006] for pc,name,data in ops:
[codex:1185006] if start<=pc<=end:
[codex:1185006] if data is None:
[codex:1185006] print(f\"{pc:04x}: {name}\")
[codex:1185006] else:
[codex:1185006] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:1185006]
[codex:1185006] show(0x0600,0x0665)
[codex:1185006] PY" in /tmp/codex-multi-qmdb0_vy succeeded in 27ms:
[codex:1185006] 0600: DUP1
[codex:1185006] 0601: PUSH2 0x060c
[codex:1185006] 0604: PUSH2 0x0612
[codex:1185006] 0607: SWAP3
[codex:1185006] 0608: PUSH2 0x01c8
[codex:1185006] 060b: JUMP
[codex:1185006] 060c: JUMPDEST
[codex:1185006] 060d: DUP1
[codex:1185006] 060e: PUSH2 0x01a2
[codex:1185006] 0611: JUMP
[codex:1185006] 0612: JUMPDEST
[codex:1185006] 0613: CODESIZE
[codex:1185006] 0614: PUSH2 0x05cb
[codex:1185006] 0617: JUMP
[codex:1185006] 0618: JUMPDEST
[codex:1185006] 0619: PUSH2 0x154d
[codex:1185006] 061c: JUMP
[codex:1185006] 061d: JUMPDEST
[codex:1185006] 061e: PUSH1 0x40
[codex:1185006] 0620: MLOAD
[codex:1185006]
[codex:1185006] thinking
[codex:1185006] **Analyzing upgrade authorization and delegatecall risks**
[codex:1185006]
[codex:1185006] I'm examining an upgrade function that restricts access to the entrypoint or internal calls, which fits an account abstraction model rather than a standard proxy pattern. While this reduces unauthorized upgrades, I'm now focused on detecting any delegatecall or call operations that use user-supplied targets without proper access control, as those could pose serious vulnerabilities if unchecked. To do this, I plan to identify all delegatecall opcodes in the bytecode and verify their authorization checks.
[codex:1185006] exec
[codex:1185006] /bin/bash -lc "python - <<'PY'
[codex:1185006] hexdata=open('/tmp/codex-multi-qmdb0_vy/BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:1185006] hexdata=''.join(c for c in hexdata if c in '0123456789abcdefABCDEF')
[codex:1185006] code=bytes.fromhex(hexdata)
[codex:1185006] # find all DELEGATECALL (0xf4)
[codex:1185006] indices=[i for i,b in enumerate(code) if b==0xf4]
[codex:1185006] print('DELEGATECALL count', len(indices))
[codex:1185006] print(indices[:20])
[codex:1185006] # find CALL (0xf1)
[codex:1185006] indices_call=[i for i,b in enumerate(code) if b==0xf1]
[codex:1185006] print('CALL count', len(indices_call))
[codex:1185006] print(indices_call[:20])
[codex:1185006] # find SELFDESTRUCT (0xff)
[codex:1185006] indices_sd=[i for i,b in enumerate(code) if b==0xff]
[codex:1185006] print('SELFDESTRUCT count', len(indices_sd))
[codex:1185006] print(indices_sd[:20])
[codex:1185006] PY" in /tmp/codex-multi-qmdb0_vy succeeded in 19ms:
[codex:1185006] DELEGATECALL count 4
[codex:1185006] [3635, 4534, 6126, 7572]
[codex:1185006] CALL count 25
[codex:1185006] [238, 1299, 1472, 2002, 2271, 2666, 2744, 2962, 3113, 3468, 3574, 3930, 4107, 4185, 4483, 4652, 4754, 5491, 5595, 5820]
[codex:1185006] SELFDESTRUCT count 186
[codex:1185006] [1155, 1156, 1157, 1158, 1159, 1160, 1353, 1354, 1355, 1356, 1357, 1358, 1367, 1368, 1369, 1370, 1371, 1372, 1481, 1516]
[codex:1185006]
[codex:1185006] thinking
[codex:1185006] **Verifying SELFDESTRUCT occurrences by opcode parsing**
[codex:1185006] exec
[codex:1185006] /bin/bash -lc "python - <<'PY'
[codex:1185006] hexdata=open('/tmp/codex-multi-qmdb0_vy/BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:1185006] hexdata=''.join(c for c in hexdata if c in '0123456789abcdefABCDEF')
[codex:1185006] code=bytes.fromhex(hexdata)
[codex:1185006] # opmap
[codex:1185006] opmap={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1185006] ops_list=[(0x00,'STOP'),(0x01,'ADD'),(0x02,'MUL'),(0x03,'SUB'),(0x04,'DIV'),(0x05,'SDIV'),(0x06,'MOD'),(0x07,'SMOD'),(0x08,'ADDMOD'),(0x09,'MULMOD'),(0x0a,'EXP'),(0x0b,'SIGNEXTEND'),(0x10,'LT'),(0x11,'GT'),(0x12,'SLT'),(0x13,'SGT'),(0x14,'EQ'),(0x15,'ISZERO'),(0x16,'AND'),(0x17,'OR'),(0x18,'XOR'),(0x19,'NOT'),(0x1a,'BYTE'),(0x1b,'SHL'),(0x1c,'SHR'),(0x1d,'SAR'),(0x20,'SHA3'),(0x30,'ADDRESS'),(0x31,'BALANCE'),(0x32,'ORIGIN'),(0x33,'CALLER'),(0x34,'CALLVALUE'),(0x35,'CALLDATALOAD'),(0x36,'CALLDATASIZE'),(0x37,'CALLDATACOPY'),(0x38,'CODESIZE'),(0x39,'CODECOPY'),(0x3a,'GASPRICE'),(0x3b,'EXTCODESIZE'),(0x3c,'EXTCODECOPY'),(0x3d,'RETURNDATASIZE'),(0x3e,'RETURNDATACOPY'),(0x3f,'EXTCODEHASH'),(0x40,'BLOCKHASH'),(0x41,'COINBASE'),(0x42,'TIMESTAMP'),(0x43,'NUMBER'),(0x44,'DIFFICULTY'),(0x45,'GASLIMIT'),(0x46,'CHAINID'),(0x47,'SELFBALANCE'),(0x48,'BASEFEE'),(0x50,'POP'),(0x51,'MLOAD'),(0x52,'MSTORE'),(0x53,'MSTORE8'),(0x54,'SLOAD'),(0x55,'SSTORE'),(0x56,'JUMP'),(0x57,'JUMPI'),(0x58,'PC'),(0x59,'MSIZE'),(0x5a,'GAS'),(0x5b,'JUMPDEST'),(0x80,'DUP1'),(0x81,'DUP2'),(0x82,'DUP3'),(0x83,'DUP4'),(0x84,'DUP5'),(0x85,'DUP6'),(0x86,'DUP7'),(0x87,'DUP8'),(0x88,'DUP9'),(0x89,'DUP10'),(0x8a,'DUP11'),(0x8b,'DUP12'),(0x8c,'DUP13'),(0x8d,'DUP14'),(0x8e,'DUP15'),(0x8f,'DUP16'),(0x90,'SWAP1'),(0x91,'SWAP2'),(0x92,'SWAP3'),(0x93,'SWAP4'),(0x94,'SWAP5'),(0x95,'SWAP6'),(0x96,'SWAP7'),(0x97,'SWAP8'),(0x98,'SWAP9'),(0x99,'SWAP10'),(0x9a,'SWAP11'),(0x9b,'SWAP12'),(0x9c,'SWAP13'),(0x9d,'SWAP14'),(0x9e,'SWAP15'),(0x9f,'SWAP16'),(0xa0,'LOG0'),(0xa1,'LOG1'),(0xa2,'LOG2'),(0xa3,'LOG3'),(0xa4,'LOG4'),(0xf0,'CREATE'),(0xf1,'CALL'),(0xf2,'CALLCODE'),(0xf3,'RETURN'),(0xf4,'DELEGATECALL'),(0xf5,'CREATE2'),(0xfa,'STATICCALL'),(0xfd,'REVERT'),(0xfe,'INVALID'),(0xff,'SELFDESTRUCT')]
[codex:1185006] for k,v in ops_list:
[codex:1185006] opmap[k]=v
[codex:1185006]
[codex:1185006] ops=[]
[codex:1185006] i=0
[codex:1185006] while i<len(code):
[codex:1185006] op=code[i]
[codex:1185006] name=opmap.get(op, f'OP_{op:02x}')
[codex:1185006] if 0x60<=op<=0x7f:
[codex:1185006] n=op-0x5f
[codex:1185006] data=code[i+1:i+1+n]
[codex:1185006] ops.append((i,name,data))
[codex:1185006] i+=1+n
[codex:1185006] else:
[codex:1185006] ops.append((i,name,None))
[codex:1185006] i+=1
[codex:1185006]
[codex:1185006] for name in ['DELEGATECALL','CALL','SELFDESTRUCT']:
[codex:1185006] loc=[pc for pc,n,_ in ops if n==name]
[codex:1185006] print(name, 'count', len(loc))
[codex:1185006] print(loc)
[codex:1185006] PY" in /tmp/codex-multi-qmdb0_vy succeeded in 28ms:
[codex:1185006] DELEGATECALL count 2
[codex:1185006] [3635, 4534]
[codex:1185006] CALL count 10
[codex:1185006] [1472, 2744, 3113, 4107, 4754, 5820, 5885, 6001, 6917, 8034]
[codex:1185006] SELFDESTRUCT count 0
[codex:1185006] []
[codex:1185006]
[codex:1185006] thinking
[codex:1185006] **Inspecting DELEGATECALL instructions**
[codex:1185006] exec
[codex:1185006] /bin/bash -lc "python - <<'PY'
[codex:1185006] hexdata=open('/tmp/codex-multi-qmdb0_vy/BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:1185006] hexdata=''.join(c for c in hexdata if c in '0123456789abcdefABCDEF')
[codex:1185006] code=bytes.fromhex(hexdata)
[codex:1185006] # opmap
[codex:1185006] opmap={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1185006] ops_list=[(0x00,'STOP'),(0x01,'ADD'),(0x02,'MUL'),(0x03,'SUB'),(0x04,'DIV'),(0x05,'SDIV'),(0x06,'MOD'),(0x07,'SMOD'),(0x08,'ADDMOD'),(0x09,'MULMOD'),(0x0a,'EXP'),(0x0b,'SIGNEXTEND'),(0x10,'LT'),(0x11,'GT'),(0x12,'SLT'),(0x13,'SGT'),(0x14,'EQ'),(0x15,'ISZERO'),(0x16,'AND'),(0x17,'OR'),(0x18,'XOR'),(0x19,'NOT'),(0x1a,'BYTE'),(0x1b,'SHL'),(0x1c,'SHR'),(0x1d,'SAR'),(0x20,'SHA3'),(0x30,'ADDRESS'),(0x31,'BALANCE'),(0x32,'ORIGIN'),(0x33,'CALLER'),(0x34,'CALLVALUE'),(0x35,'CALLDATALOAD'),(0x36,'CALLDATASIZE'),(0x37,'CALLDATACOPY'),(0x38,'CODESIZE'),(0x39,'CODECOPY'),(0x3a,'GASPRICE'),(0x3b,'EXTCODESIZE'),(0x3c,'EXTCODECOPY'),(0x3d,'RETURNDATASIZE'),(0x3e,'RETURNDATACOPY'),(0x3f,'EXTCODEHASH'),(0x40,'BLOCKHASH'),(0x41,'COINBASE'),(0x42,'TIMESTAMP'),(0x43,'NUMBER'),(0x44,'DIFFICULTY'),(0x45,'GASLIMIT'),(0x46,'CHAINID'),(0x47,'SELFBALANCE'),(0x48,'BASEFEE'),(0x50,'POP'),(0x51,'MLOAD'),(0x52,'MSTORE'),(0x53,'MSTORE8'),(0x54,'SLOAD'),(0x55,'SSTORE'),(0x56,'JUMP'),(0x57,'JUMPI'),(0x58,'PC'),(0x59,'MSIZE'),(0x5a,'GAS'),(0x5b,'JUMPDEST'),(0x80,'DUP1'),(0x81,'DUP2'),(0x82,'DUP3'),(0x83,'DUP4'),(0x84,'DUP5'),(0x85,'DUP6'),(0x86,'DUP7'),(0x87,'DUP8'),(0x88,'DUP9'),(0x89,'DUP10'),(0x8a,'DUP11'),(0x8b,'DUP12'),(0x8c,'DUP13'),(0x8d,'DUP14'),(0x8e,'DUP15'),(0x8f,'DUP16'),(0x90,'SWAP1'),(0x91,'SWAP2'),(0x92,'SWAP3'),(0x93,'SWAP4'),(0x94,'SWAP5'),(0x95,'SWAP6'),(0x96,'SWAP7'),(0x97,'SWAP8'),(0x98,'SWAP9'),(0x99,'SWAP10'),(0x9a,'SWAP11'),(0x9b,'SWAP12'),(0x9c,'SWAP13'),(0x9d,'SWAP14'),(0x9e,'SWAP15'),(0x9f,'SWAP16'),(0xa0,'LOG0'),(0xa1,'LOG1'),(0xa2,'LOG2'),(0xa3,'LOG3'),(0xa4,'LOG4'),(0xf0,'CREATE'),(0xf1,'CALL'),(0xf2,'CALLCODE'),(0xf3,'RETURN'),(0xf4,'DELEGATECALL'),(0xf5,'CREATE2'),(0xfa,'STATICCALL'),(0xfd,'REVERT'),(0xfe,'INVALID'),(0xff,'SELFDESTRUCT')]
[codex:1185006] for k,v in ops_list:
[codex:1185006] opmap[k]=v
[codex:1185006]
[codex:1185006] ops=[]
[codex:1185006] i=0
[codex:1185006] while i<len(code):
[codex:1185006] op=code[i]
[codex:1185006] name=opmap.get(op, f'OP_{op:02x}')
[codex:1185006] if 0x60<=op<=0x7f:
[codex:1185006] n=op-0x5f
[codex:1185006] data=code[i+1:i+1+n]
[codex:1185006] ops.append((i,name,data))
[codex:1185006] i+=1+n
[codex:1185006] else:
[codex:1185006] ops.append((i,name,None))
[codex:1185006] i+=1
[codex:1185006]
[codex:1185006]
[codex:1185006] def show(center, radius=20):
[codex:1185006] start=center-radius
[codex:1185006] end=center+radius
[codex:1185006] for pc,name,data in ops:
[codex:1185006] if start<=pc<=end:
[codex:1185006] if data is None:
[codex:1185006] print(f\"{pc:04x}: {name}\")
[codex:1185006] else:
[codex:1185006] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:1185006]
[codex:1185006] print('--- around 0x0e33 (3635)')
[codex:1185006] show(0x0e33, 40)
[codex:1185006] print('--- around 0x11b6 (4534)')
[codex:1185006] show(0x11b6, 40)
[codex:1185006] PY" in /tmp/codex-multi-qmdb0_vy succeeded in 29ms:
[codex:1185006] --- around 0x0e33 (3635)
[codex:1185006] 0e0b: PUSH1 0x01
[codex:1185006] 0e0d: PUSH1 0xa0
[codex:1185006] 0e0f: SHL
[codex:1185006] 0e10: SUB
[codex:1185006] 0e11: AND
[codex:1185006] 0e12: EQ
[codex:1185006] 0e13: ISZERO
[codex:1185006] 0e14: DUP1
[codex:1185006] 0e15: PUSH2 0x0e51
[codex:1185006] 0e18: JUMPI
[codex:1185006] 0e19: JUMPDEST
[codex:1185006] 0e1a: DUP1
[codex:1185006] 0e1b: PUSH2 0x0e40
[codex:1185006] 0e1e: JUMPI
[codex:1185006] 0e1f: JUMPDEST
[codex:1185006] 0e20: PUSH2 0x061d
[codex:1185006] 0e23: JUMPI
[codex:1185006] 0e24: PUSH1 0x00
[codex:1185006] 0e26: DUP3
[codex:1185006]
[codex:1185006] thinking
[codex:1185006] **Analyzing delegatecall usage and access control**
[codex:1185006] exec
[codex:1185006] /bin/bash -lc "python - <<'PY'
[codex:1185006] hexdata=open('/tmp/codex-multi-qmdb0_vy/BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:1185006] hexdata=''.join(c for c in hexdata if c in '0123456789abcdefABCDEF')
[codex:1185006] code=bytes.fromhex(hexdata)
[codex:1185006] # opmap
[codex:1185006] opmap={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1185006] ops_list=[(0x00,'STOP'),(0x01,'ADD'),(0x02,'MUL'),(0x03,'SUB'),(0x04,'DIV'),(0x05,'SDIV'),(0x06,'MOD'),(0x07,'SMOD'),(0x08,'ADDMOD'),(0x09,'MULMOD'),(0x0a,'EXP'),(0x0b,'SIGNEXTEND'),(0x10,'LT'),(0x11,'GT'),(0x12,'SLT'),(0x13,'SGT'),(0x14,'EQ'),(0x15,'ISZERO'),(0x16,'AND'),(0x17,'OR'),(0x18,'XOR'),(0x19,'NOT'),(0x1a,'BYTE'),(0x1b,'SHL'),(0x1c,'SHR'),(0x1d,'SAR'),(0x20,'SHA3'),(0x30,'ADDRESS'),(0x31,'BALANCE'),(0x32,'ORIGIN'),(0x33,'CALLER'),(0x34,'CALLVALUE'),(0x35,'CALLDATALOAD'),(0x36,'CALLDATASIZE'),(0x37,'CALLDATACOPY'),(0x38,'CODESIZE'),(0x39,'CODECOPY'),(0x3a,'GASPRICE'),(0x3b,'EXTCODESIZE'),(0x3c,'EXTCODECOPY'),(0x3d,'RETURNDATASIZE'),(0x3e,'RETURNDATACOPY'),(0x3f,'EXTCODEHASH'),(0x40,'BLOCKHASH'),(0x41,'COINBASE'),(0x42,'TIMESTAMP'),(0x43,'NUMBER'),(0x44,'DIFFICULTY'),(0x45,'GASLIMIT'),(0x46,'CHAINID'),(0x47,'SELFBALANCE'),(0x48,'BASEFEE'),(0x50,'POP'),(0x51,'MLOAD'),(0x52,'MSTORE'),(0x53,'MSTORE8'),(0x54,'SLOAD'),(0x55,'SSTORE'),(0x56,'JUMP'),(0x57,'JUMPI'),(0x58,'PC'),(0x59,'MSIZE'),(0x5a,'GAS'),(0x5b,'JUMPDEST'),(0x80,'DUP1'),(0x81,'DUP2'),(0x82,'DUP3'),(0x83,'DUP4'),(0x84,'DUP5'),(0x85,'DUP6'),(0x86,'DUP7'),(0x87,'DUP8'),(0x88,'DUP9'),(0x89,'DUP10'),(0x8a,'DUP11'),(0x8b,'DUP12'),(0x8c,'DUP13'),(0x8d,'DUP14'),(0x8e,'DUP15'),(0x8f,'DUP16'),(0x90,'SWAP1'),(0x91,'SWAP2'),(0x92,'SWAP3'),(0x93,'SWAP4'),(0x94,'SWAP5'),(0x95,'SWAP6'),(0x96,'SWAP7'),(0x97,'SWAP8'),(0x98,'SWAP9'),(0x99,'SWAP10'),(0x9a,'SWAP11'),(0x9b,'SWAP12'),(0x9c,'SWAP13'),(0x9d,'SWAP14'),(0x9e,'SWAP15'),(0x9f,'SWAP16'),(0xa0,'LOG0'),(0xa1,'LOG1'),(0xa2,'LOG2'),(0xa3,'LOG3'),(0xa4,'LOG4'),(0xf0,'CREATE'),(0xf1,'CALL'),(0xf2,'CALLCODE'),(0xf3,'RETURN'),(0xf4,'DELEGATECALL'),(0xf5,'CREATE2'),(0xfa,'STATICCALL'),(0xfd,'REVERT'),(0xfe,'INVALID'),(0xff,'SELFDESTRUCT')]
[codex:1185006] for k,v in ops_list:
[codex:1185006] opmap[k]=v
[codex:1185006]
[codex:1185006] ops=[]
[codex:1185006] i=0
[codex:1185006] while i<len(code):
[codex:1185006] op=code[i]
[codex:1185006] name=opmap.get(op, f'OP_{op:02x}')
[codex:1185006] if 0x60<=op<=0x7f:
[codex:1185006] n=op-0x5f
[codex:1185006] data=code[i+1:i+1+n]
[codex:1185006] ops.append((i,name,data))
[codex:1185006] i+=1+n
[codex:1185006] else:
[codex:1185006] ops.append((i,name,None))
[codex:1185006] i+=1
[codex:1185006]
[codex:1185006]
[codex:1185006] def show(start, end):
[codex:1185006] for pc,name,data in ops:
[codex:1185006] if start<=pc<=end:
[codex:1185006] if data is None:
[codex:1185006] print(f\"{pc:04x}: {name}\")
[codex:1185006] else:
[codex:1185006] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:1185006]
[codex:1185006] show(0x0d80,0x0e70)
[codex:1185006] PY" in /tmp/codex-multi-qmdb0_vy succeeded in 32ms:
[codex:1185006] 0d9f: PUSH1 0x01
[codex:1185006] 0da1: PUSH1 0x01
[codex:1185006] 0da3: PUSH1 0xa0
[codex:1185006] 0da5: SHL
[codex:1185006] 0da6: SUB
[codex:1185006] 0da7: AND
[codex:1185006] 0da8: DUP2
[codex:1185006] 0da9: MSTORE
[codex:1185006] 0daa: PUSH1 0x20
[codex:1185006] 0dac: SWAP1
[codex:1185006] 0dad: RETURN
[codex:1185006] 0dae: JUMPDEST
[codex:1185006] 0daf: PUSH1 0x40
[codex:1185006] 0db1: CALLDATASIZE
[codex:1185006] 0db2: PUSH1 0x03
[codex:1185006] 0db4: NOT
[codex:1185006] 0db5: ADD
[codex:1185006] 0db6: SLT
[codex:1185006] 0db7: PUSH2 0x01ad
[codex:1185006] 0dba: JUMPI
[codex:1185006]
[codex:1185006] thinking
[codex:1185006] **Analyzing caller authorization and potential vulnerabilities**
[codex:1185006] exec
[codex:1185006] /bin/bash -lc "python - <<'PY'
[codex:1185006] hexdata=open('/tmp/codex-multi-qmdb0_vy/BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:1185006] hexdata=''.join(c for c in hexdata if c in '0123456789abcdefABCDEF')
[codex:1185006] code=bytes.fromhex(hexdata)
[codex:1185006] # opmap
[codex:1185006] opmap={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1185006] ops_list=[(0x00,'STOP'),(0x01,'ADD'),(0x02,'MUL'),(0x03,'SUB'),(0x04,'DIV'),(0x05,'SDIV'),(0x06,'MOD'),(0x07,'SMOD'),(0x08,'ADDMOD'),(0x09,'MULMOD'),(0x0a,'EXP'),(0x0b,'SIGNEXTEND'),(0x10,'LT'),(0x11,'GT'),(0x12,'SLT'),(0x13,'SGT'),(0x14,'EQ'),(0x15,'ISZERO'),(0x16,'AND'),(0x17,'OR'),(0x18,'XOR'),(0x19,'NOT'),(0x1a,'BYTE'),(0x1b,'SHL'),(0x1c,'SHR'),(0x1d,'SAR'),(0x20,'SHA3'),(0x30,'ADDRESS'),(0x31,'BALANCE'),(0x32,'ORIGIN'),(0x33,'CALLER'),(0x34,'CALLVALUE'),(0x35,'CALLDATALOAD'),(0x36,'CALLDATASIZE'),(0x37,'CALLDATACOPY'),(0x38,'CODESIZE'),(0x39,'CODECOPY'),(0x3a,'GASPRICE'),(0x3b,'EXTCODESIZE'),(0x3c,'EXTCODECOPY'),(0x3d,'RETURNDATASIZE'),(0x3e,'RETURNDATACOPY'),(0x3f,'EXTCODEHASH'),(0x40,'BLOCKHASH'),(0x41,'COINBASE'),(0x42,'TIMESTAMP'),(0x43,'NUMBER'),(0x44,'DIFFICULTY'),(0x45,'GASLIMIT'),(0x46,'CHAINID'),(0x47,'SELFBALANCE'),(0x48,'BASEFEE'),(0x50,'POP'),(0x51,'MLOAD'),(0x52,'MSTORE'),(0x53,'MSTORE8'),(0x54,'SLOAD'),(0x55,'SSTORE'),(0x56,'JUMP'),(0x57,'JUMPI'),(0x58,'PC'),(0x59,'MSIZE'),(0x5a,'GAS'),(0x5b,'JUMPDEST'),(0x80,'DUP1'),(0x81,'DUP2'),(0x82,'DUP3'),(0x83,'DUP4'),(0x84,'DUP5'),(0x85,'DUP6'),(0x86,'DUP7'),(0x87,'DUP8'),(0x88,'DUP9'),(0x89,'DUP10'),(0x8a,'DUP11'),(0x8b,'DUP12'),(0x8c,'DUP13'),(0x8d,'DUP14'),(0x8e,'DUP15'),(0x8f,'DUP16'),(0x90,'SWAP1'),(0x91,'SWAP2'),(0x92,'SWAP3'),(0x93,'SWAP4'),(0x94,'SWAP5'),(0x95,'SWAP6'),(0x96,'SWAP7'),(0x97,'SWAP8'),(0x98,'SWAP9'),(0x99,'SWAP10'),(0x9a,'SWAP11'),(0x9b,'SWAP12'),(0x9c,'SWAP13'),(0x9d,'SWAP14'),(0x9e,'SWAP15'),(0x9f,'SWAP16'),(0xa0,'LOG0'),(0xa1,'LOG1'),(0xa2,'LOG2'),(0xa3,'LOG3'),(0xa4,'LOG4'),(0xf0,'CREATE'),(0xf1,'CALL'),(0xf2,'CALLCODE'),(0xf3,'RETURN'),(0xf4,'DELEGATECALL'),(0xf5,'CREATE2'),(0xfa,'STATICCALL'),(0xfd,'REVERT'),(0xfe,'INVALID'),(0xff,'SELFDESTRUCT')]
[codex:1185006] for k,v in ops_list:
[codex:1185006] opmap[k]=v
[codex:1185006]
[codex:1185006] ops=[]
[codex:1185006] i=0
[codex:1185006] while i<len(code):
[codex:1185006] op=code[i]
[codex:1185006] name=opmap.get(op, f'OP_{op:02x}')
[codex:1185006] if 0x60<=op<=0x7f:
[codex:1185006] n=op-0x5f
[codex:1185006] data=code[i+1:i+1+n]
[codex:1185006] ops.append((i,name,data))
[codex:1185006] i+=1+n
[codex:1185006] else:
[codex:1185006] ops.append((i,name,None))
[codex:1185006] i+=1
[codex:1185006]
[codex:1185006] sstore=[pc for pc,n,_ in ops if n=='SSTORE']
[codex:1185006] print('SSTORE count', len(sstore))
[codex:1185006] print(sstore)
[codex:1185006] PY" in /tmp/codex-multi-qmdb0_vy succeeded in 23ms:
[codex:1185006] SSTORE count 5
[codex:1185006] [2069, 4280, 6217, 6257, 8387]
[codex:1185006]
[codex:1185006] thinking
[codex:1185006] **Examining SSTORE instructions for protection**
[codex:1185006] exec
[codex:1185006] /bin/bash -lc "python - <<'PY'
[codex:1185006] hexdata=open('/tmp/codex-multi-qmdb0_vy/BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:1185006] hexdata=''.join(c for c in hexdata if c in '0123456789abcdefABCDEF')
[codex:1185006] code=bytes.fromhex(hexdata)
[codex:1185006] # opmap
[codex:1185006] opmap={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1185006] ops_list=[(0x00,'STOP'),(0x01,'ADD'),(0x02,'MUL'),(0x03,'SUB'),(0x04,'DIV'),(0x05,'SDIV'),(0x06,'MOD'),(0x07,'SMOD'),(0x08,'ADDMOD'),(0x09,'MULMOD'),(0x0a,'EXP'),(0x0b,'SIGNEXTEND'),(0x10,'LT'),(0x11,'GT'),(0x12,'SLT'),(0x13,'SGT'),(0x14,'EQ'),(0x15,'ISZERO'),(0x16,'AND'),(0x17,'OR'),(0x18,'XOR'),(0x19,'NOT'),(0x1a,'BYTE'),(0x1b,'SHL'),(0x1c,'SHR'),(0x1d,'SAR'),(0x20,'SHA3'),(0x30,'ADDRESS'),(0x31,'BALANCE'),(0x32,'ORIGIN'),(0x33,'CALLER'),(0x34,'CALLVALUE'),(0x35,'CALLDATALOAD'),(0x36,'CALLDATASIZE'),(0x37,'CALLDATACOPY'),(0x38,'CODESIZE'),(0x39,'CODECOPY'),(0x3a,'GASPRICE'),(0x3b,'EXTCODESIZE'),(0x3c,'EXTCODECOPY'),(0x3d,'RETURNDATASIZE'),(0x3e,'RETURNDATACOPY'),(0x3f,'EXTCODEHASH'),(0x40,'BLOCKHASH'),(0x41,'COINBASE'),(0x42,'TIMESTAMP'),(0x43,'NUMBER'),(0x44,'DIFFICULTY'),(0x45,'GASLIMIT'),(0x46,'CHAINID'),(0x47,'SELFBALANCE'),(0x48,'BASEFEE'),(0x50,'POP'),(0x51,'MLOAD'),(0x52,'MSTORE'),(0x53,'MSTORE8'),(0x54,'SLOAD'),(0x55,'SSTORE'),(0x56,'JUMP'),(0x57,'JUMPI'),(0x58,'PC'),(0x59,'MSIZE'),(0x5a,'GAS'),(0x5b,'JUMPDEST'),(0x80,'DUP1'),(0x81,'DUP2'),(0x82,'DUP3'),(0x83,'DUP4'),(0x84,'DUP5'),(0x85,'DUP6'),(0x86,'DUP7'),(0x87,'DUP8'),(0x88,'DUP9'),(0x89,'DUP10'),(0x8a,'DUP11'),(0x8b,'DUP12'),(0x8c,'DUP13'),(0x8d,'DUP14'),(0x8e,'DUP15'),(0x8f,'DUP16'),(0x90,'SWAP1'),(0x91,'SWAP2'),(0x92,'SWAP3'),(0x93,'SWAP4'),(0x94,'SWAP5'),(0x95,'SWAP6'),(0x96,'SWAP7'),(0x97,'SWAP8'),(0x98,'SWAP9'),(0x99,'SWAP10'),(0x9a,'SWAP11'),(0x9b,'SWAP12'),(0x9c,'SWAP13'),(0x9d,'SWAP14'),(0x9e,'SWAP15'),(0x9f,'SWAP16'),(0xa0,'LOG0'),(0xa1,'LOG1'),(0xa2,'LOG2'),(0xa3,'LOG3'),(0xa4,'LOG4'),(0xf0,'CREATE'),(0xf1,'CALL'),(0xf2,'CALLCODE'),(0xf3,'RETURN'),(0xf4,'DELEGATECALL'),(0xf5,'CREATE2'),(0xfa,'STATICCALL'),(0xfd,'REVERT'),(0xfe,'INVALID'),(0xff,'SELFDESTRUCT')]
[codex:1185006] for k,v in ops_list:
[codex:1185006] opmap[k]=v
[codex:1185006]
[codex:1185006] ops=[]
[codex:1185006] i=0
[codex:1185006] while i<len(code):
[codex:1185006] op=code[i]
[codex:1185006] name=opmap.get(op, f'OP_{op:02x}')
[codex:1185006] if 0x60<=op<=0x7f:
[codex:1185006] n=op-0x5f
[codex:1185006] data=code[i+1:i+1+n]
[codex:1185006] ops.append((i,name,data))
[codex:1185006] i+=1+n
[codex:1185006] else:
[codex:1185006] ops.append((i,name,None))
[codex:1185006] i+=1
[codex:1185006]
[codex:1185006]
[codex:1185006] def show(center, radius=40):
[codex:1185006] start=center-radius
[codex:1185006] end=center+radius
[codex:1185006] for pc,name,data in ops:
[codex:1185006] if start<=pc<=end:
[codex:1185006] if data is None:
[codex:1185006] print(f\"{pc:04x}: {name}\")
[codex:1185006] else:
[codex:1185006] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:1185006]
[codex:1185006] for s in [0x0815,0x10b8,0x1849,0x1861,0x20c3]:
[codex:1185006] print('--- around', hex(s))
[codex:1185006] show(s, 30)
[codex:1185006] PY" in /tmp/codex-multi-qmdb0_vy succeeded in 29ms:
[codex:1185006] --- around 0x815
[codex:1185006] 0815: SSTORE
[codex:1185006] 0816: AND
[codex:1185006] 0817: PUSH32 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b
[codex:1185006] --- around 0x10b8
[codex:1185006] 109e: TIMESTAMP
[codex:1185006] 109f: PUSH1 0x20
[codex:1185006] 10a1: SHL
[codex:1185006] 10a2: AND
[codex:1185006] 10a3: SWAP2
[codex:1185006] 10a4: PUSH1 0xe0
[codex:1185006] 10a6: SHR
[codex:1185006] 10a7: SWAP1
[codex:1185006] 10a8: PUSH10 0xffffffffffffffffffff
[codex:1185006] 10b3: NOT
[codex:1185006] 10b4: AND
[codex:1185006] 10b5: OR
[codex:1185006] 10b6: OR
[codex:1185006] 10b7: SWAP1
[codex:1185006] 10b8: SSTORE
[codex:1185006]
[codex:1185006] thinking
[codex:1185006] **Analyzing access control near storage writes**
[codex:1185006] exec
[codex:1185006] /bin/bash -lc "python - <<'PY'
[codex:1185006] hexdata=open('/tmp/codex-multi-qmdb0_vy/BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:1185006] hexdata=''.join(c for c in hexdata if c in '0123456789abcdefABCDEF')
[codex:1185006] code=bytes.fromhex(hexdata)
[codex:1185006] # opmap
[codex:1185006] opmap={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1185006] ops_list=[(0x00,'STOP'),(0x01,'ADD'),(0x02,'MUL'),(0x03,'SUB'),(0x04,'DIV'),(0x05,'SDIV'),(0x06,'MOD'),(0x07,'SMOD'),(0x08,'ADDMOD'),(0x09,'MULMOD'),(0x0a,'EXP'),(0x0b,'SIGNEXTEND'),(0x10,'LT'),(0x11,'GT'),(0x12,'SLT'),(0x13,'SGT'),(0x14,'EQ'),(0x15,'ISZERO'),(0x16,'AND'),(0x17,'OR'),(0x18,'XOR'),(0x19,'NOT'),(0x1a,'BYTE'),(0x1b,'SHL'),(0x1c,'SHR'),(0x1d,'SAR'),(0x20,'SHA3'),(0x30,'ADDRESS'),(0x31,'BALANCE'),(0x32,'ORIGIN'),(0x33,'CALLER'),(0x34,'CALLVALUE'),(0x35,'CALLDATALOAD'),(0x36,'CALLDATASIZE'),(0x37,'CALLDATACOPY'),(0x38,'CODESIZE'),(0x39,'CODECOPY'),(0x3a,'GASPRICE'),(0x3b,'EXTCODESIZE'),(0x3c,'EXTCODECOPY'),(0x3d,'RETURNDATASIZE'),(0x3e,'RETURNDATACOPY'),(0x3f,'EXTCODEHASH'),(0x40,'BLOCKHASH'),(0x41,'COINBASE'),(0x42,'TIMESTAMP'),(0x43,'NUMBER'),(0x44,'DIFFICULTY'),(0x45,'GASLIMIT'),(0x46,'CHAINID'),(0x47,'SELFBALANCE'),(0x48,'BASEFEE'),(0x50,'POP'),(0x51,'MLOAD'),(0x52,'MSTORE'),(0x53,'MSTORE8'),(0x54,'SLOAD'),(0x55,'SSTORE'),(0x56,'JUMP'),(0x57,'JUMPI'),(0x58,'PC'),(0x59,'MSIZE'),(0x5a,'GAS'),(0x5b,'JUMPDEST'),(0x80,'DUP1'),(0x81,'DUP2'),(0x82,'DUP3'),(0x83,'DUP4'),(0x84,'DUP5'),(0x85,'DUP6'),(0x86,'DUP7'),(0x87,'DUP8'),(0x88,'DUP9'),(0x89,'DUP10'),(0x8a,'DUP11'),(0x8b,'DUP12'),(0x8c,'DUP13'),(0x8d,'DUP14'),(0x8e,'DUP15'),(0x8f,'DUP16'),(0x90,'SWAP1'),(0x91,'SWAP2'),(0x92,'SWAP3'),(0x93,'SWAP4'),(0x94,'SWAP5'),(0x95,'SWAP6'),(0x96,'SWAP7'),(0x97,'SWAP8'),(0x98,'SWAP9'),(0x99,'SWAP10'),(0x9a,'SWAP11'),(0x9b,'SWAP12'),(0x9c,'SWAP13'),(0x9d,'SWAP14'),(0x9e,'SWAP15'),(0x9f,'SWAP16'),(0xa0,'LOG0'),(0xa1,'LOG1'),(0xa2,'LOG2'),(0xa3,'LOG3'),(0xa4,'LOG4'),(0xf0,'CREATE'),(0xf1,'CALL'),(0xf2,'CALLCODE'),(0xf3,'RETURN'),(0xf4,'DELEGATECALL'),(0xf5,'CREATE2'),(0xfa,'STATICCALL'),(0xfd,'REVERT'),(0xfe,'INVALID'),(0xff,'SELFDESTRUCT')]
[codex:1185006] for k,v in ops_list:
[codex:1185006] opmap[k]=v
[codex:1185006]
[codex:1185006] ops=[]
[codex:1185006] i=0
[codex:1185006] while i<len(code):
[codex:1185006] op=code[i]
[codex:1185006] name=opmap.get(op, f'OP_{op:02x}')
[codex:1185006] if 0x60<=op<=0x7f:
[codex:1185006] n=op-0x5f
[codex:1185006] data=code[i+1:i+1+n]
[codex:1185006] ops.append((i,name,data))
[codex:1185006] i+=1+n
[codex:1185006] else:
[codex:1185006] ops.append((i,name,None))
[codex:1185006] i+=1
[codex:1185006]
[codex:1185006]
[codex:1185006] def show(start, end):
[codex:1185006] for pc,name,data in ops:
[codex:1185006] if start<=pc<=end:
[codex:1185006] if data is None:
[codex:1185006] print(f\"{pc:04x}: {name}\")
[codex:1185006] else:
[codex:1185006] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:1185006]
[codex:1185006] show(0x1070,0x10f0)
[codex:1185006] PY" in /tmp/codex-multi-qmdb0_vy succeeded in 28ms:
[codex:1185006] 1070: PUSH1 0xa0
[codex:1185006] 1072: SHL
[codex:1185006] 1073: SUB
[codex:1185006] 1074: AND
[codex:1185006] 1075: EQ
[codex:1185006] 1076: ISZERO
[codex:1185006] 1077: DUP1
[codex:1185006] 1078: PUSH2 0x10bd
[codex:1185006] 107b: JUMPI
[codex:1185006] 107c: JUMPDEST
[codex:1185006] 107d: PUSH2 0x061d
[codex:1185006] 1080: JUMPI
[codex:1185006] 1081: PUSH1 0x00
[codex:1185006] 1083: DUP1
[codex:1185006] 1084: MLOAD
[codex:1185006] 1085: PUSH1 0x20
[codex:1185006] 1087: PUSH2 0x2171
[codex:1185006] 108a: DUP4
[codex:1185006] 108b: CODECOPY
[codex:1185006] 108c: DUP2
[codex:1185006]
[codex:1185006] thinking
[codex:1185006] **Analyzing runtime bytecode security**
[codex:1185006]
[codex:1185006] I'm piecing together how the contract's bytecode checks caller permissions around critical storage updates and delegatecalls, seeing that privileged functions seem guarded by entrypoint or self checks. It looks like a proxy or proxy-like pattern with delegatecall in fallback, but without obvious missing access controls from the bytecode alone. Since no concrete issues stand out, I'll prepare a JSON output indicating no findings with a summary noting the limited visibility from disassembly alone.
[codex:1185006] codex
[codex:1185006] {"no_findings":true,"summary":"Reviewed the runtime bytecode bundle; no concrete, explainable vulnerabilities could be confirmed from bytecode/disassembly patterns alone.","findings":[]}
[codex:1185006] tokens used
[codex:1185006] 130,429
[codex:1185006] {"no_findings":true,"summary":"Reviewed the runtime bytecode bundle; no concrete, explainable vulnerabilities could be confirmed from bytecode/disassembly patterns alone.","findings":[]}
{
"codex": {
"ran_at": "2025-12-29T06:46:56.389280+00:00",
"returncode": 0
},
"summary": "Reviewed the runtime bytecode bundle; no concrete, explainable vulnerabilities could be confirmed from bytecode/disassembly patterns alone.",
"raw_final": {
"summary": "Reviewed the runtime bytecode bundle; no concrete, explainable vulnerabilities could be confirmed from bytecode/disassembly patterns alone.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: ISZERO 0000000a: PUSH2 0x001d 0000000d: JUMPI 0000000e: JUMPDEST 0000000f: CALLDATASIZE 00000010: PUSH2 0x1159 00000013: JUMPI 00000014: PUSH2 0x001b 00000017: PUSH2 0x2047 0000001a: JUMP 0000001b: JUMPDEST 0000001c: STOP 0000001d: JUMPDEST 0000001e: PUSH1 0x00 00000020: CALLDATALOAD 00000021: PUSH1 0xe0 00000023: SHR 00000024: DUP1 00000025: PUSH4 0x06fdde03 0000002a: EQ 0000002b: PUSH2 0x019d 0000002e: JUMPI 0000002f: DUP1 00000030: PUSH4 0x0b3dc354 00000035: EQ 00000036: PUSH2 0x0198 00000039: JUMPI 0000003a: DUP1 0000003b: PUSH4 0x150b7a02 00000040: EQ 00000041: PUSH2 0x0193 00000044: JUMPI 00000045: DUP1 00000046: PUSH4 0x1626ba7e 0000004b: EQ 0000004c: PUSH2 0x018e 0000004f: JUMPI 00000050: DUP1 00000051: PUSH4 0x29f8b174 00000056: EQ 00000057: PUSH2 0x0189 0000005a: JUMPI 0000005b: DUP1 0000005c: PUSH4 0x333daf92 00000061: EQ 00000062: PUSH2 0x0184 00000065: JUMPI 00000066: DUP1 00000067: PUSH4 0x34fcd5be 0000006c: EQ 0000006d: PUSH2 0x017f 00000070: JUMPI 00000071: DUP1 00000072: PUSH4 0x3659cfe6 00000077: EQ 00000078: PUSH2 0x017a 0000007b: JUMPI 0000007c: DUP1 0000007d: PUSH4 0x3a871cdd 00000082: EQ 00000083: PUSH2 0x0175 00000086: JUMPI 00000087: DUP1 00000088: PUSH4 0x3e1b0812 0000008d: EQ 0000008e: PUSH2 0x0170 00000091: JUMPI 00000092: DUP1 00000093: PUSH4 0x51166ba0 00000098: EQ 00000099: PUSH2 0x016b 0000009c: JUMPI 0000009d: DUP1 0000009e: PUSH4 0x51945447 000000a3: EQ 000000a4: PUSH2 0x0166 000000a7: JUMPI 000000a8: DUP1 000000a9: PUSH4 0x54fd4d50 000000ae: EQ 000000af: PUSH2 0x0161 000000b2: JUMPI 000000b3: DUP1 000000b4: PUSH4 0x55b14f50 000000b9: EQ 000000ba: PUSH2 0x015c 000000bd: JUMPI 000000be: DUP1 000000bf: PUSH4 0x57b75047 000000c4: EQ 000000c5: PUSH2 0x0157 000000c8: JUMPI 000000c9: DUP1 000000ca: PUSH4 0x84b0196e 000000cf: EQ 000000d0: PUSH2 0x0152 000000d3: JUMPI 000000d4: DUP1 000000d5: PUSH4 0x88e7fd06 000000da: EQ 000000db: PUSH2 0x014d 000000de: JUMPI 000000df: DUP1 000000e0: PUSH4 0xb0d691fe 000000e5: EQ 000000e6: PUSH2 0x0148 000000e9: JUMPI 000000ea: DUP1 000000eb: PUSH4 0xb68df16d 000000f0: EQ 000000f1: PUSH2 0x0143 000000f4: JUMPI 000000f5: DUP1 000000f6: PUSH4 0xbc197c81 000000fb: EQ 000000fc: PUSH2 0x013e 000000ff: JUMPI 00000100: DUP1 00000101: PUSH4 0xd087d288 00000106: EQ 00000107: PUSH2 0x0139 0000010a: JUMPI 0000010b: DUP1 0000010c: PUSH4 0xd1f57894 00000111: EQ 00000112: PUSH2 0x0134 00000115: JUMPI 00000116: DUP1 00000117: PUSH4 0xd5416221 0000011c: EQ 0000011d: PUSH2 0x012f 00000120: JUMPI 00000121: PUSH4 0xf23a6e61 00000126: SUB 00000127: PUSH2 0x000e 0000012a: JUMPI 0000012b: PUSH2 0x10c7 0000012e: JUMP 0000012f: JUMPDEST 00000130: PUSH2 0x1035 00000133: JUMP 00000134: JUMPDEST 00000135: PUSH2 0x0f99 00000138: JUMP 00000139: JUMPDEST 0000013a: PUSH2 0x0f1a 0000013d: JUMP 0000013e: JUMPDEST 0000013f: PUSH2 0x0e8b 00000142: JUMP 00000143: JUMPDEST 00000144: PUSH2 0x0dae 00000147: JUMP 00000148: JUMPDEST 00000149: PUSH2 0x0d69 0000014c: JUMP 0000014d: JUMPDEST 0000014e: PUSH2 0x0d34 00000151: JUMP 00000152: JUMPDEST 00000153: PUSH2 0x0c8c 00000156: JUMP 00000157: JUMPDEST 00000158: PUSH2 0x0c55 0000015b: JUMP 0000015c: JUMPDEST 0000015d: PUSH2 0x0b6f 00000160: JUMP 00000161: JUMPDEST 00000162: PUSH2 0x0b1b 00000165: JUMP 00000166: JUMPDEST 00000167: PUSH2 0x0a16 0000016a: JUMP 0000016b: JUMPDEST 0000016c: PUSH2 0x094d 0000016f: JUMP 00000170: JUMPDEST 00000171: PUSH2 0x0889 00000174: JUMP 00000175: JUMPDEST 00000176: PUSH2 0x0847 00000179: JUMP 0000017a: JUMPDEST 0000017b: PUSH2 0x07a1 0000017e: JUMP 0000017f: JUMPDEST 00000180: PUSH2 0x06be 00000183: JUMP 00000184: JUMPDEST 00000185: PUSH2 0x0639 00000188: JUMP 00000189: JUMPDEST 0000018a: PUSH2 0x0491 0000018d: JUMP 0000018e: JUMPDEST 0000018f: PUSH2 0x043e 00000192: JUMP 00000193: JUMPDEST 00000194: PUSH2 0x03b1 00000197: JUMP 00000198: JUMPDEST 00000199: PUSH2 0x0332 0000019c: JUMP 0000019d: JUMPDEST 0000019e: PUSH2 0x02fe 000001a1: JUMP 000001a2: JUMPDEST 000001a3: PUSH1 0x00 000001a5: SWAP2 000001a6: SUB 000001a7: SLT 000001a8: PUSH2 0x01ad 000001ab: JUMPI 000001ac: JUMP 000001ad: JUMPDEST 000001ae: PUSH1 0x00 000001b0: DUP1 000001b1: REVERT 000001b2: JUMPDEST 000001b3: PUSH4 0x4e487b71 000001b8: PUSH1 0xe0 000001ba: SHL 000001bb: PUSH1 0x00 000001bd: MSTORE 000001be: PUSH1 0x41 000001c0: PUSH1 0x04 000001c2: MSTORE 000001c3: PUSH1 0x24 000001c5: PUSH1 0x00 000001c7: REVERT 000001c8: JUMPDEST 000001c9: PUSH1 0x01 000001cb: PUSH1 0x01 000001cd: PUSH1 0x40 000001cf: SHL 000001d0: SUB 000001d1: DUP2 000001d2: GT 000001d3: PUSH2 0x01db 000001d6: JUMPI 000001d7: PUSH1 0x40 000001d9: MSTORE 000001da: JUMP 000001db: JUMPDEST 000001dc: PUSH2 0x01b2 000001df: JUMP 000001e0: JUMPDEST 000001e1: PUSH1 0x60 000001e3: DUP2 000001e4: ADD 000001e5: SWAP1 000001e6: DUP2 000001e7: LT 000001e8: PUSH1 0x01 000001ea: PUSH1 0x01 000001ec: PUSH1 0x40 000001ee: SHL 000001ef: SUB 000001f0: DUP3 000001f1: GT 000001f2: OR 000001f3: PUSH2 0x01db 000001f6: JUMPI 000001f7: PUSH1 0x40 000001f9: MSTORE 000001fa: JUMP 000001fb: JUMPDEST 000001fc: PUSH1 0x80 000001fe: DUP2 000001ff: ADD 00000200: SWAP1 00000201: DUP2 00000202: LT 00000203: PUSH1 0x01 00000205: PUSH1 0x01 00000207: PUSH1 0x40 00000209: SHL 0000020a: SUB 0000020b: DUP3 0000020c: GT 0000020d: OR 0000020e: PUSH2 0x01db 00000211: JUMPI 00000212: PUSH1 0x40 00000214: MSTORE 00000215: JUMP 00000216: JUMPDEST 00000217: PUSH1 0x40 00000219: DUP2 0000021a: ADD 0000021b: SWAP1 0000021c: DUP2 0000021d: LT 0000021e: PUSH1 0x01 00000220: PUSH1 0x01 00000222: PUSH1 0x40 00000224: SHL 00000225: SUB 00000226: DUP3 00000227: GT 00000228: OR 00000229: PUSH2 0x01db 0000022c: JUMPI 0000022d: PUSH1 0x40 0000022f: MSTORE 00000230: JUMP 00000231: JUMPDEST 00000232: PUSH1 0xc0 00000234: DUP2 00000235: ADD 00000236: SWAP1 00000237: DUP2 00000238: LT 00000239: PUSH1 0x01 0000023b: PUSH1 0x01 0000023d: PUSH1 0x40 0000023f: SHL 00000240: SUB 00000241: DUP3 00000242: GT 00000243: OR 00000244: PUSH2 0x01db 00000247: JUMPI 00000248: PUSH1 0x40 0000024a: MSTORE 0000024b: JUMP 0000024c: JUMPDEST 0000024d: SWAP1 0000024e: PUSH1 0x1f 00000250: DUP1 00000251: NOT 00000252: SWAP2 00000253: ADD 00000254: AND 00000255: DUP2 00000256: ADD 00000257: SWAP1 00000258: DUP2 00000259: LT 0000025a: PUSH1 0x01 0000025c: PUSH1 0x01 0000025e: PUSH1 0x40 00000260: SHL 00000261: SUB 00000262: DUP3 00000263: GT 00000264: OR 00000265: PUSH2 0x01db 00000268: JUMPI 00000269: PUSH1 0x40 0000026b: MSTORE 0000026c: JUMP 0000026d: JUMPDEST 0000026e: PUSH1 0x40 00000270: MLOAD 00000271: SWAP1 00000272: PUSH2 0x027a 00000275: DUP3 00000276: PUSH2 0x01fb 00000279: JUMP 0000027a: JUMPDEST 0000027b: JUMP 0000027c: JUMPDEST 0000027d: PUSH1 0x40 0000027f: MLOAD 00000280: SWAP1 00000281: PUSH2 0x0160 00000284: DUP3 00000285: ADD 00000286: DUP3 00000287: DUP2 00000288: LT 00000289: PUSH1 0x01 0000028b: PUSH1 0x01 0000028d: PUSH1 0x40 0000028f: SHL 00000290: SUB 00000291: DUP3 00000292: GT 00000293: OR 00000294: PUSH2 0x01db 00000297: JUMPI 00000298: PUSH1 0x40 0000029a: MSTORE 0000029b: JUMP 0000029c: JUMPDEST 0000029d: PUSH1 0x40 0000029f: MLOAD 000002a0: SWAP1 000002a1: PUSH2 0x02a9 000002a4: DUP3 000002a5: PUSH2 0x0216 000002a8: JUMP 000002a9: JUMPDEST 000002aa: PUSH1 0x06 000002ac: DUP3 000002ad: MSTORE 000002ae: PUSH6 0x12d95c9b995b 000002b5: PUSH1 0xd2 000002b7: SHL 000002b8: PUSH1 0x20 000002ba: DUP4 000002bb: ADD 000002bc: MSTORE 000002bd: JUMP 000002be: JUMPDEST 000002bf: SWAP2 000002c0: SWAP1 000002c1: DUP3 000002c2: MLOAD 000002c3: SWAP3 000002c4: DUP4 000002c5: DUP3 000002c6: MSTORE 000002c7: PUSH1 0x00 000002c9: JUMPDEST 000002ca: DUP5 000002cb: DUP2 000002cc: LT 000002cd: PUSH2 0x02ea 000002d0: JUMPI 000002d1: POP 000002d2: POP 000002d3: DUP3 000002d4: PUSH1 0x00 000002d6: PUSH1 0x20 000002d8: DUP1 000002d9: SWAP5 000002da: SWAP6 000002db: DUP5 000002dc: ADD 000002dd: ADD 000002de: MSTORE 000002df: PUSH1 0x1f 000002e1: DUP1 000002e2: NOT 000002e3: SWAP2 000002e4: ADD 000002e5: AND 000002e6: ADD 000002e7: ADD 000002e8: SWAP1 000002e9: JUMP 000002ea: JUMPDEST 000002eb: PUSH1 0x20 000002ed: DUP2 000002ee: DUP4 000002ef: ADD 000002f0: DUP2 000002f1: ADD 000002f2: MLOAD 000002f3: DUP5 000002f4: DUP4 000002f5: ADD 000002f6: DUP3 000002f7: ADD 000002f8: MSTORE 000002f9: ADD 000002fa: PUSH2 0x02c9 000002fd: JUMP 000002fe: JUMPDEST 000002ff: CALLVALUE 00000300: PUSH2 0x01ad 00000303: JUMPI 00000304: PUSH1 0x00 00000306: CALLDATASIZE 00000307: PUSH1 0x03 00000309: NOT 0000030a: ADD 0000030b: SLT 0000030c: PUSH2 0x01ad 0000030f: JUMPI 00000310: PUSH2 0x032e 00000313: PUSH2 0x031a 00000316: PUSH2 0x029c 00000319: JUMP 0000031a: JUMPDEST 0000031b: PUSH1 0x40 0000031d: MLOAD 0000031e: SWAP2 0000031f: DUP3 00000320: SWAP2 00000321: PUSH1 0x20 00000323: DUP4 00000324: MSTORE 00000325: PUSH1 0x20 00000327: DUP4 00000328: ADD 00000329: SWAP1 0000032a: PUSH2 0x02be 0000032d: JUMP 0000032e: JUMPDEST 0000032f: SUB 00000330: SWAP1 00000331: RETURN 00000332: JUMPDEST 00000333: CALLVALUE 00000334: PUSH2 0x01ad 00000337: JUMPI 00000338: PUSH1 0x00 0000033a: CALLDATASIZE 0000033b: PUSH1 0x03 0000033d: NOT 0000033e: ADD 0000033f: SLT 00000340: PUSH2 0x01ad 00000343: JUMPI 00000344: PUSH1 0x20 00000346: PUSH1 0x00 00000348: DUP1 00000349: MLOAD 0000034a: PUSH1 0x20 0000034c: PUSH2 0x2171 0000034f: DUP4 00000350: CODECOPY 00000351: DUP2 00000352: MLOAD 00000353: SWAP2 00000354: MSTORE 00000355: SLOAD 00000356: PUSH1 0x50 00000358: SHR 00000359: PUSH1 0x40 0000035b: MLOAD 0000035c: SWAP1 0000035d: PUSH1 0x01 0000035f: DUP1 00000360: PUSH1 0xa0 00000362: SHL 00000363: SUB 00000364: AND 00000365: DUP2 00000366: MSTORE 00000367: RETURN 00000368: JUMPDEST 00000369: PUSH1 0x01 0000036b: PUSH1 0x01 0000036d: PUSH1 0xa0 0000036f: SHL 00000370: SUB 00000371: DUP2 00000372: AND 00000373: SUB 00000374: PUSH2 0x01ad 00000377: JUMPI 00000378: JUMP 00000379: JUMPDEST 0000037a: CALLDATALOAD 0000037b: SWAP1 0000037c: PUSH2 0x027a 0000037f: DUP3 00000380: PUSH2 0x0368 00000383: JUMP 00000384: JUMPDEST 00000385: SWAP2 00000386: DUP2 00000387: PUSH1 0x1f 00000389: DUP5 0000038a: ADD 0000038b: SLT 0000038c: ISZERO 0000038d: PUSH2 0x01ad 00000390: JUMPI 00000391: DUP3 00000392: CALLDATALOAD 00000393: SWAP2 00000394: PUSH1 0x01 00000396: PUSH1 0x01 00000398: PUSH1 0x40 0000039a: SHL 0000039b: SUB 0000039c: DUP4 0000039d: GT 0000039e: PUSH2 0x01ad 000003a1: JUMPI 000003a2: PUSH1 0x20 000003a4: DUP4 000003a5: DUP2 000003a6: DUP7 000003a7: ADD 000003a8: SWAP6 000003a9: ADD 000003aa: ADD 000003ab: GT 000003ac: PUSH2 0x01ad 000003af: JUMPI 000003b0: JUMP 000003b1: JUMPDEST 000003b2: CALLVALUE 000003b3: PUSH2 0x01ad 000003b6: JUMPI 000003b7: PUSH1 0x80 000003b9: CALLDATASIZE 000003ba: PUSH1 0x03 000003bc: NOT 000003bd: ADD 000003be: SLT 000003bf: PUSH2 0x01ad 000003c2: JUMPI 000003c3: PUSH2 0x03cd 000003c6: PUSH1 0x04 000003c8: CALLDATALOAD 000003c9: PUSH2 0x0368 000003cc: JUMP 000003cd: JUMPDEST 000003ce: PUSH2 0x03d8 000003d1: PUSH1 0x24 000003d3: CALLDATALOAD 000003d4: PUSH2 0x0368 000003d7: JUMP 000003d8: JUMPDEST 000003d9: PUSH1 0x64 000003db: CALLDATALOAD 000003dc: PUSH1 0x01 000003de: PUSH1 0x01 000003e0: PUSH1 0x40 000003e2: SHL 000003e3: SUB 000003e4: DUP2 000003e5: GT 000003e6: PUSH2 0x01ad 000003e9: JUMPI 000003ea: PUSH2 0x03f7 000003ed: SWAP1 000003ee: CALLDATASIZE 000003ef: SWAP1 000003f0: PUSH1 0x04 000003f2: ADD 000003f3: PUSH2 0x0384 000003f6: JUMP 000003f7: JUMPDEST 000003f8: POP 000003f9: POP 000003fa: PUSH1 0x40 000003fc: MLOAD 000003fd: PUSH4 0x0a85bd01 00000402: PUSH1 0xe1 00000404: SHL 00000405: DUP2 00000406: MSTORE 00000407: PUSH1 0x20 00000409: SWAP1 0000040a: RETURN 0000040b: JUMPDEST 0000040c: SWAP1 0000040d: PUSH1 0x40 0000040f: PUSH1 0x03 00000411: NOT 00000412: DUP4 00000413: ADD 00000414: SLT 00000415: PUSH2 0x01ad 00000418: JUMPI 00000419: PUSH1 0x04 0000041b: CALLDATALOAD 0000041c: SWAP2 0000041d: PUSH1 0x24 0000041f: CALLDATALOAD 00000420: SWAP1 00000421: PUSH1 0x01 00000423: PUSH1 0x01 00000425: PUSH1 0x40 00000427: SHL 00000428: SUB 00000429: DUP3 0000042a: GT 0000042b: PUSH2 0x01ad 0000042e: JUMPI 0000042f: PUSH2 0x043a 00000432: SWAP2 00000433: PUSH1 0x04 00000435: ADD 00000436: PUSH2 0x0384 00000439: JUMP 0000043a: JUMPDEST 0000043b: SWAP1 0000043c: SWAP2 0000043d: JUMP 0000043e: JUMPDEST 0000043f: CALLVALUE 00000440: PUSH2 0x01ad 00000443: JUMPI 00000444: PUSH1 0x20 00000446: PUSH2 0x0457 00000449: PUSH2 0x0451 0000044c: CALLDATASIZE 0000044d: PUSH2 0x040b 00000450: JUMP 00000451: JUMPDEST 00000452: SWAP2 00000453: PUSH2 0x1c33 00000456: JUMP 00000457: JUMPDEST 00000458: PUSH1 0x40 0000045a: MLOAD 0000045b: PUSH1 0x01 0000045d: PUSH1 0x01 0000045f: PUSH1 0xe0 00000461: SHL 00000462: SUB 00000463: NOT 00000464: SWAP1 00000465: SWAP2 00000466: AND 00000467: DUP2 00000468: MSTORE 00000469: RETURN 0000046a: JUMPDEST 0000046b: PUSH1 0x04 0000046d: CALLDATALOAD 0000046e: SWAP1 0000046f: PUSH1 0x01 00000471: PUSH1 0x01 00000473: PUSH1 0xe0 00000475: SHL 00000476: SUB 00000477: NOT 00000478: DUP3 00000479: AND 0000047a: DUP3 0000047b: SUB 0000047c: PUSH2 0x01ad 0000047f: JUMPI 00000480: JUMP 00000481: JUMPDEST 00000482: PUSH6 0xffffffffffff 00000489: DUP2 0000048a: AND 0000048b: SUB 0000048c: PUSH2 0x01ad 0000048f: JUMPI 00000490: JUMP 00000491: JUMPDEST 00000492: PUSH1 0xc0 00000494: CALLDATASIZE 00000495: PUSH1 0x03 00000497: NOT 00000498: ADD 00000499: SLT 0000049a: PUSH2 0x01ad 0000049d: JUMPI 0000049e: PUSH2 0x04a5 000004a1: PUSH2 0x046a 000004a4: JUMP 000004a5: JUMPDEST 000004a6: PUSH1 0x24 000004a8: CALLDATALOAD 000004a9: SWAP1 000004aa: PUSH2 0x04b2 000004ad: DUP3 000004ae: PUSH2 0x0368 000004b1: JUMP 000004b2: JUMPDEST 000004b3: PUSH1 0x44 000004b5: CALLDATALOAD 000004b6: SWAP1 000004b7: PUSH2 0x04bf 000004ba: DUP3 000004bb: PUSH2 0x0368 000004be: JUMP 000004bf: JUMPDEST 000004c0: PUSH1 0x64 000004c2: CALLDATALOAD 000004c3: PUSH2 0x04cb 000004c6: DUP2 000004c7: PUSH2 0x0481 000004ca: JUMP 000004cb: JUMPDEST 000004cc: PUSH1 0x84 000004ce: CALLDATALOAD 000004cf: SWAP4 000004d0: PUSH2 0x04d8 000004d3: DUP6 000004d4: PUSH2 0x0481 000004d7: JUMP 000004d8: JUMPDEST 000004d9: PUSH1 0xa4 000004db: CALLDATALOAD 000004dc: PUSH1 0x01 000004de: PUSH1 0x01 000004e0: PUSH1 0x40 000004e2: SHL 000004e3: SUB 000004e4: DUP2 000004e5: GT 000004e6: PUSH2 0x01ad 000004e9: JUMPI 000004ea: PUSH2 0x04f7 000004ed: SWAP1 000004ee: CALLDATASIZE 000004ef: SWAP1 000004f0: PUSH1 0x04 000004f2: ADD 000004f3: PUSH2 0x0384 000004f6: JUMP 000004f7: JUMPDEST 000004f8: SWAP6 000004f9: SWAP1 000004fa: SWAP5 000004fb: PUSH1 0x01 000004fd: PUSH1 0x01 000004ff: PUSH1 0xa0 00000501: SHL 00000502: SUB 00000503: SWAP4 00000504: CALLER 00000505: PUSH32 0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789 00000526: DUP7 00000527: AND 00000528: EQ 00000529: ISZERO 0000052a: DUP1 0000052b: PUSH2 0x062f 0000052e: JUMPI 0000052f: JUMPDEST 00000530: PUSH2 0x061d 00000533: JUMPI 00000534: DUP5 00000535: SWAP3 00000536: PUSH2 0x0564 00000539: PUSH2 0x0590 0000053c: SWAP3 0000053d: PUSH2 0x0555 00000540: PUSH2 0x0547 00000543: PUSH2 0x026d 00000546: JUMP 00000547: JUMPDEST 00000548: PUSH6 0xffffffffffff 0000054f: SWAP1 00000550: SWAP5 00000551: AND 00000552: DUP5 00000553: MSTORE 00000554: JUMP 00000555: JUMPDEST 00000556: PUSH6 0xffffffffffff 0000055d: AND 0000055e: PUSH1 0x20 00000560: DUP4 00000561: ADD 00000562: MSTORE 00000563: JUMP 00000564: JUMPDEST 00000565: PUSH1 0x01 00000567: PUSH1 0x01 00000569: PUSH1 0xa0 0000056b: SHL 0000056c: SUB 0000056d: DUP6 0000056e: AND 0000056f: PUSH1 0x40 00000571: DUP3 00000572: ADD 00000573: MSTORE 00000574: PUSH1 0x01 00000576: PUSH1 0x01 00000578: PUSH1 0xa0 0000057a: SHL 0000057b: SUB 0000057c: DUP4 0000057d: AND 0000057e: PUSH1 0x60 00000580: DUP3 00000581: ADD 00000582: MSTORE 00000583: PUSH2 0x058b 00000586: DUP8 00000587: PUSH2 0x1121 0000058a: JUMP 0000058b: JUMPDEST 0000058c: PUSH2 0x1803 0000058f: JUMP 00000590: JUMPDEST 00000591: AND 00000592: SWAP4 00000593: DUP5 00000594: EXTCODESIZE 00000595: ISZERO 00000596: PUSH2 0x01ad 00000599: JUMPI 0000059a: PUSH1 0x40 0000059c: MLOAD 0000059d: SWAP1 0000059e: PUSH4 0x064acaab 000005a3: PUSH1 0xe1 000005a5: SHL 000005a6: DUP3 000005a7: MSTORE 000005a8: DUP2 000005a9: DUP1 000005aa: PUSH2 0x05ba 000005ad: PUSH1 0x00 000005af: SWAP10 000005b0: DUP11 000005b1: SWAP5 000005b2: PUSH1 0x04 000005b4: DUP5 000005b5: ADD 000005b6: PUSH2 0x18b6 000005b9: JUMP 000005ba: JUMPDEST 000005bb: SUB 000005bc: DUP2 000005bd: DUP4 000005be: DUP10 000005bf: GAS 000005c0: CALL 000005c1: DUP1 000005c2: ISZERO 000005c3: PUSH2 0x0618 000005c6: JUMPI 000005c7: PUSH2 0x05ff 000005ca: JUMPI 000005cb: JUMPDEST 000005cc: POP 000005cd: AND 000005ce: SWAP1 000005cf: PUSH1 0x01 000005d1: PUSH1 0x01 000005d3: PUSH1 0xe0 000005d5: SHL 000005d6: SUB 000005d7: NOT 000005d8: AND 000005d9: PUSH32 0xed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d321353 000005fa: DUP5 000005fb: DUP1 000005fc: LOG4 000005fd: DUP1 000005fe: RETURN 000005ff: JUMPDEST 00000600: DUP1 00000601: PUSH2 0x060c 00000604: PUSH2 0x0612 00000607: SWAP3 00000608: PUSH2 0x01c8 0000060b: JUMP 0000060c: JUMPDEST 0000060d: DUP1 0000060e: PUSH2 0x01a2 00000611: JUMP 00000612: JUMPDEST 00000613: CODESIZE 00000614: PUSH2 0x05cb 00000617: JUMP 00000618: JUMPDEST 00000619: PUSH2 0x154d 0000061c: JUMP 0000061d: JUMPDEST 0000061e: PUSH1 0x40 00000620: MLOAD 00000621: PUSH4 0x7046c88d 00000626: PUSH1 0xe0 00000628: SHL 00000629: DUP2 0000062a: MSTORE 0000062b: PUSH1 0x04 0000062d: SWAP1 0000062e: REVERT 0000062f: JUMPDEST 00000630: POP 00000631: ADDRESS 00000632: CALLER 00000633: EQ 00000634: ISZERO 00000635: PUSH2 0x052f 00000638: JUMP 00000639: JUMPDEST 0000063a: CALLVALUE 0000063b: PUSH2 0x01ad 0000063e: JUMPI 0000063f: PUSH1 0x20 00000641: PUSH2 0x0652 00000644: PUSH2 0x064c 00000647: CALLDATASIZE 00000648: PUSH2 0x040b 0000064b: JUMP 0000064c: JUMPDEST 0000064d: SWAP2 0000064e: PUSH2 0x1f8c 00000651: JUMP 00000652: JUMPDEST 00000653: PUSH1 0x40 00000655: MLOAD 00000656: SWAP1 00000657: DUP2 00000658: MSTORE 00000659: RETURN 0000065a: JUMPDEST 0000065b: SWAP3 0000065c: SWAP2 0000065d: SWAP3 0000065e: PUSH1 0x01 00000660: PUSH1 0x01 00000662: PUSH1 0x40 00000664: SHL 00000665: SUB 00000666: DUP3 00000667: GT 00000668: PUSH2 0x01db 0000066b: JUMPI 0000066c: PUSH1 0x40 0000066e: MLOAD 0000066f: SWAP2 00000670: PUSH2 0x0683 00000673: PUSH1 0x1f 00000675: DUP3 00000676: ADD 00000677: PUSH1 0x1f 00000679: NOT 0000067a: AND 0000067b: PUSH1 0x20 0000067d: ADD 0000067e: DUP5 0000067f: PUSH2 0x024c 00000682: JUMP 00000683: JUMPDEST 00000684: DUP3 00000685: SWAP5 00000686: DUP2 00000687: DUP5 00000688: MSTORE 00000689: DUP2 0000068a: DUP4 0000068b: ADD 0000068c: GT 0000068d: PUSH2 0x01ad 00000690: JUMPI 00000691: DUP3 00000692: DUP2 00000693: PUSH1 0x20 00000695: SWAP4 00000696: DUP5 00000697: PUSH1 0x00 00000699: SWAP7 0000069a: ADD 0000069b: CALLDATACOPY 0000069c: ADD 0000069d: ADD 0000069e: MSTORE 0000069f: JUMP 000006a0: JUMPDEST 000006a1: SWAP1 000006a2: DUP1 000006a3: PUSH1 0x1f 000006a5: DUP4 000006a6: ADD 000006a7: SLT 000006a8: ISZERO 000006a9: PUSH2 0x01ad 000006ac: JUMPI 000006ad: DUP2 000006ae: PUSH1 0x20 000006b0: PUSH2 0x06bb 000006b3: SWAP4 000006b4: CALLDATALOAD 000006b5: SWAP2 000006b6: ADD 000006b7: PUSH2 0x065a 000006ba: JUMP 000006bb: JUMPDEST 000006bc: SWAP1 000006bd: JUMP 000006be: JUMPDEST 000006bf: PUSH1 0x20 000006c1: DUP1 000006c2: PUSH1 0x03 000006c4: NOT 000006c5: CALLDATASIZE 000006c6: ADD 000006c7: SLT 000006c8: PUSH2 0x01ad 000006cb: JUMPI 000006cc: PUSH1 0x01 000006ce: PUSH1 0x01 000006d0: PUSH1 0x40 000006d2: SHL 000006d3: SUB 000006d4: PUSH1 0x04 000006d6: CALLDATALOAD 000006d7: DUP2 000006d8: DUP2 000006d9: GT 000006da: PUSH2 0x01ad 000006dd: JUMPI 000006de: CALLDATASIZE 000006df: PUSH1 0x23 000006e1: DUP3 000006e2: ADD 000006e3: SLT 000006e4: ISZERO 000006e5: PUSH2 0x01ad 000006e8: JUMPI 000006e9: DUP1 000006ea: PUSH1 0x04 000006ec: ADD 000006ed: CALLDATALOAD 000006ee: SWAP2 000006ef: DUP1 000006f0: DUP4 000006f1: GT 000006f2: PUSH2 0x01db 000006f5: JUMPI 000006f6: DUP3 000006f7: PUSH1 0x05 000006f9: SHL 000006fa: SWAP1 000006fb: PUSH1 0x40 000006fd: SWAP1 000006fe: DUP2 000006ff: MLOAD 00000700: SWAP5 00000701: PUSH2 0x070c 00000704: DUP8 00000705: DUP6 00000706: ADD 00000707: DUP8 00000708: PUSH2 0x024c 0000070b: JUMP 0000070c: JUMPDEST 0000070d: DUP6 0000070e: MSTORE 0000070f: DUP6 00000710: DUP6 00000711: ADD 00000712: SWAP2 00000713: PUSH1 0x24 00000715: DUP1 00000716: SWAP5 00000717: DUP7 00000718: ADD 00000719: ADD 0000071a: SWAP5 0000071b: CALLDATASIZE 0000071c: DUP7 0000071d: GT 0000071e: PUSH2 0x01ad 00000721: JUMPI 00000722: DUP5 00000723: DUP2 00000724: ADD 00000725: SWAP4 00000726: JUMPDEST 00000727: DUP7 00000728: DUP6 00000729: LT 0000072a: PUSH2 0x0736 0000072d: JUMPI 0000072e: PUSH2 0x001b 00000731: DUP9 00000732: PUSH2 0x121c 00000735: JUMP 00000736: JUMPDEST 00000737: DUP5 00000738: CALLDATALOAD 00000739: DUP5 0000073a: DUP2 0000073b: GT 0000073c: PUSH2 0x01ad 0000073f: JUMPI 00000740: DUP3 00000741: ADD 00000742: PUSH1 0x60 00000744: PUSH1 0x23 00000746: NOT 00000747: DUP3 00000748: CALLDATASIZE 00000749: SUB 0000074a: ADD 0000074b: SLT 0000074c: PUSH2 0x01ad 0000074f: JUMPI 00000750: DUP4 00000751: MLOAD 00000752: SWAP2 00000753: PUSH2 0x075b 00000756: DUP4 00000757: PUSH2 0x01e0 0000075a: JUMP 0000075b: JUMPDEST 0000075c: DUP8 0000075d: DUP3 0000075e: ADD 0000075f: CALLDATALOAD 00000760: PUSH2 0x0768 00000763: DUP2 00000764: PUSH2 0x0368 00000767: JUMP 00000768: JUMPDEST 00000769: DUP4 0000076a: MSTORE 0000076b: PUSH1 0x44 0000076d: DUP3 0000076e: ADD 0000076f: CALLDATALOAD 00000770: DUP12 00000771: DUP5 00000772: ADD 00000773: MSTORE 00000774: PUSH1 0x64 00000776: DUP3 00000777: ADD 00000778: CALLDATALOAD 00000779: SWAP3 0000077a: DUP7 0000077b: DUP5 0000077c: GT 0000077d: PUSH2 0x01ad 00000780: JUMPI 00000781: PUSH2 0x0792 00000784: DUP13 00000785: SWAP5 00000786: SWAP4 00000787: DUP11 00000788: DUP7 00000789: SWAP6 0000078a: CALLDATASIZE 0000078b: SWAP3 0000078c: ADD 0000078d: ADD 0000078e: PUSH2 0x06a0 00000791: JUMP 00000792: JUMPDEST 00000793: DUP7 00000794: DUP3 00000795: ADD 00000796: MSTORE 00000797: DUP2 00000798: MSTORE 00000799: ADD 0000079a: SWAP5 0000079b: ADD 0000079c: SWAP4 0000079d: PUSH2 0x0726 000007a0: JUMP 000007a1: JUMPDEST 000007a2: PUSH1 0x20 000007a4: CALLDATASIZE 000007a5: PUSH1 0x03 000007a7: NOT 000007a8: ADD 000007a9: SLT 000007aa: PUSH2 0x01ad 000007ad: JUMPI 000007ae: PUSH1 0x04 000007b0: CALLDATALOAD 000007b1: PUSH2 0x07b9 000007b4: DUP2 000007b5: PUSH2 0x0368 000007b8: JUMP 000007b9: JUMPDEST 000007ba: PUSH1 0x01 000007bc: PUSH1 0x01 000007be: PUSH1 0xa0 000007c0: SHL 000007c1: SUB 000007c2: SWAP1 000007c3: CALLER 000007c4: PUSH32 0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789 000007e5: DUP4 000007e6: AND 000007e7: EQ 000007e8: ISZERO 000007e9: DUP1 000007ea: PUSH2 0x083d 000007ed: JUMPI 000007ee: JUMPDEST 000007ef: PUSH2 0x061d 000007f2: JUMPI 000007f3: DUP1 000007f4: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 00000815: SSTORE 00000816: AND 00000817: PUSH32 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b 00000838: PUSH1 0x00 0000083a: DUP1 0000083b: LOG2 0000083c: STOP 0000083d: JUMPDEST 0000083e: POP 0000083f: ADDRESS 00000840: CALLER 00000841: EQ 00000842: ISZERO 00000843: PUSH2 0x07ee 00000846: JUMP 00000847: JUMPDEST 00000848: PUSH1 0x03 0000084a: NOT 0000084b: PUSH1 0x60 0000084d: CALLDATASIZE 0000084e: DUP3 0000084f: ADD 00000850: SLT 00000851: PUSH2 0x01ad 00000854: JUMPI 00000855: PUSH1 0x04 00000857: CALLDATALOAD 00000858: SWAP1 00000859: PUSH1 0x01 0000085b: PUSH1 0x01 0000085d: PUSH1 0x40 0000085f: SHL 00000860: SUB 00000861: DUP3 00000862: GT 00000863: PUSH2 0x01ad 00000866: JUMPI 00000867: PUSH2 0x0160 0000086a: SWAP1 0000086b: DUP3 0000086c: CALLDATASIZE 0000086d: SUB 0000086e: ADD 0000086f: SLT 00000870: PUSH2 0x01ad 00000873: JUMPI 00000874: PUSH2 0x0652 00000877: PUSH1 0x20 00000879: SWAP2 0000087a: PUSH1 0x44 0000087c: CALLDATALOAD 0000087d: SWAP1 0000087e: PUSH1 0x24 00000880: CALLDATALOAD 00000881: SWAP1 00000882: PUSH1 0x04 00000884: ADD 00000885: PUSH2 0x1559 00000888: JUMP 00000889: JUMPDEST 0000088a: CALLVALUE 0000088b: PUSH2 0x01ad 0000088e: JUMPI 0000088f: PUSH1 0x20 00000891: CALLDATASIZE 00000892: PUSH1 0x03 00000894: NOT 00000895: ADD 00000896: SLT 00000897: PUSH2 0x01ad 0000089a: JUMPI 0000089b: PUSH1 0x04 0000089d: CALLDATALOAD 0000089e: PUSH1 0x01 000008a0: PUSH1 0x01 000008a2: PUSH1 0xc0 000008a4: SHL 000008a5: SUB 000008a6: DUP2 000008a7: AND 000008a8: SWAP1 000008a9: DUP2 000008aa: SWAP1 000008ab: SUB 000008ac: PUSH2 0x01ad 000008af: JUMPI 000008b0: PUSH1 0x40 000008b2: MLOAD 000008b3: PUSH4 0x1aab3f0d 000008b8: PUSH1 0xe1 000008ba: SHL 000008bb: DUP2 000008bc: MSTORE 000008bd: ADDRESS 000008be: PUSH1 0x04 000008c0: DUP3 000008c1: ADD 000008c2: MSTORE 000008c3: PUSH1 0x24 000008c5: DUP2 000008c6: ADD 000008c7: SWAP2 000008c8: SWAP1 000008c9: SWAP2 000008ca: MSTORE 000008cb: PUSH1 0x20 000008cd: DUP2 000008ce: PUSH1 0x44 000008d0: DUP2 000008d1: PUSH32 0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789 000008f2: PUSH1 0x01 000008f4: PUSH1 0x01 000008f6: PUSH1 0xa0 000008f8: SHL 000008f9: SUB 000008fa: AND 000008fb: GAS 000008fc: STATICCALL 000008fd: DUP1 000008fe: ISZERO 000008ff: PUSH2 0x0618 00000902: JUMPI 00000903: PUSH2 0x032e 00000906: SWAP2 00000907: PUSH1 0x00 00000909: SWAP2 0000090a: PUSH2 0x091f 0000090d: JUMPI 0000090e: JUMPDEST 0000090f: POP 00000910: PUSH1 0x40 00000912: MLOAD 00000913: SWAP1 00000914: DUP2 00000915: MSTORE 00000916: SWAP1 00000917: DUP2 00000918: SWAP1 00000919: PUSH1 0x20 0000091b: DUP3 0000091c: ADD 0000091d: SWAP1 0000091e: JUMP 0000091f: JUMPDEST 00000920: PUSH2 0x0940 00000923: SWAP2 00000924: POP 00000925: PUSH1 0x20 00000927: RETURNDATASIZE 00000928: DUP2 00000929: GT 0000092a: PUSH2 0x0946 0000092d: JUMPI 0000092e: JUMPDEST 0000092f: PUSH2 0x0938 00000932: DUP2 00000933: DUP4 00000934: PUSH2 0x024c 00000937: JUMP 00000938: JUMPDEST 00000939: DUP2 0000093a: ADD 0000093b: SWAP1 0000093c: PUSH2 0x146e 0000093f: JUMP 00000940: JUMPDEST 00000941: CODESIZE 00000942: PUSH2 0x090e 00000945: JUMP 00000946: JUMPDEST 00000947: POP 00000948: RETURNDATASIZE 00000949: PUSH2 0x092e 0000094c: JUMP 0000094d: JUMPDEST 0000094e: CALLVALUE 0000094f: PUSH2 0x01ad 00000952: JUMPI 00000953: PUSH1 0x20 00000955: CALLDATASIZE 00000956: PUSH1 0x03 00000958: NOT 00000959: ADD 0000095a: SLT 0000095b: PUSH2 0x01ad 0000095e: JUMPI 0000095f: PUSH2 0x032e 00000962: PUSH2 0x0992 00000965: PUSH2 0x096c 00000968: PUSH2 0x046a 0000096b: JUMP 0000096c: JUMPDEST 0000096d: PUSH1 0x00 0000096f: PUSH1 0x60 00000971: PUSH1 0x40 00000973: MLOAD 00000974: PUSH2 0x097c 00000977: DUP2 00000978: PUSH2 0x01fb 0000097b: JUMP 0000097c: JUMPDEST 0000097d: DUP3 0000097e: DUP2 0000097f: MSTORE 00000980: DUP3 00000981: PUSH1 0x20 00000983: DUP3 00000984: ADD 00000985: MSTORE 00000986: DUP3 00000987: PUSH1 0x40 00000989: DUP3 0000098a: ADD 0000098b: MSTORE 0000098c: ADD 0000098d: MSTORE 0000098e: PUSH2 0x1121 00000991: JUMP 00000992: JUMPDEST 00000993: PUSH1 0x40 00000995: MLOAD 00000996: SWAP1 00000997: PUSH2 0x099f 0000099a: DUP3 0000099b: PUSH2 0x01fb 0000099e: JUMP 0000099f: JUMPDEST 000009a0: DUP1 000009a1: SLOAD 000009a2: PUSH6 0xffffffffffff 000009a9: DUP1 000009aa: DUP3 000009ab: AND 000009ac: DUP5 000009ad: MSTORE 000009ae: DUP2 000009af: PUSH1 0x30 000009b1: SHR 000009b2: AND 000009b3: PUSH1 0x20 000009b5: DUP5 000009b6: ADD 000009b7: MSTORE 000009b8: PUSH1 0x60 000009ba: SHR 000009bb: PUSH1 0x40 000009bd: DUP4 000009be: ADD 000009bf: MSTORE 000009c0: PUSH1 0x01 000009c2: DUP1 000009c3: DUP1 000009c4: PUSH1 0xa0 000009c6: SHL 000009c7: SUB 000009c8: SWAP2 000009c9: ADD 000009ca: SLOAD 000009cb: AND 000009cc: PUSH1 0x60 000009ce: DUP3 000009cf: ADD 000009d0: MSTORE 000009d1: PUSH1 0x40 000009d3: MLOAD 000009d4: SWAP2 000009d5: DUP3 000009d6: SWAP2 000009d7: DUP3 000009d8: SWAP2 000009d9: SWAP1 000009da: SWAP2 000009db: PUSH1 0x60 000009dd: PUSH1 0x80 000009df: DUP3 000009e0: ADD 000009e1: SWAP4 000009e2: PUSH6 0xffffffffffff 000009e9: DUP1 000009ea: DUP3 000009eb: MLOAD 000009ec: AND 000009ed: DUP5 000009ee: MSTORE 000009ef: PUSH1 0x20 000009f1: DUP3 000009f2: ADD 000009f3: MLOAD 000009f4: AND 000009f5: PUSH1 0x20 000009f7: DUP5 000009f8: ADD 000009f9: MSTORE 000009fa: DUP2 000009fb: PUSH1 0x01 000009fd: DUP1 000009fe: PUSH1 0xa0 00000a00: SHL 00000a01: SUB 00000a02: SWAP2 00000a03: DUP3 00000a04: PUSH1 0x40 00000a06: DUP3 00000a07: ADD 00000a08: MLOAD 00000a09: AND 00000a0a: PUSH1 0x40 00000a0c: DUP7 00000a0d: ADD 00000a0e: MSTORE 00000a0f: ADD 00000a10: MLOAD 00000a11: AND 00000a12: SWAP2 00000a13: ADD 00000a14: MSTORE 00000a15: JUMP 00000a16: JUMPDEST 00000a17: PUSH1 0x80 00000a19: CALLDATASIZE 00000a1a: PUSH1 0x03 00000a1c: NOT 00000a1d: ADD 00000a1e: SLT 00000a1f: PUSH2 0x01ad 00000a22: JUMPI 00000a23: PUSH1 0x04 00000a25: CALLDATALOAD 00000a26: PUSH2 0x0a2e 00000a29: DUP2 00000a2a: PUSH2 0x0368 00000a2d: JUMP 00000a2e: JUMPDEST 00000a2f: PUSH1 0x44 00000a31: CALLDATALOAD 00000a32: PUSH1 0x01 00000a34: PUSH1 0x01 00000a36: PUSH1 0x40 00000a38: SHL 00000a39: SUB 00000a3a: DUP2 00000a3b: GT 00000a3c: PUSH2 0x01ad 00000a3f: JUMPI 00000a40: PUSH2 0x0a4d 00000a43: SWAP1 00000a44: CALLDATASIZE 00000a45: SWAP1 00000a46: PUSH1 0x04 00000a48: ADD 00000a49: PUSH2 0x06a0 00000a4c: JUMP 00000a4d: JUMPDEST 00000a4e: SWAP1 00000a4f: PUSH1 0x64 00000a51: CALLDATALOAD 00000a52: PUSH1 0x02 00000a54: DUP2 00000a55: LT 00000a56: ISZERO 00000a57: PUSH2 0x01ad 00000a5a: JUMPI 00000a5b: CALLER 00000a5c: PUSH32 0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789 00000a7d: PUSH1 0x01 00000a7f: PUSH1 0x01 00000a81: PUSH1 0xa0 00000a83: SHL 00000a84: SUB 00000a85: AND 00000a86: EQ 00000a87: ISZERO 00000a88: DUP1 00000a89: PUSH2 0x0af0 00000a8c: JUMPI 00000a8d: JUMPDEST 00000a8e: DUP1 00000a8f: PUSH2 0x0adb 00000a92: JUMPI 00000a93: JUMPDEST 00000a94: PUSH2 0x061d 00000a97: JUMPI 00000a98: PUSH2 0x0aa0 00000a9b: DUP2 00000a9c: PUSH2 0x11d2 00000a9f: JUMP 00000aa0: JUMPDEST 00000aa1: PUSH2 0x0ac9 00000aa4: JUMPI 00000aa5: PUSH1 0x00 00000aa7: DUP3 00000aa8: DUP2 00000aa9: SWAP4 00000aaa: SWAP3 00000aab: PUSH1 0x20 00000aad: DUP4 00000aae: SWAP5 00000aaf: MLOAD 00000ab0: SWAP3 00000ab1: ADD 00000ab2: SWAP1 00000ab3: PUSH1 0x24 00000ab5: CALLDATALOAD 00000ab6: SWAP1 00000ab7: GAS 00000ab8: CALL 00000ab9: RETURNDATASIZE 00000aba: DUP3 00000abb: DUP1 00000abc: RETURNDATACOPY 00000abd: ISZERO 00000abe: PUSH2 0x0ac5 00000ac1: JUMPI 00000ac2: RETURNDATASIZE 00000ac3: SWAP1 00000ac4: RETURN 00000ac5: JUMPDEST 00000ac6: RETURNDATASIZE 00000ac7: SWAP1 00000ac8: REVERT 00000ac9: JUMPDEST 00000aca: PUSH1 0x40 00000acc: MLOAD 00000acd: PUSH4 0x67ce7759 00000ad2: PUSH1 0xe0 00000ad4: SHL 00000ad5: DUP2 00000ad6: MSTORE 00000ad7: PUSH1 0x04 00000ad9: SWAP1 00000ada: REVERT 00000adb: JUMPDEST 00000adc: POP 00000add: PUSH2 0x0aeb 00000ae0: PUSH2 0x0ae7 00000ae3: PUSH2 0x1d8c 00000ae6: JUMP 00000ae7: JUMPDEST 00000ae8: ISZERO 00000ae9: SWAP1 00000aea: JUMP 00000aeb: JUMPDEST 00000aec: PUSH2 0x0a93 00000aef: JUMP 00000af0: JUMPDEST 00000af1: POP 00000af2: ADDRESS 00000af3: CALLER 00000af4: EQ 00000af5: ISZERO 00000af6: PUSH2 0x0a8d 00000af9: JUMP 00000afa: JUMPDEST 00000afb: PUSH1 0x40 00000afd: MLOAD 00000afe: SWAP1 00000aff: PUSH2 0x0b07 00000b02: DUP3 00000b03: PUSH2 0x0216 00000b06: JUMP 00000b07: JUMPDEST 00000b08: PUSH1 0x05 00000b0a: DUP3 00000b0b: MSTORE 00000b0c: PUSH5 0x302e322e33 00000b12: PUSH1 0xd8 00000b14: SHL 00000b15: PUSH1 0x20 00000b17: DUP4 00000b18: ADD 00000b19: MSTORE 00000b1a: JUMP 00000b1b: JUMPDEST 00000b1c: CALLVALUE 00000b1d: PUSH2 0x01ad 00000b20: JUMPI 00000b21: PUSH1 0x00 00000b23: CALLDATASIZE 00000b24: PUSH1 0x03 00000b26: NOT 00000b27: ADD 00000b28: SLT 00000b29: PUSH2 0x01ad 00000b2c: JUMPI 00000b2d: PUSH2 0x032e 00000b30: PUSH2 0x031a 00000b33: PUSH2 0x0afa 00000b36: JUMP 00000b37: JUMPDEST 00000b38: SWAP1 00000b39: PUSH1 0x40 00000b3b: PUSH1 0x03 00000b3d: NOT 00000b3e: DUP4 00000b3f: ADD 00000b40: SLT 00000b41: PUSH2 0x01ad 00000b44: JUMPI 00000b45: PUSH1 0x04 00000b47: CALLDATALOAD 00000b48: PUSH2 0x0b50 00000b4b: DUP2 00000b4c: PUSH2 0x0368 00000b4f: JUMP 00000b50: JUMPDEST 00000b51: SWAP2 00000b52: PUSH1 0x24 00000b54: CALLDATALOAD 00000b55: SWAP1 00000b56: PUSH1 0x01 00000b58: PUSH1 0x01 00000b5a: PUSH1 0x40 00000b5c: SHL 00000b5d: SUB 00000b5e: DUP3 00000b5f: GT 00000b60: PUSH2 0x01ad 00000b63: JUMPI 00000b64: PUSH2 0x043a 00000b67: SWAP2 00000b68: PUSH1 0x04 00000b6a: ADD 00000b6b: PUSH2 0x0384 00000b6e: JUMP 00000b6f: JUMPDEST 00000b70: PUSH2 0x0b78 00000b73: CALLDATASIZE 00000b74: PUSH2 0x0b37 00000b77: JUMP 00000b78: JUMPDEST 00000b79: SWAP1 00000b7a: SWAP2 00000b7b: PUSH1 0x01 00000b7d: PUSH1 0x01 00000b7f: PUSH1 0xa0 00000b81: SHL 00000b82: SUB 00000b83: CALLER 00000b84: PUSH32 0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789 00000ba5: DUP3 00000ba6: AND 00000ba7: EQ 00000ba8: ISZERO 00000ba9: DUP1 00000baa: PUSH2 0x0c4b 00000bad: JUMPI 00000bae: JUMPDEST 00000baf: PUSH2 0x061d 00000bb2: JUMPI 00000bb3: DUP1 00000bb4: PUSH1 0x00 00000bb6: DUP1 00000bb7: MLOAD 00000bb8: PUSH1 0x20 00000bba: PUSH2 0x2171 00000bbd: DUP4 00000bbe: CODECOPY 00000bbf: DUP2 00000bc0: MLOAD 00000bc1: SWAP2 00000bc2: MSTORE 00000bc3: SLOAD 00000bc4: PUSH1 0x50 00000bc6: SHR 00000bc7: AND 00000bc8: SWAP2 00000bc9: PUSH2 0x0bd1 00000bcc: DUP2 00000bcd: PUSH2 0x2078 00000bd0: JUMP 00000bd1: JUMPDEST 00000bd2: AND 00000bd3: SWAP3 00000bd4: DUP4 00000bd5: PUSH1 0x40 00000bd7: MLOAD 00000bd8: SWAP4 00000bd9: PUSH1 0x00 00000bdb: SWAP6 00000bdc: DUP7 00000bdd: SWAP5 00000bde: PUSH32 0xa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c 00000bff: DUP7 00000c00: DUP1 00000c01: LOG3 00000c02: DUP2 00000c03: EXTCODESIZE 00000c04: ISZERO 00000c05: PUSH2 0x0c47 00000c08: JUMPI 00000c09: DUP4 00000c0a: DUP6 00000c0b: PUSH2 0x0c25 00000c0e: DUP2 00000c0f: SWAP6 00000c10: SWAP4 00000c11: DUP3 00000c12: SWAP5 00000c13: PUSH4 0x064acaab 00000c18: PUSH1 0xe1 00000c1a: SHL 00000c1b: DUP5 00000c1c: MSTORE 00000c1d: PUSH1 0x04 00000c1f: DUP5 00000c20: ADD 00000c21: PUSH2 0x18b6 00000c24: JUMP 00000c25: JUMPDEST 00000c26: SUB 00000c27: SWAP3 00000c28: GAS 00000c29: CALL 00000c2a: DUP1 00000c2b: ISZERO 00000c2c: PUSH2 0x0618 00000c2f: JUMPI 00000c30: PUSH2 0x0c37 00000c33: JUMPI 00000c34: POP 00000c35: DUP1 00000c36: RETURN 00000c37: JUMPDEST 00000c38: DUP1 00000c39: PUSH2 0x060c 00000c3c: PUSH2 0x0c44 00000c3f: SWAP3 00000c40: PUSH2 0x01c8 00000c43: JUMP 00000c44: JUMPDEST 00000c45: DUP1 00000c46: RETURN 00000c47: JUMPDEST 00000c48: DUP4 00000c49: DUP1 00000c4a: REVERT 00000c4b: JUMPDEST 00000c4c: POP 00000c4d: ADDRESS 00000c4e: CALLER 00000c4f: EQ 00000c50: ISZERO 00000c51: PUSH2 0x0bae 00000c54: JUMP 00000c55: JUMPDEST 00000c56: CALLVALUE 00000c57: PUSH2 0x01ad 00000c5a: JUMPI 00000c5b: PUSH1 0x00 00000c5d: CALLDATASIZE 00000c5e: PUSH1 0x03 00000c60: NOT 00000c61: ADD 00000c62: SLT 00000c63: PUSH2 0x01ad 00000c66: JUMPI 00000c67: PUSH1 0x20 00000c69: PUSH1 0x00 00000c6b: DUP1 00000c6c: MLOAD 00000c6d: PUSH1 0x20 00000c6f: PUSH2 0x2171 00000c72: DUP4 00000c73: CODECOPY 00000c74: DUP2 00000c75: MLOAD 00000c76: SWAP2 00000c77: MSTORE 00000c78: SLOAD 00000c79: PUSH1 0xe0 00000c7b: SHL 00000c7c: PUSH1 0x40 00000c7e: MLOAD 00000c7f: SWAP1 00000c80: PUSH4 0xffffffff 00000c85: PUSH1 0xe0 00000c87: SHL 00000c88: AND 00000c89: DUP2 00000c8a: MSTORE 00000c8b: RETURN 00000c8c: JUMPDEST 00000c8d: CALLVALUE 00000c8e: PUSH2 0x01ad 00000c91: JUMPI 00000c92: PUSH1 0x00 00000c94: CALLDATASIZE 00000c95: PUSH1 0x03 00000c97: NOT 00000c98: ADD 00000c99: SLT 00000c9a: PUSH2 0x01ad 00000c9d: JUMPI 00000c9e: PUSH2 0x0ce2 00000ca1: PUSH2 0x0ca8 00000ca4: PUSH2 0x029c 00000ca7: JUMP 00000ca8: JUMPDEST 00000ca9: PUSH2 0x0cb0 00000cac: PUSH2 0x0afa 00000caf: JUMP 00000cb0: JUMPDEST 00000cb1: SWAP1 00000cb2: PUSH1 0x40 00000cb4: MLOAD 00000cb5: SWAP3 00000cb6: DUP4 00000cb7: SWAP3 00000cb8: PUSH1 0x0f 00000cba: PUSH1 0xf8 00000cbc: SHL 00000cbd: DUP5 00000cbe: MSTORE 00000cbf: PUSH2 0x0cd4 00000cc2: PUSH1 0x20 00000cc4: SWAP4 00000cc5: PUSH1 0xe0 00000cc7: DUP6 00000cc8: DUP8 00000cc9: ADD 00000cca: MSTORE 00000ccb: PUSH1 0xe0 00000ccd: DUP7 00000cce: ADD 00000ccf: SWAP1 00000cd0: PUSH2 0x02be 00000cd3: JUMP 00000cd4: JUMPDEST 00000cd5: SWAP1 00000cd6: DUP5 00000cd7: DUP3 00000cd8: SUB 00000cd9: PUSH1 0x40 00000cdb: DUP7 00000cdc: ADD 00000cdd: MSTORE 00000cde: PUSH2 0x02be 00000ce1: JUMP 00000ce2: JUMPDEST 00000ce3: SWAP1 00000ce4: CHAINID 00000ce5: PUSH1 0x60 00000ce7: DUP5 00000ce8: ADD 00000ce9: MSTORE 00000cea: ADDRESS 00000ceb: PUSH1 0x80 00000ced: DUP5 00000cee: ADD 00000cef: MSTORE 00000cf0: PUSH1 0x00 00000cf2: PUSH1 0xa0 00000cf4: DUP5 00000cf5: ADD 00000cf6: MSTORE 00000cf7: DUP3 00000cf8: DUP3 00000cf9: SUB 00000cfa: PUSH1 0xc0 00000cfc: DUP5 00000cfd: ADD 00000cfe: MSTORE 00000cff: DUP1 00000d00: PUSH1 0x60 00000d02: MLOAD 00000d03: SWAP3 00000d04: DUP4 00000d05: DUP2 00000d06: MSTORE 00000d07: ADD 00000d08: SWAP2 00000d09: PUSH1 0x80 00000d0b: SWAP2 00000d0c: PUSH1 0x00 00000d0e: JUMPDEST 00000d0f: DUP3 00000d10: DUP2 00000d11: LT 00000d12: PUSH2 0x0d1d 00000d15: JUMPI 00000d16: POP 00000d17: POP 00000d18: POP 00000d19: POP 00000d1a: SUB 00000d1b: SWAP1 00000d1c: RETURN 00000d1d: JUMPDEST 00000d1e: DUP4 00000d1f: MLOAD 00000d20: DUP6 00000d21: MSTORE 00000d22: DUP7 00000d23: SWAP6 00000d24: POP 00000d25: SWAP4 00000d26: DUP2 00000d27: ADD 00000d28: SWAP4 00000d29: SWAP3 00000d2a: DUP2 00000d2b: ADD 00000d2c: SWAP3 00000d2d: PUSH1 0x01 00000d2f: ADD 00000d30: PUSH2 0x0d0e 00000d33: JUMP 00000d34: JUMPDEST 00000d35: CALLVALUE 00000d36: PUSH2 0x01ad 00000d39: JUMPI 00000d3a: PUSH1 0x00 00000d3c: CALLDATASIZE 00000d3d: PUSH1 0x03 00000d3f: NOT 00000d40: ADD 00000d41: SLT 00000d42: PUSH2 0x01ad 00000d45: JUMPI 00000d46: PUSH1 0x20 00000d48: PUSH1 0x00 00000d4a: DUP1 00000d4b: MLOAD 00000d4c: PUSH1 0x20 00000d4e: PUSH2 0x2171 00000d51: DUP4 00000d52: CODECOPY 00000d53: DUP2 00000d54: MLOAD 00000d55: SWAP2 00000d56: MSTORE 00000d57: SLOAD 00000d58: PUSH6 0xffffffffffff 00000d5f: PUSH1 0x40 00000d61: MLOAD 00000d62: SWAP2 00000d63: DUP4 00000d64: SHR 00000d65: AND 00000d66: DUP2 00000d67: MSTORE 00000d68: RETURN 00000d69: JUMPDEST 00000d6a: CALLVALUE 00000d6b: PUSH2 0x01ad 00000d6e: JUMPI 00000d6f: PUSH1 0x00 00000d71: CALLDATASIZE 00000d72: PUSH1 0x03 00000d74: NOT 00000d75: ADD 00000d76: SLT 00000d77: PUSH2 0x01ad 00000d7a: JUMPI 00000d7b: PUSH1 0x40 00000d7d: MLOAD 00000d7e: PUSH32 0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789 00000d9f: PUSH1 0x01 00000da1: PUSH1 0x01 00000da3: PUSH1 0xa0 00000da5: SHL 00000da6: SUB 00000da7: AND 00000da8: DUP2 00000da9: MSTORE 00000daa: PUSH1 0x20 00000dac: SWAP1 00000dad: RETURN 00000dae: JUMPDEST 00000daf: PUSH1 0x40 00000db1: CALLDATASIZE 00000db2: PUSH1 0x03 00000db4: NOT 00000db5: ADD 00000db6: SLT 00000db7: PUSH2 0x01ad 00000dba: JUMPI 00000dbb: PUSH1 0x04 00000dbd: CALLDATALOAD 00000dbe: PUSH2 0x0dc6 00000dc1: DUP2 00000dc2: PUSH2 0x0368 00000dc5: JUMP 00000dc6: JUMPDEST 00000dc7: PUSH1 0x24 00000dc9: CALLDATALOAD 00000dca: PUSH1 0x01 00000dcc: PUSH1 0x01 00000dce: PUSH1 0x40 00000dd0: SHL 00000dd1: SUB 00000dd2: DUP2 00000dd3: GT 00000dd4: PUSH2 0x01ad 00000dd7: JUMPI 00000dd8: PUSH2 0x0de5 00000ddb: SWAP1 00000ddc: CALLDATASIZE 00000ddd: SWAP1 00000dde: PUSH1 0x04 00000de0: ADD 00000de1: PUSH2 0x06a0 00000de4: JUMP 00000de5: JUMPDEST 00000de6: SWAP1 00000de7: CALLER 00000de8: PUSH32 0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789 00000e09: PUSH1 0x01 00000e0b: PUSH1 0x01 00000e0d: PUSH1 0xa0 00000e0f: SHL 00000e10: SUB 00000e11: AND 00000e12: EQ 00000e13: ISZERO 00000e14: DUP1 00000e15: PUSH2 0x0e51 00000e18: JUMPI 00000e19: JUMPDEST 00000e1a: DUP1 00000e1b: PUSH2 0x0e40 00000e1e: JUMPI 00000e1f: JUMPDEST 00000e20: PUSH2 0x061d 00000e23: JUMPI 00000e24: PUSH1 0x00 00000e26: DUP3 00000e27: DUP2 00000e28: SWAP4 00000e29: SWAP3 00000e2a: PUSH1 0x20 00000e2c: DUP4 00000e2d: SWAP5 00000e2e: MLOAD 00000e2f: SWAP3 00000e30: ADD 00000e31: SWAP1 00000e32: GAS 00000e33: DELEGATECALL 00000e34: RETURNDATASIZE 00000e35: DUP3 00000e36: DUP1 00000e37: RETURNDATACOPY 00000e38: ISZERO 00000e39: PUSH2 0x0ac5 00000e3c: JUMPI 00000e3d: RETURNDATASIZE 00000e3e: SWAP1 00000e3f: RETURN 00000e40: JUMPDEST 00000e41: POP 00000e42: PUSH2 0x0e4c 00000e45: PUSH2 0x0ae7 00000e48: PUSH2 0x1d8c 00000e4b: JUMP 00000e4c: JUMPDEST 00000e4d: PUSH2 0x0e1f 00000e50: JUMP 00000e51: JUMPDEST 00000e52: POP 00000e53: ADDRESS 00000e54: CALLER 00000e55: EQ 00000e56: ISZERO 00000e57: PUSH2 0x0e19 00000e5a: JUMP 00000e5b: JUMPDEST 00000e5c: SWAP2 00000e5d: DUP2 00000e5e: PUSH1 0x1f 00000e60: DUP5 00000e61: ADD 00000e62: SLT 00000e63: ISZERO 00000e64: PUSH2 0x01ad 00000e67: JUMPI 00000e68: DUP3 00000e69: CALLDATALOAD 00000e6a: SWAP2 00000e6b: PUSH1 0x01 00000e6d: PUSH1 0x01 00000e6f: PUSH1 0x40 00000e71: SHL 00000e72: SUB 00000e73: DUP4 00000e74: GT 00000e75: PUSH2 0x01ad 00000e78: JUMPI 00000e79: PUSH1 0x20 00000e7b: DUP1 00000e7c: DUP6 00000e7d: ADD 00000e7e: SWAP5 00000e7f: DUP5 00000e80: PUSH1 0x05 00000e82: SHL 00000e83: ADD 00000e84: ADD 00000e85: GT 00000e86: PUSH2 0x01ad 00000e89: JUMPI 00000e8a: JUMP 00000e8b: JUMPDEST 00000e8c: CALLVALUE 00000e8d: PUSH2 0x01ad 00000e90: JUMPI 00000e91: PUSH1 0xa0 00000e93: CALLDATASIZE 00000e94: PUSH1 0x03 00000e96: NOT 00000e97: ADD 00000e98: SLT 00000e99: PUSH2 0x01ad 00000e9c: JUMPI 00000e9d: PUSH2 0x0ea7 00000ea0: PUSH1 0x04 00000ea2: CALLDATALOAD 00000ea3: PUSH2 0x0368 00000ea6: JUMP 00000ea7: JUMPDEST 00000ea8: PUSH2 0x0eb2 00000eab: PUSH1 0x24 00000ead: CALLDATALOAD 00000eae: PUSH2 0x0368 00000eb1: JUMP 00000eb2: JUMPDEST 00000eb3: PUSH1 0x01 00000eb5: PUSH1 0x01 00000eb7: PUSH1 0x40 00000eb9: SHL 00000eba: SUB 00000ebb: PUSH1 0x44 00000ebd: CALLDATALOAD 00000ebe: DUP2 00000ebf: DUP2 00000ec0: GT 00000ec1: PUSH2 0x01ad 00000ec4: JUMPI 00000ec5: PUSH2 0x0ed2 00000ec8: SWAP1 00000ec9: CALLDATASIZE 00000eca: SWAP1 00000ecb: PUSH1 0x04 00000ecd: ADD 00000ece: PUSH2 0x0e5b 00000ed1: JUMP 00000ed2: JUMPDEST 00000ed3: POP 00000ed4: POP 00000ed5: PUSH1 0x64 00000ed7: CALLDATALOAD 00000ed8: DUP2 00000ed9: DUP2 00000eda: GT 00000edb: PUSH2 0x01ad 00000ede: JUMPI 00000edf: PUSH2 0x0eec 00000ee2: SWAP1 00000ee3: CALLDATASIZE 00000ee4: SWAP1 00000ee5: PUSH1 0x04 00000ee7: ADD 00000ee8: PUSH2 0x0e5b 00000eeb: JUMP 00000eec: JUMPDEST 00000eed: POP 00000eee: POP 00000eef: PUSH1 0x84 00000ef1: CALLDATALOAD 00000ef2: SWAP1 00000ef3: DUP2 00000ef4: GT 00000ef5: PUSH2 0x01ad 00000ef8: JUMPI 00000ef9: PUSH2 0x0f06 00000efc: SWAP1 00000efd: CALLDATASIZE 00000efe: SWAP1 00000eff: PUSH1 0x04 00000f01: ADD 00000f02: PUSH2 0x0384 00000f05: JUMP 00000f06: JUMPDEST 00000f07: POP 00000f08: POP 00000f09: PUSH1 0x40 00000f0b: MLOAD 00000f0c: PUSH4 0xbc197c81 00000f11: PUSH1 0xe0 00000f13: SHL 00000f14: DUP2 00000f15: MSTORE 00000f16: PUSH1 0x20 00000f18: SWAP1 00000f19: RETURN 00000f1a: JUMPDEST 00000f1b: CALLVALUE 00000f1c: PUSH2 0x01ad 00000f1f: JUMPI 00000f20: PUSH1 0x00 00000f22: CALLDATASIZE 00000f23: PUSH1 0x03 00000f25: NOT 00000f26: ADD 00000f27: SLT 00000f28: PUSH2 0x01ad 00000f2b: JUMPI 00000f2c: PUSH1 0x40 00000f2e: MLOAD 00000f2f: PUSH4 0x1aab3f0d 00000f34: PUSH1 0xe1 00000f36: SHL 00000f37: DUP2 00000f38: MSTORE 00000f39: ADDRESS 00000f3a: PUSH1 0x04 00000f3c: DUP3 00000f3d: ADD 00000f3e: MSTORE 00000f3f: PUSH1 0x00 00000f41: PUSH1 0x24 00000f43: DUP3 00000f44: ADD 00000f45: MSTORE 00000f46: PUSH1 0x20 00000f48: DUP2 00000f49: PUSH1 0x44 00000f4b: DUP2 00000f4c: PUSH32 0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789 00000f6d: PUSH1 0x01 00000f6f: PUSH1 0x01 00000f71: PUSH1 0xa0 00000f73: SHL 00000f74: SUB 00000f75: AND 00000f76: GAS 00000f77: STATICCALL 00000f78: DUP1 00000f79: ISZERO 00000f7a: PUSH2 0x0618 00000f7d: JUMPI 00000f7e: PUSH2 0x032e 00000f81: SWAP2 00000f82: PUSH1 0x00 00000f84: SWAP2 00000f85: PUSH2 0x091f 00000f88: JUMPI 00000f89: POP 00000f8a: PUSH1 0x40 00000f8c: MLOAD 00000f8d: SWAP1 00000f8e: DUP2 00000f8f: MSTORE 00000f90: SWAP1 00000f91: DUP2 00000f92: SWAP1 00000f93: PUSH1 0x20 00000f95: DUP3 00000f96: ADD 00000f97: SWAP1 00000f98: JUMP 00000f99: JUMPDEST 00000f9a: PUSH2 0x0fa2 00000f9d: CALLDATASIZE 00000f9e: PUSH2 0x0b37 00000fa1: JUMP 00000fa2: JUMPDEST 00000fa3: PUSH1 0x00 00000fa5: DUP1 00000fa6: MLOAD 00000fa7: PUSH1 0x20 00000fa9: PUSH2 0x2171 00000fac: DUP4 00000fad: CODECOPY 00000fae: DUP2 00000faf: MLOAD 00000fb0: SWAP2 00000fb1: MSTORE 00000fb2: SLOAD 00000fb3: SWAP2 00000fb4: SWAP3 00000fb5: SWAP1 00000fb6: SWAP2 00000fb7: PUSH1 0x01 00000fb9: PUSH1 0x01 00000fbb: PUSH1 0xa0 00000fbd: SHL 00000fbe: SUB 00000fbf: SWAP2 00000fc0: SWAP1 00000fc1: PUSH1 0x50 00000fc3: SHR 00000fc4: DUP3 00000fc5: AND 00000fc6: PUSH2 0x1024 00000fc9: JUMPI 00000fca: PUSH2 0x0fd2 00000fcd: DUP2 00000fce: PUSH2 0x2078 00000fd1: JUMP 00000fd2: JUMPDEST 00000fd3: AND 00000fd4: SWAP2 00000fd5: DUP3 00000fd6: EXTCODESIZE 00000fd7: ISZERO 00000fd8: PUSH2 0x01ad 00000fdb: JUMPI 00000fdc: PUSH2 0x1007 00000fdf: SWAP3 00000fe0: PUSH1 0x00 00000fe2: SWAP3 00000fe3: DUP4 00000fe4: PUSH1 0x40 00000fe6: MLOAD 00000fe7: DUP1 00000fe8: SWAP7 00000fe9: DUP2 00000fea: SWAP6 00000feb: DUP3 00000fec: SWAP5 00000fed: PUSH4 0x064acaab 00000ff2: PUSH1 0xe1 00000ff4: SHL 00000ff5: DUP5 00000ff6: MSTORE 00000ff7: PUSH1 0x20 00000ff9: PUSH1 0x04 00000ffb: DUP6 00000ffc: ADD 00000ffd: MSTORE 00000ffe: PUSH1 0x24 00001000: DUP5 00001001: ADD 00001002: SWAP2 00001003: PUSH2 0x1895 00001006: JUMP 00001007: JUMPDEST 00001008: SUB 00001009: SWAP3 0000100a: GAS 0000100b: CALL 0000100c: DUP1 0000100d: ISZERO 0000100e: PUSH2 0x0618 00001011: JUMPI 00001012: PUSH2 0x1017 00001015: JUMPI 00001016: STOP 00001017: JUMPDEST 00001018: DUP1 00001019: PUSH2 0x060c 0000101c: PUSH2 0x001b 0000101f: SWAP3 00001020: PUSH2 0x01c8 00001023: JUMP 00001024: JUMPDEST 00001025: PUSH1 0x40 00001027: MLOAD 00001028: PUSH3 0xdc149f 0000102c: PUSH1 0xe4 0000102e: SHL 0000102f: DUP2 00001030: MSTORE 00001031: PUSH1 0x04 00001033: SWAP1 00001034: REVERT 00001035: JUMPDEST 00001036: PUSH1 0x20 00001038: CALLDATASIZE 00001039: PUSH1 0x03 0000103b: NOT 0000103c: ADD 0000103d: SLT 0000103e: PUSH2 0x01ad 00001041: JUMPI 00001042: PUSH2 0x1049 00001045: PUSH2 0x046a 00001048: JUMP 00001049: JUMPDEST 0000104a: CALLER 0000104b: PUSH32 0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789 0000106c: PUSH1 0x01 0000106e: PUSH1 0x01 00001070: PUSH1 0xa0 00001072: SHL 00001073: SUB 00001074: AND 00001075: EQ 00001076: ISZERO 00001077: DUP1 00001078: PUSH2 0x10bd 0000107b: JUMPI 0000107c: JUMPDEST 0000107d: PUSH2 0x061d 00001080: JUMPI 00001081: PUSH1 0x00 00001083: DUP1 00001084: MLOAD 00001085: PUSH1 0x20 00001087: PUSH2 0x2171 0000108a: DUP4 0000108b: CODECOPY 0000108c: DUP2 0000108d: MLOAD 0000108e: SWAP2 0000108f: MSTORE 00001090: SWAP1 00001091: DUP2 00001092: SLOAD 00001093: PUSH10 0xffffffffffff00000000 0000109e: TIMESTAMP 0000109f: PUSH1 0x20 000010a1: SHL 000010a2: AND 000010a3: SWAP2 000010a4: PUSH1 0xe0 000010a6: SHR 000010a7: SWAP1 000010a8: PUSH10 0xffffffffffffffffffff 000010b3: NOT 000010b4: AND 000010b5: OR 000010b6: OR 000010b7: SWAP1 000010b8: SSTORE 000010b9: PUSH1 0x00 000010bb: DUP1 000010bc: RETURN 000010bd: JUMPDEST 000010be: POP 000010bf: ADDRESS 000010c0: CALLER 000010c1: EQ 000010c2: ISZERO 000010c3: PUSH2 0x107c 000010c6: JUMP 000010c7: JUMPDEST 000010c8: CALLVALUE 000010c9: PUSH2 0x01ad 000010cc: JUMPI 000010cd: PUSH1 0xa0 000010cf: CALLDATASIZE 000010d0: PUSH1 0x03 000010d2: NOT 000010d3: ADD 000010d4: SLT 000010d5: PUSH2 0x01ad 000010d8: JUMPI 000010d9: PUSH2 0x10e3 000010dc: PUSH1 0x04 000010de: CALLDATALOAD 000010df: PUSH2 0x0368 000010e2: JUMP 000010e3: JUMPDEST 000010e4: PUSH2 0x10ee 000010e7: PUSH1 0x24 000010e9: CALLDATALOAD 000010ea: PUSH2 0x0368 000010ed: JUMP 000010ee: JUMPDEST 000010ef: PUSH1 0x84 000010f1: CALLDATALOAD 000010f2: PUSH1 0x01 000010f4: PUSH1 0x01 000010f6: PUSH1 0x40 000010f8: SHL 000010f9: SUB 000010fa: DUP2 000010fb: GT 000010fc: PUSH2 0x01ad 000010ff: JUMPI 00001100: PUSH2 0x110d 00001103: SWAP1 00001104: CALLDATASIZE 00001105: SWAP1 00001106: PUSH1 0x04 00001108: ADD 00001109: PUSH2 0x0384 0000110c: JUMP 0000110d: JUMPDEST 0000110e: POP 0000110f: POP 00001110: PUSH1 0x40 00001112: MLOAD 00001113: PUSH4 0xf23a6e61 00001118: PUSH1 0xe0 0000111a: SHL 0000111b: DUP2 0000111c: MSTORE 0000111d: PUSH1 0x20 0000111f: SWAP1 00001120: RETURN 00001121: JUMPDEST 00001122: PUSH4 0xffffffff 00001127: PUSH1 0xe0 00001129: SHL 0000112a: AND 0000112b: PUSH1 0x00 0000112d: MSTORE 0000112e: PUSH32 0x439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda 0000114f: PUSH1 0x20 00001151: MSTORE 00001152: PUSH1 0x40 00001154: PUSH1 0x00 00001156: KECCAK256 00001157: SWAP1 00001158: JUMP 00001159: JUMPDEST 0000115a: PUSH1 0x00 0000115c: PUSH2 0x116f 0000115f: DUP2 00001160: CALLDATALOAD 00001161: PUSH1 0x01 00001163: PUSH1 0x01 00001165: PUSH1 0xe0 00001167: SHL 00001168: SUB 00001169: NOT 0000116a: AND 0000116b: PUSH2 0x1121 0000116e: JUMP 0000116f: JUMPDEST 00001170: SLOAD 00001171: PUSH1 0x60 00001173: SHR 00001174: CALLER 00001175: PUSH32 0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789 00001196: PUSH1 0x01 00001198: PUSH1 0x01 0000119a: PUSH1 0xa0 0000119c: SHL 0000119d: SUB 0000119e: AND 0000119f: EQ 000011a0: ISZERO 000011a1: DUP1 000011a2: PUSH2 0x11c3 000011a5: JUMPI 000011a6: JUMPDEST 000011a7: PUSH2 0x061d 000011aa: JUMPI 000011ab: DUP2 000011ac: DUP1 000011ad: SWAP2 000011ae: CALLDATASIZE 000011af: DUP3 000011b0: DUP1 000011b1: CALLDATACOPY 000011b2: DUP2 000011b3: CALLDATASIZE 000011b4: SWAP2 000011b5: GAS 000011b6: DELEGATECALL 000011b7: RETURNDATASIZE 000011b8: DUP3 000011b9: DUP1 000011ba: RETURNDATACOPY 000011bb: ISZERO 000011bc: PUSH2 0x0ac5 000011bf: JUMPI 000011c0: RETURNDATASIZE 000011c1: SWAP1 000011c2: RETURN 000011c3: JUMPDEST 000011c4: POP 000011c5: PUSH2 0x11cc 000011c8: PUSH2 0x1d8c 000011cb: JUMP 000011cc: JUMPDEST 000011cd: ISZERO 000011ce: PUSH2 0x11a6 000011d1: JUMP 000011d2: JUMPDEST 000011d3: PUSH1 0x02 000011d5: GT 000011d6: ISZERO 000011d7: PUSH2 0x11dc 000011da: JUMPI 000011db: JUMP 000011dc: JUMPDEST 000011dd: PUSH4 0x4e487b71 000011e2: PUSH1 0xe0 000011e4: SHL 000011e5: PUSH1 0x00 000011e7: MSTORE 000011e8: PUSH1 0x21 000011ea: PUSH1 0x04 000011ec: MSTORE 000011ed: PUSH1 0x24 000011ef: PUSH1 0x00 000011f1: REVERT 000011f2: JUMPDEST 000011f3: DUP1 000011f4: MLOAD 000011f5: DUP3 000011f6: LT 000011f7: ISZERO 000011f8: PUSH2 0x1206 000011fb: JUMPI 000011fc: PUSH1 0x20 000011fe: SWAP2 000011ff: PUSH1 0x05 00001201: SHL 00001202: ADD 00001203: ADD 00001204: SWAP1 00001205: JUMP 00001206: JUMPDEST 00001207: PUSH4 0x4e487b71 0000120c: PUSH1 0xe0 0000120e: SHL 0000120f: PUSH1 0x00 00001211: MSTORE 00001212: PUSH1 0x32 00001214: PUSH1 0x04 00001216: MSTORE 00001217: PUSH1 0x24 00001219: PUSH1 0x00 0000121b: REVERT 0000121c: JUMPDEST 0000121d: CALLER 0000121e: PUSH32 0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789 0000123f: PUSH1 0x01 00001241: PUSH1 0x01 00001243: PUSH1 0xa0 00001245: SHL 00001246: SUB 00001247: AND 00001248: EQ 00001249: ISZERO 0000124a: DUP1 0000124b: PUSH2 0x12a9 0000124e: JUMPI 0000124f: JUMPDEST 00001250: PUSH2 0x061d 00001253: JUMPI 00001254: DUP1 00001255: MLOAD 00001256: SWAP1 00001257: PUSH1 0x00 00001259: JUMPDEST 0000125a: DUP3 0000125b: DUP2 0000125c: LT 0000125d: PUSH2 0x1265 00001260: JUMPI 00001261: POP 00001262: POP 00001263: POP 00001264: JUMP 00001265: JUMPDEST 00001266: PUSH1 0x00 00001268: DUP1 00001269: PUSH2 0x1272 0000126c: DUP4 0000126d: DUP6 0000126e: PUSH2 0x11f2 00001271: JUMP 00001272: JUMPDEST 00001273: MLOAD 00001274: DUP1 00001275: MLOAD 00001276: PUSH1 0x01 00001278: PUSH1 0x01 0000127a: PUSH1 0xa0 0000127c: SHL 0000127d: SUB 0000127e: AND 0000127f: PUSH1 0x20 00001281: SWAP2 00001282: PUSH1 0x40 00001284: DUP4 00001285: DUP3 00001286: ADD 00001287: MLOAD 00001288: SWAP2 00001289: ADD 0000128a: MLOAD 0000128b: SWAP3 0000128c: DUP4 0000128d: MLOAD 0000128e: SWAP4 0000128f: ADD 00001290: SWAP2 00001291: GAS 00001292: CALL 00001293: RETURNDATASIZE 00001294: PUSH1 0x00 00001296: DUP1 00001297: RETURNDATACOPY 00001298: ISZERO 00001299: PUSH2 0x12a4 0000129c: JUMPI 0000129d: PUSH1 0x01 0000129f: ADD 000012a0: PUSH2 0x1259 000012a3: JUMP 000012a4: JUMPDEST 000012a5: RETURNDATASIZE 000012a6: PUSH1 0x00 000012a8: REVERT 000012a9: JUMPDEST 000012aa: POP 000012ab: PUSH2 0x12b5 000012ae: PUSH2 0x0ae7 000012b1: PUSH2 0x1d8c 000012b4: JUMP 000012b5: JUMPDEST 000012b6: PUSH2 0x124f 000012b9: JUMP 000012ba: JUMPDEST 000012bb: SWAP1 000012bc: PUSH1 0x04 000012be: GT 000012bf: PUSH2 0x01ad 000012c2: JUMPI 000012c3: SWAP1 000012c4: PUSH1 0x04 000012c6: SWAP1 000012c7: JUMP 000012c8: JUMPDEST 000012c9: SWAP1 000012ca: SWAP3 000012cb: SWAP2 000012cc: SWAP3 000012cd: DUP4 000012ce: PUSH1 0x04 000012d0: GT 000012d1: PUSH2 0x01ad 000012d4: JUMPI 000012d5: DUP4 000012d6: GT 000012d7: PUSH2 0x01ad 000012da: JUMPI 000012db: PUSH1 0x04 000012dd: ADD 000012de: SWAP2 000012df: PUSH1 0x03 000012e1: NOT 000012e2: ADD 000012e3: SWAP1 000012e4: JUMP 000012e5: JUMPDEST 000012e6: SWAP1 000012e7: PUSH1 0x24 000012e9: GT 000012ea: PUSH2 0x01ad 000012ed: JUMPI 000012ee: PUSH1 0x10 000012f0: ADD 000012f1: SWAP1 000012f2: PUSH1 0x14 000012f4: SWAP1 000012f5: JUMP 000012f6: JUMPDEST 000012f7: SWAP1 000012f8: PUSH1 0x58 000012fa: GT 000012fb: PUSH2 0x01ad 000012fe: JUMPI 000012ff: PUSH1 0x38 00001301: ADD 00001302: SWAP1 00001303: PUSH1 0x20 00001305: SWAP1 00001306: JUMP 00001307: JUMPDEST 00001308: SWAP1 00001309: PUSH1 0x24 0000130b: GT 0000130c: PUSH2 0x01ad 0000130f: JUMPI 00001310: PUSH1 0x04 00001312: ADD 00001313: SWAP1 00001314: PUSH1 0x20 00001316: SWAP1 00001317: JUMP 00001318: JUMPDEST 00001319: SWAP1 0000131a: PUSH1 0x38 0000131c: GT 0000131d: PUSH2 0x01ad 00001320: JUMPI 00001321: PUSH1 0x24 00001323: ADD 00001324: SWAP1 00001325: PUSH1 0x14 00001327: SWAP1 00001328: JUMP 00001329: JUMPDEST 0000132a: SWAP1 0000132b: PUSH1 0x0a 0000132d: GT 0000132e: PUSH2 0x01ad 00001331: JUMPI 00001332: PUSH1 0x04 00001334: ADD 00001335: SWAP1 00001336: PUSH1 0x06 00001338: SWAP1 00001339: JUMP 0000133a: JUMPDEST 0000133b: SWAP1 0000133c: PUSH1 0x10 0000133e: GT 0000133f: PUSH2 0x01ad 00001342: JUMPI 00001343: PUSH1 0x0a 00001345: ADD 00001346: SWAP1 00001347: PUSH1 0x06 00001349: SWAP1 0000134a: JUMP 0000134b: JUMPDEST 0000134c: SWAP1 0000134d: SWAP4 0000134e: SWAP3 0000134f: SWAP4 00001350: DUP5 00001351: DUP4 00001352: GT 00001353: PUSH2 0x01ad 00001356: JUMPI 00001357: DUP5 00001358: GT 00001359: PUSH2 0x01ad 0000135c: JUMPI 0000135d: DUP2 0000135e: ADD 0000135f: SWAP3 00001360: SUB 00001361: SWAP1 00001362: JUMP 00001363: JUMPDEST 00001364: PUSH1 0x01 00001366: PUSH1 0x01 00001368: PUSH1 0xe0 0000136a: SHL 0000136b: SUB 0000136c: NOT 0000136d: SWAP1 0000136e: CALLDATALOAD 0000136f: DUP2 00001370: DUP2 00001371: AND 00001372: SWAP4 00001373: SWAP3 00001374: PUSH1 0x04 00001376: DUP2 00001377: LT 00001378: PUSH2 0x1380 0000137b: JUMPI 0000137c: POP 0000137d: POP 0000137e: POP 0000137f: JUMP 00001380: JUMPDEST 00001381: PUSH1 0x04 00001383: SUB 00001384: PUSH1 0x03 00001386: SHL 00001387: DUP3 00001388: SWAP1 00001389: SHL 0000138a: AND 0000138b: AND 0000138c: SWAP2 0000138d: POP 0000138e: JUMP 0000138f: JUMPDEST 00001390: SWAP2 00001391: SWAP1 00001392: PUSH2 0x0160 00001395: DUP4 00001396: DUP3 00001397: SUB 00001398: SLT 00001399: PUSH2 0x01ad 0000139c: JUMPI 0000139d: PUSH2 0x13a4 000013a0: PUSH2 0x027c 000013a3: JUMP 000013a4: JUMPDEST 000013a5: SWAP3 000013a6: PUSH2 0x13ae 000013a9: DUP2 000013aa: PUSH2 0x0379 000013ad: JUMP 000013ae: JUMPDEST 000013af: DUP5 000013b0: MSTORE 000013b1: PUSH1 0x20 000013b3: DUP2 000013b4: ADD 000013b5: CALLDATALOAD 000013b6: PUSH1 0x20 000013b8: DUP6 000013b9: ADD 000013ba: MSTORE 000013bb: PUSH1 0x40 000013bd: DUP2 000013be: ADD 000013bf: CALLDATALOAD 000013c0: SWAP2 000013c1: PUSH1 0x01 000013c3: PUSH1 0x01 000013c5: PUSH1 0x40 000013c7: SHL 000013c8: SUB 000013c9: SWAP3 000013ca: DUP4 000013cb: DUP2 000013cc: GT 000013cd: PUSH2 0x01ad 000013d0: JUMPI 000013d1: DUP2 000013d2: PUSH2 0x13dc 000013d5: SWAP2 000013d6: DUP5 000013d7: ADD 000013d8: PUSH2 0x06a0 000013db: JUMP 000013dc: JUMPDEST 000013dd: PUSH1 0x40 000013df: DUP7 000013e0: ADD 000013e1: MSTORE 000013e2: PUSH1 0x60 000013e4: DUP3 000013e5: ADD 000013e6: CALLDATALOAD 000013e7: DUP4 000013e8: DUP2 000013e9: GT 000013ea: PUSH2 0x01ad 000013ed: JUMPI 000013ee: DUP2 000013ef: PUSH2 0x13f9 000013f2: SWAP2 000013f3: DUP5 000013f4: ADD 000013f5: PUSH2 0x06a0 000013f8: JUMP 000013f9: JUMPDEST 000013fa: PUSH1 0x60 000013fc: DUP7 000013fd: ADD 000013fe: MSTORE 000013ff: PUSH1 0x80 00001401: DUP3 00001402: ADD 00001403: CALLDATALOAD 00001404: PUSH1 0x80 00001406: DUP7 00001407: ADD 00001408: MSTORE 00001409: PUSH1 0xa0 0000140b: DUP3 0000140c: ADD 0000140d: CALLDATALOAD 0000140e: PUSH1 0xa0 00001410: DUP7 00001411: ADD 00001412: MSTORE 00001413: PUSH1 0xc0 00001415: DUP3 00001416: ADD 00001417: CALLDATALOAD 00001418: PUSH1 0xc0 0000141a: DUP7 0000141b: ADD 0000141c: MSTORE 0000141d: PUSH1 0xe0 0000141f: DUP3 00001420: ADD 00001421: CALLDATALOAD 00001422: PUSH1 0xe0 00001424: DUP7 00001425: ADD 00001426: MSTORE 00001427: PUSH2 0x0100 0000142a: DUP1 0000142b: DUP4 0000142c: ADD 0000142d: CALLDATALOAD 0000142e: SWAP1 0000142f: DUP7 00001430: ADD 00001431: MSTORE 00001432: PUSH2 0x0120 00001435: DUP1 00001436: DUP4 00001437: ADD 00001438: CALLDATALOAD 00001439: DUP5 0000143a: DUP2 0000143b: GT 0000143c: PUSH2 0x01ad 0000143f: JUMPI 00001440: DUP3 00001441: PUSH2 0x144b 00001444: SWAP2 00001445: DUP6 00001446: ADD 00001447: PUSH2 0x06a0 0000144a: JUMP 0000144b: JUMPDEST 0000144c: SWAP1 0000144d: DUP7 0000144e: ADD 0000144f: MSTORE 00001450: PUSH2 0x0140 00001453: SWAP3 00001454: DUP4 00001455: DUP4 00001456: ADD 00001457: CALLDATALOAD 00001458: SWAP1 00001459: DUP2 0000145a: GT 0000145b: PUSH2 0x01ad 0000145e: JUMPI 0000145f: PUSH2 0x1468 00001462: SWAP3 00001463: ADD 00001464: PUSH2 0x06a0 00001467: JUMP 00001468: JUMPDEST 00001469: SWAP1 0000146a: DUP4 0000146b: ADD 0000146c: MSTORE 0000146d: JUMP 0000146e: JUMPDEST 0000146f: SWAP1 00001470: DUP2 00001471: PUSH1 0x20 00001473: SWAP2 00001474: SUB 00001475: SLT 00001476: PUSH2 0x01ad 00001479: JUMPI 0000147a: MLOAD 0000147b: SWAP1 0000147c: JUMP 0000147d: JUMPDEST 0000147e: PUSH1 0x60 00001480: DUP1 00001481: DUP3 00001482: MSTORE 00001483: DUP3 00001484: MLOAD 00001485: PUSH1 0x01 00001487: PUSH1 0x01 00001489: PUSH1 0xa0 0000148b: SHL 0000148c: SUB 0000148d: AND 0000148e: SWAP1 0000148f: DUP3 00001490: ADD 00001491: MSTORE 00001492: SWAP2 00001493: SWAP4 00001494: SWAP3 00001495: SWAP2 00001496: PUSH1 0x40 00001498: SWAP2 00001499: PUSH2 0x1543 0000149c: SWAP1 0000149d: PUSH1 0x20 0000149f: DUP2 000014a0: ADD 000014a1: MLOAD 000014a2: PUSH1 0x80 000014a4: DUP5 000014a5: ADD 000014a6: MSTORE 000014a7: DUP4 000014a8: DUP2 000014a9: ADD 000014aa: MLOAD 000014ab: PUSH2 0x14c2 000014ae: PUSH2 0x0160 000014b1: SWAP2 000014b2: DUP3 000014b3: PUSH1 0xa0 000014b5: DUP8 000014b6: ADD 000014b7: MSTORE 000014b8: PUSH2 0x01c0 000014bb: DUP7 000014bc: ADD 000014bd: SWAP1 000014be: PUSH2 0x02be 000014c1: JUMP 000014c2: JUMPDEST 000014c3: SWAP1 000014c4: PUSH2 0x1530 000014c7: PUSH2 0x14e2 000014ca: PUSH1 0x60 000014cc: DUP6 000014cd: ADD 000014ce: MLOAD 000014cf: SWAP4 000014d0: PUSH1 0x5f 000014d2: NOT 000014d3: SWAP5 000014d4: DUP6 000014d5: DUP10 000014d6: DUP4 000014d7: SUB 000014d8: ADD 000014d9: PUSH1 0xc0 000014db: DUP11 000014dc: ADD 000014dd: MSTORE 000014de: PUSH2 0x02be 000014e1: JUMP 000014e2: JUMPDEST 000014e3: PUSH1 0x80 000014e5: DUP6 000014e6: ADD 000014e7: MLOAD 000014e8: PUSH1 0xe0 000014ea: DUP9 000014eb: ADD 000014ec: MSTORE 000014ed: PUSH1 0xa0 000014ef: DUP6 000014f0: ADD 000014f1: MLOAD 000014f2: SWAP3 000014f3: PUSH2 0x0100 000014f6: SWAP4 000014f7: DUP5 000014f8: DUP10 000014f9: ADD 000014fa: MSTORE 000014fb: PUSH1 0xc0 000014fd: DUP7 000014fe: ADD 000014ff: MLOAD 00001500: SWAP1 00001501: PUSH2 0x0120 00001504: SWAP2 00001505: DUP3 00001506: DUP11 00001507: ADD 00001508: MSTORE 00001509: PUSH1 0xe0 0000150b: DUP8 0000150c: ADD 0000150d: MLOAD 0000150e: SWAP5 0000150f: PUSH2 0x0140 00001512: SWAP6 00001513: DUP7 00001514: DUP12 00001515: ADD 00001516: MSTORE 00001517: DUP8 00001518: ADD 00001519: MLOAD 0000151a: SWAP1 0000151b: DUP10 0000151c: ADD 0000151d: MSTORE 0000151e: DUP6 0000151f: ADD 00001520: MLOAD 00001521: DUP5 00001522: DUP9 00001523: DUP4 00001524: SUB 00001525: ADD 00001526: PUSH2 0x0180 00001529: DUP10 0000152a: ADD 0000152b: MSTORE 0000152c: PUSH2 0x02be 0000152f: JUMP 00001530: JUMPDEST 00001531: SWAP3 00001532: ADD 00001533: MLOAD 00001534: SWAP1 00001535: DUP5 00001536: DUP4 00001537: SUB 00001538: ADD 00001539: PUSH2 0x01a0 0000153c: DUP6 0000153d: ADD 0000153e: MSTORE 0000153f: PUSH2 0x02be 00001542: JUMP 00001543: JUMPDEST 00001544: SWAP5 00001545: PUSH1 0x20 00001547: DUP3 00001548: ADD 00001549: MSTORE 0000154a: ADD 0000154b: MSTORE 0000154c: JUMP 0000154d: JUMPDEST 0000154e: PUSH1 0x40 00001550: MLOAD 00001551: RETURNDATASIZE 00001552: PUSH1 0x00 00001554: DUP3 00001555: RETURNDATACOPY 00001556: RETURNDATASIZE 00001557: SWAP1 00001558: REVERT 00001559: JUMPDEST 0000155a: PUSH1 0x01 0000155c: PUSH1 0x01 0000155e: PUSH1 0xa0 00001560: SHL 00001561: SUB 00001562: SWAP4 00001563: SWAP3 00001564: SWAP2 00001565: PUSH32 0x0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789 00001586: DUP6 00001587: AND 00001588: CALLER 00001589: SUB 0000158a: PUSH2 0x1777 0000158d: JUMPI 0000158e: PUSH1 0x04 00001590: SWAP5 00001591: DUP6 00001592: CALLDATALOAD 00001593: SWAP3 00001594: DUP4 00001595: PUSH2 0x0144 00001598: DUP2 00001599: ADD 0000159a: CALLDATALOAD 0000159b: ADD 0000159c: SWAP2 0000159d: DUP8 0000159e: PUSH1 0x24 000015a0: DUP5 000015a1: ADD 000015a2: SWAP4 000015a3: ADD 000015a4: CALLDATALOAD 000015a5: SWAP5 000015a6: PUSH2 0x15b8 000015a9: PUSH2 0x15b2 000015ac: DUP8 000015ad: DUP7 000015ae: PUSH2 0x12ba 000015b1: JUMP 000015b2: JUMPDEST 000015b3: SWAP1 000015b4: PUSH2 0x1363 000015b7: JUMP 000015b8: JUMPDEST 000015b9: SWAP3 000015ba: PUSH1 0x01 000015bc: PUSH1 0x01 000015be: PUSH1 0xe0 000015c0: SHL 000015c1: SUB 000015c2: NOT 000015c3: DUP1 000015c4: DUP6 000015c5: AND 000015c6: SWAP2 000015c7: DUP3 000015c8: ISZERO 000015c9: PUSH2 0x1754 000015cc: JUMPI 000015cd: PUSH2 0x15d7 000015d0: SWAP1 000015d1: CALLDATASIZE 000015d2: SWAP1 000015d3: PUSH2 0x138f 000015d6: JUMP 000015d7: JUMPDEST 000015d8: SWAP5 000015d9: PUSH2 0x15f1 000015dc: PUSH1 0x00 000015de: DUP1 000015df: MLOAD 000015e0: PUSH1 0x20 000015e2: PUSH2 0x2171 000015e5: DUP4 000015e6: CODECOPY 000015e7: DUP2 000015e8: MLOAD 000015e9: SWAP2 000015ea: MSTORE 000015eb: SLOAD 000015ec: PUSH1 0xe0 000015ee: SHL 000015ef: SWAP1 000015f0: JUMP 000015f1: JUMPDEST 000015f2: AND 000015f3: AND 000015f4: ISZERO 000015f5: PUSH2 0x1609 000015f8: JUMPI 000015f9: PUSH1 0x40 000015fb: MLOAD 000015fc: PUSH4 0xfc2f51c5 00001601: PUSH1 0xe0 00001603: SHL 00001604: DUP2 00001605: MSTORE 00001606: DUP11 00001607: SWAP1 00001608: REVERT 00001609: JUMPDEST 0000160a: SWAP8 0000160b: SWAP9 0000160c: SWAP7 0000160d: SWAP8 0000160e: PUSH1 0x01 00001610: PUSH1 0xe0 00001612: SHL 00001613: DUP2 00001614: SUB 00001615: PUSH2 0x1703 00001618: JUMPI 00001619: POP 0000161a: SWAP1 0000161b: PUSH1 0x20 0000161d: SWAP6 0000161e: SWAP7 0000161f: PUSH2 0x1693 00001622: PUSH2 0x1661 00001625: PUSH2 0x1648 00001628: PUSH2 0x1643 0000162b: PUSH2 0x15b2 0000162e: DUP8 0000162f: PUSH1 0x64 00001631: PUSH1 0x00 00001633: SWAP10 00001634: ADD 00001635: CALLDATALOAD 00001636: ADD 00001637: PUSH1 0x24 00001639: DUP8 0000163a: DUP3 0000163b: ADD 0000163c: CALLDATALOAD 0000163d: SWAP2 0000163e: ADD 0000163f: PUSH2 0x12ba 00001642: JUMP 00001643: JUMPDEST 00001644: PUSH2 0x1121 00001647: JUMP 00001648: JUMPDEST 00001649: PUSH1 0x01 0000164b: DUP2 0000164c: ADD 0000164d: SLOAD 0000164e: SWAP1 0000164f: SWAP11 00001650: SWAP1 00001651: DUP2 00001652: SWAP1 00001653: PUSH1 0x01 00001655: PUSH1 0x01 00001657: PUSH1 0xa0 00001659: SHL 0000165a: SUB 0000165b: AND 0000165c: SWAP9 0000165d: PUSH2 0x12c8 00001660: JUMP 00001661: JUMPDEST 00001662: SWAP10 00001663: SLOAD 00001664: PUSH1 0xd0 00001666: DUP2 00001667: SWAP1 00001668: SHL 00001669: PUSH1 0x01 0000166b: PUSH1 0x01 0000166d: PUSH1 0xd0 0000166f: SHL 00001670: SUB 00001671: NOT 00001672: AND 00001673: PUSH1 0x70 00001675: SWAP2 00001676: SWAP1 00001677: SWAP2 00001678: SHL 00001679: PUSH6 0xffffffffffff 00001680: PUSH1 0xa0 00001682: SHL 00001683: AND 00001684: OR 00001685: SWAP10 00001686: JUMPDEST 00001687: DUP12 00001688: PUSH2 0x16f5 0000168b: JUMPI 0000168c: JUMPDEST 0000168d: CALLDATASIZE 0000168e: SWAP2 0000168f: PUSH2 0x065a 00001692: JUMP 00001693: JUMPDEST 00001694: PUSH2 0x0140 00001697: DUP6 00001698: ADD 00001699: MSTORE 0000169a: PUSH2 0x16b7 0000169d: PUSH1 0x40 0000169f: MLOAD 000016a0: SWAP10 000016a1: DUP11 000016a2: SWAP8 000016a3: DUP9 000016a4: SWAP7 000016a5: DUP8 000016a6: SWAP5 000016a7: PUSH4 0x3a871cdd 000016ac: PUSH1 0xe0 000016ae: SHL 000016af: DUP7 000016b0: MSTORE 000016b1: DUP6 000016b2: ADD 000016b3: PUSH2 0x147d 000016b6: JUMP 000016b7: JUMPDEST 000016b8: SUB 000016b9: SWAP4 000016ba: AND 000016bb: GAS 000016bc: CALL 000016bd: SWAP1 000016be: DUP2 000016bf: ISZERO 000016c0: PUSH2 0x0618 000016c3: JUMPI 000016c4: PUSH2 0x06bb 000016c7: SWAP3 000016c8: PUSH1 0x00 000016ca: SWAP3 000016cb: PUSH2 0x16d5 000016ce: JUMPI 000016cf: JUMPDEST 000016d0: POP 000016d1: PUSH2 0x20ee 000016d4: JUMP 000016d5: JUMPDEST 000016d6: PUSH2 0x16ee 000016d9: SWAP2 000016da: SWAP3 000016db: POP 000016dc: PUSH1 0x20 000016de: RETURNDATASIZE 000016df: DUP2 000016e0: GT 000016e1: PUSH2 0x0946 000016e4: JUMPI 000016e5: PUSH2 0x0938 000016e8: DUP2 000016e9: DUP4 000016ea: PUSH2 0x024c 000016ed: JUMP 000016ee: JUMPDEST 000016ef: SWAP1 000016f0: CODESIZE 000016f1: PUSH2 0x16cf 000016f4: JUMP 000016f5: JUMPDEST 000016f6: CALLVALUE 000016f7: DUP1 000016f8: DUP1 000016f9: DUP1 000016fa: DUP16 000016fb: CALLER 000016fc: GAS 000016fd: CALL 000016fe: POP 000016ff: PUSH2 0x168c 00001702: JUMP 00001703: JUMPDEST 00001704: SWAP1 00001705: SWAP6 00001706: SWAP4 00001707: SWAP2 00001708: SWAP1 00001709: PUSH1 0x01 0000170b: PUSH1 0xe1 0000170d: SHL 0000170e: SUB 0000170f: PUSH2 0x1747 00001712: JUMPI 00001713: PUSH2 0x173d 00001716: PUSH2 0x1693 00001719: SWAP5 0000171a: PUSH1 0x00 0000171c: SWAP4 0000171d: PUSH2 0x1738 00001720: PUSH2 0x15b2 00001723: DUP11 00001724: PUSH1 0x64 00001726: PUSH1 0x20 00001728: SWAP13 00001729: ADD 0000172a: CALLDATALOAD 0000172b: ADD 0000172c: PUSH1 0x24 0000172e: DUP14 0000172f: DUP3 00001730: ADD 00001731: CALLDATALOAD 00001732: SWAP2 00001733: ADD 00001734: PUSH2 0x12ba 00001737: JUMP 00001738: JUMPDEST 00001739: PUSH2 0x18c7 0000173c: JUMP 0000173d: JUMPDEST 0000173e: SWAP2 0000173f: SWAP10 00001740: SWAP3 00001741: SWAP7 00001742: SWAP2 00001743: PUSH2 0x1686 00001746: JUMP 00001747: JUMPDEST 00001748: POP 00001749: POP 0000174a: POP 0000174b: POP 0000174c: POP 0000174d: POP 0000174e: POP 0000174f: POP 00001750: PUSH1 0x01 00001752: SWAP1 00001753: JUMP 00001754: JUMPDEST 00001755: SWAP7 00001756: SWAP8 00001757: POP 00001758: POP 00001759: POP 0000175a: POP 0000175b: POP 0000175c: POP 0000175d: POP 0000175e: PUSH2 0x06bb 00001761: SWAP4 00001762: SWAP5 00001763: POP 00001764: DUP3 00001765: ISZERO 00001766: PUSH2 0x1ec0 00001769: JUMPI 0000176a: CALLVALUE 0000176b: CALLVALUE 0000176c: CALLVALUE 0000176d: CALLVALUE 0000176e: DUP7 0000176f: CALLER 00001770: GAS 00001771: CALL 00001772: POP 00001773: PUSH2 0x1ec0 00001776: JUMP 00001777: JUMPDEST 00001778: PUSH1 0x40 0000177a: MLOAD 0000177b: PUSH4 0x6b31ba15 00001780: PUSH1 0xe1 00001782: SHL 00001783: DUP2 00001784: MSTORE 00001785: PUSH1 0x04 00001787: SWAP1 00001788: REVERT 00001789: JUMPDEST 0000178a: PUSH12 0xffffffffffffffffffffffff 00001797: NOT 00001798: SWAP1 00001799: CALLDATALOAD 0000179a: DUP2 0000179b: DUP2 0000179c: AND 0000179d: SWAP4 0000179e: SWAP3 0000179f: PUSH1 0x14 000017a1: DUP2 000017a2: LT 000017a3: PUSH2 0x17ab 000017a6: JUMPI 000017a7: POP 000017a8: POP 000017a9: POP 000017aa: JUMP 000017ab: JUMPDEST 000017ac: PUSH1 0x14 000017ae: SUB 000017af: PUSH1 0x03 000017b1: SHL 000017b2: DUP3 000017b3: SWAP1 000017b4: SHL 000017b5: AND 000017b6: AND 000017b7: SWAP2 000017b8: POP 000017b9: JUMP 000017ba: JUMPDEST 000017bb: CALLDATALOAD 000017bc: SWAP1 000017bd: PUSH1 0x20 000017bf: DUP2 000017c0: LT 000017c1: PUSH2 0x17c8 000017c4: JUMPI 000017c5: POP 000017c6: SWAP1 000017c7: JUMP 000017c8: JUMPDEST 000017c9: PUSH1 0x00 000017cb: NOT 000017cc: SWAP1 000017cd: PUSH1 0x20 000017cf: SUB 000017d0: PUSH1 0x03 000017d2: SHL 000017d3: SHL 000017d4: AND 000017d5: SWAP1 000017d6: JUMP 000017d7: JUMPDEST 000017d8: PUSH1 0x01 000017da: PUSH1 0x01 000017dc: PUSH1 0xd0 000017de: SHL 000017df: SUB 000017e0: NOT 000017e1: SWAP1 000017e2: CALLDATALOAD 000017e3: DUP2 000017e4: DUP2 000017e5: AND 000017e6: SWAP4 000017e7: SWAP3 000017e8: PUSH1 0x06 000017ea: DUP2 000017eb: LT 000017ec: PUSH2 0x17f4 000017ef: JUMPI 000017f0: POP 000017f1: POP 000017f2: POP 000017f3: JUMP 000017f4: JUMPDEST 000017f5: PUSH1 0x06 000017f7: SUB 000017f8: PUSH1 0x03 000017fa: SHL 000017fb: DUP3 000017fc: SWAP1 000017fd: SHL 000017fe: AND 000017ff: AND 00001800: SWAP2 00001801: POP 00001802: JUMP 00001803: JUMPDEST 00001804: DUP2 00001805: MLOAD 00001806: PUSH1 0x20 00001808: DUP4 00001809: ADD 0000180a: MLOAD 0000180b: PUSH1 0x40 0000180d: DUP5 0000180e: ADD 0000180f: MLOAD 00001810: PUSH1 0x30 00001812: SWAP2 00001813: SWAP1 00001814: SWAP2 00001815: SHL 00001816: PUSH12 0xffffffffffff000000000000 00001823: AND 00001824: PUSH6 0xffffffffffff 0000182b: SWAP3 0000182c: SWAP1 0000182d: SWAP3 0000182e: AND 0000182f: SWAP2 00001830: SWAP1 00001831: SWAP2 00001832: OR 00001833: PUSH1 0x60 00001835: SWAP2 00001836: DUP3 00001837: SHL 00001838: PUSH12 0xffffffffffffffffffffffff 00001845: NOT 00001846: AND 00001847: OR 00001848: DUP3 00001849: SSTORE 0000184a: SWAP1 0000184b: SWAP2 0000184c: ADD 0000184d: MLOAD 0000184e: PUSH1 0x01 00001850: SWAP2 00001851: SWAP1 00001852: SWAP2 00001853: ADD 00001854: DUP1 00001855: SLOAD 00001856: PUSH1 0x01 00001858: PUSH1 0x01 0000185a: PUSH1 0xa0 0000185c: SHL 0000185d: SUB 0000185e: NOT 0000185f: AND 00001860: PUSH1 0x01 00001862: PUSH1 0x01 00001864: PUSH1 0xa0 00001866: SHL 00001867: SUB 00001868: SWAP3 00001869: SWAP1 0000186a: SWAP3 0000186b: AND 0000186c: SWAP2 0000186d: SWAP1 0000186e: SWAP2 0000186f: OR 00001870: SWAP1 00001871: SSTORE 00001872: JUMP 00001873: JUMPDEST 00001874: SWAP1 00001875: PUSH1 0x20 00001877: SWAP2 00001878: DUP1 00001879: DUP3 0000187a: MSTORE 0000187b: DUP1 0000187c: PUSH1 0x00 0000187e: DUP5 0000187f: DUP5 00001880: ADD 00001881: CALLDATACOPY 00001882: PUSH1 0x00 00001884: DUP3 00001885: DUP3 00001886: ADD 00001887: DUP5 00001888: ADD 00001889: MSTORE 0000188a: PUSH1 0x1f 0000188c: ADD 0000188d: PUSH1 0x1f 0000188f: NOT 00001890: AND 00001891: ADD 00001892: ADD 00001893: SWAP1 00001894: JUMP 00001895: JUMPDEST 00001896: SWAP1 00001897: DUP1 00001898: PUSH1 0x20 0000189a: SWAP4 0000189b: SWAP3 0000189c: DUP2 0000189d: DUP5 0000189e: MSTORE 0000189f: DUP5 000018a0: DUP5 000018a1: ADD 000018a2: CALLDATACOPY 000018a3: PUSH1 0x00 000018a5: DUP3 000018a6: DUP3 000018a7: ADD 000018a8: DUP5 000018a9: ADD 000018aa: MSTORE 000018ab: PUSH1 0x1f 000018ad: ADD 000018ae: PUSH1 0x1f 000018b0: NOT 000018b1: AND 000018b2: ADD 000018b3: ADD 000018b4: SWAP1 000018b5: JUMP 000018b6: JUMPDEST 000018b7: SWAP2 000018b8: PUSH1 0x20 000018ba: PUSH2 0x06bb 000018bd: SWAP4 000018be: DUP2 000018bf: DUP2 000018c0: MSTORE 000018c1: ADD 000018c2: SWAP2 000018c3: PUSH2 0x1895 000018c6: JUMP 000018c7: JUMPDEST 000018c8: SWAP2 000018c9: SWAP1 000018ca: PUSH2 0x18d3 000018cd: DUP3 000018ce: DUP3 000018cf: PUSH2 0x12e5 000018d2: JUMP 000018d3: JUMPDEST 000018d4: PUSH2 0x18dc 000018d7: SWAP2 000018d8: PUSH2 0x1789 000018db: JUMP 000018dc: JUMPDEST 000018dd: PUSH1 0x60 000018df: SHR 000018e0: SWAP4 000018e1: PUSH2 0x18ea 000018e4: DUP4 000018e5: DUP4 000018e6: PUSH2 0x12f6 000018e9: JUMP 000018ea: JUMPDEST 000018eb: PUSH2 0x18f3 000018ee: SWAP2 000018ef: PUSH2 0x17ba 000018f2: JUMP 000018f3: JUMPDEST 000018f4: PUSH1 0x58 000018f6: DUP4 000018f7: ADD 000018f8: PUSH1 0x78 000018fa: DUP3 000018fb: ADD 000018fc: SWAP5 000018fd: DUP6 000018fe: DUP4 000018ff: PUSH1 0x58 00001901: ADD 00001902: SWAP1 00001903: PUSH2 0x190d 00001906: SWAP2 00001907: DUP4 00001908: DUP9 00001909: PUSH2 0x134b 0000190c: JUMP 0000190d: JUMPDEST 0000190e: PUSH2 0x1916 00001911: SWAP2 00001912: PUSH2 0x17ba 00001915: JUMP 00001916: JUMPDEST 00001917: PUSH2 0x1920 0000191a: DUP3 0000191b: DUP8 0000191c: PUSH2 0x1307 0000191f: JUMP 00001920: JUMPDEST 00001921: PUSH2 0x1929 00001924: SWAP2 00001925: PUSH2 0x17ba 00001928: JUMP 00001929: JUMPDEST 0000192a: PUSH2 0x1933 0000192d: DUP4 0000192e: DUP9 0000192f: PUSH2 0x1318 00001932: JUMP 00001933: JUMPDEST 00001934: PUSH2 0x193c 00001937: SWAP2 00001938: PUSH2 0x1789 0000193b: JUMP 0000193c: JUMPDEST 0000193d: PUSH1 0x60 0000193f: SHR 00001940: PUSH2 0x194a 00001943: CALLDATASIZE 00001944: DUP8 00001945: DUP8 00001946: PUSH2 0x065a 00001949: JUMP 0000194a: JUMPDEST 0000194b: DUP1 0000194c: MLOAD 0000194d: PUSH1 0x20 0000194f: SWAP2 00001950: DUP3 00001951: ADD 00001952: KECCAK256 00001953: PUSH1 0x40 00001955: DUP1 00001956: MLOAD 00001957: PUSH32 0x3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee964176 00001978: SWAP4 00001979: DUP2 0000197a: ADD 0000197b: SWAP4 0000197c: DUP5 0000197d: MSTORE 0000197e: PUSH1 0x01 00001980: PUSH1 0x01 00001982: PUSH1 0xe0 00001984: SHL 00001985: SUB 00001986: NOT 00001987: DUP15 00001988: AND 00001989: SWAP2 0000198a: DUP2 0000198b: ADD 0000198c: SWAP2 0000198d: SWAP1 0000198e: SWAP2 0000198f: MSTORE 00001990: PUSH1 0x60 00001992: DUP2 00001993: ADD 00001994: SWAP5 00001995: SWAP1 00001996: SWAP5 00001997: MSTORE 00001998: PUSH1 0x01 0000199a: PUSH1 0x01 0000199c: PUSH1 0xa0 0000199e: SHL 0000199f: SUB 000019a0: SWAP3 000019a1: SWAP1 000019a2: SWAP3 000019a3: AND 000019a4: PUSH1 0x80 000019a6: DUP5 000019a7: ADD 000019a8: MSTORE 000019a9: PUSH1 0xa0 000019ab: DUP1 000019ac: DUP5 000019ad: ADD 000019ae: SWAP3 000019af: SWAP1 000019b0: SWAP3 000019b1: MSTORE 000019b2: SWAP1 000019b3: DUP3 000019b4: MSTORE 000019b5: SWAP1 000019b6: PUSH2 0x19c0 000019b9: PUSH1 0xc0 000019bb: DUP3 000019bc: PUSH2 0x024c 000019bf: JUMP 000019c0: JUMPDEST 000019c1: MLOAD 000019c2: SWAP1 000019c3: KECCAK256 000019c4: PUSH2 0x19cc 000019c7: SWAP1 000019c8: PUSH2 0x1b1f 000019cb: JUMP 000019cc: JUMPDEST 000019cd: SWAP1 000019ce: DUP5 000019cf: ADD 000019d0: SWAP7 000019d1: PUSH1 0x78 000019d3: DUP9 000019d4: ADD 000019d5: PUSH2 0x19df 000019d8: SWAP2 000019d9: DUP5 000019da: DUP10 000019db: PUSH2 0x134b 000019de: JUMP 000019df: JUMPDEST 000019e0: SWAP1 000019e1: PUSH2 0x19e9 000019e4: SWAP3 000019e5: PUSH2 0x1f8c 000019e8: JUMP 000019e9: JUMPDEST 000019ea: PUSH2 0x19f3 000019ed: DUP3 000019ee: DUP8 000019ef: PUSH2 0x1307 000019f2: JUMP 000019f3: JUMPDEST 000019f4: PUSH1 0x01 000019f6: PUSH1 0x01 000019f8: PUSH1 0xa0 000019fa: SHL 000019fb: SUB 000019fc: NOT 000019fd: SWAP2 000019fe: PUSH2 0x1a07 00001a01: SWAP2 00001a02: SWAP1 00001a03: PUSH2 0x17ba 00001a06: JUMP 00001a07: JUMPDEST 00001a08: AND 00001a09: PUSH2 0x1a11 00001a0c: SWAP2 00001a0d: PUSH2 0x20ee 00001a10: JUMP 00001a11: JUMPDEST 00001a12: SWAP7 00001a13: PUSH1 0x78 00001a15: DUP7 00001a16: DUP9 00001a17: ADD 00001a18: ADD 00001a19: SWAP7 00001a1a: DUP3 00001a1b: SUB 00001a1c: PUSH1 0x77 00001a1e: NOT 00001a1f: ADD 00001a20: SWAP6 00001a21: PUSH2 0x1a2a 00001a24: DUP4 00001a25: DUP3 00001a26: PUSH2 0x1329 00001a29: JUMP 00001a2a: JUMPDEST 00001a2b: PUSH2 0x1a33 00001a2e: SWAP2 00001a2f: PUSH2 0x17d7 00001a32: JUMP 00001a33: JUMPDEST 00001a34: PUSH1 0xd0 00001a36: SHR 00001a37: SWAP3 00001a38: PUSH2 0x1a41 00001a3b: DUP2 00001a3c: DUP4 00001a3d: PUSH2 0x133a 00001a40: JUMP 00001a41: JUMPDEST 00001a42: PUSH2 0x1a4a 00001a45: SWAP2 00001a46: PUSH2 0x17d7 00001a49: JUMP 00001a4a: JUMPDEST 00001a4b: PUSH1 0xd0 00001a4d: SHR 00001a4e: SWAP2 00001a4f: PUSH2 0x1a58 00001a52: DUP3 00001a53: DUP3 00001a54: PUSH2 0x1318 00001a57: JUMP 00001a58: JUMPDEST 00001a59: PUSH2 0x1a61 00001a5c: SWAP2 00001a5d: PUSH2 0x1789 00001a60: JUMP 00001a61: JUMPDEST 00001a62: PUSH1 0x60 00001a64: SHR 00001a65: SWAP2 00001a66: PUSH2 0x1a6e 00001a69: SWAP2 00001a6a: PUSH2 0x12e5 00001a6d: JUMP 00001a6e: JUMPDEST 00001a6f: PUSH2 0x1a77 00001a72: SWAP2 00001a73: PUSH2 0x1789 00001a76: JUMP 00001a77: JUMPDEST 00001a78: PUSH1 0x60 00001a7a: SHR 00001a7b: SWAP2 00001a7c: PUSH2 0x1a83 00001a7f: PUSH2 0x026d 00001a82: JUMP 00001a83: JUMPDEST 00001a84: PUSH6 0xffffffffffff 00001a8b: SWAP1 00001a8c: SWAP6 00001a8d: AND 00001a8e: DUP6 00001a8f: MSTORE 00001a90: PUSH6 0xffffffffffff 00001a97: AND 00001a98: PUSH1 0x20 00001a9a: DUP6 00001a9b: ADD 00001a9c: MSTORE 00001a9d: PUSH1 0x01 00001a9f: PUSH1 0x01 00001aa1: PUSH1 0xa0 00001aa3: SHL 00001aa4: SUB 00001aa5: AND 00001aa6: PUSH1 0x40 00001aa8: DUP5 00001aa9: ADD 00001aaa: MSTORE 00001aab: PUSH1 0x01 00001aad: PUSH1 0x01 00001aaf: PUSH1 0xa0 00001ab1: SHL 00001ab2: SUB 00001ab3: AND 00001ab4: PUSH1 0x60 00001ab6: DUP4 00001ab7: ADD 00001ab8: MSTORE 00001ab9: PUSH2 0x1ac1 00001abc: SWAP1 00001abd: PUSH2 0x1121 00001ac0: JUMP 00001ac1: JUMPDEST 00001ac2: SWAP1 00001ac3: PUSH2 0x1acb 00001ac6: SWAP2 00001ac7: PUSH2 0x1803 00001aca: JUMP 00001acb: JUMPDEST 00001acc: PUSH1 0x01 00001ace: PUSH1 0x01 00001ad0: PUSH1 0xa0 00001ad2: SHL 00001ad3: SUB 00001ad4: DUP8 00001ad5: AND 00001ad6: SWAP2 00001ad7: DUP3 00001ad8: EXTCODESIZE 00001ad9: ISZERO 00001ada: PUSH2 0x01ad 00001add: JUMPI 00001ade: PUSH2 0x1b01 00001ae1: SWAP3 00001ae2: PUSH1 0x00 00001ae4: SWAP3 00001ae5: DUP4 00001ae6: PUSH1 0x40 00001ae8: MLOAD 00001ae9: DUP1 00001aea: SWAP7 00001aeb: DUP2 00001aec: SWAP6 00001aed: DUP3 00001aee: SWAP5 00001aef: PUSH4 0x064acaab 00001af4: PUSH1 0xe1 00001af6: SHL 00001af7: DUP5 00001af8: MSTORE 00001af9: PUSH1 0x04 00001afb: DUP5 00001afc: ADD 00001afd: PUSH2 0x18b6 00001b00: JUMP 00001b01: JUMPDEST 00001b02: SUB 00001b03: SWAP3 00001b04: GAS 00001b05: CALL 00001b06: DUP1 00001b07: ISZERO 00001b08: PUSH2 0x0618 00001b0b: JUMPI 00001b0c: PUSH2 0x1b12 00001b0f: JUMPI 00001b10: POP 00001b11: JUMP 00001b12: JUMPDEST 00001b13: DUP1 00001b14: PUSH2 0x060c 00001b17: PUSH2 0x027a 00001b1a: SWAP3 00001b1b: PUSH2 0x01c8 00001b1e: JUMP 00001b1f: JUMPDEST 00001b20: PUSH32 0x470bb15be946f544f872ed597995173a7016edfe194aac72bd042df5455e9769 00001b41: PUSH32 0x000000000000000000000000d3f582f6b4814e989ee8e96bc3175320b5a540ab 00001b62: ADDRESS 00001b63: EQ 00001b64: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000001 00001b85: CHAINID 00001b86: EQ 00001b87: AND 00001b88: ISZERO 00001b89: PUSH2 0x1bac 00001b8c: JUMPI 00001b8d: JUMPDEST 00001b8e: PUSH8 0x1901000000000000 00001b97: PUSH1 0x00 00001b99: MSTORE 00001b9a: PUSH1 0x1a 00001b9c: MSTORE 00001b9d: PUSH1 0x3a 00001b9f: MSTORE 00001ba0: PUSH1 0x42 00001ba2: PUSH1 0x18 00001ba4: KECCAK256 00001ba5: SWAP1 00001ba6: PUSH1 0x00 00001ba8: PUSH1 0x3a 00001baa: MSTORE 00001bab: JUMP 00001bac: JUMPDEST 00001bad: POP 00001bae: PUSH1 0xa0 00001bb0: PUSH1 0x40 00001bb2: MLOAD 00001bb3: PUSH32 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f 00001bd4: DUP2 00001bd5: MSTORE 00001bd6: PUSH32 0x32ba20807d2fff2dbb34e0bcfa82982565bef566d4c0c633dc57b700b81c3427 00001bf7: PUSH1 0x20 00001bf9: DUP3 00001bfa: ADD 00001bfb: MSTORE 00001bfc: PUSH32 0x3524473bf9d21abe45b7f656e2f1380e9335b9d346503f037e8275c56c697796 00001c1d: PUSH1 0x40 00001c1f: DUP3 00001c20: ADD 00001c21: MSTORE 00001c22: CHAINID 00001c23: PUSH1 0x60 00001c25: DUP3 00001c26: ADD 00001c27: MSTORE 00001c28: ADDRESS 00001c29: PUSH1 0x80 00001c2b: DUP3 00001c2c: ADD 00001c2d: MSTORE 00001c2e: KECCAK256 00001c2f: PUSH2 0x1b8d 00001c32: JUMP 00001c33: JUMPDEST 00001c34: SWAP2 00001c35: PUSH2 0x1cf2 00001c38: SWAP2 00001c39: PUSH2 0x1cf7 00001c3c: SWAP4 00001c3d: PUSH2 0x1cdc 00001c40: PUSH2 0x1cea 00001c43: PUSH2 0x1c4a 00001c46: PUSH2 0x029c 00001c49: JUMP 00001c4a: JUMPDEST 00001c4b: PUSH2 0x1c52 00001c4e: PUSH2 0x0afa 00001c51: JUMP 00001c52: JUMPDEST 00001c53: SWAP1 00001c54: PUSH1 0x20 00001c56: DUP2 00001c57: MLOAD 00001c58: SWAP2 00001c59: ADD 00001c5a: KECCAK256 00001c5b: SWAP1 00001c5c: PUSH1 0x20 00001c5e: DUP2 00001c5f: MLOAD 00001c60: SWAP2 00001c61: ADD 00001c62: KECCAK256 00001c63: PUSH1 0x40 00001c65: MLOAD 00001c66: SWAP1 00001c67: PUSH1 0x20 00001c69: DUP3 00001c6a: ADD 00001c6b: SWAP3 00001c6c: PUSH32 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f 00001c8d: DUP5 00001c8e: MSTORE 00001c8f: PUSH1 0x40 00001c91: DUP4 00001c92: ADD 00001c93: MSTORE 00001c94: PUSH1 0x60 00001c96: DUP3 00001c97: ADD 00001c98: MSTORE 00001c99: CHAINID 00001c9a: PUSH1 0x80 00001c9c: DUP3 00001c9d: ADD 00001c9e: MSTORE 00001c9f: ADDRESS 00001ca0: PUSH1 0xa0 00001ca2: DUP3 00001ca3: ADD 00001ca4: MSTORE 00001ca5: PUSH1 0xa0 00001ca7: DUP2 00001ca8: MSTORE 00001ca9: PUSH2 0x1cb1 00001cac: DUP2 00001cad: PUSH2 0x0231 00001cb0: JUMP 00001cb1: JUMPDEST 00001cb2: MLOAD 00001cb3: SWAP1 00001cb4: KECCAK256 00001cb5: SWAP3 00001cb6: PUSH1 0x40 00001cb8: MLOAD 00001cb9: SWAP3 00001cba: DUP4 00001cbb: SWAP2 00001cbc: PUSH1 0x20 00001cbe: DUP4 00001cbf: ADD 00001cc0: SWAP6 00001cc1: DUP7 00001cc2: SWAP1 00001cc3: SWAP2 00001cc4: PUSH1 0x42 00001cc6: SWAP3 00001cc7: PUSH2 0x1901 00001cca: PUSH1 0xf0 00001ccc: SHL 00001ccd: DUP4 00001cce: MSTORE 00001ccf: PUSH1 0x02 00001cd1: DUP4 00001cd2: ADD 00001cd3: MSTORE 00001cd4: PUSH1 0x22 00001cd6: DUP3 00001cd7: ADD 00001cd8: MSTORE 00001cd9: ADD 00001cda: SWAP1 00001cdb: JUMP 00001cdc: JUMPDEST 00001cdd: SUB 00001cde: PUSH1 0x1f 00001ce0: NOT 00001ce1: DUP2 00001ce2: ADD 00001ce3: DUP4 00001ce4: MSTORE 00001ce5: DUP3 00001ce6: PUSH2 0x024c 00001ce9: JUMP 00001cea: JUMPDEST 00001ceb: MLOAD 00001cec: SWAP1 00001ced: KECCAK256 00001cee: PUSH2 0x1f8c 00001cf1: JUMP 00001cf2: JUMPDEST 00001cf3: PUSH2 0x20c5 00001cf6: JUMP 00001cf7: JUMPDEST 00001cf8: SWAP1 00001cf9: PUSH6 0xffffffffffff 00001d00: SWAP3 00001d01: DUP4 00001d02: TIMESTAMP 00001d03: SWAP2 00001d04: AND 00001d05: GT 00001d06: ISZERO 00001d07: SWAP3 00001d08: DUP4 00001d09: PUSH2 0x1d44 00001d0c: JUMPI 00001d0d: JUMPDEST 00001d0e: POP 00001d0f: POP 00001d10: DUP2 00001d11: PUSH2 0x1d32 00001d14: JUMPI 00001d15: JUMPDEST 00001d16: POP 00001d17: ISZERO 00001d18: PUSH2 0x1d26 00001d1b: JUMPI 00001d1c: PUSH4 0x0b135d3f 00001d21: PUSH1 0xe1 00001d23: SHL 00001d24: SWAP1 00001d25: JUMP 00001d26: JUMPDEST 00001d27: PUSH1 0x01 00001d29: PUSH1 0x01 00001d2b: PUSH1 0xe0 00001d2d: SHL 00001d2e: SUB 00001d2f: NOT 00001d30: SWAP1 00001d31: JUMP 00001d32: JUMPDEST 00001d33: PUSH1 0x01 00001d35: PUSH1 0x01 00001d37: PUSH1 0xa0 00001d39: SHL 00001d3a: SUB 00001d3b: AND 00001d3c: ISZERO 00001d3d: SWAP1 00001d3e: POP 00001d3f: CODESIZE 00001d40: PUSH2 0x1d15 00001d43: JUMP 00001d44: JUMPDEST 00001d45: TIMESTAMP 00001d46: SWAP2 00001d47: AND 00001d48: LT 00001d49: ISZERO 00001d4a: SWAP2 00001d4b: POP 00001d4c: CODESIZE 00001d4d: DUP1 00001d4e: PUSH2 0x1d0d 00001d51: JUMP 00001d52: JUMPDEST 00001d53: SWAP1 00001d54: DUP2 00001d55: PUSH1 0x20 00001d57: SWAP2 00001d58: SUB 00001d59: SLT 00001d5a: PUSH2 0x01ad 00001d5d: JUMPI 00001d5e: MLOAD 00001d5f: DUP1 00001d60: ISZERO 00001d61: ISZERO 00001d62: DUP2 00001d63: SUB 00001d64: PUSH2 0x01ad 00001d67: JUMPI 00001d68: SWAP1 00001d69: JUMP 00001d6a: JUMPDEST 00001d6b: PUSH1 0x01 00001d6d: PUSH1 0x01 00001d6f: PUSH1 0xa0 00001d71: SHL 00001d72: SUB 00001d73: SWAP1 00001d74: SWAP2 00001d75: AND 00001d76: DUP2 00001d77: MSTORE 00001d78: PUSH1 0x40 00001d7a: PUSH1 0x20 00001d7c: DUP3 00001d7d: ADD 00001d7e: DUP2 00001d7f: SWAP1 00001d80: MSTORE 00001d81: PUSH2 0x06bb 00001d84: SWAP3 00001d85: SWAP2 00001d86: ADD 00001d87: SWAP1 00001d88: PUSH2 0x1873 00001d8b: JUMP 00001d8c: JUMPDEST 00001d8d: PUSH2 0x1d96 00001d90: CALLDATASIZE 00001d91: CALLER 00001d92: PUSH2 0x1ff4 00001d95: JUMP 00001d96: JUMPDEST 00001d97: PUSH2 0x1ebb 00001d9a: JUMPI 00001d9b: PUSH2 0x1daf 00001d9e: PUSH1 0x00 00001da0: CALLDATALOAD 00001da1: PUSH1 0x01 00001da3: PUSH1 0x01 00001da5: PUSH1 0xe0 00001da7: SHL 00001da8: SUB 00001da9: NOT 00001daa: AND 00001dab: PUSH2 0x1121 00001dae: JUMP 00001daf: JUMPDEST 00001db0: PUSH1 0x01 00001db2: DUP2 00001db3: ADD 00001db4: SLOAD 00001db5: PUSH2 0x1dce 00001db8: SWAP1 00001db9: PUSH1 0x01 00001dbb: PUSH1 0x01 00001dbd: PUSH1 0xa0 00001dbf: SHL 00001dc0: SUB 00001dc1: AND 00001dc2: JUMPDEST 00001dc3: PUSH1 0x01 00001dc5: PUSH1 0x01 00001dc7: PUSH1 0xa0 00001dc9: SHL 00001dca: SUB 00001dcb: AND 00001dcc: SWAP1 00001dcd: JUMP 00001dce: JUMPDEST 00001dcf: SWAP1 00001dd0: PUSH1 0x01 00001dd2: PUSH1 0x01 00001dd4: PUSH1 0xa0 00001dd6: SHL 00001dd7: SUB 00001dd8: DUP3 00001dd9: AND 00001dda: ISZERO 00001ddb: SWAP1 00001ddc: DUP2 00001ddd: ISZERO 00001dde: PUSH2 0x1e7f 00001de1: JUMPI 00001de2: JUMPDEST 00001de3: DUP2 00001de4: ISZERO 00001de5: PUSH2 0x1e54 00001de8: JUMPI 00001de9: JUMPDEST 00001dea: POP 00001deb: ISZERO 00001dec: PUSH2 0x1df5 00001def: JUMPI 00001df0: POP 00001df1: PUSH1 0x00 00001df3: SWAP1 00001df4: JUMP 00001df5: JUMPDEST 00001df6: PUSH1 0x20 00001df8: PUSH1 0x40 00001dfa: MLOAD 00001dfb: DUP1 00001dfc: SWAP3 00001dfd: PUSH4 0x9ea9bd59 00001e02: PUSH1 0xe0 00001e04: SHL 00001e05: DUP3 00001e06: MSTORE 00001e07: DUP2 00001e08: DUP1 00001e09: PUSH2 0x1e16 00001e0c: CALLDATASIZE 00001e0d: CALLER 00001e0e: PUSH1 0x04 00001e10: DUP5 00001e11: ADD 00001e12: PUSH2 0x1d6a 00001e15: JUMP 00001e16: JUMPDEST 00001e17: SUB 00001e18: SWAP2 00001e19: GAS 00001e1a: STATICCALL 00001e1b: SWAP1 00001e1c: DUP2 00001e1d: ISZERO 00001e1e: PUSH2 0x0618 00001e21: JUMPI 00001e22: PUSH1 0x00 00001e24: SWAP2 00001e25: PUSH2 0x1e2c 00001e28: JUMPI 00001e29: POP 00001e2a: SWAP1 00001e2b: JUMP 00001e2c: JUMPDEST 00001e2d: PUSH2 0x06bb 00001e30: SWAP2 00001e31: POP 00001e32: PUSH1 0x20 00001e34: RETURNDATASIZE 00001e35: DUP2 00001e36: GT 00001e37: PUSH2 0x1e4d 00001e3a: JUMPI 00001e3b: JUMPDEST 00001e3c: PUSH2 0x1e45 00001e3f: DUP2 00001e40: DUP4 00001e41: PUSH2 0x024c 00001e44: JUMP 00001e45: JUMPDEST 00001e46: DUP2 00001e47: ADD 00001e48: SWAP1 00001e49: PUSH2 0x1d52 00001e4c: JUMP 00001e4d: JUMPDEST 00001e4e: POP 00001e4f: RETURNDATASIZE 00001e50: PUSH2 0x1e3b 00001e53: JUMP 00001e54: JUMPDEST 00001e55: SLOAD 00001e56: PUSH2 0x1e6e 00001e59: SWAP2 00001e5a: POP 00001e5b: PUSH6 0xffffffffffff 00001e62: AND 00001e63: JUMPDEST 00001e64: PUSH6 0xffffffffffff 00001e6b: AND 00001e6c: SWAP1 00001e6d: JUMP 00001e6e: JUMPDEST 00001e6f: PUSH6 0xffffffffffff 00001e76: TIMESTAMP 00001e77: SWAP2 00001e78: AND 00001e79: GT 00001e7a: CODESIZE 00001e7b: PUSH2 0x1de9 00001e7e: JUMP 00001e7f: JUMPDEST 00001e80: SWAP1 00001e81: POP 00001e82: PUSH6 0xffffffffffff 00001e89: PUSH2 0x1e9f 00001e8c: PUSH2 0x1e63 00001e8f: DUP4 00001e90: SLOAD 00001e91: PUSH6 0xffffffffffff 00001e98: SWAP1 00001e99: PUSH1 0x30 00001e9b: SHR 00001e9c: AND 00001e9d: SWAP1 00001e9e: JUMP 00001e9f: JUMPDEST 00001ea0: AND 00001ea1: DUP1 00001ea2: ISZERO 00001ea3: ISZERO 00001ea4: SWAP1 00001ea5: DUP2 00001ea6: PUSH2 0x1eb1 00001ea9: JUMPI 00001eaa: JUMPDEST 00001eab: POP 00001eac: SWAP1 00001ead: PUSH2 0x1de2 00001eb0: JUMP 00001eb1: JUMPDEST 00001eb2: SWAP1 00001eb3: POP 00001eb4: TIMESTAMP 00001eb5: GT 00001eb6: CODESIZE 00001eb7: PUSH2 0x1eaa 00001eba: JUMP 00001ebb: JUMPDEST 00001ebc: PUSH1 0x01 00001ebe: SWAP1 00001ebf: JUMP 00001ec0: JUMPDEST 00001ec1: SWAP1 00001ec2: SWAP2 00001ec3: PUSH2 0x1ecc 00001ec6: CALLDATASIZE 00001ec7: DUP4 00001ec8: PUSH2 0x138f 00001ecb: JUMP 00001ecc: JUMPDEST 00001ecd: PUSH2 0x0140 00001ed0: SWAP3 00001ed1: DUP4 00001ed2: DUP2 00001ed3: ADD 00001ed4: CALLDATALOAD 00001ed5: SWAP1 00001ed6: PUSH1 0x1e 00001ed8: NOT 00001ed9: DUP2 00001eda: CALLDATASIZE 00001edb: SUB 00001edc: ADD 00001edd: DUP3 00001ede: SLT 00001edf: ISZERO 00001ee0: PUSH2 0x01ad 00001ee3: JUMPI 00001ee4: ADD 00001ee5: SWAP4 00001ee6: DUP5 00001ee7: CALLDATALOAD 00001ee8: SWAP5 00001ee9: PUSH1 0x01 00001eeb: PUSH1 0x01 00001eed: PUSH1 0x40 00001eef: SHL 00001ef0: SUB 00001ef1: DUP7 00001ef2: GT 00001ef3: PUSH2 0x01ad 00001ef6: JUMPI 00001ef7: PUSH1 0x20 00001ef9: ADD 00001efa: SWAP4 00001efb: DUP6 00001efc: CALLDATASIZE 00001efd: SUB 00001efe: DUP6 00001eff: SGT 00001f00: PUSH2 0x01ad 00001f03: JUMPI 00001f04: PUSH2 0x1f16 00001f07: PUSH2 0x168c 00001f0a: DUP8 00001f0b: PUSH2 0x1f5e 00001f0e: SWAP9 00001f0f: PUSH1 0x20 00001f11: SWAP9 00001f12: PUSH2 0x12c8 00001f15: JUMP 00001f16: JUMPDEST 00001f17: SWAP1 00001f18: DUP4 00001f19: ADD 00001f1a: MSTORE 00001f1b: PUSH1 0x00 00001f1d: PUSH2 0x1f40 00001f20: PUSH2 0x1dc2 00001f23: PUSH1 0x00 00001f25: DUP1 00001f26: MLOAD 00001f27: PUSH1 0x20 00001f29: PUSH2 0x2171 00001f2c: DUP4 00001f2d: CODECOPY 00001f2e: DUP2 00001f2f: MLOAD 00001f30: SWAP2 00001f31: MSTORE 00001f32: SLOAD 00001f33: PUSH1 0x50 00001f35: SHR 00001f36: PUSH1 0x01 00001f38: DUP1 00001f39: PUSH1 0xa0 00001f3b: SHL 00001f3c: SUB 00001f3d: AND 00001f3e: SWAP1 00001f3f: JUMP 00001f40: JUMPDEST 00001f41: SWAP3 00001f42: PUSH1 0x40 00001f44: MLOAD 00001f45: SWAP7 00001f46: DUP8 00001f47: SWAP6 00001f48: DUP7 00001f49: SWAP5 00001f4a: DUP6 00001f4b: SWAP4 00001f4c: PUSH4 0x3a871cdd 00001f51: PUSH1 0xe0 00001f53: SHL 00001f54: DUP6 00001f55: MSTORE 00001f56: PUSH1 0x04 00001f58: DUP6 00001f59: ADD 00001f5a: PUSH2 0x147d 00001f5d: JUMP 00001f5e: JUMPDEST 00001f5f: SUB 00001f60: SWAP3 00001f61: GAS 00001f62: CALL 00001f63: SWAP1 00001f64: DUP2 00001f65: ISZERO 00001f66: PUSH2 0x0618 00001f69: JUMPI 00001f6a: PUSH1 0x00 00001f6c: SWAP2 00001f6d: PUSH2 0x1f74 00001f70: JUMPI 00001f71: POP 00001f72: SWAP1 00001f73: JUMP 00001f74: JUMPDEST 00001f75: PUSH2 0x06bb 00001f78: SWAP2 00001f79: POP 00001f7a: PUSH1 0x20 00001f7c: RETURNDATASIZE 00001f7d: DUP2 00001f7e: GT 00001f7f: PUSH2 0x0946 00001f82: JUMPI 00001f83: PUSH2 0x0938 00001f86: DUP2 00001f87: DUP4 00001f88: PUSH2 0x024c 00001f8b: JUMP 00001f8c: JUMPDEST 00001f8d: PUSH1 0x00 00001f8f: DUP1 00001f90: MLOAD 00001f91: PUSH1 0x20 00001f93: PUSH2 0x2171 00001f96: DUP4 00001f97: CODECOPY 00001f98: DUP2 00001f99: MLOAD 00001f9a: SWAP2 00001f9b: MSTORE 00001f9c: SLOAD 00001f9d: PUSH1 0x40 00001f9f: DUP1 00001fa0: MLOAD 00001fa1: PUSH4 0x199ed7c9 00001fa6: PUSH1 0xe1 00001fa8: SHL 00001fa9: DUP2 00001faa: MSTORE 00001fab: PUSH1 0x04 00001fad: DUP2 00001fae: ADD 00001faf: SWAP4 00001fb0: SWAP1 00001fb1: SWAP4 00001fb2: MSTORE 00001fb3: PUSH1 0x24 00001fb5: DUP4 00001fb6: ADD 00001fb7: MSTORE 00001fb8: SWAP1 00001fb9: SWAP3 00001fba: PUSH1 0x20 00001fbc: SWAP3 00001fbd: DUP5 00001fbe: SWAP3 00001fbf: PUSH1 0x50 00001fc1: SHR 00001fc2: PUSH1 0x01 00001fc4: PUSH1 0x01 00001fc6: PUSH1 0xa0 00001fc8: SHL 00001fc9: SUB 00001fca: AND 00001fcb: SWAP2 00001fcc: DUP4 00001fcd: SWAP2 00001fce: DUP3 00001fcf: SWAP2 00001fd0: PUSH2 0x1fde 00001fd3: SWAP2 00001fd4: PUSH1 0x44 00001fd6: DUP5 00001fd7: ADD 00001fd8: SWAP2 00001fd9: SWAP1 00001fda: PUSH2 0x1895 00001fdd: JUMP 00001fde: JUMPDEST 00001fdf: SUB 00001fe0: SWAP2 00001fe1: GAS 00001fe2: STATICCALL 00001fe3: SWAP1 00001fe4: DUP2 00001fe5: ISZERO 00001fe6: PUSH2 0x0618 00001fe9: JUMPI 00001fea: PUSH1 0x00 00001fec: SWAP2 00001fed: PUSH2 0x1f74 00001ff0: JUMPI 00001ff1: POP 00001ff2: SWAP1 00001ff3: JUMP 00001ff4: JUMPDEST 00001ff5: PUSH1 0x00 00001ff7: DUP1 00001ff8: MLOAD 00001ff9: PUSH1 0x20 00001ffb: PUSH2 0x2171 00001ffe: DUP4 00001fff: CODECOPY 00002000: DUP2 00002001: MLOAD 00002002: SWAP2 00002003: MSTORE 00002004: SLOAD 00002005: PUSH1 0x40 00002007: DUP1 00002008: MLOAD 00002009: PUSH4 0x9ea9bd59 0000200e: PUSH1 0xe0 00002010: SHL 00002011: DUP2 00002012: MSTORE 00002013: PUSH1 0x01 00002015: PUSH1 0x01 00002017: PUSH1 0xa0 00002019: SHL 0000201a: SUB 0000201b: SWAP4 0000201c: DUP5 0000201d: AND 0000201e: PUSH1 0x04 00002020: DUP3 00002021: ADD 00002022: MSTORE 00002023: PUSH1 0x24 00002025: DUP2 00002026: ADD 00002027: SWAP2 00002028: SWAP1 00002029: SWAP2 0000202a: MSTORE 0000202b: SWAP3 0000202c: PUSH1 0x20 0000202e: SWAP3 0000202f: DUP5 00002030: SWAP3 00002031: PUSH1 0x50 00002033: SHR 00002034: AND 00002035: SWAP1 00002036: DUP3 00002037: SWAP1 00002038: DUP2 00002039: SWAP1 0000203a: PUSH2 0x1e16 0000203d: SWAP1 0000203e: PUSH1 0x44 00002040: DUP4 00002041: ADD 00002042: SWAP1 00002043: PUSH2 0x1873 00002046: JUMP 00002047: JUMPDEST 00002048: PUSH32 0x88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874 00002069: PUSH1 0x40 0000206b: DUP1 0000206c: MLOAD 0000206d: CALLER 0000206e: DUP2 0000206f: MSTORE 00002070: CALLVALUE 00002071: PUSH1 0x20 00002073: DUP3 00002074: ADD 00002075: MSTORE 00002076: LOG1 00002077: JUMP 00002078: JUMPDEST 00002079: PUSH1 0x00 0000207b: DUP1 0000207c: MLOAD 0000207d: PUSH1 0x20 0000207f: PUSH2 0x2171 00002082: DUP4 00002083: CODECOPY 00002084: DUP2 00002085: MLOAD 00002086: SWAP2 00002087: MSTORE 00002088: DUP1 00002089: SLOAD 0000208a: PUSH32 0xffff0000000000000000000000000000000000000000ffffffffffffffffffff 000020ab: AND 000020ac: PUSH1 0x50 000020ae: SWAP3 000020af: SWAP1 000020b0: SWAP3 000020b1: SHL 000020b2: PUSH1 0x01 000020b4: PUSH1 0x50 000020b6: SHL 000020b7: PUSH1 0x01 000020b9: PUSH1 0xf0 000020bb: SHL 000020bc: SUB 000020bd: AND 000020be: SWAP2 000020bf: SWAP1 000020c0: SWAP2 000020c1: OR 000020c2: SWAP1 000020c3: SSTORE 000020c4: JUMP 000020c5: JUMPDEST 000020c6: DUP1 000020c7: PUSH6 0xffffffffffff 000020ce: SWAP2 000020cf: DUP3 000020d0: DUP2 000020d1: PUSH1 0xa0 000020d3: SHR 000020d4: AND 000020d5: SWAP3 000020d6: DUP4 000020d7: ISZERO 000020d8: PUSH1 0x01 000020da: EQ 000020db: PUSH2 0x20e6 000020de: JUMPI 000020df: JUMPDEST 000020e0: POP 000020e1: PUSH1 0xd0 000020e3: SHR 000020e4: SWAP3 000020e5: JUMP 000020e6: JUMPDEST 000020e7: SWAP3 000020e8: POP 000020e9: CODESIZE 000020ea: PUSH2 0x20df 000020ed: JUMP 000020ee: JUMPDEST 000020ef: DUP1 000020f0: DUP3 000020f1: XOR 000020f2: PUSH1 0x01 000020f4: PUSH1 0x01 000020f6: PUSH1 0xa0 000020f8: SHL 000020f9: SUB 000020fa: AND 000020fb: ISZERO 000020fc: PUSH1 0x01 000020fe: EQ 000020ff: PUSH2 0x2109 00002102: JUMPI 00002103: POP 00002104: POP 00002105: PUSH1 0x01 00002107: SWAP1 00002108: JUMP 00002109: JUMPDEST 0000210a: PUSH6 0xffffffffffff 00002111: PUSH1 0xa0 00002113: SHL 00002114: DUP2 00002115: DUP2 00002116: AND 00002117: SWAP3 00002118: PUSH6 0xffffffffffff 0000211f: PUSH1 0xa0 00002121: SHL 00002122: NOT 00002123: SWAP3 00002124: DUP4 00002125: AND 00002126: SWAP3 00002127: DUP2 00002128: AND 00002129: SWAP2 0000212a: SWAP1 0000212b: DUP5 0000212c: ISZERO 0000212d: PUSH2 0x2167 00002130: JUMPI 00002131: JUMPDEST 00002132: DUP2 00002133: AND 00002134: DUP1 00002135: ISZERO 00002136: PUSH2 0x2160 00002139: JUMPI 0000213a: JUMPDEST 0000213b: DUP5 0000213c: DUP2 0000213d: LT 0000213e: SWAP1 0000213f: DUP6 00002140: XOR 00002141: MUL 00002142: DUP1 00002143: DUP6 00002144: XOR 00002145: SWAP5 00002146: EQ 00002147: PUSH2 0x2158 0000214a: JUMPI 0000214b: JUMPDEST 0000214c: POP 0000214d: DUP2 0000214e: DUP2 0000214f: GT 00002150: SWAP1 00002151: DUP3 00002152: XOR 00002153: MUL 00002154: XOR 00002155: OR 00002156: SWAP1 00002157: JUMP 00002158: JUMPDEST 00002159: SWAP3 0000215a: POP 0000215b: CODESIZE 0000215c: PUSH2 0x214b 0000215f: JUMP 00002160: JUMPDEST 00002161: POP 00002162: DUP1 00002163: PUSH2 0x213a 00002166: JUMP 00002167: JUMPDEST 00002168: SWAP4 00002169: POP 0000216a: DUP1 0000216b: SWAP4 0000216c: PUSH2 0x2131 0000216f: JUMP 00002170: INVALID 00002171: NUMBER 00002172: SWAP16 00002173: INVALID 00002174: PUSH30
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| critical | upgradeability | detector | Untrusted DELEGATECALL target reachable | 70 | no | no |
viewtrace_id: 0x48d693b4d93a5087c4e45b5e9d8582c68d5eb2c682bc53af1c424854926a1724
validation_json{
"sink": "DELEGATECALL",
"errors": 0,
"status": "unknown",
"attempts": 192,
"trace_id": "0x48d693b4d93a5087c4e45b5e9d8582c68d5eb2c682bc53af1c424854926a1724",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": null,
"matched_probe": null,
"target_varies": null,
"classification": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x06fdde03",
"selector": "0x06fdde03",
"calldata_variants": [
"0x06fdde03",
"0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x0b3dc354",
"selector": "0x0b3dc354",
"calldata_variants": [
"0x0b3dc354",
"0x0b3dc3540000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x150b7a02",
"selector": "0x150b7a02",
"calldata_variants": [
"0x150b7a02",
"0x150b7a020000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1626ba7e",
"selector": "0x1626ba7e",
"calldata_variants": [
"0x1626ba7e",
"0x1626ba7e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x29f8b174",
"selector": "0x29f8b174",
"calldata_variants": [
"0x29f8b174",
"0x29f8b1740000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x333daf92",
"selector": "0x333daf92",
"calldata_variants": [
"0x333daf92",
"0x333daf920000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x34fcd5be",
"selector": "0x34fcd5be",
"calldata_variants": [
"0x34fcd5be",
"0x34fcd5be0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3659cfe6",
"selector": "0x3659cfe6",
"calldata_variants": [
"0x3659cfe6",
"0x3659cfe60000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 3635,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
},
{
"pc": 4534,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
}
],
"guards_detected": [],
"delegatecall_count": 2,
"untrusted_delegatecall_count": 2
}
|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0x6d36ba0d255c1a18ab016c4403d1405fac2492ff65f1195dc1d497893f755bd6
call_targets:
0xd3f582f6b4814e989ee8e96bc3175320b5a540ab
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x6d36ba0d255c1a18ab016c4403d1405fac2492ff65f1195dc1d497893f755bd6",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xd3f582f6b4814e989ee8e96bc3175320b5a540ab"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x06fdde03",
"selector": "0x06fdde03",
"calldata_variants": [
"0x06fdde03",
"0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x0b3dc354",
"selector": "0x0b3dc354",
"calldata_variants": [
"0x0b3dc354",
"0x0b3dc3540000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x150b7a02",
"selector": "0x150b7a02",
"calldata_variants": [
"0x150b7a02",
"0x150b7a020000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1626ba7e",
"selector": "0x1626ba7e",
"calldata_variants": [
"0x1626ba7e",
"0x1626ba7e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x29f8b174",
"selector": "0x29f8b174",
"calldata_variants": [
"0x29f8b174",
"0x29f8b1740000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x333daf92",
"selector": "0x333daf92",
"calldata_variants": [
"0x333daf92",
"0x333daf920000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x34fcd5be",
"selector": "0x34fcd5be",
"calldata_variants": [
"0x34fcd5be",
"0x34fcd5be0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3659cfe6",
"selector": "0x3659cfe6",
"calldata_variants": [
"0x3659cfe6",
"0x3659cfe60000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1472,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2744,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3113,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 10,
"guards_detected": [],
"untrusted_call_count": 10
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0x6d36ba0d255c1a18ab016c4403d1405fac2492ff65f1195dc1d497893f755bd6
call_targets:
0xd3f582f6b4814e989ee8e96bc3175320b5a540ab
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x6d36ba0d255c1a18ab016c4403d1405fac2492ff65f1195dc1d497893f755bd6",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xd3f582f6b4814e989ee8e96bc3175320b5a540ab"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x06fdde03",
"selector": "0x06fdde03",
"calldata_variants": [
"0x06fdde03",
"0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x0b3dc354",
"selector": "0x0b3dc354",
"calldata_variants": [
"0x0b3dc354",
"0x0b3dc3540000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x150b7a02",
"selector": "0x150b7a02",
"calldata_variants": [
"0x150b7a02",
"0x150b7a020000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1626ba7e",
"selector": "0x1626ba7e",
"calldata_variants": [
"0x1626ba7e",
"0x1626ba7e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x29f8b174",
"selector": "0x29f8b174",
"calldata_variants": [
"0x29f8b174",
"0x29f8b1740000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x333daf92",
"selector": "0x333daf92",
"calldata_variants": [
"0x333daf92",
"0x333daf920000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x34fcd5be",
"selector": "0x34fcd5be",
"calldata_variants": [
"0x34fcd5be",
"0x34fcd5be0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3659cfe6",
"selector": "0x3659cfe6",
"calldata_variants": [
"0x3659cfe6",
"0x3659cfe60000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1472,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2744,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3113,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 10,
"guards_detected": []
}
|
| medium | upgradeability | cast | DELEGATECALL present | 80 | no | — |
viewevidence_json{
"notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
"delegatecall_count": 2
}
|
| info | other | cast | Heavy CALL-family usage | 55 | no | — |
viewevidence_json{
"notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
"call_family_count": 14
}
|