solidity/test/libyul/yulStackLayout/test.yul
Daniel Kirchner 731a61b9fc tmp
2022-01-27 12:44:43 +01:00

2360 lines
99 KiB
Plaintext

{
{
let _1 := 64
mstore(_1, 128)
if iszero(lt(calldatasize(), 4))
{
let _2 := 0
switch shr(224, calldataload(_2))
case 0x37fe974a {
if callvalue() { revert(_2, _2) }
let ret := fun_computeLiquidity(abi_decode_tuple_address(calldatasize()))
let memPos := mload(_1)
return(memPos, sub(abi_encode_tuple_struct_LiquidityStatus(memPos, ret), memPos))
}
case 0x41976e09 {
if callvalue() { revert(_2, _2) }
let ret_1, ret_2 := fun_getPrice(abi_decode_tuple_address(calldatasize()))
let memPos_1 := mload(_1)
return(memPos_1, sub(abi_encode_uint256_uint256(memPos_1, ret_1, ret_2), memPos_1))
}
case 0x69a92ea3 {
if callvalue() { revert(_2, _2) }
abi_decode_12552(calldatasize())
let memPos_2 := mload(_1)
return(memPos_2, sub(abi_encode_bytes32(memPos_2, loadimmutable("3064")), memPos_2))
}
case 0x8eddcd92 {
if callvalue() { revert(_2, _2) }
let ret_3 := fun_getNewMarketParameters(abi_decode_tuple_address(calldatasize()))
let memPos_3 := mload(_1)
return(memPos_3, sub(abi_encode_struct_NewMarketParameters(memPos_3, ret_3), memPos_3))
}
case 0x9693fa6b {
if callvalue() { revert(_2, _2) }
let ret_4, ret_5, ret_6 := fun_getPriceFull(abi_decode_tuple_address(calldatasize()))
let memPos_4 := mload(_1)
return(memPos_4, sub(abi_encode_uint256_uint256_uint256(memPos_4, ret_4, ret_5, ret_6), memPos_4))
}
case 0xa1308f27 {
if callvalue() { revert(_2, _2) }
abi_decode_12552(calldatasize())
let memPos_5 := mload(_1)
return(memPos_5, sub(abi_encode_bytes32(memPos_5, loadimmutable("3062")), memPos_5))
}
case 0xc39b543a {
if callvalue() { revert(_2, _2) }
fun_requireLiquidity(abi_decode_tuple_address(calldatasize()))
return(mload(_1), _2)
}
case 0xebd7ba19 {
if callvalue() { revert(_2, _2) }
let ret_7 := fun_computeAssetLiquidities(abi_decode_tuple_address(calldatasize()))
let memPos_6 := mload(_1)
return(memPos_6, sub(abi_encode_array_struct_AssetLiquidity_dyn(memPos_6, ret_7), memPos_6))
}
case 0xf70c2fde {
if callvalue() { revert(_2, _2) }
let param, param_1 := abi_decode_struct_AssetCachet_struct_AssetConfig(calldatasize())
let var_twap, var_twapPeriod := modifier_FREEMEM(param, param_1)
let memPos_7 := mload(_1)
return(memPos_7, sub(abi_encode_uint256_uint256(memPos_7, var_twap, var_twapPeriod), memPos_7))
}
}
revert(0, 0)
}
function cleanup_address(value) -> cleaned
{
cleaned := and(value, sub(shl(160, 1), 1))
}
function validator_revert_address(value)
{
if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }
}
function abi_decode_address() -> value
{
value := calldataload(4)
validator_revert_address(value)
}
function abi_decode_tuple_address(dataEnd) -> value0
{
if slt(add(dataEnd, not(3)), 32) { revert(0, 0) }
let value := calldataload(4)
validator_revert_address(value)
value0 := value
}
function cleanup_bool(value) -> cleaned
{
cleaned := iszero(iszero(value))
}
function abi_encode_struct_LiquidityStatus(value, pos)
{
mstore(pos, mload(value))
mstore(add(pos, 0x20), mload(add(value, 0x20)))
mstore(add(pos, 0x40), mload(add(value, 0x40)))
mstore(add(pos, 0x60), iszero(iszero(mload(add(value, 0x60)))))
}
function abi_encode_tuple_struct_LiquidityStatus(headStart, value0) -> tail
{
tail := add(headStart, 128)
abi_encode_struct_LiquidityStatus(value0, headStart)
}
function abi_encode_uint256_uint256(headStart, value0, value1) -> tail
{
tail := add(headStart, 64)
mstore(headStart, value0)
mstore(add(headStart, 32), value1)
}
function abi_decode_12552(dataEnd)
{
if slt(add(dataEnd, not(3)), 0) { revert(0, 0) }
}
function abi_decode(headStart, dataEnd)
{
if slt(sub(dataEnd, headStart), 0) { revert(0, 0) }
}
function abi_encode_bytes32(headStart, value0) -> tail
{
tail := add(headStart, 32)
mstore(headStart, value0)
}
function cleanup_uint32(value) -> cleaned
{
cleaned := and(value, 0xffffffff)
}
function cleanup_uint24(value) -> cleaned
{
cleaned := and(value, 0xffffff)
}
function abi_encode_struct_NewMarketParameters(headStart, value0) -> tail
{
tail := add(headStart, 224)
mstore(headStart, and(mload(value0), 0xffff))
let _1 := 0xffffffff
mstore(add(headStart, 0x20), and(mload(add(value0, 0x20)), _1))
let memberValue0 := mload(add(value0, 0x40))
mstore(add(headStart, 0x40), and(mload(memberValue0), sub(shl(160, 1), 1)))
mstore(add(headStart, 96), iszero(iszero(mload(add(memberValue0, 0x20)))))
mstore(add(headStart, 128), and(mload(add(memberValue0, 0x40)), _1))
mstore(add(headStart, 160), and(mload(add(memberValue0, 96)), _1))
mstore(add(headStart, 192), and(mload(add(memberValue0, 128)), 0xffffff))
}
function abi_encode_uint256_uint256_uint256(headStart, value0, value1, value2) -> tail
{
tail := add(headStart, 96)
mstore(headStart, value0)
mstore(add(headStart, 32), value1)
mstore(add(headStart, 64), value2)
}
function abi_encode_array_struct_AssetLiquidity_dyn(headStart, value0) -> tail
{
let _1 := 32
let tail_1 := add(headStart, _1)
mstore(headStart, _1)
let pos := tail_1
let length := mload(value0)
mstore(tail_1, length)
pos := add(headStart, 64)
let srcPtr := add(value0, _1)
let i := 0
for { } lt(i, length) { i := add(i, 1) }
{
let _2 := mload(srcPtr)
mstore(pos, and(mload(_2), sub(shl(160, 1), 1)))
let memberValue0 := mload(add(_2, _1))
abi_encode_struct_LiquidityStatus(memberValue0, add(pos, _1))
pos := add(pos, 160)
srcPtr := add(srcPtr, _1)
}
tail := pos
}
function panic_error_0x41()
{
mstore(0, shl(224, 0x4e487b71))
mstore(4, 0x41)
revert(0, 0x24)
}
function finalize_allocation_12563(memPtr)
{
let newFreePtr := add(memPtr, 160)
if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }
mstore(64, newFreePtr)
}
function finalize_allocation_12670(memPtr)
{
let newFreePtr := add(memPtr, 64)
if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }
mstore(64, newFreePtr)
}
function finalize_allocation_22851(memPtr)
{
let newFreePtr := add(memPtr, 128)
if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }
mstore(64, newFreePtr)
}
function finalize_allocation_22852(memPtr)
{
let newFreePtr := add(memPtr, 96)
if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }
mstore(64, newFreePtr)
}
function finalize_allocation(memPtr, size)
{
let newFreePtr := add(memPtr, and(add(size, 31), not(31)))
if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }
mstore(64, newFreePtr)
}
function allocate_memory_12562() -> memPtr
{
memPtr := mload(64)
let newFreePtr := add(memPtr, 0x01e0)
if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }
mstore(64, newFreePtr)
}
function allocate_memory() -> memPtr
{
memPtr := mload(64)
finalize_allocation_22851(memPtr)
}
function cleanup_uint112(value) -> cleaned
{
cleaned := and(value, 0xffffffffffffffffffffffffffff)
}
function abi_decode_uint112() -> value
{
value := calldataload(36)
if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffff))) { revert(0, 0) }
}
function cleanup_uint144(value) -> cleaned
{
cleaned := and(value, 0xffffffffffffffffffffffffffffffffffff)
}
function abi_decode_uint144() -> value
{
value := calldataload(68)
if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }
}
function cleanup_uint96(value) -> cleaned
{
cleaned := and(value, 0xffffffffffffffffffffffff)
}
function abi_decode_uint96() -> value
{
value := calldataload(100)
if iszero(eq(value, and(value, 0xffffffffffffffffffffffff))) { revert(0, 0) }
}
function cleanup_uint40(value) -> cleaned
{
cleaned := and(value, 0xffffffffff)
}
function abi_decode_uint40() -> value
{
value := calldataload(164)
if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }
}
function validator_revert_uint8(value)
{
if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }
}
function abi_decode_uint8() -> value
{
value := calldataload(196)
validator_revert_uint8(value)
}
function validator_revert_uint32(value)
{
if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }
}
function abi_decode_uint32_22844() -> value
{
value := calldataload(228)
validator_revert_uint32(value)
}
function abi_decode_uint32_22846() -> value
{
value := calldataload(292)
validator_revert_uint32(value)
}
function abi_decode_uint32() -> value
{
value := calldataload(356)
validator_revert_uint32(value)
}
function cleanup_int96(value) -> cleaned
{
cleaned := signextend(11, value)
}
function abi_decode_int96() -> value
{
value := calldataload(260)
if iszero(eq(value, signextend(11, value))) { revert(0, 0) }
}
function validator_revert_uint16(value)
{
if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }
}
function abi_decode_uint16() -> value
{
value := calldataload(324)
validator_revert_uint16(value)
}
function validator_revert_bool(value)
{
if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }
}
function abi_decode_struct_AssetConfig(end) -> value
{
if slt(add(end, not(483)), 0xa0) { revert(0, 0) }
let memPtr := mload(64)
let newFreePtr := add(memPtr, 0xa0)
if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }
mstore(64, newFreePtr)
value := memPtr
let value_1 := calldataload(484)
validator_revert_address(value_1)
mstore(memPtr, value_1)
let value_2 := calldataload(516)
validator_revert_bool(value_2)
mstore(add(memPtr, 32), value_2)
let value_3 := calldataload(548)
validator_revert_uint32(value_3)
mstore(add(memPtr, 64), value_3)
let value_4 := calldataload(580)
validator_revert_uint32(value_4)
mstore(add(memPtr, 96), value_4)
let value_5 := calldataload(612)
if iszero(eq(value_5, and(value_5, 0xffffff))) { revert(0, 0) }
mstore(add(memPtr, 128), value_5)
}
function abi_decode_struct_AssetCachet_struct_AssetConfig(dataEnd) -> value0, value1
{
let _1 := add(dataEnd, not(3))
if slt(_1, 640) { revert(0, 0) }
if slt(_1, 0x01e0) { revert(0, 0) }
let value := allocate_memory_12562()
mstore(value, abi_decode_address())
mstore(add(value, 32), abi_decode_uint112())
mstore(add(value, 64), abi_decode_uint144())
mstore(add(value, 96), abi_decode_uint96())
mstore(add(value, 128), calldataload(132))
mstore(add(value, 160), abi_decode_uint40())
mstore(add(value, 192), abi_decode_uint8())
mstore(add(value, 224), abi_decode_uint32_22844())
mstore(add(value, 256), abi_decode_int96())
mstore(add(value, 288), abi_decode_uint32_22846())
mstore(add(value, 320), abi_decode_uint16())
mstore(add(value, 352), abi_decode_uint32())
mstore(add(value, 384), calldataload(388))
mstore(add(value, 416), calldataload(420))
mstore(add(value, 448), calldataload(452))
value0 := value
value1 := abi_decode_struct_AssetConfig(dataEnd)
}
function allocate_and_zero_memory_struct_struct_AssetConfig() -> memPtr
{
let memPtr_1 := mload(64)
finalize_allocation_12563(memPtr_1)
memPtr := memPtr_1
mstore(memPtr_1, 0)
mstore(add(memPtr_1, 32), 0)
mstore(add(memPtr_1, 64), 0)
mstore(add(memPtr_1, 96), 0)
mstore(add(memPtr_1, 128), 0)
}
function allocate_and_zero_memory_struct_struct_NewMarketParameters() -> memPtr
{
let memPtr_1 := mload(64)
let newFreePtr := add(memPtr_1, 96)
if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr_1)) { panic_error_0x41() }
mstore(64, newFreePtr)
memPtr := memPtr_1
mstore(memPtr_1, 0)
mstore(add(memPtr_1, 32), 0)
mstore(add(memPtr_1, 64), allocate_and_zero_memory_struct_struct_AssetConfig())
}
function write_to_memory_bool(memPtr)
{ mstore(memPtr, 0x01) }
function write_to_memory_uint32_12567(memPtr)
{ mstore(memPtr, 0xffffffff) }
function write_to_memory_uint32_12631(memPtr)
{ mstore(memPtr, 0x42c1d800) }
function write_to_memory_uint32(memPtr, value)
{
mstore(memPtr, and(value, 0xffffffff))
}
function write_to_memory_uint24_12568(memPtr)
{ mstore(memPtr, 16777215) }
function write_to_memory_uint24_12571(memPtr)
{ mstore(memPtr, 3000) }
function write_to_memory_uint24_12572(memPtr)
{ mstore(memPtr, 10000) }
function write_to_memory_uint24_12573(memPtr)
{ mstore(memPtr, 500) }
function write_to_memory_uint24_12574(memPtr)
{ mstore(memPtr, 100) }
function write_to_memory_uint24(memPtr)
{ mstore(memPtr, 1800) }
function mapping_index_access_mapping_address_address_of_address_12569(key) -> dataSlot
{
mstore(0, and(key, sub(shl(160, 1), 1)))
mstore(0x20, 0x0b)
dataSlot := keccak256(0, 0x40)
}
function mapping_index_access_mapping_address_address_of_address_12580(key) -> dataSlot
{
mstore(0, and(key, sub(shl(160, 1), 1)))
mstore(0x20, 0x08)
dataSlot := keccak256(0, 0x40)
}
function mapping_index_access_mapping_address_address_of_address_12628(key) -> dataSlot
{
mstore(0, and(key, sub(shl(160, 1), 1)))
mstore(0x20, 0x09)
dataSlot := keccak256(0, 0x40)
}
function mapping_index_access_mapping_address_address_of_address_12656(key) -> dataSlot
{
mstore(0, and(key, sub(shl(160, 1), 1)))
mstore(0x20, 0x07)
dataSlot := keccak256(0, 0x40)
}
function mapping_index_access_mapping_address_address_of_address(slot, key) -> dataSlot
{
mstore(0, and(key, sub(shl(160, 1), 1)))
mstore(0x20, slot)
dataSlot := keccak256(0, 0x40)
}
function read_from_storage_split_offset_address(slot) -> value
{
value := and(sload(slot), sub(shl(160, 1), 1))
}
function panic_error_0x11()
{
mstore(0, shl(224, 0x4e487b71))
mstore(4, 0x11)
revert(0, 0x24)
}
function increment_uint256(value) -> ret
{
if eq(value, not(0)) { panic_error_0x11() }
ret := add(value, 1)
}
function panic_error_0x32()
{
mstore(0, shl(224, 0x4e487b71))
mstore(4, 0x32)
revert(0, 0x24)
}
function memory_array_index_access_uint24(baseRef, index) -> addr
{
if iszero(lt(index, 0x04)) { panic_error_0x32() }
addr := add(baseRef, shl(5, index))
}
function read_from_memoryt_uint24(ptr) -> returnValue
{
returnValue := and(mload(ptr), 0xffffff)
}
function abi_decode_address_fromMemory(headStart, dataEnd) -> value0
{
if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }
let value := mload(headStart)
validator_revert_address(value)
value0 := value
}
function abi_encode_address_address_uint24(headStart, value0, value1, value2) -> tail
{
tail := add(headStart, 96)
let _1 := sub(shl(160, 1), 1)
mstore(headStart, and(value0, _1))
mstore(add(headStart, 32), and(value1, _1))
mstore(add(headStart, 64), and(value2, 0xffffff))
}
function revert_forward()
{
let pos := mload(64)
returndatacopy(pos, 0, returndatasize())
revert(pos, returndatasize())
}
function abi_decode_uint128_fromMemory(headStart, dataEnd) -> value0
{
if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }
let value := mload(headStart)
if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }
value0 := value
}
function require_helper_stringliteral_15dc(condition)
{
if iszero(condition)
{
let memPtr := mload(64)
mstore(memPtr, shl(229, 4594637))
mstore(add(memPtr, 4), 32)
mstore(add(memPtr, 36), 23)
mstore(add(memPtr, 68), "e/no-uniswap-pool-avail")
revert(memPtr, 100)
}
}
function require_helper_stringliteral_cad5(condition)
{
if iszero(condition)
{
let memPtr := mload(64)
mstore(memPtr, shl(229, 4594637))
mstore(add(memPtr, 4), 32)
mstore(add(memPtr, 36), 23)
mstore(add(memPtr, 68), "e/bad-uniswap-pool-addr")
revert(memPtr, 100)
}
}
function write_to_memory_uint16_12575(memPtr)
{ mstore(memPtr, 2) }
function write_to_memory_uint16_12577(memPtr)
{ mstore(memPtr, 3) }
function write_to_memory_uint16_12581(memPtr)
{ mstore(memPtr, 1) }
function write_to_memory_uint16(memPtr, value)
{
mstore(memPtr, and(value, 0xffff))
}
function abi_encode_uint16_to_uint16(headStart) -> tail
{
tail := add(headStart, 32)
mstore(headStart, 10)
}
function abi_encode_uint16(headStart, value0) -> tail
{
tail := add(headStart, 32)
mstore(headStart, and(value0, 0xffff))
}
function return_data_selector() -> sig
{
if gt(returndatasize(), 3)
{
returndatacopy(0, 0, 4)
sig := shr(224, mload(0))
}
}
function try_decode_error_message() -> ret
{
if lt(returndatasize(), 0x44) { leave }
let data := mload(64)
let _1 := not(3)
returndatacopy(data, 4, add(returndatasize(), _1))
let offset := mload(data)
let _2 := returndatasize()
let _3 := 0xffffffffffffffff
if or(gt(offset, _3), gt(add(offset, 0x24), _2)) { leave }
let msg := add(data, offset)
let length := mload(msg)
if gt(length, _3) { leave }
if gt(add(add(msg, length), 0x20), add(add(data, returndatasize()), _1)) { leave }
finalize_allocation(data, add(add(offset, length), 0x20))
ret := msg
}
function abi_encode_stringliteral(headStart) -> tail
{
mstore(headStart, 32)
mstore(add(headStart, 32), 30)
mstore(add(headStart, 64), "e/risk/uniswap-pool-not-inited")
tail := add(headStart, 96)
}
function abi_encode_stringliteral_92b3(pos) -> end
{
mstore(pos, "e/risk/uniswap/")
end := add(pos, 15)
}
function copy_memory_to_memory(src, dst, length)
{
let i := 0
for { } lt(i, length) { i := add(i, 32) }
{
mstore(add(dst, i), mload(add(src, i)))
}
if gt(i, length) { mstore(add(dst, length), 0) }
}
function abi_encode_string_memory_ptr(value, pos) -> end
{
let length := mload(value)
copy_memory_to_memory(add(value, 0x20), pos, length)
end := add(pos, length)
}
function abi_encode_string(headStart, value0) -> tail
{
mstore(headStart, 32)
let length := mload(value0)
mstore(add(headStart, 32), length)
copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)
tail := add(add(headStart, and(add(length, 31), not(31))), 64)
}
function extract_returndata() -> data
{
switch returndatasize()
case 0 { data := 96 }
default {
let _1 := returndatasize()
if gt(_1, 0xffffffffffffffff) { panic_error_0x41() }
let memPtr := mload(64)
finalize_allocation(memPtr, add(and(add(_1, 31), not(31)), 0x20))
mstore(memPtr, _1)
data := memPtr
returndatacopy(add(memPtr, 0x20), 0, returndatasize())
}
}
function read_from_storage_split_offset_uint32(slot) -> value
{
value := and(shr(168, sload(slot)), 0xffffffff)
}
/// @ast-id 10602
function fun_getNewMarketParameters(var_underlying) -> var_p_mpos
{
var_p_mpos := allocate_and_zero_memory_struct_struct_NewMarketParameters()
let _1 := 64
let _2 := add(var_p_mpos, _1)
let _3 := 32
write_to_memory_bool(add(mload(_2), _3))
let _4 := 0
mstore(add(mload(_2), _1), _4)
write_to_memory_uint32_12567(add(mload(_2), 96))
write_to_memory_uint24_12568(add(mload(_2), 128))
let _5 := loadimmutable("10268")
let _6 := sub(shl(160, 1), 1)
switch eq(and(var_underlying, _6), and(_5, _6))
case 0 {
switch iszero(iszero(and(read_from_storage_split_offset_address(mapping_index_access_mapping_address_address_of_address_12569(var_underlying)), _6)))
case 0 {
let var_pool := _4
let var_fee := _4
let expr_10439_mpos := allocate_memory()
write_to_memory_uint24_12571(expr_10439_mpos)
write_to_memory_uint24_12572(add(expr_10439_mpos, _3))
write_to_memory_uint24_12573(add(expr_10439_mpos, _1))
write_to_memory_uint24_12574(add(expr_10439_mpos, 96))
let var_bestLiquidity := _4
let var_i := _4
let _7 := and(loadimmutable("10270"), _6)
for { }
1
{
var_i := increment_uint256(var_i)
}
{
let _8 := 4
if iszero(lt(var_i, _8)) { break }
let _9 := read_from_memoryt_uint24(memory_array_index_access_uint24(expr_10439_mpos, var_i))
let _10 := mload(_1)
mstore(_10, shl(225, 0x0b4c7741))
let _11 := staticcall(gas(), _7, _10, sub(abi_encode_address_address_uint24(add(_10, _8), var_underlying, _5, _9), _10), _10, _3)
if iszero(_11) { revert_forward() }
let expr := _4
if _11
{
finalize_allocation(_10, returndatasize())
expr := abi_decode_address_fromMemory(_10, add(_10, returndatasize()))
}
let _12 := and(expr, _6)
if iszero(_12) { continue }
let _13 := mload(_1)
mstore(_13, shl(225, 0x0d343281))
let _14 := staticcall(gas(), _12, _13, _8, _13, _3)
if iszero(_14) { revert_forward() }
let expr_1 := _4
if _14
{
finalize_allocation(_13, returndatasize())
expr_1 := abi_decode_uint128_fromMemory(_13, add(_13, returndatasize()))
}
let expr_2 := iszero(and(var_pool, _6))
if iszero(expr_2)
{
let _15 := 0xffffffffffffffffffffffffffffffff
expr_2 := gt(and(expr_1, _15), and(var_bestLiquidity, _15))
}
if expr_2
{
var_pool := expr
var_fee := read_from_memoryt_uint24(memory_array_index_access_uint24(expr_10439_mpos, var_i))
var_bestLiquidity := expr_1
}
}
let _16 := and(var_pool, _6)
require_helper_stringliteral_15dc(iszero(iszero(_16)))
require_helper_stringliteral_cad5(eq(cleanup_address(fun_computeUniswapPoolAddress(var_underlying, var_fee)), _16))
write_to_memory_uint16_12575(var_p_mpos)
write_to_memory_uint32(add(var_p_mpos, _3), and(var_fee, 16777215))
if iszero(extcodesize(_16)) { revert(_4, _4) }
let _17 := mload(_1)
mstore(_17, shl(224, 0x32148f67))
let trySuccessCondition := call(gas(), _16, _4, _17, sub(abi_encode_uint16_to_uint16(add(_17, 4)), _17), _17, _4)
if trySuccessCondition
{
finalize_allocation(_17, returndatasize())
abi_decode(_17, add(_17, returndatasize()))
}
switch iszero(trySuccessCondition)
case 0 { }
default {
let _18 := 1
if eq(147028384, return_data_selector())
{
let _19 := try_decode_error_message()
if _19
{
_18 := _4
if eq(keccak256(add(_19, _3), mload(_19)), 0xe01ebc6b01bbf458b3d355b6e649efe64599751670c5d19175619893ecf97529)
{
let _20 := mload(_1)
mstore(_20, shl(229, 4594637))
revert(_20, sub(abi_encode_stringliteral(add(_20, 4)), _20))
}
let expr_10582_mpos := mload(_1)
let _21 := sub(abi_encode_string_memory_ptr(_19, abi_encode_stringliteral_92b3(add(expr_10582_mpos, _3))), expr_10582_mpos)
mstore(expr_10582_mpos, add(_21, not(31)))
finalize_allocation(expr_10582_mpos, _21)
let _22 := mload(_1)
mstore(_22, shl(229, 4594637))
revert(_22, sub(abi_encode_string(add(_22, 4), expr_10582_mpos), _22))
}
}
if _18
{
fun_revertBytes(extract_returndata())
}
}
}
default {
write_to_memory_uint16_12577(var_p_mpos)
mstore(add(var_p_mpos, _3), _4)
write_to_memory_uint32(add(mload(_2), _1), read_from_storage_split_offset_uint32(mapping_index_access_mapping_address_address_of_address_12580(read_from_storage_split_offset_address(mapping_index_access_mapping_address_address_of_address_12569(var_underlying)))))
}
}
default {
write_to_memory_uint16_12581(var_p_mpos)
mstore(add(var_p_mpos, _3), _4)
}
}
/// @ast-id 164
function fun_revertBytes(var_errMsg_mpos)
{
let expr := mload(var_errMsg_mpos)
if iszero(iszero(expr))
{
revert(add(32, var_errMsg_mpos), expr)
}
let _1 := mload(64)
mstore(_1, shl(229, 4594637))
mstore(add(_1, 4), 32)
mstore(add(_1, 36), 13)
mstore(add(_1, 68), "e/empty-error")
revert(_1, 100)
}
/// @ast-id 10658
function fun_computeUniswapPoolAddress(var_underlying, var_fee) -> var
{
let var_tokenA := var_underlying
let var_tokenB := loadimmutable("10268")
let var_tokenB_1 := var_tokenB
let _1 := sub(shl(160, 1), 1)
if gt(and(var_underlying, _1), and(var_tokenB, _1))
{
var_tokenB := var_underlying
var_tokenA := var_tokenB_1
}
let expr_10648_mpos := mload(64)
let _2 := add(expr_10648_mpos, 0x20)
let _3 := sub(abi_encode_address_address_uint24(_2, var_tokenA, var_tokenB, var_fee), expr_10648_mpos)
mstore(expr_10648_mpos, add(_3, not(31)))
finalize_allocation(expr_10648_mpos, _3)
let expr := keccak256(_2, mload(expr_10648_mpos))
let expr_10651_mpos := mload(64)
let _4 := add(expr_10651_mpos, 0x20)
mstore(_4, shl(248, 255))
mstore(add(expr_10651_mpos, 33), and(shl(96, loadimmutable("10270")), not(0xffffffffffffffffffffffff)))
mstore(add(expr_10651_mpos, 53), expr)
mstore(add(expr_10651_mpos, 85), loadimmutable("10272"))
mstore(expr_10651_mpos, 85)
finalize_allocation_22851(expr_10651_mpos)
var := cleanup_address(cleanup_address(keccak256(_4, mload(expr_10651_mpos))))
}
/// @ast-id 147
function modifier_FREEMEM(var_assetCache_mpos, var_config_mpos) -> _1, _2
{
let _3 := 0x40
let var_origFreeMemPtr := mload(_3)
let var_twap := 0
let var_twapPeriod := var_twap
var_twap := var_twap
var_twapPeriod := 0
let expr_component, expr_component_1, expr_component_2, expr_component_3 := fun_resolvePricingConfig(var_assetCache_mpos, var_config_mpos)
let _4 := 0xffff
let _5 := and(expr_component_1, _4)
switch eq(_5, 0x01)
case 0 {
switch eq(_5, 0x02)
case 0 {
let _6 := mload(_3)
mstore(_6, shl(229, 4594637))
revert(_6, sub(abi_encode_stringliteral_ee51(add(_6, 4)), _6))
}
default {
let _7 := 0xffffff
let expr := fun_computeUniswapPoolAddress(expr_component, and(expr_component_2, _7))
let var_ago := and(expr_component_3, _7)
let expr_mpos := allocate_and_zero_memory_array_array_uint32_dyn()
write_to_memory_uint32(memory_array_index_access_uint32_dyn_12584(expr_mpos), var_ago)
mstore(memory_array_index_access_uint32_dyn_12585(expr_mpos), var_twapPeriod)
let expr_mpos_1 := mload(_3)
let _8 := add(expr_mpos_1, 0x20)
let _9 := shl(224, 0x883bdbfd)
mstore(_8, _9)
let _10 := sub(abi_encode_array_uint32_dyn(add(expr_mpos_1, 36), expr_mpos), expr_mpos_1)
let _11 := not(31)
mstore(expr_mpos_1, add(_10, _11))
finalize_allocation(expr_mpos_1, _10)
let expr_component_4 := staticcall(gas(), expr, _8, mload(expr_mpos_1), var_twapPeriod, var_twapPeriod)
let var_data_mpos := extract_returndata()
if iszero(expr_component_4)
{
let expr_1 := keccak256(add(var_data_mpos, 0x20), mload(var_data_mpos))
let expr_mpos_2 := mload(_3)
let _12 := add(expr_mpos_2, 0x20)
mstore(_12, shl(229, 4594637))
let _13 := sub(abi_encode_stringliteral_d30c(add(expr_mpos_2, 36)), expr_mpos_2)
mstore(expr_mpos_2, add(_13, _11))
finalize_allocation(expr_mpos_2, _13)
if iszero(eq(expr_1, keccak256(_12, mload(expr_mpos_2))))
{
fun_revertBytes(var_data_mpos)
}
let _14 := and(expr, sub(shl(160, 1), 1))
let _15 := mload(_3)
mstore(_15, shl(224, 0x3850c7bd))
let _16 := staticcall(gas(), _14, _15, 4, _15, 224)
if iszero(_16) { revert_forward() }
let expr_component_5 := var_twapPeriod
let expr_component_6 := var_twapPeriod
let expr_component_7 := var_twapPeriod
if _16
{
finalize_allocation(_15, returndatasize())
let expr_component_8, expr_component_9, expr_component_10, expr_component_11, expr_component_12, expr_component_13, expr_component_14 := abi_decode_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory(_15, add(_15, returndatasize()))
expr_component_5 := expr_component_10
expr_component_6 := expr_component_11
expr_component_7 := expr_component_12
}
let expr_2 := mod_uint16(checked_add_uint16(expr_component_5), expr_component_6)
let _17 := mload(_3)
let _18 := shl(224, 0x252c09d7)
mstore(_17, _18)
let _19 := staticcall(gas(), _14, _17, sub(abi_encode_uint16(add(_17, 4), expr_2), _17), _17, 128)
if iszero(_19) { revert_forward() }
let expr_component_15 := var_twapPeriod
let expr_component_16 := var_twapPeriod
if _19
{
finalize_allocation(_17, returndatasize())
let expr_component_17, expr_component_18, expr_component_19, expr_component_20 := abi_decode_uint32t_int56t_uint160t_bool_fromMemory(_17, add(_17, returndatasize()))
expr_component_15 := expr_component_17
expr_component_16 := expr_component_20
}
let var_oldestAvailableAge := expr_component_15
if iszero(expr_component_16)
{
let _20 := mload(_3)
mstore(_20, _18)
let _21 := staticcall(gas(), _14, _20, sub(abi_encode_rational_by(add(_20, 4)), _20), _20, 128)
if iszero(_21) { revert_forward() }
let expr_component_21 := var_twapPeriod
if _21
{
finalize_allocation(_20, returndatasize())
let expr_component_22, expr_component_23, expr_component_24, expr_component_25 := abi_decode_uint32t_int56t_uint160t_bool_fromMemory(_20, add(_20, returndatasize()))
expr_component_21 := expr_component_22
}
var_oldestAvailableAge := expr_component_21
}
let _22 := and(expr_component_6, _4)
let expr_3 := eq(_22, and(expr_component_7, _4))
if expr_3 { expr_3 := lt(_22, _4) }
if expr_3
{
let expr_4 := checked_add_uint16(expr_component_6)
if iszero(extcodesize(_14))
{
revert(var_twapPeriod, var_twapPeriod)
}
let _23 := mload(_3)
mstore(_23, shl(224, 0x32148f67))
let _24 := call(gas(), _14, var_twapPeriod, _23, sub(abi_encode_uint16(add(_23, 4), expr_4), _23), _23, var_twapPeriod)
if iszero(_24) { revert_forward() }
if _24
{
finalize_allocation(_23, returndatasize())
abi_decode(_23, add(_23, returndatasize()))
}
}
let _25 := 0xffffffff
var_ago := checked_sub_uint256(timestamp(), and(var_oldestAvailableAge, _25))
write_to_memory_uint32(memory_array_index_access_uint32_dyn_12584(expr_mpos), and(var_ago, _25))
let expr_mpos_3 := mload(_3)
let _26 := add(expr_mpos_3, 0x20)
mstore(_26, _9)
let _27 := sub(abi_encode_array_uint32_dyn(add(expr_mpos_3, 36), expr_mpos), expr_mpos_3)
mstore(expr_mpos_3, add(_27, _11))
finalize_allocation(expr_mpos_3, _27)
let expr_component_26 := staticcall(gas(), expr, _26, mload(expr_mpos_3), var_twapPeriod, var_twapPeriod)
var_data_mpos := extract_returndata()
if iszero(expr_component_26)
{
fun_revertBytes(var_data_mpos)
}
}
let expr_mpos_4 := abi_decode_array_int56_dyn_fromMemory(add(var_data_mpos, 0x20), add(add(var_data_mpos, mload(var_data_mpos)), 0x20))
let _28 := read_from_memoryt_int56(memory_array_index_access_uint32_dyn_12585(expr_mpos_4))
let expr_5 := checked_sub_int56(_28, read_from_memoryt_int56(memory_array_index_access_uint32_dyn_12584(expr_mpos_4)))
let var := fun_decodeSqrtPriceX96(var_assetCache_mpos, cleanup_address(fun_getSqrtRatioAtTick(convert_int56_to_int24(checked_div_int56(expr_5, signextend(6, var_ago))))))
var_twapPeriod := var_ago
var_twap := var
}
}
default {
var_twap := 0x0de0b6b3a7640000
var_twapPeriod := and(expr_component_3, 0xffffff)
}
_1 := var_twap
_2 := var_twapPeriod
mstore(_3, var_origFreeMemPtr)
}
/// @ast-id 147
function modifier_FREEMEM_12660(var_assetCache_mpos, var_config_mpos) -> _1, _2
{
let _3 := 0x40
let var_origFreeMemPtr := mload(_3)
let var_twap := 0x00
let var_twapPeriod := var_twap
var_twap := var_twap
var_twapPeriod := 0x00
let expr_component, expr_component_1, expr_component_2, expr_component_3 := fun_resolvePricingConfig(var_assetCache_mpos, var_config_mpos)
let _4 := 0xffff
let _5 := and(expr_component_1, _4)
switch eq(_5, 0x01)
case 0 {
switch eq(_5, 0x02)
case 0 {
let _6 := mload(_3)
mstore(_6, shl(229, 4594637))
revert(_6, sub(abi_encode_stringliteral_ee51(add(_6, 4)), _6))
}
default {
let _7 := 0xffffff
let expr := fun_computeUniswapPoolAddress(expr_component, and(expr_component_2, _7))
let var_ago := and(expr_component_3, _7)
let expr_mpos := allocate_and_zero_memory_array_array_uint32_dyn()
write_to_memory_uint32(memory_array_index_access_uint32_dyn_12584(expr_mpos), var_ago)
mstore(memory_array_index_access_uint32_dyn_12585(expr_mpos), var_twapPeriod)
let expr_mpos_1 := mload(_3)
let _8 := add(expr_mpos_1, 0x20)
let _9 := shl(224, 0x883bdbfd)
mstore(_8, _9)
let _10 := sub(abi_encode_array_uint32_dyn(add(expr_mpos_1, 36), expr_mpos), expr_mpos_1)
let _11 := not(31)
mstore(expr_mpos_1, add(_10, _11))
finalize_allocation(expr_mpos_1, _10)
let expr_component_4 := staticcall(gas(), expr, _8, mload(expr_mpos_1), var_twapPeriod, var_twapPeriod)
let var_data_mpos := extract_returndata()
if iszero(expr_component_4)
{
let expr_1 := keccak256(add(var_data_mpos, 0x20), mload(var_data_mpos))
let expr_mpos_2 := mload(_3)
let _12 := add(expr_mpos_2, 0x20)
mstore(_12, shl(229, 4594637))
let _13 := sub(abi_encode_stringliteral_d30c(add(expr_mpos_2, 36)), expr_mpos_2)
mstore(expr_mpos_2, add(_13, _11))
finalize_allocation(expr_mpos_2, _13)
if iszero(eq(expr_1, keccak256(_12, mload(expr_mpos_2))))
{
fun_revertBytes(var_data_mpos)
}
let _14 := and(expr, sub(shl(160, 1), 1))
let _15 := mload(_3)
mstore(_15, shl(224, 0x3850c7bd))
let _16 := staticcall(gas(), _14, _15, 4, _15, 224)
if iszero(_16) { revert_forward() }
let expr_component_5 := var_twapPeriod
let expr_component_6 := var_twapPeriod
let expr_component_7 := var_twapPeriod
if _16
{
finalize_allocation(_15, returndatasize())
let expr_component_8, expr_component_9, expr_component_10, expr_component_11, expr_component_12, expr_component_13, expr_component_14 := abi_decode_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory(_15, add(_15, returndatasize()))
expr_component_5 := expr_component_10
expr_component_6 := expr_component_11
expr_component_7 := expr_component_12
}
let expr_2 := mod_uint16(checked_add_uint16(expr_component_5), expr_component_6)
let _17 := mload(_3)
let _18 := shl(224, 0x252c09d7)
mstore(_17, _18)
let _19 := staticcall(gas(), _14, _17, sub(abi_encode_uint16(add(_17, 4), expr_2), _17), _17, 128)
if iszero(_19) { revert_forward() }
let expr_component_15 := var_twapPeriod
let expr_component_16 := var_twapPeriod
if _19
{
finalize_allocation(_17, returndatasize())
let expr_component_17, expr_component_18, expr_component_19, expr_component_20 := abi_decode_uint32t_int56t_uint160t_bool_fromMemory(_17, add(_17, returndatasize()))
expr_component_15 := expr_component_17
expr_component_16 := expr_component_20
}
let var_oldestAvailableAge := expr_component_15
if iszero(expr_component_16)
{
let _20 := mload(_3)
mstore(_20, _18)
let _21 := staticcall(gas(), _14, _20, sub(abi_encode_rational_by(add(_20, 4)), _20), _20, 128)
if iszero(_21) { revert_forward() }
let expr_component_21 := var_twapPeriod
if _21
{
finalize_allocation(_20, returndatasize())
let expr_component_22, expr_component_23, expr_component_24, expr_component_25 := abi_decode_uint32t_int56t_uint160t_bool_fromMemory(_20, add(_20, returndatasize()))
expr_component_21 := expr_component_22
}
var_oldestAvailableAge := expr_component_21
}
let _22 := and(expr_component_6, _4)
let expr_3 := eq(_22, and(expr_component_7, _4))
if expr_3 { expr_3 := lt(_22, _4) }
if expr_3
{
let expr_4 := checked_add_uint16(expr_component_6)
if iszero(extcodesize(_14))
{
revert(var_twapPeriod, var_twapPeriod)
}
let _23 := mload(_3)
mstore(_23, shl(224, 0x32148f67))
let _24 := call(gas(), _14, var_twapPeriod, _23, sub(abi_encode_uint16(add(_23, 4), expr_4), _23), _23, var_twapPeriod)
if iszero(_24) { revert_forward() }
if _24
{
finalize_allocation(_23, returndatasize())
abi_decode(_23, add(_23, returndatasize()))
}
}
let _25 := 0xffffffff
var_ago := checked_sub_uint256(timestamp(), and(var_oldestAvailableAge, _25))
write_to_memory_uint32(memory_array_index_access_uint32_dyn_12584(expr_mpos), and(var_ago, _25))
let expr_mpos_3 := mload(_3)
let _26 := add(expr_mpos_3, 0x20)
mstore(_26, _9)
let _27 := sub(abi_encode_array_uint32_dyn(add(expr_mpos_3, 36), expr_mpos), expr_mpos_3)
mstore(expr_mpos_3, add(_27, _11))
finalize_allocation(expr_mpos_3, _27)
let expr_component_26 := staticcall(gas(), expr, _26, mload(expr_mpos_3), var_twapPeriod, var_twapPeriod)
var_data_mpos := extract_returndata()
if iszero(expr_component_26)
{
fun_revertBytes(var_data_mpos)
}
}
let expr_mpos_4 := abi_decode_array_int56_dyn_fromMemory(add(var_data_mpos, 0x20), add(add(var_data_mpos, mload(var_data_mpos)), 0x20))
let _28 := read_from_memoryt_int56(memory_array_index_access_uint32_dyn_12585(expr_mpos_4))
let expr_5 := checked_sub_int56(_28, read_from_memoryt_int56(memory_array_index_access_uint32_dyn_12584(expr_mpos_4)))
let var := fun_decodeSqrtPriceX96(var_assetCache_mpos, cleanup_address(fun_getSqrtRatioAtTick(convert_int56_to_int24(checked_div_int56(expr_5, signextend(6, var_ago))))))
var_twapPeriod := var_ago
var_twap := var
}
}
default {
var_twap := 0x0de0b6b3a7640000
var_twapPeriod := and(expr_component_3, 0xffffff)
}
_1 := var_twap
_2 := var_twapPeriod
mstore(_3, var_origFreeMemPtr)
}
function abi_encode_stringliteral_ee51(headStart) -> tail
{
mstore(headStart, 32)
mstore(add(headStart, 32), 22)
mstore(add(headStart, 64), "e/unknown-pricing-type")
tail := add(headStart, 96)
}
function array_allocation_size_array_uint32_dyn(length) -> size
{
if gt(length, 0xffffffffffffffff) { panic_error_0x41() }
size := add(shl(5, length), 0x20)
}
function allocate_and_zero_memory_array_array_uint32_dyn() -> memPtr
{
let memPtr_1 := mload(64)
finalize_allocation_22852(memPtr_1)
mstore(memPtr_1, 0x02)
memPtr := memPtr_1
calldatacopy(add(memPtr_1, 0x20), calldatasize(), 64)
}
function memory_array_index_access_uint32_dyn_12584(baseRef) -> addr
{
if iszero(mload(baseRef)) { panic_error_0x32() }
addr := add(baseRef, 32)
}
function memory_array_index_access_uint32_dyn_12585(baseRef) -> addr
{
if iszero(lt(0x01, mload(baseRef))) { panic_error_0x32() }
addr := add(baseRef, 64)
}
function memory_array_index_access_uint32_dyn(baseRef, index) -> addr
{
if iszero(lt(index, mload(baseRef))) { panic_error_0x32() }
addr := add(add(baseRef, shl(5, index)), 32)
}
function abi_encode_array_uint32_dyn(headStart, value0) -> tail
{
let _1 := 32
let tail_1 := add(headStart, _1)
mstore(headStart, _1)
let pos := tail_1
let length := mload(value0)
mstore(tail_1, length)
pos := add(headStart, 64)
let srcPtr := add(value0, _1)
let i := 0
for { } lt(i, length) { i := add(i, 1) }
{
mstore(pos, and(mload(srcPtr), 0xffffffff))
pos := add(pos, _1)
srcPtr := add(srcPtr, _1)
}
tail := pos
}
function abi_encode_stringliteral_d30c(headStart) -> tail
{
mstore(headStart, 32)
mstore(add(headStart, 32), 3)
mstore(add(headStart, 64), "OLD")
tail := add(headStart, 96)
}
function abi_decode_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6
{
if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }
let value := mload(headStart)
validator_revert_address(value)
value0 := value
let value_1 := mload(add(headStart, 32))
if iszero(eq(value_1, signextend(2, value_1))) { revert(0, 0) }
value1 := value_1
let value_2 := mload(add(headStart, 64))
validator_revert_uint16(value_2)
value2 := value_2
let value_3 := mload(add(headStart, 96))
validator_revert_uint16(value_3)
value3 := value_3
let value_4 := mload(add(headStart, 128))
validator_revert_uint16(value_4)
value4 := value_4
let value_5 := mload(add(headStart, 160))
validator_revert_uint8(value_5)
value5 := value_5
let value_6 := mload(add(headStart, 192))
validator_revert_bool(value_6)
value6 := value_6
}
function checked_add_uint16(x) -> sum
{
let x_1 := and(x, 0xffff)
if gt(x_1, 65534) { panic_error_0x11() }
sum := add(x_1, 1)
}
function panic_error_0x12()
{
mstore(0, shl(224, 0x4e487b71))
mstore(4, 0x12)
revert(0, 0x24)
}
function mod_uint16(x, y) -> r
{
let _1 := 0xffff
let y_1 := and(y, _1)
if iszero(y_1) { panic_error_0x12() }
r := mod(and(x, _1), y_1)
}
function abi_decode_int56_fromMemory(offset) -> value
{
value := mload(offset)
if iszero(eq(value, signextend(6, value))) { revert(0, 0) }
}
function abi_decode_uint32t_int56t_uint160t_bool_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3
{
if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }
let value := mload(headStart)
validator_revert_uint32(value)
value0 := value
value1 := abi_decode_int56_fromMemory(add(headStart, 32))
let value_1 := mload(add(headStart, 64))
validator_revert_address(value_1)
value2 := value_1
let value_2 := mload(add(headStart, 96))
validator_revert_bool(value_2)
value3 := value_2
}
function abi_encode_rational_by(headStart) -> tail
{
tail := add(headStart, 32)
mstore(headStart, 0)
}
function checked_sub_uint256(x, y) -> diff
{
if lt(x, y) { panic_error_0x11() }
diff := sub(x, y)
}
function abi_decode_array_int56_dyn_fromMemory(headStart, dataEnd) -> value0
{
let _1 := 32
if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }
let offset := mload(headStart)
if gt(offset, 0xffffffffffffffff) { revert(0, 0) }
let _2 := add(headStart, offset)
if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }
let _3 := mload(_2)
let _4 := array_allocation_size_array_uint32_dyn(_3)
let memPtr := mload(64)
finalize_allocation(memPtr, _4)
let dst := memPtr
mstore(memPtr, _3)
dst := add(memPtr, _1)
let srcEnd := add(add(_2, shl(5, _3)), _1)
if gt(srcEnd, dataEnd) { revert(0, 0) }
let src := add(_2, _1)
for { } lt(src, srcEnd) { src := add(src, _1) }
{
mstore(dst, abi_decode_int56_fromMemory(src))
dst := add(dst, _1)
}
value0 := memPtr
}
function read_from_memoryt_int56(ptr) -> returnValue
{
returnValue := signextend(6, mload(ptr))
}
function checked_sub_int56(x, y) -> diff
{
let x_1 := signextend(6, x)
let y_1 := signextend(6, y)
let _1 := slt(y_1, 0)
if and(iszero(_1), slt(x_1, add(not(0x7fffffffffffff), y_1))) { panic_error_0x11() }
if and(_1, sgt(x_1, add(0x7fffffffffffff, y_1))) { panic_error_0x11() }
diff := sub(x_1, y_1)
}
function checked_div_int56(x, y) -> r
{
let x_1 := signextend(6, x)
let y_1 := signextend(6, y)
if iszero(y_1) { panic_error_0x12() }
if and(eq(x_1, not(0x7fffffffffffff)), eq(y_1, not(0))) { panic_error_0x11() }
r := sdiv(x_1, y_1)
}
function convert_int56_to_int24(value) -> converted
{
converted := signextend(2, value)
}
function read_from_memoryt_address(ptr) -> returnValue
{
returnValue := and(mload(ptr), sub(shl(160, 1), 1))
}
function checked_mul_uint256_12666(x) -> product
{
let _1 := 0xee6b2800
if and(iszero(iszero(x)), gt(_1, div(not(0), x))) { panic_error_0x11() }
product := mul(x, _1)
}
function checked_mul_uint256(x, y) -> product
{
if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }
product := mul(x, y)
}
function checked_div_uint256_12624(y) -> r
{
if iszero(y) { panic_error_0x12() }
r := div(shl(192, 1), y)
}
function checked_div_uint256_12625(y) -> r
{
if iszero(y) { panic_error_0x12() }
r := div(0xc097ce7bc90715b34b9f1000000000, y)
}
function checked_div_uint256_12645(y) -> r
{
if iszero(y) { panic_error_0x12() }
r := div(0xffffffffffffffffffffffffffff, y)
}
function checked_div_uint256_12649(x) -> r
{
r := div(x, 0x033b2e3c9fd0803ce8000000)
}
function checked_div_uint256_12661(x) -> r
{
r := div(x, 0x0de0b6b3a7640000)
}
function checked_div_uint256_12662(x) -> r
{ r := div(x, 0xee6b2800) }
function checked_div_uint256_12692(y) -> r
{
if iszero(y) { panic_error_0x12() }
r := div(not(0), y)
}
function checked_div_uint256_22855(x) -> r
{
r := div(x, 0x3782dace9d900000)
}
function checked_div_uint256(x, y) -> r
{
if iszero(y) { panic_error_0x12() }
r := div(x, y)
}
/// @ast-id 10755
function fun_decodeSqrtPriceX96(var_assetCache_10661_mpos, var_sqrtPriceX96) -> var_price
{
let _1 := sub(shl(160, 1), 1)
let _2 := and(mload(var_assetCache_10661_mpos), _1)
switch lt(_2, and(loadimmutable("10268"), _1))
case 0 {
let _3 := mload(add(var_assetCache_10661_mpos, 416))
if and(1, gt(_3, 0x12725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f21)) { panic_error_0x11() }
var_price := fun_mulDiv(var_sqrtPriceX96, var_sqrtPriceX96, checked_div_uint256_12624(mul(0x0de0b6b3a7640000, _3)))
if iszero(var_price)
{
var_price := 0xc097ce7bc90715b34b9f1000000000
leave
}
var_price := checked_div_uint256_12625(var_price)
}
default {
let expr := fun_mulDiv_22854(var_sqrtPriceX96, var_sqrtPriceX96)
var_price := checked_div_uint256(expr, mload(add(var_assetCache_10661_mpos, 416)))
}
let _4 := 0xc097ce7bc90715b34b9f1000000000
switch gt(var_price, _4)
case 0 {
if iszero(var_price) { var_price := 1 }
}
default { var_price := _4 }
}
function require_helper_stringliteral_e566(condition)
{
if iszero(condition)
{
let memPtr := mload(64)
mstore(memPtr, shl(229, 4594637))
mstore(add(memPtr, 4), 32)
mstore(add(memPtr, 36), 25)
mstore(add(memPtr, 68), "e/nested-price-forwarding")
revert(memPtr, 100)
}
}
/// @ast-id 11067
function fun_resolvePricingConfig(var_assetCache_10981_mpos, var_config_10984_mpos) -> var_underlying, var_pricingType, var_pricingParameters, var_twapWindow
{
let _1 := 0xffff
let cleaned := and(mload(add(var_assetCache_10981_mpos, 320)), _1)
switch eq(cleaned, 0x03)
case 0 {
var_underlying := and(mload(var_assetCache_10981_mpos), sub(shl(160, 1), 1))
var_pricingType := cleaned
var_pricingParameters := and(mload(add(var_assetCache_10981_mpos, 352)), 0xffffffff)
var_twapWindow := and(mload(add(var_config_10984_mpos, 128)), 0xffffff)
}
default {
var_underlying := read_from_storage_split_offset_address(mapping_index_access_mapping_address_address_of_address_12569(cleanup_address(mload(var_assetCache_10981_mpos))))
let expr_11011_mpos := fun_resolveAssetConfig(var_underlying)
var_twapWindow := cleanup_uint24(mload(add(expr_11011_mpos, 128)))
let _2 := sload(mapping_index_access_mapping_address_address_of_address_12628(cleanup_address(mload(expr_11011_mpos))))
var_pricingType := and(shr(208, _2), _1)
var_pricingParameters := shr(224, _2)
require_helper_stringliteral_e566(iszero(eq(var_pricingType, 0x03)))
}
}
function write_to_memory_address(memPtr, value)
{
mstore(memPtr, and(value, sub(shl(160, 1), 1)))
}
function require_helper_stringliteral(condition)
{
if iszero(condition)
{
let memPtr := mload(64)
mstore(memPtr, shl(229, 4594637))
mstore(add(memPtr, 4), 32)
mstore(add(memPtr, 36), 22)
mstore(add(memPtr, 68), "e/market-not-activated")
revert(memPtr, 100)
}
}
/// @ast-id 878
function fun_resolveAssetConfig(var_underlying) -> var_825_mpos
{
pop(allocate_and_zero_memory_struct_struct_AssetConfig())
let _1 := sub(shl(160, 1), 1)
mstore(0, and(var_underlying, _1))
mstore(0x20, 0x08)
let _2 := keccak256(0, 0x40)
let memPtr := mload(0x40)
finalize_allocation_12563(memPtr)
let _3 := sload(_2)
let _4 := and(_3, _1)
mstore(memPtr, _4)
mstore(add(memPtr, 0x20), iszero(iszero(and(shr(160, _3), 0xff))))
let _5 := 0xffffffff
mstore(add(memPtr, 0x40), and(shr(168, _3), _5))
let _6 := add(memPtr, 96)
mstore(_6, and(shr(200, _3), _5))
let _7 := add(memPtr, 128)
mstore(_7, shr(232, _3))
require_helper_stringliteral(iszero(iszero(_4)))
if eq(and(cleanup_uint32(mload(_6)), _5), _5)
{
write_to_memory_uint32_12631(_6)
}
let _8 := 0xffffff
if eq(and(cleanup_uint24(mload(_7)), _8), _8) { write_to_memory_uint24(_7) }
var_825_mpos := memPtr
}
/// @ast-id 11182
function fun_getPrice(var_underlying) -> var_twap, var_twapPeriod
{
let expr_11154_mpos := fun_resolveAssetConfig(var_underlying)
let _1 := sub(shl(160, 1), 1)
let _2 := and(mload(expr_11154_mpos), _1)
let _3 := 0
mstore(_3, _2)
let _4 := 0x20
mstore(_4, 0x09)
let _5 := 0x40
let _6 := fun_loadAssetCache(var_underlying, keccak256(_3, _5))
let var_origFreeMemPtr := mload(_5)
let var_twap_1 := _3
let var_twapPeriod_1 := _3
var_twap_1 := _3
var_twapPeriod_1 := _3
let expr_component, expr_component_1, expr_component_2, expr_component_3 := fun_resolvePricingConfig(_6, expr_11154_mpos)
let _7 := 0xffff
let _8 := and(expr_component_1, _7)
switch eq(_8, 1)
case 0 {
switch eq(_8, 0x02)
case 0 {
let _9 := mload(_5)
mstore(_9, shl(229, 4594637))
revert(_9, sub(abi_encode_stringliteral_ee51(add(_9, 4)), _9))
}
default {
let _10 := 0xffffff
let expr := fun_computeUniswapPoolAddress(expr_component, and(expr_component_2, _10))
let var_ago := and(expr_component_3, _10)
let expr_mpos := allocate_and_zero_memory_array_array_uint32_dyn()
write_to_memory_uint32(memory_array_index_access_uint32_dyn_12584(expr_mpos), var_ago)
mstore(memory_array_index_access_uint32_dyn_12585(expr_mpos), _3)
let expr_mpos_1 := mload(_5)
let _11 := add(expr_mpos_1, _4)
let _12 := shl(224, 0x883bdbfd)
mstore(_11, _12)
let _13 := sub(abi_encode_array_uint32_dyn(add(expr_mpos_1, 36), expr_mpos), expr_mpos_1)
let _14 := not(31)
mstore(expr_mpos_1, add(_13, _14))
finalize_allocation(expr_mpos_1, _13)
let expr_component_4 := staticcall(gas(), expr, _11, mload(expr_mpos_1), _3, _3)
let var_data_mpos := extract_returndata()
if iszero(expr_component_4)
{
let expr_1 := keccak256(add(var_data_mpos, _4), mload(var_data_mpos))
let expr_mpos_2 := mload(_5)
let _15 := add(expr_mpos_2, _4)
mstore(_15, shl(229, 4594637))
let _16 := sub(abi_encode_stringliteral_d30c(add(expr_mpos_2, 36)), expr_mpos_2)
mstore(expr_mpos_2, add(_16, _14))
finalize_allocation(expr_mpos_2, _16)
if iszero(eq(expr_1, keccak256(_15, mload(expr_mpos_2))))
{
fun_revertBytes(var_data_mpos)
}
let _17 := and(expr, _1)
let _18 := mload(_5)
mstore(_18, shl(224, 0x3850c7bd))
let _19 := staticcall(gas(), _17, _18, 4, _18, 224)
if iszero(_19) { revert_forward() }
let expr_component_5 := _3
let expr_component_6 := _3
let expr_component_7 := _3
if _19
{
finalize_allocation(_18, returndatasize())
let expr_component_8, expr_component_9, expr_component_10, expr_component_11, expr_component_12, expr_component_13, expr_component_14 := abi_decode_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory(_18, add(_18, returndatasize()))
expr_component_5 := expr_component_10
expr_component_6 := expr_component_11
expr_component_7 := expr_component_12
}
let expr_2 := mod_uint16(checked_add_uint16(expr_component_5), expr_component_6)
let _20 := mload(_5)
let _21 := shl(224, 0x252c09d7)
mstore(_20, _21)
let _22 := staticcall(gas(), _17, _20, sub(abi_encode_uint16(add(_20, 4), expr_2), _20), _20, 128)
if iszero(_22) { revert_forward() }
let expr_component_15 := _3
let expr_component_16 := _3
if _22
{
finalize_allocation(_20, returndatasize())
let expr_component_17, expr_component_18, expr_component_19, expr_component_20 := abi_decode_uint32t_int56t_uint160t_bool_fromMemory(_20, add(_20, returndatasize()))
expr_component_15 := expr_component_17
expr_component_16 := expr_component_20
}
let var_oldestAvailableAge := expr_component_15
if iszero(expr_component_16)
{
let _23 := mload(_5)
mstore(_23, _21)
let _24 := staticcall(gas(), _17, _23, sub(abi_encode_rational_by(add(_23, 4)), _23), _23, 128)
if iszero(_24) { revert_forward() }
let expr_component_21 := _3
if _24
{
finalize_allocation(_23, returndatasize())
let expr_component_22, expr_component_23, expr_component_24, expr_component_25 := abi_decode_uint32t_int56t_uint160t_bool_fromMemory(_23, add(_23, returndatasize()))
expr_component_21 := expr_component_22
}
var_oldestAvailableAge := expr_component_21
}
let _25 := and(expr_component_6, _7)
let expr_3 := eq(_25, and(expr_component_7, _7))
if expr_3 { expr_3 := lt(_25, _7) }
if expr_3
{
let expr_4 := checked_add_uint16(expr_component_6)
if iszero(extcodesize(_17)) { revert(_3, _3) }
let _26 := mload(_5)
mstore(_26, shl(224, 0x32148f67))
let _27 := call(gas(), _17, _3, _26, sub(abi_encode_uint16(add(_26, 4), expr_4), _26), _26, _3)
if iszero(_27) { revert_forward() }
if _27
{
finalize_allocation(_26, returndatasize())
abi_decode(_26, add(_26, returndatasize()))
}
}
let _28 := 0xffffffff
var_ago := checked_sub_uint256(timestamp(), and(var_oldestAvailableAge, _28))
write_to_memory_uint32(memory_array_index_access_uint32_dyn_12584(expr_mpos), and(var_ago, _28))
let expr_mpos_3 := mload(_5)
let _29 := add(expr_mpos_3, _4)
mstore(_29, _12)
let _30 := sub(abi_encode_array_uint32_dyn(add(expr_mpos_3, 36), expr_mpos), expr_mpos_3)
mstore(expr_mpos_3, add(_30, _14))
finalize_allocation(expr_mpos_3, _30)
let expr_component_26 := staticcall(gas(), expr, _29, mload(expr_mpos_3), _3, _3)
var_data_mpos := extract_returndata()
if iszero(expr_component_26)
{
fun_revertBytes(var_data_mpos)
}
}
let expr_mpos_4 := abi_decode_array_int56_dyn_fromMemory(add(var_data_mpos, _4), add(add(var_data_mpos, mload(var_data_mpos)), _4))
let _31 := read_from_memoryt_int56(memory_array_index_access_uint32_dyn_12585(expr_mpos_4))
let expr_5 := checked_sub_int56(_31, read_from_memoryt_int56(memory_array_index_access_uint32_dyn_12584(expr_mpos_4)))
let var := fun_decodeSqrtPriceX96(_6, cleanup_address(fun_getSqrtRatioAtTick(convert_int56_to_int24(checked_div_int56(expr_5, signextend(6, var_ago))))))
var_twapPeriod_1 := var_ago
var_twap_1 := var
}
}
default {
var_twap_1 := 0x0de0b6b3a7640000
var_twapPeriod_1 := and(expr_component_3, 0xffffff)
}
mstore(_5, var_origFreeMemPtr)
var_twapPeriod := var_twapPeriod_1
var_twap := var_twap_1
}
function allocate_and_zero_memory_struct_struct_AssetCache() -> memPtr
{
let memPtr_1 := mload(64)
let newFreePtr := add(memPtr_1, 480)
if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr_1)) { panic_error_0x41() }
mstore(64, newFreePtr)
memPtr := memPtr_1
let _1 := 0
mstore(memPtr_1, _1)
mstore(add(memPtr_1, 32), _1)
mstore(add(memPtr_1, 64), _1)
mstore(add(memPtr_1, 96), _1)
mstore(add(memPtr_1, 128), _1)
mstore(add(memPtr_1, 160), _1)
mstore(add(memPtr_1, 192), _1)
mstore(add(memPtr_1, 224), _1)
mstore(add(memPtr_1, 256), _1)
mstore(add(memPtr_1, 288), _1)
mstore(add(memPtr_1, 320), _1)
mstore(add(memPtr_1, 352), _1)
mstore(add(memPtr_1, 384), _1)
mstore(add(memPtr_1, 416), _1)
mstore(add(memPtr_1, 448), _1)
}
function update_storage_value_offsett_uint96_to_uint96(slot, value)
{
let _1 := sload(slot)
sstore(slot, or(and(_1, sub(shl(160, 1), 1)), and(shl(160, value), shl(160, 0xffffffffffffffffffffffff))))
}
function update_storage_value_offsett_uint112_to_uint112(slot, value)
{
sstore(slot, or(and(sload(slot), not(0xffffffffffffffffffffffffffff)), and(value, 0xffffffffffffffffffffffffffff)))
}
function update_storage_value_offsett_uint144_to_uint144(slot, value)
{
let _1 := sload(slot)
sstore(slot, or(and(_1, 0xffffffffffffffffffffffffffff), and(shl(112, value), not(0xffffffffffffffffffffffffffff))))
}
/// @ast-id 1304
function fun_loadAssetCache(var_underlying, var_assetStorage_1248_slot) -> var_assetCache_1252_mpos
{
var_assetCache_1252_mpos := allocate_and_zero_memory_struct_struct_AssetCache()
if fun_initAssetCache(var_underlying, var_assetStorage_1248_slot, var_assetCache_1252_mpos)
{
sstore(var_assetStorage_1248_slot, or(and(sload(var_assetStorage_1248_slot), not(0xffffffffff)), and(mload(add(var_assetCache_1252_mpos, 160)), 0xffffffffff)))
let cleaned := and(mload(var_assetCache_1252_mpos), sub(shl(160, 1), 1))
let _1 := add(var_assetStorage_1248_slot, 1)
sstore(_1, or(and(sload(_1), shl(160, 0xffffffffffffffffffffffff)), cleaned))
update_storage_value_offsett_uint96_to_uint96(_1, cleanup_uint96(mload(add(var_assetCache_1252_mpos, 96))))
let _2 := cleanup_uint112(mload(add(var_assetCache_1252_mpos, 32)))
let _3 := add(var_assetStorage_1248_slot, 3)
update_storage_value_offsett_uint112_to_uint112(_3, _2)
update_storage_value_offsett_uint144_to_uint144(_3, cleanup_uint144(mload(add(var_assetCache_1252_mpos, 64))))
sstore(add(var_assetStorage_1248_slot, 4), mload(add(var_assetCache_1252_mpos, 128)))
}
}
function write_to_memory_uint40(memPtr, value)
{
mstore(memPtr, and(value, 0xffffffffff))
}
function write_to_memory_uint8(memPtr, value)
{
mstore(memPtr, and(value, 0xff))
}
function write_to_memory_int96(memPtr, value)
{
mstore(memPtr, signextend(11, value))
}
function extract_from_storage_value_offsett_uint96(slot_value) -> value
{ value := shr(160, slot_value) }
function write_to_memory_uint96(memPtr, value)
{
mstore(memPtr, and(value, 0xffffffffffffffffffffffff))
}
function read_from_storage_split_offset_uint112(slot) -> value
{
value := and(sload(slot), 0xffffffffffffffffffffffffffff)
}
function write_to_memory_uint112(memPtr, value)
{
mstore(memPtr, and(value, 0xffffffffffffffffffffffffffff))
}
function read_from_storage_split_offset_uint144(slot) -> value
{
value := shr(112, sload(slot))
}
function write_to_memory_uint144(memPtr, value)
{
mstore(memPtr, and(value, 0xffffffffffffffffffffffffffffffffffff))
}
function checked_add_int256(x) -> sum
{
let _1 := slt(x, 0)
let _2 := 0x033b2e3c9fd0803ce8000000
if and(iszero(_1), sgt(_2, sub(sub(shl(255, 1), 1), x))) { panic_error_0x11() }
if and(_1, slt(_2, sub(shl(255, 1), x))) { panic_error_0x11() }
sum := add(x, _2)
}
function checked_add_uint256(x, y) -> sum
{
if gt(x, not(y)) { panic_error_0x11() }
sum := add(x, y)
}
/// @ast-id 1243
function fun_initAssetCache(var_underlying, var_assetStorage_slot, var_assetCache_917_mpos) -> var_dirty
{
var_dirty := 0x00
write_to_memory_address(var_assetCache_917_mpos, var_underlying)
let _1 := sload(var_assetStorage_slot)
let _2 := add(var_assetCache_917_mpos, 160)
let _3 := 0xffffffffff
write_to_memory_uint40(_2, and(_1, _3))
let _4 := and(shr(40, _1), 0xff)
write_to_memory_uint8(add(var_assetCache_917_mpos, 192), _4)
let _5 := 0xffffffff
write_to_memory_uint32(add(var_assetCache_917_mpos, 224), and(shr(48, _1), _5))
let _6 := add(var_assetCache_917_mpos, 256)
write_to_memory_int96(_6, signextend(11, shr(80, _1)))
let _7 := add(var_assetCache_917_mpos, 288)
write_to_memory_uint32(_7, and(shr(176, _1), _5))
write_to_memory_uint16(add(var_assetCache_917_mpos, 320), and(shr(208, _1), 0xffff))
write_to_memory_uint32(add(var_assetCache_917_mpos, 352), shr(224, _1))
let _8 := extract_from_storage_value_offsett_uint96(sload(add(var_assetStorage_slot, 1)))
let _9 := add(var_assetCache_917_mpos, 96)
write_to_memory_uint96(_9, _8)
let _10 := sload(add(var_assetStorage_slot, 3))
let _11 := add(var_assetCache_917_mpos, 32)
let _12 := 0xffffffffffffffffffffffffffff
write_to_memory_uint112(_11, and(_10, _12))
let _13 := add(var_assetCache_917_mpos, 64)
write_to_memory_uint144(_13, shr(112, _10))
let _14 := sload(add(var_assetStorage_slot, 4))
let _15 := add(var_assetCache_917_mpos, 128)
mstore(_15, _14)
let expr := exp(0x0a, and(sub(0x12, _4), 0xff))
let _16 := add(var_assetCache_917_mpos, 416)
mstore(_16, expr)
let expr_1 := checked_div_uint256_12645(expr)
let _17 := add(var_assetCache_917_mpos, 448)
mstore(_17, expr_1)
let expr_2 := modifier_FREEMEM_12646(var_assetCache_917_mpos, address())
switch iszero(gt(expr_2, mload(_17)))
case 0 {
mstore(add(var_assetCache_917_mpos, 384), 0x00)
}
default {
mstore(add(var_assetCache_917_mpos, 384), mul(expr_2, mload(_16)))
}
let _18 := cleanup_uint40(cleanup_uint40(mload(_2)))
if iszero(eq(timestamp(), _18))
{
var_dirty := 1
let expr_3 := fun_rpow(checked_add_int256(cleanup_int96(cleanup_int96(mload(_6)))), checked_sub_uint256(timestamp(), _18))
let expr_4 := checked_div_uint256_12649(checked_mul_uint256(expr_3, mload(_15)))
let expr_5 := checked_mul_uint256(cleanup_uint144(cleanup_uint144(mload(_13))), expr_4)
let expr_6 := checked_div_uint256(expr_5, mload(_15))
let var_newReserveBalance := cleanup_uint96(cleanup_uint96(mload(_9)))
let var_newTotalBalances := cleanup_uint112(cleanup_uint112(mload(_11)))
let expr_7 := checked_sub_uint256(expr_6, cleanup_uint144(cleanup_uint144(mload(_13))))
let _19 := cleanup_uint32(mload(_7))
let expr_8 := 0x00
switch eq(and(_19, _5), _5)
case 0 { expr_8 := _19 }
default { expr_8 := 0x36d61600 }
let expr_9 := checked_div_uint256_22855(checked_mul_uint256(expr_7, and(expr_8, _5)))
if iszero(iszero(expr_9))
{
let _20 := mload(add(var_assetCache_917_mpos, 384))
let expr_10 := checked_add_uint256(_20, div(expr_6, 0x3b9aca00))
let expr_11 := checked_mul_uint256(expr_10, var_newTotalBalances)
var_newTotalBalances := checked_div_uint256(expr_11, checked_sub_uint256(expr_10, expr_9))
var_newReserveBalance := checked_add_uint256(var_newReserveBalance, checked_sub_uint256(var_newTotalBalances, cleanup_uint112(cleanup_uint112(mload(_11)))))
}
let expr_12 := iszero(gt(var_newTotalBalances, _12))
if expr_12
{
expr_12 := iszero(gt(expr_6, 0xffffffffffffffffffffffffffffffffffff))
}
if expr_12
{
write_to_memory_uint144(_13, fun_encodeDebtAmount(expr_6))
mstore(_15, expr_4)
write_to_memory_uint40(_2, and(timestamp(), _3))
if iszero(eq(var_newTotalBalances, cleanup_uint112(cleanup_uint112(mload(_11)))))
{
write_to_memory_uint96(_9, fun_encodeSmallAmount(var_newReserveBalance))
write_to_memory_uint112(_11, fun_encodeAmount(var_newTotalBalances))
}
}
}
}
/// @ast-id 1369
function fun_encodeAmount(var_amount) -> var
{
let _1 := 0xffffffffffffffffffffffffffff
if gt(var_amount, _1)
{
let memPtr := mload(64)
mstore(memPtr, shl(229, 4594637))
mstore(add(memPtr, 4), 32)
mstore(add(memPtr, 36), 28)
mstore(add(memPtr, 68), "e/amount-too-large-to-encode")
revert(memPtr, 100)
}
var := and(var_amount, _1)
}
/// @ast-id 1389
function fun_encodeSmallAmount(var_amount) -> var
{
let _1 := 0xffffffffffffffffffffffff
if gt(var_amount, _1)
{
let memPtr := mload(64)
mstore(memPtr, shl(229, 4594637))
mstore(add(memPtr, 4), 32)
mstore(add(memPtr, 36), 34)
mstore(add(memPtr, 68), "e/small-amount-too-large-to-enco")
mstore(add(memPtr, 100), "de")
revert(memPtr, 132)
}
var := and(var_amount, _1)
}
/// @ast-id 1409
function fun_encodeDebtAmount(var_amount) -> var
{
let _1 := 0xffffffffffffffffffffffffffffffffffff
if gt(var_amount, _1)
{
let memPtr := mload(64)
mstore(memPtr, shl(229, 4594637))
mstore(add(memPtr, 4), 32)
mstore(add(memPtr, 36), 33)
mstore(add(memPtr, 68), "e/debt-amount-too-large-to-encod")
mstore(add(memPtr, 100), "e")
revert(memPtr, 132)
}
var := and(var_amount, _1)
}
/// @ast-id 147
function modifier_FREEMEM_12646(var_assetCache_mpos, var_account) -> _1
{
let var_origFreeMemPtr := mload(0x40)
_1 := fun_callBalanceOf_inner(var_assetCache_mpos, var_account)
mstore(0x40, var_origFreeMemPtr)
}
function fun_callBalanceOf_inner(var_assetCache_mpos, var_account) -> var
{
let _1 := sub(shl(160, 1), 1)
let cleaned := and(mload(var_assetCache_mpos), _1)
let expr_1542_mpos := mload(64)
let _2 := add(expr_1542_mpos, 0x20)
mstore(_2, shl(224, 0x70a08231))
mstore(add(expr_1542_mpos, 36), and(var_account, _1))
mstore(expr_1542_mpos, 36)
finalize_allocation_22852(expr_1542_mpos)
let expr_1543_component := staticcall(0x4e20, cleaned, _2, mload(expr_1542_mpos), 0, 0)
let expr_component_mpos := extract_returndata()
let expr := iszero(expr_1543_component)
if iszero(expr)
{
expr := lt(mload(expr_component_mpos), 0x20)
}
if expr
{
var := 0
leave
}
if slt(sub(add(expr_component_mpos, mload(expr_component_mpos)), expr_component_mpos), 0x20) { revert(0, 0) }
var := mload(add(expr_component_mpos, 0x20))
}
/// @ast-id 11294
function fun_getPriceFull(var_underlying) -> var_twap, var_twapPeriod, var_currPrice
{
var_currPrice := 0
let expr_11199_mpos := fun_resolveAssetConfig(var_underlying)
let _1 := mapping_index_access_mapping_address_address_of_address_12628(cleanup_address(mload(expr_11199_mpos)))
let expr_11215_mpos := fun_loadAssetCache(var_underlying, _1)
let var_twap_1, var_twapPeriod_1 := modifier_FREEMEM(expr_11215_mpos, expr_11199_mpos)
var_twapPeriod := var_twapPeriod_1
var_twap := var_twap_1
let expr_11235_component, expr_component, expr_component_1, expr_component_2 := fun_resolvePricingConfig(expr_11215_mpos, expr_11199_mpos)
let _2 := and(expr_component, 0xffff)
switch eq(_2, 0x01)
case 0 {
let expr := eq(_2, 0x02)
if iszero(expr) { expr := eq(_2, 0x03) }
switch expr
case 0 {
let _3 := mload(64)
mstore(_3, shl(229, 4594637))
revert(_3, sub(abi_encode_stringliteral_ee51(add(_3, 4)), _3))
}
default {
let expr_11258_mpos := fun_loadAssetCache(expr_11235_component, _1)
let expr_address := cleanup_address(cleanup_address(fun_computeUniswapPoolAddress(expr_11235_component, and(expr_component_1, 0xffffff))))
let _4 := mload(64)
mstore(_4, shl(224, 0x3850c7bd))
let _5 := staticcall(gas(), expr_address, _4, 4, _4, 224)
if iszero(_5) { revert_forward() }
let expr_component_3 := 0
if _5
{
finalize_allocation(_4, returndatasize())
let expr_component_4, expr_component_5, expr_component_6, expr_component_7, expr_component_8, expr_component_9, expr_component_10 := abi_decode_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory(_4, add(_4, returndatasize()))
expr_component_3 := expr_component_4
}
var_currPrice := fun_decodeSqrtPriceX96(expr_11258_mpos, and(expr_component_3, sub(shl(160, 1), 1)))
}
}
default {
var_currPrice := 0x0de0b6b3a7640000
}
}
function allocate_and_zero_memory_struct_struct_LiquidityStatus() -> memPtr
{
let memPtr_1 := mload(64)
let newFreePtr := add(memPtr_1, 128)
if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr_1)) { panic_error_0x41() }
mstore(64, newFreePtr)
memPtr := memPtr_1
mstore(memPtr_1, 0)
mstore(add(memPtr_1, 32), 0)
mstore(add(memPtr_1, 64), 0)
mstore(add(memPtr_1, 96), 0)
}
/// @ast-id 11550
function fun_computeLiquidity(var_account) -> var__mpos
{
pop(allocate_and_zero_memory_struct_struct_LiquidityStatus())
var__mpos := fun_computeLiquidityRaw(var_account, fun_getEnteredMarketsArray(var_account))
}
function allocate_and_zero_memory_array_array_address_dyn() -> memPtr
{
let memPtr_1 := mload(64)
finalize_allocation_12670(memPtr_1)
mstore(memPtr_1, 0x01)
memPtr := memPtr_1
calldatacopy(add(memPtr_1, 0x20), calldatasize(), 0x20)
}
function storage_array_index_access_address_ptr(array, index) -> slot, offset
{
if iszero(lt(index, 0x0100000000)) { panic_error_0x32() }
slot := add(array, index)
offset := 0
}
function extract_from_storage_value_dynamict_address(slot_value, offset) -> value
{
value := and(shr(shl(3, offset), slot_value), sub(shl(160, 1), 1))
}
/// @ast-id 510
function fun_getEnteredMarketsArray(var_account) -> var_438_mpos
{
let _1 := sub(shl(160, 1), 1)
mstore(0, and(var_account, _1))
mstore(0x20, 0x06)
let value := and(shr(48, sload(keccak256(0, 0x40))), 0xffffffff)
let value_1 := and(shr(80, sload(keccak256(0, 0x40))), _1)
let _2 := array_allocation_size_array_uint32_dyn(value)
let memPtr := mload(0x40)
finalize_allocation(memPtr, _2)
mstore(memPtr, value)
calldatacopy(add(memPtr, 0x20), calldatasize(), add(array_allocation_size_array_uint32_dyn(value), not(31)))
if iszero(value)
{
var_438_mpos := memPtr
leave
}
let _3 := mapping_index_access_mapping_address_address_of_address_12656(var_account)
write_to_memory_address(memory_array_index_access_uint32_dyn_12584(memPtr), value_1)
let var_i := 1
for { }
lt(var_i, value)
{
var_i := increment_uint256(var_i)
}
{
let _4, _5 := storage_array_index_access_address_ptr(_3, var_i)
write_to_memory_address(memory_array_index_access_uint32_dyn(memPtr, var_i), extract_from_storage_value_dynamict_address(sload(_4), _5))
}
var_438_mpos := memPtr
}
/// @ast-id 11533
function fun_computeLiquidityRaw(var_account, var_underlyings_mpos) -> var_status_mpos
{
var_status_mpos := allocate_and_zero_memory_struct_struct_LiquidityStatus()
mstore(var_status_mpos, 0x00)
let _1 := add(var_status_mpos, 32)
mstore(_1, 0x00)
let _2 := add(var_status_mpos, 64)
mstore(_2, 0x00)
let _3 := add(var_status_mpos, 96)
mstore(_3, 0x00)
pop(allocate_and_zero_memory_struct_struct_AssetConfig())
let zero_struct_AssetCache_mpos := allocate_and_zero_memory_struct_struct_AssetCache()
let var_i := 0x00
for { }
1
{
var_i := increment_uint256(var_i)
}
{
if iszero(lt(var_i, mload(var_underlyings_mpos))) { break }
let _4 := read_from_memoryt_address(memory_array_index_access_uint32_dyn(var_underlyings_mpos, var_i))
let var_price := 0x00
let var_assetCacheAndPriceInited := 0x00
var_price := 0x00
let var_config_mpos := fun_resolveAssetConfig(_4)
let _5 := mapping_index_access_mapping_address_address_of_address_12628(cleanup_address(mload(var_config_mpos)))
let var_balance := cleanup_uint112(read_from_storage_split_offset_uint112(mapping_index_access_mapping_address_address_of_address(add(_5, 5), var_account)))
let var_owed := cleanup_uint144(read_from_storage_split_offset_uint144(mapping_index_access_mapping_address_address_of_address(add(_5, 5), var_account)))
let expr := iszero(iszero(var_balance))
if expr
{
expr := iszero(iszero(and(cleanup_uint32(mload(add(var_config_mpos, 64))), 0xffffffff)))
}
if expr
{
pop(fun_initAssetCache(_4, _5, zero_struct_AssetCache_mpos))
let var_twap, var_twapPeriod := modifier_FREEMEM_12660(zero_struct_AssetCache_mpos, var_config_mpos)
var_price := var_twap
var_assetCacheAndPriceInited := 0x01
let expr_1 := checked_div_uint256_12661(checked_mul_uint256(div(checked_mul_uint256(var_balance, fun_computeExchangeRate(zero_struct_AssetCache_mpos)), 0x0de0b6b3a7640000), var_twap))
mstore(var_status_mpos, checked_add_uint256(mload(var_status_mpos), checked_div_uint256_12662(checked_mul_uint256(expr_1, cleanup_uint32(cleanup_uint32(mload(add(var_config_mpos, 64))))))))
}
if iszero(iszero(var_owed))
{
if iszero(var_assetCacheAndPriceInited)
{
pop(fun_initAssetCache(_4, _5, zero_struct_AssetCache_mpos))
let var_twap_1, var_twapPeriod_1 := modifier_FREEMEM_12660(zero_struct_AssetCache_mpos, var_config_mpos)
var_price := var_twap_1
}
mstore(_2, increment_uint256(mload(_2)))
if cleanup_bool(mload(add(var_config_mpos, 32))) { write_to_memory_bool(_3) }
let expr_2 := checked_div_uint256_12661(checked_mul_uint256(div(fun_roundUpOwed(zero_struct_AssetCache_mpos, fun_getCurrentOwedExact(_5, zero_struct_AssetCache_mpos, var_account, shr(112, sload(mapping_index_access_mapping_address_address_of_address(add(_5, 5), var_account))))), 0x3b9aca00), var_price))
let _6 := add(var_config_mpos, 96)
let expr_3 := iszero(iszero(and(cleanup_uint32(mload(_6)), 0xffffffff)))
let expr_4 := 0x00
switch expr_3
case 0 {
expr_4 := 0xffffffffffffffffffffffffffffffffffff
}
default {
let expr_5 := checked_mul_uint256_12666(expr_2)
expr_4 := checked_div_uint256(expr_5, cleanup_uint32(cleanup_uint32(mload(_6))))
}
mstore(_1, checked_add_uint256(mload(_1), expr_4))
}
}
}
/// @ast-id 1440
function fun_computeExchangeRate(var_assetCache_1412_mpos) -> var
{
let _1 := add(var_assetCache_1412_mpos, 32)
let _2 := 0xffffffffffffffffffffffffffff
if iszero(and(mload(_1), _2))
{
var := 0x0de0b6b3a7640000
leave
}
let _3 := mload(add(var_assetCache_1412_mpos, 384))
let expr := checked_add_uint256(_3, div(and(mload(add(var_assetCache_1412_mpos, 64)), 0xffffffffffffffffffffffffffffffffffff), 0x3b9aca00))
let _4 := 0x0de0b6b3a7640000
if and(iszero(iszero(expr)), gt(_4, div(not(0), expr))) { panic_error_0x11() }
let cleaned := and(mload(_1), _2)
if iszero(cleaned) { panic_error_0x12() }
var := div(mul(expr, _4), cleaned)
}
/// @ast-id 2027
function fun_getCurrentOwedExact(var_assetStorage_1997_slot, var_assetCache_mpos, var_account, var_owed) -> var
{
if iszero(var_owed)
{
var := 0x00
leave
}
let expr := checked_mul_uint256(var_owed, mload(add(var_assetCache_mpos, 128)))
let _1 := sload(add(mapping_index_access_mapping_address_address_of_address(add(var_assetStorage_1997_slot, 5), var_account), 1))
if iszero(_1) { panic_error_0x12() }
var := div(expr, _1)
}
/// @ast-id 2063
function fun_roundUpOwed(var_assetCache_2030_mpos, var_owed) -> var_
{
if iszero(var_owed)
{
var_ := 0x00
leave
}
let _1 := mload(add(var_assetCache_2030_mpos, 416))
let _2 := 0x3b9aca00
let product := mul(_2, _1)
if iszero(product) { panic_error_0x12() }
var_ := mul(mul(div(add(add(var_owed, product), not(0)), product), _1), _2)
}
/// @ast-id 11632
function fun_computeAssetLiquidities(var_account) -> var_mpos
{
let expr_11567_mpos := fun_getEnteredMarketsArray(var_account)
let _1 := mload(expr_11567_mpos)
let _2 := array_allocation_size_array_uint32_dyn(_1)
let _3 := 64
let memPtr := mload(_3)
finalize_allocation(memPtr, _2)
mstore(memPtr, _1)
let _4 := add(array_allocation_size_array_uint32_dyn(_1), not(31))
let i := 0
let i_1 := i
for { } lt(i_1, _4) { i_1 := add(i_1, 32) }
{
let memPtr_1 := mload(_3)
finalize_allocation_12670(memPtr_1)
mstore(memPtr_1, i)
let _5 := allocate_and_zero_memory_struct_struct_LiquidityStatus()
let _6 := 32
mstore(add(memPtr_1, _6), _5)
mstore(add(add(memPtr, i_1), _6), memPtr_1)
}
let expr_mpos := allocate_and_zero_memory_array_array_address_dyn()
let var_i := i
for { }
0x01
{
var_i := increment_uint256(var_i)
}
{
if iszero(lt(var_i, mload(expr_11567_mpos))) { break }
let _7 := read_from_memoryt_address(memory_array_index_access_uint32_dyn(expr_11567_mpos, var_i))
write_to_memory_address(memory_array_index_access_uint32_dyn_12584(expr_mpos), _7)
write_to_memory_address(mload(memory_array_index_access_uint32_dyn(memPtr, var_i)), _7)
mstore(add(mload(memory_array_index_access_uint32_dyn(memPtr, var_i)), 32), fun_computeLiquidityRaw(var_account, expr_mpos))
}
var_mpos := memPtr
}
/// @ast-id 11667
function fun_requireLiquidity(var_account)
{
pop(allocate_and_zero_memory_struct_struct_LiquidityStatus())
let var_mpos := fun_computeLiquidityRaw(var_account, fun_getEnteredMarketsArray(var_account))
let expr := iszero(mload(add(var_mpos, 96)))
if iszero(expr)
{
expr := eq(mload(add(var_mpos, 64)), 0x01)
}
if iszero(expr)
{
let memPtr := mload(64)
mstore(memPtr, shl(229, 4594637))
mstore(add(memPtr, 4), 32)
mstore(add(memPtr, 36), 28)
mstore(add(memPtr, 68), "e/borrow-isolation-violation")
revert(memPtr, 100)
}
let _1 := mload(var_mpos)
if lt(_1, mload(add(var_mpos, 32)))
{
let memPtr_1 := mload(64)
mstore(memPtr_1, shl(229, 4594637))
mstore(add(memPtr_1, 4), 32)
mstore(add(memPtr_1, 36), 22)
mstore(add(memPtr_1, 68), "e/collateral-violation")
revert(memPtr_1, 100)
}
}
function require_helper(condition)
{
if iszero(condition) { revert(0, 0) }
}
/// @ast-id 13238
function fun_mulDiv_22854(var_a, var_b) -> var_result
{
let usr$mm := mulmod(var_a, var_b, not(0))
let var_prod0 := mul(var_a, var_b)
let _1 := lt(usr$mm, var_prod0)
let _2 := sub(usr$mm, var_prod0)
let var_prod1 := sub(_2, _1)
if eq(_2, _1)
{
var_result := div(var_prod0, 0x12725dd1d243aba0e75fe645cc4873f9e6)
leave
}
let _3 := 0x12725dd1d243aba0e75fe645cc4873f9e6
if iszero(gt(_3, var_prod1)) { revert(0, 0) }
let var_remainder := mulmod(var_a, var_b, _3)
var_result := mul(or(shr(0x01, sub(var_prod0, var_remainder)), shl(255, sub(var_prod1, gt(var_remainder, var_prod0)))), 0x80bf433070d530fec992d281993084ea0851f19952bccb6b6d6a90f542af7c3b)
}
/// @ast-id 13238
function fun_mulDiv(var_a, var_b, var_denominator) -> var_result
{
let usr$mm := mulmod(var_a, var_b, not(0))
let var_prod0 := mul(var_a, var_b)
let _1 := lt(usr$mm, var_prod0)
let _2 := sub(usr$mm, var_prod0)
let var_prod1 := sub(_2, _1)
if eq(_2, _1)
{
require_helper(iszero(iszero(var_denominator)))
var_result := div(var_prod0, var_denominator)
leave
}
require_helper(gt(var_denominator, var_prod1))
let var_remainder := mulmod(var_a, var_b, var_denominator)
let expr := and(var_denominator, add(not(var_denominator), 0x01))
let var_denominator_1 := div(var_denominator, expr)
let _3 := 0x02
let expr_1 := xor(mul(0x03, var_denominator_1), _3)
let expr_2 := mul(expr_1, sub(_3, mul(var_denominator_1, expr_1)))
let expr_3 := mul(expr_2, sub(_3, mul(var_denominator_1, expr_2)))
let expr_4 := mul(expr_3, sub(_3, mul(var_denominator_1, expr_3)))
let expr_5 := mul(expr_4, sub(_3, mul(var_denominator_1, expr_4)))
let expr_6 := mul(expr_5, sub(_3, mul(var_denominator_1, expr_5)))
var_result := mul(or(div(sub(var_prod0, var_remainder), expr), mul(sub(var_prod1, gt(var_remainder, var_prod0)), add(div(sub(0, expr), expr), 0x01))), mul(expr_6, sub(_3, mul(var_denominator_1, expr_6))))
}
/// @ast-id 13412
function fun_rpow(var_x, var_n) -> var_z
{
switch var_x
case 0 {
switch var_n
case 0 {
var_z := 0x033b2e3c9fd0803ce8000000
}
default { var_z := 0 }
}
default {
let _1 := 1
switch and(var_n, _1)
case 0 {
var_z := 0x033b2e3c9fd0803ce8000000
}
default { var_z := var_x }
var_n := shr(_1, var_n)
for { } var_n { var_n := shr(_1, var_n) }
{
let usr$xx := mul(var_x, var_x)
if iszero(eq(div(usr$xx, var_x), var_x))
{
let _2 := 0
revert(_2, _2)
}
let _3 := 0x019d971e4fe8401e74000000
let usr$xxRound := add(usr$xx, _3)
if lt(usr$xxRound, usr$xx)
{
let _4 := 0
revert(_4, _4)
}
let _5 := 0x033b2e3c9fd0803ce8000000
var_x := div(usr$xxRound, _5)
if and(var_n, _1)
{
let usr$zx := mul(var_z, var_x)
if and(iszero(iszero(var_x)), iszero(eq(div(usr$zx, var_x), var_z)))
{
let _6 := 0
revert(_6, _6)
}
let usr$zxRound := add(usr$zx, _3)
if lt(usr$zxRound, usr$zx)
{
let _7 := 0
revert(_7, _7)
}
var_z := div(usr$zxRound, _5)
}
}
}
}
function require_helper_stringliteral_846b(condition)
{
if iszero(condition)
{
let memPtr := mload(64)
mstore(memPtr, shl(229, 4594637))
mstore(add(memPtr, 4), 32)
mstore(add(memPtr, 36), 1)
mstore(add(memPtr, 68), "T")
revert(memPtr, 100)
}
}
/// @ast-id 13812
function fun_getSqrtRatioAtTick(var_tick) -> var_sqrtPriceX96
{
let _1 := signextend(2, var_tick)
let expr := 0x00
switch slt(_1, expr)
case 0 { expr := _1 }
default { expr := sub(0x00, _1) }
require_helper_stringliteral_846b(iszero(gt(expr, 887272)))
let expr_1 := 0x00
switch iszero(iszero(and(expr, 0x01)))
case 0 { expr_1 := shl(128, 1) }
default {
expr_1 := 0xfffcb933bd6fad37aa2d162d1a594001
}
let var_ratio := and(expr_1, 0xffffffffffffffffffffffffffffffffff)
if iszero(iszero(and(expr, 2)))
{
var_ratio := shr(128, mul(var_ratio, 0xfff97272373d413259a46990580e213a))
}
if iszero(iszero(and(expr, 0x04)))
{
var_ratio := shr(128, mul(var_ratio, 0xfff2e50f5f656932ef12357cf3c7fdcc))
}
if iszero(iszero(and(expr, 0x08)))
{
var_ratio := shr(128, mul(var_ratio, 0xffe5caca7e10e4e61c3624eaa0941cd0))
}
if iszero(iszero(and(expr, 0x10)))
{
var_ratio := shr(128, mul(var_ratio, 0xffcb9843d60f6159c9db58835c926644))
}
if iszero(iszero(and(expr, 0x20)))
{
var_ratio := shr(128, mul(var_ratio, 0xff973b41fa98c081472e6896dfb254c0))
}
if iszero(iszero(and(expr, 0x40)))
{
var_ratio := shr(128, mul(var_ratio, 0xff2ea16466c96a3843ec78b326b52861))
}
let _2 := 0x80
if iszero(iszero(and(expr, _2)))
{
var_ratio := shr(_2, mul(var_ratio, 0xfe5dee046a99a2a811c461f1969c3053))
}
if iszero(iszero(and(expr, 0x0100)))
{
var_ratio := shr(_2, mul(var_ratio, 0xfcbe86c7900a88aedcffc83b479aa3a4))
}
if iszero(iszero(and(expr, 0x0200)))
{
var_ratio := shr(_2, mul(var_ratio, 0xf987a7253ac413176f2b074cf7815e54))
}
if iszero(iszero(and(expr, 0x0400)))
{
var_ratio := shr(_2, mul(var_ratio, 0xf3392b0822b70005940c7a398e4b70f3))
}
if iszero(iszero(and(expr, 0x0800)))
{
var_ratio := shr(_2, mul(var_ratio, 0xe7159475a2c29b7443b29c7fa6e889d9))
}
if iszero(iszero(and(expr, 0x1000)))
{
var_ratio := shr(_2, mul(var_ratio, 0xd097f3bdfd2022b8845ad8f792aa5825))
}
if iszero(iszero(and(expr, 0x2000)))
{
var_ratio := shr(_2, mul(var_ratio, 0xa9f746462d870fdf8a65dc1f90e061e5))
}
if iszero(iszero(and(expr, 0x4000)))
{
var_ratio := shr(_2, mul(var_ratio, 0x70d869a156d2a1b890bb3df62baf32f7))
}
if iszero(iszero(and(expr, 0x8000)))
{
var_ratio := shr(_2, mul(var_ratio, 0x31be135f97d08fd981231505542fcfa6))
}
if iszero(iszero(and(expr, 0x010000)))
{
var_ratio := shr(_2, mul(var_ratio, 0x09aa508b5b7a84e1c677de54f3e99bc9))
}
if iszero(iszero(and(expr, 0x020000)))
{
var_ratio := shr(_2, mul(var_ratio, 0x5d6af8dedb81196699c329225ee604))
}
if iszero(iszero(and(expr, 0x040000)))
{
var_ratio := shr(_2, mul(var_ratio, 0x2216e584f5fa1ea926041bedfe98))
}
if iszero(iszero(and(expr, 0x080000)))
{
var_ratio := shr(_2, mul(var_ratio, 0x048a170391f7dc42444e8fa2))
}
if sgt(_1, 0x00)
{
var_ratio := checked_div_uint256_12692(var_ratio)
}
let expr_2 := 0x00
switch iszero(and(var_ratio, 0xffffffff))
case 0 { expr_2 := 0x01 }
default { expr_2 := 0x00 }
var_sqrtPriceX96 := and(add(shr(0x20, var_ratio), and(expr_2, 0xff)), sub(shl(160, 1), 1))
}
}
// ----