019b477e-b317-72ff-8bc4-eb27159612f3
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 |
|---|---|---|---|---|
| 22481 | artifact.fetch | complete | 1 / 3 | 3 months ago |
| 22482 | tool.cast_disasm | complete | 1 / 3 | 3 months ago |
| 65534 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 65535 | capability.graph | complete | 1 / 3 | 1 week ago |
| 65536 | detector.run | complete | 1 / 3 | 1 week ago |
| 65537 | validation.fork | complete | 1 / 3 | 1 week ago |
| 113499 | report.consolidate | complete | 1 / 6 | 1 week ago |
| 113500 | tool.slither | complete | 1 / 2 | 1 week ago |
'forge clean' running (wd: /tmp/slither-a1kvj1uv)
'forge config --json' running
'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-a1kvj1uv)
SimpleExchange.gasExchangePrivate(address,uint256,uint256,uint256) (contracts/Contract.sol#692-716) uses arbitrary from in transferFrom: assert(bool)(EURO_TOKEN.transferFrom(gasRecipient,this,amountEurUlps)) (contracts/Contract.sol#704-708)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#arbitrary-from-in-transferfrom
Reclaimable.reclaim(IBasicToken) (contracts/Contract.sol#332-345) sends eth to arbitrary user
Dangerous calls:
- reclaimer.transfer(address(this).balance) (contracts/Contract.sol#337-339)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#functions-that-send-ether-to-arbitrary-destinations
Reentrancy in AccessControlled.setAccessPolicy(IAccessPolicy,address) (contracts/Contract.sol#107-125):
External calls:
- require(bool)(newPolicy.allowed(newAccessController,ROLE_ACCESS_CONTROLLER,this,msg.sig)) (contracts/Contract.sol#118-120)
- only(ROLE_ACCESS_CONTROLLER) (contracts/Contract.sol#112-114)
- require(bool)(_accessPolicy.allowed(msg.sender,role,this,msg.sig)) (contracts/Contract.sol#91-92)
State variables written after the call(s):
- _accessPolicy = newPolicy (contracts/Contract.sol#123)
AccessControlled._accessPolicy (contracts/Contract.sol#81-82) can be used in cross function reentrancies:
- AccessControlled.accessPolicy() (contracts/Contract.sol#125-131)
- AccessControlled.only(bytes32) (contracts/Contract.sol#89-92)
- AccessControlled.setAccessPolicy(IAccessPolicy,address) (contracts/Contract.sol#107-125)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-1
SimpleExchange.getExchangeRates(address[],address[]).idx (contracts/Contract.sol#666) is a local variable never initialized
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-local-variables
SimpleExchange.constructor(IAccessPolicy,IERC223Token,IERC223Token).accessPolicy (contracts/Contract.sol#573-575) shadows:
- AccessControlled.accessPolicy() (contracts/Contract.sol#125-131) (function)
- IAccessControlled.accessPolicy() (contracts/Contract.sol#52-56) (function)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#local-variable-shadowing
Reclaimable.reclaim(IBasicToken).reclaimer (contracts/Contract.sol#333-335) lacks a zero-check on :
- reclaimer.transfer(address(this).balance) (contracts/Contract.sol#337-339)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#missing-zero-address-validation
SimpleExchange.gasExchangePrivate(address,uint256,uint256,uint256) (contracts/Contract.sol#692-716) has external calls inside a loop: assert(bool)(EURO_TOKEN.transferFrom(gasRecipient,this,amountEurUlps)) (contracts/Contract.sol#704-708)
Calls stack containing the loop:
SimpleExchange.gasExchangeMultiple(address[],uint256[],uint256)
SimpleExchange.gasExchangePrivate(address,uint256,uint256,uint256) (contracts/Contract.sol#692-716) has external calls inside a loop: gasRecipient.transfer(amountEthWei) (contracts/Contract.sol#711-712)
Calls stack containing the loop:
SimpleExchange.gasExchangeMultiple(address[],uint256[],uint256)
SimpleExchange.setExchangeRatePrivate(IERC223Token,IERC223Token,uint256) (contracts/Contract.sol#737-768) has external calls inside a loop: require(bool,string)(denominatorToken.decimals() == numeratorToken.decimals(),NF_SEX_DECIMALS) (contracts/Contract.sol#748-749)
Calls stack containing the loop:
SimpleExchange.setExchangeRates(IERC223Token[],IERC223Token[],uint256[])
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation/#calls-inside-a-loop
Reentrancy in SimpleExchange.setExchangeRatePrivate(IERC223Token,IERC223Token,uint256) (contracts/Contract.sol#737-768):
External calls:
- require(bool,string)(denominatorToken.decimals() == numeratorToken.decimals(),NF_SEX_DECIMALS) (contracts/Contract.sol#748-749)
State variables written after the call(s):
- _rates[denominatorToken][numeratorToken] = TokenRate({rateFraction:uint128(invRateFraction),timestamp:uint128(block.timestamp)}) (contracts/Contract.sol#754-761)
- _rates[numeratorToken][denominatorToken] = TokenRate({rateFraction:uint128(rateFraction),timestamp:uint128(block.timestamp)}) (contracts/Contract.sol#761-764)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2
Reentrancy in SimpleExchange.gasExchange(address,uint256,uint256) (contracts/Contract.sol#589-611):
External calls:
- gasExchangePrivate(gasRecipient,amountEurUlps,exchangeFeeFraction,rate) (contracts/Contract.sol#606-611)
- assert(bool)(EURO_TOKEN.transferFrom(gasRecipient,this,amountEurUlps)) (contracts/Contract.sol#704-708)
- only(ROLE_GAS_EXCHANGE) (contracts/Contract.sol#592-593)
- require(bool)(_accessPolicy.allowed(msg.sender,role,this,msg.sig)) (contracts/Contract.sol#91-92)
External calls sending eth:
- gasExchangePrivate(gasRecipient,amountEurUlps,exchangeFeeFraction,rate) (contracts/Contract.sol#606-611)
- gasRecipient.transfer(amountEthWei) (contracts/Contract.sol#711-712)
Event emitted after the call(s):
- LogGasExchange(gasRecipient,amountEurUlps,exchangeFeeFraction,amountEthWei,rate) (contracts/Contract.sol#712-716)
- gasExchangePrivate(gasRecipient,amountEurUlps,exchangeFeeFraction,rate) (contracts/Contract.sol#606-611)
Reentrancy in SimpleExchange.gasExchangeMultiple(address[],uint256[],uint256) (contracts/Contract.sol#611-632):
External calls:
- gasExchangePrivate(gasRecipients[idx],amountsEurUlps[idx],exchangeFeeFraction,rate) (contracts/Contract.sol#629-631)
- assert(bool)(EURO_TOKEN.transferFrom(gasRecipient,this,amountEurUlps)) (contracts/Contract.sol#704-708)
- only(ROLE_GAS_EXCHANGE) (contracts/Contract.sol#617-619)
- require(bool)(_accessPolicy.allowed(msg.sender,role,this,msg.sig)) (contracts/Contract.sol#91-92)
External calls sending eth:
- gasExchangePrivate(gasRecipients[idx],amountsEurUlps[idx],exchangeFeeFraction,rate) (contracts/Contract.sol#629-631)
- gasRecipient.transfer(amountEthWei) (contracts/Contract.sol#711-712)
Event emitted after the call(s):
- LogGasExchange(gasRecipient,amountEurUlps,exchangeFeeFraction,amountEthWei,rate) (contracts/Contract.sol#712-716)
- gasExchangePrivate(gasRecipients[idx],amountsEurUlps[idx],exchangeFeeFraction,rate) (contracts/Contract.sol#629-631)
Reentrancy in SimpleExchange.gasExchangePrivate(address,uint256,uint256,uint256) (contracts/Contract.sol#692-716):
External calls:
- assert(bool)(EURO_TOKEN.transferFrom(gasRecipient,this,amountEurUlps)) (contracts/Contract.sol#704-708)
External calls sending eth:
- gasRecipient.transfer(amountEthWei) (contracts/Contract.sol#711-712)
Event emitted after the call(s):
- LogGasExchange(gasRecipient,amountEurUlps,exchangeFeeFraction,amountEthWei,rate) (contracts/Contract.sol#712-716)
Reentrancy in AccessControlled.setAccessPolicy(IAccessPolicy,address) (contracts/Contract.sol#107-125):
External calls:
- require(bool)(newPolicy.allowed(newAccessController,ROLE_ACCESS_CONTROLLER,this,msg.sig)) (contracts/Contract.sol#118-120)
- only(ROLE_ACCESS_CONTROLLER) (contracts/Contract.sol#112-114)
- require(bool)(_accessPolicy.allowed(msg.sender,role,this,msg.sig)) (contracts/Contract.sol#91-92)
Event emitted after the call(s):
- LogAccessPolicyChanged(msg.sender,oldPolicy,newPolicy) (contracts/Contract.sol#123-125)
Reentrancy in SimpleExchange.setExchangeRate(IERC223Token,IERC223Token,uint256) (contracts/Contract.sol#639-642):
External calls:
- setExchangeRatePrivate(numeratorToken,denominatorToken,rateFraction) (contracts/Contract.sol#641-642)
- require(bool,string)(denominatorToken.decimals() == numeratorToken.decimals(),NF_SEX_DECIMALS) (contracts/Contract.sol#748-749)
- only(ROLE_TOKEN_RATE_ORACLE) (contracts/Contract.sol#640-641)
- require(bool)(_accessPolicy.allowed(msg.sender,role,this,msg.sig)) (contracts/Contract.sol#91-92)
Event emitted after the call(s):
- LogSetExchangeRate(numeratorToken,denominatorToken,rateFraction) (contracts/Contract.sol#766)
- setExchangeRatePrivate(numeratorToken,denominatorToken,rateFraction) (contracts/Contract.sol#641-642)
- LogSetExchangeRate(denominatorToken,numeratorToken,invRateFraction) (contracts/Contract.sol#767-768)
- setExchangeRatePrivate(numeratorToken,denominatorToken,rateFraction) (contracts/Contract.sol#641-642)
Reentrancy in SimpleExchange.setExchangeRatePrivate(IERC223Token,IERC223Token,uint256) (contracts/Contract.sol#737-768):
External calls:
- require(bool,string)(denominatorToken.decimals() == numeratorToken.decimals(),NF_SEX_DECIMALS) (contracts/Contract.sol#748-749)
Event emitted after the call(s):
- LogSetExchangeRate(numeratorToken,denominatorToken,rateFraction) (contracts/Contract.sol#766)
- LogSetExchangeRate(denominatorToken,numeratorToken,invRateFraction) (contracts/Contract.sol#767-768)
Reentrancy in SimpleExchange.setExchangeRates(IERC223Token[],IERC223Token[],uint256[]) (contracts/Contract.sol#642-652):
External calls:
- setExchangeRatePrivate(numeratorTokens[idx],denominatorTokens[idx],rateFractions[idx]) (contracts/Contract.sol#651-652)
- require(bool,string)(denominatorToken.decimals() == numeratorToken.decimals(),NF_SEX_DECIMALS) (contracts/Contract.sol#748-749)
- only(ROLE_TOKEN_RATE_ORACLE) (contracts/Contract.sol#645)
- require(bool)(_accessPolicy.allowed(msg.sender,role,this,msg.sig)) (contracts/Contract.sol#91-92)
Event emitted after the call(s):
- LogSetExchangeRate(numeratorToken,denominatorToken,rateFraction) (contracts/Contract.sol#766)
- setExchangeRatePrivate(numeratorTokens[idx],denominatorTokens[idx],rateFractions[idx]) (contracts/Contract.sol#651-652)
- LogSetExchangeRate(denominatorToken,numeratorToken,invRateFraction) (contracts/Contract.sol#767-768)
- setExchangeRatePrivate(numeratorTokens[idx],denominatorTokens[idx],rateFractions[idx]) (contracts/Contract.sol#651-652)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3
SimpleExchange.gasExchange(address,uint256,uint256) (contracts/Contract.sol#589-611) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp - rateTimestamp < 3600,NF_SEX_OLD_RATE) (contracts/Contract.sol#603-606)
SimpleExchange.gasExchangeMultiple(address[],uint256[],uint256) (contracts/Contract.sol#611-632) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp - rateTimestamp < 3600,NF_SEX_OLD_RATE) (contracts/Contract.sol#625-626)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#block-timestamp
Void constructor called in SimpleExchange.constructor(IAccessPolicy,IERC223Token,IERC223Token) (contracts/Contract.sol#572-583):
- Reclaimable() (contracts/Contract.sol#580)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#void-constructor
Math.absDiff(uint256,uint256) (contracts/Contract.sol#140-147) is never used and should be removed
Math.max(uint256,uint256) (contracts/Contract.sol#215-221) is never used and should be removed
Math.min(uint256,uint256) (contracts/Contract.sol#207-214) is never used and should be removed
Math.sub(uint256,uint256) (contracts/Contract.sol#191-197) is never used and should be removed
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code
Version constraint 0.4.25 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
- DirtyBytesArrayToStorage
- ABIDecodeTwoDimensionalArrayMemory
- KeccakCaching
- EmptyByteArrayCopy
- DynamicArrayCleanup
- ImplicitConstructorCallvalueCheck
- TupleAssignmentMultiStackSlotComponents
- MemoryArrayCreationOverflow
- privateCanBeOverridden
- SignedArrayStorageCopy
- ABIEncoderV2StorageArrayWithMultiSlotElement
- DynamicConstructorArgumentsClippedABIV2
- UninitializedFunctionPointerInConstructor_0.4.x
- IncorrectEventSignatureInLibraries_0.4.x
- ABIEncoderV2PackedStorage_0.4.x.
It is used by:
- 0.4.25 (contracts/Contract.sol#1)
solc-0.4.25 is an outdated solc version. Use a more recent version (at least 0.8.0), if possible.
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity
Variable SimpleExchange.ETHER_TOKEN (contracts/Contract.sol#557) is not in mixedCase
Variable SimpleExchange.EURO_TOKEN (contracts/Contract.sol#559-560) is not in mixedCase
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions
Reentrancy in SimpleExchange.gasExchangePrivate(address,uint256,uint256,uint256) (contracts/Contract.sol#692-716):
External calls:
- gasRecipient.transfer(amountEthWei) (contracts/Contract.sol#711-712)
Event emitted after the call(s):
- LogGasExchange(gasRecipient,amountEurUlps,exchangeFeeFraction,amountEthWei,rate) (contracts/Contract.sol#712-716)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-4
AccessRoles.ROLE_NEUMARK_ISSUER (contracts/Contract.sol#242-246) is never used in SimpleExchange (contracts/Contract.sol#544-768)
AccessRoles.ROLE_NEUMARK_BURNER (contracts/Contract.sol#247-250) is never used in SimpleExchange (contracts/Contract.sol#544-768)
AccessRoles.ROLE_SNAPSHOT_CREATOR (contracts/Contract.sol#250-253) is never used in SimpleExchange (contracts/Contract.sol#544-768)
AccessRoles.ROLE_TRANSFER_ADMIN (contracts/Contract.sol#253-256) is never used in SimpleExchange (contracts/Contract.sol#544-768)
AccessRoles.ROLE_PLATFORM_OPERATOR_REPRESENTATIVE (contracts/Contract.sol#262-264) is never used in SimpleExchange (contracts/Contract.sol#544-768)
AccessRoles.ROLE_EURT_DEPOSIT_MANAGER (contracts/Contract.sol#264-265) is never used in SimpleExchange (contracts/Contract.sol#544-768)
AccessRoles.ROLE_IDENTITY_MANAGER (contracts/Contract.sol#267-268) is never used in SimpleExchange (contracts/Contract.sol#544-768)
AccessRoles.ROLE_EURT_LEGAL_MANAGER (contracts/Contract.sol#270-271) is never used in SimpleExchange (contracts/Contract.sol#544-768)
AccessRoles.ROLE_UNIVERSE_MANAGER (contracts/Contract.sol#273-274) is never used in SimpleExchange (contracts/Contract.sol#544-768)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unused-state-variable
transfer(address,uint256,bytes) should be declared external:
- IERC223Token.transfer(address,uint256,bytes) (contracts/Contract.sol#452-455)
gasExchangeMultiple(address[],uint256[],uint256) should be declared external:
- IGasExchange.gasExchangeMultiple(address[],uint256[],uint256) (contracts/Contract.sol#507-508)
- SimpleExchange.gasExchangeMultiple(address[],uint256[],uint256) (contracts/Contract.sol#611-632)
setExchangeRates(IERC223Token[],IERC223Token[],uint256[]) should be declared external:
- IGasExchange.setExchangeRates(IERC223Token[],IERC223Token[],uint256[]) (contracts/Contract.sol#529-530)
- SimpleExchange.setExchangeRates(IERC223Token[],IERC223Token[],uint256[]) (contracts/Contract.sol#642-652)
getExchangeRates(address[],address[]) should be declared external:
- ITokenExchangeRateOracle.getExchangeRates(address[],address[]) (contracts/Contract.sol#537-542)
- SimpleExchange.getExchangeRates(address[],address[]) (contracts/Contract.sol#661-682)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external
. analyzed (16 contracts with 100 detectors), 42 result(s) found
{
"solc": {
"status": "ok",
"use_rc": 0,
"version": "0.4.25",
"strategy": "solc-select",
"solc_path": "/var/www/tripwire/.venv/bin/solc",
"install_rc": 0,
"use_stderr": null,
"use_stdout": "Switched global version to 0.4.25",
"install_stderr": null,
"install_stdout": "Version '0.4.25' is already installed, skipping..."
},
"solc_args": "--base-path /tmp/slither-a1kvj1uv --allow-paths /tmp/slither-a1kvj1uv,/tmp/slither-a1kvj1uv/lib,/tmp/slither-a1kvj1uv/src",
"remappings": [],
"source_files": [
"contracts/Contract.sol"
],
"contract_count": 0,
"contract_names": [],
"detector_count": 42,
"workspace_hash": "90c36935bebb7f5a812286aff042724c9fb81c14e7866271943c815e45529160",
"duration_seconds": 0.5899252891540527,
"solc_version_requested": "0.4.25"
}
OpenAI Codex v0.118.0 (research preview) -------- workdir: /tmp/codex-v16rh4vq model: gpt-5.4 provider: openai approval: never sandbox: read-only reasoning effort: high reasoning summaries: none session id: 019d5c95-d2c1-7d71-bb93-6b11801995ec -------- user You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities. Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation, accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall. Scope rules: - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party Solidity sources in this workspace. - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code. - If there are only dependency files and no first-party sources, set no_findings=true and explain in summary. Output MUST be valid JSON matching the provided schema. - If you find nothing meaningful: set no_findings=true and findings=[]. - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible. Output constraints (IMPORTANT): - severity MUST be exactly one of: info, low, medium, high, critical (lowercase). - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other. Keep summary short and concrete. warning: Codex could not find system bubblewrap on PATH. Please install bubblewrap with your package manager. Codex will use the vendored bubblewrap in the meantime. ERROR: You've hit your usage limit. Visit https://chatgpt.com/codex/settings/usage to purchase more credits or try again at Apr 8th, 2026 9:11 AM. ERROR: You've hit your usage limit. Visit https://chatgpt.com/codex/settings/usage to purchase more credits or try again at Apr 8th, 2026 9:11 AM.
{
"codex": {
"ran_at": "2026-04-05T07:40:17.559724+00:00",
"returncode": 1
},
"project": {
"mode": "source",
"file_count": 1,
"import_count": 0,
"first_party_contracts_count": 1
},
"summary": null,
"no_findings": null,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x00a3 0000000c: JUMPI 0000000d: PUSH4 0xffffffff 00000012: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 00000030: PUSH1 0x00 00000032: CALLDATALOAD 00000033: DIV 00000034: AND 00000035: PUSH4 0x259df814 0000003a: DUP2 0000003b: EQ 0000003c: PUSH2 0x00e4 0000003f: JUMPI 00000040: DUP1 00000041: PUSH4 0x57875631 00000046: EQ 00000047: PUSH2 0x010d 0000004a: JUMPI 0000004b: DUP1 0000004c: PUSH4 0x759970be 00000051: EQ 00000052: PUSH2 0x0134 00000055: JUMPI 00000056: DUP1 00000057: PUSH4 0x782aaeea 0000005c: EQ 0000005d: PUSH2 0x01c4 00000060: JUMPI 00000061: DUP1 00000062: PUSH4 0x8291286c 00000067: EQ 00000068: PUSH2 0x01ee 0000006b: JUMPI 0000006c: DUP1 0000006d: PUSH4 0x9be54fe9 00000072: EQ 00000073: PUSH2 0x021c 00000076: JUMPI 00000077: DUP1 00000078: PUSH4 0xbaaa61be 0000007d: EQ 0000007e: PUSH2 0x0343 00000081: JUMPI 00000082: DUP1 00000083: PUSH4 0xe8b6ab90 00000088: EQ 00000089: PUSH2 0x036a 0000008c: JUMPI 0000008d: DUP1 0000008e: PUSH4 0xf5d60a51 00000093: EQ 00000094: PUSH2 0x0431 00000097: JUMPI 00000098: DUP1 00000099: PUSH4 0xfc772c8b 0000009e: EQ 0000009f: PUSH2 0x0462 000000a2: JUMPI 000000a3: JUMPDEST 000000a4: PUSH1 0x40 000000a6: DUP1 000000a7: MLOAD 000000a8: CALLER 000000a9: DUP2 000000aa: MSTORE 000000ab: CALLVALUE 000000ac: PUSH1 0x20 000000ae: DUP3 000000af: ADD 000000b0: MSTORE 000000b1: ADDRESS 000000b2: BALANCE 000000b3: DUP2 000000b4: DUP4 000000b5: ADD 000000b6: MSTORE 000000b7: SWAP1 000000b8: MLOAD 000000b9: PUSH32 0x633d9fea77720aaf2e5fa116283184d790773f86cb47f83e32a613a0f7afc3b4 000000da: SWAP2 000000db: DUP2 000000dc: SWAP1 000000dd: SUB 000000de: PUSH1 0x60 000000e0: ADD 000000e1: SWAP1 000000e2: LOG1 000000e3: STOP 000000e4: JUMPDEST 000000e5: CALLVALUE 000000e6: DUP1 000000e7: ISZERO 000000e8: PUSH2 0x00f0 000000eb: JUMPI 000000ec: PUSH1 0x00 000000ee: DUP1 000000ef: REVERT 000000f0: JUMPDEST 000000f1: POP 000000f2: PUSH2 0x010b 000000f5: PUSH1 0x01 000000f7: PUSH1 0xa0 000000f9: PUSH1 0x02 000000fb: EXP 000000fc: SUB 000000fd: PUSH1 0x04 000000ff: CALLDATALOAD 00000100: AND 00000101: PUSH1 0x24 00000103: CALLDATALOAD 00000104: PUSH1 0x44 00000106: CALLDATALOAD 00000107: PUSH2 0x0483 0000010a: JUMP 0000010b: JUMPDEST 0000010c: STOP 0000010d: JUMPDEST 0000010e: CALLVALUE 0000010f: DUP1 00000110: ISZERO 00000111: PUSH2 0x0119 00000114: JUMPI 00000115: PUSH1 0x00 00000117: DUP1 00000118: REVERT 00000119: JUMPDEST 0000011a: POP 0000011b: PUSH2 0x010b 0000011e: PUSH1 0x01 00000120: PUSH1 0xa0 00000122: PUSH1 0x02 00000124: EXP 00000125: SUB 00000126: PUSH1 0x04 00000128: CALLDATALOAD 00000129: DUP2 0000012a: AND 0000012b: SWAP1 0000012c: PUSH1 0x24 0000012e: CALLDATALOAD 0000012f: AND 00000130: PUSH2 0x05ea 00000133: JUMP 00000134: JUMPDEST 00000135: CALLVALUE 00000136: DUP1 00000137: ISZERO 00000138: PUSH2 0x0140 0000013b: JUMPI 0000013c: PUSH1 0x00 0000013e: DUP1 0000013f: REVERT 00000140: JUMPDEST 00000141: POP 00000142: PUSH1 0x40 00000144: DUP1 00000145: MLOAD 00000146: PUSH1 0x20 00000148: PUSH1 0x04 0000014a: DUP1 0000014b: CALLDATALOAD 0000014c: DUP1 0000014d: DUP3 0000014e: ADD 0000014f: CALLDATALOAD 00000150: DUP4 00000151: DUP2 00000152: MUL 00000153: DUP1 00000154: DUP7 00000155: ADD 00000156: DUP6 00000157: ADD 00000158: SWAP1 00000159: SWAP7 0000015a: MSTORE 0000015b: DUP1 0000015c: DUP6 0000015d: MSTORE 0000015e: PUSH2 0x010b 00000161: SWAP6 00000162: CALLDATASIZE 00000163: SWAP6 00000164: SWAP4 00000165: SWAP5 00000166: PUSH1 0x24 00000168: SWAP5 00000169: SWAP4 0000016a: DUP6 0000016b: ADD 0000016c: SWAP3 0000016d: SWAP2 0000016e: DUP3 0000016f: SWAP2 00000170: DUP6 00000171: ADD 00000172: SWAP1 00000173: DUP5 00000174: SWAP1 00000175: DUP1 00000176: DUP3 00000177: DUP5 00000178: CALLDATACOPY 00000179: POP 0000017a: POP 0000017b: PUSH1 0x40 0000017d: DUP1 0000017e: MLOAD 0000017f: DUP8 00000180: CALLDATALOAD 00000181: DUP10 00000182: ADD 00000183: DUP1 00000184: CALLDATALOAD 00000185: PUSH1 0x20 00000187: DUP2 00000188: DUP2 00000189: MUL 0000018a: DUP5 0000018b: DUP2 0000018c: ADD 0000018d: DUP3 0000018e: ADD 0000018f: SWAP1 00000190: SWAP6 00000191: MSTORE 00000192: DUP2 00000193: DUP5 00000194: MSTORE 00000195: SWAP9 00000196: SWAP12 00000197: SWAP11 00000198: SWAP10 00000199: DUP10 0000019a: ADD 0000019b: SWAP9 0000019c: SWAP3 0000019d: SWAP8 0000019e: POP 0000019f: SWAP1 000001a0: DUP3 000001a1: ADD 000001a2: SWAP6 000001a3: POP 000001a4: SWAP4 000001a5: POP 000001a6: DUP4 000001a7: SWAP3 000001a8: POP 000001a9: DUP6 000001aa: ADD 000001ab: SWAP1 000001ac: DUP5 000001ad: SWAP1 000001ae: DUP1 000001af: DUP3 000001b0: DUP5 000001b1: CALLDATACOPY 000001b2: POP 000001b3: SWAP5 000001b4: SWAP8 000001b5: POP 000001b6: POP 000001b7: SWAP4 000001b8: CALLDATALOAD 000001b9: SWAP5 000001ba: POP 000001bb: PUSH2 0x07f1 000001be: SWAP4 000001bf: POP 000001c0: POP 000001c1: POP 000001c2: POP 000001c3: JUMP 000001c4: JUMPDEST 000001c5: CALLVALUE 000001c6: DUP1 000001c7: ISZERO 000001c8: PUSH2 0x01d0 000001cb: JUMPI 000001cc: PUSH1 0x00 000001ce: DUP1 000001cf: REVERT 000001d0: JUMPDEST 000001d1: POP 000001d2: PUSH2 0x010b 000001d5: PUSH1 0x01 000001d7: PUSH1 0xa0 000001d9: PUSH1 0x02 000001db: EXP 000001dc: SUB 000001dd: PUSH1 0x04 000001df: CALLDATALOAD 000001e0: DUP2 000001e1: AND 000001e2: SWAP1 000001e3: PUSH1 0x24 000001e5: CALLDATALOAD 000001e6: AND 000001e7: PUSH1 0x44 000001e9: CALLDATALOAD 000001ea: PUSH2 0x09af 000001ed: JUMP 000001ee: JUMPDEST 000001ef: CALLVALUE 000001f0: DUP1 000001f1: ISZERO 000001f2: PUSH2 0x01fa 000001f5: JUMPI 000001f6: PUSH1 0x00 000001f8: DUP1 000001f9: REVERT 000001fa: JUMPDEST 000001fb: POP 000001fc: PUSH2 0x0203 000001ff: PUSH2 0x0a89 00000202: JUMP 00000203: JUMPDEST 00000204: PUSH1 0x40 00000206: DUP1 00000207: MLOAD 00000208: SWAP3 00000209: DUP4 0000020a: MSTORE 0000020b: PUSH1 0x20 0000020d: DUP4 0000020e: ADD 0000020f: SWAP2 00000210: SWAP1 00000211: SWAP2 00000212: MSTORE 00000213: DUP1 00000214: MLOAD 00000215: SWAP2 00000216: DUP3 00000217: SWAP1 00000218: SUB 00000219: ADD 0000021a: SWAP1 0000021b: RETURN 0000021c: JUMPDEST 0000021d: CALLVALUE 0000021e: DUP1 0000021f: ISZERO 00000220: PUSH2 0x0228 00000223: JUMPI 00000224: PUSH1 0x00 00000226: DUP1 00000227: REVERT 00000228: JUMPDEST 00000229: POP 0000022a: PUSH1 0x40 0000022c: DUP1 0000022d: MLOAD 0000022e: PUSH1 0x20 00000230: PUSH1 0x04 00000232: DUP1 00000233: CALLDATALOAD 00000234: DUP1 00000235: DUP3 00000236: ADD 00000237: CALLDATALOAD 00000238: DUP4 00000239: DUP2 0000023a: MUL 0000023b: DUP1 0000023c: DUP7 0000023d: ADD 0000023e: DUP6 0000023f: ADD 00000240: SWAP1 00000241: SWAP7 00000242: MSTORE 00000243: DUP1 00000244: DUP6 00000245: MSTORE 00000246: PUSH2 0x02aa 00000249: SWAP6 0000024a: CALLDATASIZE 0000024b: SWAP6 0000024c: SWAP4 0000024d: SWAP5 0000024e: PUSH1 0x24 00000250: SWAP5 00000251: SWAP4 00000252: DUP6 00000253: ADD 00000254: SWAP3 00000255: SWAP2 00000256: DUP3 00000257: SWAP2 00000258: DUP6 00000259: ADD 0000025a: SWAP1 0000025b: DUP5 0000025c: SWAP1 0000025d: DUP1 0000025e: DUP3 0000025f: DUP5 00000260: CALLDATACOPY 00000261: POP 00000262: POP 00000263: PUSH1 0x40 00000265: DUP1 00000266: MLOAD 00000267: DUP8 00000268: CALLDATALOAD 00000269: DUP10 0000026a: ADD 0000026b: DUP1 0000026c: CALLDATALOAD 0000026d: PUSH1 0x20 0000026f: DUP2 00000270: DUP2 00000271: MUL 00000272: DUP5 00000273: DUP2 00000274: ADD 00000275: DUP3 00000276: ADD 00000277: SWAP1 00000278: SWAP6 00000279: MSTORE 0000027a: DUP2 0000027b: DUP5 0000027c: MSTORE 0000027d: SWAP9 0000027e: SWAP12 0000027f: SWAP11 00000280: SWAP10 00000281: DUP10 00000282: ADD 00000283: SWAP9 00000284: SWAP3 00000285: SWAP8 00000286: POP 00000287: SWAP1 00000288: DUP3 00000289: ADD 0000028a: SWAP6 0000028b: POP 0000028c: SWAP4 0000028d: POP 0000028e: DUP4 0000028f: SWAP3 00000290: POP 00000291: DUP6 00000292: ADD 00000293: SWAP1 00000294: DUP5 00000295: SWAP1 00000296: DUP1 00000297: DUP3 00000298: DUP5 00000299: CALLDATACOPY 0000029a: POP 0000029b: SWAP5 0000029c: SWAP8 0000029d: POP 0000029e: PUSH2 0x0ab0 000002a1: SWAP7 000002a2: POP 000002a3: POP 000002a4: POP 000002a5: POP 000002a6: POP 000002a7: POP 000002a8: POP 000002a9: JUMP 000002aa: JUMPDEST 000002ab: PUSH1 0x40 000002ad: MLOAD 000002ae: DUP1 000002af: DUP1 000002b0: PUSH1 0x20 000002b2: ADD 000002b3: DUP1 000002b4: PUSH1 0x20 000002b6: ADD 000002b7: DUP4 000002b8: DUP2 000002b9: SUB 000002ba: DUP4 000002bb: MSTORE 000002bc: DUP6 000002bd: DUP2 000002be: DUP2 000002bf: MLOAD 000002c0: DUP2 000002c1: MSTORE 000002c2: PUSH1 0x20 000002c4: ADD 000002c5: SWAP2 000002c6: POP 000002c7: DUP1 000002c8: MLOAD 000002c9: SWAP1 000002ca: PUSH1 0x20 000002cc: ADD 000002cd: SWAP1 000002ce: PUSH1 0x20 000002d0: MUL 000002d1: DUP1 000002d2: DUP4 000002d3: DUP4 000002d4: PUSH1 0x00 000002d6: JUMPDEST 000002d7: DUP4 000002d8: DUP2 000002d9: LT 000002da: ISZERO 000002db: PUSH2 0x02ee 000002de: JUMPI 000002df: DUP2 000002e0: DUP2 000002e1: ADD 000002e2: MLOAD 000002e3: DUP4 000002e4: DUP3 000002e5: ADD 000002e6: MSTORE 000002e7: PUSH1 0x20 000002e9: ADD 000002ea: PUSH2 0x02d6 000002ed: JUMP 000002ee: JUMPDEST 000002ef: POP 000002f0: POP 000002f1: POP 000002f2: POP 000002f3: SWAP1 000002f4: POP 000002f5: ADD 000002f6: DUP4 000002f7: DUP2 000002f8: SUB 000002f9: DUP3 000002fa: MSTORE 000002fb: DUP5 000002fc: DUP2 000002fd: DUP2 000002fe: MLOAD 000002ff: DUP2 00000300: MSTORE 00000301: PUSH1 0x20 00000303: ADD 00000304: SWAP2 00000305: POP 00000306: DUP1 00000307: MLOAD 00000308: SWAP1 00000309: PUSH1 0x20 0000030b: ADD 0000030c: SWAP1 0000030d: PUSH1 0x20 0000030f: MUL 00000310: DUP1 00000311: DUP4 00000312: DUP4 00000313: PUSH1 0x00 00000315: JUMPDEST 00000316: DUP4 00000317: DUP2 00000318: LT 00000319: ISZERO 0000031a: PUSH2 0x032d 0000031d: JUMPI 0000031e: DUP2 0000031f: DUP2 00000320: ADD 00000321: MLOAD 00000322: DUP4 00000323: DUP3 00000324: ADD 00000325: MSTORE 00000326: PUSH1 0x20 00000328: ADD 00000329: PUSH2 0x0315 0000032c: JUMP 0000032d: JUMPDEST 0000032e: POP 0000032f: POP 00000330: POP 00000331: POP 00000332: SWAP1 00000333: POP 00000334: ADD 00000335: SWAP5 00000336: POP 00000337: POP 00000338: POP 00000339: POP 0000033a: POP 0000033b: PUSH1 0x40 0000033d: MLOAD 0000033e: DUP1 0000033f: SWAP2 00000340: SUB 00000341: SWAP1 00000342: RETURN 00000343: JUMPDEST 00000344: CALLVALUE 00000345: DUP1 00000346: ISZERO 00000347: PUSH2 0x034f 0000034a: JUMPI 0000034b: PUSH1 0x00 0000034d: DUP1 0000034e: REVERT 0000034f: JUMPDEST 00000350: POP 00000351: PUSH2 0x0203 00000354: PUSH1 0x01 00000356: PUSH1 0xa0 00000358: PUSH1 0x02 0000035a: EXP 0000035b: SUB 0000035c: PUSH1 0x04 0000035e: CALLDATALOAD 0000035f: DUP2 00000360: AND 00000361: SWAP1 00000362: PUSH1 0x24 00000364: CALLDATALOAD 00000365: AND 00000366: PUSH2 0x0bb3 00000369: JUMP 0000036a: JUMPDEST 0000036b: CALLVALUE 0000036c: DUP1 0000036d: ISZERO 0000036e: PUSH2 0x0376 00000371: JUMPI 00000372: PUSH1 0x00 00000374: DUP1 00000375: REVERT 00000376: JUMPDEST 00000377: POP 00000378: PUSH1 0x40 0000037a: DUP1 0000037b: MLOAD 0000037c: PUSH1 0x20 0000037e: PUSH1 0x04 00000380: DUP1 00000381: CALLDATALOAD 00000382: DUP1 00000383: DUP3 00000384: ADD 00000385: CALLDATALOAD 00000386: DUP4 00000387: DUP2 00000388: MUL 00000389: DUP1 0000038a: DUP7 0000038b: ADD 0000038c: DUP6 0000038d: ADD 0000038e: SWAP1 0000038f: SWAP7 00000390: MSTORE 00000391: DUP1 00000392: DUP6 00000393: MSTORE 00000394: PUSH2 0x010b 00000397: SWAP6 00000398: CALLDATASIZE 00000399: SWAP6 0000039a: SWAP4 0000039b: SWAP5 0000039c: PUSH1 0x24 0000039e: SWAP5 0000039f: SWAP4 000003a0: DUP6 000003a1: ADD 000003a2: SWAP3 000003a3: SWAP2 000003a4: DUP3 000003a5: SWAP2 000003a6: DUP6 000003a7: ADD 000003a8: SWAP1 000003a9: DUP5 000003aa: SWAP1 000003ab: DUP1 000003ac: DUP3 000003ad: DUP5 000003ae: CALLDATACOPY 000003af: POP 000003b0: POP 000003b1: PUSH1 0x40 000003b3: DUP1 000003b4: MLOAD 000003b5: DUP8 000003b6: CALLDATALOAD 000003b7: DUP10 000003b8: ADD 000003b9: DUP1 000003ba: CALLDATALOAD 000003bb: PUSH1 0x20 000003bd: DUP2 000003be: DUP2 000003bf: MUL 000003c0: DUP5 000003c1: DUP2 000003c2: ADD 000003c3: DUP3 000003c4: ADD 000003c5: SWAP1 000003c6: SWAP6 000003c7: MSTORE 000003c8: DUP2 000003c9: DUP5 000003ca: MSTORE 000003cb: SWAP9 000003cc: SWAP12 000003cd: SWAP11 000003ce: SWAP10 000003cf: DUP10 000003d0: ADD 000003d1: SWAP9 000003d2: SWAP3 000003d3: SWAP8 000003d4: POP 000003d5: SWAP1 000003d6: DUP3 000003d7: ADD 000003d8: SWAP6 000003d9: POP 000003da: SWAP4 000003db: POP 000003dc: DUP4 000003dd: SWAP3 000003de: POP 000003df: DUP6 000003e0: ADD 000003e1: SWAP1 000003e2: DUP5 000003e3: SWAP1 000003e4: DUP1 000003e5: DUP3 000003e6: DUP5 000003e7: CALLDATACOPY 000003e8: POP 000003e9: POP 000003ea: PUSH1 0x40 000003ec: DUP1 000003ed: MLOAD 000003ee: DUP8 000003ef: CALLDATALOAD 000003f0: DUP10 000003f1: ADD 000003f2: DUP1 000003f3: CALLDATALOAD 000003f4: PUSH1 0x20 000003f6: DUP2 000003f7: DUP2 000003f8: MUL 000003f9: DUP5 000003fa: DUP2 000003fb: ADD 000003fc: DUP3 000003fd: ADD 000003fe: SWAP1 000003ff: SWAP6 00000400: MSTORE 00000401: DUP2 00000402: DUP5 00000403: MSTORE 00000404: SWAP9 00000405: SWAP12 00000406: SWAP11 00000407: SWAP10 00000408: DUP10 00000409: ADD 0000040a: SWAP9 0000040b: SWAP3 0000040c: SWAP8 0000040d: POP 0000040e: SWAP1 0000040f: DUP3 00000410: ADD 00000411: SWAP6 00000412: POP 00000413: SWAP4 00000414: POP 00000415: DUP4 00000416: SWAP3 00000417: POP 00000418: DUP6 00000419: ADD 0000041a: SWAP1 0000041b: DUP5 0000041c: SWAP1 0000041d: DUP1 0000041e: DUP3 0000041f: DUP5 00000420: CALLDATACOPY 00000421: POP 00000422: SWAP5 00000423: SWAP8 00000424: POP 00000425: PUSH2 0x0bcb 00000428: SWAP7 00000429: POP 0000042a: POP 0000042b: POP 0000042c: POP 0000042d: POP 0000042e: POP 0000042f: POP 00000430: JUMP 00000431: JUMPDEST 00000432: CALLVALUE 00000433: DUP1 00000434: ISZERO 00000435: PUSH2 0x043d 00000438: JUMPI 00000439: PUSH1 0x00 0000043b: DUP1 0000043c: REVERT 0000043d: JUMPDEST 0000043e: POP 0000043f: PUSH2 0x0446 00000442: PUSH2 0x0d1d 00000445: JUMP 00000446: JUMPDEST 00000447: PUSH1 0x40 00000449: DUP1 0000044a: MLOAD 0000044b: PUSH1 0x01 0000044d: PUSH1 0xa0 0000044f: PUSH1 0x02 00000451: EXP 00000452: SUB 00000453: SWAP1 00000454: SWAP3 00000455: AND 00000456: DUP3 00000457: MSTORE 00000458: MLOAD 00000459: SWAP1 0000045a: DUP2 0000045b: SWAP1 0000045c: SUB 0000045d: PUSH1 0x20 0000045f: ADD 00000460: SWAP1 00000461: RETURN 00000462: JUMPDEST 00000463: CALLVALUE 00000464: DUP1 00000465: ISZERO 00000466: PUSH2 0x046e 00000469: JUMPI 0000046a: PUSH1 0x00 0000046c: DUP1 0000046d: REVERT 0000046e: JUMPDEST 0000046f: POP 00000470: PUSH2 0x010b 00000473: PUSH1 0x01 00000475: PUSH1 0xa0 00000477: PUSH1 0x02 00000479: EXP 0000047a: SUB 0000047b: PUSH1 0x04 0000047d: CALLDATALOAD 0000047e: AND 0000047f: PUSH2 0x0d2c 00000482: JUMP 00000483: JUMPDEST 00000484: PUSH1 0x00 00000486: DUP1 00000487: SLOAD 00000488: PUSH1 0x40 0000048a: DUP1 0000048b: MLOAD 0000048c: PUSH1 0xe0 0000048e: PUSH1 0x02 00000490: EXP 00000491: PUSH4 0x9085b77f 00000496: MUL 00000497: DUP2 00000498: MSTORE 00000499: CALLER 0000049a: PUSH1 0x04 0000049c: DUP3 0000049d: ADD 0000049e: MSTORE 0000049f: PUSH32 0x9fe43636e0675246c99e96d7abf9f858f518b9442c35166d87f0934abef8a969 000004c0: PUSH1 0x24 000004c2: DUP3 000004c3: ADD 000004c4: DUP2 000004c5: SWAP1 000004c6: MSTORE 000004c7: ADDRESS 000004c8: PUSH1 0x44 000004ca: DUP4 000004cb: ADD 000004cc: MSTORE 000004cd: PUSH1 0x01 000004cf: PUSH1 0xe0 000004d1: PUSH1 0x02 000004d3: EXP 000004d4: SUB 000004d5: NOT 000004d6: DUP6 000004d7: CALLDATALOAD 000004d8: AND 000004d9: PUSH1 0x64 000004db: DUP4 000004dc: ADD 000004dd: MSTORE 000004de: SWAP2 000004df: MLOAD 000004e0: DUP5 000004e1: SWAP4 000004e2: PUSH1 0x01 000004e4: PUSH1 0xa0 000004e6: PUSH1 0x02 000004e8: EXP 000004e9: SUB 000004ea: AND 000004eb: SWAP2 000004ec: PUSH4 0x9085b77f 000004f1: SWAP2 000004f2: PUSH1 0x84 000004f4: DUP1 000004f5: DUP4 000004f6: ADD 000004f7: SWAP3 000004f8: PUSH1 0x20 000004fa: SWAP3 000004fb: SWAP2 000004fc: SWAP1 000004fd: DUP3 000004fe: SWAP1 000004ff: SUB 00000500: ADD 00000501: DUP2 00000502: DUP9 00000503: DUP8 00000504: DUP1 00000505: EXTCODESIZE 00000506: ISZERO 00000507: DUP1 00000508: ISZERO 00000509: PUSH2 0x0511 0000050c: JUMPI 0000050d: PUSH1 0x00 0000050f: DUP1 00000510: REVERT 00000511: JUMPDEST 00000512: POP 00000513: GAS 00000514: CALL 00000515: ISZERO 00000516: DUP1 00000517: ISZERO 00000518: PUSH2 0x0525 0000051b: JUMPI 0000051c: RETURNDATASIZE 0000051d: PUSH1 0x00 0000051f: DUP1 00000520: RETURNDATACOPY 00000521: RETURNDATASIZE 00000522: PUSH1 0x00 00000524: REVERT 00000525: JUMPDEST 00000526: POP 00000527: POP 00000528: POP 00000529: POP 0000052a: PUSH1 0x40 0000052c: MLOAD 0000052d: RETURNDATASIZE 0000052e: PUSH1 0x20 00000530: DUP2 00000531: LT 00000532: ISZERO 00000533: PUSH2 0x053b 00000536: JUMPI 00000537: PUSH1 0x00 00000539: DUP1 0000053a: REVERT 0000053b: JUMPDEST 0000053c: POP 0000053d: MLOAD 0000053e: ISZERO 0000053f: ISZERO 00000540: PUSH2 0x0548 00000543: JUMPI 00000544: PUSH1 0x00 00000546: DUP1 00000547: REVERT 00000548: JUMPDEST 00000549: PUSH8 0x0de0b6b3a7640000 00000552: DUP5 00000553: LT 00000554: PUSH2 0x0559 00000557: JUMPI 00000558: INVALID 00000559: JUMPDEST 0000055a: PUSH1 0x02 0000055c: SLOAD 0000055d: PUSH1 0x01 0000055f: SLOAD 00000560: PUSH2 0x0575 00000563: SWAP2 00000564: PUSH1 0x01 00000566: PUSH1 0xa0 00000568: PUSH1 0x02 0000056a: EXP 0000056b: SUB 0000056c: SWAP1 0000056d: DUP2 0000056e: AND 0000056f: SWAP2 00000570: AND 00000571: PUSH2 0x0f73 00000574: JUMP 00000575: JUMPDEST 00000576: SWAP3 00000577: POP 00000578: SWAP3 00000579: POP 0000057a: PUSH2 0x0e10 0000057d: DUP3 0000057e: TIMESTAMP 0000057f: SUB 00000580: LT 00000581: ISZERO 00000582: ISZERO 00000583: PUSH2 0x05d6 00000586: JUMPI 00000587: PUSH1 0x40 00000589: DUP1 0000058a: MLOAD 0000058b: PUSH1 0xe5 0000058d: PUSH1 0x02 0000058f: EXP 00000590: PUSH3 0x461bcd 00000594: MUL 00000595: DUP2 00000596: MSTORE 00000597: PUSH1 0x20 00000599: PUSH1 0x04 0000059b: DUP3 0000059c: ADD 0000059d: MSTORE 0000059e: PUSH1 0x0f 000005a0: PUSH1 0x24 000005a2: DUP3 000005a3: ADD 000005a4: MSTORE 000005a5: PUSH32 0x4e465f5345585f4f4c445f524154450000000000000000000000000000000000 000005c6: PUSH1 0x44 000005c8: DUP3 000005c9: ADD 000005ca: MSTORE 000005cb: SWAP1 000005cc: MLOAD 000005cd: SWAP1 000005ce: DUP2 000005cf: SWAP1 000005d0: SUB 000005d1: PUSH1 0x64 000005d3: ADD 000005d4: SWAP1 000005d5: REVERT 000005d6: JUMPDEST 000005d7: PUSH2 0x05e2 000005da: DUP7 000005db: DUP7 000005dc: DUP7 000005dd: DUP7 000005de: PUSH2 0x106f 000005e1: JUMP 000005e2: JUMPDEST 000005e3: POP 000005e4: POP 000005e5: POP 000005e6: POP 000005e7: POP 000005e8: POP 000005e9: JUMP 000005ea: JUMPDEST 000005eb: PUSH1 0x00 000005ed: DUP1 000005ee: SLOAD 000005ef: PUSH1 0x40 000005f1: DUP1 000005f2: MLOAD 000005f3: PUSH1 0xe0 000005f5: PUSH1 0x02 000005f7: EXP 000005f8: PUSH4 0x9085b77f 000005fd: MUL 000005fe: DUP2 000005ff: MSTORE 00000600: CALLER 00000601: PUSH1 0x04 00000603: DUP3 00000604: ADD 00000605: MSTORE 00000606: PUSH32 0xac42f8beb17975ed062dcb80c63e6d203ef1c2c335ced149dc5664cc671cb7da 00000627: PUSH1 0x24 00000629: DUP3 0000062a: ADD 0000062b: DUP2 0000062c: SWAP1 0000062d: MSTORE 0000062e: ADDRESS 0000062f: PUSH1 0x44 00000631: DUP4 00000632: ADD 00000633: MSTORE 00000634: PUSH1 0x01 00000636: PUSH1 0xe0 00000638: PUSH1 0x02 0000063a: EXP 0000063b: SUB 0000063c: NOT 0000063d: DUP6 0000063e: CALLDATALOAD 0000063f: AND 00000640: PUSH1 0x64 00000642: DUP4 00000643: ADD 00000644: MSTORE 00000645: SWAP2 00000646: MLOAD 00000647: SWAP2 00000648: SWAP3 00000649: PUSH1 0x01 0000064b: PUSH1 0xa0 0000064d: PUSH1 0x02 0000064f: EXP 00000650: SUB 00000651: AND 00000652: SWAP2 00000653: PUSH4 0x9085b77f 00000658: SWAP2 00000659: PUSH1 0x84 0000065b: DUP1 0000065c: DUP3 0000065d: ADD 0000065e: SWAP3 0000065f: PUSH1 0x20 00000661: SWAP3 00000662: SWAP1 00000663: SWAP2 00000664: SWAP1 00000665: DUP3 00000666: SWAP1 00000667: SUB 00000668: ADD 00000669: DUP2 0000066a: DUP9 0000066b: DUP8 0000066c: DUP1 0000066d: EXTCODESIZE 0000066e: ISZERO 0000066f: DUP1 00000670: ISZERO 00000671: PUSH2 0x0679 00000674: JUMPI 00000675: PUSH1 0x00 00000677: DUP1 00000678: REVERT 00000679: JUMPDEST 0000067a: POP 0000067b: GAS 0000067c: CALL 0000067d: ISZERO 0000067e: DUP1 0000067f: ISZERO 00000680: PUSH2 0x068d 00000683: JUMPI 00000684: RETURNDATASIZE 00000685: PUSH1 0x00 00000687: DUP1 00000688: RETURNDATACOPY 00000689: RETURNDATASIZE 0000068a: PUSH1 0x00 0000068c: REVERT 0000068d: JUMPDEST 0000068e: POP 0000068f: POP 00000690: POP 00000691: POP 00000692: PUSH1 0x40 00000694: MLOAD 00000695: RETURNDATASIZE 00000696: PUSH1 0x20 00000698: DUP2 00000699: LT 0000069a: ISZERO 0000069b: PUSH2 0x06a3 0000069e: JUMPI 0000069f: PUSH1 0x00 000006a1: DUP1 000006a2: REVERT 000006a3: JUMPDEST 000006a4: POP 000006a5: MLOAD 000006a6: ISZERO 000006a7: ISZERO 000006a8: PUSH2 0x06b0 000006ab: JUMPI 000006ac: PUSH1 0x00 000006ae: DUP1 000006af: REVERT 000006b0: JUMPDEST 000006b1: PUSH1 0x40 000006b3: DUP1 000006b4: MLOAD 000006b5: PUSH1 0xe0 000006b7: PUSH1 0x02 000006b9: EXP 000006ba: PUSH4 0x9085b77f 000006bf: MUL 000006c0: DUP2 000006c1: MSTORE 000006c2: PUSH1 0x01 000006c4: PUSH1 0xa0 000006c6: PUSH1 0x02 000006c8: EXP 000006c9: SUB 000006ca: DUP6 000006cb: DUP2 000006cc: AND 000006cd: PUSH1 0x04 000006cf: DUP4 000006d0: ADD 000006d1: MSTORE 000006d2: PUSH32 0xac42f8beb17975ed062dcb80c63e6d203ef1c2c335ced149dc5664cc671cb7da 000006f3: PUSH1 0x24 000006f5: DUP4 000006f6: ADD 000006f7: MSTORE 000006f8: ADDRESS 000006f9: PUSH1 0x44 000006fb: DUP4 000006fc: ADD 000006fd: MSTORE 000006fe: PUSH1 0x00 00000700: DUP1 00000701: CALLDATALOAD 00000702: PUSH1 0x01 00000704: PUSH1 0xe0 00000706: PUSH1 0x02 00000708: EXP 00000709: SUB 0000070a: NOT 0000070b: AND 0000070c: PUSH1 0x64 0000070e: DUP5 0000070f: ADD 00000710: MSTORE 00000711: SWAP3 00000712: MLOAD 00000713: SWAP1 00000714: DUP8 00000715: AND 00000716: SWAP3 00000717: PUSH4 0x9085b77f 0000071c: SWAP3 0000071d: PUSH1 0x84 0000071f: DUP1 00000720: DUP3 00000721: ADD 00000722: SWAP4 00000723: PUSH1 0x20 00000725: SWAP4 00000726: SWAP1 00000727: SWAP3 00000728: DUP4 00000729: SWAP1 0000072a: SUB 0000072b: SWAP1 0000072c: SWAP2 0000072d: ADD 0000072e: SWAP1 0000072f: DUP3 00000730: SWAP1 00000731: DUP8 00000732: DUP1 00000733: EXTCODESIZE 00000734: ISZERO 00000735: DUP1 00000736: ISZERO 00000737: PUSH2 0x073f 0000073a: JUMPI 0000073b: PUSH1 0x00 0000073d: DUP1 0000073e: REVERT 0000073f: JUMPDEST 00000740: POP 00000741: GAS 00000742: CALL 00000743: ISZERO 00000744: DUP1 00000745: ISZERO 00000746: PUSH2 0x0753 00000749: JUMPI 0000074a: RETURNDATASIZE 0000074b: PUSH1 0x00 0000074d: DUP1 0000074e: RETURNDATACOPY 0000074f: RETURNDATASIZE 00000750: PUSH1 0x00 00000752: REVERT 00000753: JUMPDEST 00000754: POP 00000755: POP 00000756: POP 00000757: POP 00000758: PUSH1 0x40 0000075a: MLOAD 0000075b: RETURNDATASIZE 0000075c: PUSH1 0x20 0000075e: DUP2 0000075f: LT 00000760: ISZERO 00000761: PUSH2 0x0769 00000764: JUMPI 00000765: PUSH1 0x00 00000767: DUP1 00000768: REVERT 00000769: JUMPDEST 0000076a: POP 0000076b: MLOAD 0000076c: ISZERO 0000076d: ISZERO 0000076e: PUSH2 0x0776 00000771: JUMPI 00000772: PUSH1 0x00 00000774: DUP1 00000775: REVERT 00000776: JUMPDEST 00000777: PUSH1 0x00 00000779: DUP1 0000077a: SLOAD 0000077b: PUSH1 0x01 0000077d: PUSH1 0xa0 0000077f: PUSH1 0x02 00000781: EXP 00000782: SUB 00000783: DUP7 00000784: DUP2 00000785: AND 00000786: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000079b: NOT 0000079c: DUP4 0000079d: AND 0000079e: DUP2 0000079f: OR 000007a0: SWAP1 000007a1: SWAP4 000007a2: SSTORE 000007a3: PUSH1 0x40 000007a5: DUP1 000007a6: MLOAD 000007a7: CALLER 000007a8: DUP2 000007a9: MSTORE 000007aa: SWAP2 000007ab: SWAP1 000007ac: SWAP3 000007ad: AND 000007ae: PUSH1 0x20 000007b0: DUP3 000007b1: ADD 000007b2: DUP2 000007b3: SWAP1 000007b4: MSTORE 000007b5: DUP2 000007b6: DUP4 000007b7: ADD 000007b8: SWAP4 000007b9: SWAP1 000007ba: SWAP4 000007bb: MSTORE 000007bc: SWAP1 000007bd: MLOAD 000007be: SWAP2 000007bf: SWAP4 000007c0: POP 000007c1: PUSH32 0x7d475c32583df95fccc34a6e12df24c1fc9943092cc129b6512013aecba0f136 000007e2: SWAP2 000007e3: SWAP1 000007e4: DUP2 000007e5: SWAP1 000007e6: SUB 000007e7: PUSH1 0x60 000007e9: ADD 000007ea: SWAP1 000007eb: LOG1 000007ec: POP 000007ed: POP 000007ee: POP 000007ef: POP 000007f0: JUMP 000007f1: JUMPDEST 000007f2: PUSH1 0x00 000007f4: DUP1 000007f5: SLOAD 000007f6: PUSH1 0x40 000007f8: DUP1 000007f9: MLOAD 000007fa: PUSH1 0xe0 000007fc: PUSH1 0x02 000007fe: EXP 000007ff: PUSH4 0x9085b77f 00000804: MUL 00000805: DUP2 00000806: MSTORE 00000807: CALLER 00000808: PUSH1 0x04 0000080a: DUP3 0000080b: ADD 0000080c: MSTORE 0000080d: PUSH32 0x9fe43636e0675246c99e96d7abf9f858f518b9442c35166d87f0934abef8a969 0000082e: PUSH1 0x24 00000830: DUP3 00000831: ADD 00000832: DUP2 00000833: SWAP1 00000834: MSTORE 00000835: ADDRESS 00000836: PUSH1 0x44 00000838: DUP4 00000839: ADD 0000083a: MSTORE 0000083b: PUSH1 0x01 0000083d: PUSH1 0xe0 0000083f: PUSH1 0x02 00000841: EXP 00000842: SUB 00000843: NOT 00000844: DUP6 00000845: CALLDATALOAD 00000846: AND 00000847: PUSH1 0x64 00000849: DUP4 0000084a: ADD 0000084b: MSTORE 0000084c: SWAP2 0000084d: MLOAD 0000084e: DUP5 0000084f: SWAP4 00000850: DUP5 00000851: SWAP4 00000852: SWAP3 00000853: PUSH1 0x01 00000855: PUSH1 0xa0 00000857: PUSH1 0x02 00000859: EXP 0000085a: SUB 0000085b: SWAP1 0000085c: SWAP2 0000085d: AND 0000085e: SWAP2 0000085f: PUSH4 0x9085b77f 00000864: SWAP2 00000865: PUSH1 0x84 00000867: DUP1 00000868: DUP3 00000869: ADD 0000086a: SWAP3 0000086b: PUSH1 0x20 0000086d: SWAP3 0000086e: SWAP1 0000086f: SWAP2 00000870: SWAP1 00000871: DUP3 00000872: SWAP1 00000873: SUB 00000874: ADD 00000875: DUP2 00000876: DUP9 00000877: DUP8 00000878: DUP1 00000879: EXTCODESIZE 0000087a: ISZERO 0000087b: DUP1 0000087c: ISZERO 0000087d: PUSH2 0x0885 00000880: JUMPI 00000881: PUSH1 0x00 00000883: DUP1 00000884: REVERT 00000885: JUMPDEST 00000886: POP 00000887: GAS 00000888: CALL 00000889: ISZERO 0000088a: DUP1 0000088b: ISZERO 0000088c: PUSH2 0x0899 0000088f: JUMPI 00000890: RETURNDATASIZE 00000891: PUSH1 0x00 00000893: DUP1 00000894: RETURNDATACOPY 00000895: RETURNDATASIZE 00000896: PUSH1 0x00 00000898: REVERT 00000899: JUMPDEST 0000089a: POP 0000089b: POP 0000089c: POP 0000089d: POP 0000089e: PUSH1 0x40 000008a0: MLOAD 000008a1: RETURNDATASIZE 000008a2: PUSH1 0x20 000008a4: DUP2 000008a5: LT 000008a6: ISZERO 000008a7: PUSH2 0x08af 000008aa: JUMPI 000008ab: PUSH1 0x00 000008ad: DUP1 000008ae: REVERT 000008af: JUMPDEST 000008b0: POP 000008b1: MLOAD 000008b2: ISZERO 000008b3: ISZERO 000008b4: PUSH2 0x08bc 000008b7: JUMPI 000008b8: PUSH1 0x00 000008ba: DUP1 000008bb: REVERT 000008bc: JUMPDEST 000008bd: PUSH8 0x0de0b6b3a7640000 000008c6: DUP6 000008c7: LT 000008c8: PUSH2 0x08cd 000008cb: JUMPI 000008cc: INVALID 000008cd: JUMPDEST 000008ce: DUP6 000008cf: MLOAD 000008d0: DUP8 000008d1: MLOAD 000008d2: EQ 000008d3: PUSH2 0x08db 000008d6: JUMPI 000008d7: PUSH1 0x00 000008d9: DUP1 000008da: REVERT 000008db: JUMPDEST 000008dc: PUSH1 0x02 000008de: SLOAD 000008df: PUSH1 0x01 000008e1: SLOAD 000008e2: PUSH2 0x08f7 000008e5: SWAP2 000008e6: PUSH1 0x01 000008e8: PUSH1 0xa0 000008ea: PUSH1 0x02 000008ec: EXP 000008ed: SUB 000008ee: SWAP1 000008ef: DUP2 000008f0: AND 000008f1: SWAP2 000008f2: AND 000008f3: PUSH2 0x0f73 000008f6: JUMP 000008f7: JUMPDEST 000008f8: SWAP4 000008f9: POP 000008fa: SWAP4 000008fb: POP 000008fc: PUSH2 0x0e10 000008ff: DUP4 00000900: TIMESTAMP 00000901: SUB 00000902: LT 00000903: ISZERO 00000904: ISZERO 00000905: PUSH2 0x0958 00000908: JUMPI 00000909: PUSH1 0x40 0000090b: DUP1 0000090c: MLOAD 0000090d: PUSH1 0xe5 0000090f: PUSH1 0x02 00000911: EXP 00000912: PUSH3 0x461bcd 00000916: MUL 00000917: DUP2 00000918: MSTORE 00000919: PUSH1 0x20 0000091b: PUSH1 0x04 0000091d: DUP3 0000091e: ADD 0000091f: MSTORE 00000920: PUSH1 0x0f 00000922: PUSH1 0x24 00000924: DUP3 00000925: ADD 00000926: MSTORE 00000927: PUSH32 0x4e465f5345585f4f4c445f524154450000000000000000000000000000000000 00000948: PUSH1 0x44 0000094a: DUP3 0000094b: ADD 0000094c: MSTORE 0000094d: SWAP1 0000094e: MLOAD 0000094f: SWAP1 00000950: DUP2 00000951: SWAP1 00000952: SUB 00000953: PUSH1 0x64 00000955: ADD 00000956: SWAP1 00000957: REVERT 00000958: JUMPDEST 00000959: DUP7 0000095a: MLOAD 0000095b: DUP3 0000095c: LT 0000095d: ISZERO 0000095e: PUSH2 0x09a6 00000961: JUMPI 00000962: PUSH2 0x099b 00000965: DUP8 00000966: DUP4 00000967: DUP2 00000968: MLOAD 00000969: DUP2 0000096a: LT 0000096b: ISZERO 0000096c: ISZERO 0000096d: PUSH2 0x0972 00000970: JUMPI 00000971: INVALID 00000972: JUMPDEST 00000973: SWAP1 00000974: PUSH1 0x20 00000976: ADD 00000977: SWAP1 00000978: PUSH1 0x20 0000097a: MUL 0000097b: ADD 0000097c: MLOAD 0000097d: DUP8 0000097e: DUP5 0000097f: DUP2 00000980: MLOAD 00000981: DUP2 00000982: LT 00000983: ISZERO 00000984: ISZERO 00000985: PUSH2 0x098a 00000988: JUMPI 00000989: INVALID 0000098a: JUMPDEST 0000098b: SWAP1 0000098c: PUSH1 0x20 0000098e: ADD 0000098f: SWAP1 00000990: PUSH1 0x20 00000992: MUL 00000993: ADD 00000994: MLOAD 00000995: DUP8 00000996: DUP8 00000997: PUSH2 0x106f 0000099a: JUMP 0000099b: JUMPDEST 0000099c: PUSH1 0x01 0000099e: DUP3 0000099f: ADD 000009a0: SWAP2 000009a1: POP 000009a2: PUSH2 0x0958 000009a5: JUMP 000009a6: JUMPDEST 000009a7: POP 000009a8: POP 000009a9: POP 000009aa: POP 000009ab: POP 000009ac: POP 000009ad: POP 000009ae: JUMP 000009af: JUMPDEST 000009b0: PUSH1 0x00 000009b2: DUP1 000009b3: SLOAD 000009b4: PUSH1 0x40 000009b6: DUP1 000009b7: MLOAD 000009b8: PUSH1 0xe0 000009ba: PUSH1 0x02 000009bc: EXP 000009bd: PUSH4 0x9085b77f 000009c2: MUL 000009c3: DUP2 000009c4: MSTORE 000009c5: CALLER 000009c6: PUSH1 0x04 000009c8: DUP3 000009c9: ADD 000009ca: MSTORE 000009cb: PUSH32 0xa80c3a0c8a5324136e4c806a778583a2a980f378bdd382921b8d28dcfe965585 000009ec: PUSH1 0x24 000009ee: DUP3 000009ef: ADD 000009f0: DUP2 000009f1: SWAP1 000009f2: MSTORE 000009f3: ADDRESS 000009f4: PUSH1 0x44 000009f6: DUP4 000009f7: ADD 000009f8: MSTORE 000009f9: PUSH1 0x01 000009fb: PUSH1 0xe0 000009fd: PUSH1 0x02 000009ff: EXP 00000a00: SUB 00000a01: NOT 00000a02: DUP6 00000a03: CALLDATALOAD 00000a04: AND 00000a05: PUSH1 0x64 00000a07: DUP4 00000a08: ADD 00000a09: MSTORE 00000a0a: SWAP2 00000a0b: MLOAD 00000a0c: SWAP2 00000a0d: SWAP4 00000a0e: PUSH1 0x01 00000a10: PUSH1 0xa0 00000a12: PUSH1 0x02 00000a14: EXP 00000a15: SUB 00000a16: SWAP1 00000a17: SWAP4 00000a18: AND 00000a19: SWAP3 00000a1a: PUSH4 0x9085b77f 00000a1f: SWAP3 00000a20: PUSH1 0x84 00000a22: DUP1 00000a23: DUP5 00000a24: ADD 00000a25: SWAP4 00000a26: PUSH1 0x20 00000a28: SWAP4 00000a29: SWAP1 00000a2a: DUP4 00000a2b: SWAP1 00000a2c: SUB 00000a2d: SWAP1 00000a2e: SWAP2 00000a2f: ADD 00000a30: SWAP1 00000a31: DUP3 00000a32: SWAP1 00000a33: DUP8 00000a34: DUP1 00000a35: EXTCODESIZE 00000a36: ISZERO 00000a37: DUP1 00000a38: ISZERO 00000a39: PUSH2 0x0a41 00000a3c: JUMPI 00000a3d: PUSH1 0x00 00000a3f: DUP1 00000a40: REVERT 00000a41: JUMPDEST 00000a42: POP 00000a43: GAS 00000a44: CALL 00000a45: ISZERO 00000a46: DUP1 00000a47: ISZERO 00000a48: PUSH2 0x0a55 00000a4b: JUMPI 00000a4c: RETURNDATASIZE 00000a4d: PUSH1 0x00 00000a4f: DUP1 00000a50: RETURNDATACOPY 00000a51: RETURNDATASIZE 00000a52: PUSH1 0x00 00000a54: REVERT 00000a55: JUMPDEST 00000a56: POP 00000a57: POP 00000a58: POP 00000a59: POP 00000a5a: PUSH1 0x40 00000a5c: MLOAD 00000a5d: RETURNDATASIZE 00000a5e: PUSH1 0x20 00000a60: DUP2 00000a61: LT 00000a62: ISZERO 00000a63: PUSH2 0x0a6b 00000a66: JUMPI 00000a67: PUSH1 0x00 00000a69: DUP1 00000a6a: REVERT 00000a6b: JUMPDEST 00000a6c: POP 00000a6d: MLOAD 00000a6e: ISZERO 00000a6f: ISZERO 00000a70: PUSH2 0x0a78 00000a73: JUMPI 00000a74: PUSH1 0x00 00000a76: DUP1 00000a77: REVERT 00000a78: JUMPDEST 00000a79: PUSH2 0x0a83 00000a7c: DUP5 00000a7d: DUP5 00000a7e: DUP5 00000a7f: PUSH2 0x11c2 00000a82: JUMP 00000a83: JUMPDEST 00000a84: POP 00000a85: POP 00000a86: POP 00000a87: POP 00000a88: JUMP 00000a89: JUMPDEST 00000a8a: PUSH32 0x434a1a753d1d39381c462f37c155e520ae6f86ad79289abca9cde354a0cebd68 00000aab: PUSH1 0x00 00000aad: SWAP1 00000aae: SWAP2 00000aaf: JUMP 00000ab0: JUMPDEST 00000ab1: PUSH1 0x60 00000ab3: DUP1 00000ab4: PUSH1 0x00 00000ab6: DUP1 00000ab7: PUSH1 0x00 00000ab9: DUP6 00000aba: MLOAD 00000abb: DUP8 00000abc: MLOAD 00000abd: EQ 00000abe: ISZERO 00000abf: ISZERO 00000ac0: PUSH2 0x0ac8 00000ac3: JUMPI 00000ac4: PUSH1 0x00 00000ac6: DUP1 00000ac7: REVERT 00000ac8: JUMPDEST 00000ac9: DUP7 00000aca: MLOAD 00000acb: PUSH1 0x40 00000acd: MLOAD 00000ace: SWAP1 00000acf: DUP1 00000ad0: DUP3 00000ad1: MSTORE 00000ad2: DUP1 00000ad3: PUSH1 0x20 00000ad5: MUL 00000ad6: PUSH1 0x20 00000ad8: ADD 00000ad9: DUP3 00000ada: ADD 00000adb: PUSH1 0x40 00000add: MSTORE 00000ade: DUP1 00000adf: ISZERO 00000ae0: PUSH2 0x0af3 00000ae3: JUMPI 00000ae4: DUP2 00000ae5: PUSH1 0x20 00000ae7: ADD 00000ae8: PUSH1 0x20 00000aea: DUP3 00000aeb: MUL 00000aec: DUP1 00000aed: CODESIZE 00000aee: DUP4 00000aef: CODECOPY 00000af0: ADD 00000af1: SWAP1 00000af2: POP 00000af3: JUMPDEST 00000af4: POP 00000af5: SWAP5 00000af6: POP 00000af7: DUP6 00000af8: MLOAD 00000af9: PUSH1 0x40 00000afb: MLOAD 00000afc: SWAP1 00000afd: DUP1 00000afe: DUP3 00000aff: MSTORE 00000b00: DUP1 00000b01: PUSH1 0x20 00000b03: MUL 00000b04: PUSH1 0x20 00000b06: ADD 00000b07: DUP3 00000b08: ADD 00000b09: PUSH1 0x40 00000b0b: MSTORE 00000b0c: DUP1 00000b0d: ISZERO 00000b0e: PUSH2 0x0b21 00000b11: JUMPI 00000b12: DUP2 00000b13: PUSH1 0x20 00000b15: ADD 00000b16: PUSH1 0x20 00000b18: DUP3 00000b19: MUL 00000b1a: DUP1 00000b1b: CODESIZE 00000b1c: DUP4 00000b1d: CODECOPY 00000b1e: ADD 00000b1f: SWAP1 00000b20: POP 00000b21: JUMPDEST 00000b22: POP 00000b23: SWAP4 00000b24: POP 00000b25: JUMPDEST 00000b26: DUP7 00000b27: MLOAD 00000b28: DUP4 00000b29: LT 00000b2a: ISZERO 00000b2b: PUSH2 0x0ba9 00000b2e: JUMPI 00000b2f: PUSH2 0x0b66 00000b32: DUP8 00000b33: DUP5 00000b34: DUP2 00000b35: MLOAD 00000b36: DUP2 00000b37: LT 00000b38: ISZERO 00000b39: ISZERO 00000b3a: PUSH2 0x0b3f 00000b3d: JUMPI 00000b3e: INVALID 00000b3f: JUMPDEST 00000b40: SWAP1 00000b41: PUSH1 0x20 00000b43: ADD 00000b44: SWAP1 00000b45: PUSH1 0x20 00000b47: MUL 00000b48: ADD 00000b49: MLOAD 00000b4a: DUP8 00000b4b: DUP6 00000b4c: DUP2 00000b4d: MLOAD 00000b4e: DUP2 00000b4f: LT 00000b50: ISZERO 00000b51: ISZERO 00000b52: PUSH2 0x0b57 00000b55: JUMPI 00000b56: INVALID 00000b57: JUMPDEST 00000b58: SWAP1 00000b59: PUSH1 0x20 00000b5b: ADD 00000b5c: SWAP1 00000b5d: PUSH1 0x20 00000b5f: MUL 00000b60: ADD 00000b61: MLOAD 00000b62: PUSH2 0x0f73 00000b65: JUMP 00000b66: JUMPDEST 00000b67: SWAP2 00000b68: POP 00000b69: SWAP2 00000b6a: POP 00000b6b: DUP2 00000b6c: DUP6 00000b6d: DUP5 00000b6e: DUP2 00000b6f: MLOAD 00000b70: DUP2 00000b71: LT 00000b72: ISZERO 00000b73: ISZERO 00000b74: PUSH2 0x0b79 00000b77: JUMPI 00000b78: INVALID 00000b79: JUMPDEST 00000b7a: PUSH1 0x20 00000b7c: SWAP1 00000b7d: DUP2 00000b7e: MUL 00000b7f: SWAP1 00000b80: SWAP2 00000b81: ADD 00000b82: ADD 00000b83: MSTORE 00000b84: DUP4 00000b85: MLOAD 00000b86: DUP2 00000b87: SWAP1 00000b88: DUP6 00000b89: SWAP1 00000b8a: DUP6 00000b8b: SWAP1 00000b8c: DUP2 00000b8d: LT 00000b8e: PUSH2 0x0b93 00000b91: JUMPI 00000b92: INVALID 00000b93: JUMPDEST 00000b94: PUSH1 0x20 00000b96: SWAP1 00000b97: DUP2 00000b98: MUL 00000b99: SWAP1 00000b9a: SWAP2 00000b9b: ADD 00000b9c: ADD 00000b9d: MSTORE 00000b9e: PUSH1 0x01 00000ba0: SWAP3 00000ba1: SWAP1 00000ba2: SWAP3 00000ba3: ADD 00000ba4: SWAP2 00000ba5: PUSH2 0x0b25 00000ba8: JUMP 00000ba9: JUMPDEST 00000baa: POP 00000bab: POP 00000bac: POP 00000bad: SWAP3 00000bae: POP 00000baf: SWAP3 00000bb0: SWAP1 00000bb1: POP 00000bb2: JUMP 00000bb3: JUMPDEST 00000bb4: PUSH1 0x00 00000bb6: DUP1 00000bb7: PUSH2 0x0bc0 00000bba: DUP5 00000bbb: DUP5 00000bbc: PUSH2 0x0f73 00000bbf: JUMP 00000bc0: JUMPDEST 00000bc1: SWAP2 00000bc2: POP 00000bc3: SWAP2 00000bc4: POP 00000bc5: SWAP3 00000bc6: POP 00000bc7: SWAP3 00000bc8: SWAP1 00000bc9: POP 00000bca: JUMP 00000bcb: JUMPDEST 00000bcc: PUSH1 0x00 00000bce: DUP1 00000bcf: SLOAD 00000bd0: PUSH1 0x40 00000bd2: DUP1 00000bd3: MLOAD 00000bd4: PUSH1 0xe0 00000bd6: PUSH1 0x02 00000bd8: EXP 00000bd9: PUSH4 0x9085b77f 00000bde: MUL 00000bdf: DUP2 00000be0: MSTORE 00000be1: CALLER 00000be2: PUSH1 0x04 00000be4: DUP3 00000be5: ADD 00000be6: MSTORE 00000be7: PUSH32 0xa80c3a0c8a5324136e4c806a778583a2a980f378bdd382921b8d28dcfe965585 00000c08: PUSH1 0x24 00000c0a: DUP3 00000c0b: ADD 00000c0c: DUP2 00000c0d: SWAP1 00000c0e: MSTORE 00000c0f: ADDRESS 00000c10: PUSH1 0x44 00000c12: DUP4 00000c13: ADD 00000c14: MSTORE 00000c15: PUSH1 0x01 00000c17: PUSH1 0xe0 00000c19: PUSH1 0x02 00000c1b: EXP 00000c1c: SUB 00000c1d: NOT 00000c1e: DUP6 00000c1f: CALLDATALOAD 00000c20: AND 00000c21: PUSH1 0x64 00000c23: DUP4 00000c24: ADD 00000c25: MSTORE 00000c26: SWAP2 00000c27: MLOAD 00000c28: SWAP2 00000c29: SWAP3 00000c2a: PUSH1 0x01 00000c2c: PUSH1 0xa0 00000c2e: PUSH1 0x02 00000c30: EXP 00000c31: SUB 00000c32: AND 00000c33: SWAP2 00000c34: PUSH4 0x9085b77f 00000c39: SWAP2 00000c3a: PUSH1 0x84 00000c3c: DUP1 00000c3d: DUP3 00000c3e: ADD 00000c3f: SWAP3 00000c40: PUSH1 0x20 00000c42: SWAP3 00000c43: SWAP1 00000c44: SWAP2 00000c45: SWAP1 00000c46: DUP3 00000c47: SWAP1 00000c48: SUB 00000c49: ADD 00000c4a: DUP2 00000c4b: DUP9 00000c4c: DUP8 00000c4d: DUP1 00000c4e: EXTCODESIZE 00000c4f: ISZERO 00000c50: DUP1 00000c51: ISZERO 00000c52: PUSH2 0x0c5a 00000c55: JUMPI 00000c56: PUSH1 0x00 00000c58: DUP1 00000c59: REVERT 00000c5a: JUMPDEST 00000c5b: POP 00000c5c: GAS 00000c5d: CALL 00000c5e: ISZERO 00000c5f: DUP1 00000c60: ISZERO 00000c61: PUSH2 0x0c6e 00000c64: JUMPI 00000c65: RETURNDATASIZE 00000c66: PUSH1 0x00 00000c68: DUP1 00000c69: RETURNDATACOPY 00000c6a: RETURNDATASIZE 00000c6b: PUSH1 0x00 00000c6d: REVERT 00000c6e: JUMPDEST 00000c6f: POP 00000c70: POP 00000c71: POP 00000c72: POP 00000c73: PUSH1 0x40 00000c75: MLOAD 00000c76: RETURNDATASIZE 00000c77: PUSH1 0x20 00000c79: DUP2 00000c7a: LT 00000c7b: ISZERO 00000c7c: PUSH2 0x0c84 00000c7f: JUMPI 00000c80: PUSH1 0x00 00000c82: DUP1 00000c83: REVERT 00000c84: JUMPDEST 00000c85: POP 00000c86: MLOAD 00000c87: ISZERO 00000c88: ISZERO 00000c89: PUSH2 0x0c91 00000c8c: JUMPI 00000c8d: PUSH1 0x00 00000c8f: DUP1 00000c90: REVERT 00000c91: JUMPDEST 00000c92: DUP4 00000c93: MLOAD 00000c94: DUP6 00000c95: MLOAD 00000c96: EQ 00000c97: PUSH2 0x0c9f 00000c9a: JUMPI 00000c9b: PUSH1 0x00 00000c9d: DUP1 00000c9e: REVERT 00000c9f: JUMPDEST 00000ca0: DUP3 00000ca1: MLOAD 00000ca2: DUP6 00000ca3: MLOAD 00000ca4: EQ 00000ca5: PUSH2 0x0cad 00000ca8: JUMPI 00000ca9: PUSH1 0x00 00000cab: DUP1 00000cac: REVERT 00000cad: JUMPDEST 00000cae: PUSH1 0x00 00000cb0: SWAP2 00000cb1: POP 00000cb2: JUMPDEST 00000cb3: DUP5 00000cb4: MLOAD 00000cb5: DUP3 00000cb6: LT 00000cb7: ISZERO 00000cb8: PUSH2 0x0d16 00000cbb: JUMPI 00000cbc: PUSH2 0x0d0b 00000cbf: DUP6 00000cc0: DUP4 00000cc1: DUP2 00000cc2: MLOAD 00000cc3: DUP2 00000cc4: LT 00000cc5: ISZERO 00000cc6: ISZERO 00000cc7: PUSH2 0x0ccc 00000cca: JUMPI 00000ccb: INVALID 00000ccc: JUMPDEST 00000ccd: SWAP1 00000cce: PUSH1 0x20 00000cd0: ADD 00000cd1: SWAP1 00000cd2: PUSH1 0x20 00000cd4: MUL 00000cd5: ADD 00000cd6: MLOAD 00000cd7: DUP6 00000cd8: DUP5 00000cd9: DUP2 00000cda: MLOAD 00000cdb: DUP2 00000cdc: LT 00000cdd: ISZERO 00000cde: ISZERO 00000cdf: PUSH2 0x0ce4 00000ce2: JUMPI 00000ce3: INVALID 00000ce4: JUMPDEST 00000ce5: SWAP1 00000ce6: PUSH1 0x20 00000ce8: ADD 00000ce9: SWAP1 00000cea: PUSH1 0x20 00000cec: MUL 00000ced: ADD 00000cee: MLOAD 00000cef: DUP6 00000cf0: DUP6 00000cf1: DUP2 00000cf2: MLOAD 00000cf3: DUP2 00000cf4: LT 00000cf5: ISZERO 00000cf6: ISZERO 00000cf7: PUSH2 0x0cfc 00000cfa: JUMPI 00000cfb: INVALID 00000cfc: JUMPDEST 00000cfd: SWAP1 00000cfe: PUSH1 0x20 00000d00: ADD 00000d01: SWAP1 00000d02: PUSH1 0x20 00000d04: MUL 00000d05: ADD 00000d06: MLOAD 00000d07: PUSH2 0x11c2 00000d0a: JUMP 00000d0b: JUMPDEST 00000d0c: PUSH1 0x01 00000d0e: SWAP1 00000d0f: SWAP2 00000d10: ADD 00000d11: SWAP1 00000d12: PUSH2 0x0cb2 00000d15: JUMP 00000d16: JUMPDEST 00000d17: POP 00000d18: POP 00000d19: POP 00000d1a: POP 00000d1b: POP 00000d1c: JUMP 00000d1d: JUMPDEST 00000d1e: PUSH1 0x00 00000d20: SLOAD 00000d21: PUSH1 0x01 00000d23: PUSH1 0xa0 00000d25: PUSH1 0x02 00000d27: EXP 00000d28: SUB 00000d29: AND 00000d2a: SWAP1 00000d2b: JUMP 00000d2c: JUMPDEST 00000d2d: PUSH1 0x00 00000d2f: DUP1 00000d30: SLOAD 00000d31: PUSH1 0x40 00000d33: DUP1 00000d34: MLOAD 00000d35: PUSH1 0xe0 00000d37: PUSH1 0x02 00000d39: EXP 00000d3a: PUSH4 0x9085b77f 00000d3f: MUL 00000d40: DUP2 00000d41: MSTORE 00000d42: CALLER 00000d43: PUSH1 0x04 00000d45: DUP3 00000d46: ADD 00000d47: MSTORE 00000d48: PUSH32 0x0542bbd0c672578966dcc525b30aa16723bb042675554ac5b0362f86b6e97dc5 00000d69: PUSH1 0x24 00000d6b: DUP3 00000d6c: ADD 00000d6d: DUP2 00000d6e: SWAP1 00000d6f: MSTORE 00000d70: ADDRESS 00000d71: PUSH1 0x44 00000d73: DUP4 00000d74: ADD 00000d75: MSTORE 00000d76: PUSH1 0x01 00000d78: PUSH1 0xe0 00000d7a: PUSH1 0x02 00000d7c: EXP 00000d7d: SUB 00000d7e: NOT 00000d7f: DUP6 00000d80: CALLDATALOAD 00000d81: AND 00000d82: PUSH1 0x64 00000d84: DUP4 00000d85: ADD 00000d86: MSTORE 00000d87: SWAP2 00000d88: MLOAD 00000d89: DUP5 00000d8a: SWAP4 00000d8b: PUSH1 0x01 00000d8d: PUSH1 0xa0 00000d8f: PUSH1 0x02 00000d91: EXP 00000d92: SUB 00000d93: AND 00000d94: SWAP2 00000d95: PUSH4 0x9085b77f 00000d9a: SWAP2 00000d9b: PUSH1 0x84 00000d9d: DUP1 00000d9e: DUP4 00000d9f: ADD 00000da0: SWAP3 00000da1: PUSH1 0x20 00000da3: SWAP3 00000da4: SWAP2 00000da5: SWAP1 00000da6: DUP3 00000da7: SWAP1 00000da8: SUB 00000da9: ADD 00000daa: DUP2 00000dab: DUP9 00000dac: DUP8 00000dad: DUP1 00000dae: EXTCODESIZE 00000daf: ISZERO 00000db0: DUP1 00000db1: ISZERO 00000db2: PUSH2 0x0dba 00000db5: JUMPI 00000db6: PUSH1 0x00 00000db8: DUP1 00000db9: REVERT 00000dba: JUMPDEST 00000dbb: POP 00000dbc: GAS 00000dbd: CALL 00000dbe: ISZERO 00000dbf: DUP1 00000dc0: ISZERO 00000dc1: PUSH2 0x0dce 00000dc4: JUMPI 00000dc5: RETURNDATASIZE 00000dc6: PUSH1 0x00 00000dc8: DUP1 00000dc9: RETURNDATACOPY 00000dca: RETURNDATASIZE 00000dcb: PUSH1 0x00 00000dcd: REVERT 00000dce: JUMPDEST 00000dcf: POP 00000dd0: POP 00000dd1: POP 00000dd2: POP 00000dd3: PUSH1 0x40 00000dd5: MLOAD 00000dd6: RETURNDATASIZE 00000dd7: PUSH1 0x20 00000dd9: DUP2 00000dda: LT 00000ddb: ISZERO 00000ddc: PUSH2 0x0de4 00000ddf: JUMPI 00000de0: PUSH1 0x00 00000de2: DUP1 00000de3: REVERT 00000de4: JUMPDEST 00000de5: POP 00000de6: MLOAD 00000de7: ISZERO 00000de8: ISZERO 00000de9: PUSH2 0x0df1 00000dec: JUMPI 00000ded: PUSH1 0x00 00000def: DUP1 00000df0: REVERT 00000df1: JUMPDEST 00000df2: CALLER 00000df3: SWAP3 00000df4: POP 00000df5: PUSH1 0x01 00000df7: PUSH1 0xa0 00000df9: PUSH1 0x02 00000dfb: EXP 00000dfc: SUB 00000dfd: DUP5 00000dfe: AND 00000dff: ISZERO 00000e00: ISZERO 00000e01: PUSH2 0x0e40 00000e04: JUMPI 00000e05: PUSH1 0x40 00000e07: MLOAD 00000e08: PUSH1 0x01 00000e0a: PUSH1 0xa0 00000e0c: PUSH1 0x02 00000e0e: EXP 00000e0f: SUB 00000e10: DUP5 00000e11: AND 00000e12: SWAP1 00000e13: ADDRESS 00000e14: BALANCE 00000e15: DUP1 00000e16: ISZERO 00000e17: PUSH2 0x08fc 00000e1a: MUL 00000e1b: SWAP2 00000e1c: PUSH1 0x00 00000e1e: DUP2 00000e1f: DUP2 00000e20: DUP2 00000e21: DUP6 00000e22: DUP9 00000e23: DUP9 00000e24: CALL 00000e25: SWAP4 00000e26: POP 00000e27: POP 00000e28: POP 00000e29: POP 00000e2a: ISZERO 00000e2b: DUP1 00000e2c: ISZERO 00000e2d: PUSH2 0x0e3a 00000e30: JUMPI 00000e31: RETURNDATASIZE 00000e32: PUSH1 0x00 00000e34: DUP1 00000e35: RETURNDATACOPY 00000e36: RETURNDATASIZE 00000e37: PUSH1 0x00 00000e39: REVERT 00000e3a: JUMPDEST 00000e3b: POP 00000e3c: PUSH2 0x0a83 00000e3f: JUMP 00000e40: JUMPDEST 00000e41: PUSH1 0x40 00000e43: DUP1 00000e44: MLOAD 00000e45: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000 00000e66: DUP2 00000e67: MSTORE 00000e68: ADDRESS 00000e69: PUSH1 0x04 00000e6b: DUP3 00000e6c: ADD 00000e6d: MSTORE 00000e6e: SWAP1 00000e6f: MLOAD 00000e70: PUSH1 0x01 00000e72: PUSH1 0xa0 00000e74: PUSH1 0x02 00000e76: EXP 00000e77: SUB 00000e78: DUP7 00000e79: AND 00000e7a: SWAP2 00000e7b: PUSH4 0x70a08231 00000e80: SWAP2 00000e81: PUSH1 0x24 00000e83: DUP1 00000e84: DUP4 00000e85: ADD 00000e86: SWAP3 00000e87: PUSH1 0x20 00000e89: SWAP3 00000e8a: SWAP2 00000e8b: SWAP1 00000e8c: DUP3 00000e8d: SWAP1 00000e8e: SUB 00000e8f: ADD 00000e90: DUP2 00000e91: PUSH1 0x00 00000e93: DUP8 00000e94: DUP1 00000e95: EXTCODESIZE 00000e96: ISZERO 00000e97: DUP1 00000e98: ISZERO 00000e99: PUSH2 0x0ea1 00000e9c: JUMPI 00000e9d: PUSH1 0x00 00000e9f: DUP1 00000ea0: REVERT 00000ea1: JUMPDEST 00000ea2: POP 00000ea3: GAS 00000ea4: CALL 00000ea5: ISZERO 00000ea6: DUP1 00000ea7: ISZERO 00000ea8: PUSH2 0x0eb5 00000eab: JUMPI 00000eac: RETURNDATASIZE 00000ead: PUSH1 0x00 00000eaf: DUP1 00000eb0: RETURNDATACOPY 00000eb1: RETURNDATASIZE 00000eb2: PUSH1 0x00 00000eb4: REVERT 00000eb5: JUMPDEST 00000eb6: POP 00000eb7: POP 00000eb8: POP 00000eb9: POP 00000eba: PUSH1 0x40 00000ebc: MLOAD 00000ebd: RETURNDATASIZE 00000ebe: PUSH1 0x20 00000ec0: DUP2 00000ec1: LT 00000ec2: ISZERO 00000ec3: PUSH2 0x0ecb 00000ec6: JUMPI 00000ec7: PUSH1 0x00 00000ec9: DUP1 00000eca: REVERT 00000ecb: JUMPDEST 00000ecc: POP 00000ecd: MLOAD 00000ece: PUSH1 0x40 00000ed0: DUP1 00000ed1: MLOAD 00000ed2: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 00000ef3: DUP2 00000ef4: MSTORE 00000ef5: PUSH1 0x01 00000ef7: PUSH1 0xa0 00000ef9: PUSH1 0x02 00000efb: EXP 00000efc: SUB 00000efd: DUP7 00000efe: DUP2 00000eff: AND 00000f00: PUSH1 0x04 00000f02: DUP4 00000f03: ADD 00000f04: MSTORE 00000f05: PUSH1 0x24 00000f07: DUP3 00000f08: ADD 00000f09: DUP5 00000f0a: SWAP1 00000f0b: MSTORE 00000f0c: SWAP2 00000f0d: MLOAD 00000f0e: SWAP3 00000f0f: SWAP5 00000f10: POP 00000f11: SWAP1 00000f12: DUP7 00000f13: AND 00000f14: SWAP2 00000f15: PUSH4 0xa9059cbb 00000f1a: SWAP2 00000f1b: PUSH1 0x44 00000f1d: DUP1 00000f1e: DUP3 00000f1f: ADD 00000f20: SWAP3 00000f21: PUSH1 0x20 00000f23: SWAP3 00000f24: SWAP1 00000f25: SWAP2 00000f26: SWAP1 00000f27: DUP3 00000f28: SWAP1 00000f29: SUB 00000f2a: ADD 00000f2b: DUP2 00000f2c: PUSH1 0x00 00000f2e: DUP8 00000f2f: DUP1 00000f30: EXTCODESIZE 00000f31: ISZERO 00000f32: DUP1 00000f33: ISZERO 00000f34: PUSH2 0x0f3c 00000f37: JUMPI 00000f38: PUSH1 0x00 00000f3a: DUP1 00000f3b: REVERT 00000f3c: JUMPDEST 00000f3d: POP 00000f3e: GAS 00000f3f: CALL 00000f40: ISZERO 00000f41: DUP1 00000f42: ISZERO 00000f43: PUSH2 0x0f50 00000f46: JUMPI 00000f47: RETURNDATASIZE 00000f48: PUSH1 0x00 00000f4a: DUP1 00000f4b: RETURNDATACOPY 00000f4c: RETURNDATASIZE 00000f4d: PUSH1 0x00 00000f4f: REVERT 00000f50: JUMPDEST 00000f51: POP 00000f52: POP 00000f53: POP 00000f54: POP 00000f55: PUSH1 0x40 00000f57: MLOAD 00000f58: RETURNDATASIZE 00000f59: PUSH1 0x20 00000f5b: DUP2 00000f5c: LT 00000f5d: ISZERO 00000f5e: PUSH2 0x0f66 00000f61: JUMPI 00000f62: PUSH1 0x00 00000f64: DUP1 00000f65: REVERT 00000f66: JUMPDEST 00000f67: POP 00000f68: MLOAD 00000f69: ISZERO 00000f6a: ISZERO 00000f6b: PUSH2 0x0a83 00000f6e: JUMPI 00000f6f: PUSH1 0x00 00000f71: DUP1 00000f72: REVERT 00000f73: JUMPDEST 00000f74: PUSH1 0x01 00000f76: PUSH1 0xa0 00000f78: PUSH1 0x02 00000f7a: EXP 00000f7b: SUB 00000f7c: DUP3 00000f7d: DUP2 00000f7e: AND 00000f7f: PUSH1 0x00 00000f81: DUP2 00000f82: DUP2 00000f83: MSTORE 00000f84: PUSH1 0x03 00000f86: PUSH1 0x20 00000f88: DUP2 00000f89: DUP2 00000f8a: MSTORE 00000f8b: PUSH1 0x40 00000f8d: DUP1 00000f8e: DUP5 00000f8f: KECCAK256 00000f90: SWAP6 00000f91: DUP8 00000f92: AND 00000f93: DUP5 00000f94: MSTORE 00000f95: SWAP5 00000f96: DUP2 00000f97: MSTORE 00000f98: DUP5 00000f99: DUP4 00000f9a: KECCAK256 00000f9b: SWAP2 00000f9c: DUP2 00000f9d: MSTORE 00000f9e: DUP5 00000f9f: DUP4 00000fa0: KECCAK256 00000fa1: SWAP4 00000fa2: DUP4 00000fa3: MSTORE 00000fa4: SWAP3 00000fa5: SWAP1 00000fa6: SWAP3 00000fa7: MSTORE 00000fa8: SWAP2 00000fa9: DUP3 00000faa: KECCAK256 00000fab: DUP2 00000fac: SLOAD 00000fad: DUP4 00000fae: SWAP3 00000faf: SWAP2 00000fb0: SWAP1 00000fb1: DUP4 00000fb2: SWAP1 00000fb3: PUSH1 0x80 00000fb5: PUSH1 0x02 00000fb7: EXP 00000fb8: SWAP1 00000fb9: DIV 00000fba: PUSH16 0xffffffffffffffffffffffffffffffff 00000fcb: AND 00000fcc: DUP2 00000fcd: LT 00000fce: ISZERO 00000fcf: PUSH2 0x0ffa 00000fd2: JUMPI 00000fd3: DUP3 00000fd4: SLOAD 00000fd5: PUSH16 0xffffffffffffffffffffffffffffffff 00000fe6: DUP1 00000fe7: DUP3 00000fe8: AND 00000fe9: SWAP7 00000fea: POP 00000feb: PUSH1 0x80 00000fed: PUSH1 0x02 00000fef: EXP 00000ff0: SWAP1 00000ff1: SWAP2 00000ff2: DIV 00000ff3: AND 00000ff4: SWAP4 00000ff5: POP 00000ff6: PUSH2 0x0ba9 00000ff9: JUMP 00000ffa: JUMPDEST 00000ffb: DUP2 00000ffc: SLOAD 00000ffd: PUSH1 0x00 00000fff: PUSH1 0x80 00001001: PUSH1 0x02 00001003: EXP 00001004: SWAP1 00001005: SWAP2 00001006: DIV 00001007: PUSH16 0xffffffffffffffffffffffffffffffff 00001018: AND 00001019: GT 0000101a: ISZERO 0000101b: PUSH2 0x0ba9 0000101e: JUMPI 0000101f: DUP2 00001020: SLOAD 00001021: PUSH2 0x1047 00001024: SWAP1 00001025: PUSH8 0x0de0b6b3a7640000 0000102e: SWAP1 0000102f: DUP2 00001030: SWAP1 00001031: PUSH16 0xffffffffffffffffffffffffffffffff 00001042: AND 00001043: PUSH2 0x159f 00001046: JUMP 00001047: JUMPDEST 00001048: DUP3 00001049: SLOAD 0000104a: SWAP1 0000104b: SWAP6 0000104c: POP 0000104d: PUSH1 0x80 0000104f: PUSH1 0x02 00001051: EXP 00001052: SWAP1 00001053: DIV 00001054: PUSH16 0xffffffffffffffffffffffffffffffff 00001065: AND 00001066: SWAP4 00001067: POP 00001068: DUP5 00001069: SWAP1 0000106a: POP 0000106b: PUSH2 0x0ba9 0000106e: JUMP 0000106f: JUMPDEST 00001070: PUSH1 0x00 00001072: PUSH2 0x1086 00001075: PUSH2 0x107e 00001078: DUP6 00001079: DUP6 0000107a: PUSH2 0x15bc 0000107d: JUMP 0000107e: JUMPDEST 0000107f: DUP6 00001080: SUB 00001081: DUP4 00001082: PUSH2 0x15bc 00001085: JUMP 00001086: JUMPDEST 00001087: PUSH1 0x02 00001089: SLOAD 0000108a: PUSH1 0x40 0000108c: DUP1 0000108d: MLOAD 0000108e: PUSH32 0x23b872dd00000000000000000000000000000000000000000000000000000000 000010af: DUP2 000010b0: MSTORE 000010b1: PUSH1 0x01 000010b3: PUSH1 0xa0 000010b5: PUSH1 0x02 000010b7: EXP 000010b8: SUB 000010b9: DUP10 000010ba: DUP2 000010bb: AND 000010bc: PUSH1 0x04 000010be: DUP4 000010bf: ADD 000010c0: MSTORE 000010c1: ADDRESS 000010c2: PUSH1 0x24 000010c4: DUP4 000010c5: ADD 000010c6: MSTORE 000010c7: PUSH1 0x44 000010c9: DUP3 000010ca: ADD 000010cb: DUP10 000010cc: SWAP1 000010cd: MSTORE 000010ce: SWAP2 000010cf: MLOAD 000010d0: SWAP4 000010d1: SWAP5 000010d2: POP 000010d3: SWAP2 000010d4: AND 000010d5: SWAP2 000010d6: PUSH4 0x23b872dd 000010db: SWAP2 000010dc: PUSH1 0x64 000010de: DUP1 000010df: DUP3 000010e0: ADD 000010e1: SWAP3 000010e2: PUSH1 0x20 000010e4: SWAP3 000010e5: SWAP1 000010e6: SWAP2 000010e7: SWAP1 000010e8: DUP3 000010e9: SWAP1 000010ea: SUB 000010eb: ADD 000010ec: DUP2 000010ed: PUSH1 0x00 000010ef: DUP8 000010f0: DUP1 000010f1: EXTCODESIZE 000010f2: ISZERO 000010f3: DUP1 000010f4: ISZERO 000010f5: PUSH2 0x10fd 000010f8: JUMPI 000010f9: PUSH1 0x00 000010fb: DUP1 000010fc: REVERT 000010fd: JUMPDEST 000010fe: POP 000010ff: GAS 00001100: CALL 00001101: ISZERO 00001102: DUP1 00001103: ISZERO 00001104: PUSH2 0x1111 00001107: JUMPI 00001108: RETURNDATASIZE 00001109: PUSH1 0x00 0000110b: DUP1 0000110c: RETURNDATACOPY 0000110d: RETURNDATASIZE 0000110e: PUSH1 0x00 00001110: REVERT 00001111: JUMPDEST 00001112: POP 00001113: POP 00001114: POP 00001115: POP 00001116: PUSH1 0x40 00001118: MLOAD 00001119: RETURNDATASIZE 0000111a: PUSH1 0x20 0000111c: DUP2 0000111d: LT 0000111e: ISZERO 0000111f: PUSH2 0x1127 00001122: JUMPI 00001123: PUSH1 0x00 00001125: DUP1 00001126: REVERT 00001127: JUMPDEST 00001128: POP 00001129: MLOAD 0000112a: ISZERO 0000112b: ISZERO 0000112c: PUSH2 0x1131 0000112f: JUMPI 00001130: INVALID 00001131: JUMPDEST 00001132: PUSH1 0x40 00001134: MLOAD 00001135: PUSH1 0x01 00001137: PUSH1 0xa0 00001139: PUSH1 0x02 0000113b: EXP 0000113c: SUB 0000113d: DUP7 0000113e: AND 0000113f: SWAP1 00001140: DUP3 00001141: ISZERO 00001142: PUSH2 0x08fc 00001145: MUL 00001146: SWAP1 00001147: DUP4 00001148: SWAP1 00001149: PUSH1 0x00 0000114b: DUP2 0000114c: DUP2 0000114d: DUP2 0000114e: DUP6 0000114f: DUP9 00001150: DUP9 00001151: CALL 00001152: SWAP4 00001153: POP 00001154: POP 00001155: POP 00001156: POP 00001157: ISZERO 00001158: DUP1 00001159: ISZERO 0000115a: PUSH2 0x1167 0000115d: JUMPI 0000115e: RETURNDATASIZE 0000115f: PUSH1 0x00 00001161: DUP1 00001162: RETURNDATACOPY 00001163: RETURNDATASIZE 00001164: PUSH1 0x00 00001166: REVERT 00001167: JUMPDEST 00001168: POP 00001169: PUSH1 0x40 0000116b: DUP1 0000116c: MLOAD 0000116d: DUP6 0000116e: DUP2 0000116f: MSTORE 00001170: PUSH1 0x20 00001172: DUP2 00001173: ADD 00001174: DUP6 00001175: SWAP1 00001176: MSTORE 00001177: DUP1 00001178: DUP3 00001179: ADD 0000117a: DUP4 0000117b: SWAP1 0000117c: MSTORE 0000117d: PUSH1 0x60 0000117f: DUP2 00001180: ADD 00001181: DUP5 00001182: SWAP1 00001183: MSTORE 00001184: SWAP1 00001185: MLOAD 00001186: PUSH1 0x01 00001188: PUSH1 0xa0 0000118a: PUSH1 0x02 0000118c: EXP 0000118d: SUB 0000118e: DUP8 0000118f: AND 00001190: SWAP2 00001191: PUSH32 0x68e7498f69f8111a2f38ea9fcdd9ec33aa072c3ee3e4c665981b416f82b3f0e3 000011b2: SWAP2 000011b3: SWAP1 000011b4: DUP2 000011b5: SWAP1 000011b6: SUB 000011b7: PUSH1 0x80 000011b9: ADD 000011ba: SWAP1 000011bb: LOG2 000011bc: POP 000011bd: POP 000011be: POP 000011bf: POP 000011c0: POP 000011c1: JUMP 000011c2: JUMPDEST 000011c3: PUSH1 0x00 000011c5: PUSH1 0x01 000011c7: PUSH1 0xa0 000011c9: PUSH1 0x02 000011cb: EXP 000011cc: SUB 000011cd: DUP5 000011ce: DUP2 000011cf: AND 000011d0: SWAP1 000011d1: DUP5 000011d2: AND 000011d3: EQ 000011d4: ISZERO 000011d5: PUSH2 0x1228 000011d8: JUMPI 000011d9: PUSH1 0x40 000011db: DUP1 000011dc: MLOAD 000011dd: PUSH1 0xe5 000011df: PUSH1 0x02 000011e1: EXP 000011e2: PUSH3 0x461bcd 000011e6: MUL 000011e7: DUP2 000011e8: MSTORE 000011e9: PUSH1 0x20 000011eb: PUSH1 0x04 000011ed: DUP3 000011ee: ADD 000011ef: MSTORE 000011f0: PUSH1 0x0f 000011f2: PUSH1 0x24 000011f4: DUP3 000011f5: ADD 000011f6: MSTORE 000011f7: PUSH32 0x4e465f5345585f53414d455f4e5f440000000000000000000000000000000000 00001218: PUSH1 0x44 0000121a: DUP3 0000121b: ADD 0000121c: MSTORE 0000121d: SWAP1 0000121e: MLOAD 0000121f: SWAP1 00001220: DUP2 00001221: SWAP1 00001222: SUB 00001223: PUSH1 0x64 00001225: ADD 00001226: SWAP1 00001227: REVERT 00001228: JUMPDEST 00001229: PUSH1 0x00 0000122b: DUP3 0000122c: GT 0000122d: PUSH2 0x1232 00001230: JUMPI 00001231: INVALID 00001232: JUMPDEST 00001233: PUSH1 0x80 00001235: PUSH1 0x02 00001237: EXP 00001238: DUP3 00001239: LT 0000123a: PUSH2 0x123f 0000123d: JUMPI 0000123e: INVALID 0000123f: JUMPDEST 00001240: PUSH2 0x1252 00001243: PUSH8 0x0de0b6b3a7640000 0000124c: DUP1 0000124d: DUP5 0000124e: PUSH2 0x159f 00001251: JUMP 00001252: JUMPDEST 00001253: SWAP1 00001254: POP 00001255: DUP4 00001256: PUSH1 0x01 00001258: PUSH1 0xa0 0000125a: PUSH1 0x02 0000125c: EXP 0000125d: SUB 0000125e: AND 0000125f: PUSH4 0x313ce567 00001264: PUSH1 0x40 00001266: MLOAD 00001267: DUP2 00001268: PUSH4 0xffffffff 0000126d: AND 0000126e: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 0000128c: MUL 0000128d: DUP2 0000128e: MSTORE 0000128f: PUSH1 0x04 00001291: ADD 00001292: PUSH1 0x20 00001294: PUSH1 0x40 00001296: MLOAD 00001297: DUP1 00001298: DUP4 00001299: SUB 0000129a: DUP2 0000129b: PUSH1 0x00 0000129d: DUP8 0000129e: DUP1 0000129f: EXTCODESIZE 000012a0: ISZERO 000012a1: DUP1 000012a2: ISZERO 000012a3: PUSH2 0x12ab 000012a6: JUMPI 000012a7: PUSH1 0x00 000012a9: DUP1 000012aa: REVERT 000012ab: JUMPDEST 000012ac: POP 000012ad: GAS 000012ae: CALL 000012af: ISZERO 000012b0: DUP1 000012b1: ISZERO 000012b2: PUSH2 0x12bf 000012b5: JUMPI 000012b6: RETURNDATASIZE 000012b7: PUSH1 0x00 000012b9: DUP1 000012ba: RETURNDATACOPY 000012bb: RETURNDATASIZE 000012bc: PUSH1 0x00 000012be: REVERT 000012bf: JUMPDEST 000012c0: POP 000012c1: POP 000012c2: POP 000012c3: POP 000012c4: PUSH1 0x40 000012c6: MLOAD 000012c7: RETURNDATASIZE 000012c8: PUSH1 0x20 000012ca: DUP2 000012cb: LT 000012cc: ISZERO 000012cd: PUSH2 0x12d5 000012d0: JUMPI 000012d1: PUSH1 0x00 000012d3: DUP1 000012d4: REVERT 000012d5: JUMPDEST 000012d6: POP 000012d7: MLOAD 000012d8: PUSH1 0x40 000012da: DUP1 000012db: MLOAD 000012dc: PUSH32 0x313ce56700000000000000000000000000000000000000000000000000000000 000012fd: DUP2 000012fe: MSTORE 000012ff: SWAP1 00001300: MLOAD 00001301: PUSH1 0xff 00001303: SWAP1 00001304: SWAP3 00001305: AND 00001306: SWAP2 00001307: PUSH1 0x01 00001309: PUSH1 0xa0 0000130b: PUSH1 0x02 0000130d: EXP 0000130e: SUB 0000130f: DUP7 00001310: AND 00001311: SWAP2 00001312: PUSH4 0x313ce567 00001317: SWAP2 00001318: PUSH1 0x04 0000131a: DUP1 0000131b: DUP4 0000131c: ADD 0000131d: SWAP3 0000131e: PUSH1 0x20 00001320: SWAP3 00001321: SWAP2 00001322: SWAP1 00001323: DUP3 00001324: SWAP1 00001325: SUB 00001326: ADD 00001327: DUP2 00001328: PUSH1 0x00 0000132a: DUP8 0000132b: DUP1 0000132c: EXTCODESIZE 0000132d: ISZERO 0000132e: DUP1 0000132f: ISZERO 00001330: PUSH2 0x1338 00001333: JUMPI 00001334: PUSH1 0x00 00001336: DUP1 00001337: REVERT 00001338: JUMPDEST 00001339: POP 0000133a: GAS 0000133b: CALL 0000133c: ISZERO 0000133d: DUP1 0000133e: ISZERO 0000133f: PUSH2 0x134c 00001342: JUMPI 00001343: RETURNDATASIZE 00001344: PUSH1 0x00 00001346: DUP1 00001347: RETURNDATACOPY 00001348: RETURNDATASIZE 00001349: PUSH1 0x00 0000134b: REVERT 0000134c: JUMPDEST 0000134d: POP 0000134e: POP 0000134f: POP 00001350: POP 00001351: PUSH1 0x40 00001353: MLOAD 00001354: RETURNDATASIZE 00001355: PUSH1 0x20 00001357: DUP2 00001358: LT 00001359: ISZERO 0000135a: PUSH2 0x1362 0000135d: JUMPI 0000135e: PUSH1 0x00 00001360: DUP1 00001361: REVERT 00001362: JUMPDEST 00001363: POP 00001364: MLOAD 00001365: PUSH1 0xff 00001367: AND 00001368: EQ 00001369: PUSH2 0x13bc 0000136c: JUMPI 0000136d: PUSH1 0x40 0000136f: DUP1 00001370: MLOAD 00001371: PUSH1 0xe5 00001373: PUSH1 0x02 00001375: EXP 00001376: PUSH3 0x461bcd 0000137a: MUL 0000137b: DUP2 0000137c: MSTORE 0000137d: PUSH1 0x20 0000137f: PUSH1 0x04 00001381: DUP3 00001382: ADD 00001383: MSTORE 00001384: PUSH1 0x0f 00001386: PUSH1 0x24 00001388: DUP3 00001389: ADD 0000138a: MSTORE 0000138b: PUSH32 0x4e465f5345585f444543494d414c530000000000000000000000000000000000 000013ac: PUSH1 0x44 000013ae: DUP3 000013af: ADD 000013b0: MSTORE 000013b1: SWAP1 000013b2: MLOAD 000013b3: SWAP1 000013b4: DUP2 000013b5: SWAP1 000013b6: SUB 000013b7: PUSH1 0x64 000013b9: ADD 000013ba: SWAP1 000013bb: REVERT 000013bc: JUMPDEST 000013bd: PUSH1 0x01 000013bf: PUSH1 0xa0 000013c1: PUSH1 0x02 000013c3: EXP 000013c4: SUB 000013c5: DUP4 000013c6: DUP2 000013c7: AND 000013c8: PUSH1 0x00 000013ca: SWAP1 000013cb: DUP2 000013cc: MSTORE 000013cd: PUSH1 0x03 000013cf: PUSH1 0x20 000013d1: SWAP1 000013d2: DUP2 000013d3: MSTORE 000013d4: PUSH1 0x40 000013d6: DUP1 000013d7: DUP4 000013d8: KECCAK256 000013d9: SWAP4 000013da: DUP9 000013db: AND 000013dc: DUP4 000013dd: MSTORE 000013de: SWAP3 000013df: SWAP1 000013e0: MSTORE 000013e1: SWAP1 000013e2: DUP2 000013e3: KECCAK256 000013e4: SLOAD 000013e5: PUSH1 0x80 000013e7: PUSH1 0x02 000013e9: EXP 000013ea: SWAP1 000013eb: DIV 000013ec: PUSH16 0xffffffffffffffffffffffffffffffff 000013fd: AND 000013fe: GT 000013ff: ISZERO 00001400: PUSH2 0x1485 00001403: JUMPI 00001404: PUSH1 0x40 00001406: DUP1 00001407: MLOAD 00001408: DUP1 00001409: DUP3 0000140a: ADD 0000140b: DUP3 0000140c: MSTORE 0000140d: PUSH16 0xffffffffffffffffffffffffffffffff 0000141e: DUP1 0000141f: DUP5 00001420: AND 00001421: DUP3 00001422: MSTORE 00001423: TIMESTAMP 00001424: DUP2 00001425: AND 00001426: PUSH1 0x20 00001428: DUP1 00001429: DUP5 0000142a: ADD 0000142b: SWAP2 0000142c: DUP3 0000142d: MSTORE 0000142e: PUSH1 0x01 00001430: PUSH1 0xa0 00001432: PUSH1 0x02 00001434: EXP 00001435: SUB 00001436: DUP1 00001437: DUP10 00001438: AND 00001439: PUSH1 0x00 0000143b: SWAP1 0000143c: DUP2 0000143d: MSTORE 0000143e: PUSH1 0x03 00001440: DUP4 00001441: MSTORE 00001442: DUP7 00001443: DUP2 00001444: KECCAK256 00001445: SWAP2 00001446: DUP12 00001447: AND 00001448: DUP2 00001449: MSTORE 0000144a: SWAP2 0000144b: MSTORE 0000144c: SWAP4 0000144d: SWAP1 0000144e: SWAP4 0000144f: KECCAK256 00001450: SWAP2 00001451: MLOAD 00001452: DUP3 00001453: SLOAD 00001454: SWAP4 00001455: MLOAD 00001456: DUP3 00001457: AND 00001458: PUSH1 0x80 0000145a: PUSH1 0x02 0000145c: EXP 0000145d: MUL 0000145e: SWAP1 0000145f: DUP3 00001460: AND 00001461: PUSH16 0xffffffffffffffffffffffffffffffff 00001472: NOT 00001473: SWAP1 00001474: SWAP5 00001475: AND 00001476: SWAP4 00001477: SWAP1 00001478: SWAP4 00001479: OR 0000147a: AND 0000147b: SWAP2 0000147c: SWAP1 0000147d: SWAP2 0000147e: OR 0000147f: SWAP1 00001480: SSTORE 00001481: PUSH2 0x1503 00001484: JUMP 00001485: JUMPDEST 00001486: PUSH1 0x40 00001488: DUP1 00001489: MLOAD 0000148a: DUP1 0000148b: DUP3 0000148c: ADD 0000148d: DUP3 0000148e: MSTORE 0000148f: PUSH16 0xffffffffffffffffffffffffffffffff 000014a0: DUP1 000014a1: DUP6 000014a2: AND 000014a3: DUP3 000014a4: MSTORE 000014a5: TIMESTAMP 000014a6: DUP2 000014a7: AND 000014a8: PUSH1 0x20 000014aa: DUP1 000014ab: DUP5 000014ac: ADD 000014ad: SWAP2 000014ae: DUP3 000014af: MSTORE 000014b0: PUSH1 0x01 000014b2: PUSH1 0xa0 000014b4: PUSH1 0x02 000014b6: EXP 000014b7: SUB 000014b8: DUP1 000014b9: DUP11 000014ba: AND 000014bb: PUSH1 0x00 000014bd: SWAP1 000014be: DUP2 000014bf: MSTORE 000014c0: PUSH1 0x03 000014c2: DUP4 000014c3: MSTORE 000014c4: DUP7 000014c5: DUP2 000014c6: KECCAK256 000014c7: SWAP2 000014c8: DUP11 000014c9: AND 000014ca: DUP2 000014cb: MSTORE 000014cc: SWAP2 000014cd: MSTORE 000014ce: SWAP4 000014cf: SWAP1 000014d0: SWAP4 000014d1: KECCAK256 000014d2: SWAP2 000014d3: MLOAD 000014d4: DUP3 000014d5: SLOAD 000014d6: SWAP4 000014d7: MLOAD 000014d8: DUP3 000014d9: AND 000014da: PUSH1 0x80 000014dc: PUSH1 0x02 000014de: EXP 000014df: MUL 000014e0: SWAP1 000014e1: DUP3 000014e2: AND 000014e3: PUSH16 0xffffffffffffffffffffffffffffffff 000014f4: NOT 000014f5: SWAP1 000014f6: SWAP5 000014f7: AND 000014f8: SWAP4 000014f9: SWAP1 000014fa: SWAP4 000014fb: OR 000014fc: AND 000014fd: SWAP2 000014fe: SWAP1 000014ff: SWAP2 00001500: OR 00001501: SWAP1 00001502: SSTORE 00001503: JUMPDEST 00001504: DUP3 00001505: PUSH1 0x01 00001507: PUSH1 0xa0 00001509: PUSH1 0x02 0000150b: EXP 0000150c: SUB 0000150d: AND 0000150e: DUP5 0000150f: PUSH1 0x01 00001511: PUSH1 0xa0 00001513: PUSH1 0x02 00001515: EXP 00001516: SUB 00001517: AND 00001518: PUSH32 0x1d89fb077bf2ce0a703a51c0422f114127b7ef7b0cc4315d5b2eb6bdf45f027a 00001539: DUP5 0000153a: PUSH1 0x40 0000153c: MLOAD 0000153d: DUP1 0000153e: DUP3 0000153f: DUP2 00001540: MSTORE 00001541: PUSH1 0x20 00001543: ADD 00001544: SWAP2 00001545: POP 00001546: POP 00001547: PUSH1 0x40 00001549: MLOAD 0000154a: DUP1 0000154b: SWAP2 0000154c: SUB 0000154d: SWAP1 0000154e: LOG3 0000154f: DUP4 00001550: PUSH1 0x01 00001552: PUSH1 0xa0 00001554: PUSH1 0x02 00001556: EXP 00001557: SUB 00001558: AND 00001559: DUP4 0000155a: PUSH1 0x01 0000155c: PUSH1 0xa0 0000155e: PUSH1 0x02 00001560: EXP 00001561: SUB 00001562: AND 00001563: PUSH32 0x1d89fb077bf2ce0a703a51c0422f114127b7ef7b0cc4315d5b2eb6bdf45f027a 00001584: DUP4 00001585: PUSH1 0x40 00001587: MLOAD 00001588: DUP1 00001589: DUP3 0000158a: DUP2 0000158b: MSTORE 0000158c: PUSH1 0x20 0000158e: ADD 0000158f: SWAP2 00001590: POP 00001591: POP 00001592: PUSH1 0x40 00001594: MLOAD 00001595: DUP1 00001596: SWAP2 00001597: SUB 00001598: SWAP1 00001599: LOG3 0000159a: POP 0000159b: POP 0000159c: POP 0000159d: POP 0000159e: JUMP 0000159f: JUMPDEST 000015a0: PUSH1 0x00 000015a2: PUSH2 0x15b4 000015a5: PUSH2 0x15ae 000015a8: DUP6 000015a9: DUP6 000015aa: PUSH2 0x15d8 000015ad: JUMP 000015ae: JUMPDEST 000015af: DUP4 000015b0: PUSH2 0x15fc 000015b3: JUMP 000015b4: JUMPDEST 000015b5: SWAP5 000015b6: SWAP4 000015b7: POP 000015b8: POP 000015b9: POP 000015ba: POP 000015bb: JUMP 000015bc: JUMPDEST 000015bd: PUSH1 0x00 000015bf: PUSH2 0x15d1 000015c2: DUP4 000015c3: DUP4 000015c4: PUSH8 0x0de0b6b3a7640000 000015cd: PUSH2 0x159f 000015d0: JUMP 000015d1: JUMPDEST 000015d2: SWAP4 000015d3: SWAP3 000015d4: POP 000015d5: POP 000015d6: POP 000015d7: JUMP 000015d8: JUMPDEST 000015d9: PUSH1 0x00 000015db: DUP3 000015dc: DUP3 000015dd: MUL 000015de: DUP4 000015df: ISZERO 000015e0: DUP1 000015e1: PUSH2 0x15f4 000015e4: JUMPI 000015e5: POP 000015e6: DUP3 000015e7: DUP5 000015e8: DUP3 000015e9: DUP2 000015ea: ISZERO 000015eb: ISZERO 000015ec: PUSH2 0x15f1 000015ef: JUMPI 000015f0: INVALID 000015f1: JUMPDEST 000015f2: DIV 000015f3: EQ 000015f4: JUMPDEST 000015f5: ISZERO 000015f6: ISZERO 000015f7: PUSH2 0x15d1 000015fa: JUMPI 000015fb: INVALID 000015fc: JUMPDEST 000015fd: PUSH1 0x00 000015ff: DUP2 00001600: PUSH2 0x160c 00001603: DUP5 00001604: PUSH1 0x02 00001606: DUP4 00001607: DIV 00001608: PUSH2 0x161d 0000160b: JUMP 0000160c: JUMPDEST 0000160d: DUP2 0000160e: ISZERO 0000160f: ISZERO 00001610: PUSH2 0x1615 00001613: JUMPI 00001614: INVALID 00001615: JUMPDEST 00001616: DIV 00001617: SWAP4 00001618: SWAP3 00001619: POP 0000161a: POP 0000161b: POP 0000161c: JUMP 0000161d: JUMPDEST 0000161e: PUSH1 0x00 00001620: DUP3 00001621: DUP3 00001622: ADD 00001623: DUP4 00001624: DUP2 00001625: LT 00001626: ISZERO 00001627: PUSH2 0x15d1 0000162a: JUMPI 0000162b: INVALID 0000162c: STOP 0000162d: LOG1 0000162e: PUSH6 0x627a7a723058 00001635: KECCAK256 00001636: UNKNOWN(0xC7) 00001637: UNKNOWN(0xEF) 00001638: SWAP14 00001639: GT 0000163a: BLOBHASH 0000163b: UNKNOWN(0xA7) 0000163c: UNKNOWN(0xD7) 0000163d: UNKNOWN(0xD7) 0000163e: SDIV 0000163f: AND 00001640: UNKNOWN(0xA9) 00001641: SWAP14 00001642: UNKNOWN(0xED) 00001643: PUSH9 0xdc253e6e94aa93c025 0000164d: UNKNOWN(0xA5) 0000164e: UNKNOWN(0xED) 0000164f: EXTCODECOPY 00001650: UNKNOWN(0xD9) 00001651: MSIZE 00001652: UNKNOWN(0xDC) 00001653: SHR 00001654: SHL 00001655: SWAP14 00001656: STOP 00001657: UNKNOWN(0x29)
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | yes | yes |
viewtrace_id: 0x0d3ca35aa3c38465aab5a9bddd8dcf98da0cdfac58254ce6df72f591a7a6e679
call_targets:
0x4426d15ad435c156edc1183938ff47b37d3931fb, 0xae38c27e646959735ec70d77ed4ecc03a3eff490
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0x0d3ca35aa3c38465aab5a9bddd8dcf98da0cdfac58254ce6df72f591a7a6e679",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x4426d15ad435c156edc1183938ff47b37d3931fb",
"0xae38c27e646959735ec70d77ed4ecc03a3eff490"
],
"matched_probe": null,
"target_varies": true,
"classification": "target_varies"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x259df814",
"selector": "0x259df814",
"calldata_variants": [
"0x259df814",
"0x259df8140000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x57875631",
"selector": "0x57875631",
"calldata_variants": [
"0x57875631",
"0x578756310000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x759970be",
"selector": "0x759970be",
"calldata_variants": [
"0x759970be",
"0x759970be0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x782aaeea",
"selector": "0x782aaeea",
"calldata_variants": [
"0x782aaeea",
"0x782aaeea0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8291286c",
"selector": "0x8291286c",
"calldata_variants": [
"0x8291286c",
"0x8291286c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9be54fe9",
"selector": "0x9be54fe9",
"calldata_variants": [
"0x9be54fe9",
"0x9be54fe90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbaaa61be",
"selector": "0xbaaa61be",
"calldata_variants": [
"0xbaaa61be",
"0xbaaa61be0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe8b6ab90",
"selector": "0xe8b6ab90",
"calldata_variants": [
"0xe8b6ab90",
"0xe8b6ab900000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1300,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1660,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1858,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 14,
"guards_detected": [],
"untrusted_call_count": 14
}
|
| high | other | detector | ETH value transfer possible | 55 | yes | yes |
viewtrace_id: 0x0d3ca35aa3c38465aab5a9bddd8dcf98da0cdfac58254ce6df72f591a7a6e679
call_targets:
0x4426d15ad435c156edc1183938ff47b37d3931fb, 0xae38c27e646959735ec70d77ed4ecc03a3eff490
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0x0d3ca35aa3c38465aab5a9bddd8dcf98da0cdfac58254ce6df72f591a7a6e679",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x4426d15ad435c156edc1183938ff47b37d3931fb",
"0xae38c27e646959735ec70d77ed4ecc03a3eff490"
],
"matched_probe": null,
"target_varies": true,
"classification": "target_varies"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x259df814",
"selector": "0x259df814",
"calldata_variants": [
"0x259df814",
"0x259df8140000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x57875631",
"selector": "0x57875631",
"calldata_variants": [
"0x57875631",
"0x578756310000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x759970be",
"selector": "0x759970be",
"calldata_variants": [
"0x759970be",
"0x759970be0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x782aaeea",
"selector": "0x782aaeea",
"calldata_variants": [
"0x782aaeea",
"0x782aaeea0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8291286c",
"selector": "0x8291286c",
"calldata_variants": [
"0x8291286c",
"0x8291286c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9be54fe9",
"selector": "0x9be54fe9",
"calldata_variants": [
"0x9be54fe9",
"0x9be54fe90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbaaa61be",
"selector": "0xbaaa61be",
"calldata_variants": [
"0xbaaa61be",
"0xbaaa61be0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe8b6ab90",
"selector": "0xe8b6ab90",
"calldata_variants": [
"0xe8b6ab90",
"0xe8b6ab900000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1300,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1660,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1858,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 14,
"guards_detected": []
}
|
| high | other | slither | SimpleExchange.gasExchangePrivate(address,uint256,uint256,uint256) (contracts/Contract.sol#692-716) uses arbitrary from in transferFrom: assert(bool)(EURO_TOKEN.transferFrom(gas... | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "arbitrary-send-erc20",
"elements": [
{
"name": "gasExchangePrivate",
"type": "function",
"source_mapping": {
"lines": [
692,
693,
694,
695,
696,
697,
698,
699,
700,
701,
702,
703,
704,
705,
706,
707,
708,
709,
710,
711,
712,
713,
714,
715,
716
],
"start": 24757,
"length": 676,
"ending_column": 19,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 18,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "SimpleExchange",
"type": "contract",
"source_mapping": {
"lines": [
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632,
633,
634,
635,
636,
637,
638,
639,
640,
641,
642,
643,
644,
645,
646,
647,
648,
649,
650,
651,
652,
653,
654,
655,
656,
657,
658,
659,
660,
661,
662,
663,
664,
665,
666,
667,
668,
669,
670,
671,
672,
673,
674,
675,
676,
677,
678,
679,
680,
681,
682,
683,
684,
685,
686,
687,
688,
689,
690,
691,
692,
693,
694,
695,
696,
697,
698,
699,
700,
701,
702,
703,
704,
705,
706,
707,
708,
709,
710,
711,
712,
713,
714,
715,
716,
717,
718,
719,
720,
721,
722,
723,
724,
725,
726,
727,
728,
729,
730,
731,
732,
733,
734,
735,
736,
737,
738,
739,
740,
741,
742,
743,
744,
745,
746,
747,
748,
749,
750,
751,
752,
753,
754,
755,
756,
757,
758,
759,
760,
761,
762,
763,
764,
765,
766,
767,
768
],
"start": 19723,
"length": 7853,
"ending_column": 28,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 11,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "gasExchangePrivate(address,uint256,uint256,uint256)"
}
},
{
"name": "assert(bool)(EURO_TOKEN.transferFrom(gasRecipient,this,amountEurUlps))",
"type": "node",
"source_mapping": {
"lines": [
704,
705,
706,
707,
708
],
"start": 25173,
"length": 66,
"ending_column": 22,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 62,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "gasExchangePrivate",
"type": "function",
"source_mapping": {
"lines": [
692,
693,
694,
695,
696,
697,
698,
699,
700,
701,
702,
703,
704,
705,
706,
707,
708,
709,
710,
711,
712,
713,
714,
715,
716
],
"start": 24757,
"length": 676,
"ending_column": 19,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 18,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "SimpleExchange",
"type": "contract",
"source_mapping": {
"lines": [
544,
545,
546,
547,
548,
549,
550,
551,
552,
553,
554,
555,
556,
557,
558,
559,
560,
561,
562,
563,
564,
565,
566,
567,
568,
569,
570,
571,
572,
573,
574,
575,
576,
577,
578,
579,
580,
581,
582,
583,
584,
585,
586,
587,
588,
589,
590,
591,
592,
593,
594,
595,
596,
597,
598,
599,
600,
601,
602,
603,
604,
605,
606,
607,
608,
609,
610,
611,
612,
613,
614,
615,
616,
617,
618,
619,
620,
621,
622,
623,
624,
625,
626,
627,
628,
629,
630,
631,
632,
633,
634,
635,
636,
637,
638,
639,
640,
641,
642,
643,
644,
645,
646,
647,
648,
649,
650,
651,
652,
653,
654,
655,
656,
657,
658,
659,
660,
661,
662,
663,
664,
665,
666,
667,
668,
669,
670,
671,
672,
673,
674,
675,
676,
677,
678,
679,
680,
681,
682,
683,
684,
685,
686,
687,
688,
689,
690,
691,
692,
693,
694,
695,
696,
697,
698,
699,
700,
701,
702,
703,
704,
705,
706,
707,
708,
709,
710,
711,
712,
713,
714,
715,
716,
717,
718,
719,
720,
721,
722,
723,
724,
725,
726,
727,
728,
729,
730,
731,
732,
733,
734,
735,
736,
737,
738,
739,
740,
741,
742,
743,
744,
745,
746,
747,
748,
749,
750,
751,
752,
753,
754,
755,
756,
757,
758,
759,
760,
761,
762,
763,
764,
765,
766,
767,
768
],
"start": 19723,
"length": 7853,
"ending_column": 28,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 11,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "gasExchangePrivate(address,uint256,uint256,uint256)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "gasExchangePrivate",
"type": "function",
"lines": [
692,
693,
694,
695,
696,
697,
698,
699,
700,
701,
702,
703,
704,
705,
706,
707,
708,
709,
710,
711,
712,
713,
714,
715,
716
]
},
{
"file": "contracts/Contract.sol",
"name": "assert(bool)(EURO_TOKEN.transferFrom(gasRecipient,this,amountEurUlps))",
"type": "node",
"lines": [
704,
705,
706,
707,
708
]
}
],
"description": "SimpleExchange.gasExchangePrivate(address,uint256,uint256,uint256) (contracts/Contract.sol#692-716) uses arbitrary from in transferFrom: assert(bool)(EURO_TOKEN.transferFrom(gasRecipient,this,amountEurUlps)) (contracts/Contract.sol#704-708)"
}
|
| high | other | slither | Reclaimable.reclaim(IBasicToken) (contracts/Contract.sol#332-345) sends eth to arbitrary user | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "arbitrary-send-eth",
"elements": [
{
"name": "reclaim",
"type": "function",
"source_mapping": {
"lines": [
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345
],
"start": 11784,
"length": 360,
"ending_column": 21,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 7,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "Reclaimable",
"type": "contract",
"source_mapping": {
"lines": [
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345
],
"start": 11495,
"length": 651,
"ending_column": 23,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 1,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "reclaim(IBasicToken)"
}
},
{
"name": "reclaimer.transfer(address(this).balance)",
"type": "node",
"source_mapping": {
"lines": [
337,
338,
339
],
"start": 11959,
"length": 41,
"ending_column": 35,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 26,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "reclaim",
"type": "function",
"source_mapping": {
"lines": [
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345
],
"start": 11784,
"length": 360,
"ending_column": 21,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 7,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "Reclaimable",
"type": "contract",
"source_mapping": {
"lines": [
328,
329,
330,
331,
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345
],
"start": 11495,
"length": 651,
"ending_column": 23,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 1,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "reclaim(IBasicToken)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "reclaim",
"type": "function",
"lines": [
332,
333,
334,
335,
336,
337,
338,
339,
340,
341,
342,
343,
344,
345
]
},
{
"file": "contracts/Contract.sol",
"name": "reclaimer.transfer(address(this).balance)",
"type": "node",
"lines": [
337,
338,
339
]
}
],
"description": "Reclaimable.reclaim(IBasicToken) (contracts/Contract.sol#332-345) sends eth to arbitrary user\n\tDangerous calls:\n\t- reclaimer.transfer(address(this).balance) (contracts/Contract.sol#337-339)"
}
|
| medium | reentrancy | slither | Reentrancy in AccessControlled.setAccessPolicy(IAccessPolicy,address) (contracts/Contract.sol#107-125): | 75 | no | — |
viewevidence_json{
"impact": "Medium",
"detector": "reentrancy-no-eth",
"elements": [
{
"name": "setAccessPolicy",
"type": "function",
"source_mapping": {
"lines": [
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125
],
"start": 4061,
"length": 641,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "AccessControlled",
"type": "contract",
"source_mapping": {
"lines": [
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131
],
"start": 3245,
"length": 1594,
"ending_column": 6,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 156,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "setAccessPolicy(IAccessPolicy,address)"
}
},
{
"name": "require(bool)(newPolicy.allowed(newAccessController,ROLE_ACCESS_CONTROLLER,this,msg.sig))",
"type": "node",
"source_mapping": {
"lines": [
118,
119,
120
],
"start": 4360,
"length": 86,
"ending_column": 28,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 46,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "setAccessPolicy",
"type": "function",
"source_mapping": {
"lines": [
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125
],
"start": 4061,
"length": 641,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "AccessControlled",
"type": "contract",
"source_mapping": {
"lines": [
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131
],
"start": 3245,
"length": 1594,
"ending_column": 6,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 156,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "setAccessPolicy(IAccessPolicy,address)"
}
}
}
},
{
"name": "only(ROLE_ACCESS_CONTROLLER)",
"type": "node",
"source_mapping": {
"lines": [
112,
113,
114
],
"start": 4163,
"length": 28,
"ending_column": 22,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "setAccessPolicy",
"type": "function",
"source_mapping": {
"lines": [
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125
],
"start": 4061,
"length": 641,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "AccessControlled",
"type": "contract",
"source_mapping": {
"lines": [
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131
],
"start": 3245,
"length": 1594,
"ending_column": 6,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 156,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "setAccessPolicy(IAccessPolicy,address)"
}
}
}
},
{
"name": "require(bool)(_accessPolicy.allowed(msg.sender,role,this,msg.sig))",
"type": "node",
"source_mapping": {
"lines": [
91,
92
],
"start": 3633,
"length": 63,
"ending_column": 15,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 36,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "only",
"type": "function",
"source_mapping": {
"lines": [
89,
90,
91,
92
],
"start": 3595,
"length": 119,
"ending_column": 33,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 30,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "AccessControlled",
"type": "contract",
"source_mapping": {
"lines": [
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131
],
"start": 3245,
"length": 1594,
"ending_column": 6,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 156,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "only(bytes32)"
}
}
}
},
{
"name": "_accessPolicy = newPolicy",
"type": "node",
"source_mapping": {
"lines": [
123
],
"start": 4577,
"length": 25,
"ending_column": 32,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 7,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"variable_name": "_accessPolicy",
"underlying_type": "variables_written"
},
"type_specific_fields": {
"parent": {
"name": "setAccessPolicy",
"type": "function",
"source_mapping": {
"lines": [
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125
],
"start": 4061,
"length": 641,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 4,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "AccessControlled",
"type": "contract",
"source_mapping": {
"lines": [
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131
],
"start": 3245,
"length": 1594,
"ending_column": 6,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 156,
"filename_absolute": "/tmp/slither-a1kvj1uv/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "setAccessPolicy(IAccessPolicy,address)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "setAccessPolicy",
"type": "function",
"lines": [
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125
]
},
{
"file": "contracts/Contract.sol",
"name": "require(bool)(newPolicy.allowed(newAccessController,ROLE_ACCESS_CONTROLLER,this,msg.sig))",
"type": "node",
"lines": [
118,
119,
120
]
},
{
"file": "contracts/Contract.sol",
"name": "only(ROLE_ACCESS_CONTROLLER)",
"type": "node",
"lines": [
112,
113,
114
]
},
{
"file": "contracts/Contract.sol",
"name": "require(bool)(_accessPolicy.allowed(msg.sender,role,this,msg.sig))",
"type": "node",
"lines": [
91,
92
]
},
{
"file": "contracts/Contract.sol",
"name": "_accessPolicy = newPolicy",
"type": "node",
"lines": [
123
]
}
],
"description": "Reentrancy in AccessControlled.setAccessPolicy(IAccessPolicy,address) (contracts/Contract.sol#107-125):\n\tExternal calls:\n\t- require(bool)(newPolicy.allowed(newAccessController,ROLE_ACCESS_CONTROLLER,this,msg.sig)) (contracts/Contract.sol#118-120)\n\t- only(ROLE_ACCESS_CONTROLLER) (contracts/Contract.sol#112-114)\n\t\t- require(bool)(_accessPolicy.allowed(msg.sender,role,this,msg.sig)) (contracts/Contract.sol#91-92)\n\tState variables written after the call(s):\n\t- _accessPolicy = newPolicy (contracts/Contract.sol#123)\n\tAccessControlled._accessPolicy (contracts/Contract.sol#81-82) can be used in cross function reentrancies:\n\t- AccessControlled.accessPolicy() (contracts/Contract.sol#125-131)\n\t- AccessControlled.only(bytes32) (contracts/Contract.sol#89-92)\n\t- AccessControlled.setAccessPolicy(IAccessPolicy,address) (contracts/Contract.sol#107-125)"
}
|